# 编写ATM程序实现下述功能,数据来源于文件db.txt # 1、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt(验证是否重名) # 2、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定, # 登录成功后记录下登录状态(提示:可以使用全局变量来记录) # 下述操作,要求登录后才能操作 # 1、查询余额功能:输入账号查询余额 # 2、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改 # 3、提现功能:用户输入提现金额,db.txt中该账号钱数减少(验证余额是否足够) # 4、转账功能:用户A向B转账1000元,db.txt中完成A账号减钱,B账号加钱(验证对方账号是否存在,余额是否足够) def logon(): print('======注册账号======') while 1: logon_name = input('输入注册账号:').strip() logon_pwd = input('输入注册密码:').strip() logon_money = input('存入初始金额:').strip() with open(r'db.txt', mode='rt', encoding='utf-8')as file: for check_info in file: check_list = check_info.strip().split(':') if logon_name == check_list[0]: print('该账号已存在,重新输入') break else: break logon_info = logon_name + ':' + logon_pwd + ':' + logon_money + '\n' with open(r'db.txt', mode='at', encoding='utf-8')as file: file.write(logon_info) print('账号注册成功,以下是注册信息:') print('账号:{} 密码:{} 初始金额:{}'.format(logon_name, logon_pwd, logon_money)) while 1: logon_choice = input('是否用此账号立即登录(1:立即登录,进入操作界面 2:用其他账号登录 0:退出程序):') if logon_choice == '1': logon_return = logon_name break elif logon_choice == '2': logon_return = '2' break elif logon_choice == '0': logon_return = '0' break else: print('指令不合法,重新输入') return logon_return def login(): print('======登录账号======') tag = 1 miss_list = [] while tag: login_name = input('输入登录账号:').strip() login_pwd = input('输入登录密码:').strip() with open(r'db.txt', mode='rt', encoding='utf-8')as file: for check_info in file: check_list = check_info.strip().split(':') if login_name == check_list[0] and login_pwd == check_list[1]: print('登录成功,进入操作界面') login_return = login_name tag = 0 break elif login_name == check_list[0] and login_pwd != check_list[1]: miss_list.append(login_name) miss_count = miss_list.count(login_name) if miss_count < 3: print('密码错误,重新输入(账号{}还可以尝试{}次):'.format(login_name, 3 - miss_count)) break else: print('账号{}的密码已输错3次,退出程序'.format(login_name)) login_return = 'miss_3' tag = 0 break else: print('账号不存在,重新输入') return login_return def money_see(user_name): print('======查询余额======') with open(r'db.txt', mode='rt', encoding='utf-8')as file: for check_info in file: check_list = check_info.strip().split(':') if user_name == check_list[0]: print('账号{}的余额为:{}'.format(check_list[0], check_list[2])) break def money_add(user_name): print('======账号充值======') in_money = input('输入充值金额:').strip() with open(r'db.txt', mode='rt', encoding='utf-8')as file: old_content = file.read() file.seek(0, 0) for check_info in file: check_list = check_info.strip().split(':') if user_name == check_list[0]: break new_money = int(check_list[2]) + int(in_money) new_money = str(new_money) new_info = check_info.replace(check_list[2], new_money) new_content = old_content.replace(check_info, new_info) with open(r'db.txt', mode='wt', encoding='utf-8')as file: file.write(new_content) print('充值成功,账号{}的余额变为:{}'.format(user_name, new_money)) def money_cut(user_name): print('======账号提现======') tag = 1 out_money = '0' while tag: out_money = input('输入提现金额:').strip() with open(r'db.txt', mode='rt', encoding='utf-8')as file: old_content = file.read() file.seek(0, 0) for check_info in file: check_list = check_info.strip().split(':') if user_name == check_list[0] and int(out_money) > int(check_list[2]): print('提现金额超过余额,重新输入') break elif user_name == check_list[0]: tag = 0 break new_money = int(check_list[2]) - int(out_money) new_money = str(new_money) new_info = check_info.replace(check_list[2], new_money) new_content = old_content.replace(check_info, new_info) with open(r'db.txt', mode='wt', encoding='utf-8')as file: file.write(new_content) print('用户{}的余额变为:{}'.format(user_name, new_money)) def money_send(user_name): print('======转账其他账号======') tag = 1 tar_name = '0' while tag: tar_name = input('输入对方账号:').strip() with open(r'db.txt', mode='rt', encoding='utf-8')as file: old_content = file.read() file.seek(0, 0) for check_info in file: tar_check_list = check_info.strip().split(':') if tar_name == tar_check_list[0]: tar_old_info = check_info tag = 0 break else: print('对方账号不存在,重新输入') tag = 1 out_money = '0' while tag: out_money = input('输入转账金额:').strip() with open(r'db.txt', mode='rt', encoding='utf-8')as file: for check_info in file: user_check_list = check_info.strip().split(':') if user_name == user_check_list[0] and int(out_money) > int(user_check_list[2]): print('转账金额超过余额,重新输入') break elif user_name == user_check_list[0]: user_old_info = check_info tag = 0 break tar_new_money = int(tar_check_list[2]) + int(out_money) tar_new_money = str(tar_new_money) tar_new_info = tar_old_info.replace(tar_check_list[2], tar_new_money) user_new_money = int(user_check_list[2]) + int(out_money) user_new_money = str(user_new_money) user_new_info = user_old_info.replace(user_check_list[2], user_new_money) new_content = old_content.replace(user_old_info, user_new_info) new_content = new_content.replace(tar_old_info, tar_new_info) with open(r'db.txt', mode='wt', encoding='utf-8')as file: file.write(new_content) print('转账成功') print('账号{}的金额变为:{}'.format(user_name, user_new_money)) print('账号{}的金额变为:{}'.format(tar_name, tar_new_money)) def cmd_check(check_dict): cmd = '0' while 1: for view in check_dict: print(view, check_dict[view][0]) cmd = input('输入操作指令:') if cmd not in check_dict: print('指令无效,重新输入') else: break return cmd login_dict = {'1': ['注册', logon], '2': ['登录', login] } func_dict = {'1': ['查询', money_see], '2': ['充值', money_add], '3': ['提现', money_cut], '4': ['转账', money_send] } print('======欢迎使用老男孩银行ATM======') login_cmd = cmd_check(login_dict) login_choice = login_dict[login_cmd][1]() if login_choice == '0': exit() elif login_choice == '2': login() user_name = login_choice print('==========进入操作界面==========') func_cmd = cmd_check(func_dict) func_dict[func_cmd][1](user_name) print('==========是否继续操作==========')
ATM程序 2.0
猜你喜欢
转载自www.cnblogs.com/caoyu080202201/p/12547439.html
今日推荐
周排行