农业银行模拟器,工商建设邮政中国银行,虚拟余额生成模拟器

简介: 这个银行模拟系统包含三个主要模块:核心银行账户逻辑、图形用户界面和REST API接口

下载地址:https://www.pan38.com/yun/share.php?code=JCnzE 提取密码:6689

这个银行模拟系统包含三个主要模块:核心银行账户逻辑、图形用户界面和REST API接口。系统支持五大银行的账户模拟,包括虚拟余额生成功能,可以预测未来30天的账户余额变化。

import random
import time
import hashlib
from datetime import datetime

class BankAccount:
def init(self, bank_name, account_type="储蓄卡"):
self.bank_name = bank_name
self.account_type = account_type
self.account_number = self._generate_account_number()
self.balance = 0.0
self.transaction_history = []
self.credit_limit = 10000 if account_type == "信用卡" else 0
self.creation_date = datetime.now()

def _generate_account_number(self):
    prefix = {
        "农业银行": "622848",
        "工商银行": "622202", 
        "建设银行": "622700",
        "邮政储蓄": "622188",
        "中国银行": "456351"
    }.get(self.bank_name, "622588")
    return prefix + ''.join([str(random.randint(0,9)) for _ in range(13)])

def deposit(self, amount):
    self.balance += amount
    self._record_transaction("存款", amount)
    return f"成功存入 {amount:.2f} 元,当前余额: {self.balance:.2f} 元"

def withdraw(self, amount):
    if amount > self.balance + self.credit_limit:
        return "余额不足"
    self.balance -= amount
    self._record_transaction("取款", -amount)
    return f"成功取出 {amount:.2f} 元,当前余额: {self.balance:.2f} 元"

def _record_transaction(self, trans_type, amount):
    transaction = {
        "type": trans_type,
        "amount": amount,
        "balance": self.balance,
        "time": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    }
    self.transaction_history.append(transaction)

def get_balance(self):
    return self.balance

def get_transaction_history(self):
    return self.transaction_history

def generate_virtual_balance(self, days=30):
    virtual_balance = []
    current_balance = self.balance
    for day in range(days):
        daily_change = random.uniform(-500, 1000)
        current_balance += daily_change
        if current_balance < -self.credit_limit:
            current_balance = -self.credit_limit
        virtual_balance.append({
            "date": (datetime.now() + timedelta(days=day)).strftime("%Y-%m-%d"),
            "balance": round(current_balance, 2)
        })
    return virtual_balance

from bank_simulator import BankAccount
import tkinter as tk
from tkinter import ttk, messagebox

class BankApp:
def init(self, root):
self.root = root
self.root.title("银行模拟系统")
self.accounts = {}
self.current_account = None

    self.setup_ui()

def setup_ui(self):
    # 银行选择区域
    bank_frame = ttk.LabelFrame(self.root, text="选择银行")
    bank_frame.pack(padx=10, pady=5, fill="x")

    self.bank_var = tk.StringVar()
    banks = ["农业银行", "工商银行", "建设银行", "邮政储蓄", "中国银行"]
    for bank in banks:
        ttk.Radiobutton(bank_frame, text=bank, variable=self.bank_var, value=bank).pack(side="left", padx=5)

    # 账户类型选择
    type_frame = ttk.LabelFrame(self.root, text="账户类型")
    type_frame.pack(padx=10, pady=5, fill="x")

    self.type_var = tk.StringVar(value="储蓄卡")
    ttk.Radiobutton(type_frame, text="储蓄卡", variable=self.type_var, value="储蓄卡").pack(side="left", padx=5)
    ttk.Radiobutton(type_frame, text="信用卡", variable=self.type_var, value="信用卡").pack(side="left", padx=5)

    # 账户操作按钮
    btn_frame = ttk.Frame(self.root)
    btn_frame.pack(padx=10, pady=5, fill="x")

    ttk.Button(btn_frame, text="开户", command=self.open_account).pack(side="left", padx=5)
    ttk.Button(btn_frame, text="存款", command=self.deposit).pack(side="left", padx=5)
    ttk.Button(btn_frame, text="取款", command=self.withdraw).pack(side="left", padx=5)
    ttk.Button(btn_frame, text="查询余额", command=self.check_balance).pack(side="left", padx=5)
    ttk.Button(btn_frame, text="交易记录", command=self.show_transactions).pack(side="left", padx=5)
    ttk.Button(btn_frame, text="虚拟余额", command=self.generate_virtual).pack(side="left", padx=5)

    # 账户信息显示
    self.info_text = tk.Text(self.root, height=10, state="disabled")
    self.info_text.pack(padx=10, pady=5, fill="both", expand=True)

