一、 #include<bits/stdc++.h> public class ATM { java.util.Scanner input=new java.util.Scanner(System.in); private Bank bank=new Bank(); private User user=null; public void start(){ System.out.println("欢迎使用自助银行服务!"); System.out.println("1.开户"); System.out.println("2.插卡"); System.out.println("3.系统管理"); System.out.println("4.退出"); System.out.println("-----------------"); System.out.println("请选择所需要的服务:"); String index=input.next(); if("1".equals(index)){ createUser(); }else if("2".equals(index)){ login(); }else if("3".equals(index)){ admin(); }else if("4".equals(index)){ System.exit(0); }else{ System.out.println("输入错误!"); } start(); } /** * 系统管理 */ private void admin() { System.out.println("请输入管理员口令:"); String key=input.next(); if("123123".equals(key)){ adminMenu(); }else{ System.out.println("口令输入错误!"); } } /** * 系统管理菜单 */ private void adminMenu() { System.out.println("--------------"); System.out.println("1.显示所有用户"); System.out.println("2.冻结账户"); System.out.println("3.恢复账户"); System.out.println("4.退出"); System.out.println("--------------"); System.out.println("请选择:"); String index=input.next(); if("1".equals(index)){ //显示所有用户 showAllUser(); }else if("2".equals(index)){ //冻结账户 disableUser(); }else if("3".equals(index)){ //恢复账户 enableUser(); }else if("4".equals(index)){ //退出 start(); }else{ System.out.println("输入错误,请重新选择!"); } adminMenu(); } /** * 恢复账户 */ private void enableUser() { System.out.println("请输入要恢复的账户:"); String name=input.next(); User u=bank.validateUser(name); if(u!=null){ if(!u.isEnable()){ u.setEnable(true); System.out.println("恢复成功!"); }else{ System.out.println("该账户为可用状态!"); } }else{ System.out.println("该账户不存在!"); } } /** * 冻结账户 */ private void disableUser() { System.out.println("输入要冻结的账户名:"); String name=input.next(); User u=bank.validateUser(name); if(u!=null){ if(u.isEnable()){ u.setEnable(false); System.out.println("冻结成功!"); }else{ System.out.println("该账户已被冻结!"); } }else{ System.out.println("该账户不存在!"); } } /** * 显示所有用户 */ private void showAllUser() { User[] users=bank.getUser(); System.out.println("账户名"+"\t\t"+"状态"); for (int i = 0; i < users.length; i++) { if(users[i]!=null){ System.out.println(users[i].getName()+"\t\t"+(users[i].isEnable()?"可用":"不可用")); } } } /** * 插卡 */ private void login() { System.out.println("请输入账户名:"); String name=input.next(); System.out.println("请输入密码:"); String password=input.next(); user=bank.validateNameAndPassword(name,password); if(user!=null){ if(user!=null){ System.out.println("登录成功!"); customerMenu(); }else{ System.out.println("账户名或密码错误!"); } } } /** * 插卡下拉菜单 */ private void customerMenu() { System.out.println("-------------"); System.out.println("1.显示余额"); System.out.println("2.存款"); System.out.println("3.取款"); System.out.println("4.转账"); System.out.println("5.修改密码"); System.out.println("6.退出"); System.out.println("-------------"); System.out.println("请选择所需服务:"); String index=input.next(); if("1".equals(index)){ //显示余额 showMoney(); }else if("2".equals(index)){ //存款 saveMoney(); }else if("3".equals(index)){ //取款 getMoney(); }else if("4".equals(index)){ //转账 tranMoney(); }else if("5".equals(index)){ //修改密码 changePW(); }else if("6".equals(index)){ //退出 start(); }else{ System.out.println("输入错误,请重新输入!"); } customerMenu(); } /** * 修改密码 */ private void changePW() { System.out.println("请输入原始密码:"); String oldPW=input.next(); if(user.getPassword().equals(oldPW)){ System.out.println("请输入新密码:"); String newPW=input.next(); user.setPassword(newPW); System.out.println("密码修改成功!"); }else{ System.out.println("密码输入错误!"); } } /** * 转账 */ private void tranMoney() { System.out.println("输入要转入的账户名:"); String name=input.next(); User u=bank.validateUser(name); if(u!=null){ System.out.println("输入要转入的金额:"); float money=input.nextFloat(); if(money>=0&&money<=user.getMoney()){ user.setMoney(user.getMoney()-money); u.setMoney(u.getMoney()+money); System.out.println("转账成功!"); }else{ System.out.println("输入的金额有误!"); } }else{ System.out.println("要转入的账户不存在!"); } } /** * 取款 */ private void getMoney() { System.out.println("请输入取款金额:"); float money=input.nextFloat(); if(money>=0){ if(money<=user.getMoney()){ user.setMoney(user.getMoney()-money); System.out.println("取款成功!"); }else{ System.out.println("余额不足!"); } }else{ System.out.println("输入的取款金额有误,请重新输入!"); saveMoney(); } } /** * 存款 */ private void saveMoney() { System.out.println("请输入存款金额:"); float money=input.nextFloat(); if(money>=0){ user.setMoney(user.getMoney()+money); System.out.println("存款成功!"); }else{ System.out.println("输入的金额有误,请重新输入!"); saveMoney(); } } /** * 显示余额 */ private void showMoney() { System.out.println("您的当前余额为:"+user.getMoney()+"元"); } /** * 开户 */ private void createUser() { System.out.println("请输入账户名:"); String name=input.next(); User u=bank.validateUser(name); if(u==null){ System.out.println("请输入密码:"); String password=input.next(); //保存账户 User user=new User(); user.setName(name); user.setPassword(password); user.setMoney(0F); user.setEnable(true); boolean isSave=bank.saveUser(user); if(isSave){ System.out.println("开户成功!"); }else{ System.out.println("银行名额已满!请使用其他银行!"); } } } }
二 public class ATMMachine { private UserInfo[] allUsers;// ATM中的用户信息 private UserInfo theUser; // 当前操作用户 private int cash;// 现金 public final int MAX_CASH = 200000;// 最大现金额 // 构造方法 public ATMMachine() { this.allUsers = new UserInfo[5]; // 用一个数组来装五个用户的信息 for (int i = 0; i < this.allUsers.length; i++) { this.allUsers[i] = new UserInfo("12345" + i, "12345" + i, 10000 + i * 1000); // 用循环来表示每个人的账户和密码 } this.cash = 100000; // 给现金赋值 } // 运行--控制ATM机的运行流程 public void run() { this.welcome(); // 调用欢迎的方法 if (this.login()) { // 调用login方法,并判断 System.out.println("欢迎您,登录成功!"); while (true) { // 用一个循环来使我们可以一直操作 switch (this.choiceMenu()) { case 1: this.query(); break; case 2: this.getMoney(); break; case 3: this.storeMoney(); break; case 4: this.changePwd(); break; case 5: this.exit(); break; default: System.out.println("没有该选项"); } } } else { System.out.println("三次登录失败,您的卡已经被没收!"); System.out.println("请在工作日带上有效证件,到柜台处理!"); } } // 欢迎 private void welcome() { System.out.println("***************************"); System.out.println("**********欢**迎**********"); System.out.println("**********使**用**********"); System.out.println("***********ICBC***********"); System.out.println("***************************"); } // 登录 private boolean login() { for (int i = 0; i < 3; i++) { // 循环给用户三次输入的机会 Scanner scan = new Scanner(System.in); System.out.println("请输入用户名:"); String inputName = scan.next(); System.out.println("请输入密 码:"); String inputPwd = scan.next(); for (int j = 0; j < this.allUsers.length; j++) { // 嵌套一个循环判断用户输入的正误 if (inputName.equals(this.allUsers[j].getUsername()) && inputPwd.equals(this.allUsers[j].getPassword())) { this.theUser = this.allUsers[j]; // 若正确,返回一个true return true; } } System.out.println("用户名密码有误,您还有" + (2 - i) + "次机会!"); } return false; } // 选择菜单 private int choiceMenu() { while (true) { try { // 异常处理 System.out.println("请选择您要执行的操作:"); System.out.println("1、查询;2、取款;3、存款;4、修改密码;5、退出"); Scanner scan = new Scanner(System.in); int choice = scan.nextInt(); // 接收选择 return choice; } catch (InputMismatchException i) { // TODO: handle exception System.out.println("请输入有效数字!"); } } } // 查询 private void query() { System.out.println("您当前的余额是:" + this.theUser.getAccount() + "元!"); // 调用theuser的getAccount } // 取款 private void getMoney() { try { System.out.println("请输入取款金额:"); Scanner scan = new Scanner(System.in); int inputMoney = scan.nextInt(); // 取款金额 if (inputMoney <= 0) { // 以下都是判断取款金额是否符合要求 System.out.println("你见过哪家银行取负数的钱?"); } else if (inputMoney % 100 != 0) { System.out.println("本ATM只支持100的整数!"); } else if (inputMoney >= this.theUser.getAccount()) { // 要取的钱和他账户上有的钱进行判断 System.out.println("您账户的余额不足!"); } else if (inputMoney > this.cash) { // 要取的钱和ATM机上的钱进行判断 System.out.println("本ATM现金不足!"); } else { this.theUser.setAccount(this.theUser.getAccount() - inputMoney); // 取款成功后的账户上所剩的钱 this.cash -= inputMoney; System.out.println("取款成功!现在余额是:" + this.theUser.getAccount()); } } catch (InputMismatchException i) { // TODO: handle exception System.out.println("请输入有效的取款金额!"); } } // 存款 private void storeMoney() { try { System.out.println("请输入存款金额:"); Scanner scan = new Scanner(System.in); int inputMoney = scan.nextInt(); if (inputMoney <= 0) { // 以下都是判断存款金额是否符合要求 System.out.println("取款金额不能为负数!"); } else if (inputMoney % 100 != 0) { System.out.println("本ATM只支持100的整数!"); } else if (inputMoney + this.cash > this.MAX_CASH) { System.out.println("本ATM现金存放空间不足!"); } else { this.cash += inputMoney; // 存了钱过后ATM机上的钱会增加 this.theUser.setAccount(this.theUser.getAccount() + inputMoney); // 账户的钱也会变化 System.out.println("存款成功!现在余额是:" + this.theUser.getAccount()); } } catch (InputMismatchException i) { // TODO: handle exception System.out.println("请输入有效的存款金额!"); } } // 修改密码 private void changePwd() { Scanner scan = new Scanner(System.in); System.out.println("请输入原密码:"); String oldPwd = scan.next(); try { if (oldPwd.equals(this.theUser.getPassword())) { System.out.println("请输入新密码:"); String newPwd1 = scan.next(); int x = Integer.parseInt(newPwd1); // 将输入的string类型转换为 int类型,赋值给x,如果不能赋值一个整形变量,catch就捕捉这个异常 System.out.println("请确认新密码:"); String newPwd2 = scan.next(); int y = Integer.parseInt(newPwd2); if (newPwd1.length() != 6 && newPwd2.length() != 6) { System.out.println("密码需为六位数!"); } else if (newPwd1.equals(this.theUser.getPassword())) { System.out.println("新密码与原来密码一致,修改失败"); } else if (x == y && newPwd1.length() == 6 && newPwd2.length() == 6) { this.theUser.setPassword(newPwd1); System.out.println("密码修改已经成功!"); this.run(); } else { System.out.println("两次密码不一致,不予修改!"); } } else { System.out.println("密码输入错误!"); } } catch (NumberFormatException i) { // TODO: handle exception System.out.println("密码必须是由 0—9 组成的六位数字!"); } } // 退出 private void exit() { System.out.println("谢谢使用,期待下次光临!"); System.exit(0); }