python实现简单银行管理系统


Posted in Python onOctober 25, 2019

本文为大家分享了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()

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

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

Python 相关文章推荐
Python的Django框架使用入门指引
Apr 15 Python
让Python代码更快运行的5种方法
Jun 21 Python
python实现计算倒数的方法
Jul 11 Python
python基础知识小结之集合
Nov 25 Python
Python BS4库的安装与使用详解
Aug 08 Python
python django下载大的csv文件实现方法分析
Jul 19 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
Feb 14 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
keras分类模型中的输入数据与标签的维度实例
Jul 03 Python
Python中对象的比较操作==和is区别详析
Feb 12 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 Python
Python银行系统实战源码
Oct 25 #Python
python实现银行管理系统
Oct 25 #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
You might like
PHP 中dirname(_file_)讲解
2007/03/18 PHP
php格式化工具Beautify PHP小小BUG
2008/04/24 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
JQuery魔力之$(&quot;tagName&quot;)与selector
2012/03/05 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
Sanic框架Cookies操作示例
2018/07/17 Python
python学生信息管理系统(完整版)
2020/04/05 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
Python创建数字列表的示例
2019/11/28 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
美国内衣品牌:Leonisa
2016/08/14 全球购物
公关关系专员的自我评价分享
2013/11/20 职场文书
实习自我评价怎么写
2013/12/02 职场文书
新郎新娘婚礼答谢词
2014/01/11 职场文书
自我鉴定写作要点
2014/01/17 职场文书
趣味比赛活动方案
2014/02/15 职场文书
情人节活动策划方案
2014/02/27 职场文书
文明城市创建标语
2014/06/16 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
客户付款通知书
2015/04/23 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书