文件下载地址:https://pan38.com/xiazai/index.php?id=21 提取码:34ca
哈喽大家好!今天我们来搞点好玩的——用Python模拟一个简化版的招商银行系统!适合刚学Python的小伙伴练手哦!
📦 先准备“数据库”
实际银行用真数据库,我们先用字典和列表模拟:
python
模拟数据库
users_db = {} # 用户信息数据库
accounts_db = {} # 账户信息数据库
transactions_db = [] # 交易记录
初始化一个测试账户(现实中不会这么做!)
users_db["test_user"] = {
"password": "123456",
"name": "测试用户",
"phone": "13800138000"
}
accounts_db["test_user"] = {
"balance": 10000.00,
"account_id": "CMB6225887654321001",
"card_type": "金葵花"
}
🏗️ 核心类设计
python
class CMBSimulator:
"""招商银行模拟器核心类"""
def __init__(self):
self.current_user = None
self.current_account = None
def register(self):
"""用户注册"""
print("\n" + "="*40)
print("欢迎使用招商银行开户系统")
print("="*40)
username = input("请输入用户名: ").strip()
if username in users_db:
print("❌ 用户名已存在!")
return False
password = input("请输入密码: ").strip()
name = input("请输入真实姓名: ").strip()
phone = input("请输入手机号: ").strip()
# 生成模拟账户信息
import random
account_id = f"CMB6225{random.randint(1000000000, 9999999999)}"
# 保存到数据库
users_db[username] = {
"password": password,
"name": name,
"phone": phone
}
accounts_db[username] = {
"balance": 0.00,
"account_id": account_id,
"card_type": "一卡通"
}
print(f"\n🎉 开户成功!")
print(f"📋 账户信息:")
print(f" 账户名:{name}")
print(f" 卡号:{account_id}")
print(f" 卡种:一卡通")
return True
🔐 登录系统实现
python
def login(self):
"""用户登录"""
print("\n" + "="40)
print("招商银行登录系统")
print("="40)
username = input("用户名: ").strip()
password = input("密码: ").strip()
if username not in users_db:
print("❌ 用户不存在!")
return False
if users_db[username]["password"] != password:
print("❌ 密码错误!")
return False
self.current_user = username
self.current_account = accounts_db[username]
print(f"\n✅ 登录成功!欢迎 {users_db[username]['name']} 回来!")
print(f"💳 当前余额: ¥{self.current_account['balance']:.2f}")
return True
💰 存款功能
python
def deposit(self):
"""存款"""
if not self.current_user:
print("请先登录!")
return
try:
amount = float(input("请输入存款金额: "))
if amount <= 0:
print("❌ 存款金额必须大于0!")
return
self.current_account['balance'] += amount
# 记录交易
transaction = {
"type": "存款",
"amount": amount,
"from": "现金",
"to": self.current_account['account_id'],
"time": self._get_current_time(),
"balance": self.current_account['balance']
}
transactions_db.append(transaction)
print(f"\n✅ 存款成功!")
print(f"💰 存入金额: ¥{amount:.2f}")
print(f"📊 当前余额: ¥{self.current_account['balance']:.2f}")
except ValueError:
print("❌ 请输入有效的金额!")
🏧 取款功能
python
def withdraw(self):
"""取款"""
if not self.current_user:
print("请先登录!")
return
try:
amount = float(input("请输入取款金额: "))
if amount <= 0:
print("❌ 取款金额必须大于0!")
return
if amount > self.current_account['balance']:
print("❌ 余额不足!")
return
self.current_account['balance'] -= amount
# 记录交易
transaction = {
"type": "取款",
"amount": amount,
"from": self.current_account['account_id'],
"to": "现金",
"time": self._get_current_time(),
"balance": self.current_account['balance']
}
transactions_db.append(transaction)
print(f"\n✅ 取款成功!")
print(f"💰 取出金额: ¥{amount:.2f}")
print(f"📊 当前余额: ¥{self.current_account['balance']:.2f}")
except ValueError:
print("❌ 请输入有效的金额!")
🔄 转账功能(重点!)
python
def transfer(self):
"""转账"""
if not self.current_user:
print("请先登录!")
return
try:
target_account = input("请输入对方账户号: ").strip()
amount = float(input("请输入转账金额: "))
if amount <= 0:
print("❌ 转账金额必须大于0!")
return
if amount > self.current_account['balance']:
print("❌ 余额不足!")
return
# 模拟查找收款账户
target_user = None
for user, acc_info in accounts_db.items():
if acc_info['account_id'] == target_account:
target_user = user
break
if not target_user:
print("❌ 收款账户不存在!")
return
# 执行转账
self.current_account['balance'] -= amount
accounts_db[target_user]['balance'] += amount
# 记录双方交易
transaction_out = {
"type": "转账支出",
"amount": amount,
"from": self.current_account['account_id'],
"to": target_account,
"time": self._get_current_time(),
"balance": self.current_account['balance']
}
transaction_in = {
"type": "转账收入",
"amount": amount,
"from": self.current_account['account_id'],
"to": target_account,
"time": self._get_current_time(),
"balance": accounts_db[target_user]['balance']
}
transactions_db.append(transaction_out)
transactions_db.append(transaction_in)
print(f"\n✅ 转账成功!")
print(f"💸 转账金额: ¥{amount:.2f}")
print(f"🎯 收款账户: {target_account}")
print(f"📊 当前余额: ¥{self.current_account['balance']:.2f}")
except ValueError:
print("❌ 请输入有效的金额!")
📊 查询交易记录
python
def show_transactions(self):
"""显示交易记录"""
if not self.current_user:
print("请先登录!")
return
user_account = self.current_account['account_id']
user_transactions = []
# 筛选出当前用户的交易记录
for trans in transactions_db:
if trans['from'] == user_account or trans['to'] == user_account:
user_transactions.append(trans)
if not user_transactions:
print("\n📭 暂无交易记录")
return
print("\n" + "="*60)
print("招商银行交易记录")
print("="*60)
print(f"{'时间':<20} {'类型':<10} {'金额':<12} {'余额':<12}")
print("-"*60)
for trans in user_transactions[-10:]: # 显示最近10条
print(f"{trans['time']:<20} {trans['type']:<10} "
f"¥{trans['amount']:<10.2f} ¥{trans['balance']:<10.2f}")
🎮 主菜单系统
python
def main_menu(self):
"""主菜单"""
while True:
print("\n" + "="40)
print("招商银行模拟系统 v1.0")
print("="40)
if self.current_user:
user_info = users_db[self.current_user]
acc_info = self.current_account
print(f"👤 当前用户: {user_info['name']}")
print(f"💳 账户余额: ¥{acc_info['balance']:.2f}")
print("-"*40)
print("1. 存款")
print("2. 取款")
print("3. 转账")
print("4. 查询交易记录")
print("5. 账户信息")
print("6. 退出登录")
print("0. 退出系统")
else:
print("1. 注册新用户")
print("2. 登录")
print("0. 退出系统")
choice = input("\n请选择操作: ").strip()
if not self.current_user:
if choice == "1":
self.register()
elif choice == "2":
self.login()
elif choice == "0":
print("\n感谢使用招商银行模拟系统!再见!")
break
else:
if choice == "1":
self.deposit()
elif choice == "2":
self.withdraw()
elif choice == "3":
self.transfer()
elif choice == "4":
self.show_transactions()
elif choice == "5":
self.show_account_info()
elif choice == "6":
print("\n✅ 已退出登录")
self.current_user = None
self.current_account = None
elif choice == "0":
print("\n感谢使用招商银行模拟系统!再见!")
break
def _get_current_time(self):
"""获取当前时间(模拟)"""
from datetime import datetime
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
def show_account_info(self):
"""显示账户信息"""
if not self.current_user:
return
user_info = users_db[self.current_user]
acc_info = self.current_account
print("\n" + "="*40)
print("账户信息")
print("="*40)
print(f"账户名: {user_info['name']}")
print(f"用户名: {self.current_user}")
print(f"手机号: {user_info['phone']}")
print(f"银行卡号: {acc_info['account_id']}")
print(f"卡类型: {acc_info['card_type']}")
print(f"当前余额: ¥{acc_info['balance']:.2f}")
🚀 运行程序
python
if name == "main":
print("正在启动招商银行模拟系统...")
bank = CMBSimulator()
bank.main_menu()
💡 扩展建议
这个模拟器还有很多可以完善的地方:
数据持久化:用pickle或SQLite保存数据
密码加密:使用hashlib加密密码
利息计算:模拟活期/定期存款利息
ATM机限制:单日取款限额
图形界面:用tkinter或PyQt做UI
📝 总结
这个模拟器涵盖了银行系统的核心功能,代码结构清晰,适合学习:
Python面向对象编程
数据结构设计
业务逻辑实现
⚠️ 注意:这只是一个教学演示项目,真实银行系统要复杂得多,有严格的安全措施!