高仿银行app可改余额下载,工商农业邮政建设招商中国,Python开源最新版本分享

927 阅读4分钟

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

基于Python实现的高仿银行APP模拟器代码,支持工商/农业/邮政/建设/招商等银行界面模拟,包含余额修改、交易记录生成等核心功能1。请注意该代码仅供学习娱乐用途,严禁用于非法活动。

代码功能说明:

  1. 核心银行账户类实现存款/取款/转账等金融操作1
  2. 支持工商/农业/邮政/建设/招商五大银行界面模拟
  3. 采用JSON持久化存储账户数据
  4. Tkinter实现的图形化操作界面
  5. 包含交易记录查询和余额修改功能23
import random
import datetime
from dataclasses import dataclass
from enum import Enum
import json
import os

class BankType(Enum):
    ICBC = "中国工商银行"
    ABC = "中国农业银行"
    PSBC = "中国邮政储蓄"
    CCB = "中国建设银行"
    CMB = "招商银行"

@dataclass
class Transaction:
    id: str
    type: str  # 存款/取款/转账
    amount: float
    balance: float
    time: str
    target: str = None  # 转账目标账户

class BankAccount:
    def __init__(self, name: str, bank_type: BankType):
        self.name = name
        self.bank_type = bank_type
        self.account = self._generate_account()
        self.balance = 0.0
        self.transactions = []
        self._load_data()

    def _generate_account(self) -> str:
        """生成19位银行账号"""
        prefix = {
            BankType.ICBC: "622202",
            BankType.ABC: "622848",
            BankType.PSBC: "621098",
            BankType.CCB: "622700",
            BankType.CMB: "622588"
        }[self.bank_type]
        return prefix + ''.join(str(random.randint(0, 9)) for _ in range(13))

    def deposit(self, amount: float):
        """存款操作"""
        if amount <= 0:
            raise ValueError("存款金额必须大于0")
        self.balance += amount
        self._add_transaction("存款", amount)

    def withdraw(self, amount: float):
        """取款操作"""
        if amount <= 0:
            raise ValueError("取款金额必须大于0")
        if amount > self.balance:
            raise ValueError("余额不足")
        self.balance -= amount
        self._add_transaction("取款", -amount)

    def transfer(self, target_account: str, amount: float):
        """模拟转账"""
        if amount <= 0:
            raise ValueError("转账金额必须大于0")
        if amount > self.balance:
            raise ValueError("余额不足")
        self.balance -= amount
        self._add_transaction("转账", -amount, target_account)

    def modify_balance(self, new_balance: float):
        """修改余额(仅供模拟)"""
        self.balance = new_balance
        self._add_transaction("余额调整", new_balance - self.balance)

    def _add_transaction(self, trans_type: str, amount: float, target=None):
        """记录交易"""
        trans = Transaction(
            id=f"TR{datetime.datetime.now().strftime('%Y%m%d%H%M%S')}{random.randint(100,999)}",
            type=trans_type,
            amount=amount,
            balance=self.balance,
            time=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            target=target
        )
        self.transactions.append(trans)
        self._save_data()

    def _save_data(self):
        """保存账户数据到JSON文件"""
        data = {
            "name": self.name,
            "bank_type": self.bank_type.value,
            "account": self.account,
            "balance": self.balance,
            "transactions": [vars(t) for t in self.transactions]
        }
        with open(f"{self.account}.json", "w", encoding="utf-8") as f:
            json.dump(data, f, ensure_ascii=False, indent=2)

    def _load_data(self):
        """从JSON文件加载账户数据"""
        if os.path.exists(f"{self.account}.json"):
            with open(f"{self.account}.json", "r", encoding="utf-8") as f:
                data = json.load(f)
                self.balance = data["balance"]
                self.transactions = [
                    Transaction(**t) for t in data["transactions"]
                ]

    def get_transaction_history(self, limit=10) -> list:
        """获取最近交易记录"""
        return sorted(
            self.transactions,
            key=lambda x: x.time,
            reverse=True
        )[:limit]

    def __str__(self):
        return (f"{self.bank_type.value}账户\n"
                f"户主: {self.name}\n"
                f"账号: {self.account}\n"
                f"余额: ¥{self.balance:,.2f}\n"
                f"最近交易: {len(self.transactions)}笔")

import tkinter as tk
from tkinter import ttk, messagebox
from bank_simulator import BankAccount, BankType
from PIL import Image, ImageTk
import io
import base64

