Python银行系统实战源码


Posted in Python onOctober 25, 2019

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

import time
import random
import pickle
import os


class Card(object):
 def __init__(self, cardId, cardPasswd, cardMoney):
  self.cardId = cardId
  self.cardPasswd = cardPasswd
  self.cardMony = cardMoney
  self.cardLock = False # 后面到了锁卡的时候需要有个卡的状态


class User(object):
 def __init__(self, name, idCard, phone, card):
  self.name = name
  self.idCard = idCard
  self.phone = phone
  self.card = card


class Admin(object):
 admin = "1"
 passwd = "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("*     退出(q)      *")
  print("****************************************************")

 def adminOption(self):
  inputAdmin = input("请输入管理员账号:")
  if self.admin != inputAdmin:
   print("输入账号有误!")
   return -1
  inputPasswd = input("请输入管理员密码:")
  if self.passwd != inputPasswd:
   print("密码输入有误!")
   return -1

  # 能执行到这里说明账号密码正确
  print("操作成功,请稍后······")
  time.sleep(2)
  return 0

 def ban(self, allUsers):
  for key in allUsers:
   print("账号:" + key + "\n" + "姓名:" + allUsers[key].name + "\n" + "身份证号:" + allUsers[key].idCard + "\n" + "电话号码:" + allUsers[
    key].phone + "\n" + "银行卡密码:" + allUsers[key].card.cardPasswd + "\n")


