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中使用HTMLParser解析HTML的教程
Apr 29 Python
python集合用法实例分析
May 30 Python
python使用Matplotlib画条形图
Mar 25 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
python实现简单坦克大战
Mar 27 Python
Python使用sqlite3模块内置数据库
May 07 Python
Python sorted对list和dict排序
Jun 09 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
Python+pyftpdlib实现局域网文件互传
Aug 24 Python
python中pandas对多列进行分组统计的实现
Jun 18 Python
Python实现GIF动图以及视频卡通化详解
Dec 06 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/07/22 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
python僵尸进程产生的原因
2017/07/21 Python
python 发送json数据操作实例分析
2019/10/15 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
营销人才自我鉴定范文
2013/12/25 职场文书
心得体会开头
2014/01/01 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
公司聘任书模板
2014/03/29 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
三年级学生期末评语
2014/12/26 职场文书
奖学金感谢信
2015/01/21 职场文书
三峡大坝导游词
2015/01/31 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
python 使用pandas读取csv文件的方法
2022/12/24 Python