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% 支持多账户登录 支持账户间转账 记录每月日常消费流水 提供还款接 ...
随机推荐
- (3)socket的基础使用(基于UDP协议)
服务端代码 import socket server =socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #SOCK_DGRAM就是数据报,UDP就是数据 ...
- spring boot sso 学习资源
diy: 关键字: springboot sso:public boolean preHandle(HttpServletRequest request, HttpServletResponse re ...
- MySql5.5安装(windows)
首先贴出安装包 32位安装包链接:https://pan.baidu.com/s/1AGLpcKv1I4kvWjPsVMyS8Q 密码:xypy 64位安装包链接:https://pan.baidu. ...
- jsp页面九大内置对象
资源转载自网上,不可用于商用,学习可以.内置对象又叫隐式对象/隐含对象是由WEB容器加载的一组类的实例,不需要预先声明就可以在脚本代码和表达式中随意使用的对象. 这九大隐式对象可以按照期作用分类为: ...
- test20181005 序列
题意 考场30分 维护差值,考虑每次移动的变更,当前2-n位置上的差加1,1位置上的差减n-1. 然后要求的是绝对值的和,用吉司机线段树维护最大最小值.次大次小值. 期望复杂度\(O(n \log n ...
- ballerina 学习 三十一 扩展开发(二)
上篇说了使用ballerina 语言开发扩展模块,对于注解类型的我们是需要使用java 语言进行 开发的 官方提供了一个hello 的demo可以参考 https://github.com/balle ...
- citus 多租户应用开发(来自官方文档)
citus 官方文档很不错,资料很全,同时包含一个多租户应用的文档,所以运行下,方便学习 环境准备 使用docker-compose 运行,同时集成了graphql 引擎,很方便 docker-c ...
- 廖雪峰 ---- Python教程
这是小白的Python新手教程,具有如下特点: 中文,免费,零起点,完整示例,基于最新的Python 3版本. Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学 ...
- 使用Apriori进行关联分析(二)
书接上文(使用Apriori进行关联分析(一)),介绍如何挖掘关联规则. 发现关联规则 我们的目标是通过频繁项集挖掘到隐藏的关联规则. 所谓关联规则,指通过某个元素集推导出另一个元素集.比如有一个频繁 ...
- shell教程-002:常见的Shell种类
Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把它们称作一种Shell.我们常说有多少种Sh ...