您好,登錄后才能下訂單哦!
本文為大家分享了python銀行管理系統的具體代碼,供大家參考,具體內容如下
自己寫的練手小程序,練習面向對象的概念,代碼中都有注釋,剛學的同學也可以很容易看懂(需要自己用pickle模塊新建一個database.txt文件,用來存儲用戶數據信息)。
# atm.py # 各種操作類 import random from card import Card from user import User import time class ATM(object): # 初始化 def __init__(self, allUsersInfo): # 將所有用戶信息傳遞過來,以便后續操作 self.allUsersInfo = allUsersInfo # 卡號 :用戶 # 確認密碼 def checkPwd(self, realPwd): myList = [3, 2, 1, 0] for i in myList: # 如果密碼輸入錯誤超過三次 if i == 0: return False rePass = input('請再次輸入密碼:') if realPwd == rePass: return True elif (i - 1) != 0: print('輸入錯誤,你還有%d次輸入的機會!' % (i - 1)) # 隨機生成開戶卡號 def randomId(self): while True: # 存儲卡號 str = '' # 隨機生成6位卡號 for i in range(6): ch = chr(random.randrange(ord('0'), ord('9') + 1)) str += ch # 判斷卡號是否重復 if not self.allUsersInfo.get(str): return str # 開卡操作 def createUser(self): try: name = input('請輸入姓名:') # 用戶姓名 idCard = input('請輸入身份證號碼:') # 用戶身份證號 phone = input('請輸入電話號碼:') # 用戶的電話號碼 preMoney = int(input('請輸入預存金額:')) # 用戶的預存金額 # 預存金額少于0則開戶失敗 if preMoney < 0: print('預存金額有誤,開戶失敗!') return -1 # 設置密碼 onePwd = input('請輸入密碼:') # 第一次密碼 twoPwd = self.checkPwd(onePwd) if not twoPwd: print('確認密碼錯誤,開戶失敗!') return -1 # 以上全部完成,則開戶所需的信息準備齊全,開戶成功 # 系統生成開戶卡號 # 生成卡號 cardStr = self.randomId() # 創建一個卡的實例,用于存儲卡的信息 card = Card(cardStr, onePwd, preMoney) # 創建一個用戶實例,用于存儲用戶的信息 user = User(name, idCard, phone, card) # 按 卡號 : 用戶信息 鍵值對的形式存入字典中 self.allUsersInfo[cardStr] = user # 提示用戶,已經開戶成功 time.sleep(1) print('開戶成功,請牢記卡號({})...'.format(cardStr)) except Exception as e: print('抱歉,系統出現故障,暫時無法操作!') return # 判斷卡號是否存在 def isExistence(self, cardStrInp): # 卡號不存在,直接退回到選項界面 if self.allUsersInfo.get(cardStrInp): return True # 卡號不存在的情況下 else: print('卡號不存在!') return False # 做查詢等操作時,輸入密碼 def secretOption(self, cardStrInp): myList = [3, 2, 1, 0] for i in myList: # 如果密碼輸入錯誤超過三次 if i == 0: return False passInp = input('請輸入密碼:') if passInp == self.allUsersInfo[cardStrInp].cardInfo.cardPwd: return True elif (i - 1) != 0: print('輸入錯誤,你還有%d次輸入的機會!' % (i - 1)) # 查詢用戶信息 def searchUserInfo(self): cardStrInp = input('請輸入卡號:') # 用戶想要查詢的卡號 # 判斷卡號的狀態 isExist = self.isExistence(cardStrInp) # 卡號存在 if isExist: # 是否被鎖定 if not self.allUsersInfo[cardStrInp].cardInfo.isLock: # 輸入密碼并判斷 # 密碼正確則輸出余額 if self.secretOption(cardStrInp): print('賬號:%s 余額:%d' % (cardStrInp, self.allUsersInfo[cardStrInp].cardInfo.cardMoney)) return 0 # 密碼錯誤則鎖定卡號 else: print('密碼輸入錯誤超過3次,卡號已被鎖定,請先解鎖!') self.allUsersInfo[cardStrInp].cardInfo.isLock = True return -1 else: print('該卡號已被鎖定,請先解鎖!') return -1 # 取錢 def getMoney(self): cardStrInp = input('請輸入卡號:') isExist = self.isExistence(cardStrInp) # print(isExist) # 如果卡號存在 if isExist: # 如果沒被鎖定 if not self.allUsersInfo[cardStrInp].cardInfo.isLock: # 如果密碼正確 if self.secretOption(cardStrInp): getMoney = int(input('請輸入取款金額:')) # 如果取款金額超出余額 if getMoney > self.allUsersInfo[cardStrInp].cardInfo.cardMoney: print('余額不足,取款失敗!') return -1 # 余額足夠的情況,取款成功 else: self.allUsersInfo[cardStrInp].cardInfo.cardMoney -= getMoney print('取款成功,卡上余額:%d' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney) return 0 else: print('密碼輸入錯誤超過3次,卡號已被鎖定,請先解鎖!') self.allUsersInfo[cardStrInp].cardInfo.isLock = True return -1 else: print('該卡號已被鎖定,請先解鎖!') return -1 # 存錢 def saveMoney(self): cardStrInp = input('請輸入卡號:') isExist = self.isExistence(cardStrInp) if isExist: # 如果沒被鎖定 if not self.allUsersInfo[cardStrInp].cardInfo.isLock: # 如果密碼正確 if self.secretOption(cardStrInp): saveMoney = int(input('請輸入存款金額:')) if saveMoney <= 0: print('無效的存款金額!') return -1 else: # 存款成功 self.allUsersInfo[cardStrInp].cardInfo.cardMoney += saveMoney print('存款成功,卡內余額為%d!' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney) else: print('密碼輸入錯誤超過3次,卡號已被鎖定,請先解鎖!') self.allUsersInfo[cardStrInp].cardInfo.isLock = True return -1 else: print('該卡號已被鎖定,請先解鎖!') return -1 # 轉賬 def transMoney(self): cardInp = input('請輸入卡號:') isExist = self.isExistence(cardInp) # 卡號存在 if isExist: # 沒被鎖定 if not self.allUsersInfo[cardInp].cardInfo.isLock: # 密碼正確 if self.secretOption(cardInp): transCardInp = input('請輸入要轉賬的卡號:') isExistTrans = self.isExistence(transCardInp) # 要轉賬的卡號存在 if isExistTrans: # 要轉賬的卡號沒被鎖定 if not self.allUsersInfo[transCardInp].cardInfo.isLock: # 要轉賬的卡號不是自己的卡號 if transCardInp != cardInp: transMoneyInp = int(input('請輸入要轉賬的金額:')) # 判斷轉賬金額是否大于卡內余額 if transMoneyInp > self.allUsersInfo[cardInp].cardInfo.cardMoney: print('余額不足,轉賬失敗!') return -1 else: self.allUsersInfo[cardInp].cardInfo.cardMoney -= transMoneyInp self.allUsersInfo[transCardInp].cardInfo.cardMoney += transMoneyInp print('轉賬成功,卡內余額為%d!' % self.allUsersInfo[cardInp].cardInfo.cardMoney) else: print('無法轉入自己的賬戶!') return -1 else: print('對方卡號已被鎖定,無法轉賬,請先解鎖!') return -1 else: print('密碼輸入錯誤超過3次,卡號已被鎖定,請先解鎖!') self.allUsersInfo[cardInp].cardInfo.isLock = True return -1 else: print('該卡號已被鎖定,請先解鎖!') return -1 # 改密 def changePwd(self): cardStrInp = input('請輸入卡號:') isExist = self.isExistence(cardStrInp) if isExist: # 如果沒被鎖定 if not self.allUsersInfo[cardStrInp].cardInfo.isLock: # 如果密碼正確 if self.secretOption(cardStrInp): # 輸入修改后的密碼 changePwd = input('請輸入新密碼:') # 不允許新密碼和舊密碼相同 if changePwd != self.allUsersInfo[cardStrInp].cardInfo.cardPwd: myList = [3, 2, 1, 0] for i in myList: # 如果密碼輸入錯誤超過三次 if i == 0: print('確認密碼錯誤次數超過3次,修改密碼失敗!') return -1 passInp = input('請確認新密碼:') # 如果新密碼確認成功,則修改密碼 if passInp == changePwd: print('密碼修改成功!') self.allUsersInfo[cardStrInp].cardInfo.cardPwd = changePwd return 0 elif (i - 1) != 0: print('輸入錯誤,你還有%d次輸入的機會!' % (i - 1)) # 新密碼和舊密碼相同,不允許修改,提示并退出 else: print('新密碼不允許和舊密碼相同!') return -1 # 密碼不正確 else: print('密碼輸入錯誤超過3次,卡號已被鎖定,請先解鎖!') self.allUsersInfo[cardStrInp].cardInfo.isLock = True return -1 else: print('該卡號已被鎖定,請先解鎖!') return -1 # 解鎖 def unlockUser(self): cardStrInp = input('請輸入卡號:') isExist = self.isExistence(cardStrInp) # 存在 if isExist: # 被鎖定 if self.allUsersInfo[cardStrInp].cardInfo.isLock: # 如果密碼正確 if self.secretOption(cardStrInp): # 輸入身份證號信息做確認 idCardInp = input('請輸入身份證號:') # 身份證號信息匹配 if idCardInp == self.allUsersInfo[cardStrInp].idCard: # 解鎖成功 print('解鎖成功!') self.allUsersInfo[cardStrInp].cardInfo.isLock = False return 0 else: print('身份證號信息不匹配,解鎖失敗!') return -1 # 密碼不正確 else: print('密碼輸出錯誤,解鎖失敗!') return -1 else: print('該卡號未被鎖定,無需解鎖!') return -1
# card.py # 卡類 class Card(object): def __init__(self, cardStr, cardPwd, cardMoney): self.cardStr = cardStr # 卡號 self.cardPwd = cardPwd # 卡密 self.cardMoney = cardMoney # 卡中余額 self.isLock = False # 卡號是否被鎖
# main.py # 主函數 from view import View import pickle from atm import ATM import time def main(): # 定義管理員對象 admin = View() # 管理員登錄界面 admin.printAdminView() # 如果管理員賬號、密碼輸入錯誤則退出 if admin.adminOption(): return -1 # 讀取存儲在文件中的所有用戶的信息 file = open('database.txt', 'rb') allUsersInfo = pickle.load(file) # 將所有用戶信息存儲到 allUsersInfo中去 file.close() # 關閉文件 # 打印所有用戶信息,以便驗證 print('*' * 10) print('usersInfo:', allUsersInfo) # 創建atm實例,并將所有用戶信息傳遞過去,進行初始化 atm = ATM(allUsersInfo) # 循環進行操作選項 while True: # 調用功能顯示方法,顯示功能選項 admin.printSysFunctionView() # 提示用戶輸入功能選項進行操作 option= input('請輸入操作選項(數字):') # 對用戶的操作選項進行判斷 if option == "1": # 開戶操作 atm.createUser() elif option == "2": # 查詢余額操作 atm.searchUserInfo() elif option == "3": # 取錢操作 atm.getMoney() elif option == "4": # 存錢操作 atm.saveMoney() elif option == "5": # 轉賬操作 atm.transMoney() elif option == "6": # 改密碼操作 atm.changePwd() elif option == "7": # 解鎖操作 atm.unlockUser() # 以下操作暫時未寫 # elif option == "q": # 退出操作 # # atm.quitSys() # print('退出') # elif option == "9": # 補卡操作 # print("補卡") # # elif option == "0": # 銷戶操作 # print("銷戶") elif option == "8": # 退出系統 return 0 # 如果用戶輸入的不是上述操作 else: print('無效的操作選項!') return -1 # 將新信息寫入文件 # 將當前系統中的用戶信息保存到文件中 f = open('database.txt', "wb") pickle.dump(allUsersInfo, f) f.close() if __name__ == '__main__': main()
# user.py # 用戶信息類 class User(object): def __init__(self, name, idCard, phone, cardInfo): self.name = name # 用戶姓名 self.idCard = idCard # 用戶身份證號 self.phone = phone # 用戶的手機號碼 self.cardInfo = cardInfo # 用戶的卡的信息(卡號、密碼、余額)
# view.py # 視圖類 import time class View(object): admin = '1' pwd = '1' # 管理員登錄界面 def printAdminView(self): print("*****************************************************************") print("* *") print("* *") print("* 歡迎登陸丹丹的銀行 *") print("* *") print("* *") print("*****************************************************************") def printSysFunctionView(self): print("*****************************************************************") print("* 開戶(1) 查詢(2) *") print("* 取款(3) 存款(4) *") print("* 轉賬(5) 改密(6) *") print("* 解鎖(7) 退出(8) *") # print("* 補卡(9) 銷戶(0) *") # print("* 退出(t) *") print("*****************************************************************") def adminOption(self): inputAdmin = input('請輸入管理員賬號:') if inputAdmin != self.admin: print('賬號錯誤!') return -1 inputPwd = input('請輸入管理員密碼:') if inputPwd != self.pwd: print('密碼錯誤!') return -1 # 管理員賬號和密碼全部正確 print('操作成功,請稍后...') time.sleep(2) return 0 # view = View() # view.printAdminView() # view.adminOption() # view.printSysFunctionView()
更多學習資料請關注專題《管理系統開發》。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。