python学习笔记(十五) 银行自动提款机系统

系统具有以下功能:

1、开户(open)
2、查询(search)
3、取款(withdraw)
4、存款(deposit)    
5、转账(transfer) 
6、改密(changepwd)  
7、冻结账户(lock) 
8、解冻账户(unlock) 
9、补卡(replace)  
10、销户(close) 
0、退出(exit)     

我们对整个系统进行分析,可以得到如下几个类

1、用户-User类;

属性:name、IDcard、phone、card

2、卡-Card类:

属性:cardID、cardPassword、cardMoney

3、atm机-ATM类:

属性:用户-卡号

方法:系统所需每个功能的实现

4、系统界面类-view:

属性:系统登录账号、系统登录密码

方法:登录界面、功能界面、登录判断

5、Main函数

对整个系统进行整体调控

代码如下:

'''
主函数
'''
from view import View
from atm import ATM
import pickle
import os
import timedef main():# 界面对象view = View()# 管理员开机view.printAdminview()if view.adminOption():return -1#取款机对象filePath = os.path.join(os.getcwd(), "allUsers.txt")f =open(filePath,"rb")allUsers = pickle.load(f)print("***************")print(allUsers)atm = ATM(allUsers)while True:view.printsysFunctionView()#等待用户操作option =input("请选择所需业务:")#开户if option =="1":#print("开户")atm.createUser()#查询elif option=="2":atm.searchUserInfo()#取款elif option=="3":atm.withDrawals()# 存款elif option=="4":atm.deposit()# 转账elif option=="5":atm.transfromMoney()# 修改密码elif option=="6":atm.changePwd()# 锁定elif option=="7":atm.lock()# 解锁elif option=="8":atm.unlock()# 补卡elif option=="9":atm.replace()# 销户elif option=="10":atm.logoutUserInfo()# 退出elif option == "0":q =input("确定退出系统吗? y/n")if q == "y":#将用户信息储存数据保存atm.saveUserInfo()return Falsetime.sleep(1)if __name__=="__main__":main()
'''
界面
'''
import timeclass View(object):admin ="lc"password = "123"#登录界面def printAdminview(self):print("*****************************************")print("*                                       *")print("*                                       *")print("*      欢迎登录银行自助银行系统         *")print("*                                       *")print("*                                       *")print("*****************************************")#功能界面def printsysFunctionView(self):print("********************************************")print("*   1、开户(open)      2、查询(search)     *")print("*   3、取款(withdraw)  4、存款(deposit)    *")print("*   5、转账(transfer)  6、改密(changepwd)  *")print("*   7、冻结账户(lock)  8、解冻账户(unlock) *")print("*   9、补卡(replace)   10、销户(close)     *")print("*               0、退出(exit)            *")print("********************************************")#判断函数def adminOption(self):# 判断账号inputAdmin = input("请输入管理员账号:")if self.admin != inputAdmin:print("账号输入有误!!")return -1# 判断密码inputPwd = input("请输入管理员密码:")if self.password != inputPwd:print("密码错误!")return -1print("登录成功,请稍后....")time.sleep(2)return 0

 

