农业银行高仿app模拟,工商建设中国邮政招商,仿真银行app源码分享

218 阅读4分钟

下载地址:www.wenshushu.vip/download.ph…

代码说明:

  1. 项目采用MVC架构设计,包含BankApp主类、BankAccount账户类和Transaction交易记录类2
  2. 支持农业银行、工商银行、建设银行、邮政银行和招商银行的模拟功能,每种银行有特定的账号前缀13
  3. 实现了完整的银行核心功能:开户、存款、取款、转账和交易记录查询12
  4. 使用HashMap存储账户信息,ArrayList记录交易流水,确保数据安全性和完整性3
  5. 项目配置了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>