Python模拟自动存取款机的查询、存取款、修改密码等操作


Posted in Python onSeptember 02, 2018

1.工作流程

Python模拟自动存取款机的查询、存取款、修改密码等操作

2.模拟自动存取款机的操作

代码如下:

import msvcrt, sys, os
#定义用星号隐藏密码输入的函数
def psw_input():
  li = []
  while True:
    ch = msvcrt.getch()
    #回车
    if ch == b'\r':
      msvcrt.putch(b'\n')
      break
    #退格
    elif ch == b'\x08':
      if li:
        li.pop()
        msvcrt.putch(b'\b')
        msvcrt.putch(b' ')
        msvcrt.putch(b'\b')
    #Esc
    elif ch == b'\x1b':
      break
    else:
      li.append(ch)
      msvcrt.putch(b'*')
  return li
#定义CSDN银行ATM欢迎界面的函数
def ATM():
  '''
  CSDN银行ATM欢迎界面的函数
  '''
  print("="*14,"Bank of CSDN","="*14,"\n")
  print("{:^42}".format("ATM"),"\n")
  print("="*14,"Bank of CSDN","="*14,"\n")
#CSDN银行用户列表信息,用户信息包含:姓名、余额、密码(6位)、银行卡号(19位)
user_list = [{"name":"张 三","balance":10000,"password":"000000","numbers":"0000000000000000000"},
{"name":"李 四","balance":20000,"password":"111111","numbers":"1111111111111111111"},
{"name":"王 五","balance":30000,"password":"222222","numbers":"2222222222222222222"}]
#定义验证银行卡号与密码匹配的函数
def check(user_name,user_password):
  '''
  验证银行卡号与密码匹配的函数
  ''' 
  for i in range(len(user_list)):
    if user_name == user_list[i]["numbers"] and user_password == user_list[i]["password"]:
      return i #银行卡号与密码匹配则返回该用户在ATM系统内的ID值,否则返回None值
#定义用户登录成功后操作界面的函数
def interface():
  '''
  用户登录成功后操作界面的函数
  '''
  print("="*14,"用户操作界面","="*14,"\n")
  print("{0:2} {1:12} {2:12} {3:12}".format(" ","1. 查询","2. 取款","3. 存款"),"\n")
  print("{0:2} {1:10} {2:12}".format(" ","4. 修改密码","5. 退出"),"\n")
  print("="*42,"\n")
#定义用户查询信息的函数
def inquire(user_id):
  '''
  用户查询信息的函数
  '''
  print("="*14,"账号查询界面","="*14,"\n")
  print("|{0:<4}|{1:<18}|{2:<9}|\n".format("账户名","卡号","余额(RMB)"))
  print("|{0:<5}|{1:<20}|{2:<11}|\n".format(user_list[user_id]["name"],user_list[user_id]["numbers"],user_list[user_id]["balance"]))
#定义用户取款的函数
def withdrawal(amount):
  '''
  用户取款的函数
  '''
  i = user_list[user_id]["balance"]-int(amount)
  if i>=0:
    user_list[user_id]["balance"]-=int(amount)
  else:
    print("账户余额不足\n")
#定义用户存款的函数
def deposit(amount):
  '''
  用户存款的函数
  '''
  user_list[user_id]["balance"]+=int(amount)
#定义用户修改密码的函数
def change_password(old_password,new_password1,new_password2):
  '''
  用户修改密码的函数
  '''
  if old_password == user_list[user_id]["password"]:
    if new_password1 == new_password2:
      user_list[user_id]["password"] = new_password1
      print("新密码修改成功\n")
      return 1
    else:
      print("修改密码失败,您2次输入的新密码不一致\n")
      return 2
  else:
    print("旧密码输入错误\n")
    return 0
