目次
1. 準備
2. 変換の考え方
上記の 2 つのクラスは、銀行カードの顧客向けの初期化です。必要な属性がリストされています。たとえば、カードを置き換えるには ID カードを使用する必要があります。ここでは、ID 番号などに置き換えられます。 。このうち、人物の属性のカードは上で定義したカードであり、人物のカード属性にはカードのいくつかの内部属性が含まれます。
ホームページ バックエンド開発 Python チュートリアル Python の実践的な小規模プロジェクト - 銀行システムの実装

Python の実践的な小規模プロジェクト - 銀行システムの実装

Oct 26, 2018 pm 06:02 PM
python

この記事の内容は、Python の実践的な小規模プロジェクトの銀行システムの実装を紹介することです。一定の参考値があるので、困っている友人は参考にしていただければ幸いです。

誰もが知っているように、プログラミング プロセスで理論的知識がどれほど充実していても、プロジェクトの錬金術の石を通過する必要があります。私の見習いが取り組んだ小さなプロジェクトの実際的な要件をお見せしましょう。それは銀行システムを構築することです。私たちが取引をするために銀行に行くと、そこにはセルフサービスの ATM 機があります。現在、ほとんどの業務は彼によって解決されました。まず、オブジェクト指向の考え方を使用してこのシステムを実装するにはどうすればよいかを自分で考えてください。そこにはどんな物体があるのでしょうか?それぞれの機能は何ですか?考えれば考えるほど良いものであり、実行する際には問題に遭遇し、それを解決することになりますが、その過程では多くの問題があり、解決するのは簡単ではありませんが、その過程を通じて新たな学びが得られます。

1. 準備

まず、銀行のドアに入り、行員がどのような業務を処理する必要があるかを尋ねます。もちろん、真実を伝える必要がありますが、これはシステムとは関係ありません(* ̄︶ ̄)。次に、担当する業務が比較的人気があり、機械で完結できるものであれば、巨大な小型機械に連れて行ってくれます。機械を私たちのために機能させるには、まだいくつかの操作が必要ですが、場合によっては、より上級の従業員に指紋の入力を依頼することもあります。これらは、管理者がシステムを起動する場合に理解できます(面倒だと思う人もいますが、ここで私が話しているのは主に銀行にある、単なるATMではなく比較的機能が充実しているものです)。

次に私たちの業務ですが、どのような業務があるのでしょうか?まずいくつか挙げてみましょう: 残高の確認、入金、引き出し、送金、パスワードの変更、紛失の報告やカードのロックも可能で、それに応じてロックを解除することもできます。最も基本的なものを忘れてしまいました。これらの操作はどのように行うことができますか?カードの申し込みをせずに手続きをする場合は、口座開設も必要です(カードの差し替えや口座の解約など)。

現時点では、実際の状況と比較して物理的なカードがないため、いくつかの違いがあります。残りのプロセスについては、思いついたときにお話します。

2. 変換の考え方

実装する機能は大まかに決まりましたが、最終的にはコードに記述する必要があるので、それらの要件をベースに検討する必要があります。プログラミングの視点。

まず第一に、人間から銀行 ATM まで、このシステムにどのようなオブジェクトが含まれているかを考慮する必要があります。人、キャッシュカード、ATM、この3つが必須ですが、他に何が必要になるでしょうか? 私たちが業務を行う際、多くの業務を手伝ってくれるのはユーザーとは別人であり、物として扱います。 ######人々。人間という対象はどのような性質を持っているのでしょうか?人々は自分自身の情報やキャッシュカードを持っており、残りの業務を人為的に決定します。 ######カード。カードにはそれ自体に関する情報も含まれています。

ATM。 ATMにはさらに多くの機能がありますが、まず第一に、上記の入金と引き出しの機能を実装する必要があります。さらにスタッフによる手術もあり、それにも対応しなければならない。

スタッフ。彼らはシステムをオンまたはオフにする権限を持っています。

大まかな方向性は決まったので、あとは少しずつ完成させていくだけです。

3. 関数の実装

簡単なものから始めましょう 前述したように、顧客とカードの属性は比較的単純なので、最初にそれらを解決しましょう。

# 银行卡:卡号,卡的密码,余额
class Card(object):
def __init__(self, cardId, cardPasswd, cardMoney):
  self.cardId = cardId
  self.cardPasswd = cardPasswd
  self.cardMony = cardMoney
