銀行系統ps:不太完善,蟹蟹評論

来源:https://www.cnblogs.com/lzw19951020/archive/2018/08/06/9434006.html
-Advertisement-
Play Games

# 主程式運行 import time from guanli import GuanLi from atm import ATM from user import User def main(): guanli = GuanLi()# 創建一個管理對象 guanli.welcome() # 歡迎界... ...





# 主程式運行

import time
from guanli import GuanLi
from atm import ATM
from user import User

def main():
    guanli = GuanLi()# 創建一個管理對象
    guanli.welcome() # 歡迎界面
    guanli.caozuo()  # 管理員登陸驗證
    userinfo = User.load_user()  # 載入已有用戶信息
    atm = ATM(userinfo=userinfo)  # 創建操作對象
    while True:
        guanli.operation()  # 管理菜單的操作方法
        option = (input("請輸入您的操作:"))  # 等待用戶操作
        in_quit = False # 定義一個變數,記錄是否退出操作
        if option == "1":
            # print("開戶")
            atm.kaihu()
        elif option == "2":
            # print("查詢")
            atm.chaxun()
        elif option == "3":
            # print("取款")
            atm.qukuan()
        elif option == "4":
            # print("存款")
            atm.cunkuan()
        elif option == "5":
            # print("轉賬")
            atm.zhuanzhang()
        elif option == "6":
            # print("改密")
            atm.gaimi()
        elif option == "7":
            # print("鎖定")
            atm.suodin()
        elif option == "8":
            # print("解鎖")
            atm.jiesuo()
        elif option == "0":
            # print("銷戶")
            atm.xiaohu()
        elif option == "t":
            in_quit = True
            print("退出成功")
            break
        elif option == "9":
            print("查詢所有用戶信息")
            atm.show()
        else:
            print("操作有誤,請重新操作:")
        time.sleep(2)

 

# 設置一個管理類ps:代碼全程無英文,適合英語不好的新手看
import time
from atm import ATM
from user import User
class GuanLi(object):
    admin = "1"
    passwd = "1"
    def welcome(self):
        print("*" * 30)
        print(" " * 5+"歡迎登陸使用銀行管理系統")
        print("*" * 30)
    def caozuo(self):# 判斷管理員賬號正確
        count = 0
        while True:
            inputAdmin = input("請輸入管理員賬號:")
            inputPasswd = input("請輸入管理員密碼:")
            if self.admin != inputAdmin or self.passwd != inputPasswd:
                print("賬號或密碼輸入有誤!!")
                count +=1
                if count >= 3:
                    print("錯誤次數已達上限,鎖定一小時,1小時後再試")
                    break
                else:
                    continue
            print("操作成功! 請稍後……")
            time.sleep(3)
            return 0
        # 走到這裡說明密碼賬號沒錯
    def operation(self):
        print("*******************************************")
        print("*    開戶(1)                 查詢(2)       *")
        print("*    取款(3)                 存款(4)       *")
        print("*    轉賬(5)                 改密(6)       *")
        print("*    鎖定(7)                 解鎖(8)       *")
        print("*    查詢所有用戶信息(9)            銷戶(0) *")
        print("*             退出(t)                      *")
        print("********************************************")

 


#
設置一個卡的類ps:密碼隱藏不太會,哪位大神可評論區留言。蟹蟹 class Card(object): def __init__(self,cid,pwd): self.cid = cid # 卡號 self.pwd = pwd # 密碼 self.money = 0 # 餘額 self.is_lock = False # 是否鎖定,預設不是

 


#
設置一個用戶類ps:包括用戶信息 from os import path import os import pickle class User(object): def __init__(self, name, uid, card): self.name = name # 用戶名 self.uid = uid # 身份證 self.card = card # 銀行卡 def __str__(self): return ("姓名:{},身份證號:{},卡號:{}".format(self.name,self.uid,self.card.cid)) # 將用戶對象保存到文件中 @staticmethod def all_user(userinfo): pathname = path.join(os.getcwd(),"userinfo.db") with open(pathname, "wb") as fp: pickle.dump(userinfo, fp) # 從文件中載入數據重新轉換為用戶對象 @staticmethod def load_user(): pathname = path.join(os.getcwd(), "userinfo.db") if path.exists(pathname): with open(pathname, "rb") as fp: userinfo = pickle.load(fp) return userinfo else: return {}

 

