Python模拟银行管理系统(面向对象)# 谭子

一、系统需求说明

本项目计划实现一个银行管理系统,包括开户、查询、取款、存款、转账、锁定、解锁和退出功能。

银行管理系统一览表

序号

模块

子模块

说明

1

菜单模块

显示菜单

验证管理员身份,显示功能菜单

2

开户模块

注册,生成银行卡

注册信息填写,随机生成6位数银行卡号码

3

查询模块

查询卡中余额

根据输入的银行卡号码和密码查询该卡余额

4

取款模块

取出卡内金额

验证后删除卡内对于的金额,模拟取款

5

存款模块

存入金额

验证后存入卡内对于的金额,模拟存款

6

验证模块

输错锁住卡号

创建三次密码错误的机会,输错三次直接锁定

7

转账模块

对两个账号进行金额调动

验证两个卡号是否存在,进行简单加减运算

8

锁定模块

人为锁定银行卡

验证卡号和密码后锁定该账户

9

解锁模块

解除银行卡锁定

验证卡号和密码之后解除锁定

10

退出模块

退出系统

输入Q,验证管理员身份后退出系统

二、系统设计

  1. 实现技术:Python程序设计语言
  2. 实现目标:实现一个基于面向对象的银行管理系统
  3. 系统模块设计

系统模块规划如下图所示:

Python模拟银行管理系统(面向对象)# 谭子_第1张图片

 三、代码展示

Python模拟银行管理系统(面向对象)# 谭子_第2张图片

1.  admin.py

        构建一个管理员对象,同时加入功能菜单的显示内容。

class Admin:
    adminU = '1'  # 管理员账号
    adpwd = '1'  # 管理员密码

    def printAdminView(self):
        print("*" * 42)
        print("***                                    ***")
        print("***                                    ***")
        print("***            欢迎登录银行系统           ***")
        print("***                                    ***")
        print("***                                    ***")
        print("*" * 42)

    def printsysFunctionView(self):
        print("*" * 42)
        print("***                                    ***")
        print("***   1.开户(1)         2.查询(2)     ***")
        print("***   3.取款(3)         4.存款(4)     ***")
        print("***   5.转账(5)         6.锁定(6)     ***")
        print("***   7.解锁(7)          退出(Q)      ***")
        print("***                                    ***")
        print("*" * 42)

    def adminOption(self):
        addminInput = input("请输入管理员账户:")
        if self.adminU != addminInput:
            print("管理员账户输入错误......")
            return -1
        passwordInput = input("请输入密码:")
        if self.adpwd != passwordInput:
            print("输入密码有误......")
            return -1
        else:
            print("操作成功,请稍后......")
            return 0

2.  card.py

        构建银行卡对象。

class Card:
    def __init__(self, cardId, cardPwd, money):
        self.cardId = cardId
        self.cardPwd = cardPwd
        self.money = money
        self.cardLock = False

3.  user.py

        构建用户对象。

class User:
    def __init__(self, name, id, phone, card):
        self.name = name
        self.id = id
        self.phone = phone
        self.card = card

4.  atm.py

        实现开户、查询、取款、存款、转账、锁定、解锁和退出功能。

from user import User
from card import Card
import random
class ATM:
    def __init__(self, alluser):
        self.alluser = alluser

    def randonmiCardId(self):   # 随机生成开户卡号
        while True:
            str_data = ''   # 存储卡号
            for i in range(6):  # 随机生成6位卡号
                ch = chr(random.randrange(ord('0'), ord('9') + 1))
                str_data += ch
            if not self.alluser.get(str):   # 判断卡号是否重复
                return str_data

    def creatUser(self):
        # 目标想用户字典中添加一个键值对(卡号、用户对象)
        name = input("请输入姓名:")
        Uid = input("请输入身份证号:")
        phone = input("请输入手机号:")
        prestMoney = float(input("请输入预存金额:"))
        if prestMoney <= 0:
            print("预存款输入有误,开户失败")
            return -1
        oncePwd = input("请输入密码:")
        passWord = input("请再次输入密码:")
        if passWord != oncePwd:
            print("两次密码输入不同......")
            return -1
        print("密码设置成功,请牢记密码: %s" %passWord)
        cardId = self.randonmiCardId()
        card = Card(cardId, oncePwd, prestMoney)    # 创建卡
        user = User(name, Uid, phone, card)     # 创建用户
        self.alluser[cardId] = user     # 存入用户字典
        print("您的开户已完成,请牢记开户账号:%s" %cardId)

    def checkpwg(self, realPwd):
        for i in range(3):
            psd2 = input("请输入密码:")
            if realPwd == psd2:
                return True
        print("密码输错三次,系统自动退出......")
        return False

    def lockCard(self):
        inptcardId = input("请输入您的卡号:")
        user = self.alluser.get(inptcardId)
        if not self.alluser.get(inptcardId):
            print("此卡号不存在...锁定失败!")
            return -1
        if user.card.cardLock:
            print("该卡已经被锁定,无需再次锁定!")
            return -1
        if not self.checkpwg(user.card.cardPwd):    # 验证密码
            print("密码错误...锁定失败!!")
            return -1
        user.card.cardLock = True
        print("该卡被锁定成功!")

    def searchUser(self, base=1):
        if base == 2:
            inptcardId = input("请输入转出主卡号:")
        elif base == 3:
            inptcardId = input("请输入转入卡号:")
        elif base == 1:
            inptcardId = input("请输入您的卡号:")
        user = self.alluser.get(inptcardId)
        # 如果卡号不存在,下面代码就会执行
        if not self.alluser.get(inptcardId):
            print('此卡号不存在...查询失败!')
            return -1
        if user.card.cardLock:
            print("该用户已经被锁定...请解卡后使用!")
            return -1
        if not self.checkpwg(user.card.cardPwd):    # 验证密码
            print("密码错误过多...卡已经被锁定,请解卡后使用!")
            user.card.cardLock = True
            return -1
        if not base == 3:   # 查询转如账户    不打印余额
            print("账户:%s  余额:%.2f " % (user.card.cardId, user.card.money))
        return user

    def getMoney(self):
        userTF = self.searchUser()
        if userTF != -1:
            if userTF.card.cardId != '':
                inptMoney = float(input("请输入取款金额:"))
                if inptMoney > int(userTF.card.money):
                    print("输入的金额大于余额,请先查询余额!")
                    return -1
                userTF.card.money = float(userTF.card.money) - inptMoney
                print("取款成功!  账户:%s  余额:%.2f" %(userTF.card.cardId,
                                                userTF.card.money))
        else:
            return -1

    def saveMoney(self):
        userTF = self.searchUser()
        if userTF != -1:
            if not userTF.card.cardLock == True:
                if userTF.card.cardId != '':
                    inptMoney = float(input("请输入要存入的金额:"))
                    if inptMoney < 0:
                        print("请输入正确金额")
                    else:
                        userTF.card.money += inptMoney
                        print("存款成功!  账户:%s  金额:%.2f " %(userTF.card.cardId,
                                                         userTF.card.money))
        else:
            return -1

    def transferMoney(self):
        MasterTF = self.searchUser(base=2)
        if (MasterTF == -1):
            return -1
        userTF = self.searchUser(base=3)
        if (userTF == -1):
            return -1
        in_tr_Money = float(input("请输入转账金额:"))
        if MasterTF.card.money >= in_tr_Money:
            str = input("您确定要继续转账操作吗(是/否)?")
            if str.upper() == '是':
                F1 = float(MasterTF.card.money)
                F2 = float(userTF.card.money)
                F1 -= in_tr_Money
                F2 += in_tr_Money
                print("转账成功! 账户:%s  金额:%.2f " % (MasterTF.card.cardId, F1))
            else:
                print("转账失败,中止了操作")
        else:
            print("转账失败,金额不足! 账户:%s  金额:%.2f " % (MasterTF.card.cardId,
                                                  MasterTF.card.money))

    def unlockCard(self):
        inptcardId = input("请输入您的卡号:")
        user = self.alluser.get(inptcardId)
        while 1:
            if not self.alluser.get(inptcardId):
                print("此卡号不存在...解锁失败!")
                return -1
            elif not user.card.cardLock:
                print("该卡未被锁定,无需解锁!")
                break
            elif not self.checkpwg(user.card.cardPwd):
                print("密码错误...解锁失败!!")
                return -1
            user.card.cardLock = False  # 解锁
            print("该卡 解锁 成功!")
            break

4.  bink.py

        作为主方法调用其他类和方法。

from admin import Admin
from atm import ATM
import time


class HomePage:
    def __init__(self):
        self.allUserD = {}  # 使用字典存储数据
        self.atm = ATM(self.allUserD)
        self.admin = Admin()  # 管理员开机界面

    def saveUser(self):
        self.allUserD.update(self.atm.alluser)
        print("数据存盘成功")

    # 程序的入口
    def main(self):
        self.admin.printAdminView()
        resL = self.admin.adminOption()
        if not resL:
            while True:
                self.admin.printsysFunctionView()
                option = input("请输入您的操作:")
                if option not in ('1', '2', '3', '4', '5', '6', '7', 'S', 'Q', 'q'):
                    print("输入操作项有误,请仔细确认!")
                    time.sleep(1)
                if option == '1':  # 开户
                    self.atm.creatUser()
                elif option == '2':  # 查询
                    self.atm.searchUser()
                elif option == '3':  # 取款
                    self.atm.getMoney()
                elif option == '4':  # 存储
                    self.atm.saveMoney()
                elif option == '5':  # 转账
                    self.atm.transferMoney()
                elif option == '6':  # 锁定
                    self.atm.lockCard()
                elif option == '7':  # 解锁
                    self.atm.unlockCard()
                elif option.upper() == "Q":
                    if not (self.admin.adminOption()):
                        self.saveUser()
                        print('退出系统')
                        return -1


if __name__ == '__main__':
    homepage = HomePage()
    homepage.main()

        

        作业记录+1,溜了溜了。

Python模拟银行管理系统(面向对象)# 谭子_第3张图片

 

你可能感兴趣的:(Python,Time,python,开发语言)