'''銀行管理員頁面系統設計:card 類: cardId password moneyuser 類: username phone id cards[]銀行的工作人員: 賬號 密碼 登錄 展現管理系統所有功能Bank類:開戶取錢存錢轉賬銷戶查賬解鎖...'''
import pickle
import random# 銀行卡
import time#card 類
class Card:def __init__(self, cardid, password, money):self.cardid = cardidself.password = passwordself.money = moneyself.cardlock = Falsedef __str__(self):return '卡號:{},余額:{}'.format(self.cardid, self.money)# 創建用戶類
class User:def __init__(self, uid, name, phone, card): # 此時的card,而是一個card對象self.uid = uidself.name = nameself.phone = phoneself.card = carddef __str__(self):return '用戶名:{},聯系方式:{}'.format(self.name, self.phone)#創建銀行工作人員類
class BankWorker:__login_name = 'admina'__password = 'icbc111'def printWelcomePage(self):print('----------------------------')print(' 歡迎使用ICBC管理系統 ')print('----------------------------')def workerLogin(self):login_name = input('輸入賬戶名:')password = input('輸入密碼:')if self.__login_name != login_name:print('賬戶名輸入有誤!')return -1if self.__password != password:print('密碼輸入有誤!')return -1print('登錄成功,加載中....')time.sleep(2)return 0def bankFunction(self):s = '''
功能如下:1. 開戶 2. 取錢 3. 存錢4. 轉賬 5. 銷戶 6. 查賬7. 解鎖 8. 改密 9. 修改信息10. 退出'''print(s)# 創建Bank類class Bank:def __init__(self, users):self.users = usersdef create_user(self):# uid, name, phone, carduid = input('輸入身份證號碼:')name = input('輸入姓名:')phone = input('輸入手機號碼:')# 對card 進行操作# 產生卡號cardid = self.generate_cardid()# 輸入密碼password = input('請輸入密碼:')repassword = input('再次輸入密碼:')if password and repassword:if password == repassword:print('密碼設置成功!')else:print('兩次密碼不一致!')return -1else:print('必須輸入密碼!')return -1# moneymoney = 0card = Card(cardid, password, money)user = User(uid, name, phone, card)# 通過字典將卡號與用戶進行綁定self.users[cardid] = userprint('恭喜{}開戶成功!卡號是:{}'.format(name,cardid))def generate_cardid(self):no = '62'for i in range(3):n = random.randint(0, 9)no += str(n)return nodef save_money(self):islogin, user = self.user_login()if not islogin:return -1# 輸入存款金額money = int(input('驗證成功!請輸入存款金額:'))# 存錢成功if money <= 0:print('存款金額必須大于0,存款失敗!')return -1user.card.money += moneyprint('您成功存款:{},賬戶余額是:{}'.format(money, user.card.money))def withdraw_money(self):islogin, user = self.user_login()if not islogin:return -1## 輸入取款金額money = int(input('驗證成功!請輸入取款金額:'))if money <= 0:print('取款金額必須要大于0!取款失敗!')return -1if money > user.card.money:print('卡中余額不足,取款失敗!')return -1user.card.money -= moneyprint('您成功取款:{},賬戶余額是:{}'.format(money, user.card.money))def transfer_accounts(self):islogin, user = self.user_login()if not islogin:return -1# 輸入轉賬金額money = int(input('驗證成功!請輸入轉賬金額:'))if money < 0 or money > user.card.money:print("金額輸入有誤或者賬戶金額不足,轉賬失敗!")return -1cardid = input('輸入收款人的卡號:')other_user = self.users.get(cardid)# 有沒有這個卡號對應用戶if not other_user:print('不存在此卡號,轉賬失敗!')return -1# 如果有這個用戶,此卡是否被鎖定if other_user.card.cardlock:print('該卡已經鎖定,無法完成轉賬')return -1print('轉賬中請稍后.....')user.card.money -= moneyother_user.card.money += moneytime.sleep(1)print('成功轉賬:{},卡中余額是:{}'.format(money, user.card.money))def user_login(self):cardid = input('輸入銀行卡號:')user = self.users.get(cardid, None)# 有沒有這個卡號對應用戶if not user:print('不存在此卡號,存款失敗!')return False, user# 如果有這個用戶,此卡是否被鎖定if user.card.cardlock:print('該卡已經鎖定,請解鎖...')return False, user# 如果沒有鎖定則需要輸入密碼,如果密碼輸入錯誤三次則鎖定此卡r = self.check_password(user.card.password)if not r:# 鎖定賬戶print('密碼連續3次輸入錯誤,此卡鎖定!')return False, userreturn True, userdef check_password(self, password):for i in range(3):pwd = input('輸入登錄密碼:')if pwd == password:return Truereturn Falsedef update_password(self):islogin, user = self.user_login()if not islogin:return -1# 修改密碼new_pwd = input('輸入新密碼:')renew_pwd = input('再次輸入新密碼:')if not new_pwd or not renew_pwd:print('密碼不能為空,修改密碼失敗!')return -1if new_pwd != renew_pwd:print('密碼不一致,修改密碼失敗!!')return -1user.card.password = new_pwdprint('修改密碼成功!')def update_msg(self):islogin, user = self.user_login()if not islogin:return -1# 修改手機號new_phone = input('輸入新密碼:')renew_phone= input('再次輸入新密碼:')if not new_phone or not renew_phone:print('手機號不能為空,修改失敗!')return -1if new_phone != renew_phone:print('輸入不一致,修改失敗!!')return -1user.card.phone = new_phoneprint('修改手機號成功!')def del_user(self):islogin, user = self.user_login()if not islogin:return -1answer = input('確認要注銷用戶嗎?(yes/no)')if answer == 'yes':del self.users[user.card.cardid]time.sleep(1)print('賬戶注銷成功!')def select_user(self):islogin, user = self.user_login()if not islogin:return -1print(user)print('卡號:{}的賬戶金額是:{}'.format(user.card.cardid, user.card.money))def unlock_user(self):cardid = input('輸入銀行卡號:')user = self.users.get(cardid, None)# 有沒有這個卡號對應用戶if not user:print('不存在此卡號,存款失敗!')return -1uid = input('輸入身份證號碼:')if user.uid != uid:print('無效的身份證號碼!解鎖失敗!')return -1user.card.cardlock = Falseprint('解鎖成功!')# 入口
def main():# 1. 創建銀行工作人員類bworker = BankWorker()# 2.加載歡迎頁面bworker.printWelcomePage()# 3.登錄r = bworker.workerLogin()if r == -1:return -1# 加載數據庫中的數據:# with open('users.txt', 'rb') as rs:# users = pickle.load(rs)users = {}# print(users)
# 516237458697000bank = Bank(users)while True:bworker.bankFunction()choice = input('請選擇功能:')if choice == '1':print('----------開戶----------')bank.create_user()elif choice == '2':# 取錢print('----------取錢----------')bank.withdraw_money()elif choice == '3':# 存錢print('----------存錢----------')bank.save_money()elif choice == '4':# 轉賬print('----------轉賬----------')bank.transfer_accounts()elif choice == '5':print('----------銷戶----------')bank.del_user()elif choice == '6':print('----------查賬----------')bank.select_user()elif choice == '7':print('----------解鎖----------')bank.unlock_user()elif choice == '8':print('----------改密----------')bank.update_password()elif choice == '9':print('----------修改手機號----------')bank.update_msg()elif choice == '10':# 退出answer = input('是否確定退出?(yes/no)')if answer.lower() == 'yes':print('退出中.......')time.sleep(2)with open('users.txt', 'wb') as ws:pickle.dump(bank.users, ws)print('退出完成!')breakif __name__ == '__main__':main()
?