#設置一個輔助類
from random import  randint
# 生成隨機的銀行卡號
class BankCard():
    def get_cid(length=8):
        cid = ""
        for i in range(8):
            cid += str(randint(0, 9))
        return cid

 


#
創建一個ATM操作類 import time import random from card import Card from helper import BankCard from user import User class ATM(object): def __init__(self,userinfo): self.userinfo = userinfo # 保存所有的用戶信息 def kaihu(self): # 開戶,目標是向用戶列表中添加一對鍵值對(卡號:用戶) name = input("請輸入您的姓名:") uid = input("請輸入身份證號:") pwd = input("請輸入密碼:") cid = BankCard.get_cid() card = Card(cid, pwd) user = User(name, uid, card) print(user) print("開戶成功") self.userinfo[cid] = user User.all_user(self.userinfo) def chaxun(self): # 查詢 cid = input("請輸入您的卡號") user = self.userinfo.get(cid) if user: if user.card.is_lock: print("該卡已鎖定,請先解鎖!") return else: print("正在查詢,請稍後") time.sleep(1.5) print("賬戶餘額:¥{}元".format(user.card.money)) else: print("無效的卡") def qukuan(self): # 取款 cid = input("請輸入您的卡號") user = self.userinfo.get(cid) if user.card.is_lock: print("該卡已鎖定,請先解鎖!") return else: money = (int(input("請輸入您要取款的金額:"))) user.card.money -= money User.all_user(self.userinfo) print("取款成功") def cunkuan(self): # 存款 count = 0 while True: cid = input("請輸入銀行卡號:") user = self.userinfo.get(cid) if user: if user.card.is_lock: print("該卡已鎖定,請先解鎖!") return pwd = input("請輸入您的銀行卡密碼:") if pwd == user.card.pwd: money = input("請輸入您的存款金額:") user.card.money+= int(money) User.all_user(self.userinfo) print("存錢成功") break elif count < 3: print("密碼錯誤") count += 1 if count == 3: user.card.is_lock = True print("該卡被鎖定,請本人攜帶身份證到櫃臺辦理解鎖") user.all_user(self.userinfo) break else: print("無效的卡") def zhuanzhang(self): # 轉賬 count = 0 while count < 3: cid = input("請輸入您的卡號:") user = self.userinfo.get(cid) if user: if user.card.is_lock: print("該卡已鎖定,請先解鎖!") return else: pwd = input("請輸入您的密碼:") if pwd == user.card.pwd: other_cid = input("請輸入收款人的賬戶:") other_user = self.userinfo.get(other_cid) money = int(input("請輸入轉賬的金額:")) if user.card.money >= money: other_user.card.money += money user.card.money -= money user.all_user(self.userinfo) print("轉賬成功") break else: print("密碼錯誤,請重新輸入:") count += 1 continue else: print("無效的卡") def gaimi(self): # 改密 cid = input("請輸入您的卡號:") user = self.userinfo.get(cid) if user: if user.card.is_lock: print("該卡已鎖定,請先解鎖!") return else: pwd = input("請輸入您的銀行卡原密碼:") count = 0 while True : if pwd == user.card.pwd: pwd = input("請輸入您要修改的銀行卡密碼:") pwd1= input("請再次輸入您要修改的銀行卡密碼:") if pwd == pwd1: user.card.pwd = pwd user.all_user(self.userinfo) print("密碼修改成功") break else: print("兩次密碼輸入不一致,請重新輸入:") continue else: print("原密碼輸入有誤!") count += 1 if count >= 3: user.card.is_lock = True print("該卡被鎖定,請本人攜帶身份證到櫃臺辦理解鎖") user.all_user(self.userinfo) break else: print("剩餘輸入次數{}".format(3-count)) def suodin(self): # 鎖定 cid = input("請輸入您的卡號:") user = self.userinfo.get(cid) if user: if user.card.is_lock: print("該卡已被鎖定!") return else: user.card.is_lock = True print("鎖定成功!") user.all_user(self.userinfo) return def jiesuo(self): # 解鎖 cid = input("請輸入您的卡號:") user = self.userinfo.get(cid) if user.card.is_lock: uid = input("請出示您本人的身份證:") if uid == user.uid: user.card.is_lock = False print("解鎖成功") else: print("本銀行暫不支持代解鎖!!!") def show(self): # 查詢所有用戶信息 for u in self.userinfo: print(self.userinfo[u]) def xiaohu(self): # 銷戶 count = 0 while count < 3: cid = input("請輸入您的卡號") user = self.userinfo.get(cid) if user: pwd = input("請輸入您的密碼:") if pwd == user.card.pwd: uid = input("請出示您的身份證:") if uid == user.uid: del self.userinfo[cid] user.all_user(self.userinfo) print("該賬戶已註銷") break else: print("暫不接受代理,ps:你丫逗我玩呢?") else: print("密碼錯誤,請重新輸入:") count += 1 continue else: print("該卡已損壞")

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java的記憶體模型 概念 Java記憶體模型的主要目標是定義程式中各個變數的訪問規則,即在虛擬機中將變數存儲到記憶體中取出變數(這的變數包括實例欄位。靜態欄位和構成數組對象的元素)這樣的底層細節。 為了獲得較好的執行效能。Java記憶體模型沒有限制執行引擎使用處理器的特定寄存器或緩存來和主記憶體進行交互,也 ...
  • 一、數值類型的分類 1、int型: 整數型,所有整數都屬於 2、float型: 浮點型,帶小數點都屬 3、bool型: 布爾類型, 布爾類型只有True和False >>> trueTraceback (most recent call last): File "<stdin>", line 1, ...
  • 當一個類中的方法被多個線程調用時,方法中可能有對公共的資源進行操作,如果不讓它一個個有順序的執行那麼公共資源的數據可能產生錯亂, 解決方法 單例模式 說明: 實現單例模式,也就是這個類一次只能實例化一次,當使用完後才能進行下一次實例化,這樣才能保證這個類里的方法每次只執行一次 最好的單例模式: 用枚 ...
  • 編寫一個函數來查找字元串數組中的最長公共首碼。 如果不存在公共首碼,返回空字元串 ""。 示例 1: 輸入: ["flower","flow","flight"] 輸出: "fl" 示例 2: 輸入: ["dog","racecar","car"] 輸出: "" 解釋: 輸入不存在公共首碼。 說明: ...
  • 前言 為什麼要學習數據結構與演算法,如果你學會了做安卓,javaweb,前端等,都是你的武功秘籍,但是如果你的內功不夠好,再厲害的功夫也是白費。 數據結構和演算法:什麼是數據結構,什麼是數據,在電腦內部數據為01010101。。。,數據是我們生活中一切的事務都可以表示為數據,如你和你朋友聊天的話都是數 ...
  • spring-test依賴包 1、簡單單元測試 2、模擬前端請求單元測試 3、Junit常見異常及解決辦法 異常:java.lang.IllegalStateException: Failed to load ApplicationContext 解決方法:java1.8版本只支持spring4.0 ...
  • 今天小編就為大家分享一篇Python爬蟲獲取圖片並下載保存在本地的實例,具有很好的參考價值,希望對大家有所幫助。一起來看看吧! 1.抓取煎蛋網上的圖片 2.代碼如下 以上這篇Python爬蟲獲取圖片並下載保存至本地的實例就是小編分享給大家的全部內容了,希望給大家一個參考,也希望大家多多支持小編! 那 ...
  • Tesseract是什麼 OCR即光學字元識別,是指通過電子設備掃描紙上的列印的字元,然後翻譯成電腦文字的過程。也就是說通過輸入圖片,經過識別引擎,去識別圖片上的文字。Tesseract是一種適用於各種操作系統的光學字元識別引擎,最早是hp公司的軟體,2005年開源,2006年後由google一直 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...