Java基础综合练习-ATM系统
先创建一个project -> 再创建module -> 创建包package 包名com.domain -> 创建定义 class
例如:整合课程是一个project 每天是一个模块module
包结构示例:
ATMSystem.java
package com.domain; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; /** * ATM 系统的入口类 */ public class ATMSystem { public static void main(String[] args) { // 1、定义账户类 // 2、定义一个集合容器,负责存储全部账户对象负责业务操作 ArrayList accounts = new ArrayList<>(); Scanner sc = new Scanner(System.in); // ctrl + alt + T 包成死循环 while (true){ // 3、展示系统的首页 System.out.println("-----------------------ATM系统-------------------------"); System.out.println("1、账户登录"); System.out.println("2、账户注册"); int command = sc.nextInt(); switch (command) { case 1: // 用户登录 login(accounts, sc); break; case 2: // 用户账户开户 Alt + 回车 自动生成函数 register(accounts); break; default: System.out.println("对不起,您操作的命令不存在!"); } } } private static void login(ArrayList accounts,Scanner sc) { System.out.println("==================系统登陆操作================"); if(accounts.size() == 0) { System.out.println("当前系统还没有账号"); return; } while (true) { System.out.println("请您输入登陆卡号"); String cardId = sc.next(); // 判断卡号是否存在 Account acc = getAccountByCardId(cardId, accounts); if(acc != null) { System.out.println("请输入登陆密码:"); String pwd = sc.next(); if(acc.getPassWord().equals(pwd)) { // 登陆成功 System.out.println("恭喜您" + acc.getUserName() + "登陆成功,您的卡号是" + acc.getCardId()); // 展示登陆后的操作页 showUserCommand(sc, acc, accounts); return; } else { System.out.println("您输入的密码有误"); } }else{ System.out.println("抱歉,卡号不存在"); } } } /** 展示登陆后的操作页 */ private static void showUserCommand(Scanner sc, Account acc, ArrayList accounts) { while (true) { 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("7、注销账户"); System.out.println("请选择"); int command = sc.nextInt(); switch(command){ case 1: // 查询账户 showAccount(acc); break; case 2: // 存款 depositMoney(acc, sc); break; case 3: // 取款 drawMoney(acc, sc); break; case 4: // 转账 transferMoney(sc, acc, accounts); break; case 5: // 修改密码 updatePassWord(sc, acc); return; case 6: // 退出 System.out.println("退出成功"); return; // 当前方法停止执行 case 7: // 注销账户 if(deleteAccount(acc, sc, accounts)) { // 销户成功,回到首页 return; } else { break; } default: System.out.println("您输入的操作命令不正确"); } } } /** * 销户功能 * @param acc * @param sc * @param accounts */ private static boolean deleteAccount(Account acc, Scanner sc, ArrayList accounts) { System.out.println("==================用户销户================"); System.out.println("您真的要销户? y/n"); String rs = sc.next(); switch (rs) { case "y": // 销户开始 if(acc.getMoney() > 0){ System.out.println("您还有资金,无法销户"); } else { accounts.remove(acc); System.out.println("销户完成"); return true; } break; default: System.out.println("账户继续保留"); } return false; } /** * 修改密码 * @param sc 扫描器 * @param acc 当前登录成功账户 */ private static void updatePassWord(Scanner sc, Account acc) { System.out.println("==================用户密码修改================"); while (true) { System.out.println("请您输入当前密码:"); String passWord = sc.next(); // 1、 判断密码是否正确 if(acc.getPassWord().equals(passWord)) { // 密码正确,输入新密码 System.out.println("请输入新密码:"); String newPassWord = sc.next(); System.out.println("请确认新密码:"); String okPassWord = sc.next(); if(newPassWord.equals(okPassWord)) { // 两次密码输入一致可以修改 acc.setPassWord(newPassWord); System.out.println("恭喜,密码修改成功"); return; } else { System.out.println("两次密码输入不一致"); } } else { System.out.println("您输入的密码不正确"); } } } /** * 转账 * @param sc * @param acc * @param accounts */ private static void transferMoney(Scanner sc, Account acc, ArrayList accounts) { System.out.println("==================用户转账================"); if (accounts.size() < 2) { System.out.println("当前系统中不足2个账户"); return; } if (acc.getMoney() == 0) { System.out.println("余额为0,不能转账"); return; } while (true) { System.out.println("请输入对方账户卡号:"); String cardId = sc.next(); if (cardId.equals(acc.getCardId())) { System.out.println("对不起,不能给自己转账"); continue; } // 判断卡号是否存在 Account account = getAccountByCardId(cardId, accounts); if (account == null) { System.out.println("对方卡号不存在"); } else { String userName = account.getUserName(); String tip = "*" + userName.substring(1); System.out.println("请您输入["+ tip +"]的姓氏"); String preName = sc.next(); // 判断姓氏是否正确 if(userName.startsWith(preName)) { while (true) { // 认证通过开始转账 System.out.println("请输入转账金额:"); double money = sc.nextDouble(); if (money > acc.getMoney()) { System.out.println("对不起余额不足,您最多可以转账" + acc.getMoney()); } else { // 余额充足,开始转账 acc.setMoney(acc.getMoney() - money); account.setMoney(account.getMoney() + money); System.out.println("转账成功!您的账户剩余" + acc.getMoney()); return; } } } else { System.out.println("对不起,您输入的信息有误"); } } } } /** * 存款 * @param acc 当前账户对象 * @param sc 扫描器 */ private static void depositMoney(Account acc, Scanner sc) { System.out.println("==================用户存款================"); System.out.println("请输入存款金额:"); double money = sc.nextDouble(); acc.setMoney(acc.getMoney() + money); System.out.println("恭喜,存款成功,账户信息:"); showAccount(acc); } /** * 取款 * @param acc * @param sc */ private static void drawMoney(Account acc, Scanner sc) { System.out.println("==================用户取款================"); if (acc.getMoney() < 100) { System.out.println("金额不足100元"); return; } System.out.println("请输入取款金额"); double money = sc.nextDouble(); if (money > acc.getQuotaMoney()) { System.out.println("取款超过单次限额,限额" + acc.getQuotaMoney()); } else { // 检查余额 if (money > acc.getMoney()) { System.out.println("余额不足,当前余额:" + acc.getMoney()); } else { acc.setMoney(acc.getMoney() - money); System.out.println("取款成功,当前账户信息:"); showAccount(acc); return; } } } /** * 展示账户信息 * @param acc */ private static void showAccount(Account acc) { System.out.println("==================当前账户信息如下================"); System.out.println("卡号" + acc.getCardId()); System.out.println("姓名" + acc.getUserName()); System.out.println("余额" + acc.getMoney()); System.out.println("限额" + acc.getQuotaMoney()); } /** * 用户开户功能的实现 * @param accounts 接收账户的集合 */ private static void register(ArrayList accounts) { System.out.println("==================系统开户操作================"); // 1、创建一个账户集合 Account account = new Account(); // 2、录入账户信息 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String userName = sc.next(); account.setUserName(userName); while(true) { System.out.println("请输入密码:"); String pwd1 = sc.next(); System.out.println("再次输入密码:"); String pwd2 = sc.next(); if(pwd2.equals(pwd1)){ // 两次密码输入一致 account.setPassWord(pwd1); break; }else{ System.out.println("两次密码输入不一致,请检查"); } } System.out.println("请输入当前限额:"); double quotaMoney = sc.nextDouble(); account.setQuotaMoney(quotaMoney); // 为账户随机生成8位不重复卡号 String cardId = getRandCardId(accounts); account.setCardId(cardId); // 3、添加到集合中 accounts.add(account); System.out.println("恭喜您" + userName + "成功开卡,卡号 "+ cardId); } /** * 为账户生成8位随机不重复卡号 * @return */ private static String getRandCardId(ArrayList accounts){ Random r = new Random(); while(true) { String randNumber = ""; for (int i = 0; i < 8; i++) { randNumber += r.nextInt(10); } // 判断卡号是否重复 Account acc = getAccountByCardId(randNumber, accounts); if(acc == null) { return randNumber; } } } /** * 根据卡号获取账户 * @param cardId 卡号 * @param accounts 账户集合 * @return */ private static Account getAccountByCardId(String cardId, ArrayList accounts){ for (int i = 0; i < accounts.size(); i++) { Account acc = accounts.get(i); if(cardId.equals(acc.getCardId())) { return acc; } } return null; } }
Account.java
package com.domain; /** * 账户类 */ public class Account { /** * 成员变量 私有 */ private String cardId; private String userName; // 用户名 private String passWord; // 密码 private double money; // 账户余额 private double quotaMoney; // 每次取现额度 public String getCardId() { return cardId; } public void setCardId(String cardId) { this.cardId = cardId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } 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 double getQuotaMoney() { return quotaMoney; } public void setQuotaMoney(double quotaMoney) { this.quotaMoney = quotaMoney; } }