文件下载地址:https://pan38.com/xiazai/index.php?id=24 提取码:d2be
前言:为什么要写这个模拟器?
“老师上课讲的银行系统太抽象了!” “面试被问到银行系统设计直接懵了” 你是不是也有这样的烦恼?

今天我们就用Java手搓一个工商银行模拟器教学演示版,涵盖存款、取款、转账、开户等核心功能!全程代码可运行,注释详细到哭!
🎯 项目结构预览
text
工商银行模拟器/
├── src/
│ ├── BankSystem.java # 主系统入口
│ ├── BankAccount.java # 账户类
│ ├── BankOperation.java # 银行操作接口
│ └── BankUtils.java # 工具类
├── README.md
└── 数据库模拟文件.txt
💻 核心代码实现(教学注释版)
账户实体类设计
java
/**- 银行账户实体类 - 教学演示版
注意:真实银行系统要复杂得多,这里做了教学简化
*/
public class BankAccount {
// 账户基本信息
private String accountNumber; // 账号
private String accountName; // 户名
private String idCard; // 身份证号
private String phone; // 手机号
private double balance; // 余额
private String password; // 密码(演示用,真实系统要加密!)
private Date createDate; // 开户日期
private boolean isActive; // 账户状态// 构造方法 - 开户时使用
public BankAccount(String accountName, String idCard,String phone, double initialDeposit, String password) {// 生成账号:ICBC + 时间戳 + 随机数(模拟真实生成规则)
this.accountNumber = "ICBC" + System.currentTimeMillis() % 1000000;
this.accountName = accountName;
this.idCard = idCard;
this.phone = phone;
this.balance = initialDeposit;
this.password = password; // 注意:实际项目要使用加密存储!
this.createDate = new Date();
this.isActive = true;System.out.println("✅ 开户成功!账号:" + this.accountNumber);
System.out.println("温馨提示:初始存款" + initialDeposit + "元已到账");
}// Getter和Setter方法
public String getAccountNumber() { return accountNumber; }
public double getBalance() { return balance; }// 存款方法
public boolean deposit(double amount) {
if (amount <= 0) {System.out.println("❌ 存款金额必须大于0"); return false;}
this.balance += amount;
System.out.println("✅ 存款成功!存入:" + amount + "元,余额:" + this.balance + "元");
return true;
}// 取款方法(带密码验证)
public boolean withdraw(double amount, String inputPassword) {
if (!this.password.equals(inputPassword)) {System.out.println("❌ 密码错误!"); return false;}
if (amount <= 0) {
System.out.println("❌ 取款金额必须大于0"); return false;}
if (amount > this.balance) {
System.out.println("❌ 余额不足!当前余额:" + this.balance + "元"); return false;}
this.balance -= amount;
System.out.println("✅ 取款成功!取出:" + amount + "元,余额:" + this.balance + "元");
return true;
}// 显示账户信息(隐藏部分敏感信息)
public void displayInfo() {
System.out.println("\n======= 账户信息 =======");
System.out.println("账号:" + this.accountNumber);
System.out.println("户名:" + this.accountName);
System.out.println("余额:" + this.balance + "元");
System.out.println("状态:" + (isActive ? "正常" : "冻结"));
System.out.println("开户日期:" + this.createDate);
System.out.println("=======================\n");
}
}
银行操作接口设计
java
/**- 银行操作接口 - 定义银行的核心业务
教学重点:接口的作用和设计模式
*/
public interface BankOperation {// 开户
BankAccount openAccount(String name, String idCard,String phone, double deposit, String password);// 存款
boolean deposit(String accountNumber, double amount);// 取款
boolean withdraw(String accountNumber, double amount, String password);// 转账(重点功能!)
boolean transfer(String fromAccount, String toAccount,double amount, String password);// 查询余额
double queryBalance(String accountNumber, String password);// 修改密码
boolean changePassword(String accountNumber, String oldPwd, String newPwd);
}
- 工商银行系统实现类
java
import java.util.*;
/**
- 工商银行模拟系统 - 主类
教学演示:使用Map模拟数据库,实际项目用MySQL/Oracle
*/
public class ICBCBankSystem implements BankOperation {// 使用HashMap模拟数据库存储账户信息
// key: 账号, value: 账户对象
private Map accountDatabase;
private Scanner scanner;// 交易记录(简化版)
private List transactionRecords;public ICBCBankSystem() {
this.accountDatabase = new HashMap<>(); this.scanner = new Scanner(System.in); this.transactionRecords = new ArrayList<>(); System.out.println("🚀 工商银行模拟系统启动成功!"); System.out.println("版本:教学演示版 v1.0");}
@Override
public BankAccount openAccount(String name, String idCard,String phone, double deposit, String password) { // 输入验证(教学重点:防御性编程) if (deposit < 10.0) { System.out.println("❌ 最低存款金额为10元"); return null; } if (password.length() < 6) { System.out.println("❌ 密码长度不能少于6位"); return null; } // 创建新账户 BankAccount newAccount = new BankAccount(name, idCard, phone, deposit, password); // 存入"数据库" accountDatabase.put(newAccount.getAccountNumber(), newAccount); // 记录交易 String record = String.format("[开户] 账号:%s 姓名:%s 存入:%.2f", newAccount.getAccountNumber(), name, deposit); transactionRecords.add(record); return newAccount;}
@Override
public boolean deposit(String accountNumber, double amount) {BankAccount account = accountDatabase.get(accountNumber); if (account == null) { System.out.println("❌ 账户不存在!"); return false; } boolean success = account.deposit(amount); if (success) { String record = String.format("[存款] 账号:%s 存入:%.2f", accountNumber, amount); transactionRecords.add(record); } return success;}
/**
- 转账功能 - 银行核心业务逻辑
教学重点:事务处理思想(这里做了简化)
*/
@Override
public boolean transfer(String fromAccountNum, String toAccountNum,double amount, String password) {System.out.println("\n🔄 正在处理转账请求...");
// 1. 验证转出账户
BankAccount fromAccount = accountDatabase.get(fromAccountNum);
if (fromAccount == null) {System.out.println("❌ 转出账户不存在!"); return false;}
// 2. 验证密码
if (!fromAccount.withdraw(amount, password)) {System.out.println("❌ 转账失败:密码错误或余额不足"); return false;}
// 3. 验证转入账户
BankAccount toAccount = accountDatabase.get(toAccountNum);
if (toAccount == null) {System.out.println("❌ 转入账户不存在!"); // 注意:实际银行系统这里需要回滚!教学演示简化处理 fromAccount.deposit(amount); // 把钱加回去 return false;}
// 4. 执行转账
toAccount.deposit(amount);// 5. 记录交易
String record = String.format("[转账] 从%s向%s转账%.2f元",fromAccountNum, toAccountNum, amount);transactionRecords.add(record);
System.out.println("✅ 转账成功!");
System.out.println("从账户:" + fromAccountNum);
System.out.println("向账户:" + toAccountNum);
System.out.println("转账金额:" + amount + "元");return true;
}/**
- 查询余额功能
教学注意:真实系统要考虑安全性和权限控制
*/
@Override
public double queryBalance(String accountNumber, String password) {
BankAccount account = accountDatabase.get(accountNumber);
if (account == null) {System.out.println("❌ 账户不存在!"); return -1;}
// 密码验证(简化版)
// 真实系统:密码加密验证、错误次数限制等
System.out.print("请输入密码查询余额:");
String inputPwd = scanner.nextLine();if (!inputPwd.equals(password)) {
System.out.println("❌ 密码错误!"); return -1;}
double balance = account.getBalance();
System.out.println("💰 账户余额:" + balance + "元");
return balance;
}// 其他方法实现...
/**
显示系统菜单 - 控制台交互
*/
public void showMenu() {
while (true) {System.out.println("\n======== 工商银行模拟系统 ========"); 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("0. 退出系统"); System.out.println("================================="); System.out.print("请选择操作:"); String choice = scanner.nextLine(); switch (choice) { case "1": handleOpenAccount(); break; case "4": handleTransfer(); break; case "6": displayAllAccounts(); // 教学功能:查看所有账户 break; case "0": System.out.println("感谢使用工商银行模拟系统!"); return; default: System.out.println("请输入有效选项!"); }}
}/**
处理开户流程
*/
private void handleOpenAccount() {
System.out.println("\n🏦 欢迎来到工商银行开户系统");System.out.print("请输入姓名:");
String name = scanner.nextLine();System.out.print("请输入身份证号:");
String idCard = scanner.nextLine();System.out.print("请输入手机号:");
String phone = scanner.nextLine();System.out.print("请输入初始存款金额:");
double deposit = scanner.nextDouble();
scanner.nextLine(); // 清除缓冲区System.out.print("请设置6位密码:");
String password = scanner.nextLine();openAccount(name, idCard, phone, deposit, password);
}/**
处理转账流程
*/
private void handleTransfer() {
System.out.print("请输入转出账号:");
String fromAccount = scanner.nextLine();System.out.print("请输入转入账号:");
String toAccount = scanner.nextLine();System.out.print("请输入转账金额:");
double amount = scanner.nextDouble();
scanner.nextLine(); // 清除缓冲区System.out.print("请输入转出账户密码:");
String password = scanner.nextLine();transfer(fromAccount, toAccount, amount, password);
}/**
教学演示:显示所有账户(实际系统不可能有这功能!)
*/
private void displayAllAccounts() {
System.out.println("\n⚠️ 教学演示功能:所有账户信息(真实系统绝无此功能!)");
System.out.println("当前系统共有 " + accountDatabase.size() + " 个账户");for (BankAccount account : accountDatabase.values()) {
account.displayInfo();}
}
}- 系统主入口
java
/**
- 系统主入口
- 工商银行模拟器 - 启动类
教学目的:程序入口和简单测试
*/
public class BankSystemDemo {
public static void main(String[] args) {System.out.println("🎬 开始运行工商银行模拟器教学演示..."); System.out.println("======================================"); // 创建银行系统实例 ICBCBankSystem icbc = new ICBCBankSystem(); // 教学演示:预创建几个测试账户 System.out.println("\n📝 创建演示账户..."); icbc.openAccount("张三", "110101199001011234", "13800138000", 1000.0, "123456"); icbc.openAccount("李四", "110101199002022345", "13900139000", 500.0, "654321"); // 显示操作菜单 icbc.showMenu();}
}