python实现银行管理系统


Posted in Python onOctober 25, 2019

python实现银行管理系统,供大家参考,具体内容如下

有的地方用的方法的比较复杂,主要是为回顾更多的知识

test1用来存类和函数

#test1.py 
import random #用来随机产生卡号
import pickle #序列化,用来存放和取出产生的用户数据
import os #产生文件
import re #正则表达式,用来判断身份证和手机号,其他地方也可以使用
class Card:
 def __init__(self,cardId,password,money=0):
 self.cardId=cardId
 self.password=password
 self.money=money
class User(Card):
 def __init__(self,username,phone,uid,card):
 self.username=username
 self.phone=phone
 self.uid=uid
 self.user_card=card #User继承Card对象
class Bank(User): #Bank 继承User,Bank是序列化的对象,所以将其变为字典
 def __init__(self,user):
 self.cardId=user.user_card.cardId 
 self.user=user 
 self.users={self.cardId:self.user} #键,卡号 :值,User对象 

def generate_cardid(): #方法一 产生卡号
 list=[]
 for i in range(0,11):
 n=random.randint(0,9)
 n=str(n)
 list.append(n)
 # str="".join(list)
 return list
# generate_cardid()
# user_cardId=input("请输入您的账号:")
def create_user(): #方法2:开户
 while True:
 uid=input("请输入身份证:")
 realut=re.fullmatch("\d{17}[\d,X]",uid) #正则判断身份证是否合理
 if realut:
 uid=realut.group()
 break
 else:
 print("格式不合法")
 continue
 username=input("请输入姓名:")
 while True:
 phone=input("请输入手机号码:")
 realut = re.fullmatch("1\d{10}", phone) #正则判断手机号是否合理,其他需要判断的地方都可以判断,我就不再使用了
 if realut:
 phone=realut.group()
 # print(phone)
 break
 else:
 print("格式不合法")
 continue
 list=generate_cardid() #得到卡号列表
 cardId="".join(list) #将卡号变成字符串,字符串的卡号才能做成键
 print(f"您的卡号为:{cardId}")
 while True:
 password1=input("请输入密码:")
 password2=input("再次输入密码确认:")
 if password1==password2:
 password=password1
 break
 else :
 print("两次密码不同,请重新输入!")
 continue
 card=Card(cardId,password) 
 user=User(uid,username,phone,card)
 bank=Bank(user) #产生bank对象
 with open(f"data\\{cardId}.txt","ab") as file_w: #重点:创建一个文件夹data来存放产生的bank对象,每个对象根据卡号产生一个txt文件,用来存放用户的所有数据
 pickle.dump(bank,file_w) #将bank 序列化保存到文档中
# create_user()

def user_login(user_cardId): #登录

 if os.path.exists(f"data\\{user_cardId}.txt"):
 with open(f"data\\{user_cardId}.txt", "rb") as file_r:
 u_data = pickle.load(file_r) #根据卡号取出txt文档,反序列化取出数据
 if u_data.cardId == user_cardId: #u_data是一个字典,键是卡号,值是user对象 
 n = 1
 while True:
 if n <= 3:
 user_pw = input("请输入密码:")
 if u_data.user.user_card.password == user_pw:
 return True
 else:
 print("密码错误!")
 n+=1
 continue
 else:
 print("三次输入密码错误!")
 return
 else:
 print("没有该用户")

# user_login(user_cardId)
def save_money(user_cardId): # 方法4:存钱
 if user_login(user_cardId): #如果登录成功
 money=int(input("请您输入存钱金额:"))
 with open(f"data\\{user_cardId}.txt", "rb") as file_r:
 u_data = pickle.load(file_r)
 u_data.user.user_card.money=u_data.user.user_card.money+money
 print("您的余额为:",u_data.user.user_card.money)
 with open(f"data\\{user_cardId}.txt", "wb") as file_w: #这里要用wb,而不是ab,改变数据后,需要覆盖原来的数据,而不是添加
 pickle.dump(u_data, file_w)
# save_money()

def withdraw_money(user_cardId): # 方法5:取钱
 if user_login(user_cardId):
 money=int(input("请您输入取款金额:"))
 with open(f"data\\{user_cardId}.txt", "rb") as file_r:
 u_data = pickle.load(file_r)
 if money>u_data.user.user_card.money:
 print("余额不足")
 else:
 u_data.user.user_card.money=u_data.user.user_card.money-money
 print("您的余额为:", u_data.user.user_card.money)
 with open(f"data\\{user_cardId}.txt", "wb") as file_w:
 pickle.dump(u_data, file_w)

# withdraw_money()

