python實(shí)現(xiàn)銀行實(shí)戰(zhàn)系統(tǒng)
本文實(shí)例為大家分享了python實(shí)現(xiàn)銀行實(shí)戰(zhàn)系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
先附上源代碼:
│ admin.py 管理員界面│ alluser.txt 保存用戶信息│ atm.py 銀行的各部分操作方法(存錢(qián)取錢(qián)等等)│ card.py 定義卡的類│ main.py 主程序 while True│ user.py 用戶的類
main.py的源代碼
'人類名:User屬性:姓名 身份證號(hào) 電話號(hào) 卡行為:卡類名:Card屬性:卡號(hào) 密碼 余額行為:提款機(jī)類名:ATM屬性:用戶字典行為:開(kāi)戶 查詢 取款 存款 轉(zhuǎn)賬 改密 鎖定 解密 補(bǔ)卡 銷(xiāo)戶 退出管理員類名:Admin屬性:行為:管理員界面 管理員驗(yàn)證 系統(tǒng)功能界面'import osimport pickleimport adminfrom atm import ATMdef main(): # 管理員對(duì)象 admin1 = admin.Admin() # 管理員開(kāi)機(jī) admin1.printAdminView() if admin1.adminOption(): return -1 # 提款機(jī)對(duì)象 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('請(qǐng)輸入您的操作:') if option == '1' or option == '開(kāi)戶': 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 == '轉(zhuǎn)賬': 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 == '補(bǔ)卡': atm.newCard() elif option == '0' or option == '銷(xiāo)戶': atm.killUser() elif option == 't' or option == '退出': if not admin1.adminOption(): # 將當(dāng)前系統(tǒng)中的用戶信息保存到文件中 f = open(filepath, 'wb') pickle.dump(atm.allUsers, f, 2) f.close() return -1 else: print('指令錯(cuò)誤,請(qǐng)重新輸入!!') admin.timeFlush()if __name__ == ’__main__’: main()
admin.py的源代碼
import timedef timeFlush(): sum = 2 # 設(shè)置倒計(jì)時(shí)時(shí)間 timeflush = 0.25 # 設(shè)置屏幕刷新的間隔時(shí)間 for i in range(0, int(sum / timeflush)): list = ['', '|', '/', '—'] index = i % 4 print('r操作成功!請(qǐng)稍等 {} '.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('* 開(kāi) 戶(1) 查 詢(2) *') print('* 取 款(3) 存 款(4) *') print('* 轉(zhuǎn) 賬(5) 改 密(6) *') print('* 鎖 定(7) 解 鎖(8) *') print('* 補(bǔ) 卡(9) 銷(xiāo) 戶(0) *') print('* 退 出(t) *') print('*******************************************************************') def adminOption(self): inputAdmin = input('請(qǐng)輸入管理員賬號(hào):') if self.admin != inputAdmin: print('賬號(hào)輸入有誤!!') return -1 inputPasswd = input('請(qǐng)輸入管理員密碼:') if self.passwd != inputPasswd: print('密碼輸入有誤!!') return -1 # 能執(zhí)行到這里說(shuō)明賬戶密碼正確!! 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 randomfrom card import Cardfrom user import Userclass ATM(object): def __init__(self, allUsers): self.allUsers = allUsers # 開(kāi)戶 def creatUser(self): # 向用戶字典中添加一對(duì)鍵值對(duì)(卡號(hào) -- 用戶) name = input('請(qǐng)輸入您的姓名:') idCard = input('請(qǐng)輸入您的身份證號(hào)碼:') phone = input('請(qǐng)輸入您的電話號(hào)碼:') prestoreMoney = int(input('請(qǐng)輸入預(yù)存儲(chǔ)金額:')) if prestoreMoney < 0: print('預(yù)存儲(chǔ)金額有誤!!開(kāi)戶失敗') return -1 onePasswd = input('請(qǐng)?jiān)O(shè)置密碼:') # 驗(yàn)證密碼 if not self.checkPasswd(onePasswd): print('密碼輸入錯(cuò)誤!!開(kāi)戶失敗') return -1 # 生成隨機(jī)的卡號(hào) cardId = self.randomCardId() # 生成卡的信息 card = Card(cardId, onePasswd, prestoreMoney) # 生成用戶信息 user = User(name, idCard, phone, card) # 存到字典里面 self.allUsers[cardId] = user print('您的卡號(hào)是%s, 請(qǐng)牢記卡號(hào)!!' % cardId) # 查詢 def searchUserInfo(self): cardNum = input('請(qǐng)輸入您的卡號(hào):') # 驗(yàn)證是否存在該卡號(hào) user = self.allUsers.get(cardNum) if not user: print('該卡號(hào)不存在!!查詢失敗') return -1 if user.card.cardLock: print('該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') return -1 # 驗(yàn)證密碼 if not self.checkPasswd(user.card.cardPasswd): print('密碼輸入錯(cuò)誤!!該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') user.card.cardLock = True return -1 print('賬號(hào):%s 余額:%d' % (user.card.cardId, user.card.cardMoney)) # 取款 def withdrawals(self): cardNum = input('請(qǐng)輸入您的卡號(hào):') # 驗(yàn)證是否存在該卡號(hào) user = self.allUsers.get(cardNum) if not user: print('該卡號(hào)不存在!!查詢失敗') return -1 if user.card.cardLock: print('該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') return -1 # 驗(yàn)證密碼 if not self.checkPasswd(user.card.cardPasswd): print('密碼輸入錯(cuò)誤!!該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') user.card.cardLock = True return -1 # 進(jìn)行到這一步說(shuō)明卡號(hào)信息都正確,進(jìn)行取款操作 theMoney = int(input('請(qǐng)輸入您需要取款的金額:')) 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('請(qǐng)輸入您的卡號(hào):') # 驗(yàn)證是否存在該卡號(hào) user = self.allUsers.get(cardNum) if not user: print('該卡號(hào)不存在!!查詢失敗') return -1 if user.card.cardLock: print('該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') return -1 # 驗(yàn)證密碼 if not self.checkPasswd(user.card.cardPasswd): print('密碼輸入錯(cuò)誤!!該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') user.card.cardLock = True return -1 # 進(jìn)行到這一步說(shuō)明卡號(hào)信息都正確,進(jìn)行存款操作 theMoney = int(input('請(qǐng)輸入您需要存款的金額:')) if theMoney < 0: print('您輸入金額有誤!!') else: user.card.cardMoney += theMoney print('存款成功!! 余額為:%d' % user.card.cardMoney) # 轉(zhuǎn)賬 def transferMoney(self): cardNum = input('請(qǐng)輸入您的卡號(hào):') # 驗(yàn)證是否存在該卡號(hào) user = self.allUsers.get(cardNum) if not user: print('該卡號(hào)不存在!!查詢失敗') return -1 if user.card.cardLock: print('該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') return -1 # 驗(yàn)證密碼 if not self.checkPasswd(user.card.cardPasswd): print('密碼輸入錯(cuò)誤!!該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') user.card.cardLock = True return -1 # 到這里說(shuō)明卡號(hào)信息正確,進(jìn)行轉(zhuǎn)賬操作 theOtherCardId = input('請(qǐng)輸入您需要轉(zhuǎn)賬的卡號(hào):') # 驗(yàn)證是否存在該卡號(hào) otheruser = self.allUsers.get(theOtherCardId) if not otheruser: print('該卡號(hào)不存在!!轉(zhuǎn)賬失敗') return -1 if otheruser.card.cardLock: print('該卡已被鎖定!!') return -1 theOtherCardName = input('請(qǐng)輸入您需要轉(zhuǎn)賬人的姓名:') # 驗(yàn)證轉(zhuǎn)賬人的姓名是否正確 if otheruser.name != theOtherCardName: print('轉(zhuǎn)賬人姓名輸入錯(cuò)誤') return -1 print('您的賬戶為%s 您的余額為%d' % (user.card.cardId, user.card.cardMoney)) # 開(kāi)始轉(zhuǎn)賬 theMoney = int(input('請(qǐng)輸入您需要轉(zhuǎn)賬的金額:')) if theMoney < 0: print('您輸入金額有誤!!') else: user.card.cardMoney -= theMoney otheruser.card.cardMoney += theMoney print('轉(zhuǎn)賬成功!!您的余額為%d' % user.card.cardMoney) return -1 # 改密 def changePasswd(self): cardNum = input('請(qǐng)輸入您的卡號(hào):') # 驗(yàn)證是否存在該卡號(hào) user = self.allUsers.get(cardNum) if not user: print('該卡號(hào)不存在!!查詢失敗') return -1 if user.card.cardLock: print('該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') return -1 # 驗(yàn)證密碼 if not self.checkPasswd(user.card.cardPasswd): print('密碼輸入錯(cuò)誤!!該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') user.card.cardLock = True return -1 # 下面進(jìn)行改密操作 newPasswd = input('請(qǐng)輸入新密碼:') if newPasswd == user.card.cardPasswd: print('新舊密碼不能一致!!操作失敗') return -1 # 驗(yàn)證密碼 if not self.checkPasswd(newPasswd): print('密碼輸入錯(cuò)誤!!') return -1 user.card.cardPasswd = newPasswd print('密碼修改成功!!請(qǐng)牢記您的密碼') # 鎖定 def lockUser(self): cardNum = input('請(qǐng)輸入您的卡號(hào):') # 驗(yàn)證是否存在該卡號(hào) user = self.allUsers.get(cardNum) if not user: print('該卡號(hào)不存在!!輸入錯(cuò)誤') return -1 if user.card.cardLock: print('該卡已被鎖定!!請(qǐng)解鎖后再使用其他功能') return -1 # 驗(yàn)證密碼 if not self.checkPasswd(user.card.cardPasswd): print('密碼輸入錯(cuò)誤!!鎖定失敗') return -1 tempIdCard = input('請(qǐng)輸入您的身份證號(hào)碼') if tempIdCard != user.idCard: print('身份證輸入錯(cuò)誤!!鎖定失敗') return -1 # 進(jìn)行到這一步說(shuō)明信息輸入成功,鎖定開(kāi)始 user.card.cardLock = True print('鎖定成功') # 解鎖 def unlockUser(self): cardNum = input('請(qǐng)輸入您的卡號(hào):') # 驗(yàn)證是否存在該卡號(hào) user = self.allUsers.get(cardNum) if not user: print('該卡號(hào)不存在!!輸入錯(cuò)誤') return -1 if not user.card.cardLock: print('該卡沒(méi)有被鎖定!!無(wú)需解鎖') return -1 # 驗(yàn)證密碼 if not self.checkPasswd(user.card.cardPasswd): print('密碼輸入錯(cuò)誤!!鎖定失敗') return -1 tempIdCard = input('請(qǐng)輸入您的身份證號(hào)碼') if tempIdCard != user.idCard: print('身份證輸入錯(cuò)誤!!鎖定失敗') return -1 # 進(jìn)行到這一步說(shuō)明信息輸入成功,解鎖開(kāi)始 user.card.cardLock = False print('解鎖成功') # 補(bǔ)卡 def newCard(self): cardNum = input('請(qǐng)輸入您的卡號(hào):') # 驗(yàn)證是否存在該卡號(hào) user = self.allUsers.get(cardNum) if not user: print('該卡號(hào)不存在!!查詢失敗') return -1 if user.card.cardLock: print('該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') return -1 # 驗(yàn)證密碼 if not self.checkPasswd(user.card.cardPasswd): print('密碼輸入錯(cuò)誤!!該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') user.card.cardLock = True return -1 CardName = input('請(qǐng)輸入您的姓名:') # 驗(yàn)證姓名是否正確 if user.name != CardName: print('姓名輸入錯(cuò)誤!!') return -1 useridCard = input('請(qǐng)輸入您的身份證號(hào)碼:') # 驗(yàn)證身份證是否正確 if user.idCard != useridCard: print('身份證號(hào)碼輸入錯(cuò)誤!!') return -1 # 進(jìn)行到這一步說(shuō)明信息都正確,下面進(jìn)行補(bǔ)卡操作,只換卡號(hào),其他信息都不換 newIdCard= self.randomCardId() self.allUsers[newIdCard] = self.allUsers.pop(user.card.cardId) user.card.cardId = newIdCard print('您的新卡號(hào)為:%s 請(qǐng)牢記!!' % user.card.cardId) # 銷(xiāo)戶 def killUser(self): cardNum = input('請(qǐng)輸入您的卡號(hào):') # 驗(yàn)證是否存在該卡號(hào) user = self.allUsers.get(cardNum) if not user: print('該卡號(hào)不存在!!查詢失敗') return -1 if user.card.cardLock: print('該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') return -1 # 驗(yàn)證密碼 if not self.checkPasswd(user.card.cardPasswd): print('密碼輸入錯(cuò)誤!!該卡已被鎖定!!請(qǐng)解鎖后在進(jìn)行其他操作!') user.card.cardLock = True return -1 CardName = input('請(qǐng)輸入您的姓名:') # 驗(yàn)證姓名是否正確 if user.name != CardName: print('姓名輸入錯(cuò)誤!!') return -1 useridCard = input('請(qǐng)輸入您的身份證號(hào)碼:') # 驗(yàn)證身份證是否正確 if user.idCard != useridCard: print('身份證號(hào)碼輸入錯(cuò)誤!!') return -1 answer = input('請(qǐng)問(wèn)您確定要銷(xiāo)戶嗎?確定(1) 取消(2)') if answer == '1' or answer == '確定': del self.allUsers[cardNum] print('已銷(xiāo)戶') return -1 elif answer == '2' or answer == '取消': print('取消成功!!') return -1 else: print('輸入錯(cuò)誤!!') return -1 # 驗(yàn)證密碼 def checkPasswd(self, realPasswd): for i in range(3): tempPasswd = input('請(qǐng)?jiān)俅屋斎朊艽a:') cardq ccardCardq)�( cardIdqh cardPasswdqh cardMoneyq cardLockq�ububs.
因?yàn)檫\(yùn)用pickle庫(kù),要持久化存儲(chǔ)用戶信息(字典),故打開(kāi)讀取寫(xiě)入會(huì)亂碼,第一排中的123456是卡號(hào),其他信息全部是1,不要試圖pycharm中修改這個(gè)allUsers。txt文件,否則會(huì)產(chǎn)生無(wú)法啟動(dòng)程序的bug,這個(gè)筆者也不知道該如何改進(jìn)亂碼現(xiàn)象,希望讀者能優(yōu)化
如果遇到因?yàn)閍lluser.txt而無(wú)法運(yùn)行的情況:請(qǐng)往下看:
因?yàn)閜ickle庫(kù)的原因,開(kāi)始我們是要讀取這個(gè)文件的,讀的到程序順利,讀不到程序涼涼,故我們必須要在alluser.txt里面有pickle庫(kù)可以識(shí)別的源代碼。如果您是在pycharm里面復(fù)制粘貼的因?yàn)閍lluser.txt代碼,故pycharm會(huì)自動(dòng)轉(zhuǎn)化為utf-8或者其他
我們要先把a(bǔ)lluser.txt刪除,讓pickle庫(kù)先不讀取,創(chuàng)建一個(gè)空字典,我們先開(kāi)戶,然后退出程序是會(huì)自動(dòng)創(chuàng)建一個(gè)新的alluser.txt文件,會(huì)把我們剛剛創(chuàng)建好的用戶信息全部保存在txt文件中,這樣我們?cè)倩謴?fù),達(dá)到持久化保存的目的
filepath = os.path.join(os.getcwd(), 'alluser.txt') # 把之前的給注釋掉,不讓程序讀取 # f = open(filepath, 'rb') # allUsers = pickle.load(f) # f.close() # 創(chuàng)建一個(gè)新的空字典 allUsers = {} atm = ATM(allUsers)
然后我們進(jìn)行開(kāi)戶操作,最后退出,會(huì)自動(dòng)創(chuàng)建一個(gè)全新的alluser.txt文件
filepath = os.path.join(os.getcwd(), 'alluser.txt') f = open(filepath, 'rb') allUsers = pickle.load(f) f.close() # 然后我們恢復(fù)它 # allUsers = {} atm = ATM(allUsers)
ok,完成了
運(yùn)行結(jié)果:
更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開(kāi)發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. Android 7.0 運(yùn)行時(shí)權(quán)限彈窗問(wèn)題的解決2. java實(shí)現(xiàn)圖形化界面計(jì)算器3. IntelliJ IDEA設(shè)置條件斷點(diǎn)的方法步驟4. IDEA的Mybatis Generator駝峰配置問(wèn)題5. ASP.NET MVC解決上傳圖片臟數(shù)據(jù)的方法6. Python使用oslo.vmware管理ESXI虛擬機(jī)的示例參考7. Thinkphp3.2.3反序列化漏洞實(shí)例分析8. python 批量將PPT導(dǎo)出成圖片集的案例9. 原生js XMLhttprequest請(qǐng)求onreadystatechange執(zhí)行兩次的解決10. python編寫(xiě)函數(shù)注意事項(xiàng)總結(jié)
