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写的ARP攻击代码实例
Jun 04 Python
python的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
python刷投票的脚本实现代码
Nov 08 Python
python实现提取百度搜索结果的方法
May 19 Python
python中urlparse模块介绍与使用示例
Nov 19 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
pandas 根据列的值选取所有行的示例
Nov 07 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
python超时重新请求解决方案
Oct 21 Python
使用Python实现牛顿法求极值
Feb 10 Python
基于python实现数组格式参数加密计算
Apr 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
PHP Document 代码注释规范
2009/04/13 PHP
PHP 程序授权验证开发思路
2009/07/09 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
python读取csv文件示例(python操作csv)
2014/03/11 Python
Python的装饰器使用详解
2017/06/26 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
简单了解python模块概念
2018/01/11 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
python如何获取apk的packagename和activity
2020/01/10 Python
Pytorch之finetune使用详解
2020/01/18 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
超市总经理岗位职责
2014/02/02 职场文书
洗车工岗位职责
2014/03/15 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
2014年手术室工作总结
2014/11/26 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
详解Nginx 工作原理
2021/03/31 Servers
纯html+css实现打字效果
2021/08/02 HTML / CSS