分享大三改进后的python写的【银行管理系统】,超详细 【内附源码】

目录

大二的时候python有个课堂作业是银行管理系统,不太满意当时的功能,于是添加了点功能。后来大三了,对python的认知又更进了一步就再次改良了我的代码。

程序入口(首页)文件名: home.py

实现开户功能(随机生成六位数的卡号、储存卡号密码、验证密码,记录开户动作): kaihu.py

 取款(输入卡号密码进行取款操作,验证余额,校对密码,记录取款动作):qu.py

存款(输入卡号密码进行存款操作,校对密码,更新用户数据,记录存款动作):cun.py

查询(输入账号密码,验证账号密码,记录查询动作):cha.py

转账(输入账号密码,验证账号密码,输入转账对象账号,验证账号,记录转账动作):zhuan.py

修改密码(输入账号密码,验证账号密码,输入修改密码,验证密码,记录修改密码动作):gai.py

数据写出(写成dataframe的表格,详列账号、密码、身份证、手机号)生成客户数据.txt文件:alldata.py

数据读取(从客户数据.txt的dataframe的表格中读取账号、密码、身份证、手机号):shuju.py

管理员系统:

里面包含七项功能

获取所有用户的卡号

获取所有客户姓名

查询今日此银行的流水

用户所有信息的总览(账号密码卡号余额手机号等)

恢复出厂设置(清空所有用户的数据)

系统上所记录的所有的用户的操作(开户、取款、转账等)

按余额区间来查询用户(剩下姓名查询和地区查询功能现在才发现并没添加上去)

完整管理员系统代码:amin.py

【银行管理系统】部分截图:

客户数据明细

 开户、存款

管理员系统

系统数据明细

个人数据


大二的时候python有个课堂作业是银行管理系统,不太满意当时的功能,于是添加了点功能。后来大三了,对python的认知又更进了一步就再次改良了我的代码。

拥有存、查、改、取、开户的基本用户操作,还设置了专门的管理员系统,能记录存、查、改、取、开户的基本用户操作的时间和用户实时余额的信息,可将信息存储至数据库,再次启用时可导入所有用户数据。每个客户信息都被详细记录,包括身份证、地址、开户查存取等具体时间。用户也可查询到自己的所有操作记录。

程序入口(首页)文件名: home.py

#home.py
from kaihu import kaihu
from qu import qu
from cun import cun
from cha import cha
from zhuan import zhuan
from gai import gai
from alldata import alldata
from shuju import shuju
from admin import guanli
zong=shuju()

c=list(zong.keys())
moneys=[]
for c1 in c:
    money = zong[c1][2]
    moneys.append(money)
money = sum(moneys)
#zong= {'111111':['1','小白',9999],'222222':['2','小李',9999]}#数据初始化,上帝模式
while 1:
    print('''
------------------------------
|   1.开户\t2.取款     |
|                            |
|   3.存款\t4.查询     |
|                            |
|   5.转账\t6.改密码   |
|                            |
|       输入‘q’退出          |
------------------------------
''')
    choose=input('输入1到6:')
    if choose =='1':
        zidiankaihu=kaihu()
        zong.update(zidiankaihu)
        alldata(zong)
    if choose =='2':
        quhou=qu(zong)
        if len(quhou)!=0:
            zong[quhou[1]][2]=quhou[0]
            alldata(zong)
    if choose == 'q':
        break
    if choose == '3':
        cunhou=cun(zong)
        if len(cunhou)!=0:
            zong[cunhou[1]][2]=cunhou[0]
            alldata(zong)
    if choose == '4':
        cha(zong)
    if choose == '5':
        zhuanhou=zhuan(zong)
        if len(zhuanhou)!=0:
            zong[zhuanhou[1]][2]=zhuanhou[0]
            zong[zhuanhou[2]][2]=zong[zhuanhou[2]][2]+zhuanhou[3]
            alldata(zong)
    if choose == '6':
        new_psw=gai(zong)
        if len(new_psw)!=0:
            zong[new_psw[0]][0]=new_psw[1]
            alldata(zong)
    if choose == 'admin':
        adminpsw = input('请输入管理员密码:')
        cishu = 0
        while cishu<2:
            if adminpsw == 'admin123':
                zong=guanli(zong,money)
                alldata(zong)
                break
            else:
                cishu+=1
                adminpsw = input('你的输入有误!(你还有{}次机会)\n请输入管理员密码:'.format(3-cishu))
    if choose not in ['1','2','3','4','5','6','q','admin']:
        print('你的输入有误,请重新输入!!')

