JAVA_ONE-NINE_ATM机案例
需求:
1.定义一个账户类Account,至少需要包含(卡号,姓名,性别,密码,余额,每次提现额度)
2.定义一个ATM类,用来代表ATM,负责提供所有的业务需求,比如:展示ATM的系统欢迎页,开通账户,登录,取款,存款,转账。
3.定义一个测试类Test,负责我们开发的ATM系统进行测试。
主函数
import static org.example.object_atm.ATM.start;public class Test {public static void main(String[] args) {start();}}
封装函数
public class Account {private String cardId;private String name;private String sex;private String password;private double balance;private double limit;public Account() {}public Account(String cardId, String name, String sex, String password, double balance, double limit) {this.cardId = cardId;this.name = name;this.sex = sex;this.password = password;this.balance = balance;this.limit = limit;}public String getCardId() {return cardId;}public void setCardId(String cardId) {this.cardId = cardId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public double getBalance() {return balance;}public void setBalance(double balance) {this.balance = balance;}public double getLimit() {return limit;}public void setLimit(double limit) {this.limit = limit;}
}
功能函数
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class ATM {//1.定义数组,接受账户信息static ArrayList<Account> arrayList = new ArrayList<>();//2.用户开户操作public static void creatAccount() {//开始一个封装操作Account account = new Account();//开始命令操作Scanner sc = new Scanner(System.in);System.out.println("********欢迎进入银行开户系统,请按指令进行操作******");//存入姓名System.out.println("1.请输入你的姓名:");String name = sc.next();account.setName(name);//存入性别while (true) {System.out.println("2.请输入你的性别:");String sex = sc.next();if (sex.equals("男") || sex.equals("女")) {account.setSex(sex);break;} else {System.out.println("请输入‘男’ 或 ‘女’");}}//存入密码while (true) {System.out.println("3.请输入你的银行卡密码:");String password = sc.next();System.out.println("3.请再次输入银行卡密码,进行确认:");String password1 = sc.next();if (password.equals(password1)) {account.setPassword(password);break;} else {System.out.println("两次密码不同,请重新输入!");}}//统一存入余额0.0account.setBalance(0.0);//存入转账限制额度System.out.println("4.请输入你的转账额度限制:");double limit = sc.nextDouble();account.setLimit(limit);//存入银行卡号while (true) {Random random = new Random();String cardId = "";String card = "0123456789";for (int i = 0; i < 8; i++) {int x = random.nextInt(10);cardId += card.charAt(x);}if (!arrayList.contains(cardId)) {account.setCardId(cardId);System.out.println("你的银行卡号为:" + account.getCardId());break;}}//对封装信息存入arraylistarrayList.add(account);System.out.println("银行账户信息存入成功!");}//3.用户登录操作public static void loginAccount() {Account account;Scanner sc = new Scanner(System.in);System.out.println("********欢迎进入银行登录系统,请按指令进行操作******");//设置用户账号密码判断符 0~失败 1~成功int flag = 0;//登录操作while (true) {System.out.println("1.请输入登录账号");String card = sc.next();for (int i = 0; i < arrayList.size(); i++) { //进行遍历,赋值给Accountaccount = arrayList.get(i);if (account.getCardId().equals(card)) { //判断账号System.out.println("2.请输入账号密码");String password = sc.next();if (account.getPassword().equals(password)) { //判断密码Operate(account,i);flag = 1;break;} else {System.out.println("密码不正确,请检查银行卡号密码重新进行输入");}}}if (flag == 0) {System.out.println("账号不正确,请检查银行卡号重新进行输入,或进行银行开户");} else {System.out.println("登录成功");break;}}}//4.爱莉银行ATM开始界面public static void start() {while (true) {System.out.println("***********欢迎来到爱莉银行ATM系统************");System.out.println("1.用户登录");System.out.println("2.用户开户");System.out.println("3.退出程序");//输入操作命令System.out.println("请输入操作命令");Scanner sc = new Scanner(System.in);String command = sc.next();switch (command) {case "1"://用户登录loginAccount();break;case "2"://用户开户creatAccount();break;case "3":System.out.println("程序结束,期待下次使用!");return;default:System.out.println("操作错误,请输入正确操作命令符!");break;}}}//5.登入账户后操作界面public static void Operate(Account account,int i) {System.out.println("欢迎您," + account.getName());Scanner sc = new Scanner(System.in);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.返回主界面");String op = sc.next();switch (op) {case "1":showAccount(account); //用户银行信息展示页面break;case "2":Withdrawal(account); //进行取款操作break;case "3":Saving(account); //进行存款操作break;case "4":Transfer(account); //进行转账操作break;case "5":if(accountClosure(account,i)){ //进行销户操作return;}else {break;}case "6":revisePassword(account); //进行密码更改break;case "7":return;default:System.out.println("命令符错误,请重新输入");break;}}}//6.用户银行信息展示页面public static void showAccount(Account account) {System.out.println("账户名:" + account.getName());System.out.println("性别:" + account.getSex());System.out.println("账户余额:" + account.getBalance());System.out.println("转账限制:" + account.getLimit());}//7.进行取款操作public static void Withdrawal(Account account) {Scanner sc = new Scanner(System.in);double maxMoney = 5000;while (true) {System.out.println("请输入取款金额(最大取款为5000)或按0键返回上一级");double money = sc.nextDouble();if (maxMoney > money && account.getBalance() >= money) {account.setBalance(account.getBalance() - money);System.out.println("取款成功,已取出" + money + "元");break;} else if (money == 0) {return;} else {System.out.println("取款失败,超出限额或余额不足,请重新输入!");}}}//8.进行存款操作public static void Saving(Account account) {Scanner sc = new Scanner(System.in);double maxMoney = 100000;while (true) {System.out.println("请输入存款金额(最大存款金额为100000)或按0键返回上一级");double money = sc.nextDouble();if (maxMoney > money) {account.setBalance(account.getBalance() + money);System.out.println("存款成功,已存入" + money + "元");break;} else if (money == 0) {return;} else {System.out.println("存款失败,超出限额,请重新输入!");}}}//9.进行转账操作public static void Transfer(Account account) {Scanner sc = new Scanner(System.in);while (true) {System.out.println("---请输入转账账号卡号或按0放回上一级界面---:");String cardId = sc.next();for (int i = 0; i < arrayList.size(); i++) { //寻找arraylist中是否存在转账账号Account account1 = arrayList.get(i); //定义新的account对象接受转账账号信息if (account1.getCardId().equals(cardId)) {while (true) { //输入转账金额System.out.println("---请输入转账金额或按0放回上一级界面---:");Double money = sc.nextDouble();if (money == 0) {break;}if (account.getBalance() >= money) {account.setBalance(account.getBalance() - money);account1.setBalance(account1.getBalance() + money);System.out.println("转账成功" + money);} else {System.out.println("超出转账金额限制账户余额不足,请重新输入");}}break; //找到即停止,不在继续向下循环} else if (cardId.equals("0")) {return;}}}}//10.进行销户操作public static boolean accountClosure(Account account,int number) {Scanner sc = new Scanner(System.in);System.out.println("是否进行销户操作,请确认");System.out.println("按1确认");System.out.println("按2取消");String str = sc.next();switch (str) {case "1":if(account.getBalance()>0){System.out.println("销户失败,请先清空余额");return false;}else {arrayList.remove(number);System.out.println("销户成功");return true;}case "2":return false;default:System.out.println("命令不正确");break;}return false;}//11.进行密码更改public static void revisePassword(Account account){Scanner sc=new Scanner(System.in);while (true) {System.out.println("请输入你的旧密码或按0返回上一级界面");String password=sc.next();if (password.equals("0")){break;}if(account.getPassword().equals(password)){while (true) {System.out.println("请输入你的新密码或按0返回上一级界面");String newPassword=sc.next();if(newPassword.equals("0")){break;}System.out.println("请重新输入你的新密码");String newPassword1=sc.next();if(newPassword.equals(newPassword1)){account.setPassword(newPassword);System.out.println("密码更改成功");return;}else {System.out.println("请重新输入");}}}else {System.out.println("密码不对,请重新输入");}}}
}