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


猜你喜欢
- 前言提示:以下是本篇文章正文内容🍒PIL库概述PIL库支持图像存储、 显示和处理, 它能够处理几乎所有图片格式, 可以完成对图像的缩放、 剪
- 本文实例讲述了Python函数装饰器实现方法。分享给大家供大家参考,具体如下:编写函数装饰器这里主要介绍编写函数装饰器的相关内容。跟踪调用如
- jQuery 将马上发布 1.4 正式版,代码也从 googlecode 上迁移到了 github. jQuery 是我接触的第一个 JS
- 一,JS对象<!DOCTYPE html><html><head><meta charset=&q
- 网络上有许多似是而非的“谣言”,当然都不是恶意,绝大部分都是开发者不愿意自己主动研究,反而轻信其他人的信口之言。关于数据库的谣言也有不少,比
- goland如果当前project用了版本控制器,其下面新建的所有的项目默认都是加入到版本控制里面,所以项目名称和文件都是红色的。解决办法:
- 步骤查看历史记录# 查看历史记录git log -3实例Simba@SIMBA MINGW64 /t/IDE/IDEA/Workspace-
- 最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学
- 一、在搭建的时候参考以下文章http://www.cnblogs.com/zsy/archive/2016/02/28/5223957.ht
- 查询本日记录SELECT * FROM messages WHERE CONVERT(Nvarchar, CreateDate, 111)
- 1、php支持哪些数据库(拥有哪些数据库接口)Adabas D ,InterBase ,PostgreSQL ,dBase ,FrontBa
- 目录一、Python字典1.什么是字典2.字典的创建方式2.1 通过其他字典创建2.2 通过关键字参数创建2.3 通过键值对的序列创建2.4
- 一、问题由来工作的局域网中,会接入很多设备,机器人上的网络设备就2个了,一个巨哥红外,一个海康可见光。机器人还有自身的ip。有时候机器人挂的
- mysql-connector-java与mysql版本的对应我们知道版本更新经常带来的问题就是兼容性问题。在编程过程中版本的错误选择很可能
- 背景node.js,有人称之为运行在服务器端的JavaScript。以往我们使用JavaScript时,都是依赖后端查询数据库并返回数据,而
- 环境准备数据库版本:MySQL 5.7.20-log建表 SQLDROP TABLE IF EXISTS `t_ware_sale_stat
- 本文实例讲述了php自定义函数实现二维数组按指定key排序的方法。分享给大家供大家参考,具体如下:二维数组官方的排序方法并不好,该函数可以进
- ./当前目录 /网站主目录 ../上层目录 ~/网站虚拟目录 如果当前的网站目录为E:\wwwroot 应用程序虚拟目录为E:\wwwroo
- 先导入模块:from django.core.paginator import Paginator, EmptyPage, PageNotA
- 前言众所周知在java或php等很多面向对象的语言中, 异常处理是依靠throw、catch来进行的。在go语言中,panic和recove