实现开户功能(随机生成六位数的卡号、储存卡号密码、验证密码,记录开户动作): kaihu.py

#kaihu.py
from datetime import datetime
def kaihu():
    ming=input('请输入您的名字:')
    mi=int(input('请输入您要设置的六位数的密码:'))
    while 1:
        if not len(str(mi))==6:
            mi=int(input('\n您的操作有误!\n请重新输入您要设置的六位数的密码:'))
        else:
            break
    person_id=input('请输入您的身份证:')
    while 1:
        if not len(person_id)==18:
            person_id=input('\n您的操作有误!\n请输入您的身份证:')
        else:
            break
    phone =input('请输入您的手机号码:')
    while 1:
        if not phone[0]=='1' or not len(phone)==11:
            phone =input('您输入的号码有误,请重新输入:')
        else:
            break
    zhang=str(suiji())
    zidian={}
    zidian[zhang]=[mi,str(ming),0,person_id,phone]
    print('开户成功!\n你的卡号是{}\n请牢记您的卡号。'.format(zhang))
    path = r"C:\Users\ge\Desktop\test1\银行管理系统\个人数据/"+ming+'.txt'
    dt01 = datetime.today()
    b=str(dt01.time())
    a=str(dt01.date())
    with open(path,'w',encoding='utf8') as f:
        f.write(a+b+'\n进行了开户操作\n余额:'+ '0元')
    with open(r"C:\Users\ge\Desktop\test1\银行管理系统\客户数据明细.txt",'a',encoding='utf8') as f:
        f.write(a+b+'\n用户:'+zhang+'\n进行了开户操作\n余额:'+ '0元\n\n\n')
    return zidian
import random
def suiji():
    ss=str(random.randint(0,9))
    for i in range(5):
        x=str(random.randint(0,9))
        ss = str(ss) + str(x)
    return ss

 取款(输入卡号密码进行取款操作,验证余额,校对密码,记录取款动作):qu.py

#qu.py
from datetime import datetime
def qu(zong):
    kahao=input('请输入您的卡号:')
    b=[]
    a=[]
    for key in zong.keys():
        b.append(key)
    if kahao in b:
        mi=int(input('请输入您的密码:'))
        if mi ==zong[kahao][0]:
            qu=int(input('你剩{},取:'\
                     .format(zong[kahao][2])))
            if qu>zong[kahao][2]:
                print('余额不足,请重新输入')
                while qu>zong[kahao][2]:
                    qu=int(input('你剩{},取:'\
                     .format(zong[kahao][2])))
            else:
                shengxia=zong[kahao][2]-qu
                print('取出成功\n余额{}'.format(shengxia))
                path = r"C:\Users\ge\Desktop\test1\银行管理系统\个人数据/"+zong[kahao][1]+'.txt'
                dt01 = datetime.today()
                bb=str(dt01.time())
                aa=str(dt01.date())
                yue = str(zong[kahao][2]-qu)
                with open(path,'a',encoding='utf8') as f:
                    f.write(aa+bb+'\n取出'+str(qu)+'\n余额:'+ yue +'元\n\n\n') 
                with open(r"C:\Users\ge\Desktop\test1\银行管理系统\客户数据明细.txt",'a',encoding='utf8') as f:
                    f.write(aa+bb+'\n用户:'+kahao+'\n取出'+str(qu)+'\n余额:'+ yue +'元\n\n\n')
                a.append(shengxia)
                a.append(kahao)
                
        else:
            print('密码错误')                
    else:
        print('没这个卡号')
    return a

存款(输入卡号密码进行存款操作,校对密码,更新用户数据,记录存款动作):cun.py

#cun.py
from datetime import datetime

