主要实现ATM窗口一下功能 1.查看余额, 2.存款, 3.取款, 4.转账, 5.打印 6.查询转账信息, 7.退卡
以下是示例代码
封装对象类
package com.hope.entity;
public class User {
private String name;//持卡人姓名
private String card;//账号
private String pwd;//密码
private Double money;//余额
public User(String name, String card, String pwd, Double money) {
this.name = name;
this.card = card;
this.pwd = pwd;
this.money = money;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", card='" + card + '\'' +
", pwd='" + pwd + '\'' +
", money=" + money +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
}
工具类
package com.hope.entity;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class UserTools {
static int count = 3;
//获取控制台输入对象
Scanner sc = new Scanner(System.in);
String str = null;
/**
* 初始化用户的信息
*
* @return
*/
public List<User> getList() {
//创建list集合存放User对象
List<User> listuser = new ArrayList<>();
User zhangsan = new User("张三", "1001", "123456", 2000.0);
User lisi = new User("李四", "1002", "123456", 2000.0);
listuser.add(zhangsan);
listuser.add(lisi);
return listuser;
}
/**
* 登陆方法
*
* @param userList 存放初始化User对象
* @return 返回User对象 用于判断!=null 表示登陆成功
*/
public User login(List<User> userList) {
User user = null;
if (count > 0) {
//提示输入卡号
System.out.println("请输入卡号:");
//获取输入的卡号
String card = sc.next();
//提示输入密码
System.out.println("请输入密码:");
//获取输入的密码
String pwd = sc.next();
//输入完毕之后 循环遍历用户集合
for (User srcuser : userList) {
//判断 如果输入的卡号和密码 和初始账号密码一样 登陆成功
if (card.equals(srcuser.getCard()) && pwd.equals(srcuser.getPwd())) {
user = srcuser;
return user;
} else {
count--;
System.out.println("-----------输入错误--------" + count);
break;
}
}
}
return user;
}
/**
* 查询个人余额方法
*
* @param user 当前登陆成功的User用户
*/
public String showMoney(User user) {
return str = user.getName() + "的余额为:" + user.getMoney();
}
/**
* 存放金额方法
*
* @param user
*/
public String addMoney(User user, int number) {
Double money = user.getMoney() + number;
user.setMoney(money);
System.out.println("存款成功" + money);
return str = user.getName() + " 存款金额: " + number+"元\t存款后余额:"+user.getMoney();
}
/**
* 取款方法
*
* @param user .getMoney()当前金额
* @param Withdraw 取款金额
*/
public String delMoney(User user, int Withdraw) {
if (user.getMoney() > Withdraw) {
double v = user.getMoney() - Withdraw;
user.setMoney(v);
System.out.println("取款成功"+user.getMoney());
} else {
System.out.println("金额不足");
}
return str = user.getName() + "取款金额: " + Withdraw+"元\t取款后余额:"+user.getMoney();
}
/**
* 判断是否有输入的卡号
* @param list
* @param card
* @return 返回该对象
*/
public User findOne(List<User> list,String card){
for (User user:list) {
if (user.getCard().equals(card)){
return user;
}
}
return null;
}
/**
* 转账方法
*
* @param list 用户集合
* @param user 当前用户
*/
public String Transfer(List<User> list, User user) {
System.out.println("请输入要转账的卡号");
String card = sc.next();
//遍历用户集合
for (User tUser : list) {
//判断输入的卡号不是当前用户的卡号
if (!user.getCard().equals(card)) {
//调用方法 查找list集合有没有输入的卡号
User one = findOne(list, card);
//one 返回的对象不为空表示 有此卡号
if (one!=null) {
System.out.println("输入转账的金额:");
//声明变量接收要转的金额
int TransferMoney = sc.nextInt();
//判断当前用户的金额 是否大于 转账的金额
if (user.getMoney() > TransferMoney) {
//当前用户大于转账的金额时 当前用户的金额重新赋值=当前金额-转账金额
user.setMoney(user.getMoney() - TransferMoney);
//将接受转账的用户的金额重新赋值=用户的金额+转账金额
one.setMoney(one.getMoney() + TransferMoney);
System.out.println("转账成功\t" + user.getName() + "的余额为:\t" + user.getMoney());
//将转账信息添加到 str 字符串中
str = user.getName()+ "给卡号 "+tUser.getCard() + "转账" +TransferMoney+"元\t转账后余额:"+user.getMoney();
return str;
} else {
System.out.println("账户金额不足,不支持转账");
}
} else {
//此用户不存在
System.out.println("卡号输入格式错误没有此卡");
break;
}
} else {
System.out.println("不可以给自己转账");
break;
}
}
return null;
}
/**
* 打印方法
* @param messageAll 存放所有操作信息的集合
* @throws IOException
*/
public void print(List<String> messageAll) throws IOException {
File file = new File("D:\\U盘\\load\\a.txt");
//判断是否有此文件 存在删除
if (file.exists()){
file.delete();
}else {
//创建文件
file.mkdir();
}
FileWriter fw = new FileWriter(file);
//遍历存放所有操作信息的messageAll集合
for (String s:messageAll) {
String value=s.toString()+"\n";
//写入
fw.write(value);
fw.write("--------------------------------\n");
}
//清除清空缓冲区数据
fw.flush();
//关闭资源
fw.close();
System.out.println("打印成功\t地址在:D:\\U盘\\load\\a.txt");
}
}
测试类
package com.hope.entity;
import java.io.IOException;
import java.util.*;
public class ATMTest {
public static void main(String[] args) throws IOException {
System.out.println("****************欢迎使用ATM******************");
//创建list集合用于所有操作信息
List<String> MessageAll = new ArrayList<>();
//只存放转账信息
List<String> mTransfer = new ArrayList<>();
//调用工具类
UserTools userTools = new UserTools();
//声明一个对象变量 接收登陆成功的 的对象值
User login = null;
//用于判断是否循环
boolean bn = true;
//登陆失败循环次数
int cout = 3;
//初始化用户信息List存放数据
List<User> listuser = userTools.getList();
//循环登陆
while (bn) {
login = userTools.login(listuser);
if (login != null) {//当获得的对象不为空时 表示登陆成功
System.out.println("登陆成功");
break;
} else {//如果登陆不成功 继续循环登陆 直到3次结束
if (cout > 0) {
cout--;//循环次数递减
System.out.println("----------登陆失败-----------" + cout);
} else {//再循环3次内 还未登陆成功 结束循环 不可以在登陆了
System.out.println("没有机会了");
break;
}
}
}
//获取控制台输入对象
Scanner sc = new Scanner(System.in);
//登陆成功 展示其他业务
if (login != null) {
//输入业务编号错误循环的次数
int BusinessNumber = 3;
//循环业务功能
while (bn) {
System.out.println("1.查看余额,2.存款,3.取款,4.转账,5.打印 6.查询转账信息,7.退卡");
//判断输入的编号是否是数子
if (sc.hasNextInt()) {
//是数字接收输入的编号值
int num = sc.nextInt();
//switch循环便利输入的编号值执行代码块的功能
switch (num) {
case 1:
//通过工具类调用查询显示余额方法
System.out.println(userTools.showMoney(login).toString());
break;
case 2:
System.out.println("请输入要存的金额 金额范围在:1~20000以内");
int number = sc.nextInt();//输入的金额值
if (number <= 0) {//如果输入的金额值小于或者等于0 不可以存款 返回重新操作
System.out.println("输入格式错误,返回上一级");
} else if (number > 20000) {
System.out.println("输入的金额过大,请移至柜台处理");
} else {//当都不符合上面条件时执行 通过工具类执行存款金额
//存放金额 将当前登陆用户对象 和输入的金额 传参
String mAdd = userTools.addMoney(login, number);
//将操作信息添加到MessageAll中
MessageAll.add(mAdd);
}
break;
case 3:
System.out.println("输入取款金额:");
int Withdraw = sc.nextInt();
//将当前用户 和 输入的取款金额 传参进行调用取款方法
String mDelMoney = userTools.delMoney(login, Withdraw);
//将操作信息添加到MessageAll中
MessageAll.add(mDelMoney);
break;
case 4:
//转账
//将转账方法的返回值信息添加到message
String transfer = userTools.Transfer(listuser, login);
if (transfer!=null){
//将转账操作信息添加到mTransfer中单独存放
mTransfer.add(transfer);
//将操作信息添加到MessageAll中
MessageAll.add(transfer);
}
break;
case 5:
//打印信息的时候在刷新查询个人余额方法 将返回的余额信息添加MessageAll集合中
String mShowOne = userTools.showMoney(login);
MessageAll.add(mShowOne);
userTools.print(MessageAll);
break;
case 6:
if (mTransfer.size() != 0) {
for (String mt : mTransfer) {
System.out.println(mt.toString());
}
} else {
System.out.println("暂时没有转账信息");
}
break;
case 7:
System.out.println("当前用户已退出");
//false结束循环
bn = false;
//结束当前正在运行中的java虚拟机 正常退出程序
System.exit(0);
break;
default:
if (BusinessNumber > 1) {//当业务编号的循环次数>1 继续循环
BusinessNumber--;
System.out.println("没有该项业务请重新输入,还有" + BusinessNumber + "机会");
} else {//否则 结束循环
bn = false;
}
break;
}
} else {
//输入的不是数字 直接结束循环 ATM机没有字母
System.out.println("输入错误,没有该项业务请重新登陆");
bn = false;
}
}
}
}
}