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 相关文章推荐
利用 Monkey 命令操作屏幕快速滑动
Dec 07 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
python kmeans聚类简单介绍和实现代码
Feb 23 Python
Python实现二维数组输出为图片
Apr 03 Python
python数字图像处理实现直方图与均衡化
May 04 Python
对python借助百度云API对评论进行观点抽取的方法详解
Feb 21 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
Aug 06 Python
Python建造者模式案例运行原理解析
Jun 29 Python
用pip给python安装matplotlib库的详细教程
Feb 24 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
Jun 09 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数据库调用类调用实例(详细注释)
2012/07/12 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
PHP crc32()函数讲解
2019/02/14 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
js实现随机点名程序
2020/09/17 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
Python3字符串学习教程
2015/08/20 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
pycharm导入源码的具体步骤
2020/08/04 Python
如何使用localstorage代替cookie实现跨域共享数据问题
2018/04/18 HTML / CSS
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
会计电算化专业个人的自我评价
2013/11/24 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
气象学专业个人求职信
2014/04/22 职场文书
司机岗位职责说明书
2014/07/29 职场文书
法定授权委托证明书
2014/09/27 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
Python制作春联的示例代码
2022/01/22 Python
python使用BeautifulSoup 解析HTML
2022/04/24 Python