知识内容:

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+购物商城的更多相关文章

  1. Python开发程序:ATM+购物商城

    一.程序要求 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期未还 ...

  2. 模拟实现ATM+购物商城程序

    流程图: 需求: ATM:模拟实现一个ATM + 购物商城程序额度 15000或自定义实现购物商城,买东西加入 购物车,调用信用卡接口结账可以提现,手续费5%支持多账户登录支持账户间转账记录每月日常消 ...

  3. day4作业模拟实现一个ATM + 购物商城程序

    作业需求: 模拟实现一个ATM + 购物商城程序 1.额度 15000或自定义: 2.实现购物商城,买东西加入 购物车,调用信用卡接口结账: 3.可以提现,手续费5%: 4.每月22号出账单,每月10 ...

  4. 2.2 - ATM+购物商城程序

    要求:模拟实现一个ATM + 购物商城程序1.额度 15000或自定义2.实现购物商城,买东西加入 购物车,调用信用卡接口结账3.可以提现,手续费5%4.支持多账户登录5.支持账户间转账6.记录每月日 ...

  5. ATM:模拟实现一个ATM + 购物商城程序

    额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录每月日常消费流水 提供还款接口 ATM记录操作日志 提供管理接 ...

  6. First Project -用函数写的ATM+购物商城程序

    作业需求:模拟实现一个ATM + 购物商城程序 额度15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期未还,按欠 ...

  7. Python实现ATM+购物商城

    需求: 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期未还,按欠 ...

  8. 项目1:ATM+购物商城项目

    项目1:ATM+购物商城 1.项目介绍 项目需求: # 项目需求如下:'''- 额度 15000或自定义​- 实现购物商城,买东西加入购物车,调用信用卡接口结账​- 可以提现,手续费5%​- 支持多账 ...

  9. ATM&购物商城程序

    模拟实现一个ATM + 购物商城程序 额度15000或自定义 实现购物商城,买东西加入购物车,调用信用卡接口转账 可以体现,手续费5% 支持多账户登录 支持账户间转账 记录每月日常消费流水 提供还款接 ...

随机推荐

  1. Linux Framebuffer save as picture

    /********************************************************************************* * Linux Framebuff ...

  2. Unity 3D游戏-塔防类游戏源码:重要方法和功能的实现

    Unity-塔防游戏源码 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 2 3 4 5 6 7 8 9 ...

  3. CF1096.F. Inversion Expectation(树状数组)

    A permutation of size n is an array of size n such that each integer from 1 to n occurs exactly once ...

  4. solr 6.2.1环境搭建

    一:Solr简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过 ...

  5. Asp.net自定义控件系列(一)

    最近看到公司某个网站中用到了自定义控件,咋一眼看去,不明白什么玩意, 网上一搜,好像确实不是几句话就能写出强大的自定义控件.好吧,作为一个码农,我决定从基本学起,写一个关于自定义控件学习过程系列. 当 ...

  6. load-display-image之c#版

    基本功能 能够从文件load图像 -->显示图像-->在图像上方显示graphics,比如几条线-->鼠标移动,显示鼠标位置的灰度 load-display-image之c#版 lo ...

  7. AppBox中main树节点单击事件JS(还有叶子的节点的页面链接)

    AppBox中main.aspx.csif (menu.IsTreeLeaf) {                        node.Leaf = true;                   ...

  8. php中二维数组排序问题方法详解

    PHP中二维数组排序,可以使用PHP内置函数uasort() 示例一: 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 回调函数如下:注意回调函数的返回值是负数或者是false的时候,表示 ...

  9. 《Wrox.Professional.Hadoop.Solutions》中文目录全稿

    前言:最近有朋友给推荐一本书,英文原版<Wrox.Professional.Hadoop.Solutions>,感觉很好打算翻译成中文,共享给朋友,时间关系,不知能否成行,先干着吧.以下部 ...

  10. 【ActiveMQ入门-10】ActiveMQ学习-通配符+异步接收

    通配符介绍: 一般情况下,我们使用层次结构的方式来组织队列,比如A.B.C.D,这样便于归类和管理.  我们也可以使用通配符来配置或是操作多个队列.  通配符有三个: .  用来分隔路径: * 用来匹 ...