三、总体设计(设计原理、设计方案及流程等) 我的代码使用了对象序列化和反序列化的方式 将对象属性保存到磁盘中去,从而实现记录底层数据,并且将序列化和反序列化写成两个独立的方法,我们只需在主类中调用方法即可;在对象类中实现了Serializable类。 在com.ggc包下创建了BankAccount对象类 在BankAccount类中定义了一些private属性和对应的public型setter和getter方法用于对成员变量赋值和引用 在主类中定义的mothod1方法用于对错误卡号报错并重新输入 Mothod2方法用于对错误密码报错并重新输入 卡号为键,对象为值。用keySet方法得到键的set集合,用增强for循环,并在循环中对输入的卡号进行判断,如果错误就一直调用mothod1方法,从而实现卡号报错并重新输入; 密码判断与卡号判断大致相同mothod2方法 1.存款 2.取款 3.余额查询 4.修改密码 0.退出 该业务使用switch开关语句,在语句中使用while语句检验输入的金额是否合法,并实现重新输入。 特点:在switch语句外面使用while语句来实现0.退出功能 使用方法循环调用的形式对错误内容报错并重新输入 四、参考代码 有关银行子类的代码1 BankAccount /*
original author: jacky Li
Email : 3435673055@qq.com
Time of completion:2022.12.20
Last edited: 2022.12.20
*/
package bank;
/**
* 银行账户实体类
*
*/
public class BankAccount {
private String name;
private String bankId;
private String password;
private double money;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBankId() {
return bankId;
}
public void setBankId(String bankId) {
this.bankId = bankId;
}
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;
}
@Override
public String toString() {
return "账户名:" + name + "\n银行卡号:" + bankId + "\n银行卡密码:" + password + "\n余额:" + money;
}
public BankAccount(String name, String bankId, String password, double money) {
super();
this.name = name;
this.bankId = bankId;
this.password = password;
this.money = money;
}
public BankAccount() {
super();
}
}
有关该项目的主体实现代码2 Main /*
original author: jacky Li
Email : 3435673055@qq.com
Time of completion:2022.12.20
Last edited: 2022.12.20
*/
package bank;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
// 储存账户信息
private static Map<String, BankAccount> accounts;
private static Scanner scanner = new Scanner(System.in);
private static BankAccount bankAccount;
/**
* 初始化账户信息
*
* @return 初始化结果
*/
public static boolean init() {
BankAccount account1 = new BankAccount("张三", "11234", "123", 1000.99);
BankAccount account2 = new BankAccount("李四", "22134", "456", 2000);
BankAccount account3 = new BankAccount("王五", "33124", "789", 100.99);
accounts = new HashMap<String, BankAccount>();
accounts.put(account1.getBankId(), account1);
accounts.put(account2.getBankId(), account2);
accounts.put(account3.getBankId(), account3);
// 返回初始化结果
return accounts.isEmpty() ? false : true;
}
/**
* 系统入口
*
* @param args
*/
public static void main(String[] args) {
System.out.println("银行系统正在启动...");
if (init()) {
System.out.println("--系统启动成功--");
System.out.println("输入卡号:");
String id = scanner.next();
System.out.println("输入密码:");
String psw = scanner.next();
if (login(id, psw)) {
// 进入系统
System.out.println("--登录成功--");
menu(bankAccount);
} else {
System.out.println("--登录失败--");
}
} else {
System.out.println("--系统启动失败--");
}
}
/**
* 返回登录结果
*
* @param id
* @param psw
* @return
*/
private static boolean login(String id, String psw) {
bankAccount = accounts.get(id);
return null == bankAccount ? false : true;
}
/**
* 功能菜单
*
* @param account
*/
private static void menu(BankAccount account) {
System.out.println("--当前账户:" + account.getName() + "--");
main: while (true) {
System.out.println("1:存款 2:取款 3:余额 4:修改密码 0:退出");
int item = scanner.nextInt();
switch (item) {
case 0:
scanner.close();
System.out.println("--退出系统--");
break main;
case 1:
System.out.println("--存款系统--");
saveMoney(accounts, account);
break;
case 2:
System.out.println("--取款系统--");
ereduceMoney(accounts, account);
break;
case 3:
System.out.println("--余额系统--");
showMoney(account);
break;
case 4:
System.out.println("--修改密码--");
rePassword(accounts, account);
break;
default:
System.out.println("--错误的指令--");
break;
}
}
}
/**
* 修改密码
*
* @param accounts2
* @param account
*/
private static void rePassword(Map<String, BankAccount> accs, BankAccount account) {
System.out.println("输入旧的密码:");
String oldPsw = scanner.next();
if (oldPsw.equals(account.getPassword())) {
System.out.println("输入新的密码:");
String newPsw = scanner.next();
account.setPassword(newPsw);
accs.put(account.getBankId(), account);
System.out.println("--修改成功--");
} else {
System.out.println("--旧密码错误--");
}
}
private static void showMoney(BankAccount account) {
System.out.println(account);
}
/**
* 取款
*
* @param accounts2
* @param account
*/
private static void ereduceMoney(Map<String, BankAccount> accounts2, BankAccount account) {
System.out.println("输入取款金额:");
double money = scanner.nextDouble();
double now = account.getMoney();
if (money <= now) {
account.setMoney(now - money);
accounts2.put(account.getBankId(), account);
System.out.println("--取款成功--");
} else {
System.out.println("--余额不足--");
}
}
private static void saveMoney(Map<String, BankAccount> accounts2, BankAccount account) {
System.out.println("输入存入金额:");
double money = scanner.nextDouble();
account.setMoney(account.getMoney() + money);
accounts2.put(account.getBankId(), account);
System.out.println("--存款成功--");
}
}
五、运行效果 作者有言
如果感觉博主讲的对您有用,请点个关注支持一下吧,将会对此类问题持续更新……
|