def cun(zong):
    kahao=input('请输入您的卡号:')
    b=[]
    a=[]
    for key in zong.keys():
        b.append(key)
    if kahao in b:
        mi=int(input('请输入您的密码:'))
        if mi ==zong[kahao][0]:
            cun=int(input('你剩{},存:'\
                     .format(zong[kahao][2])))
            shengxia=int(zong[kahao][2]+cun)
            print('存入成功\n余额{}'.format(shengxia))
            path = r"C:\Users\ge\Desktop\test1\银行管理系统\个人数据/"+zong[kahao][1]+'.txt'
            dt01 = datetime.today()
            bb=str(dt01.time())
            aa=str(dt01.date())
            yue = str(zong[kahao][2]+cun)
            with open(path,'a',encoding='utf8') as f:
                f.write(aa+bb+'\n存入'+str(cun)+'\n余额:'+ yue +'元\n\n\n')   
            with open(r"C:\Users\ge\Desktop\test1\银行管理系统\客户数据明细.txt",'a',encoding='utf8') as f:
                f.write(aa+bb+'\n用户:'+kahao+'\n存入'+str(cun)+'\n余额:'+ yue +'元\n\n\n') 
            a.append(shengxia)
            a.append(kahao)
            
        else:
            print('您输入的密码有误!!')                
    else:
        print('没这个卡号')
    return a

查询(输入账号密码,验证账号密码,记录查询动作):cha.py

#cha.py
from datetime import datetime
def cha(zong):
    kahao=input('请输入您的卡号:')
    b=[]
    for key in zong.keys():
        b.append(key)
    if kahao in b:
        mi=int(input('请输入您的密码:'))
        if mi ==zong[kahao][0]:
            print('用户:{}\n你剩{}'\
                     .format(zong[kahao][1],zong[kahao][2]))  
            path = r"C:\Users\ge\Desktop\test1\银行管理系统\个人数据/"+zong[kahao][1]+'.txt'
            dt01 = datetime.today()
            bb=str(dt01.time())
            aa=str(dt01.date())
            yue = str(zong[kahao][2])
            with open(path,'a',encoding='utf8') as f:
                f.write(aa+bb+'\n进行了余额查询的操作'+'\n余额:'+ yue +'元\n\n\n') 
            with open(r"C:\Users\ge\Desktop\test1\银行管理系统\客户数据明细.txt",'a',encoding='utf8') as f:
                f.write(aa+bb+'\n用户:'+kahao+'\n进行了余额查询的操作'+'\n余额:'+ yue +'元\n\n\n') 
        else:
            print('密码错误')                
    else:
        print('没这个卡号')

转账(输入账号密码,验证账号密码,输入转账对象账号,验证账号,记录转账动作):zhuan.py

#zhuan.py
from datetime import datetime
def zhuan(zong):
    kahao=input('请输入您的卡号:')
    a=[]
    b=[]
    for key in zong.keys():
        b.append(key)
    if kahao in b:
        mi=int(input('请输入您的密码:'))
        if mi ==zong[kahao][0]:
            while 1:
                zhang1=input('请输入你转账的对象账号:')
                if zhang1 ==kahao:
                    print('你无法向自己转账,请重新输入:')
                elif zhang1 in b:
                    break
                else:
                    print('你输入的卡号不存在,请重新输入:')
                
            zhuan=int(input('你剩{},转:'\
                     .format(zong[kahao][2])))
            if zhuan>zong[kahao][2]:
                print('余额不足,请重新输入')
                while zhuan>zong[kahao][2]:
                    zhuan=int(input('你剩{},转:'\
                     .format(zong[kahao][2])))
                    
            else:
                shengxia=zong[kahao][2]-zhuan
                print('转账成功\n余额{}'.format(shengxia))
                path = r"C:\Users\ge\Desktop\test1\银行管理系统\个人数据/"+zong[kahao][1]+'.txt'
                path1 = r"C:\Users\ge\Desktop\test1\银行管理系统\个人数据/"+zong[zhang1][1]+'.txt'
                dt01 = datetime.today()
                bb=str(dt01.time())
                aa=str(dt01.date())
                yue = str(zong[kahao][2]-zhuan)
                yue1 = str(zong[zhang1][2]+zhuan)
                with open(path,'a',encoding='utf8') as f:
                    f.write(aa+bb+'\n向卡号:'+ zhang1 +',姓名:'+zong[zhang1][1]+',转出:'+str(zhuan) +'元\n余额:'+ yue +'元\n\n\n') 
                
                with open(path1,'a',encoding='utf8') as f:
                    f.write(aa+bb+'\n账号:'+ kahao +',姓名:'+zong[kahao][1]+',向这个账号转入:'+str(zhuan)+'元\n余额'+yue1+'元\n\n\n')
                with open(r"C:\Users\ge\Desktop\test1\银行管理系统\客户数据明细.txt",'a',encoding='utf8') as f:
                    f.write(aa+bb+'\n用户:'+kahao+'\n向卡号:'+ zhang1 +',姓名:'+zong[zhang1][1]+',转出:'+str(zhuan) +'元\n余额:'+ yue +'元\n\n\n') 
                a=[]
                a.append(shengxia)
                a.append(kahao)
                a.append(zhang1)
                a.append(zhuan)
                return a
        else:
            print('密码错误')                
    else:
        print('没这个卡号')
    return a

