Python实现ATM系统


Posted in Python onFebruary 17, 2020

今天偶尔在知乎上看到某大佬用Python写的ATM系统案例,然后观摩了下他的实现思路和源码,感觉受益颇多,于是就根据自己的思路和目前掌握的Python编程基础将ATM实现了一下,以下是案例解析的过程:

案例剖析:

1.atm主页面显示.
2.账号验证.
3.查询余额.
4.存款.
5.取款.
6.修改密码.

ps:我的思路是将以上的功能分成几大块,通过函数,循环和返回值来实现,话不多说直接上代码.

代码:

1.atm主页面显示

def index(nowUser):
 print('=' * 10, '自动存取款机', '=' * 10)
 print(getName(nowUser), '欢迎登陆!')
 print('{:<10}{:^10}{:<10}'.format('1.修改密码', ' ', '2.查询余额'))
 print('{:<10}{:^12}{:<10}'.format('3.存钱', ' ', '4.取钱'))
 print('输入\'exit\'退出操作')

ps:使用format来进行格式的定义.

2.账号验证

def getId(nowUser):
 '''获取当前用户在列表中的位置'''
 index = -1
 for i in range(len(userList)):
  if userList[i]['cardid'] == nowUser:
   index = i # 如果用户存在则返回它在列表中的下标
   break
 return index # 如果用户不存在则返回-1


def getName(nowUser):
 ''' 获取用户姓名'''
 index = getId(nowUser)
 return userList[index]['name']


def checkUser(cardid, password):
 '''自定义用户检测功能,包括卡号及密码检测'''
 index = getId(cardid)
 if index == -1: # 如果用户不存在
  return 'noCardId' # 卡号不存在
 else:
  if userList[index]['cardid'] == cardid and userList[index]['password'] == password: # 用户存在并且账号密码正确
   return 'login' # 密码正确
  else:
   return 'errorPW' # 密码错误

ps:使用循环和返回值来进行账号的对比和检测.

3.查询余额

def showMoney(nowUser):
 '''查询余额'''
 index = getId(nowUser)
 print('您当前的账户余额为:', userList[index]['money'], '元')

4.存钱

def saveMoney(nowUser, money):
 '''存钱'''
 index = getId(nowUser)
 print("输入的金额是:", money)
 userList[index]['money'] += int(money)
 print('存入成功!')

5.取钱

def drawMoney(nowUser, money):
 '''取钱'''
 index = getId(nowUser)
 nowMoney = userList[index]['money']
 if nowMoney >= int(money):
  userList[index]['money'] -= int(money)
  print('已取出', money, '元')
 else:
  print('账户余额不足!')

6.修改密码

def changePW(nowUser, newPW):
 '''修改密码'''
 index = getId(nowUser)
 userList[index]['password'] = newPW

7.定义用户操作函数

# 用户操作
def userChoice(nowUser):
 choices = ['1', '2', '3', '4', 'exit']
 # 循环获取用户操作
 while True:
  index(nowUser)
  choice = input('请选择操作:')
  if choice == '1': # 选择修改密码
   oldPW = input('请输入原始密码:')
   flag = checkUser(nowUser, oldPW)
   if flag == "errorPW":
    # print('密码错误!请重新输入,或输入\'back\'返回上一级')
    print('密码错误!返回主界面')
   elif flag == 'login':
    changePW(nowUser, input('请输入新密码:'))
    print('修改密码成功!')
    continue
  elif choice == '2': # 选择查询余额
   showMoney(nowUser)
   continue
  elif choice == '3': # 选择存钱
   saveMoney(nowUser, input('请输入存入金额:'))
   continue
  elif choice == '4': # 选择取钱
   drawMoney(nowUser, input('请输入取出金额:'))
   continue
  elif choice == 'exit':
   main() # 返回主界面
  elif choice not in choices:
   print('错误操作,请重新输入选项!')
   continue

8.定义main主函数

# 主界面
def main():
 # 定义错误次数
 errorTime = 0
 if errorTime >= 3: # 错误次数达三次退出系统后清零
  errorTime = 0
 while True:
  # crs登陆主界面
  print('=' * 10, '自动存取款机', '=' * 10)
  nowUser = ''
  # 用户输入卡号和密码
  cardid = input('请输入卡号:')
  password = input('请输入密码:')

  # 判断卡号密码是否存在正确
  # 卡号不存在
  flag = checkUser(cardid, password)

  if flag == 'noCardId':
   print('卡号不存在!请重新输入')
   continue

  # 密码错误
  elif flag == 'errorPW':
   errorTime += 1
   print('密码错误!错误次数达三次将自动退出本系统!')
   print("错误次数:", errorTime)
   if errorTime >= 3: # 错误次数达三次自动退出
    print('密码输错三次,自动退出系统!')
    exit(0)
   continue

  # 卡号密码正确进入系统
  else:
   nowUser = cardid
   userChoice(nowUser)

9.最后定义函数主入口,进行ATM系统的测试

if __name__ == '__main__':

 main()

收获:

通过ATM案例 ,将之前学习的Python基础重新进行了一次巩固,梳理和融会贯通,个人感觉 Python的函数和返回值是个特别神奇的东西,当然这个案例还有很大的改进空间,大家有什么好的建议也可以给我留言,我之后会慢慢进行改良哒!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编程之序列操作实例详解
Jul 22 Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 Python
Python实现感知机(PLA)算法
Dec 20 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
Django中自定义查询对象的具体使用
Oct 13 Python
Python英文文章词频统计(14份剑桥真题词频统计)
Oct 13 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
Python类反射机制使用实例解析
Dec 30 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
pytorch查看网络参数显存占用量等操作
May 12 Python
python基于tkinter实现gif录屏功能
May 19 Python
python设置环境变量的作用整理
Feb 17 #Python
python数据爬下来保存的位置
Feb 17 #Python
使用TFRecord存取多个数据案例
Feb 17 #Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 #Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 #Python
python3连接MySQL8.0的两种方式
Feb 17 #Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 #Python
You might like
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
2016/07/18 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
Python中的localtime()方法使用详解
2015/05/22 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
python中append实例用法总结
2019/07/30 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
前台文员职责范本
2014/03/07 职场文书
期末评语大全
2014/05/04 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
企业愿景口号
2015/12/25 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
详解TypeScript的基础类型
2022/02/18 Javascript