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改变日志(logging)存放位置的示例
Mar 27 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
PyGame贪吃蛇的实现代码示例
Nov 21 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
Aug 06 Python
python中with用法讲解
Feb 07 Python
基于打开pycharm有带图片md文件卡死问题的解决
Apr 24 Python
django模板获取list中指定索引的值方式
May 14 Python
Python定义一个函数的方法
Jun 15 Python
python中子类与父类的关系基础知识点
Feb 02 Python
python实现ROA算子边缘检测算法
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
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
php创建基本身份认证站点的方法详解
2013/06/08 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
PHP实现简易计算器功能
2020/08/28 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
15 个 JavaScript Web UI 库
2010/05/19 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
浅谈react 同构之样式直出
2017/11/07 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
Python实现全局变量的两个解决方法
2014/07/03 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
python3 深浅copy对比详解
2019/08/12 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
Java基础面试题
2012/11/02 面试题
社会实践心得体会
2014/01/03 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
海洋天堂观后感
2015/06/05 职场文书