ATM+购物商城
知识内容:
1.luffy买tesla
2.ATM+购物商城
一、luffy买tesla
需求:
1.目录结构说明
account
luffy.json --> 存储用户账户信息 {"money": 1000000, "credit": 300000}
tesla.json --> 存储tesla账户信息 {"money": 0}
bin
start.py --> 项目入口文件
core
withdraw.py --> 项目核心文件
logs
bank.log --> 日志文件 2.功能说明
当执行start.py出现交互窗口如下:
----Luffy Bank----
1.账户信息
2.转账
3.提现
(1)选择1账户信息显示luffy的当前账户余额和信用额度(存在luffy.json中)
(2)选择2转账直接在luffy账户中扣掉75万和5%的税费并且tesla账户增加75万(存在tesla.json中)
(3)当选择3提现,提现金额应该小于信用额度,利息为5%,提现金额为用户自定义
(4)把用户转账、登陆、提现操作均通过logging模块记录日志在bank.log中
思路以及特殊技巧:
1.思路
start.py是程序的主入口,调用withdraw中的chose_func函数来执行代码,chose_func函数的功能类似一个菜单,将各个功能连接在一起,先完成用户信息展示、用户转账、提现这3个功能函数,然后通过装饰器实现用户登录验证并且用户只用登录一次后续就不用登录,最后将日志记录写成一个函数。参数为日志的等级和输出信息,在需要输出日志的地方调用这个函数即可
2.特殊技巧
如何让start.py调用withdraw.py中的函数,利用os模块获得项目的根目录然后动态添加进系统环境变量中即可,代码如下:
def main():
# 动态添加
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# 导入核心模块文件
from core import withdraw
withdraw.chose_func() # 项目主入口
if __name__ == '__main__':
main()
装饰器实现用户登录:
# 装饰器函数 -> 实现登录
def login(func):
def wrapper(*args, **kwargs):
global flag
if flag: # 未登录就进行登录验证
print("请先登录然后进行操作")
username = input("username: ")
password = input("password: ")
if username == _username and password == _password:
# print("登录成功!")
logging_message("info", "%s login!" % username)
flag = False # 登录成功就把flag改为False,再使用别的功能就不用登录
func(*args, **kwargs)
else:
# print("用户名或密码错误!")
logging_message("warn", "wrong username or wrong password!")
else: # 登录过就不用验证
func(*args, **kwargs) return wrapper
注:logging_message()是调用日志输出函数
日志输出函数:
# 实现日志功能 日志位置: /logs/bank.log
def logging_message(level, message):
route = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 提取项目的绝对路径
route += r"\logs\bank.log" # 加上项目文件的相对路径 # create logger
logger = logging.getLogger(_username) # 获得logger对象
logger.setLevel(logging.DEBUG) # 设置一个全局的日志级别 # create console handler and set level to debug
ch = logging.StreamHandler() # 把日志打印到屏幕
ch.setLevel(logging.INFO) # 设定屏幕的日志级别 # create file handler and set level to warning
fh = logging.FileHandler(route) # 把日志打印到文件
fh.setLevel(logging.INFO) # 设定文件的日志级别 # create formatter 设置输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # add formatter to ch and fh 给屏幕和文件设置输出格式
ch.setFormatter(formatter)
fh.setFormatter(formatter) # add ch and fh to logger 把日志打印到指定的handler中
logger.addHandler(ch)
logger.addHandler(fh) # 'application' code
# 设置信息
if level == 'debug':
logger.debug(message)
if level == 'info':
logger.info(message)
if level == 'warn':
logger.warning(message)
if level == 'error':
logger.error(message)
if level == 'critical':
logger.critical(message) # 添加下面一句,在记录日志之后移除句柄
logger.removeHandler(ch)
logger.removeHandler(fh)
3.完整代码:https://github.com/15387062910/python_train/tree/master/luffy_tesla
二、ATM+购物商城
需求:
模拟实现一个ATM + 购物商城程序
功能如下:
额度 15000或自定义
实现购物商城,买东西加入 购物车,调用信用卡接口结账
可以提现,手续费5%
每月22号出账单,每月10号为还款日,过期未还,按欠款总额 万分之5 每日计息
支持多账户登录
支持账户间转账
记录每月日常消费流水
提供还款接口
ATM记录操作日志
提供管理接口,包括添加账户、用户额度,冻结账户等。。。
用户认证用装饰器
示例代码 https://github.com/triaquae/py3_training/tree/master/atm
简易流程图:https://www.processon.com/view/link/589eb841e4b0999184934329
思路以及特殊技巧:
代码实现:
ATM+购物商城的更多相关文章
- Python开发程序:ATM+购物商城
一.程序要求 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期未还 ...
- 模拟实现ATM+购物商城程序
流程图: 需求: ATM:模拟实现一个ATM + 购物商城程序额度 15000或自定义实现购物商城,买东西加入 购物车,调用信用卡接口结账可以提现,手续费5%支持多账户登录支持账户间转账记录每月日常消 ...
- day4作业模拟实现一个ATM + 购物商城程序
作业需求: 模拟实现一个ATM + 购物商城程序 1.额度 15000或自定义: 2.实现购物商城,买东西加入 购物车,调用信用卡接口结账: 3.可以提现,手续费5%: 4.每月22号出账单,每月10 ...
- 2.2 - ATM+购物商城程序
要求:模拟实现一个ATM + 购物商城程序1.额度 15000或自定义2.实现购物商城,买东西加入 购物车,调用信用卡接口结账3.可以提现,手续费5%4.支持多账户登录5.支持账户间转账6.记录每月日 ...
- ATM:模拟实现一个ATM + 购物商城程序
额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录每月日常消费流水 提供还款接口 ATM记录操作日志 提供管理接 ...
- First Project -用函数写的ATM+购物商城程序
作业需求:模拟实现一个ATM + 购物商城程序 额度15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期未还,按欠 ...
- Python实现ATM+购物商城
需求: 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期未还,按欠 ...
- 项目1:ATM+购物商城项目
项目1:ATM+购物商城 1.项目介绍 项目需求: # 项目需求如下:'''- 额度 15000或自定义- 实现购物商城,买东西加入购物车,调用信用卡接口结账- 可以提现,手续费5%- 支持多账 ...
- ATM&购物商城程序
模拟实现一个ATM + 购物商城程序 额度15000或自定义 实现购物商城,买东西加入购物车,调用信用卡接口转账 可以体现,手续费5% 支持多账户登录 支持账户间转账 记录每月日常消费流水 提供还款接 ...
随机推荐
- STM32 Flash 永久用户数据空间
/********************************************************************************* * STM32 Flash 永久用 ...
- 【error】segmentation fault分析
前言 调试代码的时候,可能会出现segmentation fault的bug,很难找到原因,在此总结一下可能的原因. SIGSEGV 原因分析 1.程序中的变量没有进行检查: 比如,没有对变量的大小进 ...
- OpenCV-bwLabel-实现图像连通组件标记与分析
OpenCV实现图像连通组件标记与分析- matlab bwLabel; code: #include <opencv2/opencv.hpp> #include <iostream ...
- 微信小程序实现多选分享
微信小程序拉取好友列表后,默认只能选一个分享,现在在分享回调onShareAppMessage里加上这段代码,拉取好友列表时,右上角会出现多选按钮,这样就解决了微信小程序安卓下只能单选分享的问题. / ...
- PAT天梯:L1-019. 谁先倒
L1-019. 谁先倒 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳 ...
- rabbitmq学习(二):rabbitmq(消息队列)的作用以及rabbitmq之直连交换机
前言 上篇介绍了AMQP的基本概念,组成及其与rabbitmq的关系.了解了这些东西后,下面我们开始学习rabbitmq(消息队列)的作用以及用java代码和rabbitmq通讯进行消息发布和接收.因 ...
- JPA 简单实体映射和EntityManagerAPI
[常用注解] 使用JPA 指定映射关系时,有两种方式,一种是使用xml 方式,另一种是注解方式,笔者推荐使用注解方式.在JPA 映射简单实体时,常用的注解如下: @Entity:修饰实体类对象,表示该 ...
- ballerina 学习二十七 项目k8s部署&& 运行
ballerina k8s 部署和docker 都是同样的简单,编写service 添加注解就可以了 参考项目 https://ballerina.io/learn/by-guide/restful- ...
- nyoj 最小公倍数
最小公倍数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致. 但也并非纯粹的偶然:60是个优秀的数字 ...
- Why my setting does not work?
lab mypc server7000 -> 5900 1080 -> 10800 10800 -> inter ...