基于python实现银行管理系统


Posted in Python onApril 20, 2021

一、python银行管理系统

基于python实现银行管理系统

基于python实现银行管理系统
基于python实现银行管理系统

二、分析部分

基于python实现银行管理系统
基于python实现银行管理系统

三、代码部分

import random


class bankUser:
    # 卡号,用户姓名,身份证号,手机,预存,密码
    Count_id = ""
    Count_Name = ""
    Count_IDCard = ""
    Count_phone = ""
    Count_Money = 0.00
    Count_password = ""
    Count_Root = True

    def __init__(self, Count_id, Count_IDCard, Count_Name, Count_phone, Count_Money, Count_password, Count_Root):
        self.Count_id = Count_id
        self.Count_IDCard = Count_IDCard
        self.Count_phone = Count_phone
        self.Count_Money = Count_Money
        self.Count_password = Count_password
        self.Count_Root = Count_Root
        self.Count_Name = Count_Name


class DaoServer:

    # 检测账号是否已经被锁
    def isLock(self, i_id):
        with open("F:\\userFile.txt", 'r') as seaFile:
            mes = seaFile.readlines()
            for index in mes:
                matchId = index.split("~")[0]
                if matchId == i_id and index.split("~")[6] is False:
                    return True
        pass
        return False

    # 作用1:开户匹配是否有同样的身份证注册这个账户,有就返回假,没有返回真。传的参数是身份证号
    # 作用2:在查询时看看是否存在这个账号
    def searchBlock(self, IdCard):
        with open("F:\\userFile.txt", 'r') as seaFile:
            mes = seaFile.readlines()
            # id~pass~idcard~name~phone~money
            for index in mes:
                matchIdcard = index.split("~")[1]
                matchId = index.split("~")[0]
                if matchIdcard == IdCard or matchId == IdCard:
                    return False
        pass
        return True

    # 注册账户
    def register(self, user):
        if self.searchBlock(user.Count_IDCard):
            # 开始开户
            a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
            # 产生的一个账号
            numArray = random.sample(a, 6)
            # id~pass~idcard~name~phone~money
            # Count_id, Count_IDCard, Count_phone, Count_Money, Count_password, Count_Root
            # user.Count_id = ''.join(str(k) for k in numArray)
            # 用于生成的账户是否已经存在,如果存在就重新生成
            while not self.searchBlock(user.Count_id):
                numArray = random.sample(a, 6)
                # Count_id, Count_IDCard, Count_phone, Count_Money, Count_password, Count_Root
                user.Count_id = ''.join(str(k) for k in numArray)
            line = user.Count_id + "~" + user.Count_IDCard + "~" + user.Count_Name + "~" + user.Count_phone + "~" + str(
                user.Count_Money) + "~" + user.Count_password + "~" + str(user.Count_Root) + "\n"
            with open("F:\\userFile.txt", 'a+') as writeFile:
                writeFile.writelines(line)
                pass
            return True
        else:
            return False

    # 验证密码和账号是否一致
    # 正确返回user对象,否则返回Null
    def proof(self, pId, pPassword):
        with open("F:\\userFile.txt", 'r') as proofFile:
            proofMes = proofFile.readlines()
            for pIndex in proofMes:
                fId = pIndex.split("~")[0]
                fPassword = pIndex.split("~")[5]
                if fId == pId and fPassword == pPassword:
                    f = bankUser(pIndex.split("~")[0], pIndex.split("~")[1], pIndex.split("~")[2], pIndex.split("~")[3],
                                 pIndex.split("~")[4], pIndex.split("~")[5], pIndex.split("~")[6])
                    return f
            return None

    # 锁控制函数 + 还可以进行重新数据更新后重新写入数据
    # 数据更新函数
    def Lock(self, lockU, res):
        lId = lockU.Count_id
        r_mes = []
        with open('F:\\userFile.txt', 'r') as rFile:
            r_mes = rFile.readlines()
            for r_index in r_mes:
                if r_index.split("~")[0] == lId:
                    line = lId + "~" + r_index.split("~")[1] + "~" + r_index.split("~")[2] + "~" + r_index.split("~")[
                        3] + "~" + str(lockU.Count_Money) + "~" + r_index.split("~")[5] + "~" + str(res) + "\n"
                    r_mes.remove(r_index)
                    r_mes.append(line)
                    break
        pass

        with open('F:\\userFile.txt', 'w') as file:
            pass

        with open('F:\\userFile.txt', 'w') as file:
            for i in r_mes:
                file.writelines(i)
            pass

    # 查询账户
    def search(self, sId, sPassword):
        # 看看有没有这个账户
        # 参数:账户
        if not self.searchBlock(sId):

            # 存在这个账户,然后进行账户密码验证
            # 查看是否被锁定
            if self.isLock(sId):
                print("账号有危险,程序自动退出!")
                exit(0)
            res = self.proof(sId, sPassword)
            n = 1

            while res is None and n <= 3:
                sPassword = input("密码有误,请重新输入:")
                n = n + 1
                res = self.proof(sId, sPassword)

            if res is None:
                # 锁住,返回
                self.Lock(sId, False)
                print("有危险,账号已经锁住!")
                return None
            else:
                # 打印信息
                print("=" * 50)
                print("||", " " * 13, res.Count_Name, " 先生(女士)", " " * 13, "||")
                print("||\t账户:", res.Count_id, " " * 6, "金额:", res.Count_Money, " " * 13, "||")
                print("=" * 50)
                return res
        else:
            print("本行没有这个账户!")
            return None
        pass

    # 取款 | 存款
    #   1     2
    def getOrSaveMoney(self, flag, gId, gPassword):
        getRes = self.search(gId, gPassword)
        if getRes is None:
            return None
        else:
            if flag is 1:
                money = int(input("请输入你要取的金额:"))
                getRes.Count_Money = int(getRes.Count_Money) - money
                if money <= 0 or money > int(getRes.Count_Money):
                    print("输入有误")
                    return getRes
            else:
                money = int(input("请输入你要存的金额:"))
                getRes.Count_Money = int(getRes.Count_Money) + money
            self.Lock(getRes, True)
            print(getRes.Count_Money)
            return getRes

    # 获取转向那个人的目标钱数
    def getGoalMoey(self, goalId):
        with open("F:\\userFile.txt", 'r') as seaFile:
            mes = seaFile.readlines()
            for index in mes:
                if index.split("~")[0] == goalId:
                    return int(index.split("~")[4])
        pass

    # 转账
    def Transfer(self, tId, tPa):
        rRes = self.search(tId, tPa)
        if rRes is not None:

            if self.isLock(tId):
                print("此账号有危险,程序自动退出!")
                exit(0)

            # 转向账号
            goalId = input("请输入你要转向的那个人的账号:")
            if self.searchBlock(goalId):
                print("本行没有 ", goalId, " 这个账户")
            else:
                much = int(input("请输入你要转的金额:"))
                if much < 0 or much > int(rRes.Count_Money):
                    print("输入有误,即将退出...")
                    return None
                else:
                    u = bankUser(goalId, "", "", "", str(self.getGoalMoey(goalId) + much), "", True)
                    # def Lock(self, lockU, res):
                    self.Lock(u, True)
                    rRes.Count_Money = int(rRes.Count_Money) - much
                    self.Lock(rRes, True)
                    print("已经完成转账!")
        else:
            print("本行没有 ", tId, " 这个账户")


def welcomeView():
    print("*" * 40)
    print("***", " " * 32, "***")
    print("***", " " * 32, "***")
    print("***", " " * 7, "欢迎登录银行管理系统", " " * 7, "***")
    print("***", " " * 32, "***")
    print("***", " " * 32, "***")
    print("*" * 40)


def functionView():
    print("*" * 50)
    print("***", " " * 42, "***")

    print("***\t1.开户(1)", " " * 20, "2.查询(2)\t   ***")
    print("***\t3.取款(3)", " " * 20, "5.存款(4)\t   ***")
    print("***\t5.转账(5)", " " * 20, "6.锁定(6)\t   ***")
    print("***\t7.解锁(7)", " " * 32, "***")
    print("***", " " * 42, "***")
    print("***\t退出(Q)", " " * 35, "***")
    print("***", " " * 42, "***")
    print("*" * 50)




welcomeView()
print("欢迎管理员前来工作:")
b = True
m_id = input("请输入管理员账号:")
while b:
    if m_id == "admine":
        break
    else:
        m_id = input("请重新输入管理员账号:")
pas = input("请输入管理员密码:")
a = True
m_pas = input("请输入管理员密码:")
while a:
    if m_pas == "123":
        break
    else:
        m_pas = input("请重新输入管理员密码:")

