第一步
第二步 开户
第三步 登录页面
package com.flowerDance.ATM; /** * 账户类 * */ 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; } }
package com.flowerDance.ATM; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class ATMSystem { public static void main(String[] args){ //1.定义账户类 //2、定义一个集合容器,存储全部的账户对象,进行相关的业务操作 ArrayList<Account> accounts = new ArrayList<>(); //3、展示系统的页面 Scanner sc = new Scanner(System.in); while (true) { System.out.println("=========毛富贵银行============"); System.out.println("1、账户登录"); System.out.println("2、账户开户"); System.out.println("请您选择操作:"); int command = sc.nextByte(); switch (command){ case 1: //账户登录 login(accounts,sc); break; case 2: //账户开户(Alt+回车) register(accounts,sc); break; default: System.out.println("无此操作"); } } } /** * 用户登录函数 * @param accounts 账户集合 * @param sc 扫描器 */ private static void login(ArrayList<Account> accounts, Scanner sc) { System.out.println("===========用户登录==========="); //1、查询账户集合是否有账户,没有的话请用户先行注册 if(accounts.size() == 0){ System.out.println("该系统暂无用户,请现行注册"); return; } //登录操作 //通过卡号找账户 System.out.println("请输入卡号:"); String cardId = sc.next(); Account acc = getAccountById(accounts,cardId); if(acc != null){ while (true) { //有账户 System.out.println("请输入密码:"); String passWord = sc.next(); if(passWord.equals(acc.getPassWord())) { //密码输入正确 System.out.println(acc.getUserName()+",欢迎您,您的卡号是"+acc.getCardId()); //后续进行一系列操作 //进入用户操作页 showUserCommand(sc,acc,accounts); return; }else { //密码输入错误 System.out.println("密码输如错误"); } } }else { //查无此账户 System.out.println("账户id输入错误"); return; } } /** * 用户操作页面 * @param sc 扫描器 * @param acc 用户账户 */ private static void showUserCommand(Scanner sc, Account acc, ArrayList<Account> 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(acc,sc); return; case 6: //退出 System.out.println("退出成功,欢迎下次光临"); return; case 7: //注销账户 boolean deleteAccount = deleteAccount(acc, sc, accounts); if (deleteAccount) return; else break; default: System.out.println("没有该操作功能"); } } } /** *用户销户操作 * @param acc 当前用户 * @param sc 扫描器 * @param accounts 用户集合 */ private static boolean deleteAccount(Account acc, Scanner sc, ArrayList<Account> 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; } /** * y用户修改密码操作 * @param acc 用户账户 * @param sc 扫描器 */ private static void updatePassword(Account acc, Scanner sc) { System.out.println("===========用户密码修改==========="); while (true) { System.out.println("请输入用户密码:"); String passWord = sc.next(); if(passWord.equals(acc.getPassWord())){ //用户密码输入正确 while (true) { System.out.println("请输入新密码:"); String passWord1 = sc.next(); System.out.println("请再次输入新密码:"); String passWord1Again = sc.next(); if (passWord1.equals(passWord1Again)){ //修改密码成功 acc.setPassWord(passWord1Again); 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<Account> accounts) { System.out.println("===========用户转账==========="); //首先判断系统中是否有2个及以上账户 if(accounts.size()<2){ System.out.println("该系统无其他账户,无法进行转账操作"); return; } //判断自己账户是否有钱 if(acc.getMoney()==0){ System.out.println("没钱,莫转"); return; } //正式进入转账流程 while (true) { System.out.println("请输入对方账户id:"); String cardId = sc.next(); if(cardId.equals(acc.getCardId())){ System.out.println("不能给自己转账"); continue; } //判断账户是否存在 Account accountById = getAccountById(accounts, cardId); if(accountById == null){ //账户不存在 System.out.println("对方账户不存在"); }else {//账户存在 //验证对方户主姓氏 String name = accountById.getUserName(); String tip = "*" + name.substring(1); System.out.println("对方账户名为"+tip+",请输入姓氏:"); String lastName = sc.next(); if(name.startsWith(lastName)){ //验证信息成功 //开始转账 while (true) { System.out.println("请输入转账金额:"); double transferMoney = sc.nextDouble(); if (transferMoney > acc.getMoney()){ System.out.println("对不起,您的账户并没有那么多钱,您账户余额为"+acc.getMoney()); }else { //有钱,可以进行转账 acc.setMoney(acc.getMoney() - transferMoney); accountById.setMoney(accountById.getMoney() + transferMoney); System.out.println("转账成功"); showAccount(acc); return; } } }else{ //验证信息错误 System.out.println("对方户主姓氏输入错误"); } } } } /** * 取钱功能 * @param acc 用户账户 * @param sc 扫描器 */ private static void drawMoney(Account acc, Scanner sc) { System.out.println("===========用户取钱==========="); //1、先判断账户是否有钱 if (acc.getMoney() < 100){ System.out.println("账户余额小于100,请先存钱"); return; } //账户有钱的情况 while (true) { System.out.println("请输入取款金额:"); double drawMoney = sc.nextDouble(); if (drawMoney > acc.getQuotaMoney()){ System.out.println("取款超过当次取款最大额"); }else{ if(drawMoney > acc.getMoney()){ System.out.println("账户没有那么多钱,当前您账户余额为"+acc.getMoney()); }else { //可以取钱了 System.out.println("取款成功"); acc.setMoney(acc.getMoney()-drawMoney); showAccount(acc); return; } } } } /** * 用户存钱操作 * @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 用户账户 */ 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<Account> accounts,Scanner sc) { //1、创建一个Account账户类的对象用于封装账户信息 //姓名 密码 当次限额 卡号 Account acc = new Account(); System.out.println("===========用户开户==========="); System.out.println("请输入用户姓名:"); String userName = sc.next(); acc.setUserName(userName); //密码设置 surround with crtl+alt+t while (true) { System.out.println("请输入用户密码:"); String passWord = sc.next(); System.out.println("请再次输入密码"); String okWord = sc.next(); if(passWord.equals(okWord)){ System.out.println("密码设置成功"); acc.setPassWord(okWord); break; }else { System.out.println("两次密码输入不一致"); } } System.out.println("请输入账户当次限额:"); double quotaMoney = sc.nextDouble(); acc.setQuotaMoney(quotaMoney); //设置8位数的卡号 String cardId = getRandomCardId(accounts); acc.setCardId(cardId); //将账户存储账户数组 accounts.add(acc); System.out.println(acc.getUserName()+"您好,您的账户已成功创建,账号为"+acc.getCardId()); } /** * 随机产生8位数卡号,且不重复 * @return 8位数卡号 */ private static String getRandomCardId(ArrayList<Account> accounts) { while (true) { //产生8位数卡号 String cardId = ""; Random r = new Random(); for (int i = 0; i < 8; i++) { cardId += r.nextInt(10); } //验证卡号是否有重复 Account acc = getAccountById(accounts,cardId); if(acc == null){ //无重复 return cardId; } } } /** * 验证卡号是否重复 * @param accounts 账户集合 * @param cardId 待验证卡号 * @return 重复的账户 */ private static Account getAccountById(ArrayList<Account> accounts, String cardId) { for (int i = 0; i < accounts.size(); i++) { if(accounts.get(i).getCardId().equals(cardId)) return accounts.get(i); } return null; } }