思路分析:
-
由于每一个账户都包含一些个人信息,比如:卡号、姓名、性别、密码、余额、每次取现额度等等。所以,首先可以设计一个Account类,用来描述账户对象需要封装那些数据。
-
紧接着,定义一个ATM类,用来表示ATM系统,负责提供所有的业务需求。
比如:展示ATM系统的欢迎页面、开户、登录、转账等功能。
-
最后,定义一个测试类Test,负责启动我们开发好的ATM系统,进行测试。
1.首先可以设计一个Account类,来描述账户对象需要封装哪些数据。
2.编写一个ATM类,负责对每一个账户对象进行管理,创建一个存储账户对象的集合;后面每开一个账户,就往集合中添加一个账户对象, 为了后面键盘录入方便一点,先创建好一个Scanner对象。
3.在ATM类中,编写欢迎界面,
为了系统的代码结构更加清晰,在ATM类中,写一个开户的方法。
步骤如下:
-
1、创建一个账户对象,用于封装用户的开户信息
-
2、需要用户输入自己的开户信息,赋值给账户对象
-
输入账户名,设置给账户对象
-
输入性别,如果性别是'男'或者'女',将性别设置给账户对象;否则重新录入性别直到录入正确为止。
-
输入账户、并且输入两次密码,只有两次密码相同,才将账户和密码设置给账户对象。
-
输入提现限额,并且设置给账户对象
-
-
3、输出开户成功,的提示语句。
在ATM类中,写一个判断卡号是否存在的功能。
-
遍历存储Account对象的集合,得到每一个Account对象,获取对象的卡号
-
如果卡号存在,返回该卡号对应的Account对象
-
如果卡号不存在,返回null
在ATM类中,写一个生成卡号的功能
-
1、先随机产生8个[0,9]范围内的随机数,拼接成一个字符串
-
2、然后再调用getAccountByCardId方法,判断这个卡号字符串是否存在
-
3、判断生成的卡号是否存在
-
如果生成的卡号不存在,说明生成的卡号是有效的,把卡号返回,
-
如果生成的卡号存在,说明生成的卡号无效,循环继续生产卡号。
登录功能具体实现步骤如下:
-
1、判断系统中是否存在账户对象,存在才能登录,如果不存在,我们直接结束登录操作
-
2、输入登录的卡号,并判断卡号是否存在
-
3、如果卡号不存在,直接给出提示
-
4、如果卡号存在,接着输入用户密码,并判断密码是否正确
-
5、如果密码也正确,则登录成功,并且记录当前的登录账户
代码:
public class Account {
private String cardId;//卡号
private String userName;//用户名
private char sex;//性别
private String passWord;//密码
private double money;//余额
private double limit;//限额
public Account() {
}
public Account(String cardId, String userName, char sex, String passWord, double money, double limit) {
this.cardId = cardId;
this.userName = userName;
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 getUserName() {
return userName + (sex == '男'?"先生" : "女士" );
}
public void setUserName(String userName) {
this.userName = userName;
}
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;
}
}
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
//创建一个存储账户对象的集合
private ArrayList<Account> accounts = new ArrayList<>();
//创建一个键盘录入对象
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:
this.login();
break;
case 2:
this.createAccount();
break;
default:
System.out.println("没有该操作~~");
}
}
}
//完成用户开户功能
private void createAccount(){
System.out.println("===系统用户开户操作===");
//1.创建一个账户对象用于封装用户的开户信息
Account acc = new Account();
//2.让用户输入自己的开户信息,赋值给账户对象
System.out.println("请输入您的账户名称:");
String name = sc.next();
acc.setUserName(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 passWord = sc.next();
System.out.println("请您再次输入确认密码:");
String okPassWord = sc.next();
if (okPassWord.equals(passWord)){
acc.setPassWord(okPassWord);
break;
}else {
System.out.println("您输入的2次密码不一样,请您重新输入~");
}
}
System.out.println("请您输入您的取现额度:");
double limit = sc.nextDouble();
acc.setLimit(limit);
//生成一个卡号
String newCardId = createCardId();
acc.setCardId(newCardId);
//把这个账户对象存储到集合中去
accounts.add(acc);
System.out.println("恭喜您," + acc.getUserName() + "开户成功,您的卡号是:" + acc.getCardId());
}
//根据卡号查询账户对象返回
private Account getAccountCardId(String cradId){
//遍历全部账户对象
for (int i = 0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
if (acc.getCardId().equals(cradId)){
return acc;
}
}
return null;//查无此账户,这个卡号不存在
}
//生成卡号
private String createCardId(){
while (true){
//1.定义一个String类型的变量
String cardId = "";
//2.使用循环
Random r = new Random();
for (int i = 0; i < 8; i++) {
int data = r.nextInt(10);
cardId += data;
}
//3.判断cardId中记住的卡号
Account acc = getAccountCardId(cardId);
if (acc == null){
return cardId;
}
}
}
//记住登录后的用户账户
private Account loginAcc;
//完成用户的登录操作
private void login(){
System.out.println("==系统登录==");
//1.判断系统中是否存在账户对象,存在才能登陆,如果不存在直接结束
if (accounts.size() == 0){
System.out.println("当前系统中无任何账户,请先开户再来登录~");
return;
}
//2.系统中存在账户对象,可以开始进行登录操作了
while (true){
System.out.println("请您输入登录卡号:");
String cardId = sc.next();
//3.判断这个卡号是否存在
Account acc = getAccountCardId(cardId);
if (acc == null){
System.out.println("您输入的登录卡号不存在,请确认~");
}else{
while (true){
//卡号存在
System.out.println("请您输入登录密码:");
String passWord = sc.next();
if (acc.getPassWord().equals(passWord)){
loginAcc = acc;
System.out.println("恭喜您," + acc.getUserName() + "登录成功,您的卡号是:" + acc.getCardId() );
showUserCommand();
return;
}else {
System.out.println("您输入的密码不正确,请确认~");
}
}
}
}
}



