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的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
python 中split 和 strip的实例详解
Jul 12 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
Sep 22 Python
Python并行分布式框架Celery详解
Oct 15 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
python numpy实现文件存取的示例代码
May 26 Python
Django 拆分model和view的实现方法
Aug 16 Python
python实现最大优先队列
Aug 29 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
Python内存泄漏和内存溢出的解决方案
Sep 26 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
重置版游戏视频
2020/04/09 魔兽争霸
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
详解Golang 与python中的字符串反转
2017/07/21 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
土木工程专业推荐信
2014/02/19 职场文书
给老师的感谢信
2015/01/20 职场文书
委托书格式要求
2015/01/28 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
捐书活动倡议书
2015/04/27 职场文书
python小程序之飘落的银杏
2021/04/17 Python