Javase基础-day9 ATM系统
ATM系统功能实战
系统准备、首页设计
系统准备内容分析:
①每个用户的账户信息都是一个对象,需要提供账户类。
②需要准备一个容器,用于存储系统全部账户对象信息。
③首页只需要包含:登录和注册2个功能。

实现步骤:
①定义账户类,用于后期创建账户对象封装用户的账户信息。
②账户类中的信息至少需要包含(卡号、姓名、密码、余额、取现额度)
③需要准备一个ArrayList的集合,用于存储系统用户的账户对象。
④定义一个系统启动类ATMSystem需要展示欢迎页包含2个功能:开户功能、登录账户。
public class Account {
private String cardId; // 卡号
private String userName; // 客户名称
private String passWord; // 密码
private double money; // 余额
private double quotaMoney; // 当次取现限额
public Account() {
}
public Account(String cardId, String userName, String passWord, double quotaMoney) {
this.cardId = cardId;
this.userName = userName;
this.passWord = passWord;
this.quotaMoney = quotaMoney;
}
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
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 getQuotaMoney() {
return quotaMoney;
}
public void setQuotaMoney(double quotaMoney) {
this.quotaMoney = quotaMoney;
}
}
public class ATMSystem {
public static void main(String[] args) {
// 1、准备系统需要的容器对象,用于存储账户对象
ArrayList<Account> accounts = new ArrayList<>();
// 2、准备系统的首页:登录 开户
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.print("您可以输入命令了:");
int command = sc.nextInt();
switch (command) {
case 1:
// 登录
login(accounts, sc);
break;
case 2:
// 开户
register(accounts, sc);
break;
default:
System.out.println("您当前输入的操作命令不被支持!");
}
}
}
}
用户开户功能实现
l开户功能其实就是就是往系统的集合容器中存入一个新的账户对象的信息。
开户功能实现步骤
①定义方法完成开户:
②键盘录入姓名、密码、确认密码(需保证两次密码一致)
③生成账户卡号,卡号必须由系统自动生成8位数字(必须保证卡号的唯一)
④创建Account账户类对象用于封装账户信息(姓名、密码、卡号)
⑤把Account账户类对象存入到集合accounts中去。
/**
* 用户开户功能
* @param accounts 账户的集合对象
*/
private static void register(ArrayList<Account> accounts, Scanner sc) {
System.out.println("===============用户开户功能==============");
// 2、键盘录入 姓名 密码 确认密码
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();
// 3、生成账户的卡号,卡号是8位,而且不能与其他账户卡号重复。
String cardId = createCardId(accounts);
// 4、创建一个账户对象封装账户的信息
// public Account(String cardId, String userName, String passWord, double money, double quotaMoney)
Account account = new Account(cardId, name, password,quotaMoney);
// 5、把账户对象添加到集合中去
accounts.add(account);
System.out.println("恭喜您,您开户成功,您的卡号是:" + account.getCardId() +"。请您妥善保管");
}
public static String createCardId(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++) {
