| |
| |
| |
| import time |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| login_auth_dict = {'username': '', |
| "is_admin": '', |
| 'bank_id': '', |
| 'bank_pwd': '', |
| 'balance': '' |
| } |
| |
| |
| def read_data(tag, path): |
| user_pwd_dict = {} |
| user_info_dict ={} |
| user_flow_list = [] |
| with open(path, 'r', encoding='utf-8') as f: |
| data = f.read() |
| data_list = data.split('\n') |
| data_list.pop() |
| if tag == 'login' or tag == 'reg': |
| for data in data_list: |
| username, password, role = data.split('|') |
| user_pwd_dict[username] = {'password': password, 'role': role} |
| return user_pwd_dict |
| if tag == 'flow': |
| for data in data_list: |
| user_flow_list.append(data) |
| return user_flow_list |
| if tag =='info': |
| for data in data_list: |
| username,bank_id,bank_pwd,balance = data.split('|') |
| user_info_dict= {'username':username,'bank_id':bank_id,'bank_pwd':bank_pwd,'balance':balance} |
| return user_info_dict |
| |
| |
| def save_data(path, data): |
| with open(path, 'a', encoding='utf8') as f: |
| f.write(data + '\n') |
| |
| |
| def create_format(**kwargs): |
| data = '|'.join(kwargs.values()) |
| return data |
| |
| |
| def get_user_pass(): |
| username = input('请输入用户名:>>>').strip() |
| password = input('请输入密码:>>>').strip() |
| return username, password |
| |
| |
| |
| def register(): |
| username, password = get_user_pass() |
| if not password.isdigit(): |
| return False, '必须输入数字!' |
| if len(password) != 3: |
| return False, '必须是3位数!' |
| if username == 'heart' and password == '123': |
| role = 'admin' |
| else: |
| role = 'normal' |
| data_reg = create_format(username=username, password=password, role=role) |
| bank_data = create_format(username=username, bank_id='None', bank_pwd='None', balance='None') |
| save_data(path='user_pwd.txt', data=data_reg) |
| save_data(path=f'{username}_log.txt', data=f'用户{username} 于 {time.strftime("%x %X")} 注册成功! 银行卡未激活!') |
| save_data(path=f'{username}_bank.txt', data=bank_data) |
| return True, f'{username} 注册成功!' |
| |
| |
| |
| |
| |
| def login(): |
| username, password = get_user_pass() |
| if not password.isdigit(): |
| return False, '必须输入数字!' |
| if len(password) != 3: |
| return False, '必须是3位数!' |
| data = read_data(tag='login', path='user_pwd.txt') |
| data_dict = data.get(username) |
| if username not in data: |
| return False, '用户未注册!' |
| if password != data_dict.get('password'): |
| return False, '密码错误!' |
| login_auth_dict['username'] = username |
| login_auth_dict['is_admin'] = data_dict.get('role') |
| save_data(f'{username}_log.txt', data=f'用户{username} 于 {time.strftime("%x %X")}登陆成功!') |
| |
| return True, f'{username}登陆成功!' |
| |
| |
| |
| |
| |
| def login_auth(func): |
| def inner(*args, **kwargs): |
| if not login_auth_dict['username']: |
| return False, '必须先登录!' |
| if not login_auth_dict['bank_id'] and func.__name__ != 'init_bank_info': |
| return False, '必须先初始化银行卡!' |
| return func(*args, **kwargs) |
| |
| return inner |
| |
| |
| @login_auth |
| def init_bank_info(): |
| bank_id = input('请输入你的银行卡号:>>>').strip() |
| if not bank_id.isdigit(): |
| return False, '请输入数字!' |
| if len(bank_id) != 6: |
| return False, '银行卡号必须是6位数!' |
| bank_pwd = input('请输入你的银行卡密码:>>>').strip() |
| if not bank_pwd.isdigit(): |
| return False, '请输入数字!' |
| if len(bank_pwd) != 3: |
| return False, '密码必须是3位数!' |
| data = login_auth_dict["username"] |
| login_auth_dict['bank_id'] = bank_id |
| login_auth_dict['bank_pwd'] = bank_pwd |
| login_auth_dict['balance'] = '1000' |
| save_data(path=f'{data}_flow.txt', data=f'{data} 于 {time.strftime("%x %X")} 初始化银行卡成功! 当前余额{login_auth_dict["balance"]} 元') |
| bank_data = create_format(username=data, bank_id=bank_id, bank_pwd=bank_pwd, balance=login_auth_dict['balance']) |
| save_data(path=f'{data}_bank.txt', data=bank_data) |
| return True, f'{login_auth_dict["username"]} 初始化银行卡成功! 当前余额{login_auth_dict["balance"]} 元!' |
| |
| |
| def outer(func): |
| def inner(*args, **kwargs): |
| balance = input('请输入取款金额:>>>').strip() |
| if not balance.isdigit(): |
| return False, '请输入数字!' |
| if int(balance) > int(login_auth_dict['balance']): |
| return False, '余额不足!' |
| bank_id = input('请输入你的银行卡号:>>>').strip() |
| if not bank_id.isdigit(): |
| return False, '请输入数字!' |
| if len(bank_id) != 6: |
| return False, '银行卡号必须是6位数!' |
| if bank_id != login_auth_dict['bank_id']: |
| return False, '银行卡号不正确!' |
| bank_pwd = input('请输入你的银行卡密码:>>>').strip() |
| if not bank_pwd.isdigit(): |
| return False, '请输入数字!' |
| if len(bank_pwd) != 3: |
| return False, '密码必须是3位数!' |
| if bank_pwd != login_auth_dict['bank_pwd']: |
| return False, '密码不正确!' |
| return func(balance=balance, bank_id=bank_id, bank_pwd=bank_pwd, *args, **kwargs) |
| |
| return inner |
| |
| |
| |
| @login_auth |
| @outer |
| def get_balance(*args, **kwargs): |
| balance = kwargs.get('balance') |
| bank_id = kwargs.get('bank_id') |
| bank_pwd = kwargs.get('bank_pwd') |
| username = login_auth_dict["username"] |
| res = int(login_auth_dict['balance']) - int(balance) |
| login_auth_dict['balance'] = str(res) |
| data1 = create_format(username=username, bank_id=bank_id, bank_pwd=bank_pwd, res=str(res)) |
| save_data(f'{username}_bank.txt', data=data1) |
| save_data(f'{username}_flow.txt', |
| data=f'用户 {username} 于 {time.strftime("%x %X")} 取款 {balance}元! 当前余额{res}元!') |
| return True, f'用户{username} 取款{balance}元 剩余余额{res}元!' |
| |
| |
| def outter(func): |
| def inner(*args, **kwargs): |
| balance = input('请输入存款金额:>>>').strip() |
| if not balance.isdigit(): |
| return False, '请输入数字!' |
| bank_id = input('请输入你的银行卡号:>>>').strip() |
| if bank_id != login_auth_dict['bank_id']: |
| return False, '银行卡号不正确!' |
| if not bank_id.isdigit(): |
| return False, '请输入数字!' |
| if len(bank_id) != 6: |
| return False, '银行卡号必须是6位数!' |
| bank_pwd = input('请输入你的银行卡密码:>>>').strip() |
| if bank_pwd != login_auth_dict['bank_pwd']: |
| return False, '密码不正确!' |
| if not bank_pwd.isdigit(): |
| return False, '请输入数字!' |
| if len(bank_pwd) != 3: |
| return False, '密码必须是3位数!' |
| return func(balance=balance, bank_id=bank_id, bank_pwd=bank_pwd, *args, **kwargs) |
| |
| return inner |
| |
| |
| @login_auth |
| @outter |
| def add_balance(*args, **kwargs): |
| username = login_auth_dict["username"] |
| balance = kwargs.get('balance') |
| bank_id = kwargs.get('bank_id') |
| bank_pwd = kwargs.get('bank_pwd') |
| res = int(login_auth_dict['balance']) + int(balance) |
| login_auth_dict['balance'] = str(res) |
| data1 = create_format(username=username, bank_id=bank_id, bank_pwd=bank_pwd, res=str(res)) |
| save_data(f'{username}_bank.txt', data=data1) |
| save_data(f'{username}_flow.txt', |
| data=f'用户 {username} 于 {time.strftime("%x %X")} 存款 {balance}元! 当前余额{res}元!') |
| return True, f'用户{username} 存款{balance}元 剩余余额{res}元!' |
| |
| |
| @login_auth |
| def check_flow(): |
| username = login_auth_dict['username'] |
| data_list = read_data(tag='flow', path=f'{username}_flow.txt') |
| count = 0 |
| print(f"************* 流水打印开始 *************") |
| for data in data_list: |
| count += 1 |
| print(f'当前第{count}条流水 :>>> {data}') |
| print(f"************* 流水打印结束 *************") |
| return True, f'{username}流水打印完成!' |
| |
| @login_auth |
| def check_bank_info(): |
| username = login_auth_dict['username'] |
| data_info = read_data(tag='info',path=f'{username}_bank.txt') |
| card_id = data_info.get('bank_id') |
| balance = data_info.get('balance') |
| return True,f'用户{username} 卡号为{card_id} 当前余额{balance}' |
| |
| |
| def back(): |
| print('欢迎再次使用!') |
| return True, 'back' |
| |
| |
| func_menu = ''' |
| ===================用户功能菜单===================== |
| 1.注册 |
| 2.登陆 |
| 3.取款 |
| 4.存款 |
| 5.查看流水 |
| 6.查看银行信息(查看自己的卡号、余额) |
| 7.初始化银行信息 |
| 8.退出 |
| |
| ======================欢迎使用======================= |
| ''' |
| |
| func_dict = { |
| '1': register, |
| '2': login, |
| '3': get_balance, |
| '4': add_balance, |
| '5': check_flow, |
| '6': check_bank_info, |
| '7': init_bank_info, |
| '8': back |
| } |
| |
| |
| def main(): |
| while True: |
| print(func_menu) |
| func_id = input('请输入功能id:>>>').strip() |
| if func_id not in func_dict.keys(): |
| print('功能不存在!') |
| continue |
| func = func_dict[func_id] |
| flag, msg = func() |
| if flag: |
| if msg == 'back': |
| break |
| print(msg) |
| else: |
| print(msg) |
| continue |
| |
| |
| main() |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通