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中的高级函数map/reduce使用实例
Apr 13 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
Python 字符串大小写转换的简单实例
Jan 21 Python
Python实现字符串格式化的方法小结
Feb 20 Python
Python中的命令行参数解析工具之docopt详解
Mar 27 Python
python3 shelve模块的详解
Jul 08 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 Python
对python sklearn one-hot编码详解
Jul 10 Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 Python
python语言元素知识点详解
May 15 Python
Python操作CSV格式文件的方法大全
Jul 15 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
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
PHP中使用BigMap实例
2015/03/30 PHP
PHP序列化操作方法分析
2016/09/28 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
Python中使用HTMLParser解析html实例
2015/02/08 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
python实现八大排序算法(1)
2017/09/14 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
一年级班主任寄语
2014/01/19 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
营销与策划实训报告
2014/11/05 职场文书
2015年求职自荐信范文
2015/03/04 职场文书