class ATM(object):
 def __init__(self, allUsers):
  self.allUsers = allUsers # 用户字典

 # 开户
 def creatUser(self):
  # 目标:向用户字典中添加一对键值对(卡号->用户)
  name = input("请输入您的名字:")
  idCard = input("请输入您的身份证号:")
  phone = input("请输入您的电话号码:")
  prestoreMoney = int(input("请输入预存款金额:"))
  if prestoreMoney < 0:
   print("预存款输入有误!开户失败")
   return -1

  onePasswd = input("请设置密码:")
  # 验证密码
  if not self.checkPasswd(onePasswd):
   print("输入密码错误,开户失败!")
   return -1

  # 生成银行卡号
  cardStr = self.randomCardId()
  card = Card(cardStr, onePasswd, prestoreMoney)

  user = User(name, idCard, phone, card)
  # 存到字典
  self.allUsers[cardStr] = user
  print("开户成功!请记住卡号:" + cardStr)

 # 查询
 def searchUserInfo(self):
  cardNum = input("请输入您的卡号:")
  # 验证是否存在该卡号
  user = self.allUsers.get(cardNum)
  if not user:
   print("该卡号不存在,查询失败!")
   return -1
  # 判断是否锁定
  if user.card.cardLock:
   print("该卡已锁定!请解锁后再使用其功能!")
   return -1

  # 验证密码
  if not self.checkPasswd(user.card.cardPasswd):
   print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
   user.card.cardLock = True
   return -1
  print("账号:%s 余额:%d" % (user.card.cardId, user.card.cardMony))

 # 取款
 def getMoney(self):
  cardNum = input("请输入您的卡号:")
  # 验证是否存在该卡号
  user = self.allUsers.get(cardNum)
  if not user:
   print("该卡号不存在,取款失败!")
   return -1
  # 判断是否锁定
  if user.card.cardLock:
   print("该卡已锁定!请解锁后再使用其功能!")
   return -1

  # 验证密码
  if not self.checkPasswd(user.card.cardPasswd):
   print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
   user.card.cardLock = True
   return -1

  # 开始取款
  amount = int(input("验证成功!请输入取款金额:"))
  if amount > user.card.cardMony:
   print("取款金额有误,取款失败!")
   return -1
  if amount < 0:
   print("取款金额有误,取款失败!")
   return -1
  user.card.cardMony -= amount
  print("您取款%d元,余额为%d元!" % (amount, user.card.cardMony))

 # 存款
 def saveMoney(self):
  cardNum = input("请输入您的卡号:")
  # 验证是否存在该卡号
  user = self.allUsers.get(cardNum)
  if not user:
   print("该卡号不存在,存款失败!")
   return -1
  # 判断是否锁定
  if user.card.cardLock:
   print("该卡已锁定!请解锁后再使用其功能!")
   return -1

  # 验证密码
  if not self.checkPasswd(user.card.cardPasswd):
   print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
   user.card.cardLock = True
   return -1

  # 开始存款
  amount = int(input("验证成功!请输入存款金额:"))
  if amount < 0:
   print("存款金额有误,存款失败!")
   return -1
  user.card.cardMony += amount
  print("您存款%d元,最新余额为%d元!" % (amount, user.card.cardMony))

 # 转账
 def transferMoney(self):
  cardNum = input("请输入您的卡号:")
  # 验证是否存在该卡号
  user = self.allUsers.get(cardNum)
  if not user:
   print("该卡号不存在,转账失败!")
   return -1
  # 判断是否锁定
  if user.card.cardLock:
   print("该卡已锁定!请解锁后再使用其功能!")
   return -1

  # 验证密码
  if not self.checkPasswd(user.card.cardPasswd):
   print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
   user.card.cardLock = True
   return -1

  # 开始转账
  amount = int(input("验证成功!请输入转账金额:"))
  if amount > user.card.cardMony or amount < 0:
   print("金额有误,转账失败!")
   return -1

  newcard = input("请输入转入账户:")
  newuser = self.allUsers.get(newcard)
  if not newuser:
   print("该卡号不存在,转账失败!")
   return -1
  # 判断是否锁定
  if newuser.card.cardLock:
   print("该卡已锁定!请解锁后再使用其功能!")
   return -1
  user.card.cardMony -= amount
  newuser.card.cardMony += amount
  time.sleep(1)
  print("转账成功,请稍后···")
  time.sleep(1)
  print("转账金额%d元,余额为%d元!" % (amount, user.card.cardMony))

 # 改密
 def changePasswd(self):
  cardNum = input("请输入您的卡号:")
  # 验证是否存在该卡号
  user = self.allUsers.get(cardNum)
  if not user:
   print("该卡号不存在,改密失败!")
   return -1
  # 判断是否锁定
  if user.card.cardLock:
   print("该卡已锁定!请解锁后再使用其功能!")
   return -1

  # 验证密码
  if not self.checkPasswd(user.card.cardPasswd):
   print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
   user.card.cardLock = True
   return -1
  print("正在验证,请稍等···")
  time.sleep(1)
  print("验证成功!")
  time.sleep(1)

  # 开始改密
  newPasswd = input("请输入新密码:")
  if not self.checkPasswd(newPasswd):
   print("密码错误,改密失败!")
   return -1
  user.card.cardPasswd = newPasswd
  print("改密成功!请稍后!")

 # 锁定
 def lockUser(self):
  cardNum = input("请输入您的卡号:")
  # 验证是否存在该卡号
  user = self.allUsers.get(cardNum)
  if not user:
   print("该卡号不存在,锁定失败!")
   return -1
  if user.card.cardLock:
   print("该卡已被锁定,请解锁后再使用其功能!")
   return -1
  if not self.checkPasswd(user.card.cardPasswd):
   print("密码输入有误,锁定失败!")
   return -1
  tempIdCard = input("请输入您的身份证号码:")
  if tempIdCard != user.idCard:
   print("身份证号输入有误,锁定失败!")
   return -1
  # 锁定
  user.card.cardLock = True
  print("锁定成功!")


 # 解锁
 def unlockUser(self):
  cardNum = input("请输入您的卡号:")
  # 验证是否存在该卡号
  user = self.allUsers.get(cardNum)
  if not user:
   print("该卡号不存在,解锁失败!")
   return -1
  if not user.card.cardLock:
   print("该卡未被锁定,无需解锁!")
   return -1
  if not self.checkPasswd(user.card.cardPasswd):
   print("密码输入有误,解锁失败!")
   return -1
  tempIdCard = input("请输入您的身份证号码:")
  if tempIdCard != user.idCard:
   print("身份证号输入有误,解锁失败!")
   return -1
  # 解锁
  user.card.cardLock = False
  print("解锁成功!")

 # 补卡
 def newCard(self):
  cardNum = input("请输入您的卡号:")
  # 验证是否存在该卡号
  user = self.allUsers.get(cardNum)
  if not user:
   print("该卡号不存在!")
   return -1
  tempname = input("请输入您的姓名:")
  tempidcard = input("请输入您的身份证号码:")
  tempphone = input("请输入您的手机号码:")
  if tempname != self.allUsers[cardNum].name\
    or tempidcard != self.allUsers.idCard\
    or tempphone != self.allUsers.phone:
   print("信息有误,补卡失败!")
   return -1
  newPasswd = input("请输入您的新密码:")
  if not self.checkPasswd(newPasswd):
   print("密码错误,补卡失败!")
   return -1
  self.allUsers.card.cardPasswd = newPasswd
  time.sleep(1)
  print("补卡成功,请牢记您的新密码!")

 # 销户
 def killUser(self):
  cardNum = input("请输入您的卡号:")
  # 验证是否存在该卡号
  user = self.allUsers.get(cardNum)
  if not user:
   print("该卡号不存在,转账失败!")
   return -1
  # 判断是否锁定
  if user.card.cardLock:
   print("该卡已锁定!请解锁后再使用其功能!")
   return -1

  # 验证密码
  if not self.checkPasswd(user.card.cardPasswd):
   print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
   user.card.cardLock = True
   return -1

  del self.allUsers[cardNum]
  time.sleep(1)
  print("销户成功,请稍后!")

 # 验证密码
 def checkPasswd(self, realPasswd):
  for i in range(3):
   tempPasswd = input("请输入密码:")
   if tempPasswd == realPasswd:
    return True
  return False

 # 生成卡号
 def randomCardId(self):
  while True:
   str = ""
   for i in range(6):
    ch = chr(random.randrange(ord("0"), ord("9") + 1))
    str += ch
   # 判断是否重复
   if not self.allUsers.get(str):
    return str


