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

python实现简单银行管理系统

作者:喜欢海呀  发布时间:2021-01-24 17:59:28 

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

本文为大家分享了python银行管理系统的具体代码,供大家参考,具体内容如下

自己写的练手小程序,练习面向对象的概念,代码中都有注释,刚学的同学也可以很容易看懂(需要自己用pickle模块新建一个database.txt文件,用来存储用户数据信息)。


# atm.py
# 各种操作类
import random
from card import Card
from user import User
import time

class ATM(object):
# 初始化
def __init__(self, allUsersInfo):
# 将所有用户信息传递过来,以便后续操作
self.allUsersInfo = allUsersInfo # 卡号 :用户

# 确认密码
def checkPwd(self, realPwd):
myList = [3, 2, 1, 0]
for i in myList:
 # 如果密码输入错误超过三次
 if i == 0:
 return False
 rePass = input('请再次输入密码:')
 if realPwd == rePass:
 return True
 elif (i - 1) != 0:
 print('输入错误,你还有%d次输入的机会!' % (i - 1))

# 随机生成开户卡号
def randomId(self):
while True:
 # 存储卡号
 str = ''

# 随机生成6位卡号
 for i in range(6):
 ch = chr(random.randrange(ord('0'), ord('9') + 1))
 str += ch

# 判断卡号是否重复
 if not self.allUsersInfo.get(str):
 return str

# 开卡操作
def createUser(self):
try:
 name = input('请输入姓名:') # 用户姓名
 idCard = input('请输入身份证号码:') # 用户身份证号
 phone = input('请输入电话号码:') # 用户的电话号码
 preMoney = int(input('请输入预存金额:')) # 用户的预存金额

# 预存金额少于0则开户失败
 if preMoney < 0:
 print('预存金额有误,开户失败!')
 return -1

# 设置密码
 onePwd = input('请输入密码:') # 第一次密码
 twoPwd = self.checkPwd(onePwd)

if not twoPwd:
 print('确认密码错误,开户失败!')
 return -1

# 以上全部完成,则开户所需的信息准备齐全,开户成功
 # 系统生成开户卡号

# 生成卡号
 cardStr = self.randomId()

# 创建一个卡的实例,用于存储卡的信息
 card = Card(cardStr, onePwd, preMoney)

# 创建一个用户实例,用于存储用户的信息
 user = User(name, idCard, phone, card)

# 按 卡号 : 用户信息 键值对的形式存入字典中
 self.allUsersInfo[cardStr] = user

# 提示用户,已经开户成功
 time.sleep(1)
 print('开户成功,请牢记卡号({})...'.format(cardStr))

except Exception as e:
 print('抱歉,系统出现故障,暂时无法操作!')
 return

# 判断卡号是否存在
def isExistence(self, cardStrInp):
# 卡号不存在,直接退回到选项界面
if self.allUsersInfo.get(cardStrInp):
 return True

# 卡号不存在的情况下
else:
 print('卡号不存在!')
 return False

# 做查询等操作时,输入密码
def secretOption(self, cardStrInp):
myList = [3, 2, 1, 0]
for i in myList:
 # 如果密码输入错误超过三次
 if i == 0:
 return False
 passInp = input('请输入密码:')
 if passInp == self.allUsersInfo[cardStrInp].cardInfo.cardPwd:
 return True
 elif (i - 1) != 0:
 print('输入错误,你还有%d次输入的机会!' % (i - 1))

# 查询用户信息
def searchUserInfo(self):
cardStrInp = input('请输入卡号:') # 用户想要查询的卡号

# 判断卡号的状态
isExist = self.isExistence(cardStrInp)

# 卡号存在
if isExist:
 # 是否被锁定
 if not self.allUsersInfo[cardStrInp].cardInfo.isLock:
 # 输入密码并判断
 # 密码正确则输出余额
 if self.secretOption(cardStrInp):
  print('账号:%s 余额:%d' % (cardStrInp, self.allUsersInfo[cardStrInp].cardInfo.cardMoney))
  return 0

# 密码错误则锁定卡号
 else:
  print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
  self.allUsersInfo[cardStrInp].cardInfo.isLock = True
  return -1
 else:
 print('该卡号已被锁定,请先解锁!')
 return -1

# 取钱
def getMoney(self):
cardStrInp = input('请输入卡号:')

isExist = self.isExistence(cardStrInp)
# print(isExist)

# 如果卡号存在
if isExist:
 # 如果没被锁定
 if not self.allUsersInfo[cardStrInp].cardInfo.isLock:

