Python ATM功能实现代码实例

作者:西楼xilou 时间:2022-10-05 04:48:23 

编写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

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

来源:https://www.cnblogs.com/heirenxilou/p/12521102.html

标签:Python,ATM,功能
0
投稿

猜你喜欢

  • Python使用正则表达式分割字符串的实现方法

    2023-03-12 07:13:49
  • python实现磁盘日志清理的示例

    2021-05-10 07:08:21
  • 如何在Python中隐藏和加密密码示例详解

    2023-07-19 00:00:09
  • Elasticsearch的删除映射类型操作示例

    2022-05-03 09:46:50
  • 一文教你利用Python制作一个C盘清理器

    2022-05-05 00:45:20
  • 一篇文章教你掌握python数据类型的底层实现

    2023-06-01 03:41:14
  • Python学习小技巧之列表项的排序

    2022-03-31 12:06:12
  • 产品交互原型设计工具分享

    2010-03-24 18:06:00
  • python实现图片插入文字

    2021-11-02 20:32:09
  • Mysql导入TXT文件

    2012-01-05 19:01:10
  • 细数JavaScript 一个等号,两个等号,三个等号的区别

    2023-08-25 08:22:09
  • oracle远程连接服务器数据库图文教程

    2023-07-12 22:22:37
  • ASP连接MSSQL的错误: 拒绝访问

    2008-11-23 20:40:00
  • Linux环境下安装MySQL8.0的完整步骤

    2024-01-22 05:26:47
  • Mysql 执行一条语句的整个过程详细

    2024-01-19 08:53:08
  • javascript 选择文件夹对话框(web)

    2024-04-17 09:48:43
  • 使用SAE部署Python运行环境的教程

    2021-02-21 14:26:54
  • 如何让利用Python+AI使静态图片动起来

    2022-06-06 08:15:31
  • Python 错误和异常代码详解

    2022-02-12 15:14:08
  • Python类如何定义私有变量

    2023-04-18 11:23:23
  • asp之家 网络编程 m.aspxhome.com