ログイン後にコピー
 # 客户:姓名,身份证号,手机号,银行卡(性别年龄那些只是多了个属性,操作时一样的,就不多写了)
 class User(object):
     def __init__(self, name, idCard, phone, card):
         self.name = name
         self.idCard = idCard
         self.phone = phone
         self.card = card
ログイン後にコピー

上記の 2 つのクラスは、銀行カードの顧客向けの初期化です。必要な属性がリストされています。たとえば、カードを置き換えるには ID カードを使用する必要があります。ここでは、ID 番号などに置き換えられます。 。このうち、人物の属性のカードは上で定義したカードであり、人物のカード属性にはカードのいくつかの内部属性が含まれます。

次に、管理者の機能を記述します:

  import time
  
  class Admin(object):
      # 为管理员设置个账号密码,为了不随便让人能操作一些危险的内容。
      admin = "1"
      passwd = "1"
      
      # 我们把初始的界面就放在管理员的类里了,他是第一个操作这个机器的嘛
      def printAdminView(self):
         print("****************************************************")
         print("*                                                  *")
         print("*                                                  *")
         print("*               欢迎登陆银行                       *")
         print("*                                                  *")
         print("*                                                  *")
         print("****************************************************")
 
     def printSysFunctionView(self):
         print("****************************************************")
         print("*         开户(1)            查询(2)            *")
        print("*         取款(3)            存款(4)            *")
         print("*         转账(5)            改密(6)            *")
        print("*         锁定(7)            解锁(8)            *")
        print("*         补卡(9)            销户(0)            *")
         print("*                    退出(q)                     *")
         print("****************************************************")
 
     # 这里就是开始时候得验证一下是不是管理员,然后再决定是不是给他这些权利
     def adminOption(self):
         inputAdmin = input("请输入管理员账号:") 
         if self.admin != inputAdmin:
             print("输入账号有误!")
             return -1
         inputPasswd = input("请输入管理员密码:")
         if self.passwd != inputPasswd:
             print("密码输入有误!")
             return -1
 
         # 能执行到这里说明账号密码正确
         print("操作成功,请稍后······")
         time.sleep(2)
         return 0
ログイン後にコピー

上記のコードには time.sleep() があり、これはシステムをより活発にし、システムをシミュレートするための遅延を設定するためのものです。 . 大量のデータを操作する場合の遅延。

最初のいくつかは比較的理解しやすいので、これからシステムの機能の実装を始めます。これらは ATM 機のモジュールに配置されており、必要に応じて戦略を変更したり追加したりできます。


上記のディレクトリの順序に従って、最初に実装される機能はアカウントを開くことです。アカウントを開くには、一連の属性を作成する必要があります。そして、この情報を保管する必要があります。そうしないと、次に来たときに申請したカードが無効になっていることがわかります。この情報はキーと値のペアを使用して保存できるため、どの属性をキーに使用する必要があります。考えてみてください。名前: 名前が重複している可能性があります。ID 番号: この人は複数のカードを申請する可能性があります。最も安全なのはカード番号です。同じ番号のカードが 2 枚存在することはありません。次に、カード番号がキーとして使用され、その他の個人情報と銀行カード情報が値に格納されます。次に、ATM で辞書を初期化します (ここにはまだいくつかの問題があります。これについては後で説明します)。

    def __init__(self, allUsers):
        self.allUsers = allUsers # 用户字典
ログイン後にコピー
  # 开户
 def creatUser(self):
     # 目标:向用户字典中添加一对键值对(卡号->用户)
     name = input("请输入您的名字:")
     idCard = input("请输入您的身份证号:")
     phone = input("请输入您的电话号码:")
     prestoreMoney = int(input("请输入预存款金额:"))
     if prestoreMoney < 0:
         print("预存款输入有误!开户失败")
         return -1
 
     onePasswd = input("请设置密码:")

     # 生成银行卡号
     cardStr = self.randomCardId() #生成号码通过一个函数来实现,让这里的逻辑更清晰一点
     card = Card(cardStr, onePasswd, prestoreMoney) # 把卡的信息放到这张卡的对象中
 
     user = User(name, idCard, phone, card) # 个人信息也存入客户的对象中
     # 存到字典
     self.allUsers[cardStr] = user # 这就实现了通过一个银行卡号来索引个人信息以及里面的银行卡属性
     print("开户成功!请记住卡号:" + cardStr)
ログイン後にコピー

上記では銀行カードの生成については言及されていません。これは実際には難しくありません。一連の番号をランダムに生成するだけです。ただし、このランダムに生成された番号を前のカード番号と繰り返してはなりません。そうしないと、インデックスが問題があります。

 # 生成卡号
 def randomCardId(self):
     while True:
         str = ""
         for i in range(6):
             ch = chr(random.randrange(ord("0"), ord("9") + 1))
             str += ch
         # 判断是否重复
         if not self.allUsers.get(str): # 这里是通过找一下原来的字典中是否有这个key,如果没有的话那么这个卡号就合法,前面要有个not,没有找到这个卡号那么我们创建这个卡号
             return str
ログイン後にコピー

上記で既にアカウントを開設して保存することができますが、実際にアカウントを開設する際には、パスワードを誤って入力しないように、パスワードを 2 回入力する必要があります。パスワードの検証も必要です。パスワードを検証する別の関数を作成することも、将来使用するときにその関数を直接呼び出すこともできます。

 # 验证密码
 def checkPasswd(self, realPasswd): # 这里传入的参数就是我们第一次输入的密码,下面要检验第一次输入是不是有误
     for i in range(3):
         tempPasswd = input("请输入密码:")
         if tempPasswd == realPasswd:
             return True
     return False
ログイン後にコピー

其实后面的一些功能和这个是类似的,这里就不赘述了,先动手试一试,尽量的想的全面些。我会把完整的代码放在最后,可以参考一下。

最终要实现这些功能还是再写一个主程序比较好,更直观,也方便把理清他们之间的关系。首先主程序里需要调用管理员的登录,之后是客户的使用。管理员的登录上面写了,再调用一下就可以。客户的需求需要把每项功能和操作对应起来。先显示出都有哪些功能可以选择,再操作。比如像这样:

  while True:
      admin.printSysFunctionView()
      # 等待用户操作
      option = input("请输入您的操作:")
      if option == "1":
          # print(&#39;开户&#39;)
          atm.creatUser()
      elif option == "2":
          # print("查询")
         atm.searchUserInfo()
     elif option == "3":
         # print("取款")
         atm.getMoney()
     elif option == "4":
         # print("存储")
         atm.saveMoney()
     elif option == "5":
         # print("转账")
         atm.transferMoney()
     elif option == "6":
         # print("改密")
         atm.changePasswd()
     elif option == "7":
         # print("锁定")
         atm.lockUser()
     elif option == "8":
         # print("解锁")
         atm.unlockUser()
     elif option == "9":
         # print("补卡")
         atm.newCard()
     elif option == "0":
         # print("销户")
         atm.killUser()
     elif option == "q":
         # print("退出")
ログイン後にコピー

上面这所有的操作,都需要最终长期存储到键值对中,我们这里先用文件来储存,也可以存储到数据库中。既然要长期存储起来,就得把他序列化到磁盘上,使用pickle库。

 # 每次使用前,需要把内容先加载下来
 filepath = os.path.join(os.getcwd(), "allusers.txt")
 f = open(filepath, "rb")
 allUsers = pickle.load(f)
 atm = ATM(allUsers)
 
 # 而在操作结束的时候,要把操作过的内容重新写到磁盘中
 f = open(filepath, "wb")
 pickle.dump(atm.allUsers, f)
 f.close()
ログイン後にコピー

到这里就出现了个问题,pickle.load(),当我们第一次使用时里面并没有存储东西,他自然也就不知道我们想要存储什么样格式的内容。所以第一次我们得手动的创建一个空字典,然后将一组信息存进去。下回使用的时候就可以直接load来使用。

在一开始测试的时候记不得里面存储的内容,我就先写了个查看信息的隐藏功能。后来感觉也许银行后台应该也有这样的功能,就没有删掉,虽然是很简单的显示,至少可以体现出他的思想。有兴趣的同学可以做的更好点。

 # 这是上面使用这个功能的入口,并没有显式的展示出来,仅当管理员这样操作时会调用函数
 elif option == "1122332244":
     admin.ban(allUsers)
 
 # 这里是调用函数后显示所有存储的信息的内容
 def ban(self, allUsers):
     for key in allUsers:
         print("账号:" + key + "\n" + "姓名:" + allUsers[key].name + "\n" + "身份证号:" + allUsers[key].idCard + "\n" + "电话号码:" + allUsers[
                 key].phone + "\n" + "银行卡密码:" + allUsers[key].card.cardPasswd + "\n")
ログイン後にコピー

上面我只是把系统的其中一部分拿出来解释了一下,需要把里面的功能完善一下。比如把密码验证等等得放到功能里面,还有一些面向对象的操作,需要创建对象,还需要考虑到每个对象之间的关系,比如银行卡的对象作为客户对象的属性,需要通过参数传进去。仔细琢磨一下,把这个系统完成。在下面放上完整的程序,上面东西不是很清晰的话,那就一点一点的看下面的代码,找找感觉。

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  # 后面到了锁卡的时候需要有个卡的状态


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("*         开户(1)            查询(2)            *")
        print("*         取款(3)            存款(4)            *")
        print("*         转账(5)            改密(6)            *")
        print("*         锁定(7)            解锁(8)            *")
        print("*         补卡(9)            销户(0)            *")
        print("*                    退出(q)                     *")
        print("****************************************************")

    def adminOption(self):
        inputAdmin = input("请输入管理员账号:")
        if self.admin != inputAdmin:
            print("输入账号有误!")
            return -1
        inputPasswd = input("请输入管理员密码:")
        if self.passwd != inputPasswd:
            print("密码输入有误!")
            return -1

        # 能执行到这里说明账号密码正确
        print("操作成功,请稍后······")
        time.sleep(2)
        return 0

    def ban(self, allUsers):
        for key in allUsers:
            print("账号:" + key + "\n" + "姓名:" + allUsers[key].name + "\n" + "身份证号:" + allUsers[key].idCard + "\n" + "电话号码:" + allUsers[
                key].phone + "\n" + "银行卡密码:" + allUsers[key].card.cardPasswd + "\n")


class ATM(object):
    def __init__(self, allUsers):
        self.allUsers = allUsers # 用户字典

    # 开户
    def creatUser(self):
        # 目标:向用户字典中添加一对键值对(卡号->用户)
        name = input("请输入您的名字:")
        idCard = input("请输入您的身份证号:")
        phone = input("请输入您的电话号码:")
        prestoreMoney = int(input("请输入预存款金额:"))
        if prestoreMoney < 0:
            print("预存款输入有误!开户失败")
            return -1

        onePasswd = input("请设置密码:")
        # 验证密码
        if not self.checkPasswd(onePasswd):
            print("输入密码错误,开户失败!")
            return -1

        # 生成银行卡号
        cardStr = self.randomCardId()
        card = Card(cardStr, onePasswd, prestoreMoney)

        user = User(name, idCard, phone, card)
        # 存到字典
        self.allUsers[cardStr] = user
        print("开户成功!请记住卡号:" + cardStr)

    # 查询
    def searchUserInfo(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,查询失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1
        print("账号:%s   余额:%d" % (user.card.cardId, user.card.cardMony))

    # 取款
    def getMoney(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,取款失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1

        # 开始取款
        amount = int(input("验证成功!请输入取款金额:"))
        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("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,存款失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1

        # 开始存款
        amount = int(input("验证成功!请输入存款金额:"))
        if amount < 0:
            print("存款金额有误,存款失败!")
            return -1
        user.card.cardMony += amount
        print("您存款%d元,最新余额为%d元!" % (amount, user.card.cardMony))

    # 转账
    def transferMoney(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,转账失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1

        # 开始转账
        amount = int(input("验证成功!请输入转账金额:"))
        if amount > user.card.cardMony or amount < 0:
            print("金额有误,转账失败!")
            return -1

        newcard = input("请输入转入账户:")
        newuser = self.allUsers.get(newcard)
        if not newuser:
            print("该卡号不存在,转账失败!")
            return -1
        # 判断是否锁定
        if newuser.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1
        user.card.cardMony -= amount
        newuser.card.cardMony += amount
        time.sleep(1)
        print("转账成功,请稍后···")
        time.sleep(1)
        print("转账金额%d元,余额为%d元!" % (amount, user.card.cardMony))

    # 改密
    def changePasswd(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,改密失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1
        print("正在验证,请稍等···")
        time.sleep(1)
        print("验证成功!")
        time.sleep(1)

        # 开始改密
        newPasswd = input("请输入新密码:")
        if not self.checkPasswd(newPasswd):
            print("密码错误,改密失败!")
            return -1
        user.card.cardPasswd = newPasswd
        print("改密成功!请稍后!")

    # 锁定
    def lockUser(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,锁定失败!")
            return -1
        if user.card.cardLock:
            print("该卡已被锁定,请解锁后再使用其功能!")
            return -1
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,锁定失败!")
            return -1
        tempIdCard = input("请输入您的身份证号码:")
        if tempIdCard != user.idCard:
            print("身份证号输入有误,锁定失败!")
            return -1
        # 锁定
        user.card.cardLock = True
        print("锁定成功!")


    # 解锁
    def unlockUser(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,解锁失败!")
            return -1
        if not user.card.cardLock:
            print("该卡未被锁定,无需解锁!")
            return -1
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,解锁失败!")
            return -1
        tempIdCard = input("请输入您的身份证号码:")
        if tempIdCard != user.idCard:
            print("身份证号输入有误,解锁失败!")
            return -1
        # 解锁
        user.card.cardLock = False
        print("解锁成功!")

    # 补卡
    def newCard(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在!")
            return -1
        tempname = input("请输入您的姓名:")
        tempidcard = input("请输入您的身份证号码:")
        tempphone = input("请输入您的手机号码:")
        if tempname != self.allUsers[cardNum].name\
                or tempidcard != self.allUsers.idCard\
                or tempphone != self.allUsers.phone:
            print("信息有误,补卡失败!")
            return -1
        newPasswd = input("请输入您的新密码:")
        if not self.checkPasswd(newPasswd):
            print("密码错误,补卡失败!")
            return -1
        self.allUsers.card.cardPasswd = newPasswd
        time.sleep(1)
        print("补卡成功,请牢记您的新密码!")

    # 销户
    def killUser(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,转账失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1

        del self.allUsers[cardNum]
        time.sleep(1)
        print("销户成功,请稍后!")

    # 验证密码
    def checkPasswd(self, realPasswd):
        for i in range(3):
            tempPasswd = input("请输入密码:")
            if tempPasswd == realPasswd:
                return True
        return False

    # 生成卡号
    def randomCardId(self):
        while True:
            str = ""
            for i in range(6):
                ch = chr(random.randrange(ord("0"), ord("9") + 1))
                str += ch
            # 判断是否重复
            if not self.allUsers.get(str):
                return str


# 主函数,不在上面的类中
def main():
    # 界面对象
    admin = Admin()

    # 管理员开机
    admin.printAdminView()
    if admin.adminOption():
        return -1

    # 由于一开始文件里并没有数据,不知道要存的是个字典,先存一个,后面再把这个关了
    # allUsers = {}

    # 提款机对象
    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("请输入您的操作:")
        if option == "1":
            # print(&#39;开户&#39;)
            atm.creatUser()
        elif option == "2":
            # print("查询")
            atm.searchUserInfo()
        elif option == "3":
            # print("取款")
            atm.getMoney()
        elif option == "4":
            # print("存储")
            atm.saveMoney()
        elif option == "5":
            # print("转账")
            atm.transferMoney()
        elif option == "6":
            # print("改密")
            atm.changePasswd()
        elif option == "7":
            # print("锁定")
            atm.lockUser()
        elif option == "8":
            # print("解锁")
            atm.unlockUser()
        elif option == "9":
            # print("补卡")
            atm.newCard()
        elif option == "0":
            # print("销户")
            atm.killUser()
        elif option == "q":
            # print("退出")
            if not admin.adminOption():
                # 将当前系统中的用户信息保存到文件当中
                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()
ログイン後にコピー

上面就是整个系统了,其实主要还是思想,模块较多,没有全部解释,如果程序当中有哪里不理解,可以留言讨论。注意上述完整代码主要是供大家了解整个系统,想要实现还需在自己电脑上重新配置,注意那些文件的路径,还有一个存放信息的txt文件,把他搞懂后,相信让他运行起来不难。

以上がPython の実践的な小規模プロジェクト - 銀行システムの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

CentosのPytorchのGPUサポートはどのようにサポートされていますか CentosのPytorchのGPUサポートはどのようにサポートされていますか Apr 14, 2025 pm 06:48 PM

Pytorch GPUアクセラレーションを有効にすることで、CentOSシステムでは、PytorchのCUDA、CUDNN、およびGPUバージョンのインストールが必要です。次の手順では、プロセスをガイドします。CUDAおよびCUDNNのインストールでは、CUDAバージョンの互換性が決定されます。NVIDIA-SMIコマンドを使用して、NVIDIAグラフィックスカードでサポートされているCUDAバージョンを表示します。たとえば、MX450グラフィックカードはCUDA11.1以上をサポートする場合があります。 cudatoolkitのダウンロードとインストール:nvidiacudatoolkitの公式Webサイトにアクセスし、グラフィックカードでサポートされている最高のCUDAバージョンに従って、対応するバージョンをダウンロードしてインストールします。 cudnnライブラリをインストールする:

Python vs. JavaScript:コミュニティ、ライブラリ、リソース Python vs. JavaScript:コミュニティ、ライブラリ、リソース Apr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Dockerの原則の詳細な説明 Dockerの原則の詳細な説明 Apr 14, 2025 pm 11:57 PM

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

ミニオペンCentosの互換性 ミニオペンCentosの互換性 Apr 14, 2025 pm 05:45 PM

MINIOオブジェクトストレージ:CENTOSシステムの下での高性能展開Minioは、Amazons3と互換性のあるGO言語に基づいて開発された高性能の分散オブジェクトストレージシステムです。 Java、Python、JavaScript、Goなど、さまざまなクライアント言語をサポートしています。この記事では、CentosシステムへのMinioのインストールと互換性を簡単に紹介します。 Centosバージョンの互換性Minioは、Centos7.9を含むがこれらに限定されない複数のCentosバージョンで検証されています。

CentosでPytorchの分散トレーニングを操作する方法 CentosでPytorchの分散トレーニングを操作する方法 Apr 14, 2025 pm 06:36 PM

Pytorchの分散トレーニングでは、Centosシステムでトレーニングには次の手順が必要です。Pytorchのインストール:PythonとPipがCentosシステムにインストールされていることです。 CUDAバージョンに応じて、Pytorchの公式Webサイトから適切なインストールコマンドを入手してください。 CPUのみのトレーニングには、次のコマンドを使用できます。PipinstalltorchtorchtorchvisionTorchaudioGPUサポートが必要な場合は、CUDAとCUDNNの対応するバージョンがインストールされ、インストールに対応するPytorchバージョンを使用してください。分散環境構成:分散トレーニングには、通常、複数のマシンまたは単一マシンの複数GPUが必要です。場所

CentosでPytorchバージョンを選択する方法 CentosでPytorchバージョンを選択する方法 Apr 14, 2025 pm 06:51 PM

PytorchをCentosシステムにインストールする場合、適切なバージョンを慎重に選択し、次の重要な要因を検討する必要があります。1。システム環境互換性:オペレーティングシステム:Centos7以上を使用することをお勧めします。 Cuda and Cudnn:PytorchバージョンとCudaバージョンは密接に関連しています。たとえば、pytorch1.9.0にはcuda11.1が必要ですが、pytorch2.0.1にはcuda11.3が必要です。 CUDNNバージョンは、CUDAバージョンとも一致する必要があります。 Pytorchバージョンを選択する前に、互換性のあるCUDAおよびCUDNNバージョンがインストールされていることを確認してください。 Pythonバージョン:Pytorch公式支店

PytorchをCentosの最新バージョンに更新する方法 PytorchをCentosの最新バージョンに更新する方法 Apr 14, 2025 pm 06:15 PM

PytorchをCentosの最新バージョンに更新すると、次の手順に従うことができます。方法1:PIPでPIPを更新する:最初にPIPが最新バージョンであることを確認します。これは、PIPの古いバージョンがPytorchの最新バージョンを適切にインストールできない可能性があるためです。 pipinstall- upgradepipアンインストール古いバージョンのpytorch(インストールの場合):pipuninstorchtorchtorchvisiontorchaudioインストール最新

See all articles