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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
Python编程中的文件操作攻略
Oct 16 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
Python wxPython库Core组件BoxSizer用法示例
Sep 03 Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 Python
python多任务及返回值的处理方法
Jan 22 Python
python导入pandas具体步骤方法
Jun 23 Python
节日快乐! Python画一棵圣诞树送给你
Dec 24 Python
详解python常用命令行选项与环境变量
Feb 20 Python
opencv-python的RGB与BGR互转方式
Jun 02 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
使用scrapy实现增量式爬取方式
Jun 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获得文件扩展名三法
2006/11/25 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
微信小程序webSocket的使用方法
2020/02/20 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
详解Python的单元测试
2015/04/28 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
包装类的功能、种类、常用方法
2012/01/27 面试题
自我评价优秀范文分享
2013/11/30 职场文书
售后主管岗位职责
2013/12/08 职场文书
播音主持专业个人自我评价
2014/01/09 职场文书
给幼儿园老师的表扬信
2014/01/19 职场文书
装修设计师求职信
2014/02/26 职场文书
公司授权委托书
2014/04/04 职场文书
关于美容院的活动方案
2014/08/14 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers