需求:
模拟ATM机,实现读卡,存款,取款,转账,打印等功能。
/**
*卡信息类
*/
public class UserInfo {
private String account; //账号
private String password; //密码
private String name; //持卡人姓名
private double balance; //余额
public UserInfo() {
}
public UserInfo(String account, String password, String name, double balance) {
this.account = account;
this.password = password;
this.name = name;
this.balance = balance;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
/**
*ATM类
*/
public class ATM {
UserInfo lisi = new UserInfo("10001", "123456", "李四", 2000);
UserInfo wangwu = new UserInfo("10002", "123456", "王五", 3000);
int count=3;
private boolean flag;
//创建list集合,存放转账信息
List<String> tranMoneyList=new ArrayList<>();
//创建list集合,存放所有操作信息
List<String> optionInfoList=new ArrayList<>();
public boolean isFlag(){
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
Scanner sc = new Scanner(System.in);
// 1、显示一段欢迎的信息
public void showWelcom() {
System.out.println("*****************");
System.out.println("**欢迎使用ATM**");
System.out.println("*****************");
}
//登录
public void login() {
System.out.println("请输入卡号");
String keyAccount = sc.next();
System.out.println("请输入密码");
String keyPassword = sc.next();
if (keyAccount.equals(lisi.getAccount()) && keyPassword.equals(lisi.getPassword())) {
System.out.println("欢迎" + lisi.getName() + "来到ATM系统");
showMenu();
} else {
if (count > 1) {//当count允许重新输入的次数大于1时执行
count--;
System.out.println("卡号或密码有误,请重新输入还有" + count + "机会");
} else {
System.out.println("请重新运行程序");
}
}
}
// 显示主菜单
public void showMenu() {
System.out.println("***********************************");
System.out.println("*******请输入你想要操作类型*******");
System.out.println("******1.余额查询 2.取款***********");
System.out.println("******3.存款 4.转账***********");
System.out.println("******5.打印 6.退卡***********");
System.out.println("******7.查询转账信息**************");
System.out.println("**********************************");
}
//查询余额
public void searchMoney(){
System.out.println("查询成功,余额为:" + lisi.getBalance());
}
//存款
public void saveMoney() {
System.out.println("请输入你存入的金额:");
Integer cun = sc.nextInt();
if ((cun <= 0) || (cun.toString().length() > 6)) {
System.out.println("不是吧,阿sir");
System.out.println("请重新输入把!");
saveMoney();
} else {
lisi.setBalance(lisi.getBalance() + cun);
System.out.println("存入成功,余额为:" + lisi.getBalance());
}
String saveMoneyInfo = "存款 存款金额:" + cun + "元 存款后余额:" + lisi.getBalance() + "元";
optionInfoList.add(saveMoneyInfo);//把存款信息放入optionInfoList集合
}
//取款
public void getMoney() {
System.out.println("请输入你取出的金额:");
double qu = sc.nextDouble();
if (qu > lisi.getBalance()) {
System.out.println("努力吧铁子,不然吃羊肉串都得闻味啊!");
getMoney();
} else if (qu <= 0) {
System.out.println("不是吧,阿sir");
getMoney();
} else {
lisi.setBalance(lisi.getBalance() - qu);
System.out.println("取钱成功,余额为:" + lisi.getBalance());
}
String getMoneyInfo = "取款 取款金额:" + qu + "元 取款后余额:" + lisi.getBalance() + "元";
optionInfoList.add(getMoneyInfo);//把取款信息放入optionInfoList集合
}
//转账
public void tranMoney() {
System.out.println("请输入要转入的卡号:");
String inAccount = sc.next();
System.out.println("请输入转入的金额:");
double zhuan = sc.nextDouble();
if (inAccount.equals(wangwu.getAccount())) {
if (zhuan > lisi.getBalance()) {
System.out.println("铁子,卡里没那么多");
tranMoney();
} else if (zhuan <= 0) {
System.out.println("不是吧,阿sir");
System.out.println("重新输入把!");
tranMoney();
} else {
lisi.setBalance(lisi.getBalance() - zhuan);
wangwu.setBalance(wangwu.getBalance() + zhuan);
System.out.println("转账成功,余额为:" + lisi.getBalance());
}
}else {
System.out.println("没有此卡号,请重新输入转入卡号......");
tranMoney();
}
String tranMoneyInfo="转方:"+lisi.getName()+"\t"+"对方姓名:"+wangwu.getName()+" "+"转出金额:"+zhuan+"\t"+"余额为:"+lisi.getBalance();
tranMoneyList.add(tranMoneyInfo);//把转账记录放入tranMoneyList集合
optionInfoList.add(tranMoneyInfo);//把转账记录放入optionInfoList集合
}
//打印操作信息,写入文件
public void print(){
//打开文件
File file=new File("F:\\billInfo.txt");
if (file.exists()){//判断,如果文件已存在,就删除
file.delete();
}else {
//创建一个文件,捕获异常
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
FileWriter fw=null;
try {
fw=new FileWriter(file);
String cardInfo = "卡号:" + lisi.getAccount() + "\t号主:" + lisi.getName() + "\n";
fw.write(cardInfo);
for (String s:optionInfoList){//把optionInfoList集合里的信息都循环遍历写入文件
String message=s.toString()+"\n";
fw.write(message);
fw.flush();//刷新缓冲区,将缓冲区中的数据立刻写入文件,同时清空缓冲区
}
} catch (IOException e) {
e.printStackTrace();
try {
//关闭资源
fw.close();
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
System.out.println("打印成功!");
System.out.println("存放路径:F:\\billInfo.txt");
}
//退卡
public void outCard(){
System.out.println("当前用户已退出!");
flag = false;
System.exit(0);
}
//打印转账信息
public void tranMoneyInfo(){
if (tranMoneyList.size()!=0){
for (String s:tranMoneyList){
System.out.println(s.toString());
}
}else {
System.out.println("无转账记录");
}
}
// 显示操作主菜单
public void optionMenu() {
//选择操作类型
String choose=sc.next();
switch (choose){
case "1":
//查询余额
searchMoney();
//显示主菜单
showMenu();
//操作主菜单
optionMenu();
break;
case "2":
//取款
getMoney();
//显示主菜单
showMenu();
//操作主菜单
optionMenu();
break;
case "3":
//存款
saveMoney();
//显示主菜单
showMenu();
//操作主菜单
optionMenu();
break;
case "4":
//转款
tranMoney();
//显示主菜单
showMenu();
//操作主菜单
optionMenu();
break;
case "5":
//打印操作信息
print();
//显示主菜单
showMenu();
//操作主菜单
optionMenu();
break;
case "6":
outCard();
break;
case "7":
//转款
tranMoneyInfo();
//显示主菜单
showMenu();
//操作主菜单
optionMenu();
break;
}
}
}
/**
*测试类
*/
public class Person_Test {
public static void main(String[] args) {
//创建ATM对象
ATM atm=new ATM();
//欢迎方法
atm.showWelcom();
//定义是否继续执行
boolean flag=true;
while (flag){
//登录方法
atm.login();
//操作主菜单方法
atm.optionMenu();
flag=atm.isFlag();
}
}
执行结果:
*****************
**欢迎使用ATM**
*****************
请输入卡号
10001
请输入密码
123456
欢迎李四来到ATM系统
***********************************
*******请输入你想要操作类型*******
******1.余额查询 2.取款***********
******3.存款 4.转账***********
******5.打印 6.退卡***********
******7.查询转账信息**************
**********************************
2
请输入你取出的金额:
200
取钱成功,余额为:1800.0
***********************************
*******请输入你想要操作类型*******
******1.余额查询 2.取款***********
******3.存款 4.转账***********
******5.打印 6.退卡***********
******7.查询转账信息**************
**********************************
3
请输入你存入的金额:
500
存入成功,余额为:2300.0
***********************************
*******请输入你想要操作类型*******
******1.余额查询 2.取款***********
******3.存款 4.转账***********
******5.打印 6.退卡***********
******7.查询转账信息**************
**********************************
4
请输入要转入的卡号:
10002
请输入转入的金额:
200
转账成功,余额为:2100.0
***********************************
*******请输入你想要操作类型*******
******1.余额查询 2.取款***********
******3.存款 4.转账***********
******5.打印 6.退卡***********
******7.查询转账信息**************
**********************************
7
转方:李四 对方姓名:王五 转出金额:200.0 余额为:2100.0
***********************************
*******请输入你想要操作类型*******
******1.余额查询 2.取款***********
******3.存款 4.转账***********
******5.打印 6.退卡***********
******7.查询转账信息**************
**********************************
5
打印成功!
存放路径:F:\billInfo.txt
***********************************
*******请输入你想要操作类型*******
******1.余额查询 2.取款***********
******3.存款 4.转账***********
******5.打印 6.退卡***********
******7.查询转账信息**************
**********************************
6
当前用户已退出!