完成开户功能的实现。需求如下:

接下来,我们带着大家开始开发这个ATM系统。首先我们来完成项目的架构搭建、和欢迎界面的设计。
首先我们来分析一下,开发这个ATM系统的流程:
-
由于每一个账户都包含一些个人信息,比如:卡号、姓名、性别、密码、余额、每次取现额度等等。所以,首先可以设计一个Account类,用来描述账户对象需要封装那些数据。
-
紧接着,定义一个ATM类,用来表示ATM系统,负责提供所有的业务需求。
比如:展示ATM系统的欢迎页面、开户、登录、转账等功能。
-
最后,定义一个测试类Test,负责启动我们开发好的ATM系统,进行测试。
第一步:先来完成Account类的编写

为了系统的代码结构更加清晰,在ATM类中,写一个开户的方法。
步骤如下:
-
1、创建一个账户对象,用于封装用户的开户信息
-
2、需要用户输入自己的开户信息,赋值给账户对象
-
输入账户名,设置给账户对象
-
输入性别,如果性别是'男'或者'女',将性别设置给账户对象;否则重新录入性别直到录入正确为止。
-
输入账户、并且输入两次密码,只有两次密码相同,才将账户和密码设置给账户对象。
-
输入提现限额,并且设置给账户对象
-
-
3、输出开户成功,的提示语句。
解题思路分析:
1.封装ATM界面的卡号 用户名 性别 密码 余额 限额的等属性,提供了无参构造 有参构造以及getter和setter方法来操作数据。
2.先创建Account实体类 对象acc,用于存储所有的开户信息
3.用户名输入直接读取字符串并赋值;性别校验用while(true)循环输入,直到输入的性别正确为止,通过截取第一个字符,判断是否为“男”或者“女”,不正确则提示重新输入;密码校验用while(true)循环,要求用户输入两次密码,用equery()方法比较两次输入是否一致,不一致则提示重新输入。
4.提现额度直接读取double类型数值并赋值,卡号8位生成单独抽取createCardId()方法实现,方法内部通过Random生成8位随机数字,生成后通过setCardId()赋值给账户对象。
5.将完整的Account对象添加到accounts集合,最后通过getter方法读取用户名和卡号,打印成功提示。
代码过程:
Account
public class Account {
//卡号
private String cardId;
//用户名
private String name;
//性别
private char sex;
//密码
private String password;
//余额
private double money;
//限额
private double limit;
//构造方法
public Account() {
}
public Account(String cardId, String name, char sex, String password, double money, double limit) {
this.cardId = cardId;
this.name = name;
this.sex = sex;
this.password = password;
this.money = money;
this.limit = limit;
}
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getName() {
return name + (sex == '男' ? "先生" : "女士");
}
public void setName(String name) {
this.name = name;
}
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;
}
@Override
public String toString() {
return "Account{" +
"cardId='" + cardId + '\\'' +
", name='" + name + '\\'' +
", sex='" + sex + '\\'' +
", password='" + password + '\\'' +
", money=" + money +
", limit=" + limit +
'}';
}
}
ATM
import java.util.ArrayList;
import java.util.Scanner;
public class ATM {
//创建一个存储账户对象的集合,后面每开一个账号,就往集合中添加一个账号对象
private ArrayList<Account> accounts = new ArrayList<>();
//为了后面键盘录入方便一点,先创建好一个Scanner对象
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:
System.out.println("用户登录");
break;
case 2:
this.createAccount();
break;
default:
System.out.println("输入有误,请重新输入…");
}
}
}
public void createAccount() {
System.out.println("=======系统开户操作=======");
//1.创建一个账户对象,用于封装用户的开户信息
Account acc = new Account();
//2.需要用户输入自己的开户信息,赋值给账户对象
System.out.println("请输入您的账户名称:");
String name = sc.next();
acc.setName(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 passwork = sc.next();
System.out.println("请再次输入您的密码:");
String okpasswork = sc.next();
//判断2次密码是否一致
if (okpasswork.equals(passwork)) {
acc.setPassword(passwork);
break;
} else {
System.out.println("您输入的密码不一致,请重新输入");
}
}
//设置取现额度
System.out.println("请输入您的取现额度:");
double limit = sc.nextDouble();
acc.setLimit(limit);
//把这个账户对象,存入到账户集合中去
accounts.add(acc);
System.out.println("恭喜您" + acc.getName() + "开户成功,您的卡号是:" + "10011001");
}
}
ATMTest
public class ATMTest {
public static void main(String[] args) {
ATM atm = new ATM();
atm.start();
}
}





