溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用python實(shí)現(xiàn)銀行實(shí)戰(zhàn)系統(tǒng)的案例

發(fā)布時(shí)間:2021-03-23 12:43:44 來源:億速云 閱讀:148 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)使用python實(shí)現(xiàn)銀行實(shí)戰(zhàn)系統(tǒng)的案例的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

源代碼:

│ admin.py                         管理員界面
│ alluser.txt                        保存用戶信息
│ atm.py                             銀行的各部分操作方法(存錢取錢等等)
│ card.py                            定義卡的類
│ main.py                           主程序 while True
│ user.py                            用戶的類 

main.py的源代碼

"""
人
類名:User
屬性:姓名 身份證號(hào) 電話號(hào) 卡
行為:

卡
類名:Card
屬性:卡號(hào) 密碼 余額
行為:

提款機(jī)
類名:ATM
屬性:用戶字典
行為:開戶 查詢 取款 存款 轉(zhuǎn)賬 改密 鎖定 解密 補(bǔ)卡 銷戶 退出

管理員
類名:Admin
屬性:
行為:管理員界面 管理員驗(yàn)證 系統(tǒng)功能界面

"""
import os
import pickle

import admin
from atm import ATM


def main():
 # 管理員對象
 admin1 = admin.Admin()

 # 管理員開機(jī)
 admin1.printAdminView()
 if admin1.adminOption():
 return -1

 # 提款機(jī)對象
 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("請輸入您的操作:")
 if option == "1" or option == "開戶":
 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 == "銷戶":
 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ò)誤,請重新輸入?。?quot;)

 admin.timeFlush()


if __name__ == '__main__':
 main()

admin.py的源代碼

import time