修改密码(输入账号密码,验证账号密码,输入修改密码,验证密码,记录修改密码动作):gai.py

#gai.py
from datetime import datetime 
def gai(zong):
    kahao=input('请输入您的卡号:')
    b=[]
    for key in zong.keys():
        b.append(key)
    if kahao in b:
        mi=int(input('请输入您的密码:'))
        if mi ==zong[kahao][0]:
            while 1:
                mi1=int(input('请输入你要更改的密码:'))
                mi2=int(input('请再次输入你要更改的密码:') )
                if mi1==mi2:
                    print('\n\n\n\n更改成功!')
                    path = r"C:\Users\ge\Desktop\test1\银行管理系统\个人数据/"+zong[kahao][1]+'.txt'
                    dt01 = datetime.today()
                    bb=str(dt01.time())
                    aa=str(dt01.date())
                    yue = str(zong[kahao][2])
                    with open(path,'a',encoding='utf8') as f:
                        f.write(aa+bb+'\n进行了修改密码的操作'+'\n原密码为:'+str(mi)+'\n现密码为:'+str(mi1)+ '\n余额为:'+yue +'\n\n\n')                     
                    with open(r"C:\Users\ge\Desktop\test1\银行管理系统\客户数据明细.txt",'a',encoding='utf8') as f:
                        f.write(aa+bb+'\n用户:'+kahao+'\n进行了修改密码的操作'+'\n原密码为:'+str(mi)+'\n现密码为:'+str(mi1)+ '\n余额为:'+yue +'\n\n\n')                     

                    return [kahao,mi1]
                    break  
                else:
                    print('\n\n\n\n两次输入不一致,请重新输入!')
        else:
            print('密码错误')                
    else:
        print('没这个卡号')
    return [kahao,mi1]

数据写出(写成dataframe的表格,详列账号、密码、身份证、手机号)生成客户数据.txt文件:alldata.py

#alldata.py
import pandas as pd
def alldata(zong):
    
    alldata=pd.DataFrame(zong,index=['密码','姓名','余额','身份证','手机号码'])
    alldata.to_csv(r"C:\Users\ge\Desktop\test1\银行管理系统\客户数据.txt",index=True,sep='\t',header=True)

数据读取(从客户数据.txt的dataframe的表格中读取账号、密码、身份证、手机号):shuju.py

#shuju.py
import pandas as pd
def shuju():
    #导入数据
    zong1=pd.read_table(r"C:\Users\ge\Desktop\test1\银行管理系统\客户数据.txt",sep='\t',engine='python')
    #获取卡号
    c=[]
    for i in zong1.columns:
        i = str(i)
        c.append(i)
    del c[0]
    #获取卡号总数
    geshu=len(zong1.loc[1])-1
    #把获取的数据储存为字典
    a,zong={},{}
    for g in range(geshu):
        a = {c[g]:[int(zong1.iloc[0,g+1]),zong1.iloc[1,g+1],int(zong1.iloc[2,g+1])]}
        zong.update(a)
    zong['222222'][0],zong['111111'][0],zong['222222'][2],zong['111111'][2]=2,1,9999,9999
    
    return zong

