下载地址:www.wenshushu.vip/download.ph…
代码说明:
- 项目采用MVC架构设计,包含BankApp主类、BankAccount账户类和Transaction交易记录类2
- 支持农业银行、工商银行、建设银行、邮政银行和招商银行的模拟功能,每种银行有特定的账号前缀13
- 实现了完整的银行核心功能:开户、存款、取款、转账和交易记录查询12
- 使用HashMap存储账户信息,ArrayList记录交易流水,确保数据安全性和完整性3
- 项目配置了Maven构建文件,可直接编译运行4
import java.util.HashMap;
import java.util.Scanner;
import java.text.SimpleDateFormat;
import java.util.Date;
public class BankApp {
private static HashMap<String, BankAccount> accounts = new HashMap<>();
private static Scanner scanner = new Scanner(System.in);
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) {
initializeDemoAccounts();
showMainMenu();
}
private static void initializeDemoAccounts() {
// 农业银行演示账户
accounts.put("ABC123456", new BankAccount("ABC123456", "张三", "农业银行", 10000));
// 工商银行演示账户
accounts.put("ICBC654321", new BankAccount("ICBC654321", "李四", "工商银行", 5000));
// 建设银行演示账户
accounts.put("CCB112233", new BankAccount("CCB112233", "王五", "建设银行", 8000));
// 邮政银行演示账户
accounts.put("PSBC445566", new BankAccount("PSBC445566", "赵六", "邮政银行", 3000));
// 招商银行演示账户
accounts.put("CMB778899", new BankAccount("CMB778899", "钱七", "招商银行", 15000));
}
private static void showMainMenu() {
while (true) {
System.out.println("\n===== 银行模拟系统 =====");
System.out.println("1. 登录账户");
System.out.println("2. 创建账户");
System.out.println("3. 退出系统");
System.out.print("请选择操作: ");
int choice = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
switch (choice) {
case 1:
loginAccount();
break;
case 2:
createAccount();
break;
case 3:
System.out.println("感谢使用银行模拟系统,再见!");
System.exit(0);
default:
System.out.println("无效选择,请重新输入!");
}
}
}
private static void loginAccount() {
System.out.print("\n请输入账号: ");
String accountNumber = scanner.nextLine();
System.out.print("请输入银行类型(农业/工商/建设/邮政/招商): ");
String bankType = scanner.nextLine();
BankAccount account = accounts.get(accountNumber);
if (account != null && account.getBankType().equals(bankType)) {
System.out.println("\n登录成功!");
showAccountMenu(account);
} else {
System.out.println("账号或银行类型错误,登录失败!");
}
}
private static void createAccount() {
System.out.println("\n===== 创建新账户 =====");
System.out.print("请输入客户姓名: ");
String name = scanner.nextLine();
System.out.print("请选择银行类型(1.农业 2.工商 3.建设 4.邮政 5.招商): ");
int bankChoice = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
String bankType = "";
String prefix = "";
switch (bankChoice) {
case 1:
bankType = "农业银行";
prefix = "ABC";
break;
case 2:
bankType = "工商银行";
prefix = "ICBC";
break;
case 3:
bankType = "建设银行";
prefix = "CCB";
break;
case 4:
bankType = "邮政银行";
prefix = "PSBC";
break;
case 5:
bankType = "招商银行";
prefix = "CMB";
break;
default:
System.out.println("无效选择!");
return;
}
String accountNumber = prefix + (100000 + (int)(Math.random() * 900000));
BankAccount newAccount = new BankAccount(accountNumber, name, bankType, 0);
accounts.put(accountNumber, newAccount);
System.out.println("\n账户创建成功!");
System.out.println("银行: " + bankType);
System.out.println("账号: " + accountNumber);
System.out.println("户名: " + name);
}
private static void showAccountMenu(BankAccount account) {
while (true) {
System.out.println("\n===== " + account.getBankType() + " 账户管理 =====");
System.out.println("账号: " + account.getAccountNumber());
System.out.println("户名: " + account.getAccountName());
System.out.println("余额: " + account.getBalance() + " 元");
System.out.println("1. 存款");
System.out.println("2. 取款");
System.out.println("3. 转账");
System.out.println("4. 交易记录");
System.out.println("5. 返回主菜单");
System.out.print("请选择操作: ");
int choice = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
switch (choice) {
case 1:
deposit(account);
break;
case 2:
withdraw(account);
break;
case 3:
transfer(account);
break;
case 4:
showTransactions(account);
break;
case 5:
return;
default:
System.out.println("无效选择,请重新输入!");
}
}
}
private static void deposit(BankAccount account) {
System.out.print("\n请输入存款金额: ");
double amount = scanner.nextDouble();
scanner.nextLine(); // 消耗换行符
if (amount <= 0) {
System.out.println("存款金额必须大于0!");
return;
}
account.deposit(amount);
System.out.println("存款成功!当前余额: " + account.getBalance() + " 元");
}
private static void withdraw(BankAccount account) {
System.out.print("\n请输入取款金额: ");
double amount = scanner.nextDouble();
scanner.nextLine(); // 消耗换行符
if (amount <= 0) {
System.out.println("取款金额必须大于0!");
return;
}
if (account.withdraw(amount)) {
System.out.println("取款成功!当前余额: " + account.getBalance() + " 元");
} else {
System.out.println("取款失败,余额不足!");
}
}
private static void transfer(BankAccount fromAccount) {
System.out.print("\n请输入转入账号: ");
String toAccountNumber = scanner.nextLine();
System.out.print("请输入转账金额: ");
double amount = scanner.nextDouble();
scanner.nextLine(); // 消耗换行符
if (amount <= 0) {
System.out.println("转账金额必须大于0!");
return;
}
BankAccount toAccount = accounts.get(toAccountNumber);
if (toAccount == null) {
System.out.println("转入账号不存在!");
return;
}
if (fromAccount.transfer(toAccount, amount)) {
System.out.println("转账成功!");
System.out.println("转出账号余额: " + fromAccount.getBalance() + " 元");
System.out.println("转入账号余额: " + toAccount.getBalance() + " 元");
} else {
System.out.println("转账失败,余额不足!");
}
}
private static void showTransactions(BankAccount account) {
System.out.println("\n===== 交易记录 =====");
System.out.println("账号: " + account.getAccountNumber());
System.out.println("户名: " + account.getAccountName());
System.out.println("银行: " + account.getBankType());
System.out.println("----------------------------------------");
System.out.println("时间\t\t\t类型\t金额\t余额");
for (Transaction transaction : account.getTransactions()) {
System.out.println(dateFormat.format(transaction.getTime()) + "\t" +
transaction.getType() + "\t" +
transaction.getAmount() + "\t" +
transaction.getBalance());
}
}
}
import java.util.ArrayList;
import java.util.Date;
public class BankAccount {
private String accountNumber;
private String accountName;
private String bankType;
private double balance;
private ArrayList<Transaction> transactions;
public BankAccount(String accountNumber, String accountName, String bankType, double initialBalance) {
this.accountNumber = accountNumber;
this.accountName = accountName;
this.bankType = bankType;
this.balance = initialBalance;
this.transactions = new ArrayList<>();
// 记录开户交易
this.transactions.add(new Transaction("开户", initialBalance, initialBalance));
}
public void deposit(double amount) {
if (amount <= 0) {
return;
}
this.balance += amount;
this.transactions.add(new Transaction("存款", amount, this.balance));
}
public boolean withdraw(double amount) {
if (amount <= 0 || amount > this.balance) {
return false;
}
this.balance -= amount;
this.transactions.add(new Transaction("取款", -amount, this.balance));
return true;
}
public boolean transfer(BankAccount toAccount, double amount) {
if (amount <= 0 || amount > this.balance) {
return false;
}
this.balance -= amount;
toAccount.balance += amount;
Date now = new Date();
this.transactions.add(new Transaction("转出至" + toAccount.getAccountNumber(), -amount, this.balance));
toAccount.transactions.add(new Transaction("转入自" + this.accountNumber, amount, toAccount.balance));
return true;
}
// Getter方法
public String getAccountNumber() {
return accountNumber;
}
public String getAccountName() {
return accountName;
}
public String getBankType() {
return bankType;
}
public double getBalance() {
return balance;
}
public ArrayList<Transaction> getTransactions() {
return transactions;
}
}
import java.util.Date;
public class Transaction {
private String type;
private double amount;
private double balance;
private Date time;
public Transaction(String type, double amount, double balance) {
this.type = type;
this.amount = amount;
this.balance = balance;
this.time = new Date();
}
// Getter方法
public String getType() {
return type;
}
public double getAmount() {
return amount;
}
public double getBalance() {
return balance;
}
public Date getTime() {
return time;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bank.simulator</groupId>
<artifactId>bank-simulator</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>BankApp</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>