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 解析XML文件
Apr 15 Python
Python简单日志处理类分享
Feb 14 Python
一篇文章快速了解Python的GIL
Jan 12 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
Python中存取文件的4种不同操作
Jul 02 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
python多任务及返回值的处理方法
Jan 22 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
Feb 21 Python
Django用户认证系统 Web请求中的认证解析
Aug 02 Python
Python下利用BeautifulSoup解析HTML的实现
Jan 17 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
Python字符串查找基本操作代码案例
Oct 27 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
YII动态模型(动态表名)支持分析
2016/03/29 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
Python pip 常用命令汇总
2020/10/19 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
党员违纪检讨书
2014/02/18 职场文书
《秋姑娘的信》教学反思
2014/02/28 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
化工工艺设计求职信
2014/06/25 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python