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实现目录树生成示例
Mar 28 Python
深入理解Python变量与常量
Jun 02 Python
Python面向对象之继承代码详解
Jan 29 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
python3使用flask编写注册post接口的方法
Dec 28 Python
python根据txt文本批量创建文件夹
Dec 08 Python
python实现简单银行管理系统
Oct 25 Python
Python实现不规则图形填充的思路
Feb 02 Python
Python PIL库图片灰化处理
Apr 07 Python
Python搭建Keras CNN模型破解网站验证码的实现
Apr 07 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
Jun 22 Python
如何使用pdb进行Python调试
Jun 30 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
php5数字型字符串加解密代码
2008/04/24 PHP
PHP获取表单textarea数据中的换行问题
2010/09/10 PHP
php对mongodb的扩展(初出茅庐)
2012/11/11 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
ES6的解构赋值实例详解
2019/05/06 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
对python:print打印时加u的含义详解
2018/12/15 Python
PyTorch中Tensor的数据统计示例
2020/02/17 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
终端业务员岗位职责
2013/11/27 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
北京英语导游词
2015/02/12 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
小学毕业教师寄语
2019/06/21 职场文书
python使用BeautifulSoup 解析HTML
2022/04/24 Python