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装饰器由浅入深
Dec 09 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
Flask框架各种常见装饰器示例
Jul 17 Python
详解python爬虫系列之初识爬虫
Apr 06 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
Python实现元素等待代码实例
Nov 11 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
python实现图像拼接功能
Mar 23 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 Python
Python基础之pandas数据合并
Apr 27 Python
Python加密与解密模块hashlib与hmac
Jun 05 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
基于mysql的论坛(6)
2006/10/09 PHP
PHP的博客ping服务代码
2012/02/04 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
扩展String功能方法
2006/09/22 Javascript
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
jQuery实现可拖拽3D万花筒旋转特效
2017/01/03 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
python if not in 多条件判断代码
2016/09/21 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
python利用不到一百行代码实现一个小siri
2017/03/02 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
django使用admin站点上传图片的实例
2019/07/28 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Django websocket原理及功能实现代码
2020/11/14 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
国际贸易专业推荐信
2013/11/15 职场文书
违纪检讨书2000字
2014/02/08 职场文书
大一新生军训新闻稿
2015/07/17 职场文书