python实现银行实战系统
本文实例为大家分享了python实现银行实战系统的具体代码,供大家参考,具体内容如下
先附上源代码:
│ admin.py 管理员界面
│ alluser.txt 保存用户信息
│ atm.py 银行的各部分操作方法(存钱取钱等等)
│ card.py 定义卡的类
│ main.py 主程序 while True
│ user.py 用户的类
main.py的源代码
""" 人 类名:User 属性:姓名 身份证号 电话号 卡 行为: 卡 类名:Card 属性:卡号 密码 余额 行为: 提款机 类名:ATM 属性:用户字典 行为:开户 查询 取款 存款 转账 改密 锁定 解密 补卡 销户 退出 管理员 类名:Admin 属性: 行为:管理员界面 管理员验证 系统功能界面 """ import os import pickle import admin from atm import ATM def main(): # 管理员对象 admin1 = admin.Admin() # 管理员开机 admin1.printAdminView() if admin1.adminOption(): return -1 # 提款机对象 filepath = os.path.join(os.getcwd(), "alluser.txt") f = open(filepath, "rb") allUsers = pickle.load(f) f.close() atm = ATM(allUsers) while True: admin1.printFunctionView() # 等待用户的操作 option = input("请输入您的操作:") if option == "1" or option == "开户": atm.creatUser() elif option == "2" or option == "查询": atm.searchUserInfo() elif option == "3" or option == "取款": atm.withdrawals() elif option == "4" or option == "存款": atm.saveMoney() elif option == "5" or option == "转账": atm.transferMoney() elif option == "6" or option == "改密": atm.changePasswd() elif option == "7" or option == "锁定": atm.lockUser() elif option == "8" or option == "解锁": atm.unlockUser() elif option == "9" or option == "补卡": atm.newCard() elif option == "0" or option == "销户": atm.killUser() elif option == "t" or option == "退出": if not admin1.adminOption(): # 将当前系统中的用户信息保存到文件中 f = open(filepath, "wb") pickle.dump(atm.allUsers, f, 2) f.close() return -1 else: print("指令错误,请重新输入!!") admin.timeFlush() if __name__ == '__main__': main()
admin.py的源代码
import time def timeFlush(): sum = 2 # 设置倒计时时间 timeflush = 0.25 # 设置屏幕刷新的间隔时间 for i in range(0, int(sum / timeflush)): list = ["\\", "|", "/", "—"] index = i % 4 print("\r操作成功!请稍等 {} ".format(list[index]), end="") time.sleep(timeflush) class Admin(object): admin = "1" passwd = "1" def printAdminView(self): print("*****************************************************************") print("* *") print("* *") print("* 欢迎登录csdn银行 *") print("* *") print("* *") print("*****************************************************************") def printFunctionView(self): print("\r*****************************************************************") print("* 开 户(1) 查 询(2) *") print("* 取 款(3) 存 款(4) *") print("* 转 账(5) 改 密(6) *") print("* 锁 定(7) 解 锁(8) *") print("* 补 卡(9) 销 户(0) *") print("* 退 出(t) *") print("*******************************************************************") def adminOption(self): inputAdmin = input("请输入管理员账号:") if self.admin != inputAdmin: print("账号输入有误!!") return -1 inputPasswd = input("请输入管理员密码:") if self.passwd != inputPasswd: print("密码输入有误!!") return -1 # 能执行到这里说明账户密码正确!! timeFlush() return 0
user.py的源代码
class User(object): def __init__(self, name, idCard, phone, card): self.name = name self.idCard = idCard self.phone = phone self.card = card
card.py的源代码
class Card(object): def __init__(self, cardId, cardPasswd, cardMoney): self.cardId = cardId self.cardPasswd = cardPasswd self.cardMoney = cardMoney self.cardLock = False
atm.py的源代码
import random from card import Card from user import User class ATM(object): def __init__(self, allUsers): self.allUsers = allUsers # 开户 def creatUser(self): # 向用户字典中添加一对键值对(卡号 -- 用户) name = input("请输入您的姓名:") idCard = input("请输入您的身份证号码:") phone = input("请输入您的电话号码:") prestoreMoney = int(input("请输入预存储金额:")) if prestoreMoney < 0: print("预存储金额有误!!开户失败") return -1 onePasswd = input("请设置密码:") # 验证密码 if not self.checkPasswd(onePasswd): print("密码输入错误!!开户失败") return -1 # 生成随机的卡号 cardId = self.randomCardId() # 生成卡的信息 card = Card(cardId, onePasswd, prestoreMoney) # 生成用户信息 user = User(name, idCard, phone, card) # 存到字典里面 self.allUsers[cardId] = user print("您的卡号是%s, 请牢记卡号!!" % cardId) # 查询 def searchUserInfo(self): cardNum = input("请输入您的卡号:") # 验证是否存在该卡号 user = self.allUsers.get(cardNum) if not user: print("该卡号不存在!!查询失败") return -1 if user.card.cardLock: print("该卡已被锁定!!请解锁后在进行其他操作!") return -1 # 验证密码 if not self.checkPasswd(user.card.cardPasswd): print("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!") user.card.cardLock = True return -1 print("账号:%s 余额:%d" % (user.card.cardId, user.card.cardMoney)) # 取款 def withdrawals(self): cardNum = input("请输入您的卡号:") # 验证是否存在该卡号 user = self.allUsers.get(cardNum) if not user: print("该卡号不存在!!查询失败") return -1 if user.card.cardLock: print("该卡已被锁定!!请解锁后在进行其他操作!") return -1 # 验证密码 if not self.checkPasswd(user.card.cardPasswd): print("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!") user.card.cardLock = True return -1 # 进行到这一步说明卡号信息都正确,进行取款操作 theMoney = int(input("请输入您需要取款的金额:")) if theMoney > user.card.cardMoney: print("余额不足!!") return -1 elif theMoney < 0: print("您输入金额有误!!") else: user.card.cardMoney -= theMoney print("取款成功!! 余额为:%d" % user.card.cardMoney) # 存款 def saveMoney(self): cardNum = input("请输入您的卡号:") # 验证是否存在该卡号 user = self.allUsers.get(cardNum) if not user: print("该卡号不存在!!查询失败") return -1 if user.card.cardLock: print("该卡已被锁定!!请解锁后在进行其他操作!") return -1 # 验证密码 if not self.checkPasswd(user.card.cardPasswd): print("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!") user.card.cardLock = True return -1 # 进行到这一步说明卡号信息都正确,进行存款操作 theMoney = int(input("请输入您需要存款的金额:")) if theMoney < 0: print("您输入金额有误!!") else: user.card.cardMoney += theMoney print("存款成功!! 余额为:%d" % user.card.cardMoney) # 转账 def transferMoney(self): cardNum = input("请输入您的卡号:") # 验证是否存在该卡号 user = self.allUsers.get(cardNum) if not user: print("该卡号不存在!!查询失败") return -1 if user.card.cardLock: print("该卡已被锁定!!请解锁后在进行其他操作!") return -1 # 验证密码 if not self.checkPasswd(user.card.cardPasswd): print("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!") user.card.cardLock = True return -1 # 到这里说明卡号信息正确,进行转账操作 theOtherCardId = input("请输入您需要转账的卡号:") # 验证是否存在该卡号 otheruser = self.allUsers.get(theOtherCardId) if not otheruser: print("该卡号不存在!!转账失败") return -1 if otheruser.card.cardLock: print("该卡已被锁定!!") return -1 theOtherCardName = input("请输入您需要转账人的姓名:") # 验证转账人的姓名是否正确 if otheruser.name != theOtherCardName: print("转账人姓名输入错误") return -1 print("您的账户为%s 您的余额为%d" % (user.card.cardId, user.card.cardMoney)) # 开始转账 theMoney = int(input("请输入您需要转账的金额:")) if theMoney < 0: print("您输入金额有误!!") else: user.card.cardMoney -= theMoney otheruser.card.cardMoney += theMoney print("转账成功!!您的余额为%d" % user.card.cardMoney) return -1 # 改密 def changePasswd(self): cardNum = input("请输入您的卡号:") # 验证是否存在该卡号 user = self.allUsers.get(cardNum) if not user: print("该卡号不存在!!查询失败") return -1 if user.card.cardLock: print("该卡已被锁定!!请解锁后在进行其他操作!") return -1 # 验证密码 if not self.checkPasswd(user.card.cardPasswd): print("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!") user.card.cardLock = True return -1 # 下面进行改密操作 newPasswd = input("请输入新密码:") if newPasswd == user.card.cardPasswd: print("新旧密码不能一致!!操作失败") return -1 # 验证密码 if not self.checkPasswd(newPasswd): print("密码输入错误!!") return -1 user.card.cardPasswd = newPasswd print("密码修改成功!!请牢记您的密码") # 锁定 def lockUser(self): cardNum = input("请输入您的卡号:") # 验证是否存在该卡号 user = self.allUsers.get(cardNum) if not user: print("该卡号不存在!!输入错误") return -1 if user.card.cardLock: print("该卡已被锁定!!请解锁后再使用其他功能") return -1 # 验证密码 if not self.checkPasswd(user.card.cardPasswd): print("密码输入错误!!锁定失败") return -1 tempIdCard = input("请输入您的身份证号码") if tempIdCard != user.idCard: print("身份证输入错误!!锁定失败") return -1 # 进行到这一步说明信息输入成功,锁定开始 user.card.cardLock = True print("锁定成功") # 解锁 def unlockUser(self): cardNum = input("请输入您的卡号:") # 验证是否存在该卡号 user = self.allUsers.get(cardNum) if not user: print("该卡号不存在!!输入错误") return -1 if not user.card.cardLock: print("该卡没有被锁定!!无需解锁") return -1 # 验证密码 if not self.checkPasswd(user.card.cardPasswd): print("密码输入错误!!锁定失败") return -1 tempIdCard = input("请输入您的身份证号码") if tempIdCard != user.idCard: print("身份证输入错误!!锁定失败") return -1 # 进行到这一步说明信息输入成功,解锁开始 user.card.cardLock = False print("解锁成功") # 补卡 def newCard(self): cardNum = input("请输入您的卡号:") # 验证是否存在该卡号 user = self.allUsers.get(cardNum) if not user: print("该卡号不存在!!查询失败") return -1 if user.card.cardLock: print("该卡已被锁定!!请解锁后在进行其他操作!") return -1 # 验证密码 if not self.checkPasswd(user.card.cardPasswd): print("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!") user.card.cardLock = True return -1 CardName = input("请输入您的姓名:") # 验证姓名是否正确 if user.name != CardName: print("姓名输入错误!!") return -1 useridCard = input("请输入您的身份证号码:") # 验证身份证是否正确 if user.idCard != useridCard: print("身份证号码输入错误!!") return -1 # 进行到这一步说明信息都正确,下面进行补卡操作,只换卡号,其他信息都不换 newIdCard= self.randomCardId() self.allUsers[newIdCard] = self.allUsers.pop(user.card.cardId) user.card.cardId = newIdCard print("您的新卡号为:%s 请牢记!!" % user.card.cardId) # 销户 def killUser(self): cardNum = input("请输入您的卡号:") # 验证是否存在该卡号 user = self.allUsers.get(cardNum) if not user: print("该卡号不存在!!查询失败") return -1 if user.card.cardLock: print("该卡已被锁定!!请解锁后在进行其他操作!") return -1 # 验证密码 if not self.checkPasswd(user.card.cardPasswd): print("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!") user.card.cardLock = True return -1 CardName = input("请输入您的姓名:") # 验证姓名是否正确 if user.name != CardName: print("姓名输入错误!!") return -1 useridCard = input("请输入您的身份证号码:") # 验证身份证是否正确 if user.idCard != useridCard: print("身份证号码输入错误!!") return -1 answer = input("请问您确定要销户吗?确定(1) 取消(2)") if answer == "1" or answer == "确定": del self.allUsers[cardNum] print("已销户") return -1 elif answer == "2" or answer == "取消": print("取消成功!!") return -1 else: print("输入错误!!") return -1 # 验证密码 def checkPasswd(self, realPasswd): for i in range(3): tempPasswd = input("请再次输入密码:") if tempPasswd == realPasswd: return True return False def randomCardId(self): while True: str = "" for i in range(6): # 随机生成一个数字 ch = chr(random.randrange(ord("0"), ord("9") + 1)) str += ch # 判断是否重复 if not self.allUsers.get(str): return str
alluser.txt源代码
�}q X 123456qcuser User q)�q}q(X nameqX 1qX idCardqhX phoneqhX cardq ccard Card q )�q }q (X cardIdq hX cardPasswdqhX cardMoneyqKX cardLockq�ububs.
因为运用pickle库,要持久化存储用户信息(字典),故打开读取写入会乱码,第一排中的123456是卡号,其他信息全部是1,不要试图pycharm中修改这个allUsers。txt文件,否则会产生无法启动程序的bug,这个笔者也不知道该如何改进乱码现象,希望读者能优化
如果遇到因为alluser.txt而无法运行的情况:请往下看:
因为pickle库的原因,开始我们是要读取这个文件的,读的到程序顺利,读不到程序凉凉,故我们必须要在alluser.txt里面有pickle库可以识别的源代码。如果您是在pycharm里面复制粘贴的因为alluser.txt代码,故pycharm会自动转化为utf-8或者其他
我们要先把alluser.txt删除,让pickle库先不读取,创建一个空字典,我们先开户,然后退出程序是会自动创建一个新的alluser.txt文件,会把我们刚刚创建好的用户信息全部保存在txt文件中,这样我们再恢复,达到持久化保存的目的
filepath = os.path.join(os.getcwd(), "alluser.txt") # 把之前的给注释掉,不让程序读取 # f = open(filepath, "rb") # allUsers = pickle.load(f) # f.close() # 创建一个新的空字典 allUsers = {} atm = ATM(allUsers)
然后我们进行开户操作,最后退出,会自动创建一个全新的alluser.txt文件
filepath = os.path.join(os.getcwd(), "alluser.txt") f = open(filepath, "rb") allUsers = pickle.load(f) f.close() # 然后我们恢复它 # allUsers = {} atm = ATM(allUsers)
ok,完成了
运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。