1 # import os 2 # 这里的os模块没有调用,如果是数据量大的话,则需要这个模块 3 ''' 4 简易版的ATM功能,实现用户充值,转账等功能 5 文件读取和存取方式采用的是读写同一个文件 6 优点:占用磁盘空间少 7 缺点:占用内存空间 8 ps:也可以采用os模块对文件操作 9 优点:占用内存空间少 10 缺点:占用磁盘空间多 11 两种方式根据自己需求选用! 12 ''' 13 14 # 充值功能 15 def pay_money(): 16 name_inp = input("请输入要充值的账号:").strip() 17 # 调用查询功能查询输入的用户是否存在,若存在将返回账户的余额 18 res = pay_check(name_inp) 19 res1 = int(res) 20 # print(res) 21 while 1: 22 money_inp = input("请输入充值金额:").strip() 23 # 判断输入的金额是否是数字,不是则重新输入 24 if not money_inp.isdigit(): 25 print("请输入的必须是数字".center(50, "*")) 26 continue 27 money_inp = int(money_inp) 28 29 res1 += money_inp 30 # dic[name_inp] += money_inp 31 print("充值成功".center(50, "*")) 32 # 打开文件,将文件内容读取到内存中。若数据大,则推荐使用os模块 33 # 将新的数据写入copy文件然后重命名 34 with open("db.txt", "r", encoding="utf8") as f: 35 dic = {} 36 for line in f: 37 user, money = line.strip().split(":") 38 dic[user] = int(money) 39 if name_inp in dic: 40 dic[name_inp] = res1 41 else: 42 return 43 with open("db.txt", "w", encoding="utf8") as w: 44 for user, money in dic.items(): 45 w.write("%s:%s " % (user, money)) 46 break 47 48 49 # 转账功能 50 def transfer(): 51 A_name = input("请输入要转账的账户:").strip() 52 res_A = pay_check(A_name) 53 if res_A < 0: 54 return 55 B_name = input("请输入要接收的账户:").strip() 56 res_B = pay_check(B_name) 57 if res_B < 0: 58 return 59 60 money = int(input("请输入要转账的金额:").strip()) 61 res_A1 = int(res_A) 62 res_B1 = int(res_B) 63 64 if res_A1 > money: 65 res_B1 += money 66 res_A1 -= money 67 print(res_A1, res_B1) 68 print("转账成功".center(50, "*")) 69 70 with open("db.txt", "r", encoding="utf8") as f: 71 dic = {} 72 for line in f: 73 user, money = line.strip().split(":") 74 dic[user] = int(money) 75 dic[A_name] = res_A1 76 dic[B_name] = res_B1 77 with open("db.txt", "w", encoding="utf8") as w: 78 for user, money in dic.items(): 79 w.write("%s:%s " % (user, money)) 80 81 82 # 取现功能 83 def pay_cash(): 84 A_name = input("请输入要提现的账户:").strip() 85 res_A = pay_check(A_name) 86 if res_A < 0: 87 return 88 89 while 1: 90 money = input("请输入要提现的金额:").strip() 91 if not money.isdigit(): 92 print("输入的金额必须是数字".center(50, "*")) 93 money = int(money) 94 95 if money > res_A: 96 print("提现金额不足...".center(50, "*")) 97 else: 98 res_A -= money 99 print("取现成功".center(50, "*")) 100 101 with open("db.txt", "r", encoding="utf8") as f: 102 dic = {} 103 for line in f: 104 user, money = line.strip().split(":") 105 dic[user] = int(money) 106 # if A_name in dic: 107 dic[A_name] = res_A 108 with open("db.txt", "w", encoding="utf8") as w: 109 for user, money in dic.items(): 110 w.write("%s:%s " % (user, money)) 111 break 112 113 114 # 查询功能 115 def pay_check(name): 116 dic = {} 117 with open("db.txt", "r", encoding="utf8") as f: 118 for line in f: 119 user, money = line.strip().split(":") 120 dic[user] = int(money) 121 122 if name not in dic: 123 print("用户不存在") 124 choice = input("是否需要注册账户(Y/N):").strip() 125 if choice.upper() == "Y": 126 pay_register() 127 else: 128 print("结束本次操作".center(50, "*")) 129 return -1 130 else: 131 print("账户【%s】的余额【%s】" % (name, dic[name])) 132 return dic[name] 133 134 135 # 注册功能 136 def pay_register(): 137 username = input("请输入你要注册的账户:").strip() 138 while 1: 139 money_inp = input("请输入你要充值的金额:").strip() 140 if not money_inp.isdigit(): 141 print("请输入数字!".center(50, "*")) 142 continue 143 else: 144 print("充值成功!".center(50, "*")) 145 money_inp = int(money_inp) 146 147 with open("db.txt", "a", encoding="utf8") as f: 148 f.write("%s:%s " % (username, money_inp)) 149 return 150 151 152 # 执行代码 153 def my_choice(): 154 msg = """ 155 "1": "充值", 156 "2": "转账", 157 "3": "取现", 158 "4": "查询", 159 "5": "注册", 160 "6": "退出" 161 """ 162 msg_dic = { 163 "1": pay_money, 164 "2": transfer, 165 "3": pay_cash, 166 "4": pay_check, 167 "5": pay_register, 168 } 169 while 1: 170 print(msg) 171 choice = input("请输入你要做的操作:").strip() 172 if choice == "6": break 173 if choice not in msg_dic: 174 print("输入有误,重新输入!".center(50, "*")) 175 continue 176 if choice == '4': # 177 data = input(">>>>输入账户:").strip() 178 msg_dic[choice](data) 179 continue 180 msg_dic[choice]() 181 182 183 if __name__ == "__main__": 184 my_choice()