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设置windows桌面壁纸的实现代码
Jan 28 Python
python抓取某汽车网数据解析html存入excel示例
Dec 04 Python
Python中zip()函数用法实例教程
Jul 31 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
python+selenium select下拉选择框定位处理方法
Aug 24 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
python实现简单飞行棋
Feb 06 Python
python开发入门——set的使用
Sep 03 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
Oct 16 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 Python
python中添加模块导入路径的方法
Feb 03 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
解析thinkphp的左右值无限分类
2013/06/20 PHP
php实现mysql封装类示例
2014/05/07 PHP
Laravel框架表单验证详解
2014/09/04 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
迪奥官网:Dior.com
2018/12/04 全球购物
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
财务部出纳岗位职责
2013/12/22 职场文书
七年级生物教学反思
2014/01/30 职场文书
开学典礼决心书
2014/03/11 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
高中生操行评语大全
2014/04/25 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
Python Pandas知识点之缺失值处理详解
2021/05/11 Python