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中的rfind()方法使用详解
May 19 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
python中退出多层循环的方法
Nov 27 Python
python3+selenium实现126邮箱登陆并发送邮件功能
Jan 23 Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 Python
python绘制玫瑰的实现代码
Mar 02 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
使用python创建生成动态链接库dll的方法
May 09 Python
python实现单机五子棋
Aug 28 Python
使用Python通过oBIX协议访问Niagara数据的示例
Dec 04 Python
如何用Python编写一个电子考勤系统
Feb 08 Python
python异常中else的实例用法
Jun 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
example1.php
2006/10/09 PHP
一个odbc连mssql分页的类
2006/10/09 PHP
PHP 数组教程 定义数组
2009/10/23 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
PHP精确计算功能示例
2016/11/29 PHP
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
一个JQuery操作Table的代码分享
2012/03/30 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
JS函数定义方式的区别介绍
2016/03/22 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
Python基于百度AI的文字识别的示例
2018/04/21 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
django 消息框架 message使用详解
2019/07/22 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
Python列表的切片实例讲解
2019/08/20 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
会计系个人求职信范文分享
2013/12/20 职场文书
银行招聘自荐信
2015/03/06 职场文书
战马观后感
2015/06/08 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书