# 银行LOGO Base64编码(示例)
BANK_LOGOS = {
    "中国工商银行": "iVBORw0KGgoAAAANSUhEUgAAAB...",
    "中国农业银行": "iVBORw0KGgoAAAANSUhEUgAAAB...",
    # 其他银行LOGO...
}

class BankAppUI:
    def __init__(self, root):
        self.root = root
        self.root.title("银行APP模拟器 v2025")
        self.account = None
        self._setup_ui()
        
    def _setup_ui(self):
        """初始化用户界面"""
        self.root.geometry("800x600")
        
        # 顶部导航栏
        self.nav_frame = ttk.Frame(self.root)
        self.nav_frame.pack(fill=tk.X, padx=10, pady=5)
        
        ttk.Button(self.nav_frame, text="新建账户", command=self._create_account).pack(side=tk.LEFT)
        ttk.Button(self.nav_frame, text="加载账户", command=self._load_account).pack(side=tk.LEFT)
        ttk.Button(self.nav_frame, text="退出", command=self.root.quit).pack(side=tk.RIGHT)
        
        # 主显示区域
        self.main_frame = ttk.Frame(self.root)
        self.main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)
        
        # 账户信息面板
        self.info_frame = ttk.LabelFrame(self.main_frame, text="账户概览")
        self.info_frame.pack(fill=tk.X, pady=5)
        
        self.logo_label = ttk.Label(self.info_frame)
        self.logo_label.pack(side=tk.LEFT, padx=10)
        
        self.info_text = tk.StringVar()
        ttk.Label(self.info_frame, textvariable=self.info_text).pack(side=tk.LEFT)
        
        # 操作面板
        self.ops_frame = ttk.LabelFrame(self.main_frame, text="账户操作")
        self.ops_frame.pack(fill=tk.X, pady=5)
        
        ttk.Button(self.ops_frame, text="存款", command=self._deposit).grid(row=0, column=0, padx=5)
        ttk.Button(self.ops_frame, text="取款", command=self._withdraw).grid(row=0, column=1, padx=5)
        ttk.Button(self.ops_frame, text="转账", command=self._transfer).grid(row=0, column=2, padx=5)
        ttk.Button(self.ops_frame, text="修改余额", command=self._modify_balance).grid(row=0, column=3, padx=5)
        
        # 交易记录表格
        self.trans_frame = ttk.LabelFrame(self.main_frame, text="交易记录")
        self.trans_frame.pack(fill=tk.BOTH, expand=True, pady=5)
        
        columns = ("id", "type", "amount", "balance", "time", "target")
        self.trans_tree = ttk.Treeview(
            self.trans_frame, columns=columns, show="headings"
        )
        
        for col in columns:
            self.trans_tree.heading(col, text=col.capitalize())
            self.trans_tree.column(col, width=100)
        
        self.trans_tree.pack(fill=tk.BOTH, expand=True)
        
    def _update_display(self):
        """更新界面显示"""
        if self.account:
            self.info_text.set(str(self.account))
            self._update_logo()
            self._update_transactions()
            
    def _update_logo(self):
        """更新银行LOGO"""
        logo_data = base64.b64decode(BANK_LOGOS[self.account.bank_type.value])
        image = Image.open(io.BytesIO(logo_data))
        photo = ImageTk.PhotoImage(image.resize((80, 80)))
        self.logo_label.configure(image=photo)
        self.logo_label.image = photo
        
    def _update_transactions(self):
        """更新交易记录表格"""
        for row in self.trans_tree.get_children():
            self.trans_tree.delete(row)
            
        for trans in self.account.get_transaction_history():
            self.trans_tree.insert("", tk.END, values=(
                trans.id,
                trans.type,
                f"¥{trans.amount:+,.2f}",
                f"¥{trans.balance:,.2f}",
                trans.time,
                trans.target if trans.target else ""
            ))
    
    # 以下为各操作对话框实现(因篇幅限制省略部分代码)
    def _create_account(self):
        """新建账户对话框"""
        # 实现代码...
        
    def _load_account(self):
        """加载账户对话框"""
        # 实现代码...
        
    def _deposit(self):
        """存款操作对话框"""
        # 实现代码...
        
    def _withdraw(self):
        """取款操作对话框"""
        # 实现代码...
        
    def _transfer(self):
        """转账操作对话框"""
        # 实现代码...
        
    def _modify_balance(self):
        """修改余额对话框"""
        # 实现代码...

if __name__ == "__main__":
    root = tk.Tk()
    app = BankAppUI(root)
    root.mainloop()