用Java实现简单ATM机功能
本文实例为大家分享了Java实现简单ATM机功能的具体代码,供大家参考,具体内容如下
项目介绍
基于大家使用银行卡在ATM机取款操作,进行相对应ATM机操作流程的实现。
项目功能
1、注册功能:
根据用户输入的账号密码申请一张银行卡,存储在银行卡类型的数组中(一张银行卡对应一个有效用户)。
2、登录功能:
登陆失败:重新登陆 或 注册
登陆成功:对登陆的这张银行卡可以进行一下操作:存款、取款、查余额、转账、退卡功能。
项目知识点
3、java基本语法的使用
4、一维数组
5、函数调用,封装
6、Java类和对象
项目实现思路
7、设计并实现系统的相关打印界面:注册、登陆、登陆后操作
8、登录系统必须输入正确的卡号和密码,输入错误时提示用户重新登陆。
9、实现取款、存款、查余额等功能。
难点
对面向对象编程的理解,以及静态变量和实例变量的理解。
二者区别:
实例变量:跟对象有关,一个对象一份实例变量
静态变量:跟对象无关,一个类一份静态变量
源代码
1.ATM类
public class ATM { private static boolean flag = true; private int id; private int passwd; private BankCard bankCard; private static Bank bank; /* 不写跳1空异常*/ public ATM(){ bank = new Bank(); } Scanner scanner = new Scanner(System.in); public void start(){ int chioce; while (flag == true){ System.out.println("请选择: 1.注册 2.登录 3.退出"); chioce = scanner.nextInt(); switch(chioce){ case 1: System.out.println("请输入账号和密码:"); id = scanner.nextInt(); passwd = scanner.nextInt(); register(id,passwd); break; case 2: System.out.println("请输入账号和密码:"); id = scanner.nextInt(); passwd = scanner.nextInt(); login(id,passwd); break; case 3: flag = false; break; } } } //注册 private void register(int id, int passwd) { //检查此卡号是否存在 if(bank.contains(id)){ System.out.println("此卡号已存在,注册失败!"); } else{ bankCard = new BankCard(id,passwd); bank.add(bankCard); System.out.println("注册成功!"); } } //登录 private void login(int id, int passwd) { //检查此卡号是否存在 if(bank.login(id,passwd)){ System.out.println("登陆成功!"); //登陆成功 返回卡的信息 bankCard = bank.getcard(id,passwd); //调用 ATM功能函数 function(bankCard); }else{ System.out.println("登陆失败! 请重新登录"); } } //ATM功能函数 private void function(BankCard bankCard) { double money; int count = 0; int chioce; while (flag == true){ System.out.println("请选择: 1.存款 2.取款 3.查余额 4.转账 5.退卡"); chioce = scanner.nextInt(); switch(chioce){ case 1: System.out.println("请输入存款金额:"); money = scanner.nextDouble(); bank.setMoney(bankCard,money); System.out.println("存款成功!"); break; case 2: System.out.println("请输入取款金额:"); money = scanner.nextDouble(); if(bank.getMoney(bankCard,money)){ System.out.println("取款成功!"); }else{ System.out.println("余额不足取款失败!"); } break; case 3: System.out.println("余额为:"+bank.getBalance(bankCard)); break; case 4: System.out.println("请输入转账的账号:"); while(flag){ count = scanner.nextInt(); //检查此卡号是否存在 if(!bank.contains(count)){ System.out.println("此卡号不存在,请重新输入:"); } else{ flag =false; } } System.out.println("请输入转账的金额:"); money = scanner.nextDouble(); if(bank.transfer(bankCard,bank.getcard1(count),money)){ System.out.println("转账成功!"); }else{ System.out.println("余额不足,转账失败!"); } break; //莫名结束?? case 5: flag = false; break; } } } }
2.Bank类
public class Bank { private BankCard[] cards; private static int cardsnum = 0; // private static double cardsmoney = 0.0; private static final int INITSIZE = 10; public Bank(){ cards = new BankCard[INITSIZE]; } //查询卡是否存在 public boolean contains(int id) { for(int i=0;i<cardsnum;i++){ if (cards[i].getId() == id){ return true; } } return false; } //登录 public boolean login(int id,int passwd) { for(int i=0;i<cardsnum;i++){ if (cards[i].getId() == id && cards[i].getPasswd() == passwd){ return true; } } return false; } //添加一张银行卡 public void add(BankCard card) { //判断存卡的数组是否已满 if(cards.length == cardsnum){ //数组已满执行扩容操作 cards = Arrays.copyOf(cards,cards.length+(cards.length>>1)); } //银行卡存入银行卡类型数组 cards[cardsnum] = card; //银行卡数+1 cardsnum++; } //输入卡号,密码返回银行卡 public BankCard getcard(int id, int passwd){ for(int i=0;i<cardsnum;i++){ if (cards[i].getId() == id && cards[i].getPasswd() == passwd){ return cards[i]; } } return null; } //存款 public boolean setMoney(BankCard card,double money){ return card.setMoney(money); } //取款 public boolean getMoney(BankCard card,double money){ return card.getMoney(money); } //查余额 public double getBalance(BankCard card){ return card.getBalance(); } //转账 public boolean transfer(BankCard card, BankCard tempcard, double money){ if( card.getMoney(money)){ tempcard.setMoney(money); return true; } return false; } //输入卡号,密码返回银行卡 public BankCard getcard1(int id){ for(int i=0;i<cardsnum;i++){ if (cards[i].getId() == id){ return cards[i]; } } return null; } }
3.BankCard类
public class BankCard { private int id; private int passwd; private double money; public BankCard(int id, int passwd) { this.id = id; this.passwd = passwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getPasswd() { return passwd; } public void setPasswd(int passwd) { this.passwd = passwd; } public boolean getMoney(double money) { if(this.money>=money){ this.money -= money; return true; }else{ return false; } } public boolean setMoney(double deposit) { this.money += deposit; return true; } public double getBalance(){ return this.money; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
SpringBoot + Redis如何解决重复提交问题(幂等)
在开发中,一个对外暴露的接口可能会面临瞬间的大量重复请求,本文就介绍了SpringBoot + Redis如何解决重复提交问题,具有一定的参考价值,感兴趣的可以了解一下2021-12-12Java中Collection集合常用API之 Collection存储自定义类型对象的示例代码
Collection是单列集合的祖宗接口,因此它的功能是全部单列集合都可以继承使用的,这篇文章主要介绍了Java中Collection集合常用API - Collection存储自定义类型对象,需要的朋友可以参考下2022-12-12
最新评论