ATM系统案例练习
1.首先先分析一下这个案例有几个对象,很明显可以分为用户对象和ATM对象,当然也可以分成其他的对象,能够让自己更好入手就好。
- 分析完有几个对象后,就可以分析每个对象都具备哪些功能 用户的功能
- 用户的功能有两个
1.显示界面
2.退出界面 - ATM的功能有
1.用户登入功能
2. 用户注册功能
3. ATM机的功能 该功能又可分为
一.存钱
二.取钱
三.转账
四.查看
五.修改密码
六.退出
七.注销 - 分析完后就可以开始写代码了
先写用户的功能:
创建一个用户类
public class user {
//用户的功能有两个
//1.显示界面
//2.退出界面
public static void main(String[] args) {
ATM atm = new ATM();
while (true) {
System.out.println("-------------欢迎使用蔡氏银行ATM------------");
System.out.println("请选择下列功能:");
System.out.println("1.登入");
System.out.println("2.注册");
Scanner inpu = new Scanner(System.in);
int userinpu = inpu.nextInt();
switch (userinpu) {
//登入
case 1:
atm.userlogin(inpu);
break;
//注册
case 2:
atm.userenroll(inpu);
break;
}
}
}
}
**
再写ATM功能前我们还需要创建一个存储用户信息的类
**
public class ATMinfo {
private String name; //用户名
private String password; //密码
private String idunmber; //银行卡号
private String number; //手机号
private double money; //账户余额
public ATMinfo() {
}
public ATMinfo(String name, String password, String idunmber, String number,double money) {
this.name = name;
this.password = password;
this.idunmber = idunmber;
this.number = number;
this.money = money;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getIdunmber() {
return idunmber;
}
public void setIdunmber(String idunmber) {
this.idunmber = idunmber;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@Override
public String toString() {
return "用户名:"+name+"\t银行卡号:"+idunmber;
}
}
ATM的功能:
首先我们要先创建一个 用户信息的对象和一个存储用户信息的集合,还有一个是用于接收ATM信号的变量
ArrayList<ATMinfo> users = new ArrayList<>();
ATMinfo user = new ATMinfo();
boolean f = false; //接收ATM返回的信息
.注册功能
1.输入账户名称,密码
2.判断两次密码输入是否相等
3.调用随机数方法生成7为随机数
4.把所有的用户信息全部都录入集合中
5.输出用户名和卡号给用户
//用户注册功能
public void userenroll(Scanner inpu) {
System.out.print("请输入用户名:");
String name = inpu.next();
String password1 = "";
while (true) {
System.out.print("请输入用户密码:");
password1 = inpu.next();
System.out.print("请再次确定用户密码:");
String password2 = inpu.next();
if (password1.equals(password2)) {
break;
} else System.out.println("两次密码不一样,请重新输入!!!");
}
System.out.print("请输入你的手机号:");
String number = inpu.next();
//用户输入完手机号后就需要生成随机的银行卡号
String idunmber = idunmber(users, user);
users.add(new ATMinfo(name, password1, idunmber, number, 0.0));
System.out.println("================您以成功注册蔡氏银行=================");
System.out.println("用户名:" + name + "\t" + "银行卡号:" + idunmber);
}
随机7为卡号设置为一个单独的方法
//生成7位随机卡号
/**
* @param users 接收用户信息的集合
* @param user 接收用户信息
* @return 返回一个7为的字符串
*/
public String idunmber(ArrayList<ATMinfo> users, ATMinfo user) {
//定义一个接收随机数的空字符
String idunmber = "";
Random r = new Random();
int id = 0;
while (true) {
//定义一个标记来退出while循环
boolean f = false;
for (int i = 0; i < 7; i++) {
id = r.nextInt(10);
idunmber += id;
}
//判断随机数是否有重复的
//如果是第一位就不用进行判断
if (users.size() == 0) {
f = true;
} else
for (int i = 0; i < users.size(); i++) {
user = users.get(i);
if (!user.getIdunmber().equals(idunmber)) {
f = true;
}
}
//f = true 则可以退出循环了
if (f == true) {
break;
}
}
return idunmber;
}
接下来我们就可以先测试一些注册功能
-------------欢迎使用蔡氏银行ATM------------
请选择下列功能:
1.登入
2.注册
2
请输入用户名:蔡徐坤
请输入用户密码:123
请再次确定用户密码:123
请输入你的手机号:123
================您以成功注册蔡氏银行=================
用户名:蔡徐坤 银行卡号:5398244
**
登入功能:
1.判断系统有没有用户
2.验证用户名是否存在
3.判断密码是否相同
4.进入ATM系统
5.接收注销账户信息
public void userlogin(Scanner inpu) {
if (users.size() == 0) {
System.out.println("目前系统还没有用户哦!!!");
return;
} else
System.out.print("请输入卡号:");
String idunmber = inpu.next();
for (int i = 0; i < users.size(); i++) {
ATMinfo W = users.get(i);
if (!W.getIdunmber().equals(idunmber)) {
System.out.println("卡号错误");
return;
} else break;
}
System.out.print("请输入密码:");
String password = inpu.next();
for (int i = 0; i < users.size(); i++) {
user = users.get(i);
if (idunmber.equals(user.getIdunmber()) && password.equals(user.getPassword())) {
f = ATMFun(inpu, user, users, f);
//第7个注销功能
if (f = true) {
for (int j = 0; j < users.size(); j++) {
ATMinfo Dele = users.get(i);
if (user.getIdunmber().equals(Dele.getIdunmber())) {
users.remove(i);
}
}
}
} else System.out.println("密码错误!!!");
}
}
**
ATM功能
**
- param inpu 接收扫描器
- param user 接收用户信息
- param users 接收用户集合
- param f 反回注销信号
- return 返回注销的信号
- 1.展示界面
- 2.调用个个功能的方法
- 3.利用while 循环让界面一直存在
//ATM机的功能
/**
* @param inpu 接收扫描器
* @param user 接收用户信息
* @param users 接收用户集合
* @param f 反回注销信号
* @return 返回注销的信号
* 1.展示界面
* 2.调用个个功能的方法
* 3.利用while 循环让界面一直存在
*/
public boolean ATMFun(Scanner inpu, ATMinfo user, ArrayList<ATMinfo> users, boolean f) {
while (true) {
System.out.println("-----------------请选择以下功能---------------");
System.out.println("1:存钱");
System.out.println("2:取钱");
System.out.println("3:转账");
System.out.println("4:查看存款");
System.out.println("5:修改密码");
System.out.println("6:退出");
System.out.println("7:注销账户");
int fun = inpu.nextInt();
if (fun == 6) {
return false;
}
switch (fun) {
case 1:
//存款功能
inpumoney(inpu, user);
break;
case 2:
//取钱功能
unpumoney(inpu, user);
break;
case 3:
//转账功能
giro(inpu, user, users);
break;
case 4:
//查看功能
find(user);
break;
case 5:
//修改密码功能
amendpassword(inpu, user);
break;
case 6:
//退出功能
break;
default:
System.out.println("输入错误");
}
if (fun == 7) {
//注销账户
System.out.println("您确定要注销账户吗?");
System.out.println("请输入\t [1]确认\t [2]取消");
int i = inpu.nextInt();
if (i == 1) {
f = true;
return f;
}
}
if (fun == 5) {
return false;
}
}
}
这样三大模块就做好了,接下来再慢慢添加功能进去就能够完成这个系统了
存款
//第一个功能存款
/**
* @param inpu 接收扫描
* @param user 接收用户信息
*/
public void inpumoney(Scanner inpu, ATMinfo user) {
//提示用户存多少钱
System.out.print("请输入存款金额:");
int inpus = inpu.nextInt();
user.setMoney(inpus);
System.out.println("存款成功");
}
**
取款
//第二个功能取款
/**
* @param inpu 接收扫描器
* @param user 接收用户信息
* 判断不能取出的钱比存款多
*/
public void unpumoney(Scanner inpu, ATMinfo user) {
int unpu = 0;
double i = 0;
while (true) {
System.out.println("你想取多少钱:");
unpu = inpu.nextInt();
i = user.getMoney();
if (unpu > i) {
System.out.println("你没有这么多钱能取!!!");
} else
break;
}
//再将最终剩下的存款存入集合中
user.setMoney(i - unpu);
System.out.println("取款成功");
}
**
转账
//第三个功能转账
/**
* @param inpu 接收扫描器
* @param user 接收用户信息
* @param users 接收集合
* 1.判断用户有没有钱,有钱才能转账
* 2.用户不能给自己转账
* 3.用户的转账额度不能超出存款
* 4.判断有没有该卡号的用户
* 5.循环3次,三次错误将退出转账功能
*/
public void giro(Scanner inpu, ATMinfo user, ArrayList<ATMinfo> users) {
boolean ff = false;
if (user.getMoney() == 0) {
System.out.println("你的余额为0");
return;
}
for (int j = 0; j < 3; j++) {
System.out.print("请输入对方卡号:");
String us = inpu.next();
if (us.equals(user.getIdunmber())) {
System.out.println("不能给自己转账!!!");
System.out.println("------------------------------------------");
break;
}
for (int i = 0; i < users.size(); i++) {
ATMinfo W = users.get(i);
if (us.equals(W.getIdunmber())) {
System.out.print("请输入转账金额:");
int uss = inpu.nextInt();
double n = user.getMoney();
if (uss>n)
{
System.out.println("转账金额超出本金");
break;
}
user.setMoney(n - uss);
double m = W.getMoney();
W.setMoney(m + uss);
System.out.println("转账已完成");
ff = true;
}
}
if (ff == false) {
System.out.println("没有该账户!!!");
} else return;
}
}
**
查看和修改密码
//第六个功能修改密码
/**
*
* @param inpu 接收扫描器
* @param user 接收用户信息
*
*/
public void amendpassword(Scanner inpu, ATMinfo user) {
for (int i = 0; i < 3; i++) {
System.out.println("请输入原来的密码:");
String password = inpu.next();
if (user.getPassword().equals(password)) {
System.out.println("请输入新的密码:");
password = inpu.next();
user.setPassword(password);
System.out.println("修改成功,请重新登入!!");
break;
} else System.out.println("密码错误!!!");
System.out.println("请重新输入!");
}
}
//第四个功能查看功能
/**
*
* @param user 接收用户信息
* 输出用户信息
*/
public void find(ATMinfo user) {
System.out.println("您当前用户余额为:" + user.getMoney());
}
注销功能在执行完用户选择后,程序将执行登入功能的下一步,注销功能就放在这里
//第7个注销功能
if (f = true) {
for (int j = 0; j < users.size(); j++) {
ATMinfo Dele = users.get(i);
if (user.getIdunmber().equals(Dele.getIdunmber())) {
users.remove(i);
}
}
}
至此整个系统就完成啦,大家有兴趣的可以试试