'''
card类
'''class Card(object):def __init__(self,cardId,cardPwd,cardMoney):self.cardId = cardIdself.cardPwd = cardPwdself.cardMoney = cardMoneyself.cardLock = False
'''
user类
'''class User(object):def __init__(self,name,idCard,phone,card):self.name = nameself.idCard = idCardself.phone = phoneself.card = card
'''
ATM类
'''from card import Card
from user import User
import os
import random
import pickleclass ATM(object):def __init__(self,allUsers):self.allUsers=allUsers #卡号-用户#开户def createUser(self):#目标:向用户字典中添加一对键值对(卡号-用户)name = input("请输入您的姓名:")idCard = input("输入您的身份证号码:")phone = input("请输入您的电话号码:")prestoreMoney =int(input("请输入预存款金额:"))if prestoreMoney < 0:print("预存款金额有误!开户失败...")return -1onePwd = input("请设置密码:")if not self.checkPwd(onePwd):print("密码输入错误!开户失败....")return 1#用户信息cardStr=self.randomCard()card =Card(cardStr,onePwd,prestoreMoney)user = User(name, idCard, phone,card)#存到字典self.allUsers[cardStr] = userprint("开户成功!请记住您的卡号(%s)...."%(cardStr))#信息判断def userInfoJudg(self):cardNum = input("请输入您的卡号:")# 验证该卡号是否存在user = self.allUsers.get(cardNum)if not user:print("该卡号不存在")return Falseif user.card.cardLock:print("该卡已经被锁定!如需使用其他功能,请解锁")return False# 验证密码if not self.checkPwd(user.card.cardPwd):user.card.cardLock = Trueprint("密码三次输入错误!该卡已被锁定!请解锁后再试.....")return Falsereturn user#查询信息def searchUserInfo(self):judg=self.userInfoJudg()if judg:print("账号:%s  余额:%d"%(judg.card.cardId,judg.card.cardMoney))#取款def withDrawals(self):judg = self.userInfoJudg()money = int(input("请输入取款金额:"))if money > judg.card.cardMoney:print("余额不足!!取款失败!")return -1if money < 0:print("输入金额错误!!请重试")return -1#取款judg.card.cardMoney -=moneyprint("取款成功,剩余余额:%d"%(judg.card.cardMoney))#存款def deposit(self):judg = self.userInfoJudg()money = int(input("请输入存款金额:"))print("当前金额为:%d,存入%d" % (judg.card.cardMoney, money))#存款judg.card.cardMoney += moneyprint("存款成功,当前余额为%d"%(judg.card.cardMoney))#转账def transfromMoney(self):judg = self.userInfoJudg()tCard = input("请输入您要转账的卡号:")if not tCard:print("该卡号不存在")return FalsetUser = self.allUsers.get(tCard)if tUser.card.cardLock:print("该卡已经被锁定!无法转账!")return FalsetMoney = int(input("请输入转账金额:"))inquire = input("确认转账吗?y/n")if inquire == "y":if tMoney > judg.card.cardMoney:print("卡内余额不足,转账失败")if tMoney < 0:print("输入金额错误")#转账judg.card.cardMoney -=tMoneytUser.card.cardMoney +=tMoneyprint("转账成功,请稍后查询到账信息....")#修改密码def changePwd(self):judg = self.userInfoJudg()tempIdCard = input("请输入您的身份证号码:")if tempIdCard != judg.idCard:print("身份证输入错误!请重试...")return -1newPwd = input("请输入新密码")newPwd2 = input("请再次输入")if newPwd == newPwd2:judg.card.cardPwd = newPwd2print("密码修改成功,请牢记您的新密码")else:print("两次输入密码不一致,请重试!")return -1#锁定def lock(self):judg = self.userInfoJudg()tempIdCard = input("请输入您的身份证号码:")if tempIdCard != judg.idCard:print("身份证输入错误!锁定失败...")return -1#锁定judg.card.cardLock =Trueprint("锁定成功")#解锁def unlock(self):cardNum = input("请输入您的卡号:")# 验证该卡号是否存在user = self.allUsers.get(cardNum)if not user:print("该卡号不存在")return -1if not user.card.cardLock:print("此卡没有被锁定,无需解锁!")return -1# 验证密码if not self.checkPwd(user.card.cardPwd):print("密码输入错误!解锁失败.....")return -1tempIdCard = input("请输入您的身份证号码:")if tempIdCard != user.idCard:print("身份证输入错误!解锁失败...")return -1#解锁user.card.cardLock = Falseprint("解锁成功")#补卡def replace(self):judg = self.userInfoJudg()ask = input("请确认您的账号,是否继续操作?y/n")if ask=="y":name = input("请输入您的姓名:")idCard = input("输入您的身份证号码:")phone = input("请输入您的电话号码:")onePwd = input("请设置密码:")if not self.checkPwd(onePwd):print("密码输入错误!开户失败....")return 1# 用户信息cardStr = self.randomCard()ask2 = input("是否将所有金额转至新卡,该操作不可逆?y/n")if ask2 == "y":newMoney = judg.card.cardMoneyjudg.card.cardMoney = 0else:print("操作取消!")return -1card = Card(cardStr, onePwd, newMoney)user = User(name, idCard, phone, card)# 存到字典self.allUsers[cardStr] = userprint("补卡成功!请记住您的新卡号(%s)...." % (cardStr))else:print("操作取消!")#销户def logoutUserInfo(self):judg = self.userInfoJudg()tempIdCard = input("请输入您的身份证号码:")if tempIdCard != judg.idCard:print("身份证输入错误!锁定失败...")return -1kCard = judg.card.cardIdask3 = input("您确认要注销账户吗?此操作不可逆 y/n")if ask3 == "y":self.allUsers.pop(kCard)print("账户已注销!")else:print("操作取消")#验证密码def checkPwd(self,realPwd):for i in range(3):tempPwd = input("请输入密码:")if tempPwd == realPwd:return Truereturn False#生成卡号:def randomCard(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#用户信息存储到库def saveUserInfo(self):filePath = os.path.join(os.getcwd(),"allUsers.txt")f =open(filePath,"wb")pickle.dump(self.allUsers,f)f.close()

 

信息存入文件中,每次打开系统时,从文件中读取用户卡号信息。

第一次登入系统时,可以先自己在文件中放入测试数据,否则读取不到文件中的内容

或者可以第一次登入时先不读取文件,自己设定一个字典存入数据,然后将字典数据存入文件中再读取。

源码:https://download.csdn.net/download/qq_38830964/11486484


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部