下载地址(文章指定相关附件):www.pan38.com/dow/share.p… 提取密码:2041
其实我分享这个主要还是因为兴趣,因为别人已经开源了,但是他们没有把代码分享出来了,而且成品,那么我就把代码开源的部分分享出来,仅供大家的一个参考用途哈,下面是Jar代码,需要具备一定的基础才可以哈。
jar代码部分:
4.0.0
<groupId>com.bank.simulator</groupId>
<artifactId>bank-simulator</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>com.bank.simulator.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
package com.bank.simulator;
import java.util.Scanner;
public class Main { private static final Scanner scanner = new Scanner(System.in); private static final Bank bank = new Bank("AI Bank"); private static boolean running = true;
public static void main(String[] args) {
System.out.println("欢迎使用" + bank.getName() + "模拟系统");
while (running) {
displayMenu();
int choice = getIntInput("请选择操作: ");
handleMenuChoice(choice);
}
System.out.println("感谢使用银行模拟系统,再见!");
scanner.close();
}
private static void displayMenu() {
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("8. 删除账户");
System.out.println("0. 退出系统");
}
private static void handleMenuChoice(int choice) {
switch (choice) {
case 1 -> createAccount();
case 2 -> deposit();
case 3 -> withdraw();
case 4 -> transfer();
case 5 -> checkBalance();
case 6 -> viewTransactions();
case 7 -> viewAllAccounts();
case 8 -> deleteAccount();
case 0 -> running = false;
default -> System.out.println("无效选择,请重试");
}
}
private static void createAccount() {
String name = getStringInput("请输入账户持有人姓名: ");
String accountType = getStringInput("请输入账户类型(储蓄/支票): ");
double initialBalance = getDoubleInput("请输入初始存款金额: ");
Account account = bank.createAccount(name, accountType, initialBalance);
System.out.println("账户创建成功!");
System.out.println("您的账户信息: " + account);
}
private static void deposit() {
String accountNumber = getStringInput("请输入账户号码: ");
double amount = getDoubleInput("请输入存款金额: ");
try {
bank.deposit(accountNumber, amount);
System.out.println("存款成功!");
} catch (BankException e) {
System.out.println("存款失败: " + e.getMessage());
}
}
private static void withdraw() {
String accountNumber = getStringInput("请输入账户号码: ");
double amount = getDoubleInput("请输入取款金额: ");
try {
bank.withdraw(accountNumber, amount);
System.out.println("取款成功!");
} catch (BankException e) {
System.out.println("取款失败: " + e.getMessage());
}
}
private static void transfer() {
String fromAccount = getStringInput("请输入转出账户号码: ");
String toAccount = getStringInput("请输入转入账户号码: ");
double amount = getDoubleInput("请输入转账金额: ");
try {
bank.transfer(fromAccount, toAccount, amount);
System.out.println("转账成功!");
} catch (BankException e) {
System.out.println("转账失败: " + e.getMessage());
}
}
private static void checkBalance() {
String accountNumber = getStringInput("请输入账户号码: ");
try {
double balance = bank.getAccountBalance(accountNumber);
System.out.println("账户余额: " + balance);
} catch (BankException e) {
System.out.println("查询失败: " + e.getMessage());
}
}
private static void viewTransactions() {
String accountNumber = getStringInput("请输入账户号码: ");
try {
System.out.println("\n===== 交易记录 =====");
bank.getAccountTransactions(accountNumber).forEach(System.out::println);
} catch (BankException e) {
System.out.println("查询失败: " + e.getMessage());
}
}
private static void viewAllAccounts() {
System.out.println("\n===== 所有账户 =====");
bank.getAllAccounts().forEach(System.out::println);
}
private static void deleteAccount() {
String accountNumber = getStringInput("请输入要删除的账户号码: ");
try {
bank.deleteAccount(accountNumber);
System.out.println("账户删除成功!");
} catch (BankException e) {
System.out.println("删除失败: " + e.getMessage());
}
}
private static String getStringInput(String prompt) {
System.out.print(prompt);
return scanner.nextLine();
}
private static int getIntInput(String prompt) {
while (true) {
try {
System.out.print(prompt);
return Integer.parseInt(scanner.nextLine());
} catch (NumberFormatException e) {
System.out.println("请输入有效的数字!");
}
}
}
private static double getDoubleInput(String prompt) {
while (true) {
try {
System.out.print(prompt);
return Double.parseDouble(scanner.nextLine());
} catch (NumberFormatException e) {
System.out.println("请输入有效的金额!");
}
}
}
}
package com.bank.simulator;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random;
public class Bank { private final String name; private final Map<String, Account> accounts; private final Map<String, List> transactions; private final Random random;
public Bank(String name) {
this.name = name;
this.accounts = new HashMap<>();
this.transactions = new HashMap<>();
this.random = new Random();
}
public String getName() {
return name;
}
public Account createAccount(String holderName, String accountType, double initialBalance) {
String accountNumber = generateAccountNumber();
Account account = new Account(accountNumber, holderName, accountType, initialBalance);
accounts.put(accountNumber, account);
transactions.put(accountNumber, new ArrayList<>());
if (initialBalance > 0) {
recordTransaction(accountNumber, "初始存款", initialBalance);
}
return account;
}
public void deposit(String accountNumber, double amount) throws BankException {
validateAccount(accountNumber);
if (amount <= 0) {
throw new BankException("存款金额必须大于零");
}
Account account = accounts.get(accountNumber);
account.setBalance(account.getBalance() + amount);
recordTransaction(accountNumber, "存款", amount);
}
public void withdraw(String accountNumber, double amount) throws BankException {
validateAccount(accountNumber);
Account account = accounts.get(accountNumber);
if (amount <= 0) {
throw new BankException("取款金额必须大于零");
}
if (account.getBalance() < amount) {
throw new BankException("账户余额不足");
}
account.setBalance(account.getBalance() - amount);
recordTransaction(accountNumber, "取款", -amount);
}
public void transfer(String fromAccount, String toAccount, double amount) throws BankException {
validateAccount(fromAccount);
validateAccount(toAccount);
if (fromAccount.equals(toAccount)) {
throw new BankException("不能转账到同一账户");
}
withdraw(fromAccount, amount);
deposit(toAccount, amount);
recordTransaction(fromAccount, "转账到 " + toAccount, -amount);
recordTransaction(toAccount, "转账自 " + fromAccount, amount);
}
public double getAccountBalance(String accountNumber) throws BankException {
validateAccount(accountNumber);
return accounts.get(accountNumber).getBalance();
}
public List<Transaction> getAccountTransactions(String accountNumber) throws BankException {
validateAccount(accountNumber);
return new ArrayList<>(transactions.get(accountNumber));
}
public List<Account> getAllAccounts() {
return new ArrayList<>(accounts.values());
}
public void deleteAccount(String accountNumber) throws BankException {
validateAccount(accountNumber);
if (accounts.get(accountNumber).getBalance() != 0) {
throw new BankException("账户余额必须为零才能删除");
}
accounts.remove(accountNumber);
transactions.remove(accountNumber);
}
private String generateAccountNumber() {
return String.format("%010d", random.nextInt(1_000_000_000));
}
private void validateAccount(String accountNumber) throws BankException {
if (!accounts.containsKey(accountNumber)) {
throw new BankException("账户不存在");
}
}
private void recordTransaction(String accountNumber, String description, double amount) {
Transaction transaction = new Transaction(accountNumber, description, amount);
transactions.get(accountNumber).add(transaction);
}
}