银行app模拟生成器,建设农业工商招商邮政,jar逆向思路分享

127 阅读3分钟

下载地址(文章指定相关附件):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);
}

}