初学者,仅供学习交流

1.工作流程

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

程序导入了msvcrt 模块,实现用户输入密码时星号(*)隐藏的功能,该模块只用于 Windows/DOS,因此在 cmd 下运行正常,但用别的 IDLE执行时会出现卡顿和接收不了键盘输入的情况。
代码如下:

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')#Escelif ch == b'\x1b':breakelse: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_password1print("新密码修改成功\n")return 1else:print("修改密码失败,您2次输入的新密码不一致\n")return 2else: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:breakelif key_word == "5":print("="*14,"欢迎下次光临","="*14,"\n")breakelse:print("="*14,"没有该选项","="*14,"\n")else:if chance > 1:          print("用户名或密码错误,您还有",chance-1,"次机会,请重新输入\n")chance -= 1else:print("对不起,您输入用户名或密码错误已达3次")break

3.运行结果

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

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


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

查询余额界面

取款界面

存款界面

修改密码界面

欢迎大家提出改进意见

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

  1. python模拟一个简单的取款机_Python模拟自动存取款机的查询、存取款、修改密码等操作...

    1.工作流程 2.模拟自动存取款机的操作 代码如下: import msvcrt, sys, os #定义用星号隐藏密码输入的函数 def psw_input(): li = [] while Tru ...

  2. Java模拟银行账户简单的存取款、余额查询操作。

    使用Java语言,创建一个银行账号Account类,实现存款(balance)的存(deposit).取(withdraw)和查询(getBalance)等功能,然后基于该类创建对象,模拟存.取和查询 ...

  3. 连接数据库——模拟ATM机查、存、取、开户功能

    1.界面:包含开户.查询.存款.取款.功能 1 package com.bank.test; 2 /** 3 * 4 * @author Administrator 5 *界面类 6 */ 7 pub ...

  4. java模拟网银登录_用java编写模拟网上银行登录及存取款业务

    展开全部 public class Account { protected String accId; protected String name; protected double money; p ...

  5. 超简单版模拟实现银行中用户存取款业务

    //主要实现 public class Bank {static String bankName;//银行名称private String name;//储户名字private String pass ...

  6. python模拟12306官网查询车站车次以及检票口

    # 车站对应代码 station_code = station.get_station_code(station_name) if station_code == None:response = Re ...

  7. python 模拟微信浏览器请求_使用Chrome修改user agent模拟微信内置浏览器

    很多时候,我们需要模拟微信内置浏览器,今天教大家用chrome简单模拟.如图设置: F12或者右键审查元素进入开发者模式,点击Emulation,然后点击Network,把Spoof user age ...

  8. python模拟鼠标拖动_Python+Selenium自动化篇-6-模拟鼠标操作

    在webdriver中,鼠标的一些操作如:双击.右击.悬停.拖动等都被封装在ActionChains类中,我们只用在需要使用的时候,导入这个类就可以了. 0.ActionChains类提供的鼠标常用方 ...

  9. python计算银行余额_Python 小案例实战 —— 简易银行存取款查询系统

    Python 小案例实战 -- 简易银行存取款查询系统 涉及知识点 包的调用 字典.列表的混合运用 列表元素索引.追加 基本的循环与分支结构 源码 import sys import time ban ...

最新文章

  1. Windows下更改MySQL数据库的存储位置
  2. 设计优秀API的五大规则
  3. 用正则表达式捕获标识符——随便说
  4. 优秀 Java 程序员写代码的风格
  5. python-练习-查找匹配-模拟数据库的查找-小例子
  6. jq和thinkphp经常使用的几种ajax
  7. librtmp库API介绍及其结构概述
  8. 好用的屏幕录像截图工具:Movavi Screen Capture Pro 10 Mac
  9. 计算机光驱故障分析,光驱故障示例解决
  10. Maven创建一个Servlet项目(五)
  11. 安装CentOS7.6
  12. 计算机设置ip后提示未识别网络连接,win10设置正确的静态IP,但电脑显示未识别网络,怎么回事。求大佬们帮助啊...
  13. Python Counter函数
  14. 今日恐慌与贪婪指数为23,恐慌程度有所下降
  15. QT项目负责人必须掌握的Ui设计师功能——Promote to !
  16. 利用Python里的cv2(opencv)改变图片大小【同时也是cv2.resize的学习】
  17. 乐玩插件和大漠插件哪个好_哪个PS后期插件功能最多最强?风光人像全能修图王!一个顶五个...
  18. 【kong系列十一】之JWT插件RSA256非对称加密使用
  19. IDEA中使用Docker插件构建镜像并推送至私服Harbor
  20. 小小知识点(三十七)OFDM和OFDMA的区别以及OFDMA与SC-FDMA的区别

热门文章

  1. 宏观经济学计算题练习
  2. 计量经济学及Stata应用 第五章习题 5.5
  3. 2022年建筑电工(建筑特殊工种)考试资料及建筑电工(建筑特殊工种)模拟试题
  4. python 编码规范-命名规范
  5. uni-app实现微信小程序,支付宝小程序,微信、支付宝、银联多商户收款
  6. Linux——磁盘Part 3:配额(限制)
  7. signer information does not match问题解决
  8. 物业管理系统源码java,物业管理系统Java版源码附设计论文
  9. CATV中dBm,dBmV和dBµV的转换
  10. AMD Linux催化剂显卡驱动年度横评