银行卡类:卡号、密码、金额、状态
用户类:名字、省份证、银行卡
-
操作类:开户、查询、转账、取款、存款、锁定、解锁
from user import User from admin import Admin from operate import Operate if __name__ == '__main__': # 记录管理员登录失败次数,若达到3次则直接结束 count = 0 # 创建管理员对象 admin = Admin() while True: # 显示欢迎页面 admin.welcome() # 登录检查 ret = admin.login() if ret: # 记录是否退出 is_quit = False # 先从文件中加载用户信息 userinfo = User.load_user() # 创建操作对象 op = Operate(userinfo) while True: # 显示操作菜单 admin.menu() # 获取用户的操作 num = int(input('请选择操作:')) if num == 0: print('退出') is_quit = True break elif num == 1: op.new_user() elif num == 2: op.del_user() elif num == 3: op.query_money() elif num == 4: op.save_money() elif num == 5: op.get_money() elif num == 6: op.transfer_money() elif num == 7: op.change_pwd() elif num == 8: op.lock_user() elif num == 9: op.unlock_user() elif num == 10: op.show_users() else: print('操作代号有误,请重新输入') if is_quit: break else: print('账户或密码有误,登录失败') count += 1 if count >= 3: print('错误已达上限,禁止登录') break print('OVER')
# 管理员类
class Admin:
def
__init__(
self, account=
'admin', password=
'123456'):
self.account = account
self.password = password
# 显示欢迎信息
def welcome(
self):
print(
'*' *
30)
print(
' ' *
5 +
'欢迎使用XX银行管理系统')
print(
'*' *
30)
# 登录页面
def login(
self):
account =
input(
'请输入账号:')
password =
input(
'请输入密码:')
if account ==
self.account
and password ==
self.password:
return True
return False
# 操作菜单
def menu(
self):
print(
'*' *
30)
print(
'开户[1] 销户[2] 查询[3] 存款[4]')
print(
'取款[5] 转账[6] 改密[7] 锁定[8]')
print(
'解锁[9] 退出[0] 显示所有用户[10]')
print(
'*' *
30)
# 银行卡类 class Card: def __init__(self, cid, pwd): self.cid = cid # 卡号 self.pwd = pwd # 密码 self.money = 0 # 金额 self.is_lock = False # 是否锁定
import hashlib from random import randint # 助手函数类 class Helper: # 生成银行卡号 @staticmethod def generate_cid(length=8): cid = '' for i in range(length): cid += str(randint(0, 9)) return cid # 加密密码 @staticmethod def generate_password_hash(password): # 创建加密对象 m = hashlib.md5() # 设置加密字符串 m.update(password.encode('utf-8')) # 返回加密字符串 return m.hexdigest() # 检验密码 @staticmethod def check_password_hash(pwd, pwd_hash): m = hashlib.md5() m.update(pwd.encode('utf-8')) return m.hexdigest() == pwd_hash
from user import User from card import Card from helper import Helper # 操作类 class Operate: def __init__(self, userinfo={}): # 用户存放所有的用户信息 self.userinfo = userinfo # 开户 def new_user(self): name = input('请输入姓名:') uid = input('请输入身份证:') pwd = input('请输入密码:') # 密码加密 pwd = Helper.generate_password_hash(pwd) # 生成随机卡号 cid = Helper.generate_cid() # 创建银行卡 card = Card(cid, pwd) # 创建用户 user = User(uid, name, card) # 保存用户信息 self.userinfo[cid] = user # 保存用户信息到文件 User.save_user(self.userinfo) print('开户成功') # 销户 def del_user(self): print('销户成功') # 查询 def query_money(self): cid = input('请输入您的卡号:') user = self.userinfo.get(cid) if user: print('您的余额为:', user.card.money) else: print('无效的卡号') # 转账 def transfer_money(self): cid = input('请输入您的卡号:') user = self.userinfo.get(cid) if user: dst_cid = input('请输入对方卡号:') dst_user = self.userinfo.get(dst_cid) if dst_user: money = float(input('请输入转账金额:')) # 判断余额是否充足 if user.card.money < money: print('余额不足,转账失败') return pwd = input('请输入密码:') if Helper.check_password_hash(pwd, user.card.pwd): user.card.money -= money dst_user.card.money += money User.save_user(self.userinfo) print('转账成功') else: print('密码有误,转账失败') else: print('无效的卡号') else: print('无效的卡号') # 存款 def save_money(self): cid = input('请输入您的卡号:') user = self.userinfo.get(cid) if user: # 查看用户是否锁定 if user.card.is_lock: print('该卡已锁定,请先去解锁') return # 记录密码错误次数 count = 0 while count < 3: pwd = input('请输入密码:') if Helper.check_password_hash(pwd, user.card.pwd): money = input('请输入您的存款金额:') user.card.money += float(money) User.save_user(self.userinfo) print('存款成功') break else: count += 1 print('密码有误,请重新输入') else: user.card.is_lock = True User.save_user(self.userinfo) print('密码错误已达上限,该卡已锁定') else: print('无效的卡号') # 取款 def get_money(self): print('取款成功') # 改密 def change_pwd(self): print('密码修改成功') # 锁定 def lock_user(self): print('用户锁定') # 解锁 def unlock_user(self): cid = input('请输入卡号:') user = self.userinfo.get(cid) if user: user.card.is_lock = False User.save_user(self.userinfo) print('解锁成功') else: print('无效的卡号') # 显示所有用户信息 def show_users(self): for user in self.userinfo.values(): print(user)
import os import pickle # 用户类 class User: def __init__(self, uid, name, card): self.uid = uid # 身份证 self.name = name # 姓名 self.card = card # 银行卡 def __str__(self): return '姓名:{},身份证:{},卡号:{}'.format(self.name, self.uid, self.card.cid) # 将用户信息序列化存储 @staticmethod def save_user(userinfo): pathname = os.path.join(os.getcwd(), 'userinfo.db') with open(pathname, 'wb') as fp: pickle.dump(userinfo, fp) # 从文件中加载用户信息 @staticmethod def load_user(): pathname = os.path.join(os.getcwd(), 'userinfo.db') # 判断是否存在 if os.path.exists(pathname): with open(pathname, 'rb') as fp: userinfo = pickle.load(fp) return userinfo return {}