package com.ATMdemo; public class Test { public static void main(String[] args) { ATM atm=new ATM(); atm.start(); } }
package com.ATMdemo; public class Account { private String carId; private String userName; private char sex; private String passWord; private double money; private double limit;//限额 public String getCarId() { return carId; } public void setCarId(String carId) { this.carId = carId; } public String getUserName() { return userName + (sex=='男'?"先生":"女士"); } public void setUserName(String userName) { this.userName = userName; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } 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 getLimit() { return limit; } public void setLimit(double limit) { this.limit = limit; } }
package com.ATMdemo; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class ATM { private ArrayList<Account> accounts=new ArrayList<>(); private Account loginAcc;//记住登录后的用户账户 private Scanner sc=new Scanner(System.in); //启动ATM系统 public void start(){ while (true) { System.out.println("===欢迎进入ATM系统==="); System.out.println("1.用户登录"); System.out.println("2.用户开户"); System.out.println("请选择:"); int command = sc.nextInt(); switch (command){ case 1: login(); break; case 2: createAccount(); break; default: System.out.println("没有该操作"); } } } //用户登录操作 private void login(){ System.out.println("===系统登录==="); //判断系统中是否存在账户用户对象,存在才能登录,如果不存在,我们直接结束登录操作 if (accounts.size()==0){ return;//跳出登录 } //系统中存在账户对象,可以开始操作’ while (true) { System.out.println("请您输入您的登录卡号:"); String carId=sc.next(); //判断卡号是否存在 Account acc=getAccountByCardId(carId); if (acc==null){ //返回null说明卡号不存在 System.out.println("卡号不存在"); }else { while (true) { //卡号存在,接着输入密码 System.out.println("请您输入登录密码:"); String passWord=sc.next(); //判断密码是否正确 if (acc.getPassWord().equals(passWord)){ loginAcc=acc; //密码正确登录成功 System.out.println("恭喜您,"+acc.getUserName()+"成功登录系统,您的卡号是:"+acc.getCarId()); //展示登录后的页面了 showUserCommand(); return;//结束当前登录方法 }else { System.out.println("您输入密码不正确"); } } } } } //展示登陆后的操作界面 private void showUserCommand(){ while (true) { System.out.println(loginAcc.getUserName()+"您可以选择如下操作进行账户处理==="); 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: showLoginAccount();//查询当前账户 break; case 2: depositMoney();//存钱 break; case 3: drawmoney();//取款 break; case 4: transferMoney();//转账 break; case 5: upadtePassWord();//修改密码 return; case 6: System.out.println(loginAcc.getUserName()+"您退出系统成功。");//退出 return;//跳出 case 7: if (deleteAccount()) { //销户成功返回欢迎界面 return; } break; default: System.out.println("您当前选择的操作不存在"); } } } //修改密码 private void upadtePassWord() { System.out.println("===修改密码操作==="); //提醒用户认证当前密码 while (true) { System.out.println("请您输入当前账户密码:"); String passWord=sc.next(); //认证当前密码是否正确 if (loginAcc.getPassWord().equals(passWord)){ //认证通过 //开始修改密码 while (true) { System.out.println("请您输入新密码:"); String newPassWord=sc.next(); System.out.println("请您确认一次新密码:"); String okpassWord=sc.next(); //判断2次密码是否一致 if (okpassWord.equals(newPassWord)){ //可以修改密码 loginAcc.setPassWord(okpassWord); System.out.println("恭喜您,密码修改成功"); return; }else { System.out.println("您输入的两次的密码不一致"); } } }else { System.out.println("您当前输入的密码不正确"); } } } //注销账户 private boolean deleteAccount() { System.out.println("===进行销户操作==="); System.out.println("请问您确认销户吗?y/n"); String command=sc.next(); switch (command){ case "y": //确认要销户 //判断是否账户有钱 if (loginAcc.getMoney()==0){ //直接销户 accounts.remove(loginAcc); System.out.println("您好,您的账户已经成功销户"); return true; }else { System.out.println("对不起,您的账户中存有金额,不允许销户"); return false; } default: System.out.println("好的,您的账户保留"); return false; } } //转账 private void transferMoney() { System.out.println("===转账操作==="); //判断系统中是否存在其他账户 if (accounts.size()<2){ System.out.println("当前系统中只有你一个账户,无法为其他账户转账"); return; } //判断账户中是否有钱 if (loginAcc.getMoney()==0){ System.out.println("账户没钱可转"); return; } //可以转钱 while (true) { System.out.println("请输入对方的卡号:"); String carID=sc.next(); //判断卡号是否存在 Account acc=getAccountByCardId(carID); if (acc==null){ System.out.println("您输入卡号不存在"); }else { //对方卡号存在,让用户认证 String name="*"+acc.getUserName().substring(1); System.out.println("请您输入【"+name+"】姓氏"); String paeName=sc.next(); if (acc.getUserName().startsWith(paeName)){ //认证通过 while (true) { System.out.println("请您输入转账金额:"); double money=sc.nextDouble(); //判断这个金额是否有没有超过自己的金额 if (loginAcc.getMoney()>=money){ //转账 //更新自己账号金额 loginAcc.setMoney(loginAcc.getMoney()-money); //更新对方金额 acc.setMoney(acc.getMoney()+money); return;//结束 }else { System.out.println("您余额不足,无法转钱,最多可转:"+loginAcc.getMoney()); } } }else { System.out.println("您认证的姓氏有问题"); } } } } //取款 private void drawmoney() { System.out.println("===取款操作==="); //判断账户余额是否达到了100元 if (loginAcc.getMoney()<100){ System.out.println("您的账户余额不足100元,不允许取钱"); return; } //让用户输入取款金额 while (true) { System.out.println("请您输入取款金额:"); double money=sc.nextDouble(); //判断账户余额是否足够 if (loginAcc.getMoney()>=money){ //账户中金额足够 //判断当前取款金额是否超过了每次限额 if (money>loginAcc.getLimit()){ System.out.println("您当前取款金额超过了每次限额,您每次最多可取:"+loginAcc.getLimit()); }else { //可以开始取钱 loginAcc.setMoney(loginAcc.getMoney()-money); System.out.println("您取款"+money+"成功,取款后的金额剩余:"+loginAcc.getMoney()); break; } }else { System.out.println("账户余额不足,您的账户中的余额是:"+loginAcc.getMoney()); } } } //存款 private void depositMoney() { System.out.println("===存款操作==="); System.out.println("请您输入存款金额:"); double money=sc.nextDouble(); //更新账户余额 loginAcc.setMoney(loginAcc.getMoney()+money); System.out.println("恭喜您,您存钱:"+money+"成功,存钱后余额为:"+loginAcc.getMoney()); } //展示当前登录的账户信息 private void showLoginAccount(){ System.out.println("===当前您的账户信息如下==="); System.out.println("卡号:"+loginAcc.getCarId()); System.out.println("户主:"+loginAcc.getUserName()); System.out.println("性别:"+loginAcc.getSex()); System.out.println("余额:"+loginAcc.getMoney()); System.out.println("每次取现额度:"+loginAcc.getLimit()); } //完成用户开户操作 private void createAccount(){ System.out.println("===系统开户操作==="); //创造一个账户对象,用封装用户的开户信息 Account acc=new Account(); //需要用户输入自己的开户信息,赋值给账户对象 System.out.println("请您输入您的账户名称:"); String name=sc.next(); acc.setUserName(name); while (true) { System.out.println("请您输入您的性别:"); char sex = sc.next().charAt(0);//"男" if (sex=='男' || sex=='女'){ acc.setSex(sex); break; }else { System.out.println("您输入性别有误,只能为男或女"); } } while (true) { System.out.println("请您输入您的密码:"); String passWord=sc.next(); System.out.println("请确认您的密码:"); String okpassWord=sc.next(); if (okpassWord.equals(passWord)){ acc.setPassWord(okpassWord); break; }else { System.out.println("您输入的2次密码不一致,请重新输入"); } } System.out.println("请您输入您的取现额度:"); double limit=sc.nextDouble(); acc.setLimit(limit); //重点:我们需要为这个账户生成一个卡号(由系统自动生成,8位数字表示,不能与其他账户的卡号重复) String newCarId=createCarId(); acc.setCarId(newCarId); //把这个账户的对象,存入到账户集合中去 accounts.add(acc); System.out.println("恭喜您,"+acc.getUserName()+"开户成功,您的卡号是:"+acc.getCarId()); } //返回一个8位数字的卡号,而且这个卡号不能与其他账户重复 private String createCarId(){ //定义一个String类型的变量记住8位数字作为一个卡号 while (true) { String carId=""; //使用循环、循环8次,每次产生一个随机数给carId连接起来 Random r=new Random(); for (int i = 0; i < 8; i++) { int data=r.nextInt(10);//0-9 carId+=data; } //判断carId中记住的卡号,是否与其他账户卡号重复,没有重复才可以作为一个新卡号 Account acc=getAccountByCardId(carId); if (acc==null){ //没有找到账户对象,没有重复,可以作为新卡号 return carId; } } } //根据卡号查询账户对象返回 private Account getAccountByCardId(String cardId){ //遍历全部账户对象 for (int i = 0; i < accounts.size(); i++) { Account acc=accounts.get(i); //判断这个账户对象acc中的卡号是否是我们要找的卡号 if (acc.getCarId().equals(cardId)){ return acc; } } return null;//查无此账户,这个卡号不存在 } }