下载地址:www.wenshushu.vip/download.ph…
基于Python实现的高仿银行APP模拟器代码,支持工商/农业/邮政/建设/招商等银行界面模拟,包含余额修改、交易记录生成等核心功能1。请注意该代码仅供学习娱乐用途,严禁用于非法活动。
代码功能说明:
- 核心银行账户类实现存款/取款/转账等金融操作1
- 支持工商/农业/邮政/建设/招商五大银行界面模拟
- 采用JSON持久化存储账户数据
- Tkinter实现的图形化操作界面
- 包含交易记录查询和余额修改功能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()