python實現(xiàn)簡單銀行管理系統(tǒng)
本文為大家分享了python銀行管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
自己寫的練手小程序,練習(xí)面向?qū)ο蟮母拍?,代碼中都有注釋,剛學(xué)的同學(xué)也可以很容易看懂(需要自己用pickle模塊新建一個database.txt文件,用來存儲用戶數(shù)據(jù)信息)。
# atm.py
# 各種操作類
import random
from card import Card
from user import User
import time
class ATM(object):
# 初始化
def __init__(self, allUsersInfo):
# 將所有用戶信息傳遞過來,以便后續(xù)操作
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
# 判斷卡號是否重復(fù)
if not self.allUsersInfo.get(str):
return str
# 開卡操作
def createUser(self):
try:
name = input('請輸入姓名:') # 用戶姓名
idCard = input('請輸入身份證號碼:') # 用戶身份證號
phone = input('請輸入電話號碼:') # 用戶的電話號碼
preMoney = int(input('請輸入預(yù)存金額:')) # 用戶的預(yù)存金額
# 預(yù)存金額少于0則開戶失敗
if preMoney < 0:
print('預(yù)存金額有誤,開戶失敗!')
return -1
# 設(shè)置密碼
onePwd = input('請輸入密碼:') # 第一次密碼
twoPwd = self.checkPwd(onePwd)
if not twoPwd:
print('確認密碼錯誤,開戶失敗!')
return -1
# 以上全部完成,則開戶所需的信息準備齊全,開戶成功
# 系統(tǒng)生成開戶卡號
# 生成卡號
cardStr = self.randomId()
# 創(chuàng)建一個卡的實例,用于存儲卡的信息
card = Card(cardStr, onePwd, preMoney)
# 創(chuàng)建一個用戶實例,用于存儲用戶的信息
user = User(name, idCard, phone, card)
# 按 卡號 : 用戶信息 鍵值對的形式存入字典中
self.allUsersInfo[cardStr] = user
# 提示用戶,已經(jīng)開戶成功
time.sleep(1)
print('開戶成功,請牢記卡號({})...'.format(cardStr))
except Exception as e:
print('抱歉,系統(tǒng)出現(xiàn)故障,暫時無法操作!')
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('請輸入卡號:') # 用戶想要查詢的卡號
# 判斷卡號的狀態(tài)
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('存款成功,卡內(nèi)余額為%d!' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
else:
print('密碼輸入錯誤超過3次,卡號已被鎖定,請先解鎖!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = True
return -1
else:
print('該卡號已被鎖定,請先解鎖!')
return -1
# 轉(zhuǎn)賬
def transMoney(self):
cardInp = input('請輸入卡號:')
isExist = self.isExistence(cardInp)
# 卡號存在
if isExist:
# 沒被鎖定
if not self.allUsersInfo[cardInp].cardInfo.isLock:
# 密碼正確
if self.secretOption(cardInp):
transCardInp = input('請輸入要轉(zhuǎn)賬的卡號:')
isExistTrans = self.isExistence(transCardInp)
# 要轉(zhuǎn)賬的卡號存在
if isExistTrans:
# 要轉(zhuǎn)賬的卡號沒被鎖定
if not self.allUsersInfo[transCardInp].cardInfo.isLock:
# 要轉(zhuǎn)賬的卡號不是自己的卡號
if transCardInp != cardInp:
transMoneyInp = int(input('請輸入要轉(zhuǎn)賬的金額:'))
# 判斷轉(zhuǎn)賬金額是否大于卡內(nèi)余額
if transMoneyInp > self.allUsersInfo[cardInp].cardInfo.cardMoney:
print('余額不足,轉(zhuǎn)賬失??!')
return -1
else:
self.allUsersInfo[cardInp].cardInfo.cardMoney -= transMoneyInp
self.allUsersInfo[transCardInp].cardInfo.cardMoney += transMoneyInp
print('轉(zhuǎn)賬成功,卡內(nèi)余額為%d!' % self.allUsersInfo[cardInp].cardInfo.cardMoney)
else:
print('無法轉(zhuǎn)入自己的賬戶!')
return -1
else:
print('對方卡號已被鎖定,無法轉(zhuǎn)賬,請先解鎖!')
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('確認密碼錯誤次數(shù)超過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
# 主函數(shù)
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() # 關(guān)閉文件
# 打印所有用戶信息,以便驗證
print('*' * 10)
print('usersInfo:', allUsersInfo)
# 創(chuàng)建atm實例,并將所有用戶信息傳遞過去,進行初始化
atm = ATM(allUsersInfo)
# 循環(huán)進行操作選項
while True:
# 調(diào)用功能顯示方法,顯示功能選項
admin.printSysFunctionView()
# 提示用戶輸入功能選項進行操作
option= input('請輸入操作選項(數(shù)字):')
# 對用戶的操作選項進行判斷
if option == "1": # 開戶操作
atm.createUser()
elif option == "2": # 查詢余額操作
atm.searchUserInfo()
elif option == "3": # 取錢操作
atm.getMoney()
elif option == "4": # 存錢操作
atm.saveMoney()
elif option == "5": # 轉(zhuǎn)賬操作
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": # 退出系統(tǒng)
return 0
# 如果用戶輸入的不是上述操作
else:
print('無效的操作選項!')
return -1
# 將新信息寫入文件
# 將當(dāng)前系統(tǒng)中的用戶信息保存到文件中
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("* 轉(zhuǎn)賬(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()
更多學(xué)習(xí)資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python實現(xiàn)提取PDF文件中指定頁面的內(nèi)容
在日常工作和學(xué)習(xí)中,我們經(jīng)常需要從PDF文件中提取特定頁面的內(nèi)容,本文主要為大家詳細介紹了如何使用Python編程語言和兩個強大的庫——pymupdf和wxPython來實現(xiàn)這個任務(wù),需要的可以了解下2023-12-12
tensorflow實現(xiàn)簡單的卷積神經(jīng)網(wǎng)絡(luò)
這篇文章主要為大家詳細介紹了tensorflow實現(xiàn)簡單的卷積神經(jīng)網(wǎng)絡(luò),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
Python替換NumPy數(shù)組中大于某個值的所有元素實例
這篇文章主要介紹了Python替換NumPy數(shù)組中大于某個值的所有元素實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06

