python实现简单银行管理系统

首先,银行管理系统通过账户来实现用户在银行中的一系列操作,而账户则分为用户个人信息User类和银行卡信息Card类

class Card:
    def __init__(self,cardId,passwd,balance):
        self.cardId = cardId
        self.passwd = passwd
        self.balance = balance
        self.card_lock = False
class User:
    def __init__(self,name,phone,Id,card):
        self.name = name
        self.phone = phone
        self.Id = Id
        self.card = card

主函数类,银行管理系统执行函数,进行银行管理一系列相关操作

BMS_Main,主函数类

from adminview import AdminView
from ATM import ATM


class BMS_Main:
    def __init__(self):
        self.allUser = {}
        self.atm = ATM(self.allUser)
        self.admin = AdminView()

    def Save_Data(self):
        self.allUser.update(self.atm.alluser)  # 将用户信息存储

    def operate(self):
        self.admin.Login_Interface()  # 进入管理员登录界面
        ver = self.admin.Validata_Logon()  # 验证管理员
        if not ver:  # 判断是否为管理员,是则进入操作页面
            while True:
                self.admin.Interface_View()
                option = (input('请输入操作码:'))
                if option == '1':
                    self.atm.Open_An_Account()  # 调用 ATM类的开户操作
                if option == '2':
                    self.atm.Query_Account()  # 调用 ATM类的查询操作
                if option == '3':
                    self.atm.Draw_Money()  # 调用 ATM类的取款操作
                if option == '4':
                    self.atm.Deposit_Money()  # 调用 ATM类的存款操作
                if option == '5':
                    self.atm.Transfer_Money()  # 调用 ATM类的转账操作
                if option == '6':
                    self.atm.Locking()  # 调用 ATM类的锁定操作
                if option == '7':
                    self.atm.Unlock()  # 调用 ATM类的解锁操作
                if option == '8':
                    self.Save_Data()  # 退出管理系统
                    print('已退出')
                    return -1
                if option not in ('1', '2', '3', '4', '5', '6', '7', '8'):  # 防止误输入操作
                    print("操作有误,请重新输入")


if __name__ == '__main__':
    system_page = BMS_Main()
    system_page.operate()

定义构造函数:

class BMS_Main:
    def __init__(self):
        self.allUser = {}
        self.atm = ATM(self.allUser)
        self.admin = AdminView()

Self.alluser 用来存储账户信息

Self.atm 调用ATM类的账户信息赋给atm

Self.admin 调用adminview类的界面信息赋给admin

管理员界面和操作页面类:AdminView

class AdminView:
    Admin_Acc = '123'
    Admin_Pwd = '321'

    # 欢迎界面
    @staticmethod
    def Login_Interface():
        print('*******欢迎进入管理员系统*******')

    # 管理员登录验证
    def Validata_Logon(self):
        Admin_Acc_Input = input('请输入管理员账户:')
        if self.Admin_Acc != Admin_Acc_Input:
            print("管理员账户输入错误!!")
            return -1
        Admin_Pwd_Input = input('请输入管理员密码:')
        if self.Admin_Pwd != Admin_Pwd_Input:
            print("管理员密码输入错误!!!")
            return -1
        print('登陆成功')
        return 0

    # 管理员登录后,进入银行账户操作系统
    @staticmethod
    def Interface_View():
        print('开户【1】\t查询【2】\n取款【3】\t存款【4】\n转账【5】\t锁定【6】\n解锁【7】\t退出【8】')

