Java银行ATM系统
息壤爱学习 人气:0实现步骤:
定义账户类,用于后期创建账户对象封装用户的账户信息。
账户类中的信息至少需要包含(卡号、姓名、密码、余额、取现额度)
需要准备一个ArrayList的集合,用于存储系统用户的账户对象。
定义一个系统启动类ATMSystem需要展示欢迎页包含2个功能:开户功能、登录账户。
账户类 Account
package test; /*账户类*/ public class Account { private String cardId; //卡号 private String userName; //客户名字 private String password; //密码 private double money; //余额 private double quoteMoney; //当次限额 public Account(){} public Account(String cardId,String userName,String password,double quoteMoney){ this.cardId = cardId; this.userName =userName; this.password = password; this.quoteMoney = quoteMoney; } public String getCardId() { return cardId; } public void setCardId(String cardId) { this.cardId = cardId; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public double getQuoteMoney() { return quoteMoney; } public void setQuoteMoney(double quoteMoney) { this.quoteMoney = quoteMoney; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
AtmSystem 类
package test; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class AtmSystem { public static void main(String[] args) { //用数组储存账户对象 ArrayList<Account> accounts = new ArrayList<>(); //首页:登录 开户 showMain(accounts); } public static void showMain(ArrayList<Account> accounts){ System.out.println("================欢迎进入首页界面==============="); 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.nextInt(); switch (command){ case 1: //登录 login(accounts,sc); break; case 2: //开户 register(accounts,sc); break; default: System.out.println("您的输入有误!"); } } } // 键盘录入姓名、密码、确认密码(需保证两次密码一致) // // 生成账户卡号,卡号必须由系统自动生成8位数字(必须保证卡号的唯一) // // 创建Account账户类对象用于封装账户信息(姓名、密码、卡号) // // 把Account账户类对象存入到集合accounts中去。 public static void register(ArrayList<Account> accounts,Scanner sc){ System.out.println("===============用户开户================"); System.out.println("请输入开户名称:"); String name = sc.next(); String password = ""; while (true){ System.out.println("请输入开户密码:"); password = sc.next(); System.out.println("请再次确认密码:"); String okPassword = sc.next(); //判断两次输入密码 if (okPassword.equals(password)){ break; }else{ System.out.println("两次密码必须一致"); } } System.out.println("请输入当次限额:"); double quotaMoney = sc.nextDouble(); String cardId = createCard(accounts); //封装账户 Account account = new Account(cardId,name,password,quotaMoney); accounts.add(account); System.out.println("恭喜您,开户成功!你的卡号是:"+account.getCardId()+"请您妥善保管!"); } public static String createCard(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 = getAccountByCardId(cardId, accounts); if (acc == null){ return cardId; } } } public static Account getAccountByCardId(String cardId,ArrayList<Account> accounts){ for (int i=0;i< accounts.size();i++){ Account acc = accounts.get(i); if (acc.getCardId().equals(cardId)){ return acc; } } return null; } //登录 // 让用户键盘录入卡号,根据卡号查询账户对象。 // // 如果没有找到了账户对象,说明卡号不存在,提示继续输入卡号。 // // 如果找到了账户对象,说明卡号存在,继续输入密码。 // // 如果密码不正确,提示继续输入密码 // // 如果密码正确,提示登陆成功!! public static void login(ArrayList<Account> accounts,Scanner sc){ //判断系统中是否存在账户 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){ while (true){ //输入密码 System.out.println("请输入密码:"); String password = sc.next(); if (acc.getPassword().equals(password)){ System.out.println("恭喜您," + acc.getUserName() + "先生/女士成功登录!" + "您的账户:" + acc.getCardId()); //展示操作页面 showUserCommand(sc,acc,accounts); return; }else{ System.out.println("Sorry,该账户不存在!"); } } } } } 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(accounts, acc , sc); break; case 5: // 修改密码 updatePassWord(acc,sc); return; // 结束当前操作的方法 case 6: // 退出 System.out.println("欢迎下次光临!!"); return; // 结束当前操作的方法! case 7: // 注销账户 // 从当前集合中抹掉当前账户对象即可 accounts.remove(acc); System.out.println("销户成功了!!"); return;// 结束当前操作的方法! default: System.out.println("您的命令输入有误~~~"); } } } 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.getQuoteMoney()); } // 存款就是拿到当前账户对象。 // // 然后让用户输入存款的金额。 // // 调用账户对象的setMoney方法将账户余额修改成存钱后的余额。 // // 存钱后需要查询一下账户信息,确认是否存钱成功了! private static void depositMoney(Account acc, Scanner sc) { System.out.println("==================存钱操作==================="); System.out.println("请您输入存款的金额:"); double money = sc.nextDouble(); // 直接把金额修改到账户对象的money属性中去 acc.setMoney(acc.getMoney() + money); System.out.println("存款完成!!"); showAccount(acc); } // 取款需要先判断账户是否有钱。 // // 有钱则拿到自己账户对象。 // // 然后让用户输入取款金额 // // 判断取款金额是否超过了当次限额,以及余额是否足够 // // 满足要求则调用账户对象的setMoney方法完成金额的修改。 private static void drawMoney(Account acc, Scanner sc) { System.out.println("==================取款操作==================="); // 1、判断它的账户是否足够100元 if(acc.getMoney() >= 100){ while (true) { System.out.println("请您输入取款的金额:"); double money = sc.nextDouble(); // 2、判断这个金额有没有超过当次限额 if(money > acc.getQuoteMoney()){ System.out.println("您当次取款金额超过每次限额,不要取那么多,每次最多可以取:" + acc.getQuoteMoney()); }else { // 3、判断当前余额是否足够你取钱 if(acc.getMoney() >= money){ // 够钱,可以取钱了 acc.setMoney(acc.getMoney() - money); System.out.println("恭喜您,取钱" + money + "成功了!当前账户还剩余:" + acc.getMoney()); return;// 取钱后干掉取钱方法 }else { System.out.println("余额不足啊!"); } } } }else { System.out.println("您自己的金额没有超过100元,就别取了~~~"); } } // 转账功能需要判断系统中是否有2个账户对象及以上。 // // 同时还要判断自己账户是否有钱。 // // 接下来需要输入对方卡号,判断对方账户是否存在。 // // 对方账户存在还需要认证对方户主的姓氏。 // // 满足要求则可以把自己账户对象的金额修改到对方账户对象中去。 private static void transferMoney(ArrayList<Account> accounts, Account acc, Scanner sc) { // 1、判断系统中是否有2个账户及以上 if(accounts.size() < 2){ System.out.println("对不起,系统中无其他账户,您不可以转账!"); return; } // 2、判断自己的账户对象中是否有钱 if(acc.getMoney() == 0){ System.out.println("对不起,您自己都没钱,就别转了~~"); return; } // 3、开始转账逻辑 while (true) { System.out.println("请您输入对方账户的卡号:"); String cardId = sc.next(); Account account = getAccountByCardId(cardId , accounts); // 判断这个账户对象是否存在,存在说明对方卡号输入正确 if(account != null){ // 判断这个账户对象是否是当前登录的账户自己 if(account.getCardId().equals(acc.getCardId())){ // 正在给自己转账 System.out.println("您不可以为自己转账!"); }else { // 确认对方的姓氏 String name = "*" + account.getUserName().substring(1); System.out.print("请您确认【" + name + "】的姓氏:"); String preName = sc.next(); // 王 if(account.getUserName().startsWith(preName)){ // 真正开始转账了 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("恭喜您,转账成功了,已经为" + account.getUserName() +"转账多少:" + money); showAccount(acc); return; } }else { System.out.println("对不起,您认证的信息有误~~~"); } } }else { System.out.println("对不起,您输入的转账卡号有问题!"); } } } private static void updatePassWord(Account acc, Scanner sc) { System.out.println("===========修改密码======================="); while (true) { System.out.println("请您输入正确的密码:"); String okPassWord = sc.next(); // 判断密码是否正确 if(acc.getPassword().equals(okPassWord)){ while (true) { // 可以输入新密码 System.out.println("请您输入新的密码:"); String newPassWord = sc.next(); System.out.println("请您输入确认密码:"); String okNewPassWord = sc.next(); if(newPassWord.equals(okNewPassWord)) { // 修改账户对象的密码为新密码 acc.setPassword(newPassWord); return; // 直接结束掉!! }else { System.out.println("您两次输入的密码不一致~~"); } } }else { System.out.println("当前输入的密码不正确~~~"); } } } }
加载全部内容