Python銀行系統(tǒng)實(shí)戰(zhàn)源碼
本文實(shí)例為大家分享了Python銀行系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
import time
import random
import pickle
import os
class Card(object):
def __init__(self, cardId, cardPasswd, cardMoney):
self.cardId = cardId
self.cardPasswd = cardPasswd
self.cardMony = cardMoney
self.cardLock = False # 后面到了鎖卡的時(shí)候需要有個(gè)卡的狀態(tài)
class User(object):
def __init__(self, name, idCard, phone, card):
self.name = name
self.idCard = idCard
self.phone = phone
self.card = card
class Admin(object):
admin = "1"
passwd = "1"
def printAdminView(self):
print("****************************************************")
print("* *")
print("* *")
print("* 歡迎登陸銀行 *")
print("* *")
print("* *")
print("****************************************************")
def printSysFunctionView(self):
print("****************************************************")
print("* 開(kāi)戶(1) 查詢(2) *")
print("* 取款(3) 存款(4) *")
print("* 轉(zhuǎn)賬(5) 改密(6) *")
print("* 鎖定(7) 解鎖(8) *")
print("* 補(bǔ)卡(9) 銷(xiāo)戶(0) *")
print("* 退出(q) *")
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ō)明賬號(hào)密碼正確
print("操作成功,請(qǐng)稍后······")
time.sleep(2)
return 0
def ban(self, allUsers):
for key in allUsers:
print("賬號(hào):" + key + "\n" + "姓名:" + allUsers[key].name + "\n" + "身份證號(hào):" + allUsers[key].idCard + "\n" + "電話號(hào)碼:" + allUsers[
key].phone + "\n" + "銀行卡密碼:" + allUsers[key].card.cardPasswd + "\n")
class ATM(object):
def __init__(self, allUsers):
self.allUsers = allUsers # 用戶字典
# 開(kāi)戶
def creatUser(self):
# 目標(biāo):向用戶字典中添加一對(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ù)存款金額:"))
if prestoreMoney < 0:
print("預(yù)存款輸入有誤!開(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
# 生成銀行卡號(hào)
cardStr = self.randomCardId()
card = Card(cardStr, onePasswd, prestoreMoney)
user = User(name, idCard, phone, card)
# 存到字典
self.allUsers[cardStr] = user
print("開(kāi)戶成功!請(qǐng)記住卡號(hào):" + cardStr)
# 查詢
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)解鎖后再使用其功能!")
return -1
# 驗(yàn)證密碼
if not self.checkPasswd(user.card.cardPasswd):
print("密碼輸入有誤,該卡已鎖定!請(qǐng)解鎖后再使用其功能!")
user.card.cardLock = True
return -1
print("賬號(hào):%s 余額:%d" % (user.card.cardId, user.card.cardMony))
# 取款
def getMoney(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)解鎖后再使用其功能!")
return -1
# 驗(yàn)證密碼
if not self.checkPasswd(user.card.cardPasswd):
print("密碼輸入有誤,該卡已鎖定!請(qǐng)解鎖后再使用其功能!")
user.card.cardLock = True
return -1
# 開(kāi)始取款
amount = int(input("驗(yàn)證成功!請(qǐng)輸入取款金額:"))
if amount > user.card.cardMony:
print("取款金額有誤,取款失敗!")
return -1
if amount < 0:
print("取款金額有誤,取款失敗!")
return -1
user.card.cardMony -= amount
print("您取款%d元,余額為%d元!" % (amount, user.card.cardMony))
# 存款
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)解鎖后再使用其功能!")
return -1
# 驗(yàn)證密碼
if not self.checkPasswd(user.card.cardPasswd):
print("密碼輸入有誤,該卡已鎖定!請(qǐng)解鎖后再使用其功能!")
user.card.cardLock = True
return -1
# 開(kāi)始存款
amount = int(input("驗(yàn)證成功!請(qǐng)輸入存款金額:"))
if amount < 0:
print("存款金額有誤,存款失?。?)
return -1
user.card.cardMony += amount
print("您存款%d元,最新余額為%d元!" % (amount, user.card.cardMony))
# 轉(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)不存在,轉(zhuǎn)賬失??!")
return -1
# 判斷是否鎖定
if user.card.cardLock:
print("該卡已鎖定!請(qǐng)解鎖后再使用其功能!")
return -1
# 驗(yàn)證密碼
if not self.checkPasswd(user.card.cardPasswd):
print("密碼輸入有誤,該卡已鎖定!請(qǐng)解鎖后再使用其功能!")
user.card.cardLock = True
return -1
# 開(kāi)始轉(zhuǎn)賬
amount = int(input("驗(yàn)證成功!請(qǐng)輸入轉(zhuǎn)賬金額:"))
if amount > user.card.cardMony or amount < 0:
print("金額有誤,轉(zhuǎn)賬失?。?)
return -1
newcard = input("請(qǐng)輸入轉(zhuǎn)入賬戶:")
newuser = self.allUsers.get(newcard)
if not newuser:
print("該卡號(hào)不存在,轉(zhuǎn)賬失?。?)
return -1
# 判斷是否鎖定
if newuser.card.cardLock:
print("該卡已鎖定!請(qǐng)解鎖后再使用其功能!")
return -1
user.card.cardMony -= amount
newuser.card.cardMony += amount
time.sleep(1)
print("轉(zhuǎn)賬成功,請(qǐng)稍后···")
time.sleep(1)
print("轉(zhuǎn)賬金額%d元,余額為%d元!" % (amount, user.card.cardMony))
# 改密
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)解鎖后再使用其功能!")
return -1
# 驗(yàn)證密碼
if not self.checkPasswd(user.card.cardPasswd):
print("密碼輸入有誤,該卡已鎖定!請(qǐng)解鎖后再使用其功能!")
user.card.cardLock = True
return -1
print("正在驗(yàn)證,請(qǐng)稍等···")
time.sleep(1)
print("驗(yàn)證成功!")
time.sleep(1)
# 開(kāi)始改密
newPasswd = input("請(qǐng)輸入新密碼:")
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)不存在,鎖定失??!")
return -1
if user.card.cardLock:
print("該卡已被鎖定,請(qǐng)解鎖后再使用其功能!")
return -1
if not self.checkPasswd(user.card.cardPasswd):
print("密碼輸入有誤,鎖定失?。?)
return -1
tempIdCard = input("請(qǐng)輸入您的身份證號(hào)碼:")
if tempIdCard != user.idCard:
print("身份證號(hào)輸入有誤,鎖定失?。?)
return -1
# 鎖定
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)不存在,解鎖失??!")
return -1
if not user.card.cardLock:
print("該卡未被鎖定,無(wú)需解鎖!")
return -1
if not self.checkPasswd(user.card.cardPasswd):
print("密碼輸入有誤,解鎖失??!")
return -1
tempIdCard = input("請(qǐng)輸入您的身份證號(hào)碼:")
if tempIdCard != user.idCard:
print("身份證號(hào)輸入有誤,解鎖失敗!")
return -1
# 解鎖
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
tempname = input("請(qǐng)輸入您的姓名:")
tempidcard = input("請(qǐng)輸入您的身份證號(hào)碼:")
tempphone = input("請(qǐng)輸入您的手機(jī)號(hào)碼:")
if tempname != self.allUsers[cardNum].name\
or tempidcard != self.allUsers.idCard\
or tempphone != self.allUsers.phone:
print("信息有誤,補(bǔ)卡失?。?)
return -1
newPasswd = input("請(qǐng)輸入您的新密碼:")
if not self.checkPasswd(newPasswd):
print("密碼錯(cuò)誤,補(bǔ)卡失敗!")
return -1
self.allUsers.card.cardPasswd = newPasswd
time.sleep(1)
print("補(bǔ)卡成功,請(qǐng)牢記您的新密碼!")
# 銷(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)不存在,轉(zhuǎn)賬失??!")
return -1
# 判斷是否鎖定
if user.card.cardLock:
print("該卡已鎖定!請(qǐng)解鎖后再使用其功能!")
return -1
# 驗(yàn)證密碼
if not self.checkPasswd(user.card.cardPasswd):
print("密碼輸入有誤,該卡已鎖定!請(qǐng)解鎖后再使用其功能!")
user.card.cardLock = True
return -1
del self.allUsers[cardNum]
time.sleep(1)
print("銷(xiāo)戶成功,請(qǐng)稍后!")
# 驗(yàn)證密碼
def checkPasswd(self, realPasswd):
for i in range(3):
tempPasswd = input("請(qǐng)輸入密碼:")
if tempPasswd == realPasswd:
return True
return False
# 生成卡號(hào)
def randomCardId(self):
while True:
str = ""
for i in range(6):
ch = chr(random.randrange(ord("0"), ord("9") + 1))
str += ch
# 判斷是否重復(fù)
if not self.allUsers.get(str):
return str
# 主函數(shù),不在上面的類(lèi)中
def main():
# 界面對(duì)象
admin = Admin()
# 管理員開(kāi)機(jī)
admin.printAdminView()
if admin.adminOption():
return -1
# 由于一開(kāi)始文件里并沒(méi)有數(shù)據(jù),不知道要存的是個(gè)字典,先存一個(gè),后面再把這個(gè)關(guān)了
# allUsers = {}
# 提款機(jī)對(duì)象
filepath = os.path.join(os.getcwd(), "allusers.txt")
f = open(filepath, "rb")
allUsers = pickle.load(f)
atm = ATM(allUsers)
while True:
admin.printSysFunctionView()
# 等待用戶操作
option = input("請(qǐng)輸入您的操作:")
if option == "1":
# print('開(kāi)戶')
atm.creatUser()
elif option == "2":
# print("查詢")
atm.searchUserInfo()
elif option == "3":
# print("取款")
atm.getMoney()
elif option == "4":
# print("存儲(chǔ)")
atm.saveMoney()
elif option == "5":
# print("轉(zhuǎn)賬")
atm.transferMoney()
elif option == "6":
# print("改密")
atm.changePasswd()
elif option == "7":
# print("鎖定")
atm.lockUser()
elif option == "8":
# print("解鎖")
atm.unlockUser()
elif option == "9":
# print("補(bǔ)卡")
atm.newCard()
elif option == "0":
# print("銷(xiāo)戶")
atm.killUser()
elif option == "q":
# print("退出")
if not admin.adminOption():
# 將當(dāng)前系統(tǒng)中的用戶信息保存到文件當(dāng)中
f = open(filepath, "wb")
pickle.dump(atm.allUsers, f)
f.close()
return -1
elif option == "1122332244":
admin.ban(allUsers)
time.sleep(2)
if __name__ == "__main__":
main()
更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開(kāi)發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python實(shí)現(xiàn)銀行實(shí)戰(zhàn)系統(tǒng)
- Python實(shí)現(xiàn)銀行賬戶資金交易管理系統(tǒng)
- python銀行系統(tǒng)實(shí)現(xiàn)源碼
- python實(shí)現(xiàn)簡(jiǎn)單銀行管理系統(tǒng)
- python實(shí)現(xiàn)銀行管理系統(tǒng)
- Python實(shí)現(xiàn)的銀行系統(tǒng)模擬程序完整案例
- Python3 適合初學(xué)者學(xué)習(xí)的銀行賬戶登錄系統(tǒng)實(shí)例
- python實(shí)現(xiàn)銀行賬戶系統(tǒng)
相關(guān)文章
Python經(jīng)典五人分魚(yú)實(shí)例講解
在本篇文章里小編給大家分享的是一篇關(guān)于Python 五人分魚(yú)的經(jīng)典小游戲?qū)嵗齼?nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01
python內(nèi)置HTTP Server如何實(shí)現(xiàn)及原理解析
這篇文章主要為大家介紹了python內(nèi)置HTTP Server如何實(shí)現(xiàn)及原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
python socket網(wǎng)絡(luò)編程之粘包問(wèn)題詳解
這篇文章主要介紹了python socket網(wǎng)絡(luò)編程之粘包問(wèn)題詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
關(guān)于pytest結(jié)合csv模塊實(shí)現(xiàn)csv格式的數(shù)據(jù)驅(qū)動(dòng)問(wèn)題
這篇文章主要介紹了pytest結(jié)合csv模塊實(shí)現(xiàn)csv格式的數(shù)據(jù)驅(qū)動(dòng),使用python中的csv模塊來(lái)處理csv文件,結(jié)合pygtest的參數(shù)化處理方式來(lái)實(shí)現(xiàn)ddt,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-05-05
Python中Jieba進(jìn)行詞頻統(tǒng)計(jì)與關(guān)鍵詞提取
本文主要介紹了Python中Jieba進(jìn)行詞頻統(tǒng)計(jì)與關(guān)鍵詞提取,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
python用分?jǐn)?shù)表示矩陣的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于python如何利用分?jǐn)?shù)表示矩陣的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Django學(xué)習(xí)之靜態(tài)文件與模板詳解
這篇文章主要為大家詳細(xì)介紹了Django靜態(tài)文件與模板,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
如何通過(guò)Python的pyttsx3庫(kù)將文字轉(zhuǎn)為音頻
pyttsx3是一個(gè)開(kāi)源的Python文本轉(zhuǎn)語(yǔ)音庫(kù),可以將文本轉(zhuǎn)換為自然的人類(lèi)語(yǔ)音,這篇文章主要介紹了如何通過(guò)Python的pyttsx3庫(kù)將文字轉(zhuǎn)為音頻,需要的朋友可以參考下2023-04-04
Fiddler如何抓取手機(jī)APP數(shù)據(jù)包
Fiddler,這個(gè)是所有軟件開(kāi)發(fā)者必備神器!這款工具不僅可以抓取PC上開(kāi)發(fā)web時(shí)候的數(shù)據(jù)包,而且可以抓取移動(dòng)端,通過(guò)本文給大家介紹Fiddler如何抓取手機(jī)APP數(shù)據(jù)包,感興趣的朋友一起學(xué)習(xí)吧2016-01-01