def transfer_accounts(user_cardId): #方法6,转账
 if user_login(user_cardId):
 with open(f"data\\{user_cardId}.txt", "rb") as file_r:
 u_data = pickle.load(file_r)
 while True:
 money = int(input("请您转账取款金额:"))
 if money > u_data.user.user_card.money:
 print("余额不足")
 break
 else:
 cardId=int(input("请您对方卡号:"))
 if os.path.exists(f"data\\{cardId}.txt"): #如果对方卡号存在
 u_data.user.user_card.money = u_data.user.user_card.money - money #自己的money减
 print("您的余额为:", u_data.user.user_card.money)
 with open(f"data\\{user_cardId}.txt", "wb") as file_w:
 pickle.dump(u_data, file_w)

 with open(f"data\\{cardId}.txt", "rb") as file_r1: #根据对方的卡号进行查找对方的数据
 u_data1 = pickle.load(file_r1)
 with open(f"data\\{cardId}.txt", "wb") as file_w1:
 u_data1.user.user_card.money = u_data1.user.user_card.money + money #对方money加
 pickle.dump(u_data1, file_w1)
 print("转账成功")
 break
 else:
 print("该用户不存在")
 break

# transfer_accounts()

def select_user(user_cardId): # 方法7:查询余额
 if user_login(user_cardId):
 with open(f"data\\{user_cardId}.txt", "rb") as file_r:
 u_data = pickle.load(file_r)
 print("您的余额为:",u_data.user.user_card.money)
# select_user()

def update_password(user_cardId): # 方法8:修改密码
 if user_login(user_cardId):
 while True:
 pw1=input("请输入新密码:")
 pw2=input("请再次输入密码:")
 if pw1==pw2:
 with open(f"data\\{user_cardId}.txt", "rb") as file_r:
 u_data = pickle.load(file_r)
 u_data.user.user_card.password=pw1
 with open(f"data\\{user_cardId}.txt", "wb") as file_w:
 pickle.dump(u_data, file_w)
 break

 else:
 print("两次密码不相同")
 continue

test2用来调用test1中的函数

import test1
import os
T =True
while True:
 user_cardId=input("请输入您的账号,退出请按0,注册请按1:\n")
 if os.path.exists(f"data\\{user_cardId}.txt"):
 true=True
 while true:
 x = input("[2]查询余额 [3]取款 [4]存钱 [5]转账 [6]修改密码 [7]退出系统\n"
 "请选择需要的操作输入对应的数字:"
 if x=="2": #键盘输入默认是str类型
 test1.select_user(user_cardId)
 continue
 elif x=="3":
 test1.withdraw_money(user_cardId)
 continue

 elif x=="4":
 test1.save_money(user_cardId)
 continue
 elif x=="5":
 test1.transfer_accounts(user_cardId)
 continue
 elif x=="6":
 test1.update_password(user_cardId)
 continue
 elif x=="7":
 true=False
 else:
 print("没有对应操作")
 continue
 elif user_cardId=="0":
 print("欢迎再次使用")
 break
 elif user_cardId=="1":
 test1.create_user()
 continue

 else :
 print("没有该账户")
 T=True
 while T:
 num = input("需要注册账号请按1,退出注册服务请按0:")
 if num =="1":
 test1.create_user()
 elif num =="0":
 print("欢迎再次使用")
 T =False
 break
 else:
 print("没有对应操作")
 continue
 break

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例讲解Python面向对象编程中类的继承
Jun 17 Python
浅谈机器学习需要的了解的十大算法
Dec 15 Python
Python代码实现KNN算法
Dec 20 Python
基于python requests库中的代理实例讲解
May 07 Python
python实现抖音视频批量下载
Jun 20 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
ubuntu16.04制作vim和python3的开发环境
Sep 23 Python
Python yield生成器和return对比代码实例
Apr 20 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
Python手动或自动协程操作方法解析
Jun 22 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 Python
Django视图扩展类知识点详解
Oct 25 #Python
Python装饰器使用你可能不知道的几种姿势
Oct 25 #Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 #Python
Python下应用opencv 实现人脸检测功能
Oct 24 #Python
Python迭代器iterator生成器generator使用解析
Oct 24 #Python
Python 取numpy数组的某几行某几列方法
Oct 24 #Python
Django和Flask框架优缺点对比
Oct 24 #Python
You might like
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
jQuery页面刷新(局部、全部)问题分析
2016/01/09 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
2016/08/17 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
替换python字典中的key值方法
2018/07/06 Python
Python实现的简单计算器功能详解
2018/08/25 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
优秀应届毕业生推荐信
2014/02/18 职场文书
安全教育实施方案
2014/03/02 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
期中考试反思800字
2014/05/01 职场文书
新农村建设典型材料
2014/05/31 职场文书
工程部岗位职责
2015/02/10 职场文书
毕业生对母校寄语
2015/02/26 职场文书
共青团员自我评价
2015/03/10 职场文书
机器人总动员观后感
2015/06/09 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书