博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面向对象—银行操作系统
阅读量:4165 次
发布时间:2019-05-26

本文共 9566 字,大约阅读时间需要 31 分钟。

使用python面向对象写银行系统:

  • 银行卡类:卡号、金额、密码、状态
  • 用户类:名字、身份证、银行卡
  • 管理员类:账号、密码、登录页面、菜单界面、欢迎信息
  • 操作类:开户、存款、查询、取款、转账、锁定、解锁、改密、退出
  • 新建一个项目,建议使用pycharm。

1,新建card.py 文件,写银行卡类

# 银行卡类class Card:    def __init__(self, cid, pwd):        self.cid = cid          # 卡号        self.pwd = pwd          # 密码        self.money = 0          # 金额        self.is_lock = False    # 是否锁定

2,User.py 文件,用户信息类

import osimport pickle# 用户类class User:    def __init__(self, uid, name, card):        self.uid = uid          # 身份证        self.name = name        # 姓名        self.card = card        # 银行卡    def __str__(self):        return '姓名:{},身份证:{},卡号:{}'.format(self.name, self.uid, self.card.cid)    # 将用户信息序列化存储    @staticmethod    def save_user(userinfo):        pathname = os.path.join(os.getcwd(), 'userinfo.db')        with open(pathname, 'wb') as fp:            pickle.dump(userinfo, fp)    # 从文件中加载用户信息    @staticmethod    def load_user():        pathname = os.path.join(os.getcwd(), 'userinfo.db')        # 判断是否存在        if os.path.exists(pathname):            with open(pathname, 'rb') as fp:                userinfo = pickle.load(fp)            return userinfo        return {}

3,新建admin.py文件,写银行管理员类

# 管理员类class Admin:    def __init__(self, account='admin', password='123456'):        self.account = account        self.password = password    # 显示欢迎信息    def welcome(self):        print('*' * 30)        print(' ' * 5 + '欢迎使用XX银行管理系统')        print('*' * 30)    # 登录页面    def login(self):        account = input('请输入账号:')        password = input('请输入密码:')        if account == self.account and password == self.password:            return True        return False    # 操作菜单    def menu(self):        print('*' * 30)        print('开户[1] 销户[2] 查询[3] 存款[4]')        print('取款[5] 转账[6] 改密[7] 锁定[8]')        print('解锁[9] 退出[0] 显示所有用户[10]')        print('*' * 30)

4 ,bank.py 文件,银行信息操作类

from user import Userfrom admin import Adminfrom operate import Operateif __name__ == '__main__':    # 记录管理员登录失败次数,若达到3次则直接结束    count = 0    # 创建管理员对象    admin = Admin()    while True:        # 显示欢迎页面        admin.welcome()        # 登录检查        ret = admin.login()        if ret:            # 记录是否退出            is_quit = False            # 先从文件中加载用户信息            userinfo = User.load_user()            # 创建操作对象            op = Operate(userinfo)            while True:                # 显示操作菜单                admin.menu()                # 获取用户的操作                num = int(input('请选择操作:'))                if num == 0:                    print('退出')                    is_quit = True                    break                elif num == 1:                    op.new_user()                elif num == 2:                    op.del_user()                elif num == 3:                    op.query_money()                elif num == 4:                    op.save_money()                elif num == 5:                    op.get_money()                elif num == 6:                    op.transfer_money()                elif num == 7:                    op.change_pwd()                elif num == 8:                    op.lock_user()                elif num == 9:                    op.unlock_user()                elif num == 10:                    op.show_users()                else:                    print('操作代号有误,请重新输入')            if is_quit:                break        else:            print('账户或密码有误,登录失败')            count += 1            if count >= 3:                print('错误已达上限,禁止登录')                break    print('OVER')

5,operate.py 文件,用户操作类

from user import Userfrom card import Cardfrom helper import Helper# 操作类class Operate:    def __init__(self, userinfo={}):        # 用户存放所有的用户信息        self.userinfo = userinfo    # 开户    def new_user(self):        name = input('请输入姓名:')        uid = input('请输入身份证:')        pwd = input('请输入密码:')        # 密码加密        pwd = Helper.generate_password_hash(pwd)        # 生成随机卡号        cid = Helper.generate_cid()        # 创建银行卡        card = Card(cid, pwd)        # 创建用户        user = User(uid, name, card)        # 保存用户信息        self.userinfo[cid] = user        # 保存用户信息到文件        User.save_user(self.userinfo)        print('开户成功')    # 销户    def del_user(self):        print('销户成功')    # 查询    def query_money(self):        cid = input('请输入您的卡号:')        user = self.userinfo.get(cid)        if user:            print('您的余额为:', user.card.money)        else:            print('无效的卡号')    # 转账    def transfer_money(self):        cid = input('请输入您的卡号:')        user = self.userinfo.get(cid)        if user:            dst_cid = input('请输入对方卡号:')            dst_user = self.userinfo.get(dst_cid)            if dst_user:                money = float(input('请输入转账金额:'))                # 判断余额是否充足                if user.card.money < money:                    print('余额不足,转账失败')                    return                pwd = input('请输入密码:')                if Helper.check_password_hash(pwd, user.card.pwd):                    user.card.money -= money                    dst_user.card.money += money                    User.save_user(self.userinfo)                    print('转账成功')                else:                    print('密码有误,转账失败')            else:                print('无效的卡号')        else:            print('无效的卡号')    # 存款    def save_money(self):        cid = input('请输入您的卡号:')        user = self.userinfo.get(cid)        if user:            # 查看用户是否锁定            if user.card.is_lock:                print('该卡已锁定,请先去解锁')                return            # 记录密码错误次数            count = 0            while count < 3:                pwd = input('请输入密码:')                if Helper.check_password_hash(pwd, user.card.pwd):                    money = input('请输入您的存款金额:')                    user.card.money += float(money)                    User.save_user(self.userinfo)                    print('存款成功')                    break                else:                    count += 1                    print('密码有误,请重新输入')            else:                user.card.is_lock = True                User.save_user(self.userinfo)                print('密码错误已达上限,该卡已锁定')        else:            print('无效的卡号')    # 取款    def get_money(self):        print('取款成功')    # 改密    def change_pwd(self):        print('密码修改成功')    # 锁定    def lock_user(self):        print('用户锁定')    # 解锁    def unlock_user(self):        cid = input('请输入卡号:')        user = self.userinfo.get(cid)        if user:            user.card.is_lock = False            User.save_user(self.userinfo)            print('解锁成功')        else:            print('无效的卡号')    # 显示所有用户信息    def show_users(self):        for user in self.userinfo.values():            print(user)

6 ,helper.py 文件,帮助文件,写生产随机卡号、信息数据保存持久化

import hashlibfrom random import randint# 助手函数类class Helper:    # 生成银行卡号    @staticmethod    def generate_cid(length=8):        cid = ''        for i in range(length):            cid += str(randint(0, 9))        return cid    # 加密密码    @staticmethod    def generate_password_hash(password):        # 创建加密对象        m = hashlib.md5()        # 设置加密字符串        m.update(password.encode('utf-8'))        # 返回加密字符串        return m.hexdigest()    # 检验密码    @staticmethod    def check_password_hash(pwd, pwd_hash):        m = hashlib.md5()        m.update(pwd.encode('utf-8'))        return m.hexdigest() == pwd_hash

7,成果。项目运行后的效果

******************************     欢迎使用XX银行管理系统******************************请输入账号:admin请输入密码:123456******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:1请输入姓名:tang请输入身份证:4109282018请输入密码:654321开户成功******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:10姓名:tang,身份证:4109282018,卡号:50646598******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:3请输入您的卡号:50646598您的余额为: 0******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:4请输入您的卡号:50646598请输入密码:654321请输入您的存款金额:800000存款成功******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:3请输入您的卡号:50646598您的余额为: 800000.0******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:5取款成功******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:5取款成功******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:6请输入您的卡号:50646598请输入对方卡号:无效的卡号******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:1请输入姓名:xin请输入身份证:4109282017请输入密码:111222开户成功******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:10姓名:tang,身份证:4109282018,卡号:50646598姓名:xin,身份证:4109282017,卡号:28496879******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:6请输入您的卡号:50646598请输入对方卡号:28496879请输入转账金额:500000请输入密码:654321转账成功******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:3请输入您的卡号:28496879您的余额为: 500000.0******************************开户[1] 销户[2] 查询[3] 存款[4]取款[5] 转账[6] 改密[7] 锁定[8]解锁[9] 退出[0] 显示所有用户[10]******************************请选择操作:0退出OVER

 

转载地址:http://pnqxi.baihongyu.com/

你可能感兴趣的文章
.net实现.aspx页面自动加载.cs程序定义的变量并按照格式输出
查看>>
[Leetcode]最后一个单词的长度
查看>>
merges sort use c++
查看>>
插入排序用递归实现
查看>>
工作流审批平台-审批流程-指定审批部门
查看>>
商务智能-系统概述-数据图形方式
查看>>
软件项目管理系统-项目管理-模块定义-开发内容
查看>>
工作流审批平台-审批功能
查看>>
商务智能-基本方法-特征与角度
查看>>
软件项目管理系统-项目管理-模块定义-开发笔记
查看>>
工作流审批平台-业务申请-申请书一览
查看>>
商务智能-基本方法-数据钻取
查看>>
eclipse的java facets的runtimes如何删除tomcat?
查看>>
oracle序列的cache_size说明
查看>>
oracle中两个时间戳相减得到间隔毫秒数
查看>>
Oracle中将毫秒数转换为timestamp类型的两种方法
查看>>
mybatis配置and rownum< minus 查询第几行到第几行数据的sql原型和mybatis原型。
查看>>
oracle的concat函数使用问题。
查看>>
eclipse编辑状态下怎样让指定行左移或右移?
查看>>
plsql developer如何导入导出表结构和数据以及如何复制表结构和数据?
查看>>