# 主函数,不在上面的类中
def main():
 # 界面对象
 admin = Admin()

 # 管理员开机
 admin.printAdminView()
 if admin.adminOption():
  return -1

 # 由于一开始文件里并没有数据,不知道要存的是个字典,先存一个,后面再把这个关了
 # allUsers = {}

 # 提款机对象
 filepath = os.path.join(os.getcwd(), "allusers.txt")
 f = open(filepath, "rb")
 allUsers = pickle.load(f)
 atm = ATM(allUsers)

 while True:
  admin.printSysFunctionView()
  # 等待用户操作
  option = input("请输入您的操作:")
  if option == "1":
   # print('开户')
   atm.creatUser()
  elif option == "2":
   # print("查询")
   atm.searchUserInfo()
  elif option == "3":
   # print("取款")
   atm.getMoney()
  elif option == "4":
   # print("存储")
   atm.saveMoney()
  elif option == "5":
   # print("转账")
   atm.transferMoney()
  elif option == "6":
   # print("改密")
   atm.changePasswd()
  elif option == "7":
   # print("锁定")
   atm.lockUser()
  elif option == "8":
   # print("解锁")
   atm.unlockUser()
  elif option == "9":
   # print("补卡")
   atm.newCard()
  elif option == "0":
   # print("销户")
   atm.killUser()
  elif option == "q":
   # print("退出")
   if not admin.adminOption():
    # 将当前系统中的用户信息保存到文件当中
    f = open(filepath, "wb")
    pickle.dump(atm.allUsers, f)
    f.close()
    return -1
  elif option == "1122332244":
   admin.ban(allUsers)

  time.sleep(2)

if __name__ == "__main__":
 main()

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

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

Python 相关文章推荐
python中List的sort方法指南
Sep 01 Python
Python open()文件处理使用介绍
Nov 30 Python
Python单例模式实例分析
Jan 14 Python
python 第三方库的安装及pip的使用详解
May 11 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
python调用接口的4种方式代码实例
Nov 19 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
基于Python绘制个人足迹地图
Jun 01 Python
python如何使用代码运行助手
Jul 03 Python
python 遍历磁盘目录的三种方法
Apr 02 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
Python 取numpy数组的某几行某几列方法
Oct 24 #Python
You might like
php smarty函数扩展
2010/03/15 PHP
php短信接口代码
2016/05/13 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
java程序员面试交流
2012/11/29 面试题
儿科护士实习自我鉴定
2013/10/17 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
python3使用diagrams绘制架构图的步骤
2021/04/08 Python
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
js前端设计模式优化50%表单校验代码示例
2022/06/21 Javascript
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL