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随机生成数据后插入到PostgreSQL
Jul 28 Python
python正则表达式re之compile函数解析
Oct 25 Python
Python实现的单向循环链表功能示例
Nov 10 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
基于sklearn实现Bagging算法(python)
Jul 11 Python
python求绝对值的三种方法小结
Dec 04 Python
3种python调用其他脚本的方法
Jan 06 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
pytest配置文件pytest.ini的详细使用
Apr 17 Python
Python带你从浅入深探究Tuple(基础篇)
May 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
精通php的十大要点(上)
2009/02/04 PHP
yii分页组件用法实例分析
2015/12/28 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
详解详解Python中writelines()方法的使用
2015/05/25 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
数据员岗位职责
2013/11/19 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
清洁工岗位职责
2015/02/13 职场文书
创业计划书之书店
2019/09/10 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
nginx设置资源请求目录的方式详解
2022/05/30 Servers