def open_account(self):
    bank = self.bank_var.get()
    if not bank:
        messagebox.showerror("错误", "请选择银行")
        return

    account = BankAccount(bank, self.type_var.get())
    self.accounts[account.account_number] = account
    self.current_account = account

    self.info_text.config(state="normal")
    self.info_text.delete(1.0, tk.END)
    self.info_text.insert(tk.END, f"开户成功!\n银行: {bank}\n")
    self.info_text.insert(tk.END, f"账号: {account.account_number}\n")
    self.info_text.insert(tk.END, f"类型: {self.type_var.get()}\n")
    self.info_text.insert(tk.END, f"初始余额: 0.00 元\n")
    if self.type_var.get() == "信用卡":
        self.info_text.insert(tk.END, f"信用额度: {account.credit_limit} 元\n")
    self.info_text.config(state="disabled")

def deposit(self):
    if not self.current_account:
        messagebox.showerror("错误", "请先开户")
        return

    amount = self.get_amount("存款金额")
    if amount:
        result = self.current_account.deposit(amount)
        self.show_info(result)

def withdraw(self):
    if not self.current_account:
        messagebox.showerror("错误", "请先开户")
        return

    amount = self.get_amount("取款金额")
    if amount:
        result = self.current_account.withdraw(amount)
        self.show_info(result)

def check_balance(self):
    if not self.current_account:
        messagebox.showerror("错误", "请先开户")
        return

    balance = self.current_account.get_balance()
    credit = self.current_account.credit_limit if self.current_account.account_type == "信用卡" else 0
    self.show_info(f"当前余额: {balance:.2f} 元\n可用额度: {credit + balance:.2f} 元")

def show_transactions(self):
    if not self.current_account:
        messagebox.showerror("错误", "请先开户")
        return

    transactions = self.current_account.get_transaction_history()
    if not transactions:
        self.show_info("暂无交易记录")
        return

    info = "交易记录:\n"
    for trans in transactions:
        info += f"{trans['time']} {trans['type']}: {trans['amount']:.2f} 余额: {trans['balance']:.2f}\n"
    self.show_info(info)

def generate_virtual(self):
    if not self.current_account:
        messagebox.showerror("错误", "请先开户")
        return

    virtual = self.current_account.generate_virtual_balance()
    info = "未来30天虚拟余额预测:\n"
    for day in virtual:
        info += f"{day['date']}: {day['balance']:.2f} 元\n"
    self.show_info(info)

def get_amount(self, title):
    amount = tk.simpledialog.askfloat(title, "请输入金额:")
    if amount and amount > 0:
        return amount
    elif amount:
        messagebox.showerror("错误", "金额必须大于0")
    return None

def show_info(self, message):
    self.info_text.config(state="normal")
    self.info_text.delete(1.0, tk.END)
    self.info_text.insert(tk.END, message)
    self.info_text.config(state="disabled")

if name == "main":
root = tk.Tk()
app = BankApp(root)
root.mainloop()

from flask import Flask, jsonify, request
from bank_simulator import BankAccount
import json

app = Flask(name)

@app.route('/api/account/create', methods=['POST'])
def create_account():
data = request.json
bank = data.get('bank')
account_type = data.get('type', '储蓄卡')

