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获取操作系统信息实例
Sep 02 Python
Python正则表达式使用范例分享
Dec 04 Python
Python生成数字图片代码分享
Oct 31 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
django框架创建应用操作示例
Sep 26 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
基于Python的OCR实现示例
Apr 03 Python
Python字符串格式化f-string多种功能实现
May 07 Python
OpenCV实现常见的四种图像几何变换
Apr 01 Python
关于Python中进度条的六个实用技巧分享
Apr 05 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
制作美丽的拉花
2021/03/03 冲泡冲煮
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php中Ctype函数用法详解
2014/12/09 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
JavaScript中的比较操作符&gt;、=、
2014/12/31 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
几种响应式文字详解
2017/05/19 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
python显示生日是星期几的方法
2015/05/27 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
利用Python检测URL状态
2019/07/31 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
error和exception有什么区别
2012/10/02 面试题
用C语言实现文件读写操作
2013/10/27 面试题
怎么样写好简历中的自我评价
2013/10/25 职场文书
大学生入党自我鉴定
2013/10/31 职场文书
传播学专业毕业生自荐信
2013/11/04 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
销售职业生涯规划范文
2014/03/14 职场文书
正则表达式基础与常用验证表达式
2022/06/16 Javascript