编写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 atm作业详解_Python ATM功能实现代码实例相关推荐

  1. python atm作业详解_Python学习day5作业-ATM和购物商城

    Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM:指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆,用 ...

  2. python atm作业详解_python day4 作业 ATM

    作业需求 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆,用户间转帐 支持多用户 管理员可添加账户.指定用户额度.冻结用户等 目录结构如下: AT ...

  3. python atm作业详解_Python小案例--ATM系统

    今天偶尔在知乎上看到某大佬用Python写的ATM系统案例,然后观摩了下他的实现思路和源码,感觉受益颇多.于是就根据自己的思路和目前掌握的Python编程基础将ATM实现了一下,以下是案例解析的过程: ...

  4. python atm作业详解_python完成ATM(分目录)

    模块跳转: 项目需求: 用**规范化项目目录**的格式模拟一个ATM系统. 项目功能: 1. 登录(可支持多个账户(非同时)登录). 2. 注册. 3. 查看余额. 4. 存钱. 5. 转账(给其他用 ...

  5. python argparse模块详解_python中argparse模块用法实例详解

    本文实例讲述了python中argparse模块用法.分享给大家供大家参考.具体分析如下: 平常在写命令行工具的时候,经常会带参数,所以用python中的argparse来实现. # -*- codi ...

  6. python recvfrom函数详解_Python socket.recvfrom方法代码示例

    # 需要导入模块: import socket [as 别名] # 或者: from socket import recvfrom [as 别名] def __discover_device__(se ...

  7. python协程详解_python协程详解

    原博文 2019-10-25 10:07 − # python协程详解 ![python协程详解](https://pic2.zhimg.com/50/v2-9f3e2152b616e89fbad86 ...

  8. python int函数详解_Python内置函数OCT详解

    英文文档:oct ( x ) Convert an integer number to an octal string. The result is a valid Python expression ...

  9. python时间函数详解_Python:Numpy库基础分析——详解datetime类型的处理

    原标题:Python:Numpy库基础分析--详解datetime类型的处理 Python:Numpy库基础分析--详解datetime类型的处理 关于时间的处理,Python中自带的处理时间的模块就 ...

最新文章

  1. Linux设定程序为服务运行
  2. 干货 | 基于 BDD 理念的 UI 自动化测试在携程度假的应用
  3. Java web 开发的概念、环境配置、创建项目过程详解(Eclipse)
  4. VTK:几何对象之Frustum
  5. native的Socket向Android的LocalSocketServer发送汉字乱码的问题
  6. 【最新版】Java速成路线(急于找工作!)
  7. Struts2 + Hibernate + Spring 以及javaweb模块问题解决(1)
  8. 最新 Bitnami redmine安装与配置
  9. 淘宝 封住baidu的蜘蛛了吗?
  10. matlab读取地震波数据,基于Matlab的人工地震波程序编写
  11. 新版智能广告点击要饭网单页网站源码
  12. 树莓派4B安装配置LibreELEC并连接到三星电视
  13. 反双曲余弦 双曲余弦_不要“聪明”:双曲括号反模式
  14. ESP32文件系统esp_littlefs实例
  15. 计算机知识产权查询,如何查询版权登记、计算机软件著作权登记?
  16. java中八进制常量是什么意思_Java 负的十六进制与八进制字面常量
  17. React生命周期解析
  18. Centos 7 部署suricata流量检测
  19. 鑫众棋牌源码下载架设教程支持PC安卓苹果附说明
  20. 如何准备计算机二级|MYSQL篇

热门文章

  1. linux c 判断路径是 目录还是文件
  2. linux wget下载整个ftp目录(含子目录)
  3. metasploit msfvenom使用实例
  4. Windows Socket五种I/O模型——代码全攻略
  5. js改变img标签的src属性在IE下没反应的解决方法
  6. 编写OD插件将IDA中分析出来的函数名导入到OD中
  7. Windows热键注册(反汇编方法 查看win32api 原理)
  8. Web服务器的工作原理
  9. java设计模式---命令模式
  10. 两篇文章说异常和中断之二