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中设置变量作为默认值时容易遇到的错误
Apr 03 Python
python实现爬虫下载美女图片
Jul 14 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
python的paramiko模块实现远程控制和传输示例
Oct 13 Python
python实现播放音频和录音功能示例代码
Dec 30 Python
python实现树的深度优先遍历与广度优先遍历详解
Oct 26 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
python使用turtle库绘制奥运五环
Feb 24 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
Python tkinter制作单机五子棋游戏
Sep 14 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
一周让你学会PHP 不错的学习资料
2009/02/06 PHP
php中显示数组与对象的实现代码
2011/04/18 PHP
PHP cdata 处理(详细介绍)
2013/07/05 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
PHP面向对象精要总结
2014/11/07 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
JS 有名函数表达式全面解析
2010/03/19 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
学习并汇集javascript匿名函数
2010/11/25 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
2013/04/15 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
JS中递归函数
2016/06/17 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
vue component组件使用方法详解
2017/07/14 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
Python 文件读写操作实例详解
2014/03/12 Python
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
详解如何减少python内存的消耗
2019/08/09 Python
pycharm实现猜数游戏
2020/12/07 Python
美国宠物商店:Wag.com
2016/10/25 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
高中军训感言400字
2014/02/24 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书