一、账户类、首页设计
系统准备内容分析:
① 每个用户的账户信息都是一个对象,需要提供账户类。
② 需要准备一个容器,用于存储系统全部账户对象信息。
③ 首页只需要包含:登录和注册2个功能。
实现步骤:
① 定义账户类,用于后期创建账户对象封装用户的账户信息。
② 账户类中的信息至少需要包含(卡号、姓名、密码、余额、取现额度)
③ 需要准备一个ArrayList的集合,用于存储系统用户的账户对象。
④ 需要展示欢迎页包含2个功能:开户功能、登录账户 。
/**
系统的账户类,代表账户的信息
*/
public class Account {
private String cardId; // 卡号
private String userName; // 用户名称
private String passWord; // 密码
private double money; // 账户余额
private double 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;
}
}
1.首页设计
public class ATMSystem {
public static void main(String[] args) {
// 2、创建一个集合对象,用于后期存入账户对象。
ArrayList<Account> accounts = new ArrayList<>();
// 3、展示系统欢迎页面
System.out.println("======欢迎您进入到ATM系统===============");
while (true) {
System.out.println("1、登录账户");
System.out.println("2、注册账户");
System.out.println("请您选择操作:");
Scanner sc = new Scanner(System.in);
int command = sc.nextInt();
switch (command){
case 1:
// 登录操作
login(accounts, sc);
break;
case 2:
// 注册账户
register(accounts, sc);
break;
default:
System.out.println("当前输入的操作不存在!");
}
}
}
二、用户开户功能
分析
⚫ 开户功能其实就是就是往系统的集合容器中存入一个新的账户对象的信息。
开户功能实现步骤
① 定义方法完成开户:public static void register(ArrayList accounts) {…}
② 键盘录入姓名、密码、确认密码(需保证两次密码一致)
③ 生成账户卡号,卡号必须由系统自动生成8位数字(必须保证卡号的唯一)
④ 创建Account账户类对象用于封装账户信息(姓名、密码、卡号)
⑤ 把Account账户类对象存入到集合accounts中去。
/**
开户功能
*/
private static void register(ArrayList<Account> accounts, Scanner sc) {
System.out.println("==================欢迎您进入到开户操作======================");
// 2、创建一个账户对象封装账户信息
Account acc = new Account();
// 1、录入用户账户信息
System.out.println("请您输入账户名称:");
String userName =sc.next();
acc.setUserName(userName);
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("两次输入的密码不一致!");
}
}
System.out.println("请您设置当次取现额度:");
double quataMoney = sc.nextDouble();
acc.setQuotaMoney(quataMoney);
// 关键点:为当前账户生成一个随机的8位数字作为卡号,卡号不能与其他用户的卡号重复。
String cardId = createCardId(accounts);
acc.setCardId(cardId);
// 3、把账户对象存入到集合容器对象中去
accounts.add(acc);
System.out.println("恭喜您,"+acc.getUserName()+"先生/女士,您开户完成,您的卡号是:" + acc.getCardId());
}
public static String createCardId(ArrayList<Account> accounts){
while (true) {
String cardId = "";
// 随机8个数字
Random r = new Random();
for (int i = 1; i <= 8 ; i++) {
cardId += r.nextInt(10);
}
// 判断这个卡号是否重复:根据卡号去查询账户对象
Account account = getAccountByCardId(cardId , accounts);
if(account == 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;
}
三、用户登录功能
分析
① 定义方法:
② 让用户键盘录入卡号,根据卡号查询账户对象。
③ 如果没有找到了账户对象,说明卡号不存在,提示继续输入卡号。
④ 如果找到了账户对象,说明卡号存在,继续输入密码。
⑤ 如果密码不正确,提示继续输入密码
⑥ 如果密码正确,提示登陆成功!!
/**
用户登录功能
*/
private static void login(ArrayList<Account> accounts, Scanner sc) {
System.out.println("==================欢迎您进入到登录操作======================");
if(acc