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函数中定义参数的四种方式
Nov 30 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
详解python中sort排序使用
Mar 23 Python
Python创建或生成列表的操作方法
Jun 19 Python
Python 3.8 新功能全解
Jul 25 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
python如何删除文件、目录
Jun 23 Python
Python tkinter界面实现历史天气查询的示例代码
Aug 23 Python
pycharm如何设置官方中文(如何汉化)
Dec 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/11/19 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
JavaScript实现简单的计算器
2020/01/16 Javascript
[00:12]2018DOTA2亚洲邀请赛 sylar表现SOLO技艺
2018/04/06 DOTA
Python 元组(Tuple)操作详解
2014/03/11 Python
Python中多线程thread与threading的实现方法
2014/08/18 Python
跟老齐学Python之一个免费的实验室
2014/09/14 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
深入理解python多进程编程
2016/06/12 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
python如何随机生成高强度密码
2020/08/19 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
单位刻章介绍信范文
2014/01/11 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
平面设计求职信
2014/03/10 职场文书
保护环境演讲稿
2014/05/10 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
党建工作汇报材料
2014/12/24 职场文书
医院科室评语
2015/01/04 职场文书
校长一岗双责责任书
2015/05/09 职场文书
详解Vue router路由
2021/11/20 Vue.js