下载地址:https://www.pan38.com/share.php?code=bRtMK 提取码:8888 【仅供学习参考使用】
项目还包含单元测试类BankTest.java和异常处理类BankException.java,完整代码可通过正规编程学习平台获取。这个教学项目演示了Java核心编程技术,包括面向对象设计、集合框架、异常处理和基础金融系统原理。
import java.util.ArrayList;
import java.util.List;
/**
- 银行账户类,封装账户基本属性和操作
包含账户信息管理、存取款操作和交易记录
*/
public class BankAccount {
private final String accountNumber; // 账号(不可变)
private String accountHolder; // 账户持有人
private double balance; // 账户余额
private List transactions; // 交易记录// 构造函数
public BankAccount(String number, String holder) {this.accountNumber = number; this.accountHolder = holder; this.balance = 0.0; this.transactions = new ArrayList<>(); transactions.add("账户创建于: " + new java.util.Date());
}
// 存款方法
public synchronized void deposit(double amount) {if(amount <= 0) throw new IllegalArgumentException("存款金额必须为正数"); balance += amount; transactions.add(String.format("%s 存款: +%.2f 余额: %.2f", new java.util.Date(), amount, balance));
}
// 取款方法(线程安全)
public synchronized boolean withdraw(double amount) {if(amount <= 0) throw new IllegalArgumentException("取款金额必须为正数"); if(balance >= amount) { balance -= amount; transactions.add(String.format("%s 取款: -%.2f 余额: %.2f", new java.util.Date(), amount, balance)); return true; } return false;
}
// 获取账户摘要信息
public String getAccountSummary() {return String.format("账号: %s\n户名: %s\n余额: ¥%.2f", accountNumber, accountHolder, balance);
}
// 打印交易流水
public void printTransactionHistory() {System.out.println("\n=== 交易记录 ==="); transactions.forEach(System.out::println);
}
}
import java.util.HashMap;
import java.util.Map;
/**
- 银行系统管理类,实现账户管理和转账功能
使用单例模式确保系统唯一性
*/
public class BankSystem {
private static BankSystem instance;
private final Map accounts;private BankSystem() {
accounts = new HashMap<>();
}
// 获取系统实例(单例模式)
public static synchronized BankSystem getInstance() {if(instance == null) { instance = new BankSystem(); } return instance;
}
// 创建新账户
public void createAccount(String number, String holder) {if(accounts.containsKey(number)) { throw new IllegalArgumentException("账号已存在"); } accounts.put(number, new BankAccount(number, holder));
}
// 账户间转账
public boolean transfer(String fromAcc, String toAcc, double amount) {BankAccount source = accounts.get(fromAcc); BankAccount target = accounts.get(toAcc); if(source == null || target == null) return false; if(source.withdraw(amount)) { target.deposit(amount); return true; } return false;
}
// 获取账户信息
public BankAccount getAccount(String number) {return accounts.get(number);
}
}
java.util.Scanner;
/**
- 银行系统控制台界面
提供用户交互功能
*/
public class BankApp {
private static final BankSystem bank = BankSystem.getInstance();
private static final Scanner scanner = new Scanner(System.in);public static void main(String[] args) {
initSampleData(); while(true) { printMenu(); int choice = scanner.nextInt(); scanner.nextLine(); // 清除换行符 switch(choice) { case 1: createAccount(); break; case 2: deposit(); break; case 3: withdraw(); break; case 4: transfer(); break; case 5: checkBalance(); break; case 6: viewTransactions(); break; case 0: exitSystem(); default: System.out.println("无效选项"); } }
}
private static void printMenu() {
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("0. 退出"); System.out.print("请选择操作: ");
}
private static void createAccount() {
System.out.print("输入账号: "); String number = scanner.nextLine(); System.out.print("输入户名: "); String holder = scanner.nextLine(); try { bank.createAccount(number, holder); System.out.println("账户创建成功"); } catch (Exception e) { System.out.println("错误: " + e.getMessage()); }
}
// 其他方法实现类似...
}