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 相关文章推荐
在Django框架中运行Python应用全攻略
Jul 17 Python
Python实现批量读取word中表格信息的方法
Jul 30 Python
Python的requests网络编程包使用教程
Jul 11 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
Python编程生成随机用户名及密码的方法示例
May 05 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
对Python3使运行暂停的方法详解
Feb 18 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
python实现图片中文字分割效果
Jul 22 Python
Python+pyftpdlib实现局域网文件互传
Aug 24 Python
python 实现音频叠加的示例
Oct 29 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
php中文字母数字验证码实现代码
2008/04/25 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
Vue实现简易计算器
2020/02/25 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
Python学习笔记之os模块使用总结
2014/11/03 Python
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
使用python加密自己的密码
2015/08/04 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
GWebs公司笔试题
2012/05/04 面试题
车工岗位职责
2013/11/26 职场文书
企业授权委托书范本
2014/04/02 职场文书
学校食品安全实施方案
2014/06/14 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
给领导的感谢信范文
2015/01/23 职场文书
保卫工作个人总结
2015/03/03 职场文书
教师研修随笔感言
2015/11/18 职场文书
Mysql分库分表之后主键处理的几种方法
2022/02/15 MySQL