网络编程
位置:首页>> 网络编程>> Python编程>> 基于python实现银行管理系统

基于python实现银行管理系统

作者:理想艺术!马  发布时间:2023-11-22 01:32:18 

标签:python,银行,管理系统

一、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()

来源:https://blog.csdn.net/mzy1711231996/article/details/115842211

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com