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 相关文章推荐
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
python创建一个最简单http webserver服务器的方法
May 08 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 Python
django实现登录时候输入密码错误5次锁定用户十分钟
Nov 05 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
对python中xlsx,csv以及json文件的相互转化方法详解
Dec 25 Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 Python
详解Python设计模式之策略模式
Jun 15 Python
用python批量下载apk
Dec 29 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二分法在IP地址查询中的应用
2008/08/12 PHP
PHP 程序员应该使用的10个组件
2009/10/31 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
php源码的使用方法讲解
2019/09/26 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
python实现文件的分割与合并
2019/08/29 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
金融管理毕业生求职信
2014/03/03 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
Python入门学习之类的相关知识总结
2021/05/25 Python
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS