zoukankan      html  css  js  c++  java
  • Python编写ATM(初级进阶)

    Python3.7

    基于面向对象编程

    主要功能

      一. 用户功能

        查询余额, 取款, 存款, 转账, 修改个人密码

      二. 管理员功能

        添加新账号, 冻结账号, 解除冻结, 查询用户信息, 查询所有用户信息

      三. 系统平台

        登录, 冻结

      四.其他

        文本存储, 信息格式位: 账号,密码,级别,金额,状态,如: X0001,1234,1,10000,0

    代码如下:

      1 import os
      2 
      3 
      4 # 普通用户
      5 class Client:
      6     def __init__(self, data):
      7         print(data)
      8         self.id = data[0]  # id
      9         self.password = data[1]  # 密码
     10         self.level = data[2]  # 级别
     11         self.money = data[3]  # 金额
     12         self.stauts = data[4]  # 状态
     13 
     14     # 查询 金额
     15     def chaxun(self):
     16         print("账号'%s',余额为%.2f$" % (self.id, int(self.money)))
     17         return self.money
     18 
     19     # 取钱
     20     def qu(self):
     21         num = int(input("输入取走金额(以百为单位,最高5000):"))
     22         while num % 100 != 0 or num > int(self.money) or num < 100 or num > 5000:
     23             num = int(input("输入错误,请重试:"))
     24         data_list = []
     25         with open("user_info.txt", 'r', encoding='utf8') as f:
     26             for line in f:
     27                 data_list.append(line)
     28         with open("user_info(副本).txt", 'w', encoding='utf8') as f1:
     29             for i in range(len(data_list)):
     30                 detail_list = data_list[i].strip().split(',')
     31                 if detail_list[0] == self.id:
     32                     # 取完后的钱
     33                     self.money = str(int(detail_list[3]) - num)
     34                     detail_list[3] = self.money
     35                     info_str = ','.join(detail_list) + "
    "
     36                     f1.write(info_str)
     37                 else:
     38                     info_str = ','.join(detail_list) + '
    '
     39                     f1.write(info_str)
     40         os.remove('user_info.txt')
     41         os.rename('user_info(副本).txt', 'user_info.txt')
     42         print("账号'%s',取走%.2f$,余额为%.2f$" % (self.id, int(num), int(self.money)))
     43         return self.money
     44      # 存钱
     45     def cun(self):
     46         num = int(input("输入存入金额(以百为单位):"))
     47         while num % 100 != 0 or num < 100:
     48             num = int(input("输入错误,请重试:"))
     49         data_list = []
     50         with open("user_info.txt", 'r', encoding='utf8') as f:
     51             for line in f:
     52                 data_list.append(line)
     53         with open("user_info(副本).txt", 'w', encoding='utf8') as f1:
     54             for i in range(len(data_list)):
     55                 detail_list = data_list[i].strip().split(',')
     56                 if detail_list[0] == self.id:
     57                     # 存完之后的钱
     58                     self.money = str(int(detail_list[3]) + num)
     59                     detail_list[3] = self.money
     60                     info_str = ','.join(detail_list) + "
    "
     61                     f1.write(info_str)
     62                 else:
     63                     info_str = ','.join(detail_list) + '
    '
     64                     f1.write(info_str)
     65         os.remove('user_info.txt')
     66         os.rename('user_info(副本).txt', 'user_info.txt')
     67         print("账号'%s',取走%.2f$,余额为%.2f$" % (self.id, int(num), int(self.money)))
     68         return self.money
     69 
     70     # 转账
     71     def zhuan(self):
     72         id_list = []
     73         with open("user_info.txt", 'r', encoding='utf8') as f:
     74             for line in f:
     75                 info_list = line.strip().split(',')
     76                 id_list.append(info_list[0])
     77         print("#ID列表", id_list, )
     78         id = input("输入转账ID:")
     79         while id not in id_list or id == self.id:
     80             id = input("ID输入错误,请重试:")
     81             if id.lower() == 'q':
     82                 return
     83 
     84         num = int(input("输入转账金额(以百为单位,最高5000):"))
     85         while num % 100 != 0 or num > int(self.money) or num < 100 or num > 5000:
     86             num = int(input("金额输入错误,请重试:"))
     87 
     88         data_list = []
     89         with open("user_info.txt", 'r', encoding='utf8') as f:
     90             for line in f:
     91                 data_list.append(line)
     92 
     93         with open("user_info(副本).txt", 'w', encoding='utf8') as f1:
     94             for i in range(len(data_list)):
     95                 detail_list = data_list[i].strip().split(',')
     96                 if detail_list[0] == self.id:  # 修改自己的 金额
     97                     self.money = str(int(detail_list[3]) - num)
     98                     detail_list[3] = self.money
     99                     info_str = ','.join(detail_list) + "
    "
    100                     f1.write(info_str)
    101                 elif detail_list[0] == id:  # 增加 接收人的金额
    102                     detail_list[3] = str(int(detail_list[3]) + num)
    103                     info_str = ','.join(detail_list) + "
    "
    104                     f1.write(info_str)
    105                 else:
    106                     info_str = ','.join(detail_list) + '
    '
    107                     f1.write(info_str)
    108         os.remove('user_info.txt')
    109         os.rename('user_info(副本).txt', 'user_info.txt')
    110         print("转账成功,剩余余额%.2f" % int(self.money))
    111         return self.money
    112 
    113     # 修改密码
    114     def xiugai(self, ):
    115         old_pwd = input("输入旧密码:")
    116         while old_pwd != self.password:
    117             old_pwd = input("密码错误,请重试:")
    118 
    119         new_pwd = input("输入新密码(q返回):")
    120         if new_pwd.lower() == 'q':
    121             print("取消修改密码")
    122             return
    123 
    124         while len(new_pwd) < 6 or len(set(new_pwd)) == 1:
    125             new_pwd = input("新密码不能小于6位或者6位完全相同,请重试:")
    126 
    127         new_pwd_2 = input("确认新密码:")
    128         while len(new_pwd_2) < 6 or len(set(new_pwd_2)) == 1:
    129             print("新密码不能小于6位或者6位完全相同,请重试:")
    130         if new_pwd == new_pwd_2:
    131             data_list = []
    132             with open("user_info.txt", 'r', encoding='utf8') as f:
    133                 for line in f:
    134                     data_list.append(line)
    135 
    136             with open("user_info(副本).txt", 'w', encoding='utf8') as f1:
    137                 for i in range(len(data_list)):
    138                     detail_list = data_list[i].strip().split(',')
    139                     if detail_list[0] == self.id:  # 修改自己密码
    140                         self.password = new_pwd
    141                         detail_list[1] = self.password
    142                         info_str = ','.join(detail_list) + "
    "
    143                         f1.write(info_str)
    144                     else:
    145                         info_str = ','.join(detail_list) + '
    '
    146                         f1.write(info_str)
    147             os.remove('user_info.txt')
    148             os.rename('user_info(副本).txt', 'user_info.txt')
    149             print("密码修改成功,新密码为%s" % self.password)
    150             return self.password
    151 
    152         else:
    153             print("2次密码不一样,请重试")
    154             return
    155 
    156 # 管理员
    157 class Admin:
    158     def __init__(self):
    159         self.id = 'a0001'
    160         self.password = '112233'
    161 
    162     # 添加 用户
    163     def tianjia(self):
    164         id_list = []
    165         with open("user_info.txt", 'r', encoding='utf8') as f:
    166             for line in f:
    167                 info_list = line.strip().split(',')
    168                 id_list.append(info_list[0])
    169 
    170         new_id = input("输入新账号ID:")
    171         while new_id in id_list:
    172             new_id = input("ID已存在,请重试:")
    173 
    174         with open("user_info.txt", 'a', encoding='utf8') as f:
    175             f.write(new_id + ',' + '123456' + ',' + '1' + ',' + '10000' + ',' + '0' + '
    ')
    176         print(new_id, '添加成功')
    177 
    178     # 冻结
    179     def dongjie(self):
    180         id_list = []
    181         with open("user_info.txt", 'r', encoding='utf8') as f:
    182             for line in f:
    183                 info_list = line.strip().split(',')
    184                 id_list.append(info_list[0])
    185 
    186         dongjie_id = input("输入冻结账号ID:")
    187         while dongjie_id not in id_list:
    188             dongjie_id = input("ID不存在,请重试:")
    189 
    190         data_list = []
    191         with open("user_info.txt", 'r', encoding='utf8') as f:
    192             for line in f:
    193                 data_list.append(line)
    194 
    195         with open("user_info(副本).txt", 'w', encoding='utf8') as f1:
    196             for i in range(len(data_list)):
    197                 detail_list = data_list[i].strip().split(',')
    198                 if detail_list[0] == dongjie_id:  # 修改自己密码
    199                     detail_list[-1] = '1'
    200                     info_str = ','.join(detail_list) + "
    "
    201                     f1.write(info_str)
    202                 else:
    203                     info_str = ','.join(detail_list) + '
    '
    204                     f1.write(info_str)
    205         os.remove('user_info.txt')
    206         os.rename('user_info(副本).txt', 'user_info.txt')
    207         print(dongjie_id, '以冻结')
    208 
    209     # 解冻
    210     def jiedong(self):
    211         id_list = []
    212         with open("user_info.txt", 'r', encoding='utf8') as f:
    213             for line in f:
    214                 info_list = line.strip().split(',')
    215                 id_list.append(info_list[0])
    216 
    217         jiedong_id = input("输入解冻账号ID:")
    218         while jiedong_id not in id_list:
    219             jiedong_id = input("ID不存在,请重试:")
    220 
    221         data_list = []
    222         with open("user_info.txt", 'r', encoding='utf8') as f:
    223             for line in f:
    224                 data_list.append(line)
    225 
    226         with open("user_info(副本).txt", 'w', encoding='utf8') as f1:
    227             for i in range(len(data_list)):
    228                 detail_list = data_list[i].strip().split(',')
    229                 if detail_list[0] == jiedong_id:  # 修改自己密码
    230                     detail_list[-1] = '0'
    231                     info_str = ','.join(detail_list) + "
    "
    232                     f1.write(info_str)
    233                 else:
    234                     info_str = ','.join(detail_list) + '
    '
    235                     f1.write(info_str)
    236         os.remove('user_info.txt')
    237         os.rename('user_info(副本).txt', 'user_info.txt')
    238         print(jiedong_id, '已解冻')
    239 
    240     # 查询用户信息
    241     def chaxun(self):
    242         id_list = []
    243         with open("user_info.txt", 'r', encoding='utf8') as f:
    244             for line in f:
    245                 info_list = line.strip().split(',')
    246                 id_list.append(info_list[0])
    247         print('ID列表', id_list)
    248         chaxun_id = input("查询ID:")
    249 
    250         while chaxun_id not in id_list:
    251             print('ID列表', id_list)
    252             chaxun_id = input("ID不存在,请重试:")
    253 
    254         l = ['账号', '密码', '级别(0管理员,1普通)', '金额', '状态(0正常,1冻结)']
    255 
    256         with open("user_info.txt", 'r', encoding='utf8') as f:
    257             for line in f:
    258                 info_list = line.strip().split(',')
    259                 if chaxun_id == info_list[0]:
    260                     for i in range(len(info_list)):
    261                         print(l[i], ">>>", info_list[i])
    262                     return
    263             else:
    264                 print("ID不存在,请重试:")
    265 
    266 
    267 # ATM 系统
    268 class ATM:
    269 
    270     def __init__(self):
    271         with open("user_info.txt", 'w', encoding='utf8') as f:
    272             f.write("a0001,112233,0,10000,0" + '
    ')  # 管理员
    273             f.write("p0001,123456,0,10000,0" + '
    ')  # 普通账号1
    274             f.write("p0002,123456,0,10000,0" + '
    ')  # 普通账号2
    275 
    276     # 密码错三次冻结
    277     def dongjie(self, ID):
    278         data_list = []
    279         with open("user_info.txt", 'r', encoding='utf8') as f:
    280             for line in f:
    281                 data_list.append(line)
    282 
    283         with open("user_info(副本).txt", 'w', encoding='utf8') as f1:
    284             for i in range(len(data_list)):
    285                 detail_list = data_list[i].strip().split(',')
    286                 if detail_list[0] == ID:  # 修改自己密码
    287                     detail_list[-1] = '1'
    288                     info_str = ','.join(detail_list) + "
    "
    289                     f1.write(info_str)
    290                 else:
    291                     info_str = ','.join(detail_list) + '
    '
    292                     f1.write(info_str)
    293         os.remove('user_info.txt')
    294         os.rename('user_info(副本).txt', 'user_info.txt')
    295 
    296     # z主程序运行
    297     def run(self):
    298         ID = input("请输入卡号:")
    299         password = input("请输入密码:")
    300         client = None
    301         admin = None
    302 
    303         # 管理员登录
    304         if ID == 'a0001':
    305             while password != '112233':
    306                 password = input("密码错误,联系管理员(q退出系统):")
    307                 if password.lower() == 'q':
    308                     print('退出系统...')
    309                     return
    310             print("管理员登录成功")
    311             admin = Admin()
    312 
    313         if admin != None:
    314             task = {'1': admin.tianjia, '2': admin.dongjie, '3': admin.jiedong, '4': admin.chaxun}
    315             menu = {'1': "添加账号", '2': "冻结账号", '3': "解冻", '4': "查询信息", '5': '退出系统'}
    316 
    317             while 1:
    318                 for k, v in menu.items():
    319                     print(k, v)
    320 
    321                 choice = input("请输入你要执行的任务序号:")
    322                 if choice == '5':
    323                     print('退出系统...')
    324                     return
    325                 try:
    326                     task[choice]()
    327                 except Exception as e:
    328                     print("出错,请重试....")
    329                 print('
    ')
    330 
    331         with open("user_info.txt", 'r', encoding='utf8') as f:
    332             data_list = []
    333             for line in f:
    334                 data_list.append(line)
    335 
    336         for line in data_list:
    337             num = 1
    338 
    339             # 用户信息列表
    340             data = line.strip().split(",")
    341             if ID == data[0]:  # 判断 账号是否存在
    342                 if data[-1] == "1":
    343                     print('该账号已冻结,请联系管理员解冻')
    344                     return
    345 
    346                 # 密码错三次 账号冻结
    347                 while password != data[1] and num < 3:
    348                     num += 1
    349                     password = input("密码错误,请重试(第%s次尝试):" % num)
    350 
    351                 if ID == data[0] and password == data[1]:
    352 
    353                     print('"%s",登录成功
    ' % ID)
    354                     client = Client(data)  # 实例化一个客户类 把用户信息传进去
    355                     break  # 跳出 for 循环
    356 
    357                 else:
    358                     self.dongjie(ID)
    359                     print("该账号'%s'已冻结,联系管理员解冻" % ID)
    360                     break  # 跳出 for 循环
    361         else:
    362             print("账号'%s'不存在,请联系管理员" % ID)
    363 
    364         if client != None:
    365             task = {'1': client.chaxun, '2': client.qu, '3': client.cun, '4': client.zhuan, '5': client.xiugai}
    366             menu = {'1': "查询余额", '2': "取款", '3': "存款", '4': "转账", '5': "修改个人密码", '6': '退出系统'}
    367             while 1:
    368                 for k, v in menu.items():
    369                     print(k, v)
    370 
    371                 choice = input("请输入你要执行的任务序号(默认为1):")
    372                 if choice == '6':
    373                     print('退出系统...')
    374                     return
    375                 try:
    376                     task[choice]()
    377                 except Exception as e:
    378                     print("出错,请重试...")
    379                 print('
    ')
    380 
    381 
    382 if __name__ == '__main__':
    383     ATM().run()  # 程序的入口
  • 相关阅读:
    Leetcode: K-th Smallest in Lexicographical Order
    Leetcode: Minimum Number of Arrows to Burst Balloons
    Leetcode: Minimum Moves to Equal Array Elements
    Leetcode: Number of Boomerangs
    Leetcode: Arranging Coins
    Leetcode: Path Sum III
    Leetcode: All O`one Data Structure
    Leetcode: Find Right Interval
    Leetcode: Non-overlapping Intervals
    Socket网络编程--简单Web服务器(3)
  • 原文地址:https://www.cnblogs.com/Thui/p/11168412.html
Copyright © 2011-2022 走看看