在这里插入图片描述

python实例学习--银行管理系统

任务分析

这个实例要求实现一个银行管理系统,系统开始运行时,进入欢迎界面,工作人员输入管理员账户和密码,输入失败直接退出,输入成功进入功能界面;用户选择,开户,查询等功能。其中开户时需要将信息存储到.txt文件中,并随机生成六位数的银行卡号。
这个实例的类写在all_class.py中,然后在mian.py里面运行。

涉及内容:类与对象
		  字典
		  读写文件

管理员类

程序运行时需要由工作人员输入管理员账户密码才能进行下一步的功能选择。

#类名:Admin
#属性:
#行为:行为:管理员界面,管理员验证
class Admin(object):
    admin = '1'  # 设置账户为1
    passwd = '1'  # 设置密码为1

    # 管理员界面
    def Adminview(self):

        print("****************************************************")
        print("*                                                  *")
        print("*                   欢迎登录银行                     *")
        print("*                                                  *")
        print("****************************************************")

    def Check(self):
        inputAdmin = input("请输入管理员账户: ")
        if self.admin != inputAdmin:
            print("账号输入错误!")
            return -1
        inputPasswd = input("请输入管理员密码: ")
        if self.passwd != inputPasswd:
            print("密码输入错误!")
            return -1
        print("操作成功")
        return 0

ATM类

通过该类实现程序的主要功能,其中用户信息通过字典保存。在这个类里面设置了两个字典类型属性:allusers和Data,其中allusers的键是卡号,Data是作为allusers的键值,Data包括了银行卡和用户信息。

# ATM类
class ATM(object):
    def __init__(self, allusers, Data):
        # 存储所有用户的信息,用字典
        self.allUsers = allusers
        self.Data = Data

    # 服务界面
    def atmview(self):
        print("**********************************************")
        print("*           开户(1)     查询(2)             *")
        print("*           存款(3)     取款(4)             *")
        print("*                   退出(0)                 *")
        print("**********************************************")

    # 开户
    def CreatUser(self):
        name = input("请输入您的姓名:")
        idCard = input("请输入您的身份证号:")
        phone = input("请输入您的电话号码:")
        Passwd = input("请输入密码:")
        cardid = str(randint(100000, 999999))  # 随机生成六位数卡号
        preMoney = int(input("请输入您的预存款金额:"))
        if preMoney < 0:
            print("预存款输入有误,开户失败......")
            return -1
        # card = Card(cardid, Passwd, preMoney)
        # user = User(name, idCard, phone, card)
        self.Data["Passwd"] = Passwd
        self.Data["preMoney"] = preMoney
        self.Data["name"] = name
        self.Data["idCard"] = idCard
        self.Data["phone"] = phone
        self.allUsers[cardid] = self.Data
        print("开户成功,请牢记卡号:(%s)" % cardid)

    # 查询
    def SerchUser(self):
        cardnum = input("请输入您的卡号:")
        user = self.allUsers.get(cardnum)
        if user:
            cardpass = input("请输入您的密码:")
            if self.allUsers[cardnum]["Passwd"] != cardpass:
                print("密码输入错误")
                return -1
        else:
            print("卡号输入错误")
            return -1
        print("账号:%s    余额:%s" % (cardnum, self.allUsers[cardnum]["preMoney"]))

    # 取款
    def AddMony(self):
        cardnum = input("请输入您的卡号:")
        user = self.allUsers.get(cardnum)
        if user:
            cardpass = input("请输入您的密码:")
            if self.allUsers[cardnum]["Passwd"] != cardpass:
                print("密码输入错误")
                return -1
        else:
            print("卡号输入错误")
            return -1
        addmony = int(input("请输入存款金额:"))
        self.allUsers[cardnum]["preMoney"] = self.allUsers[cardnum]["preMoney"] + addmony
        print("账号:%s    余额:%s" % (cardnum, self.allUsers[cardnum]["preMoney"]))

    # 取款
    def GetMony(self):
        cardnum = input("请输入您的卡号:")
        user = self.allUsers.get(cardnum)
        if user:
            cardpass = input("请输入您的密码:")
            if self.allUsers[cardnum]["Passwd"] != cardpass:
                print("密码输入错误")
                return -1
        else:
            print("卡号输入错误")
            return -1
        getmony = int(input("请输入取款金额:"))
        if user.card.cardMoney < getmony:
            print("余额不足,取款失败")
        self.allUsers[cardnum]["preMoney"] = self.allUsers[cardnum]["preMoney"] - getmony
        print("账号:%s    余额:%s" % (cardnum, self.allUsers[cardnum]["preMoney"]))

主函数

主函数是在另一个文件运行的,所以不要忘了从上面的文件导入写的类。函数一开始实例化管理员类,对管理员进行检测;然后判断.txt文件里面是否有内容,如果没有,初始化一个空的字典,实例化ATM类,开始在while循环里面运行相关内容。

from all_class import ATM
from all_class import Admin
import os


def main():
    admin = Admin()
    admin.Adminview()
    # 检测管理员
    if admin.Check():
        return -1
    # 判断.txt是否有内容
    fr = open("data.txt", 'r+')
    if os.path.getsize("data.txt"):
        allusers = eval(fr.read())
        print(allusers)
    else:
        allusers = {}
    Data = {}
    fr.close()

    atm = ATM(allusers, Data)
    while True:
        atm.atmview()
        option = input("请输入操作:")
        if option == "1":
            atm.CreatUser()
        elif option == "2":
            atm.SerchUser()
        elif option == "3":
            atm.AddMony()
        elif option == "4":
            atm.GetMony()
        elif option == "0":
            fr = open("data.txt", "w+")
            fr.write(str(atm.allUsers))
            return -1


if __name__ == '__main__':
    main()

注意

1)很多人都是将银行卡与用户写成两个类的形式,然后对类的属性赋值,再进行后续操作,但在实现的时候,直接在一个类里面多加个字典类型的属性来存储数据会比那种方便的多。(主要是因为作者在用第一种方法的时候没写出来。。。
2)这个任务还有一个要求,让用新卡号来重新命名存储数据的.txt文件,需要用到os.rename()方法。这个没有在文章中体现出来(这个是因为每次重命名之后,下一次运行程序的时候打开文件还得改路径名,所以觉得徒增麻烦就没写
3)定义类的那个文件里面还有个from random import randint,需要移植的话不用忘记加上。
4)在从编辑器里将程序复制过来时不排除手残,或多或少复制错行的情况,如果移植时出现问题,欢迎指正

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