##定义一个类,用来存放用户的属性,并且加以控制
class usersinfo(object): # 禁止外界添加属性 __slots__ = '_name', '_age', '_money', '_account_number', '_password', '_isworker', '_isonline', '_lock', '_idcard' def __init__(self, name, age, account_number, password, id_card): """设置私有属性,不允许别人修改,只能固定人员通过get,set方法设置""" self._name = name self._age = age self._money = 0 # '余额默认设置为0' self._account_number = account_number self._password = password self._isworker = False # 将所有注册的用户的标记为非工作人员 self._isonline = False # 判断是否登录 self._lock = False self._idcard = id_card def getName(self): return self._name def setName(self, name): self._name = name def getMoney(self): ''' 获取余额 :return: ''' return self._money def setMoney(self, money): ''' 存钱 :param money: :return: ''' self._money = money def setPassword(self, password): '''用于设置密码,或者重置密码''' self._password = password def getPassword(self): ''' :return: ''' return self._password def getAccount_number(self): ''' 获取银行账号 :return: ''' return self._account_number def setAccount_number(self, account_number): self._account_number = account_number def getIsonline(self, isonline): '''获取是否在线''' return self._isonline def setIsonline(self, isonline): '''设置状态是否在线''' self._isonline = isonline def setLock(self, lock): self._lock = lock def getLock(self): return self._lock def getIdcard(self): return self._idcard def setIdcard(self, idcard): self._idcard = idcard#定义一个公共类,里面存放写公共方法
class commonFunction(object): ''' 定义用户和银行人员一些公共的功能 注册账户,存钱,取钱,转账,修改密码,查看余额 ''' # ui=usersinfo() def saveMoney(self, name): ''' 存钱不需要密码及其他信息 :return: ''' while True: money = int(input("请输入存钱金额,金额必须为50的倍数")) if money % 50 == 0 and money / 50 != 0: user[name].setMoney(str(int(user[name].getMoney()) + money)) print("恭喜你,存钱成功,您当前余额为{}".format(user[name].getMoney())) break else: print("对不起,您的输入有误,请再次输入") continue def register(self): name = input("您已经进入了注册页面,首先请输入用户名:") while True: password1 = (input("请输入你的密码,密码必须为6位数字")) password2 = (input("请再次输入你的密码")) if password1 == password2 and len(password1) == 6: break else: print("对不起你两次密码不一致") continue age = input("请输入你的年龄:") while True: idcard = input("情输入你的身份证号") if idcard.isdigit(): if len(idcard) == 16: break else: print("你输入的身份证号格式错误") else: print("你的身份证格式错误") continue print("您已经输入完毕请,等待目前正在生成你的账号") account = '61' for i in range(14): # global num num = random.choice(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) account += num print("恭喜你,你的账号已经生成完毕,请您记住: {}".format(account)) names = usersinfo(name, age, account, password1, idcard) user[name] = names return True def checkMoney(self, name): print("欢迎你,进入查询余额页面,请按照指示操作") while True: idcard = input("请您输入身份证号") print(user[name].getIdcard) if user[name].getIdcard() == idcard: time.sleep(1) print("验证成功") print("您当前余额为{}".format(user[name].getMoney())) break else: print("您输入的身份证号有误,请您再次输入") continue def drawMoney(self, name): print("欢迎您,进入取款页面,请您按照指示操作") while True: idcard = input("请您输入身份证号") password = input("情输入你的密码,你只有三次机会,请小心输入") if user[name].getIdcard() == idcard: time.sleep(1) if password == user[name].getPassword(): print("验证成功") print("您当前余额为{}".format(user[name].getMoney())) while True: m = input("请输入你的取款金额,金额为50或者50的倍数,并且应该大于你的账户余额") if int(m) % 50 == 0 and int(m) // 50 != 0 and int(m) >= int(user[name].getMoney()): user[name].setMoney(str(int(user[name].getMoney()) - int(m))) print("正在取款,请稍等") time.sleep(1) print("存款成功,当前余额为{}".format(user[name].getMoney())) break else: print("你输入的金额有误,请重新输入") continue else: print("您输入的密码错误,请您重新输入信息") continue else: print("您输入的身份证号有误,请您再次输入") continue break def transferMoney(self, name): print("欢迎您进入转账页面,请按照只是操作") while True: ''' transferName 为转账对方的姓名 ''' transferName = input("请输入对方的姓名") if transferName in user.keys(): transferAccount = input("请输入对方的账号") if user[name].getAccount == transferAccount: while True: money = input('情输入你的转账金额,请务必大于等于你的余额') if int(money) >= user[name].getMoney(): print("正在转账,请稍等") time.sleep(1) user[name].setMoney(str(int(user[name].getMoney()) - int(money))) user[transferName].setMoney(str(int(user[transferName].getMoney()) - int(money))) print("您已经转账成功,目前您的余额为{}".format(user[name].getMoney())) break else: print("你输入的金额大于你的余额,请重新输入") continue else: print("你输入的账号有误,请重新输入信息") continue else: print("你输入的账号不存在,请重新输入") continue break def ifexit(self): exit('再见')#定义一个银行人员的类,继承公共方法类,再加自己独有的几个功能
class bank_Worker_Function(commonFunction): '''继承公共的功能,再添加自己独有的功能''' """销户 解锁 用户信息 修改用户信息 """ def __init__(self): super().__init__() def destroyAccount(self, name): print("你已经进入了销户页面,请小心操作") while True: bankcard = input("请输入销户的银行卡号") if user[name].getAccount() == bankcard: choices4 = input("即将销户,确定请输入,yes否则就退出该页面") if choices4 == 'yes': del user[name] else: break else: print("对不起,你所输入的账号有误,请重新输入") continue def unLock(self): print("欢迎你进入,解锁页面") while True: name = input("请输入你要解锁的用户名") if name in user.keys(): while True: account = input("请输入你的账号名") if account == user[name].getAccount(): print("输入完毕,正在确认信息") time.sleep(1) print("确认信息完毕,正在解锁,请稍等") time.sleep(2) user[name].setLock(False) break else: print("对不起,你输入的用户不存在,请重新输入") continue break def userinfomation(self): while True: name = input("请输入需要查询的用户名") if name in user.keys(): print("姓名:{},年龄:{},账号:{},身份证号{},是否锁定{}".format(user[name].getName(), user[name].getAge(), user[name].getAccount(), user[name].getIdcard() , user[name].getLock())) choices5 = input("是否退出,退出请输入yes") if choices5 == 'yes': break else: print("对不起,你所输入的用户不存在,请重新输入") continue def changeUserInformation(self): print("欢迎进入更改信息页面") while True: name = input("请输入需要更改的信息的账户名") if name in user.keys(): password = input("请输入密码") if password == user[name].getPassword(): while True: choice6 = input("情选择你要修改的项 1.年龄 2.密码 3. 身份证号 4. 性别(还没写) 其他:退出") if choice6 == '1': age = input("请输入你要修改的内容") user[name].setAge(age) print("正在修改,请稍等") time.sleep(1) print("修改完毕,修改完后的年龄为:{}".format(user[name].getAge())) elif choice6 == '2': password = input("情输入你要修改的密码") user[name].setPassword(password) print("正在修改,请稍等") time.sleep(1) print("修改完毕,修改完后的密码为{}".format(user[name].getPassword())) elif choice6 == '3': idcard = input("情输入你要修改的身份证号") user[name].setIdcard(idcard) print("正在修改,请稍等") time.sleep(1) print("修改完毕,修改完后的密码为{}".format(user[name].setIdcard())) else: print("") break“”" bug: 1.由于用户是字典,且用户名为key,所以用户名不能重复,且用户和银行人员的账户不通 “”"
#主程序入口 if __name__ == '__main__': print("欢迎来到银行管理系统") func = commonFunction() bwf = bank_Worker_Function() count = 0 # 计数用,如果密码输错三次,就给账户上锁 while True: name = input("""请输入用户名""") if name in user.keys(): for i in user.values(): if not user[name].getLock(): # 判断账户是否上锁 password = input("请输入你的密码,输错三次就会锁定,目前还剩下{}次".format(3 - count)) if i.getPassword() == password: print("*****登录成功,尊敬的用户******") while True: choices3 = input("""请选择功能,1.查看余额 ,2.存款, 3.取款, 4.转账, 5.退出登录""") if choices3 == '1': func.checkMoney(name) if choices3 == '2': func.saveMoney(name) if choices3 == '3': func.drawMoney(name) if choices3 == '4': func.transferMoney(name) if choices3 == '5': func.ifexit() else: print("您输入的密码有误,请你再次输入") count += 1 if count >= 3: # 当计数器大于等于三次时,给账户上锁,并且提醒用户 user[name].setLock(True) print("对不起,由于密码输错三次,您的账户已经被锁,请您去办理解锁业务") continue else: print("对不起,由于密码输错三次,您的账户已经被锁,请您去办理解锁业务") break elif name in bankworker: print("系统检测到,你是银行人员,请按照指示输入信息登录") while True: password = input("请输入你的密码") if bankworker[name] == password: print("欢迎你,请选择你的功能") while True: choices3 = input("""建户【0】 销户【1】 查看余额【2】 存款【3】 取款【4】 转账【5】 解锁【6】 用户信息【7】 修改用户信息【8】 退出登录【9】""") if choices3 == '0': bwf.register() # 通过子类调用父类方法 elif choices3 == '1': name = input("情输入需要注销的账户名,然后继续操作") bwf.destroyAccount(name) elif choices3 == '2': name = input("情输入要查看的账户名") bwf.checkMoney(name) elif choices3 == '3': name = input("情输入要存款的账户名") bwf.saveMoney(name) elif choices3 == '4': name = input("请输入取款的用户名") bwf.drawMoney(name) elif choices3 == '5': name = input("请输入用于转账的用户名") bwf.drawMoney(name) elif choices3 == '6': bwf.unLock() elif choices3 == '7': bwf.userinfomation() elif choices3 == '8': bwf.changeUserInformation() elif choices3 == '9': bwf.ifexit() else: print("你的密码输入错误,请重新输入") continue else: choices2 = input("""检测到你并不是我银行的用户,如果你需要办理业务请你注册一个账号,确实请输入yes,否则那就再见吧""") if choices2 == 'yes': if func.register() == True: print("恭喜你,已经注册成功,请重新登录") continue else: break print("欢迎您的下次使用,再见") break print("感谢您的使用,下次再见")