进入主函数类的操作函数 operate(),首先调用adminview()中的login_Interface(0

进入管理员登录界面,然后,验证管理员,调用adminview()中的Validata_Logon()

验证成功,进入循环操作,用户输入操作码,执行相应操作

点击超链接即可跳转对应操作

Option = 1  开户操作      Option = 2   查询操作

Option = 3  取款操作      Option = 4  存款操作

Option= 5  转账操作       Option= 6  锁定操作

Option= 7   解锁操作

Option= 8,退出系统,调用函数Save_Data()保存,退出系统。

如果输入其他字符则提示 操作有误,请重新输入

ATM类

from Card import Card
from BankUser import User
import random


class ATM:
    def __init__(self, alluser):
        self.alluser = alluser

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

    # 开户操作【1】
    def Open_An_Account(self):
        name = input('姓名:')  # 账户基本信息录入
        Id = input('证件号码:')
        phone = input('电话号码:')
        Advance_Deposit = int(input('预存款:'))
        # 预存款不能<=0元
        if Advance_Deposit <= 0:
            print("预存款必须大于0元")
            return -1
        First_Pwd = input('设置密码:')  # 设置账户密码
        Second_pwd = input('确认密码:')
        if First_Pwd != Second_pwd:
            print("两次输入密码不一致")
            return -1
        print('创建密码成功')
        Card_Id = self.Generate_Card_Id()  # 调用生成的卡号
        card = Card(Card_Id, First_Pwd, Advance_Deposit)  # 银行卡信息
        user = User(name, phone, Id, card)  # 用户个人信息
        self.alluser[Card_Id] = user  # 存储账户信息
        print('开户成功,您的卡号为{},密码为{},请牢记'.format(Card_Id, First_Pwd))

    # 验证密码,如果输入三次都错误,自动退出登录
    def Ve_Pwd(self, vfpwd):
        for i in range(3):
            intpwd = input('请输入您的账户密码:')
            if vfpwd == intpwd:
                return True
        print("您已经三次输入错误,已退出!")
        return False

    # 查询操作【2】
    def Query_Account(self, base=1):
        if base == 1:
            inputcardId = input('请输入您要查询的账户:')
        if base == 2:
            inputcardId = input('请输入您要转出的账户:')
        if base == 3:
            inputcardId = input('请输入您要转入的账户:')
        user = self.alluser.get(inputcardId)
        if not self.alluser.get(inputcardId):  # 判断卡号是否匹配
            print('卡号不存在!')
            return -1
        if user.card.card_lock:  # 判断卡是否冻结
            print('此账户已锁定,请解锁后继续使用!!')
            return -1
        if not self.Ve_Pwd(user.card.passwd):  # 密码验证
            print('您的账户已被锁定')
            return -1
        print('账户:{},余额:{}'.format(user.card.cardId, user.card.balance))
        return user

    #  取款操作【3】
    def Draw_Money(self):
        user = self.Query_Account()
        if user != -1:
            DrawMoney = float(input('请输入取款金额:'))
        if DrawMoney >= user.card.balance:
            print('余额不足!')
            return -1
        user.card.balance -= DrawMoney
        print('取款成功!\n账户:{} ,余额:{}'.format(user.card.cardId, user.card.balance))

    # 存款操作【4】
    def Deposit_Money(self):
        user = self.Query_Account()
        if user == -1:
            return -1
        DepositMoney = float(input('请输入存款金额:'))
        user.card.balance += DepositMoney
        print('存款成功!\n账户:{} ,余额:{}'.format(user.card.cardId, user.card.balance))

    # 转账操作【5】
    def Transfer_Money(self):
        TransferOut = self.Query_Account(base=2)  # 转出账户
        if TransferOut == -1:
            return -1
        TransferInto = self.Query_Account(base=3)  # 转入账户
        if TransferInto == -1:
            return -1
        TransferAmount = float(input('请输入转账金额:'))
        if TransferOut.card.balance >= TransferAmount:
            Tips = input('确认向{}转账吗?y/n'.format(TransferInto.card.cardId))
            if Tips == 'y' or 'Y':
                TransferOut.card.balance -= TransferAmount  # 转出账户:转钱
                TransferInto.card.balance += TransferAmount  # 转入账户:收钱
                print(
                    '转账成功!\n账户:{},余额:{}'.format(TransferOut.card.cardId, TransferOut.card.balance)
                )
            else:
                print('操作已停止')

        else:
            print('余额不足,转账失败')

    # 锁定操作【6】
    def Locking(self):
        Card_Into = input('请输入卡号:')
        if not self.alluser.get(Card_Into):
            print('卡号不存在!')
            return -1
        user = self.alluser.get(Card_Into)
        if user.card.card_lock:
            print('此卡已经被锁定!')
            return -1
        if not self.Ve_Pwd(user.card.passwd):
            print('密码输入错误')
            return -1
        user.card.card_lock = True
        print('锁定成功')

    # 解锁操作【7】
    def Unlock(self):
        Card_Into = input('请输入卡号:')
        user = self.alluser.get(Card_Into)
        while 1:
            if not self.alluser.get(Card_Into):
                print('卡号不存在')
                return -1
            if not self.Ve_Pwd(user.card.passwd):
                print("密码输入有误")
                return -1
            if not user.card.card_lock:
                print('此卡未被锁定!')
                break
            user.card.card_lock = False
            print('此卡解锁成功')
            break

开户操作:

用户输入1时,执行开户操作,需要用户输入自己的个人信息,

并填入预存款(>0),设置账户密码之后,调用Generate_Card_Id()函数,

随机生成六位不重复卡号给用户,并且将账户信息存入all user{Card_Id:user }

查询操作:

用户输入2时,执行查询,查询操作在存取款、转账时都会用到,所

以,在定义查询函数时,设置一个默认值参数:base,当base=1时,输入查询

账户,从已经存储好的账户信息中找到对应的银行卡号,在查询过程中,需要

对银行卡号进行验证,如果卡号不存在或者卡号被冻结都会给函数返回值-1,

如果银行卡没有问题,则输入密码验证账户,这里通过密码验证函数Ve_Pwd()

进行密码验证,三次输入错误会被锁定账户,如果都没有问题,则输出账户和余

额,并返回user的值,以便后续存取款以及转账操作的使用。

取款操作:

用户输入3时,执行Draw_Money(),当用户取款时,首先应该输入取款账

户,这里则调用查询函数Query_Account(),如果user接收到是User信息

时,就会进行取款,当账户余额不足时输出余额不足,函数返回值-1,否则

提示取款成功。

存款操作:

当用户输入4时,执行函数Deposit_Money(),调用查询函数

Query_Account(),如果user接受值为-1时,则账户有问题,函数返回值-1

否则提示用户输入存款金额,存款成功。

转账操作:

用户输入5时,执行函数Transfer_Money(),此时,调用查询函数,

通过改变默认参数base的值,来实现转出和转入账户的输入,当接受到的

返回值为user时,输入转账金额,当转出用户余额足够时,询问用户是否确认,

输入Y:进行转账,输入n:停止操作

锁定操作:

用户输入6时,执行函数Locking()进行锁定操作,输入卡号,调用

账户信息如果此卡的cardlock = True 的话,则会提示此卡已被锁定,函数返

回值-1,如果没有则调用密码验证函数Ve_Pwd(),密码验证成功,则提示 锁定

成功 。

解锁操作:

用户输入7,调用解锁函数Unlock(),输入卡号,调用账户信息,

如果卡号没找到,则提示卡号不存在,否则输入账号密码,调用密码验证函

数Ve_Pwd(),当输入密码正确时,执行解锁操作,如果card_lock = False,

提示,此卡未被锁定,否则将card_lock = True改为 card_lock = false ,提示

解锁成功。

你可能感兴趣的:(python,pycharm,数据结构,算法)