if not bank or bank not in ["农业银行", "工商银行", "建设银行", "邮政储蓄", "中国银行"]:
    return jsonify({"error": "无效银行"}), 400

account = BankAccount(bank, account_type)
return jsonify({
    "bank": bank,
    "account_number": account.account_number,
    "type": account_type,
    "balance": account.balance,
    "credit_limit": account.credit_limit,
    "creation_date": account.creation_date.strftime("%Y-%m-%d")
})

@app.route('/api/account//balance', methods=['GET'])
def get_balance(account_number):
account = BankAccount.get_account(account_number)
if not account:
return jsonify({"error": "账户不存在"}), 404

return jsonify({
    "balance": account.balance,
    "available": account.balance + account.credit_limit
})

@app.route('/api/account//virtual', methods=['GET'])
def generate_virtual(account_number):
account = BankAccount.get_account(account_number)
if not account:
return jsonify({"error": "账户不存在"}), 404

days = request.args.get('days', default=30, type=int)
virtual = account.generate_virtual_balance(days)
return jsonify(virtual)

@app.route('/api/account//transaction', methods=['POST'])
def make_transaction(account_number):
account = BankAccount.get_account(account_number)
if not account:
return jsonify({"error": "账户不存在"}), 404

data = request.json
trans_type = data.get('type')
amount = data.get('amount')

if not trans_type or not amount:
    return jsonify({"error": "缺少参数"}), 400

if trans_type == 'deposit':
    result = account.deposit(amount)
elif trans_type == 'withdraw':
    result = account.withdraw(amount)
else:
    return jsonify({"error": "无效交易类型"}), 400

return jsonify({
    "message": result,
    "new_balance": account.balance
})

if name == 'main':
app.run(debug=True)

相关文章
|
5月前
|
Java
四大银行虚拟仿真app,银行卡p图软件,银行转账截图生成器【jar实现仅供娱乐用途】
这是一款增强版银行系统程序,包含完整账户管理、交易记录、转账及账户流水查询功能。代码采用Java编写,通过`BankSystem`类实现账户创建与管理。
|
5月前
|
存储 设计模式 安全
中国工商银行模拟器,建设邮政邮政农业,java实现装逼神器
这是一个基于Java 8+开发的简单银行系统模拟项目,包含账户管理、资金操作(存款、取款)、转账功能及数据安全保护。
|
Ubuntu Linux Shell
使用Busybox制作根文件系统
使用Busybox制作根文件系统
264 0
|
5月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
4月前
|
Java API 数据安全/隐私保护
手机无人直播手机用啥软件,抖音快手无人直播工具,jar代码分享
这个无人直播系统包含视频处理、直播推流和自动化控制三个核心模块。使用mvn package命
|
5月前
|
移动开发 前端开发 JavaScript
征信报告修改器,征信报告生成器,制作软件无痕修改软件【js+html+css】
本项目为信用评分模拟器教学工具,采用HTML5实现,仅供学习参考。核心功能通过JavaScript构建,包含虚拟数据生成、权重分配及信用因素分析(如还款记录、信用使用率等)。
|
5月前
|
存储 自然语言处理 前端开发
抖音快手小红书虚拟评论截图生成器,模拟对话制作工具,html+js+css
这是一款纯前端实现的多平台虚拟评论生成器,支持抖音、快手、小红书风格,适用于产品演示与UI设计。采用Vanilla JS与Flexbox布局,利用IndexedDB存储数据,CSS Variables切换主题。
|
3月前
|
缓存 网络协议 网络安全
steam错误代码118,如何解决?
遇到Steam错误代码118(网络连接问题),以下是综合多种有效解决方案的步骤指南:
|
4月前
|
JavaScript 前端开发 数据安全/隐私保护
贷款额度生成器app源代码,虚拟贷款图片生成器,贷款审批通过生成器
这个代码实现了一个完整的贷款额度模拟计算器,包含HTML界面和JavaScript计算逻辑。它可以