ATM小程序
# 在单入口模式下进行
# 卡类模块 class Card(): def __init__(self,cardid,password,money): self.cardid = cardid self.password = password self.money = money self.islock = False
# 人类模块 class Person(): def __init__(self,name,userid,phone,card): self.name = name self.userid = userid self.phone = phone self.card = card
# 初始化视图模块 import time class View(): def login(): name = input("请输入管理员的账户:") pwd = input("请输入管理员密码:") if name == "1" and pwd == "1": View.welcome_view() time.sleep(0.2) View.operation_view() return True else: print("管理员账号或密码不正确") def welcome_view(): print("*******************************************") print("* *") print("* *") print("* Welcome To OldBoy Bank *") print("* *") print("* *") print("*******************************************") def operation_view(): print("*******************************************") print("* 开户(1) 查询(2) *") print("* 存钱(3) 取钱(4) *") print("* 转账(5) 改密(6) *") print("* 锁卡(7) 解卡(8) *") print("* 补卡(9) 退出(0) *") print("*******************************************")
# 操作类模块 import os,pickle,re,time,random from .card import Card from .person import Person class Operation(): # 初始化读取数据 def __init__(self): self.read_user() self.resd_userid() def read_user(self): # 卡号:用户信息 if os.path.exists("user.txt"): with open("user.txt",mode="rb") as f1: self.user_dict = pickle.load(f1) else:self.user_dict = {} def resd_userid(self): # 身份证号:卡号 if os.path.exists("userid.txt"): with open("userid.txt",mode="rb") as f2: self.userid_dict = pickle.load(f2) else:self.userid_dict = {} # 开户 def register(self): print(self.user_dict) print(self.userid_dict) name = self.name_func() # 获取身份证号 userid = self.uesrid_func() # 获取手机号 phone = self.phone_func() # 获取密码 password = self.pwd_func() # 获取卡号 cardid = self.quth_code() c = Card(cardid, password, 10) p = Person(name, userid, phone, c) self.save() print("恭喜{}开卡成功,卡号为:{},余额为:{}".format(name,cardid,c.money)) self.user_dict[cardid] = p self.userid_dict[userid] = cardid def name_func(self): while True: data = input("请输入用户名:") res = re.findall(r"\W",data) if not res : if data.strip() and (not (" " in data)): return data else:print("存在非法字符") else: print("存在非法字符") def uesrid_func(self): while True: data = input("请输入身份证号:") if re.search("[1-9]\d{5}(?:19\d{2}|20[0-2][0-9])(?:0[1-9]|1[0-2])(?:0[1-9]|[1-2]\d|3[01])\d{3}[\dx]",data): if data not in self.userid_dict: return data else:print("该身份证号在我行已办理过银行卡") else: print("身份证号不符") def phone_func(self): while True: data = input("请输入手机号:") if re.search("0?(13|14|15|17|18|19)[0-9]{9}",data): return data else: print("手机号不符") def pwd_func(self): while True: data1 = input("请输入新的密码(六位):") if len(data1) == 6 : res = re.search(r"^[\da-zA-Z\_]{6}$",data1) if res: data2 = input("请再次确认密码:") if data1 == data2: return data2 else: print("俩次密码不一致,请重新输入!") else:print("存在非法字符") else:print("输入错误!") def quth_code(self): while True: code = str(random.randrange(100000, 1000000)) if code not in self.user_dict: return code # 公共方法,查看卡号有没有被锁,核对密码 def name_pwd(self,data): if data in self.user_dict: if not(self.user_dict[data].card.islock): n = 0 while n <= 2: pwd = input("请输入密码:") if self.user_dict[data].card.password == pwd : return True elif n == 2 : self.user_dict[data].card.islock = True print("错误次数太多,此卡号已被锁定") sign = False return sign else: n += 1 print("密码错误") else:print("卡号已被锁定,请联系管理员") else: print("卡号不存在") return False # 查询 def query(self): while True : data = input("请输入卡号(返回上一层请按1):") if data == "1" : break if self.name_pwd(data): if not(self.user_dict[data].card.islock): self.save() print("您的余额为:{}".format(self.user_dict[data].card.money)) break else:print("卡号已被锁定") # 充值 def save_money(self): sign = True while sign : data = input("请输入卡号(返回上一层请按1):") if data == "1" : break while True: rmb = input("请输入充值人民币数量:") if rmb.isdecimal(): self.user_dict[data].card.money += int(rmb) self.save() print("您的卡号:{},充值成功:{}元,余额为:{}".format(self.user_dict[data].card.cardid,rmb, self.user_dict[data].card.money)) sign = False break else: print("输入有误,请重新输入") # 取钱 def get_money(self): sign = True while sign : data = input("请输入卡号(返回上一层请按1):") if data == "1" : break if self.name_pwd(data): if not(self.user_dict[data].card.islock): while True: rmb = input("请输入取出人民币数量:") if rmb.isdecimal(): if self.user_dict[data].card.money >= int(rmb): self.user_dict[data].card.money -= int(rmb) self.save() print("您的卡号:{},取款成功:{}元,余额为:{}".format(self.user_dict[data].card.cardid,rmb, self.user_dict[data].card.money)) sign = False break else: print("余额不足") else: print("输入有误,请重新输入") else:print("卡号已被锁定") # 转账 def trans_money(self): sign = True while sign : data = input("请输入卡号(返回上一层请按1):") if data == "1" : break if self.name_pwd(data): if not (self.user_dict[data].card.islock): while sign: cd = input("请输入转账人卡号:") if self.user_dict[data].card.cardid == cd: print("不能给自己转账的哦") continue elif cd in self.user_dict: rmb = input("请输入转账人民币数量:") if self.user_dict[data].card.money >= int(rmb): self.user_dict[data].card.money -= int(rmb) self.user_dict[cd].card.money += int(rmb) self.save() print("您的卡号:{},给{}的卡号:{}转账{}元成功,您的余额为:{}".format(self.user_dict[data].card.cardid,self.user_dict[cd].name,self.user_dict[cd].card.cardid,rmb, self.user_dict[data].card.money)) break else:print("余额不足") else: data = input("转账人卡号不存在,返回请按1,继续请按任意键!") if data == "1" : sign = False else:print("卡号已被锁定") # 修改密码 def change_pwd(self): sign = True while sign : data = input("请输入卡号(返回上一层请按1):") if data == "1" : sign = False break if self.name_pwd(data): if not(self.user_dict[data].card.islock): while True: choice = input("通过何种方式来修改密码\n1:身份证号码 2:密码") if choice == "1": sfz = input("请输入身份证号码来修改密码:") if self.user_dict[data].userid == sfz: res = self.pwd_func() self.user_dict[data].card.password = res self.save() print("您的卡号{}修改密码成功,请退出保存后重新登录!".format(self.user_dict[data].card.cardid)) sign = False break else: print("身份证号码错误") elif choice == "2": pwd = input("请输入卡密码来修改密码:") if self.user_dict[data].card.password == pwd: res = self.pwd_func() self.user_dict[data].card.password = res self.save() print("您的卡号{}修改密码成功,请退出保存后重新登录!".format(self.user_dict[data].card.cardid)) sign = False break else:print("输入有误,重新选择!") else:print("卡号已被锁定") # 锁卡 def lock(self): sign = True while sign: data = input("请输入卡号(返回上一层请按1):") if data == "1": sign = False break elif data in self.user_dict: if self.user_dict[data].card.islock:print("此卡已冻结!") elif not(self.user_dict[data].card.islock): while True: num = input("通过何种方式来冻结卡片\n1:身份证号码 2:密码") if num == "1": sfz = input("请输入身份证号码来冻结卡片:") if self.user_dict[data].userid == sfz: self.user_dict[data].card.islock = True self.save() print("您的卡号{}冻结成功,请退出保存后继续操作!".format(self.user_dict[data].card.cardid)) sign = False break else: print("身份证号码错误") elif num == "2": pwd = input("请输入卡密码来冻结卡片:") if self.user_dict[data].card.password == pwd: self.user_dict[data].card.islock = True self.save() print("您的卡号{}冻结成功,请退出保存后继续操作!".format(self.user_dict[data].card.cardid)) sign = False break else: print("输入有误,重新选择!") else: print("输入有误,重新选择!") # 解卡 def unlock(self): sign = True while sign : data = input("请输入卡号(返回上一层请按1):") if data == "1" :break elif data in self.user_dict: if not(self.user_dict[data].card.islock):print("此卡并没有冻结!") elif self.user_dict[data].card.islock: while True: num = input("通过何种方式来解锁卡片\n1:身份证号码 2:密码") if num == "1": sfz = input("请输入身份证号码来解锁卡片:") if self.user_dict[data].userid == sfz: self.user_dict[data].card.islock = False self.save() print("您的卡号{}解冻成功,请退出保存后重新登录!".format(self.user_dict[data].card.cardid)) sign = False break else: print("身份证号码错误") elif num == "2": pwd = input("请输入卡密码来解锁卡片:") if self.user_dict[data].card.password == pwd: self.user_dict[data].card.islock = False self.save() print("您的卡号{}解冻成功,请退出保存后重新登录!".format(self.user_dict[data].card.cardid)) sign = False break else:print("输入有误,重新选择!") else:print("输入有误,重新选择!") # 补卡 def new_card (self): while True: sfz = input("请输入身份证号码来补卡(返回上一层请按1):") if sfz == "1": break if sfz in self.userid_dict: old_cardid = self.userid_dict[sfz] new_cardid = self.quth_code() self.user_dict[new_cardid] = self.user_dict[old_cardid] self.userid_dict[sfz] = new_cardid self.user_dict.pop(old_cardid) self.save() print("补卡成功,新的卡号为{}".format(new_cardid)) break else: print("身份证号码错误,请重新输入") # 保存退出 def save(self): self.jindutiao() print() with open("user.txt",mode="wb") as f1: pickle.dump(self.user_dict,f1) with open("userid.txt",mode="wb") as f2: pickle.dump(self.userid_dict,f2) # 进度条 def jindutiao(self): n = 0 print("请稍后......") while n <= 50: time.sleep(0.01) print("\r[%-50s]%2d%%" % ("*" * n, 2 * n), end="") n += 1
# 主程序模块 from package.view import View from package.card import Card from package.person import Person from package.operation import Operation class Main: @staticmethod def run(): if View.login(): o = Operation() while True: num = input("请选择需要办理的业务:") if num == "1" : o.register() elif num == "2" : o.query() elif num == "3" : o.save_money() elif num == "4" : o.get_money() elif num == "5": o.trans_money() elif num == "6": o.change_pwd() elif num == "7": o.lock() elif num == "8": o.unlock() elif num == "9": o.new_card() elif num == "0": o.save() break if __name__ == "__main__" : Main.run()