package com.atm; import java.util.Scanner; /** * ATM類實現 * * @author 向往的生活 */ public class ATM { public static void main(String[] args) { String[] user = new String[2]; String[] password = new String[2]; double[] amount = new double[2]; loginSelect(user, password, amount); } /** * 登錄業務的菜單選擇 * * @param user * @param password */ public static void loginSelect(String[] user, String[] password, double[] amount) { System.out.println("#####歡迎#####"); int n = 1; while (true) { System.out.println("A.開戶"); System.out.println("B.登錄"); System.out.println("C.退出"); System.out.println("D.修改密碼"); Scanner scanner = new Scanner(System.in); System.out.println("選擇菜單:"); String number = scanner.nextLine(); number = number.toUpperCase(); char[] chr = number.toCharArray(); switch (chr[0]) { case 'A': openAnAccount(user, password); loginSelect(user, password, amount); break; case 'B': int index = login(user, password);// 記錄登錄人的下標 if (index != -1) { select(user, password, amount, index); } else { n++;// 登錄3次失敗,則退出 if (n == 3) { break; } } break; case 'C': System.out.println("退出ATM"); System.exit(-1); break; case 'D': updatePassword(user, password); System.out.println("修改密碼"); break; default: System.out.println("錄入的操作錯誤!"); break; } } } /** * 核心業務菜單選擇 * * @param user * @param password */ public static void select(String[] user, String[] password, double[] amount, int index) { while (true) { System.out.println("###########您好:" + user[index] + "#########"); System.out.println("A.存款"); System.out.println("B.取款"); System.out.println("C.轉賬"); System.out.println("D.查詢賬戶余額"); System.out.println("E.返回主菜單"); Scanner scanner = new Scanner(System.in); System.out.println("選擇菜單:"); String input = scanner.nextLine(); input = input.toUpperCase(); char chr = input.toCharArray()[0]; switch (chr) { case 'A': saveMoney(user, amount, index); break; case 'B': getMoney(user, amount, index); break; case 'C': transferAccounts(user, amount, index); break; case 'D': query(user, amount, index); break; case 'E': loginSelect(user, password, amount); break; default: System.out.println("操作錯誤請重新輸入!"); break; } } } /** * 登錄 * * @return */ public static int login(String[] user, String[] password) { Scanner input = new Scanner(System.in); System.out.println("請輸入用戶名:"); String userName = input.nextLine(); System.out.println("請輸入密碼:"); String pwd = input.nextLine(); // 通過userName數據,找到user下標, int index = -1; for (int i = 0; i < user.length; i++) { if (user[i] == null) { System.out.println("請去開戶,您沒有注冊卡號!"); loginSelect(user, password, null); return -1; } else { if (user[i].equals(userName)) { index = i; break; } } } // 然后通過user下標找到password中相應的密碼。 if (password[index].equals(pwd)) { return index; } else { System.out.println("用戶名或者密碼輸入錯誤,請從新輸入!"); } return -1;// 因為密碼不匹配因此返回-1 } /** * 開戶 * * @return */ public static void openAnAccount(String[] user, String[] password) { int index = -1; // 搜索下標 for (int i = 0; i < user.length; i++) { if (user[i] == null) { index = i; break; } } if (index == -1) {// 如果存儲空間滿了,則提示聯系管理員處理 System.out.println("系統存儲已經滿了,請聯系管理員處理!"); return; } // 新增用於與密碼 Scanner scanner = new Scanner(System.in); System.out.println("輸入登錄名:"); String loginName = scanner.nextLine(); user[index] = loginName; System.out.println("輸入密碼:"); String pwdValue = scanner.nextLine(); password[index] = pwdValue; } /*************************************************************************** * 查詢賬戶余額 * * @return */ public static void query(String[] user, double[] amount, int index) { System.out.println(user[index] + "您的余額為:" + amount[index]); } /** * 取款 * * @return */ public static void getMoney(String[] user, double[] amount, int index) { System.out.println("A 100 B 200 "); System.out.println("C 300 D 500 "); System.out.println("E 1000 F 2000 "); System.out.println("G 其他金額 "); Scanner scanner = new Scanner(System.in); System.out.println("選擇取款金額:"); String money = scanner.nextLine(); money = money.toUpperCase(); double number = 0.0; char chr = money.toCharArray()[0]; switch (chr) { case 'A': number = 100; break; case 'B': number = 200; break; case 'C': number = 300; break; case 'D': number = 500; break; case 'E': number = 1000; break; case 'F': number = 2000; break; case 'G': Scanner input = new Scanner(System.in); System.out.println("輸入取款金額:"); number = input.nextDouble(); break; default: System.out.println("您輸入的金額錯誤!"); break; } // 檢查存款的金額校驗 if (!checkMoney(number)) { return; } if(amount[index] < number) { System.out.println("您賬戶余額不足,不能取款!"); return; } amount[index] = amount[index] - number; System.out.println("取款成功,余額為:" + amount[index]);// 顯示余額 return; } /** * 檢查存款的金額校驗 * * @param number * @return */ public static boolean checkMoney(double number) { if (number < 100) { System.out.println("取款失敗:只能取出大於等100的金額!"); return false; } // 只能存入100的整數 if (number % 100 != 0) { System.out.println("取款失敗:只能取出100的整數!"); return false; } return true; } /** * 存款 */ public static void saveMoney(String[] user, double[] amount, int index) { Scanner scanner = new Scanner(System.in); System.out.println("輸入存款金額:"); double number = scanner.nextDouble(); // 檢查存款的金額校驗 if (!checkMoney(number)) { return; } amount[index] = amount[index] + number; System.out.println("存款成功,余額為:" + amount[index]);// 顯示余額 return; } /** * 轉賬 * * @return */ public static void transferAccounts(String[] user, double[] amount, int index) { int tragetIndex = -1; for (int i = 0; i < 3; i++) { tragetIndex = ifHaveUser(user); if (tragetIndex != -1) { break; } else {// 沒找到相應的用戶 System.out.println("第" + (i + 1) + "次,您輸入的用戶不存在!"); } } if (tragetIndex == -1) { System.out.println("超過3次返回上級菜單!"); return; } if (tragetIndex == index) {// 如果下標相等提示您不能給自己轉賬 System.out.println("您不能給自己轉賬"); } else { for (int i = 0; i < amount.length; i++) { Scanner scanner = new Scanner(System.in); System.out.println("輸入您的轉賬金額:"); double tranAmount = scanner.nextDouble(); // 檢查存款的金額校驗 if (!checkMoney(tranAmount)) { return; } if (tranAmount > amount[index]) {// 如果轉賬金額大於,賬戶余額提示 System.out.println("您余額不足!"); break; } else { amount[index] = amount[index] - tranAmount; amount[tragetIndex] = tranAmount; break; } } } System.out.println("您的余額為:" + amount[index]); } /*************************************************************************** * * @return */ public static int ifHaveUser(String[] user) { Scanner scanner = new Scanner(System.in); System.out.println("輸入轉賬用戶:"); String userName = scanner.nextLine(); int index = -1; for (int i = 0; i < user.length; i++) { if (userName.equals(user[i])) { index = i; } } return index; } /*************************************************************************** * 修改密碼 * * @return */ public static void updatePassword(String[] user, String[] password) { Scanner input = new Scanner(System.in); System.out.println("請輸入用戶名:"); String userName = input.nextLine(); while (true) { int index = -1; String oldPwd = null; for (int i = 0; i < user.length; i++) {//首先要找到當前用戶 if (userName.equals(user[i])) { index = i; oldPwd = password[i]; } } if(index == -1) { System.out.println("還沒有開戶,請開戶后再來修改密碼!"); return ; } System.out.println("請輸入舊密碼:"); String inputOldPwd = input.nextLine(); System.out.println("請輸入新密碼:"); String newpwd = input.nextLine(); System.out.println("請輸入確認密碼:"); String confimpwd = input.nextLine(); if(!inputOldPwd.equals(oldPwd)) {//如果輸入的舊密碼不等於新密碼,則重新輸入 System.out.println("您輸入的舊密碼不正確!"); continue; } if(!newpwd.equals(confimpwd)) {//新密碼與確認密碼不匹配 System.out.println("新密碼與確認密碼不匹配!"); continue; } password[index] = newpwd; System.out.println("密碼修改成功!"); break; } } }