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实现Const详解
Jan 27 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
Django1.7+python 2.78+pycharm配置mysql数据库
Oct 09 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
python中pygame安装过程(超级详细)
Aug 04 Python
python如果快速判断数字奇数偶数
Nov 13 Python
Python基础之高级变量类型实例详解
Jan 03 Python
pytorch AvgPool2d函数使用详解
Jan 03 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
python实现ip地址的包含关系判断
Feb 07 Python
Python线程协作threading.Condition实现过程解析
Mar 12 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 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函数 serialize()和unserialize()
2012/02/04 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
JavaScript Konami Code 实现代码
2009/07/29 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
2013/12/19 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
python中字典(Dictionary)用法实例详解
2015/05/30 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
Python hashlib模块实例使用详解
2019/12/24 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
python操作yaml说明
2020/04/08 Python
关于Python错误重试方法总结
2021/01/03 Python
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
Java的五个基础面试题
2016/02/26 面试题
介绍一下OSI七层模型
2012/07/03 面试题
会计与出纳自荐书范文
2014/03/16 职场文书
个人承诺书格式范文
2015/04/29 职场文书
python实现自动化群控的步骤
2021/04/11 Python
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技