Python ATM功能实现代码实例


Posted in Python onMarch 19, 2020

编写ATM程序实现下述功能,数据来源于文件db.txt

1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改

2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱

3、提现功能:用户输入提现金额,db.txt中该账号钱数减少

4、查询余额功能:输入账号查询余额

登录功能

用户登录成功后,内存中记录下该状态,上述功能以当前登录状态为准,必须先登录才能操作

代码如下

import os

user_staus = {'username': None}


def ad_credit(username, amount):
  """
  充值功能
  :param username:
  :param amount:
  :return:
  """
  if user_staus['username'] is None:
    login()
  with open('db.txt', 'rt', encoding='utf-8')as f1, \
      open('db.txt.swap', 'wt', encoding='utf-8')as f2:
    while True:
      cont = f1.readline()
      if len(cont) == 0:
        break
      name, remain = cont.strip().split(':')
      if username in name:
        remain = int(remain) + int(amount)
        f2.write('{}:{}\n'.format(name, remain))
        print('充值成功,{}的余额为{}'.format(username, remain))
      else:
        f2.write(cont)
  os.remove('db.txt')
  os.rename('db.txt.swap', 'db.txt')


def transfer(user_out, user_in, amount):
  '''3
  转账功能
  :param user_out:
  :param user_in:
  :param amount:
  :return:
  '''
  if user_staus['username'] is None:
    login()
  with open('db.txt', 'rt', encoding='utf-8')as f1, \
      open('db.txt.swap', 'wt', encoding='utf-8')as f2:

    userinfo = {}
    for line in f1:
      name, remind = line.strip().split(':')
      userinfo[name] = int(remind)
    if user_out not in userinfo:
      print('用户不存在')
      return
    if user_in not in userinfo:
      print('收款方不存在')
      return
    if user_out in userinfo and user_in in userinfo:
      if userinfo[user_out] >= int(amount):
        userinfo[user_out] -= int(amount)
        userinfo[user_in] += int(amount)
        print('转账成功,已成功从{}向{}汇款{}'.format(user_out, user_in, amount))
      elif userinfo[user_out] < amount:
        print('余额不足')
        return
    for name, remind in userinfo.items():
      f2.write('{}:{}\n'.format(name, remind))

  os.remove('db.txt')
  os.rename('db.txt.swap', 'db.txt')


def cashon(username, amount):
  '''
  提现功能
  :param username:
  :param amount:
  :return:
  '''
  if user_staus['username'] is None:
    login()
  with open('db.txt', 'rt', encoding='utf-8')as f1, \
      open('db.txt.swap', 'wt', encoding='utf-8')as f2:
    userinfo = {}
    for line in f1:
      name, remind = line.strip().split(':')
      userinfo[name] = int(remind)
    if username not in userinfo:
      print('用户不存在')
      return
    if username in userinfo and userinfo[username] >= int(amount):
      userinfo[username] -= int(amount)
      print('已从余额中取出{},现余额为{}'.format(amount, userinfo[username]))
    elif userinfo[username] < amount:
      print('余额不足,提现失败')
      return
    for name, remind in userinfo.items():
      f2.write('{}:{}\n'.format(name, remind))
  os.remove('db.txt')
  os.rename('db.txt.swap', 'db.txt')


def check(username):
  '''
  余额查询功能
  :param username:
  :return:
  '''
  if user_staus['username'] is None:
    login()
  with open('db.txt', 'rt', encoding='utf-8')as f:
    userinfo = {}
    for line in f:
      name, remind = line.strip().split(':')
      userinfo[name] = remind
    if username not in userinfo:
      print('用户不存在')
      return
    if username in userinfo:
      print('当前余额为:{}'.format(userinfo[username]))


def login():
  username = input('输入用户名')
  userpassword = input('输入密码')
  with open('login.txt', 'rt', encoding='utf-8')as login_f:
    login = {}
    for line in login_f:
      name, psd = line.strip().split(':')
      login[name] = psd
      if username in login:
        if login[username] == userpassword:
          print('登陆成功')
          user_staus['username'] = username
          break
      elif username not in login:
        print('用户名不存在')
        return


def logout():
  user_staus['username'] = None
  print('已成功登出')
  return


login()
tag = True
while tag:
  cmd = input('''
  请输入你想使用的功能序号
  1:充值
  2:转账
  3:提现
  4:查询余额
  0:登出
  ''')
  if cmd == '1':
    username = input('输入用户名:')
    amount = input('输入充值金额:')
    ad_credit(username, amount)
  elif cmd == '2':
    user_out = input('请输入转账方:')
    user_in = input('请输入接收方:')
    amount = input('输入转账金额:')
    transfer(user_out, user_in, amount)
  elif cmd == '3':
    username = input('输入用户名:')
    amount = input('输入提现金额')
    cashon(username, amount)
  elif cmd == '4':
    username = input('输入用户名:')
    check(username)
  elif cmd == '0':
    logout()
    tag = False
  else:
    print('请正确输入序号')

以下是模拟结果

'''
/Users/chenfeng/PycharmProjects/ATM/venv/bin/python /Users/chenfeng/PycharmProjects/ATM/main.py
输入用户名xilou
输入密码666
登陆成功

请输入你想使用的功能序号
1:充值
2:转账
3:提现
4:查询余额
0:登出
1
输入用户名:xilou
输入充值金额:200
充值成功,xilou的余额为700

请输入你想使用的功能序号
1:充值
2:转账
3:提现
4:查询余额
0:登出
2
请输入转账方:xilou
请输入接收方:heiren
输入转账金额:200
转账成功,已成功从xilou向heiren汇款200

请输入你想使用的功能序号
1:充值
2:转账
3:提现
4:查询余额
0:登出
3
输入用户名:xilou
输入提现金额100
已从余额中取出100,现余额为400

请输入你想使用的功能序号
1:充值
2:转账
3:提现
4:查询余额
0:登出
4
输入用户名:xilou
当前余额为:400

请输入你想使用的功能序号
1:充值
2:转账
3:提现
4:查询余额
0:登出
0
已成功登出

Process finished with exit code 0

'''以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python爬虫获取淘宝天猫商品详细参数
Jun 23 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
Python lambda表达式filter、map、reduce函数用法解析
Sep 11 Python
postman传递当前时间戳实例详解
Sep 14 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
解决springboot yml配置 logging.level 报错问题
Feb 21 Python
python实现批量命名照片
Jun 18 Python
实例代码讲解Python 线程池
Aug 24 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 Python
python读取pdf格式文档的实现代码
Apr 01 Python
详解django使用include无法跳转的解决方法
Mar 19 #Python
Django模板标签中url使用详解(url跳转到指定页面)
Mar 19 #Python
关于Python turtle库使用时坐标的确定方法
Mar 19 #Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 #Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 #Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 #Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 #Python
You might like
图书管理程序(一)
2006/10/09 PHP
PHP读取MySQL数据代码
2008/06/05 PHP
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
2016/07/27 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
python多线程扫描端口示例
2014/01/16 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python将回车作为输入内容的实例
2018/06/23 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
2019/08/23 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
金智子午JAVA面试题
2015/09/04 面试题
优秀学生干部推荐材料
2014/02/03 职场文书
电大毕业个人生自我鉴定
2014/03/26 职场文书
安全生产承诺书范文
2014/05/22 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python