def 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操作成功!請稍等 {} ".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("* 開 戶(1) 查 詢(2) *")
 print("* 取 款(3) 存 款(4) *")
 print("* 轉(zhuǎn) 賬(5) 改 密(6) *")
 print("* 鎖 定(7) 解 鎖(8) *")
 print("* 補(bǔ) 卡(9) 銷 戶(0) *")
 print("* 退 出(t) *")
 print("*******************************************************************")

 def adminOption(self):
 inputAdmin = input("請輸入管理員賬號(hào):")
 if self.admin != inputAdmin:
 print("賬號(hào)輸入有誤?。?quot;)
 return -1
 inputPasswd = input("請輸入管理員密碼:")
 if self.passwd != inputPasswd:
 print("密碼輸入有誤!!")
 return -1

 # 能執(zhí)行到這里說明賬戶密碼正確?。?
 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 random

from card import Card
from user import User


class ATM(object):
 def __init__(self, allUsers):
 self.allUsers = allUsers

 # 開戶
 def creatUser(self):
 # 向用戶字典中添加一對鍵值對(卡號(hào) -- 用戶)
 name = input("請輸入您的姓名:")
 idCard = input("請輸入您的身份證號(hào)碼:")
 phone = input("請輸入您的電話號(hào)碼:")

 prestoreMoney = int(input("請輸入預(yù)存儲(chǔ)金額:"))
 if prestoreMoney < 0:
 print("預(yù)存儲(chǔ)金額有誤??!開戶失敗")
 return -1

 onePasswd = input("請?jiān)O(shè)置密碼:")
 # 驗(yàn)證密碼
 if not self.checkPasswd(onePasswd):
 print("密碼輸入錯(cuò)誤!!開戶失敗")
 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, 請牢記卡號(hào)!!" % cardId)

 # 查詢
 def searchUserInfo(self):
 cardNum = input("請輸入您的卡號(hào):")
 # 驗(yàn)證是否存在該卡號(hào)
 user = self.allUsers.get(cardNum)
 if not user:
 print("該卡號(hào)不存在!!查詢失敗")
 return -1
 if user.card.cardLock:
 print("該卡已被鎖定?。≌埥怄i后在進(jìn)行其他操作!")
 return -1

 # 驗(yàn)證密碼
 if not self.checkPasswd(user.card.cardPasswd):
 print("密碼輸入錯(cuò)誤??!該卡已被鎖定!!請解鎖后在進(jìn)行其他操作!")
 user.card.cardLock = True
 return -1
 print("賬號(hào):%s 余額:%d" % (user.card.cardId, user.card.cardMoney))

 # 取款
 def withdrawals(self):
 cardNum = input("請輸入您的卡號(hào):")
 # 驗(yàn)證是否存在該卡號(hào)
 user = self.allUsers.get(cardNum)
 if not user:
 print("該卡號(hào)不存在!!查詢失敗")
 return -1
 if user.card.cardLock:
 print("該卡已被鎖定?。≌埥怄i后在進(jìn)行其他操作!")
 return -1

 # 驗(yàn)證密碼
 if not self.checkPasswd(user.card.cardPasswd):
 print("密碼輸入錯(cuò)誤?。≡摽ㄒ驯绘i定??!請解鎖后在進(jìn)行其他操作!")
 user.card.cardLock = True
 return -1

 # 進(jìn)行到這一步說明卡號(hào)信息都正確,進(jìn)行取款操作
 theMoney = int(input("請輸入您需要取款的金額:"))
 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("請輸入您的卡號(hào):")
 # 驗(yàn)證是否存在該卡號(hào)
 user = self.allUsers.get(cardNum)
 if not user:
 print("該卡號(hào)不存在?。〔樵兪?quot;)
 return -1
 if user.card.cardLock:
 print("該卡已被鎖定?。≌埥怄i后在進(jìn)行其他操作!")
 return -1

 # 驗(yàn)證密碼
 if not self.checkPasswd(user.card.cardPasswd):
 print("密碼輸入錯(cuò)誤??!該卡已被鎖定!!請解鎖后在進(jìn)行其他操作!")
 user.card.cardLock = True
 return -1

 # 進(jìn)行到這一步說明卡號(hào)信息都正確,進(jìn)行存款操作
 theMoney = int(input("請輸入您需要存款的金額:"))
 if theMoney < 0:
 print("您輸入金額有誤!!")
 else:
 user.card.cardMoney += theMoney
 print("存款成功??! 余額為:%d" % user.card.cardMoney)

 # 轉(zhuǎn)賬
 def transferMoney(self):
 cardNum = input("請輸入您的卡號(hào):")
 # 驗(yàn)證是否存在該卡號(hào)
 user = self.allUsers.get(cardNum)
 if not user:
 print("該卡號(hào)不存在!!查詢失敗")
 return -1
 if user.card.cardLock:
 print("該卡已被鎖定?。≌埥怄i后在進(jìn)行其他操作!")
 return -1

 # 驗(yàn)證密碼
 if not self.checkPasswd(user.card.cardPasswd):
 print("密碼輸入錯(cuò)誤??!該卡已被鎖定!!請解鎖后在進(jìn)行其他操作!")
 user.card.cardLock = True
 return -1

 # 到這里說明卡號(hào)信息正確,進(jìn)行轉(zhuǎn)賬操作
 theOtherCardId = input("請輸入您需要轉(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("請輸入您需要轉(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))
 # 開始轉(zhuǎn)賬
 theMoney = int(input("請輸入您需要轉(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("請輸入您的卡號(hào):")
 # 驗(yàn)證是否存在該卡號(hào)
 user = self.allUsers.get(cardNum)
 if not user:
 print("該卡號(hào)不存在?。〔樵兪?quot;)
 return -1
 if user.card.cardLock:
 print("該卡已被鎖定??!請解鎖后在進(jìn)行其他操作!")
 return -1

 # 驗(yàn)證密碼
 if not self.checkPasswd(user.card.cardPasswd):
 print("密碼輸入錯(cuò)誤!!該卡已被鎖定?。≌埥怄i后在進(jìn)行其他操作!")
 user.card.cardLock = True
 return -1

 # 下面進(jìn)行改密操作
 newPasswd = input("請輸入新密碼:")
 if newPasswd == user.card.cardPasswd:
 print("新舊密碼不能一致?。〔僮魇?quot;)
 return -1
 # 驗(yàn)證密碼
 if not self.checkPasswd(newPasswd):
 print("密碼輸入錯(cuò)誤??!")
 return -1
 user.card.cardPasswd = newPasswd
 print("密碼修改成功!!請牢記您的密碼")

 # 鎖定
 def lockUser(self):
 cardNum = input("請輸入您的卡號(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("該卡已被鎖定!!請解鎖后再使用其他功能")
 return -1
 # 驗(yàn)證密碼
 if not self.checkPasswd(user.card.cardPasswd):
 print("密碼輸入錯(cuò)誤?。℃i定失敗")
 return -1
 tempIdCard = input("請輸入您的身份證號(hào)碼")
 if tempIdCard != user.idCard:
 print("身份證輸入錯(cuò)誤??!鎖定失敗")
 return -1
 # 進(jìn)行到這一步說明信息輸入成功,鎖定開始
 user.card.cardLock = True
 print("鎖定成功")

 # 解鎖
 def unlockUser(self):
 cardNum = input("請輸入您的卡號(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("該卡沒有被鎖定!!無需解鎖")
 return -1
 # 驗(yàn)證密碼
 if not self.checkPasswd(user.card.cardPasswd):
 print("密碼輸入錯(cuò)誤?。℃i定失敗")
 return -1
 tempIdCard = input("請輸入您的身份證號(hào)碼")
 if tempIdCard != user.idCard:
 print("身份證輸入錯(cuò)誤??!鎖定失敗")
 return -1
 # 進(jìn)行到這一步說明信息輸入成功,解鎖開始
 user.card.cardLock = False
 print("解鎖成功")

 # 補(bǔ)卡
 def newCard(self):
 cardNum = input("請輸入您的卡號(hào):")
 # 驗(yàn)證是否存在該卡號(hào)
 user = self.allUsers.get(cardNum)
 if not user:
 print("該卡號(hào)不存在??!查詢失敗")
 return -1
 if user.card.cardLock:
 print("該卡已被鎖定!!請解鎖后在進(jìn)行其他操作!")
 return -1

 # 驗(yàn)證密碼
 if not self.checkPasswd(user.card.cardPasswd):
 print("密碼輸入錯(cuò)誤!!該卡已被鎖定??!請解鎖后在進(jìn)行其他操作!")
 user.card.cardLock = True
 return -1

 CardName = input("請輸入您的姓名:")
 # 驗(yàn)證姓名是否正確
 if user.name != CardName:
 print("姓名輸入錯(cuò)誤??!")
 return -1

 useridCard = input("請輸入您的身份證號(hào)碼:")
 # 驗(yàn)證身份證是否正確
 if user.idCard != useridCard:
 print("身份證號(hào)碼輸入錯(cuò)誤!!")
 return -1

 # 進(jìn)行到這一步說明信息都正確,下面進(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 請牢記?。?quot; % user.card.cardId)

 # 銷戶
 def killUser(self):
 cardNum = input("請輸入您的卡號(hào):")
 # 驗(yàn)證是否存在該卡號(hào)
 user = self.allUsers.get(cardNum)
 if not user:
 print("該卡號(hào)不存在??!查詢失敗")
 return -1
 if user.card.cardLock:
 print("該卡已被鎖定?。≌埥怄i后在進(jìn)行其他操作!")
 return -1

 # 驗(yàn)證密碼
 if not self.checkPasswd(user.card.cardPasswd):
 print("密碼輸入錯(cuò)誤!!該卡已被鎖定?。≌埥怄i后在進(jìn)行其他操作!")
 user.card.cardLock = True
 return -1

 CardName = input("請輸入您的姓名:")
 # 驗(yàn)證姓名是否正確
 if user.name != CardName:
 print("姓名輸入錯(cuò)誤?。?quot;)
 return -1

 useridCard = input("請輸入您的身份證號(hào)碼:")
 # 驗(yàn)證身份證是否正確
 if user.idCard != useridCard:
 print("身份證號(hào)碼輸入錯(cuò)誤??!")
 return -1

 answer = input("請問您確定要銷戶嗎?確定(1) 取消(2)")
 if answer == "1" or answer == "確定":
 del self.allUsers[cardNum]
 print("已銷戶")
 return -1
 elif answer == "2" or answer == "取消":
 print("取消成功!!")
 return -1
 else:
 print("輸入錯(cuò)誤?。?quot;)
 return -1

 # 驗(yàn)證密碼
 def checkPasswd(self, realPasswd):
 for i in range(3):
 tempPasswd = input("請?jiān)俅屋斎朊艽a:")
 if tempPasswd == realPasswd:
 return True

 return False

 def randomCardId(self):
 while True:
 str = ""
 for i in range(6):
 # 隨機(jī)生成一個(gè)數(shù)字
 ch = chr(random.randrange(ord("0"), ord("9") + 1))
 str += ch

 # 判斷是否重復(fù)
 if not self.allUsers.get(str):
 return str

alluser.txt源代碼

?}q X 123456qcuser
User
q)?q}q(X nameqX 1qX idCardqhX phoneqhX cardq ccard
Card
q
)?q }q (X cardIdq
hX
 cardPasswdqhX cardMoneyqKX cardLockq?ububs.

因?yàn)檫\(yùn)用pickle庫,要持久化存儲(chǔ)用戶信息(字典),故打開讀取寫入會(huì)亂碼,第一排中的123456是卡號(hào),其他信息全部是1,不要試圖pycharm中修改這個(gè)allUsers。txt文件,否則會(huì)產(chǎn)生無法啟動(dòng)程序的bug,這個(gè)筆者也不知道該如何改進(jìn)亂碼現(xiàn)象,希望讀者能優(yōu)化

如果遇到因?yàn)閍lluser.txt而無法運(yùn)行的情況:請往下看:

因?yàn)閜ickle庫的原因,開始我們是要讀取這個(gè)文件的,讀的到程序順利,讀不到程序涼涼,故我們必須要在alluser.txt里面有pickle庫可以識(shí)別的源代碼。如果您是在pycharm里面復(fù)制粘貼的因?yàn)閍lluser.txt代碼,故pycharm會(huì)自動(dòng)轉(zhuǎn)化為utf-8或者其他

我們要先把a(bǔ)lluser.txt刪除,讓pickle庫先不讀取,創(chuàng)建一個(gè)空字典,我們先開戶,然后退出程序是會(huì)自動(dòng)創(chuàng)建一個(gè)新的alluser.txt文件,會(huì)把我們剛剛創(chuàng)建好的用戶信息全部保存在txt文件中,這樣我們再恢復(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)行開戶操作,最后退出,會(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é)果:

使用python實(shí)現(xiàn)銀行實(shí)戰(zhàn)系統(tǒng)的案例

感謝各位的閱讀!關(guān)于“使用python實(shí)現(xiàn)銀行實(shí)戰(zhàn)系統(tǒng)的案例”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI