목차
1. 준비
2. 생각의 변화
3. 기능 구현
백엔드 개발 파이썬 튜토리얼 Python의 실용적인 소규모 프로젝트 - 뱅킹 시스템 구현

Python의 실용적인 소규모 프로젝트 - 뱅킹 시스템 구현

Oct 26, 2018 pm 06:02 PM
python

이 글의 내용은 실용적인 소규모 프로젝트의 뱅킹 시스템 구현을 파이썬으로 소개하는 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

우리 모두 알고 있듯이 프로그래밍 과정에서 이론적 지식이 아무리 풍부하더라도 프로젝트의 연금석을 통과해야 합니다. 제 견습생이 작업한 소규모 프로젝트의 실제 요구 사항을 보여 드리겠습니다. 그것은 은행 시스템을 구축하는 것이었습니다. 우리가 사업을 위해 은행에 갈 때 이제 대부분의 사업은 셀프 서비스 ATM 기계가 있을 것입니다. 그에 의해 해결되었습니다. 먼저 객체 지향적 사고를 사용하여 이 시스템을 구현하는 방법에 대해 스스로 생각해 보십시오. 어떤 물건이 있나요? 각각의 기능은 무엇입니까? 생각을 많이 할수록 좋은데, 구현을 하다 보면 문제가 생기고 해결이 쉽지 않습니다. 하지만 이 과정을 통해 새로운 것을 배울 수 있습니다.

1. 준비

먼저 은행 문으로 들어가면 직원이 어떤 업무를 처리해야 하는지 물어볼 것입니다. 사실을 말씀드리지만, 시스템과는 아무런 관련이 없습니다(* ̄︶ ̄). 다음으로, 처리할 사업이 비교적 인기가 있고 기계로 완료할 수 있다면 그녀는 우리를 거대하고 작은 기계로 데려갈 것입니다. 기계가 우리를 위해 작동하도록 하려면 여전히 몇 가지 작업이 필요합니다. 때때로 우리는 상급 직원에게 지문을 입력하도록 요청할 수 있습니다. 우리는 이것을 관리자가 시스템을 시작하는 것으로 이해할 수 있습니다(어떤 사람들은 그것이 너무 번거롭다고 생각합니다. 주로 제가 여기서 말하는 것은 단지 단순한 ATM이 아니라 상대적으로 완전한 기능을 갖춘 은행에 있는 것들입니다).

다음으로 사업을 처리할 차례입니다. 어떤 종류의 사업이 있나요? 먼저 몇 가지를 나열해 보겠습니다. 잔액 확인, 입금, 출금, 이체, 비밀번호 변경, 분실 신고 및 카드 잠그기 등이 가능하며, 이에 따라 가장 기본적인 작업을 어떻게 수행할 수 있는지 잊어버렸습니다. 카드를 신청하지 않고 계좌를 개설하는 경우에도 카드교체, 계좌해지 등이 포함되어야 합니다.

현 시점에서는 실제 상황에 비해 실물 카드가 없어 약간의 차이가 있을 수 있습니다. 나머지 과정은 생각나는대로 이야기하겠습니다.

2. 생각의 변화

구현해야 할 기능은 대략적으로 결정했지만 결국 코드를 ​​작성해야 하므로 이를 고려해야 합니다. 프로그래밍 관점에서 요구 사항.

우선 사람부터 은행 ATM까지 이 시스템에 어떤 객체가 있는지 고려해야 합니다. 사람, 은행카드, ATM기 이 세 가지는 꼭 필요한 것인데, 사업을 시작할 때 많은 업무를 도와주는 사람은 우리의 사용자와 다릅니다.

사람. 인간 개체는 어떤 속성을 가지고 있습니까? 사람들은 자신만의 정보와 은행카드를 갖고 있고, 우리는 나머지 처리할 업무를 인위적으로 결정합니다.

카드. 카드에는 카드 자체에 대한 몇 가지 정보도 있습니다.

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
로그인 후 복사

위의 두 클래스는 은행 카드 고객을 위한 초기화입니다. 예를 들어 카드를 대체하려면 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 번호: 이 사람은 두 개 이상의 카드를 신청할 수 있습니다. 가장 안전한 것은 카드 번호입니다. 동일한 번호의 카드가 두 개는 없습니다. 그러면 카드번호가 키로 사용되며 기타 개인정보, 은행카드 정보 등이 해당 값에 저장됩니다. 이제 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
로그인 후 복사

위에서 이미 계좌를 개설하고 저장할 수 있지만 실제로 계좌를 개설할 때 실수로 비밀번호가 잘못 입력되지 않도록 비밀번호를 두 번 입력해야 하는 경우도 있습니다. 나중에 기능을 수행하려면 비밀번호 확인이 필요합니다. 비밀번호를 확인하기 위해 다른 함수를 작성할 수도 있고, 나중에 사용할 때 직접 호출할 수도 있습니다.

 # 验证密码
 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP 및 Python : 코드 예제 및 비교 PHP 및 Python : 코드 예제 및 비교 Apr 15, 2025 am 12:07 AM

PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

Centos에서 Pytorch에 대한 GPU 지원은 어떻습니까? Centos에서 Pytorch에 대한 GPU 지원은 어떻습니까? Apr 14, 2025 pm 06:48 PM

CentOS 시스템에서 Pytorch GPU 가속도를 활성화하려면 Cuda, Cudnn 및 GPU 버전의 Pytorch를 설치해야합니다. 다음 단계는 프로세스를 안내합니다. CUDA 및 CUDNN 설치 CUDA 버전 호환성 결정 : NVIDIA-SMI 명령을 사용하여 NVIDIA 그래픽 카드에서 지원하는 CUDA 버전을보십시오. 예를 들어, MX450 그래픽 카드는 CUDA11.1 이상을 지원할 수 있습니다. Cudatoolkit 다운로드 및 설치 : NVIDIACUDATOOLKIT의 공식 웹 사이트를 방문하여 그래픽 카드에서 지원하는 가장 높은 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. Union 파일 시스템 (Unionfs)은 여러 파일 시스템을 스택하고 차이점 만 저장하고 공간을 절약하고 속도를 높입니다. 3. 데몬은 거울과 컨테이너를 관리하고 클라이언트는 상호 작용을 위해 사용합니다. 4. 네임 스페이스 및 CGroup은 컨테이너 격리 및 자원 제한을 구현합니다. 5. 다중 네트워크 모드는 컨테이너 상호 연결을 지원합니다. 이러한 핵심 개념을 이해 함으로써만 Docker를 더 잘 활용할 수 있습니다.

미니 오펜 센토 호환성 미니 오펜 센토 호환성 Apr 14, 2025 pm 05:45 PM

Minio Object Storage : Centos System Minio 하의 고성능 배포는 Go Language를 기반으로 개발 한 고성능 분산 객체 저장 시스템입니다. Amazons3과 호환됩니다. Java, Python, JavaScript 및 Go를 포함한 다양한 클라이언트 언어를 지원합니다. 이 기사는 CentOS 시스템에 대한 Minio의 설치 및 호환성을 간단히 소개합니다. CentOS 버전 호환성 Minio는 다음을 포함하되 이에 국한되지 않는 여러 CentOS 버전에서 확인되었습니다. CentOS7.9 : 클러스터 구성, 환경 준비, 구성 파일 설정, 디스크 파티셔닝 및 미니를 다루는 완전한 설치 안내서를 제공합니다.

Centos에서 Pytorch의 분산 교육을 운영하는 방법 Centos에서 Pytorch의 분산 교육을 운영하는 방법 Apr 14, 2025 pm 06:36 PM

CentOS 시스템에 대한 Pytorch 분산 교육에는 다음 단계가 필요합니다. Pytorch 설치 : 전제는 Python과 PIP가 CentOS 시스템에 설치된다는 것입니다. CUDA 버전에 따라 Pytorch 공식 웹 사이트에서 적절한 설치 명령을 받으십시오. CPU 전용 교육의 경우 다음 명령을 사용할 수 있습니다. PipinStalltorchtorchvisiontorchaudio GPU 지원이 필요한 경우 CUDA 및 CUDNN의 해당 버전이 설치되어 있는지 확인하고 해당 PyTorch 버전을 설치하려면 설치하십시오. 분산 환경 구성 : 분산 교육에는 일반적으로 여러 기계 또는 단일 기계 다중 GPU가 필요합니다. 장소

Centos에서 Pytorch 버전을 선택하는 방법 Centos에서 Pytorch 버전을 선택하는 방법 Apr 14, 2025 pm 06:51 PM

CentOS 시스템에 Pytorch를 설치할 때는 적절한 버전을 신중하게 선택하고 다음 주요 요소를 고려해야합니다. 1. 시스템 환경 호환성 : 운영 체제 : CentOS7 이상을 사용하는 것이 좋습니다. Cuda 및 Cudnn : Pytorch 버전 및 Cuda 버전은 밀접하게 관련되어 있습니다. 예를 들어, pytorch1.9.0은 cuda11.1을 필요로하고 Pytorch2.0.1은 cuda11.3을 필요로합니다. CUDNN 버전도 CUDA 버전과 일치해야합니다. Pytorch 버전을 선택하기 전에 호환 CUDA 및 CUDNN 버전이 설치되었는지 확인하십시오. 파이썬 버전 : Pytorch 공식 지점

Centos의 최신 버전으로 Pytorch를 업데이트하는 방법 Centos의 최신 버전으로 Pytorch를 업데이트하는 방법 Apr 14, 2025 pm 06:15 PM

Centos의 최신 버전으로 Pytorch를 업데이트하면 다음 단계를 수행 할 수 있습니다. 방법 1 : PIP를 사용하여 PIP 업데이트 : 먼저 PIP의 PIP 버전이 최신 버전의 PyTorch를 제대로 설치하지 못할 수 있기 때문에 PIP가 최신 버전인지 확인하십시오. PipinStall-UpgradePip Unin Incalls of Pytorch (설치된 경우) : PipuninStalltorchtorchvisiontorchaudio 설치 최신 정보

See all articles