基于python实现银行管理系统
作者:理想艺术!马 发布时间:2023-11-22 01:32:18
标签: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()
来源:https://blog.csdn.net/mzy1711231996/article/details/115842211


猜你喜欢
- 网上看到过许多螺旋线的程序,但不是黑色就是单个颜色不变。这里作者编了一个程序,还很漂亮的。希望大家喜欢!!!使用turtle绘图。代码如下。
- 有时候我们的数据是按某个频率收集的,比如每日、每月、每15分钟,那么我们怎么产生对应频率的索引呢?pandas中的date_range可用于
- mat数据格式是Matlab默认保存的数据格式。在Python中,我们可以使用h5py库来读取mat文件。>>> impo
- 阻塞任务是阻止当前线程继续进行的任务。如果在 asyncio 程序中执行阻塞任务,它会停止整个事件循环,从而阻止任何其他协程继续进行。我们可
- 如下所示:import sysfrom PyQt5 import QtGui, QtCore, QtWidgetsfrom PyQt5.Qt
- 这是网站制作很流行的下拉列表两级连动的代码,也是很多人使用的代码。下面,先来看这段代码:<%dim countset&nbs
- Python基础语法-容器容器型数据类型是指可以包含多个多种数据类型数据的数据类型。1.列表(list)1.1 列表基本概念列表是Pytho
- 本文实例讲述了python提取页面内url列表的方法。分享给大家供大家参考。具体实现方法如下:from bs4 import Beautif
- 一、概述PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却
- 本人曾经用过的备份方式有:mysqldump、mysqlhotcopy、BACKUP TABLE 、SELECT INTO OUTFILE,
- 在《多线程与同步》中介绍了多线程及存在的问题,而通过使用多进程而非线程可有效地绕过全局解释器锁。 因此,通过multiprocessing模
- 一、要求二、原理决策树是一种类似于流程图的结构,其中每个内部节点代表一个属性上的“测试”,每个分支代表测试的结果,每个叶节点代表一个测试结果
- 呃,看到这个标题,我们可以首先将IE系浏览器无视了。我承认,我是有极简主义倾向的,我希望能够使用最少的代码和图片做更多的事情。虽然CSS3仅
- 这篇文章主要介绍了python matplotlib饼状图参数及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 注:本文只讨论技术不涉及商业,如有侵权请告知,未经本人同意转载后果自负!本文是通过浏览器端ajax,node端request-json进行爬
- 下载IDEA、PyCharm、PhpStorm免费激活码本次更新:2020年11月13 (定期更新)推荐教程:IntelliJ IDEA 2
- 本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法。分享给大家供大家参考,具
- pytorch之添加BN层批标准化模型训练并不容易,特别是一些非常复杂的模型,并不能非常好的训练得到收敛的结果,所以对数据增加一些预处理,同
- 很高兴参加了这一期的薯片会,认识了几个朋友~~不料的却是今天我要来总结一下本次薯片会我们总共讨论了三个议题:A、 如何让“用户”更容易识别超
- 以前的Dreamweaver中是没有图片处理功能的,即使你要处理也只能使用CSS中的相关滤镜进行一些效