今天小编给大家分享一下Java怎么实现简单控制台版ATM系统的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
ATM系统项目
ATM系统要实现的功能
1.查询:账号必须存在,密码(三次机会,不对就锁卡)
2.取款:账号必须存在,密码(三次机会,不对就锁卡),取款金额不能大于存款
3.存款:账号必须存在,存款金额不能低于0
4.转帐:你的账户,转款账户都必须存在,密码(三次机会,不对就锁卡),转账金额不能超过余额
5.锁卡:账号必须存在,使用密码冻结
6.解卡:账号必须存在,只能使用身份证号进行解锁
7.补卡:使用身份证进行补卡
8.改密:愿密码进行改密,也可以使用身份证进行改密
9.退出: 保存数据
项目分析
可分为四个对象,第一个 银行卡对象(Card 存储银行卡信息);第二个 用户对象(Person 存储用户信息);第三个 功能对象( Controller 具体的操作功能类);视图对象( Views 显示操作界面)。从而可分为四个类
代码
Card类
封装卡的属性(卡号,密码,余额,锁卡状态)
public class Card { //封装卡的属性 private String cardid; private String password; private double money; private boolean islock; //设置封装的各属性的set、get方法 public String getCardid() { return cardid; } public void setCardid(String cardid) { this.cardid = cardid; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public boolean isIslock() { return islock; } public void setIslock(boolean islock) { this.islock = islock; } //重写 to String方法 @Override public String toString() { return "Card [cardid=" + cardid + ", password=" + password + ", money=" + money + ", islock=" + islock + "]"; } //构造卡的无参和有参构造方法 public Card() { super(); } public Card(String cardid, String password, double money, boolean islook) { super(); this.cardid = cardid; this.password = password; this.money = money; this.islock = islock; } }
Person类
封装用户信息(用户名,身份证号,手机号码,卡)
public class Person { private String name; private String userid; private String phone; private Card[] card; //设置封装的各属性的set、get方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public Card[] getCard() { return card; } public void setCard(Card[] card) { this.card = card; } //重写 to String方法 @Override public String toString() { return "Person [name=" + name + ", userid=" + userid + ", phone=" + phone + ", card=" + card+ "]"; } //构造无参和有参方法 public Person() { super(); } public Person(String name, String userid, String phone, Card[] card) { super(); this.name = name; this.userid = userid; this.phone = phone; this.card = card; } }
Controller类
创建三个默认账户信息,并构造操作方法
public class Controller { Scanner sc = new Scanner(System.in); Card c = new Card() ; //生成卡 //创建三组信息 Card c1 = new Card("1","666666",1000,false); //默认账户1 Card c2 = new Card("2","666666",1500,false); //默认账户2 Card c3 = new Card("3","666666",1800,false); //默认账户3 public void regiser(String name,String userid,String phone,Card[] card) { //将Person类的属性赋给对象p Person p = new Person(name,userid,phone,card); } public void query(Person p) { System.out.println(p); } public boolean verify(String cardid,String password) { if(cardid.equals("1")&&password.equals("666666")) { //如果输入的是账户1的账户密码,就得到账户1属性 c.setMoney(c1.getMoney()); c.setPassword(c1.getPassword()); if(!c.isIslock()) { //判断账户1是否被锁 return true; }else { System.out.println("抱歉,该卡已被锁"); return false; } } if(cardid.equals("2")&&password.equals("666666")) { //如果输入的是账户2的账户密码,就得到账户2属性 c.setMoney(c2.getMoney()); c.setPassword(c2.getPassword()); //判断该卡是否被锁 if(!c.isIslock()) { //判断账户2是否被锁 return true; } } if (cardid.equals("3")&&password.equals("666666")) { //如果输入的是账户3的账户密码,就得到账户3属性 c.setMoney(c3.getMoney()); c.setPassword(c3.getPassword()); if(!c.isIslock()) { //判断账户3是否被锁 return true; } } return false; //一个账户信息都没对上,重新输入 } //构造查询方法 public void query(String cardid) { if(cardid.equals("1")) { //查询账户1 System.out.println(c.getMoney()); }else if(cardid.equals("2")) { //查询账户2 System.out.println(c.getMoney()); }else if(cardid.equals("3")) { //查询账户3 System.out.println(c.getMoney()); }else { System.out.println("输入有误"); } } //构造取钱方法 public void putMoney() { System.out.print("请输入需要取出的金额(将金额再确认一遍):"); double money = sc.nextDouble(); //判断钱够不够 if(money<=c.getMoney()) { money = c.getMoney()-money; c.setMoney(money); //钱够取出并更新账户余额 System.out.println("已取出"+sc.nextDouble()+"元"); System.out.println("账户余额为:"+money+"元"); }else { System.out.println("对不起,账户余额不足"); } } //构造存钱方法 public void addMoney() { System.out.println("请将纸币放于存钞口(将金额再确认一遍)"); double money = sc.nextDouble(); money = c.getMoney()+money; c.setMoney(money); //存钱并更新账户余额 System.out.println("已存入"+sc.nextDouble()+"元"); System.out.println("账户余额为:"+money+"元"); } //构造转钱方法 public void saveMoney() { System.out.println("请输入需要转入账户名:"); String name = sc.next(); System.out.print("请输入转入金额(将金额再确认一遍):"); double money = sc.nextDouble(); //判断钱够不够 if(c.getMoney()>=money) { money = c.getMoney()-money; c.setMoney(money); //钱够转钱 更新账户余额 System.out.println("已转出"+sc.nextDouble()+"元"); System.out.println("账户余额为:"+money+"元"); }else { //钱不够返回 System.out.println("对不起,账户余额不足"); } } //构造锁卡方法 public void lock() { c.setIslock(true); System.out.println("该卡已被锁"); } //构造解卡方法 public void unlock() { c.setIslock(false); System.out.println("该卡可正常使用"); } //构造补卡方法 public void newCard() { System.out.println("请输入您的姓名:"); String name = sc.nextLine(); System.out.println("请输入您的身份证号码:"); String userid = sc.nextLine(); Person p = new Person(name,userid,null,null); System.out.println("请输入重办账户号码:"); String cardid = sc.nextLine(); System.out.println("请输入要设置的密码(数字):"); String password = sc.nextLine(); //限制密码位数 if(password.length()==6) { System.out.println("密码设置成功"); }else { System.out.println("密码限制6位,请重新选择功能"); } } //构造改密方法 public void changePwd() { System.out.println("请输入密码:"); String password = sc.next(); if(password.equals(c.getPassword())){ System.out.println("请输入更改后的密码:"); String newpassword = sc.next(); System.out.println("再输入一次密码:"); String newpassword1 = sc.next(); if(newpassword.equals(newpassword1)) { System.out.println("密码修改成功!"); c.setPassword(newpassword1); }else { System.out.println("两次密码输入不一致,请重新输入"); changePwd(); } }else { System.out.println(c.getPassword()); System.out.println("密码输入错误"); } } //构造退出方法 public void save() { System.exit(0); } }
View类
实现欢迎界面以及各操作界面
public class View { Scanner s = new Scanner(System.in); private int count = 3; Card c =new Card(); Controller co = new Controller(); public static void main(String[] args) { View v = new View(); v.show(); } public void show() { System.out.println("=============欢迎使用使用本行存取一体机============="); System.out.println("请输入卡号:"); String cardid = s.nextLine(); System.out.println("请输入密码:"); String password =s.nextLine(); //登录界面,账户密码错三次就锁卡 if(!co.verify(cardid, password)) { count--; if(count == 0) { co.lock(); //调用lock System.out.println("密码输入错误"+c.isIslock()); System.out.println("请重新输入:"); } System.out.println("你还有"+count+"次输入机会,"); System.out.println("输入机会用完后,将会锁卡"); show(); } //如果账户密码正确就进入功能界面 if(co.verify(cardid, password)) { while(true) { System.out.println("请按相应的序号选择功能:1.取款 2.存款 3.查询余额 4.转账 5.修改密码 6.锁卡 7.解卡 8.补卡 9.退出"); switch(s.nextInt()) { case 1: //取款 co.putMoney(); break; case 2: //存钱 co.addMoney(); break; case 3: //查询 co.query(cardid); break; case 4: //转钱 co.saveMoney(); break; case 5: //改密 co.changePwd(); break; case 6: //锁卡 co.lock(); break; case 7: //解卡 co.unlock(); break; case 8: //补卡 co.newCard(); break; case 9: //退出 System.out.println("感谢使用,欢迎下次光临"); co.save(); break; default: //输入指令错误 System.out.println("输入有误"); break; } } } } }