上一篇给出了工具类跟用户类, 现在给出业务类跟视图类
数据采用的是集合 ArrayList 来存储, 也可以改成用 HashMap 来存数据
废话不多说, 直接给代码好吧
首先是银行业务类 BankService
package com.ATM.service;
import com.ATM.bean.Account;
import java.util.ArrayList;
import java.util.List;
public class BankService {
private List accountList = new ArrayList<>();
public int checkCardNum(String cardNum) {
int index = -1;
for (int i = 0; i < accountList.size(); i++) {
Account account = accountList.get(i);
String ac = account.getCardNum();
if (cardNum.equals(ac)) {
index = i;
break;
}
}
return index;
}
public boolean openAccount(Account account) {
if (account == null) {
return false;
}
// 添加用户信息完成开户
accountList.add(account);
return true;
}
public int login(String cardNum, int password) {
int index = -1;
for (int i = 0; i < accountList.size(); i++) {
// 循环取出每个账号
Account account = accountList.get(i);
if (account.getCardNum().equals(cardNum) && account.getPassword() == password) {
index = i;
break;
}
}
return index;
}
public Account inputAccount(int index, double money) {
if (index < 0 || index > accountList.size() || money < 1) {
return null;
}
Account account = accountList.get(index);
money = account.getMoney() + money;
// 修改账户余额
account.setMoney(money);
return account;
}
public Account outAccount(int index, double money) {
if (index < 0 || index > accountList.size() || money < 1) {
return null;
}
Account account = accountList.get(index);
double getMoney = account.getMoney();
if (getMoney < money) {
System.out.println("余额不足");
return null;
}
account.setMoney(getMoney - money);
return account;
}
public Account queryAccount(int index) {
if (index < 0 || index > accountList.size()) {
return null;
}
Account account = accountList.get(index);
return account;
}
public Account transferAccount(int index, int resiveIndex, double money) {
if (index < 0 || index > accountList.size()) {
return null;
}
Account account = accountList.get(index);
Account resiveAccount = accountList.get(resiveIndex);
double accountMoney = account.getMoney();
double resiveAccountMoney = resiveAccount.getMoney();
if (accountMoney < money) {
return null;
}
account.setMoney(accountMoney-money);
resiveAccount.setMoney(resiveAccountMoney+money);
return account;
}
}
然后是银行的视图类 BankView
package com.ATM.view;
import com.ATM.bean.Account;
import com.ATM.service.BankService;
import com.ATM.util.DateUtil;
import com.ATM.util.KeyBoardInputUtil;
import java.util.Random;
public class BankView {
private static BankService bankService = new BankService();
private static int index = -1;
public static void main(String[] args) {
while (true) {
System.out.println("*****************************************");
System.out.println("* *");
System.out.println("* (●'◡'●) 欢迎来到中国银行 *");
System.out.println("* *");
System.out.println("*****************************************");
System.out.println();
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. 退出 ");
System.out.println("请输入要办理的项目: ");
int option = KeyBoardInputUtil.getInt();
// 开户
if (option == 1) {
// 重置登陆状态
index = -1;
// 生成卡号
String time = DateUtil.getDate(2);
int number = new Random().nextInt(1000);
String cardNum = time + number;
System.out.println(cardNum);
// 判断卡号是否重复
int isExists = bankService.checkCardNum(cardNum);
if (isExists != -1) { // 找到重复的卡号
System.out.println("账号重复, 请重新开卡");
} else {
System.out.println("请输入开户密码: ");
int password = KeyBoardInputUtil.getInt();
System.out.println("请再次输入开户密码: ");
int password2 = KeyBoardInputUtil.getInt();
if (password != password2) {
System.out.println("两次密码不一致, 请重试!!!");
} else {
System.out.println("请输入您的真实姓名: ");
String accountName = KeyBoardInputUtil.getString();
// 获取系统当前日期
String createDate = DateUtil.getDate(1);
// 默认开户为 0 元
double money = 0;
// 将开户需要的信息全部准备完后保存到 Account 对象中
Account account = new Account(cardNum, password, accountName, money, createDate);
boolean state = bankService.openAccount(account);
if (state) {
System.out.println("开户成功");
} else {
System.out.println("开户失败");
}
}
}
// 存款
} else if (option == 2) {
// 说明这是第一次登陆
if (index == -1) {
index = login();
}
if (index == -1) {
System.out.println("登陆失败");
} else {
System.out.println("登陆成功~~");
System.out.println("请输入您的存款金额: ");
double money = KeyBoardInputUtil.getDouble();
// 让银行业务类将存入的钱放入到相应的账户中
Account account = bankService.inputAccount(index, money);
if (account == null) {
System.out.println("存款失败!!!");
} else {
System.out.println("存款成功!!!");
// 利用返回的 Account 对象输出信息
System.out.println("尊敬的"+account.getAccountName()+"用户, 你的卡内余额是: "+account.getMoney()+"元");
}
}
// 取款
} else if (option == 3) {
// 说明这是第一次登陆
if (index == -1) {
index = login();
}
if (index == -1) {
System.out.println("登陆失败");
} else {
System.out.println("登陆成功");
System.out.println("请输入您要取款的金额: ");
double money = KeyBoardInputUtil.getDouble();
if (money < 1) {
System.out.println("数据不合法");
} else {
// 让银行业务类将金额取出
Account account = bankService.outAccount(index, money);
if (account == null) {
System.out.println("取款失败!!!");
} else {
System.out.println("取款成功!!!");
//调用银行业务类查询index位置的用户信息返回
System.out.println("尊敬的"+account.getAccountName()+",你的卡内余额是: "+account.getMoney()+"元");
}
}
}
// 查询余额
} else if (option == 4) {
// 说明这是第一次登陆
if (index == -1) {
index = login();
}
if (index == -1) {
System.out.println("登陆失败");
} else {
System.out.println("登陆成功");
Account account = bankService.queryAccount(index);
if (account == null) {
System.out.println("查询失败");
} else {
//调用银行业务类查询index位置的用户信息返回
System.out.println("尊敬的"+account.getAccountName()+",你的卡内余额是: "+account.getMoney()+"元");
}
}
// 转账
} else if (option == 5) {
// 说明这是第一次登陆
if (index == -1) {
index = login();
}
if (index == -1) {
System.out.println("登陆失败");
} else {
System.out.println("请输入要转账的卡号: ");
String reviceCardNum = KeyBoardInputUtil.getString();
int reviceAccountIndex = bankService.checkCardNum(reviceCardNum);
if (reviceAccountIndex == -1) {
System.out.println("账号错误, 请确认后再转账!!!!");
} else {
System.out.println("请输入要转账的金额: ");
double money = KeyBoardInputUtil.getDouble();
Account account = bankService.transferAccount(index, reviceAccountIndex, money);
if (account!=null){
System.out.println("转账成功!");
//调用银行业务类查询index位置的用户信息返回
System.out.println("尊敬的"+account.getAccountName()+",你的卡内余额是: "+account.getMoney()+"元");
}else{
System.out.println("转账失败!");
}
}
}
// 退卡
} else if (option == 6) {
if (index != -1) {
index = -1;
System.out.println("退卡成功!!!");
} else {
System.out.println("您还未登陆~~");
}
// 退出
} else if (option == 7) {
System.out.println("欢迎下次来办理业务, 再见!!");
break;
} else {
System.out.println("请输入正确的选项!!!!");
}
}
}
public static int login() {
System.out.println("请输入您的账号: ");
String cardNum = KeyBoardInputUtil.getString();
System.out.println("请输入您的密码: ");
int password = KeyBoardInputUtil.getInt();
// 调用银行业务类完成验证账号密码操作
int index = bankService.login(cardNum, password);
return index;
}
}
好了, 有需要完整代码的去把我上一篇的工具类跟用户类拷下来
然后放到对应的包下面就可以直接使用啦~~~~



