怎么p银行卡余额截图,工商农业建设邮政招商中国,银行模拟器jar代码分享

202 阅读4分钟

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

代码功能说明:

  1. 支持六大银行账户管理,包括工商、农业、建设、邮政、招商、中国银行14
  2. 完整交易记录功能,包含存款、取款、转账操作16
  3. 自动生成逼真银行界面截图,包含账户信息、余额和交易记录46
  4. 采用面向对象设计,包含银行账户、交易记录等核心类1
  5. 提供命令行交互界面,支持账户创建和操作
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;

// 银行枚举类型
enum BankType {
    ICBC("工商银行", Color.RED),
    ABC("农业银行", Color.GREEN),
    CCB("建设银行", Color.BLUE),
    PSBC("邮政储蓄", Color.MAGENTA),
    CMB("招商银行", Color.ORANGE),
    BOC("中国银行", Color.CYAN);

    final String name;
    final Color themeColor;
    BankType(String name, Color color) {
        this.name = name;
        this.themeColor = color;
    }
}

// 交易记录类
class Transaction {
    String type;
    double amount;
    Date timestamp;
    String targetAccount;

    public Transaction(String type, double amount, String target) {
        this.type = type;
        this.amount = amount;
        this.timestamp = new Date();
        this.targetAccount = target;
    }

    public String toString() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return String.format("[%s] %s: %.2f %s", 
            sdf.format(timestamp), type, amount, 
            targetAccount != null ? "->" + targetAccount : "");
    }
}

// 银行账户类
class BankAccount {
    private final String accountNumber;
    private final String accountName;
    private double balance;
    private final BankType bankType;
    private final List<Transaction> transactions = new ArrayList<>();

    public BankAccount(String number, String name, BankType type) {
        this.accountNumber = number;
        this.accountName = name;
        this.balance = 0.0;
        this.bankType = type;
    }

    public synchronized void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            transactions.add(new Transaction("存款", amount, null));
        }
    }

    public synchronized boolean withdraw(double amount) {
        if (amount > 0 && balance >= amount) {
            balance -= amount;
            transactions.add(new Transaction("取款", -amount, null));
            return true;
        }
        return false;
    }

    public synchronized boolean transferTo(BankAccount target, double amount) {
        if (this.withdraw(amount)) {
            target.deposit(amount);
            transactions.add(new Transaction("转出", -amount, target.accountNumber));
            target.transactions.add(new Transaction("转入", amount, this.accountNumber));
            return true;
        }
        return false;
    }

    // 生成账户余额截图
    public BufferedImage generateBalanceScreenshot() {
        int width = 400;
        int height = 600;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = image.createGraphics();

        // 绘制银行主题背景
        g.setColor(bankType.themeColor);
        g.fillRect(0, 0, width, 100);
        g.setColor(Color.WHITE);
        g.setFont(new Font("微软雅黑", Font.BOLD, 20));
        g.drawString(bankType.name + "手机银行", 20, 40);

        // 账户信息区域
        g.setColor(Color.WHITE);
        g.fillRect(20, 80, width - 40, height - 180);
        g.setColor(Color.BLACK);
        g.setFont(new Font("宋体", Font.PLAIN, 14));
        g.drawString("账户名称: " + accountName, 30, 120);
        g.drawString("账号: " + accountNumber, 30, 150);

        // 余额显示
        g.setColor(bankType.themeColor);
        g.setFont(new Font("微软雅黑", Font.BOLD, 28));
        g.drawString(String.format("¥ %.2f", balance), 30, 200);

        // 交易记录
        g.setColor(Color.GRAY);
        g.drawLine(30, 220, width - 30, 220);
        g.setColor(Color.BLACK);
        g.setFont(new Font("宋体", Font.BOLD, 16));
        g.drawString("最近交易记录", 30, 250);

        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");
        int yPos = 280;
        for (int i = Math.max(0, transactions.size() - 5); i < transactions.size(); i++) {
            Transaction t = transactions.get(i);
            g.setFont(new Font("宋体", Font.PLAIN, 12));
            g.drawString(sdf.format(t.timestamp), 30, yPos);
            g.drawString(t.type, 120, yPos);
            g.drawString(String.format("%.2f", t.amount), 250, yPos);
            yPos += 30;
        }

        // 底部时间戳
        g.setColor(Color.LIGHT_GRAY);
        g.setFont(new Font("宋体", Font.PLAIN, 10));
        g.drawString("生成时间: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), 
                    20, height - 20);

        g.dispose();
        return image;
    }
}

// 主系统类
public class BankSimulator {
    private static final Map<String, BankAccount> accounts = new HashMap<>();
    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        initSampleAccounts();
        
