# 编写ATM程序实现下述功能
# 1.充值功能:用户输入充值钱数,该账号钱数完成修改
# 2.转账功能:用户A向用户B转账1000元,完成用户A账号减钱,用户B账号加钱
# 3.提现功能:用户输入提现金额,该账号钱数减少
# 4.查询余额功能:输入账号查询余额
以上功能需要在用户登录后才可操作,否则用户需要重新注册
import os #定义一个全局变量:字典、登陆后的用户名 dict={} login_user=None def pay_money(username): """用户输入充值金额,保存到全局变量字典中""" while True: money=(input("请输入您要充值的金额:").strip()) if not money.isdigit(): print('输入的必须是数字且为整数!') continue else: pay_money=int(money) dict[username]+=pay_money print("您已充值成功!") break #将操作充值成功的数据进行保存,以便用户对后续功能的操作 save_data() def transfer(username): """"转账,把A用户的钱加到B账户中,A减少金额,B增加金额""" transfer_name = input("输入您要转账的账户名:").strip() # 判断此账户名是否存在 if transfer_name in dict: while True: money = input("请输入您要转账的金额:").strip() if money.isdigit(): pay_money = int(money) if pay_money <= dict[username]: dict[username] -= pay_money dict[transfer_name] += pay_money print("您已转账成功!") break elif pay_money > dict[username]: print('您输入的转账金额超过了实际金额,请重新输入提现金额:') continue else: print('输入的必须是数字且为整数!') continue elif transfer_name not in dict: print("该用户名不存在,请重新核实!") # 将操作 # 转账成功的数据进行保存,以便用户对后续功能的操作 save_data() def withdraw(username): """提现,用户输入金额,该账号金额减少""" while True: money = input("请输入您要提现的金额:").strip() if money.isdigit(): pay_money = int(money) if pay_money<=dict[username]: dict[username] -= pay_money print("您已提现成功!") break elif pay_money > dict[username]: print('您输入的提现金额超过了实际金额,请重新输入提现金额:') continue else: print('输入的必须是数字且为整数!') continue # 将操作提现成功后的数据进行保存,以便用户对后续功能的操作 save_data() def check_money(username): """查询余额,输入该账户,输出该账号的金额数""" print("您的账户余额为:%s元" %dict[username]) def login(): """用户登录,校验用户是否存在,用户存在即才可以做其他操作,输错密码三次该账号被锁定进黑名单""" #用户登录成功返回值1,否则返回值为0, count=0 while count<3: user_name = input("请输入您的账户名:").strip() #判断账户名是否存在,如果不存在则先让用户注册 if user_name not in dict: print("该用户名不存在,请先注册!") return False break password = input("请输入您的账户密码:").strip() # 在黑名单文件中取出用户名 with open("black_name.txt", mode="r", encoding="utf-8") as f: for line1 in f: blackname = line1.strip() #打开用户名和密码的数据文件,匹配用户是否存在 with open("user_name.txt","rt",encoding='utf-8') as file: for line in file: username,use_psd=line.strip().split(":") # 将用户输入的用户名和用户信息表中的用户名 if user_name == username and blackname == username: print("该账号已被锁定!!") count=3 break if user_name==username and password==use_psd and user_name in dict : print("登陆成功!") global login_user login_user=user_name count=3 return True else: count += 1 print('您已输错%s次,还剩%s次' % (count, 3 - count)) if count == 3: with open("black_name.txt", mode='wt', encoding='utf-8') as f: f.write(f'{user_name}\n') print('该账号已被锁定加入黑名单!') break def registered(): # 定义一个空字典,把用户信息里面的信息都存入到reg_dict字典里 reg_dict={} with open("user_name.txt", "rt", encoding='utf-8') as file: for line in file: user_name, user_psd = line.strip().split(":") reg_dict[user_name] = user_psd flag=True while flag: username = input("请您输入用户名:").strip() password = input("请您输入密码:").strip() password1= input("请您再次输入密码:").strip() if username not in reg_dict and password == password1: with open("user_name.txt", mode='at', encoding='utf-8') as f: # 追加写入到用户信息文件中 f.write(f'{username}:{password}\n') # 账号注册成功后,把用户名保存到user_money文件中,并且将金额初始值设置为0 with open("user_money.txt", "at", encoding='utf-8') as f1: # 追加写入到用户金额文件中 f1.write(f'{username}:{0}\n') print("账号注册成功!") flag = False break elif password != password1: print("两次密码输入不一样,请重新注册!") elif username in reg_dict: print("该用户名已经存在,请重新注册!") def save_data(): """保存数据,将字典里的数据写入文件""" # 打开文件,指定文件的操作模式:w以字符串模式写入 with open("user_money.txt", "wt", encoding="utf-8") as file: for line in dict: file.write(f'{line}:{dict[line]}\n') def show_menu(): """展示功能菜单栏""" print("==========ATM系统v1.0========") print("1. 充值") print("2. 转账") print("3. 提现") print("4. 查询") print("5. 退出") def start(): #下面的内容都是程序开始就要执行的,所以都放到start函数里面 """首先读取useer_money文件数据放到全局变量字典里面""" global dict with open("user_money.txt", "rt", encoding='utf-8') as file: for line in file: user_name, use_money = line.strip().split(":") dict[user_name] = int(use_money) #用户登录,判断用户是否存在,用户存在则继续功能操作,不存在则让用户重新注册 flag = login() if flag==0: registered() while flag:#用户存在则进入ATM操作的菜单栏 # 如何实现该系统 # 1、显示系统的功能 show_menu() # 2、让用户选择指定的功能,接收用户输入的功能选项 menu_option = input("请输入操作的功能选项:") # 3、判断用户选择的指定功能,然后完成对应的操作 if menu_option == "1": pay_money(login_user) elif menu_option == "2": transfer(login_user) elif menu_option == "3": withdraw(login_user) elif menu_option == "4": check_money(login_user) elif menu_option == "5": #把数据保存到文件中 save_data() print("退出系统") break start()