# 如果密码正确
 if self.secretOption(cardStrInp):
  getMoney = int(input('请输入取款金额:'))

# 如果取款金额超出余额
  if getMoney > self.allUsersInfo[cardStrInp].cardInfo.cardMoney:
  print('余额不足,取款失败!')
  return -1

# 余额足够的情况,取款成功
  else:
  self.allUsersInfo[cardStrInp].cardInfo.cardMoney -= getMoney
  print('取款成功,卡上余额:%d' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
  return 0
 else:
  print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
  self.allUsersInfo[cardStrInp].cardInfo.isLock = True
  return -1
 else:
 print('该卡号已被锁定,请先解锁!')
 return -1

# 存钱
def saveMoney(self):
cardStrInp = input('请输入卡号:')

isExist = self.isExistence(cardStrInp)

if isExist:
 # 如果没被锁定
 if not self.allUsersInfo[cardStrInp].cardInfo.isLock:

# 如果密码正确
 if self.secretOption(cardStrInp):
  saveMoney = int(input('请输入存款金额:'))
  if saveMoney <= 0:
  print('无效的存款金额!')
  return -1
  else:
  # 存款成功
  self.allUsersInfo[cardStrInp].cardInfo.cardMoney += saveMoney
  print('存款成功,卡内余额为%d!' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
 else:
  print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
  self.allUsersInfo[cardStrInp].cardInfo.isLock = True
  return -1
 else:
 print('该卡号已被锁定,请先解锁!')
 return -1

# 转账
def transMoney(self):
cardInp = input('请输入卡号:')

isExist = self.isExistence(cardInp)

# 卡号存在
if isExist:
 # 没被锁定
 if not self.allUsersInfo[cardInp].cardInfo.isLock:
 # 密码正确
 if self.secretOption(cardInp):
  transCardInp = input('请输入要转账的卡号:')
  isExistTrans = self.isExistence(transCardInp)

# 要转账的卡号存在
  if isExistTrans:
  # 要转账的卡号没被锁定
  if not self.allUsersInfo[transCardInp].cardInfo.isLock:
   # 要转账的卡号不是自己的卡号
   if transCardInp != cardInp:
   transMoneyInp = int(input('请输入要转账的金额:'))
   # 判断转账金额是否大于卡内余额
   if transMoneyInp > self.allUsersInfo[cardInp].cardInfo.cardMoney:
    print('余额不足,转账失败!')
    return -1
   else:
    self.allUsersInfo[cardInp].cardInfo.cardMoney -= transMoneyInp
    self.allUsersInfo[transCardInp].cardInfo.cardMoney += transMoneyInp
    print('转账成功,卡内余额为%d!' % self.allUsersInfo[cardInp].cardInfo.cardMoney)
   else:
   print('无法转入自己的账户!')
   return -1
  else:
   print('对方卡号已被锁定,无法转账,请先解锁!')
   return -1
 else:
  print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
  self.allUsersInfo[cardInp].cardInfo.isLock = True
  return -1
 else:
 print('该卡号已被锁定,请先解锁!')
 return -1

# 改密
def changePwd(self):
cardStrInp = input('请输入卡号:')

isExist = self.isExistence(cardStrInp)

if isExist:
 # 如果没被锁定
 if not self.allUsersInfo[cardStrInp].cardInfo.isLock:

# 如果密码正确
 if self.secretOption(cardStrInp):
  # 输入修改后的密码
  changePwd = input('请输入新密码:')

# 不允许新密码和旧密码相同
  if changePwd != self.allUsersInfo[cardStrInp].cardInfo.cardPwd:
  myList = [3, 2, 1, 0]
  for i in myList:
   # 如果密码输入错误超过三次
   if i == 0:
   print('确认密码错误次数超过3次,修改密码失败!')
   return -1
   passInp = input('请确认新密码:')

# 如果新密码确认成功,则修改密码
   if passInp == changePwd:
   print('密码修改成功!')
   self.allUsersInfo[cardStrInp].cardInfo.cardPwd = changePwd
   return 0
   elif (i - 1) != 0:
   print('输入错误,你还有%d次输入的机会!' % (i - 1))
  # 新密码和旧密码相同,不允许修改,提示并退出
  else:
  print('新密码不允许和旧密码相同!')
  return -1
 # 密码不正确
 else:
  print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
  self.allUsersInfo[cardStrInp].cardInfo.isLock = True
  return -1
 else:
 print('该卡号已被锁定,请先解锁!')
 return -1

# 解锁
def unlockUser(self):
cardStrInp = input('请输入卡号:')

isExist = self.isExistence(cardStrInp)

# 存在
if isExist:
 # 被锁定
 if self.allUsersInfo[cardStrInp].cardInfo.isLock:
 # 如果密码正确
 if self.secretOption(cardStrInp):
  # 输入身份证号信息做确认
  idCardInp = input('请输入身份证号:')

# 身份证号信息匹配
  if idCardInp == self.allUsersInfo[cardStrInp].idCard:
  # 解锁成功
  print('解锁成功!')
  self.allUsersInfo[cardStrInp].cardInfo.isLock = False
  return 0
  else:
  print('身份证号信息不匹配,解锁失败!')
  return -1
 # 密码不正确
 else:
  print('密码输出错误,解锁失败!')
  return -1
 else:
 print('该卡号未被锁定,无需解锁!')
 return -1

# card.py
# 卡类
class Card(object):
def __init__(self, cardStr, cardPwd, cardMoney):
self.cardStr = cardStr # 卡号
self.cardPwd = cardPwd # 卡密
self.cardMoney = cardMoney # 卡中余额

self.isLock = False # 卡号是否被锁

# main.py
# 主函数
from view import View
import pickle
from atm import ATM
import time

def main():
# 定义管理员对象
admin = View()

# 管理员登录界面
admin.printAdminView()

# 如果管理员账号、密码输入错误则退出
if admin.adminOption():
return -1

# 读取存储在文件中的所有用户的信息
file = open('database.txt', 'rb')
allUsersInfo = pickle.load(file) # 将所有用户信息存储到 allUsersInfo中去
file.close() # 关闭文件

# 打印所有用户信息,以便验证
print('*' * 10)
print('usersInfo:', allUsersInfo)

# 创建atm实例,并将所有用户信息传递过去,进行初始化
atm = ATM(allUsersInfo)

# 循环进行操作选项
while True:
# 调用功能显示方法,显示功能选项
admin.printSysFunctionView()

# 提示用户输入功能选项进行操作
option= input('请输入操作选项(数字):')

# 对用户的操作选项进行判断
if option == "1": # 开户操作
 atm.createUser()

elif option == "2": # 查询余额操作
 atm.searchUserInfo()

elif option == "3": # 取钱操作
 atm.getMoney()

elif option == "4": # 存钱操作
 atm.saveMoney()

elif option == "5": # 转账操作
 atm.transMoney()

elif option == "6": # 改密码操作
 atm.changePwd()

elif option == "7": # 解锁操作
 atm.unlockUser()

# 以下操作暂时未写
# elif option == "q": # 退出操作
# # atm.quitSys()
# print('退出')

# elif option == "9": # 补卡操作
# print("补卡")
#
# elif option == "0": # 销户操作
# print("销户")

elif option == "8": # 退出系统
 return 0

# 如果用户输入的不是上述操作
else:
 print('无效的操作选项!')
 return -1

# 将新信息写入文件
# 将当前系统中的用户信息保存到文件中
f = open('database.txt', "wb")
pickle.dump(allUsersInfo, f)
f.close()

if __name__ == '__main__':
main()

# user.py
# 用户信息类
class User(object):
def __init__(self, name, idCard, phone, cardInfo):
self.name = name # 用户姓名
self.idCard = idCard # 用户身份证号
self.phone = phone # 用户的手机号码
self.cardInfo = cardInfo # 用户的卡的信息(卡号、密码、余额)

# view.py
# 视图类
import time

class View(object):
admin = '1'
pwd = '1'

# 管理员登录界面
def printAdminView(self):
print("*****************************************************************")
print("*        *")
print("*        *")
print("*   欢迎登陆丹丹的银行   *")
print("*        *")
print("*        *")
print("*****************************************************************")

def printSysFunctionView(self):
print("*****************************************************************")
print("* 开户(1)    查询(2)  *")
print("* 取款(3)    存款(4)  *")
print("* 转账(5)    改密(6)  *")
print("* 解锁(7)    退出(8)  *")
# print("* 补卡(9)    销户(0)  *")
# print("*    退出(t)    *")
print("*****************************************************************")

def adminOption(self):
inputAdmin = input('请输入管理员账号:')

if inputAdmin != self.admin:
 print('账号错误!')
 return -1

inputPwd = input('请输入管理员密码:')

if inputPwd != self.pwd:
 print('密码错误!')
 return -1

# 管理员账号和密码全部正确
print('操作成功,请稍后...')
time.sleep(2)
return 0

# view = View()
# view.printAdminView()
# view.adminOption()
# view.printSysFunctionView()

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

来源:https://blog.csdn.net/qq_25046261/article/details/78302547

0
投稿

猜你喜欢

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