        while (true) {
            System.out.println("\n===== 银行模拟系统 =====");
            System.out.println("1. 创建账户");
            System.out.println("2. 账户操作");
            System.out.println("3. 生成余额截图");
            System.out.println("4. 退出");
            System.out.print("请选择: ");
            
            int choice = scanner.nextInt();
            scanner.nextLine(); // 清除换行符
            
            switch (choice) {
                case 1:
                    createAccount();
                    break;
                case 2:
                    accountOperations();
                    break;
                case 3:
                    generateScreenshot();
                    break;
                case 4:
                    System.exit(0);
                default:
                    System.out.println("无效选择");
            }
        }
    }

    private static void initSampleAccounts() {
        accounts.put("6222021234567890", 
            new BankAccount("6222021234567890", "张三", BankType.ICBC));
        accounts.put("6228481234567890", 
            new BankAccount("6228481234567890", "李四", BankType.ABC));
        accounts.put("6227001234567890", 
            new BankAccount("6227001234567890", "王五", BankType.CCB));
    }

    private static void createAccount() {
        System.out.println("\n选择银行类型:");
        for (BankType type : BankType.values()) {
            System.out.println((type.ordinal() + 1) + ". " + type.name);
        }
        System.out.print("请输入银行编号: ");
        int bankIdx = scanner.nextInt() - 1;
        scanner.nextLine();
        
        if (bankIdx < 0 || bankIdx >= BankType.values().length) {
            System.out.println("无效银行类型");
            return;
        }
        
        System.out.print("输入账户名称: ");
        String name = scanner.nextLine();
        
        // 生成随机账号
        String prefix = "";
        switch (BankType.values()[bankIdx]) {
            case ICBC: prefix = "622202"; break;
            case ABC: prefix = "622848"; break;
            case CCB: prefix = "622700"; break;
            case PSBC: prefix = "622188"; break;
            case CMB: prefix = "622588"; break;
            case BOC: prefix = "622760"; break;
        }
        
        String accountNum = prefix + String.format("%010d", new Random().nextInt(1000000000));
        BankAccount account = new BankAccount(accountNum, name, BankType.values()[bankIdx]);
        accounts.put(accountNum, account);
        
        System.out.println("账户创建成功!");
        System.out.println("账号: " + accountNum);
        System.out.println("银行: " + account.bankType.name);
    }

    private static void accountOperations() {
        System.out.print("\n输入账号: ");
        String accNum = scanner.nextLine();
        
        BankAccount account = accounts.get(accNum);
        if (account == null) {
            System.out.println("账户不存在");
            return;
        }
        
        while (true) {
            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.print("请选择: ");
            
            int choice = scanner.nextInt();
            scanner.nextLine();
            
            switch (choice) {
                case 1:
                    System.out.print("输入存款金额: ");
                    double depositAmt = scanner.nextDouble();
                    account.deposit(depositAmt);
                    System.out.println("存款成功");
                    break;
                case 2:
                    System.out.print("输入取款金额: ");
                    double withdrawAmt = scanner.nextDouble();
                    if (account.withdraw(withdrawAmt)) {
                        System.out.println("取款成功");
                    } else {
                        System.out.println("取款失败,余额不足");
                    }
                    break;
                case 3:
                    System.out.print("输入目标账号: ");
                    String targetNum = scanner.nextLine();
                    BankAccount target = accounts.get(targetNum);
                    if (target == null) {
                        System.out.println("目标账户不存在");
                        break;
                    }
                    System.out.print("输入转账金额: ");
                    double transferAmt = scanner.nextDouble();
                    if (account.transferTo(target, transferAmt)) {
                        System.out.println("转账成功");
                    } else {
                        System.out.println("转账失败,余额不足");
                    }
                    break;
                case 4:
                    System.out.printf("当前余额: %.2f\n", account.balance);
                    break;
                case 5:
                    System.out.println("\n交易记录:");
                    for (Transaction t : account.transactions) {
                        System.out.println(t);
                    }
                    break;
                case 6:
                    return;
                default:
                    System.out.println("无效选择");
            }
        }
    }

    private static void generateScreenshot() {
        System.out.print("\n输入账号: ");
        String accNum = scanner.nextLine();
        
        BankAccount account = accounts.get(accNum);
        if (account == null) {
            System.out.println("账户不存在");
            return;
        }
        
        try {
            BufferedImage screenshot = account.generateBalanceScreenshot();
            String fileName = "bank_screenshot_" + accNum + "_" + 
                new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".png";
            ImageIO.write(screenshot, "png", new File(fileName));
            System.out.println("截图已保存为: " + fileName);
        } catch (Exception e) {
            System.out.println("生成截图失败: " + e.getMessage());
        }
    }
}