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 相关文章推荐
pandas数值计算与排序方法
Apr 12 Python
对python读取CT医学图像的实例详解
Jan 24 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
python中的协程深入理解
Jun 10 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
Jun 12 Python
10个python爬虫入门实例(小结)
Nov 01 Python
Python getsizeof()和getsize()区分详解
Nov 20 Python
Python绘制数码晶体管日期
Feb 19 Python
pytorch查看网络参数显存占用量等操作
May 12 Python
浅谈Python numpy创建空数组的问题
May 25 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 Python
如何利用python创作字符画
Jun 25 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的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
浅谈php冒泡排序
2014/12/30 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
jQuery extend 的简单实例
2013/09/18 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
jquery实现图片预加载
2015/12/25 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Kali Linux安装ipython2 和 ipython3的方法
2019/07/11 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
警察群众路线整改措施
2014/09/26 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
安全生产奖惩制度
2015/08/06 职场文书
自考生自我评价
2019/06/21 职场文书
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
python中 .npy文件的读写操作实例
2022/04/14 Python