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概率计算器实例分析
Mar 25 Python
在Python中移动目录结构的方法
Jan 31 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
python实现mysql的读写分离及负载均衡
Feb 04 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
Python3.遍历某文件夹提取特定文件名的实例
Apr 26 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
Python3多线程基础知识点
Feb 19 Python
python读写csv文件并增加行列的实例代码
Aug 01 Python
Python中字典与恒等运算符的用法分析
Aug 22 Python
python各层级目录下import方法代码实例
Jan 20 Python
在keras里实现自定义上采样层
Jun 28 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静态新闻列表自动生成代码
2007/06/14 PHP
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
php笔记之:AOP的应用
2013/04/24 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
Open and Print a Word Document
2007/06/15 Javascript
JS 强制设为首页的代码
2009/01/31 Javascript
jQuery 表格工具集
2010/04/25 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
javascript连续赋值问题
2015/07/08 Javascript
纯JavaScript实现的分页插件实例
2015/07/14 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python入门_浅谈for循环、while循环
2017/05/16 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
学院书画协会部门职责
2013/11/28 职场文书
经济管理专业自荐信
2013/12/30 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
化工生产实习心得体会
2016/01/22 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android