functionView()
type = input("请输入你的操作:")
while type is not 'Q':
    if type == "1":
        u_name = input("请输入你的姓名:")
        u_phone = input("请输入你的电话:")
        u_idCard = input("请输入你的身份证号:")
        u_money = input("请输入你的预存金额:")
        u_pass = input("请输入你的密码:")
        u_user = bankUser("", u_idCard, u_name, u_phone, int(u_money), u_pass, True)
        d1 = DaoServer()
        boo = d1.register(u_user)
        if boo:
            print("注册成功!")
        else:
            print("注册失败!")
    elif type == "2":
        s_id = input("请输入你的账户:")
        s_pass = input("请输入你的密码:")
        d2 = DaoServer()
        d2.search(s_id, s_pass)
    elif type == "3":
        d3 = DaoServer()
        g_id = input("请输入你的账户:")
        g_pass = input("请输入你的密码:")
        d3.getOrSaveMoney(1, g_id, g_pass)
    elif type == "4":
        d4 = DaoServer()
        s_id = input("请输入你的账户:")
        s_pass = input("请输入你的密码:")
        d4.getOrSaveMoney(2, s_id, s_pass)
    elif type == "5":
        t_id = input("请输入你的账户:")
        t_pass = input("请输入你的密码:")
        d5 = DaoServer()
        d5.Transfer(t_id, t_pass)
    elif type == "6":
        d5 = DaoServer()
        p_id = input("请输入你的账户:")
        p_pass = input("请输入你的密码:")
        flag = d5.proof(p_id, p_pass)
        if flag is not None:
            d5.Lock(flag, False)
            print("锁定成功!")
        else:
            print("锁定失败")
    elif type == "7":
        d6 = DaoServer()
        ul_id = input("请输入你的账户:")
        ul_pass = input("请输入你的密码:")
        flag = d6.proof(ul_id, ul_pass)
        if flag is not None:
            d5.Lock(flag, True)
            print("解锁成功")
        else:
            print("解锁失败")
    elif type =="Q" or type == "q":
        exit(0)
    else:
        print("输入有误请重新输入:")
    type = input("请输入你的操作:")
    functionView()

到此这篇关于基于python实现银行管理系统的文章就介绍到这了,更多相关python银行管理系统内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python序列之list和tuple常用方法以及注意事项
Jan 09 Python
python中的编码知识整理汇总
Jan 26 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
详解python之协程gevent模块
Jun 14 Python
对Python 数组的切片操作详解
Jul 02 Python
对python生成业务报表的实例详解
Feb 03 Python
python图像处理入门(一)
Apr 04 Python
python 模拟贷款卡号生成规则过程解析
Aug 30 Python
Python3合并两个有序数组代码实例
Aug 11 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
Python+SeaTable实现计算两个日期间的工作日天数
Jul 07 Python
python爬虫框架feapde的使用简介
Apr 20 #Python
python实现大文本文件分割成多个小文件
Apr 20 #Python
Python绘制分类图的方法
Pytest allure 命令行参数的使用
在pyCharm中下载第三方库的方法
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 #Python
深入理解python多线程编程
Apr 18 #Python
You might like
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
python显示天气预报
2014/03/02 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
python3学习之Splash的安装与实例教程
2018/07/09 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
《四季》教学反思
2014/04/08 职场文书
质量保证书范本
2014/04/29 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
运动会广播稿100字
2014/09/14 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
捐书仪式主持词
2015/07/04 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL