目录

ATM系统技术分析:
1.面向对象编程:每个用户都是一个对象,所以需要一个账类创建用户对象封装账户信息
2.使用集合容器:用ArrayList集合存储账户对象的信息
3.程序流程控制:分钟,循环,跳转
4.使用常用API:登录信息的比较,业务数据的分析
账户类的分析:
1.账户类:定义账户类,封装信息(卡号,姓名,密码,余额,取现额度)
2.账户对象信息存储:ArrayList
public class Account { private String userName; private String userId; private String passWord; private double money; private double quoteMoney; public Account(){} public Account(String userName,String userId,String passWord,double money,double quoteMoney){ this.userId=userId; this.money=money; this.userName=userName; this.passWord=passWord; this.quoteMoney=quoteMoney; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } 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 getQuoteMoney() { return quoteMoney; } public void setQuoteMoney(double quoteMoney) { this.quoteMoney = quoteMoney; } }
ATM类:
1.接受账户类
public static void main(String[] args) { // 1.准备容器 ArrayList<Account> accounts = new ArrayList<>(); showMain(accounts); }
2.首页功能:登录+开户
准备系统首页
public static void showMain(ArrayList<Account> accounts) { // 2.准备系统首页 Scanner sc = new Scanner(System.in); while (true) { System.out.println("==========阿崽银行为您服务=========="); System.out.println("1.登录账号"); System.out.println("2.开户"); System.out.println("==请选择服务(1/2):"); int command = sc.nextInt(); switch (command) { case 1: // 登录方法 login(accounts, sc); break; case 2: // 开户 newAccount(accounts, sc); break; default: System.out.println("输入有误,请重新输入"); break; } } }
用户开户功能
- 往系统的集合容器中存入一个新的账户对象xx;
1.定义开户方法
2.键盘录入信息
3.生成账户卡号,
- 卡号由系统自动生成9位数字(卡号唯一)
// 生成卡号方法:随机生成一个卡号:使用Random随机一个9位数字符串,且不能重复 // 该功能返回卡号为字符串类型 public static String createCardId(ArrayList<Account> accounts) { while (true) { String cardID = ""; Random r = new Random(); for (int i = 0; i < 9; i++) { cardID += r.nextInt(10); } Account acc = getCardId(cardID, accounts);// 使用功能二判断,得到的是账户类里面的卡号 if (acc == null) { return cardID; } } }
- 检查卡号是否唯一
// 检查卡号方法:判断该卡号是否与集合内的卡号重复, // 该功能中 如果卡号重复则报告给功能一继续随机 所以应该返回的是账户类中的卡号 public static Account getCardId(String cardID, ArrayList<Account> accounts) { for (int i = 0; i < accounts.size(); i++) { Account acc = accounts.get(i); if (acc.getUserId().equals(cardID)) { return acc;//返回该账户 } } return null; }
4.创建Account账户类(已创建)
static String password = "";// 记录用户输入的密码,保证判断密码的循环可以正常使用 public static void newAccount(ArrayList<Account> accounts, Scanner sc) { System.out.println("==========阿崽银行为您服务=========="); System.out.println("==========用户开户=========="); // 姓名 System.out.println("==请输入您的姓名"); String name = sc.next(); // 密码 while (true) { System.out.println("==请输入您的密码"); password = sc.next(); System.out.println("==请再次输入您的密码"); String okPassword = sc.next(); // 判断两次密码是否一致 if (okPassword.equals(password)) { break; } else { System.out.println("密码错误,请重新输入"); } } // 生成卡号(独立),并且卡号不能重复 // 功能1:随机生成一个卡号 功能2:判断该卡号是否与集合内的卡号重复 String cardId = createCardId(accounts); // 每日限额 System.out.println("==请设置每日取现额度"); double quoteMoney = sc.nextInt(); double money = 0; // 创建一个账户对象封装账户的信息,将得到的信息封装在一个对象里 // 注意这里要和账户里中的顺序一样且对应,不然存入集合时信息会交叉String userName,String userId,String // passWord,double money,double quoteMoney Account account = new Account(name, cardId, password, money, quoteMoney); // 将对象里的内容装入集合 accounts.add(account); System.out.println("==开户成功!您的卡号是:" + cardId); } // 功能1:随机生成一个卡号:使用Random随机一个9位数字符串,且不能重复 // 该功能返回卡号为字符串类型 public static String createCardId(ArrayList<Account> accounts) { while (true) {