管理员系统:

里面包含七项功能

获取所有用户的卡号

获取所有客户姓名

查询今日此银行的流水

用户所有信息的总览(账号密码卡号余额手机号等)

恢复出厂设置(清空所有用户的数据)

系统上所记录的所有的用户的操作(开户、取款、转账等)

按余额区间来查询用户(剩下姓名查询和地区查询功能现在才发现并没添加上去)

完整管理员系统代码:amin.py

#admin.py
def guanli(zong,money):
    while 1:
        print('''
        ------------------------------------------
        |   1.获取所有卡号\t  2.获取所有客户名   
        |                                        
        |   3.今日此子银行流水\t4.用户信息总览     
        |                                        
        |   5.恢复出厂设置\t  6.系统数据明细    
        |                                        
        |              7.查询
        |
        |            输入‘q’退出                       
        |                                        
        ------------------------------------------
        ''')
        
        choose1 = input('请输入你的选择:')
        if choose1 =='1':
            print(list(zong.keys()))
        if choose1 =='2':
            c=list(zong.keys())
            names=[]
            for c1 in c:
                name = zong[c1][1]
                names.append(name)
            print(names)
        if choose1 =='3':
            c=list(zong.keys())
            moneys1=[]
            for c1 in c:
                money1 = zong[c1][2]
                moneys1.append(money1)
            money1 = sum(moneys1)
            change = money1-money
            print('今日入账金额:{}'.format(change))
        if choose1 =='4':
            print(zong)
        if choose1 =='5':
            choose2=input('您真的要将银行管理系统的所有数据恢复出厂设置吗?(注意:此举不可逆!!!)\n请输入“确认”或者“取消”:')
            while 1:
                if choose2 =='确认':
                    zong= {'111111':['1','白晋阁',9999,111111111111111111,11111111111],'222222':['2','李铭焕',9999,111111111111111111,11111111111]}
                    print('本系统所有数据已被还原自出厂数据!')
                    break
                elif choose2 =='取消':
                    print('\n\n您已取消此操作。')
                    break
                    
                else:
                    choose2=input('您的输入有误!!\n请输入“确认”或者“取消”:')
            break
        if choose1 == 'q':
            print('您已退出银行管理系统!')
            break
        if choose1 =='6':
            with open(r"C:\Users\ge\Desktop\test1\银行管理系统\客户数据明细.txt",'r',encoding='utf8') as f:
                print(f.read())
        if choose1 =='7':
            while 1:
                choose2 == input('请选择用户检索方式:\n1.金额区间查询\n2.姓名查询\n3.地区查询')
                if choose2 =='1':
                    shangxian = int(input("请输入自定义查询金额上限:"))
                    xiaxian = int(input('请输入自定义查询金额下限:'))
                    c=list(zong.keys())
                    kahaos1 =[]
                    for c1 in c:
                        if zong[c1][2]>=xiaxian and zong[c1][2]<=shangxian:
                            kahaos1.append(c1)
                        else:
                            continue
                    print(kahaos1)
                else:
                    print('您的输入有误,请重新输入:')
                    break
    return zong

以上就是银行管理系统额全部代码,需要注意的是以上文件写出写入的路径我都设置为了绝对路径(当时为了省事),使用的时候需要改一下文件写出导入路径。

【银行管理系统】部分截图:

客户数据明细

 开户、存款

管理员系统

系统数据明细

个人数据

改进是改进了,不过改得匆忙,还有很大的改动空间。还有一个问题是这仅能在python环境下运行,过几天有空了的话我会将程序窗体化打包发布,这样就可以在没有python环境的电脑运行了,有兴趣的小伙伴可以关注走一波哦~

物联沃分享整理
物联沃-IOTWORD物联网 » 分享大三改进后的python写的【银行管理系统】,超详细 【内附源码】

发表评论