下载地址:https://www.pan38.com/share.php?code=pvvmX 提取码:8888
包含详细的代码实现和功能说明。这个生成器可以模拟银行转账系统的核心功能,包括账户验证、余额检查、转账处理等模块。
import random
import datetime
import hashlib
import json
from typing import Dict, List, Optional
class BankAccount:
def init(self, account_number: str, account_name: str, balance: float = 0.0):
self.account_number = account_number
self.account_name = account_name
self.balance = balance
self.transaction_history = []
def deposit(self, amount: float) -> bool:
if amount <= 0:
return False
self.balance += amount
self._record_transaction("DEPOSIT", amount)
return True
def withdraw(self, amount: float) -> bool:
if amount <= 0 or amount > self.balance:
return False
self.balance -= amount
self._record_transaction("WITHDRAW", -amount)
return True
def transfer(self, amount: float, recipient) -> bool:
if amount <= 0 or amount > self.balance:
return False
if not isinstance(recipient, BankAccount):
return False
self.balance -= amount
recipient.balance += amount
self._record_transaction(f"TRANSFER_TO:{recipient.account_number}", -amount)
recipient._record_transaction(f"TRANSFER_FROM:{self.account_number}", amount)
return True
def _record_transaction(self, transaction_type: str, amount: float):
transaction = {
"timestamp": datetime.datetime.now().isoformat(),
"type": transaction_type,
"amount": amount,
"balance": self.balance
}
self.transaction_history.append(transaction)
def get_transaction_history(self, limit: int = 10) -> List[Dict]:
return self.transaction_history[-limit:]
def __str__(self):
return f"Account {self.account_number} ({self.account_name}): Balance ${self.balance:.2f}"
class BankSystem:
def init(self):
self.accounts: Dict[str, BankAccount] = {}
self.transaction_id_counter = 0
def create_account(self, account_name: str, initial_balance: float = 0.0) -> BankAccount:
account_number = self._generate_account_number()
account = BankAccount(account_number, account_name, initial_balance)
self.accounts[account_number] = account
return account
def _generate_account_number(self) -> str:
while True:
account_number = f"{random.randint(10000000, 99999999)}"
if account_number not in self.accounts:
return account_number
def get_account(self, account_number: str) -> Optional[BankAccount]:
return self.accounts.get(account_number)
def transfer(self, from_account: str, to_account: str, amount: float) -> bool:
sender = self.get_account(from_account)
receiver = self.get_account(to_account)
if not sender or not receiver:
return False
if sender.account_number == receiver.account_number:
return False
return sender.transfer(amount, receiver)
def generate_transaction_id(self) -> str:
self.transaction_id_counter += 1
timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
return f"TXN{timestamp}{self.transaction_id_counter:06d}"
def save_to_file(self, filename: str):
data = {
"accounts": [
{
"account_number": acc.account_number,
"account_name": acc.account_name,
"balance": acc.balance,
"transactions": acc.transaction_history
}
for acc in self.accounts.values()
]
}
with open(filename, "w") as f:
json.dump(data, f, indent=2)
@classmethod
def load_from_file(cls, filename: str):
bank = cls()
try:
with open(filename, "r") as f:
data = json.load(f)
for acc_data in data["accounts"]:
account = BankAccount(
acc_data["account_number"],
acc_data["account_name"],
acc_data["balance"]
)
account.transaction_history = acc_data["transactions"]
bank.accounts[account.account_number] = account
except FileNotFoundError:
pass
return bank
def generate_mock_data(bank: BankSystem, num_accounts: int = 10):
names = ["Alice", "Bob", "Charlie", "David", "Eve", "Frank", "Grace", "Henry", "Ivy", "Jack"]
for i in range(num_accounts):
name = f"{names[i % len(names)]} {chr(65 + (i // len(names)))}"
balance = random.uniform(100, 10000)
bank.create_account(name, balance)
def main():
# Initialize bank system
bank = BankSystem.load_from_file("bank_data.json")
if not bank.accounts:
print("Generating mock data...")
generate_mock_data(bank)
bank.save_to_file("bank_data.json")
# Sample transactions
accounts = list(bank.accounts.values())
for _ in range(20):
from_acc = random.choice(accounts)
to_acc = random.choice(accounts)
while to_acc == from_acc:
to_acc = random.choice(accounts)
amount = random.uniform(10, 500)
if bank.transfer(from_acc.account_number, to_acc.account_number, amount):
print(f"Transferred ${amount:.2f} from {from_acc.account_number} to {to_acc.account_number}")
# Save updated data
bank.save_to_file("bank_data.json")
# Display account info
print("\nAccount Balances:")
for account in accounts[:5]: # Show first 5 accounts
print(account)
# Show transaction history for first account
if accounts:
print(f"\nTransaction history for {accounts[0].account_number}:")
for tx in accounts[0].get_transaction_history(5):
print(f"{tx['timestamp']} - {tx['type']}: {tx['amount']:.2f} (Balance: {tx['balance']:.2f})")
if name == "main":
main()
功能说明
账户管理:
创建银行账户
存储账户余额和交易记录
生成唯一的账户号码
交易功能:
存款和取款操作
账户间转账
交易记录保存
数据持久化:
将账户数据保存到JSON文件
从文件加载账户数据
工具函数:
生成模拟数据用于测试
生成唯一的交易ID
交易历史查询
扩展建议
添加用户认证系统
实现加密存储敏感数据
添加API接口供外部调用
实现多线程处理并发交易
添加易手续费计算
实现账户冻结/解冻功能
添加交易限额检查
实现国际转账功能
添加交易通知系统
实现账户报表生成