#用户登录界面,输入银行卡号和密码
chance = 3 #允许3次用户名或密码输入错误
while True:
  ATM()
  user_name = input("请输入您的银行卡卡号:")
  print("")
  print("请输入您的银行卡密码:", end=' ', flush=True)
  user_password = b''.join(psw_input()).decode()
  print("")
  user_id = check(user_name,user_password)#验证银行卡号与密码是否匹配
  if user_id != None:
    print("登录成功\n")
    while True:
      interface()
      key_word = input("请输入操作选项:")
      print("")
      if key_word == "1":
        inquire(user_id)
        input("按任意键返回上一级目录:")
        print("")
      elif key_word == "2":
        print("="*14,"账号取款界面","="*14,"\n")
        amount = input("请输入取款金额:")
        print("")
        withdrawal(amount)
        inquire(user_id)
        input("按任意键返回上一级目录:")
        print("")
      elif key_word == "3":
        print("="*14,"账号存款界面","="*14,"\n")
        amount = input("请输入存款金额:")
        print("")
        deposit(amount)
        inquire(user_id)
        input("按任意键返回上一级目录:")
        print("")
      elif key_word == "4":
        print("="*14,"密码管理界面","="*14,"\n")
        print("请输入旧密码:", end=' ', flush=True)
        old_password = b''.join(psw_input()).decode()
        print("")
        print("请输入新密码:", end=' ', flush=True)
        new_password1 = b''.join(psw_input()).decode()
        print("")
        print("请再次输入新密码:", end=' ', flush=True)
        new_password2 = b''.join(psw_input()).decode()
        print("")        
        save = change_password(old_password,new_password1,new_password2)
        #如何检测到旧密码输入有误,将直接退出
        if save == 0:
          break
      elif key_word == "5":
        print("="*14,"欢迎下次光临","="*14,"\n")
        break
      else:
        print("="*14,"没有该选项","="*14,"\n")
  else:
    if chance > 1:     
      print("用户名或密码错误,您还有",chance-1,"次机会,请重新输入\n")
      chance -= 1
    else:
      print("对不起,您输入用户名或密码错误已达3次")
      break

3.运行结果

有以下初始用户信息备测试用:

姓名 银行卡号(19位) 密码(6位) 余额(RMB)
张 三 0000000000000000000 000000 10000
李 四 1111111111111111111 111111 20000
王 五 2222222222222222222 222222 30000

Python模拟自动存取款机的查询、存取款、修改密码等操作 

输入卡号和密码进入用户操作界面

Python模拟自动存取款机的查询、存取款、修改密码等操作 

查询余额界面

Python模拟自动存取款机的查询、存取款、修改密码等操作 

取款界面

Python模拟自动存取款机的查询、存取款、修改密码等操作 

存款界面

Python模拟自动存取款机的查询、存取款、修改密码等操作 

修改密码界面

总结

以上所述是小编给大家介绍的Python模拟自动存取款机的查询、存取款、修改密码等操作,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
将图片文件嵌入到wxpython代码中的实现方法
Aug 11 Python
详解Python多线程Selenium跨浏览器测试
Apr 01 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
linux中如何使用python3获取ip地址
Jul 15 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
python日志模块logbook使用方法
Sep 19 Python
零基础小白多久能学会python
Jun 22 Python
Python 捕获代码中所有异常的方法
Aug 03 Python
如何在C++中调用Python
May 21 Python
Python实现多级目录压缩与解压文件的方法
Sep 01 #Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 #Python
Python pymongo模块常用操作分析
Sep 01 #Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 #Python
python使用webdriver爬取微信公众号
Aug 31 #Python
python爬取微信公众号文章
Aug 31 #Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 #Python
You might like
PHP安全防范技巧分享
2011/11/03 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
php生成RSS订阅的方法
2015/02/13 PHP
php实现删除空目录的方法
2015/03/16 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python中多线程thread与threading的实现方法
2014/08/18 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Python多继承原理与用法示例
2018/08/23 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
计算机毕业生自荐信
2014/06/12 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
紫日观后感
2015/06/05 职场文书
张丽莉观后感
2015/06/16 职场文书
python字符串的多行输出的实例详解
2021/06/08 Python
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android
PHP遍历数组的6种方式总结
2021/11/17 PHP