知识内容:

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. Redis的持久化策略

    Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AO ...

  2. 猎豹免费WiFi-随身WiFi共享热点,永久免费的无线路由器 - imsoft.cnblogs

  3. CTF-练习平台-Misc之 再来一道隐写

    十二.再来一道隐写 下载文件后打开,用常用的几个方法都没有找到有用的信息,然后观察图片发现搞度有点低,所以用WinHex打开把图片高度改大,保存.再次打开图片发现flag

  4. LeetCode Factorial Trailing Zeroes Python

    Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!. 题目意思: n求阶乘 ...

  5. 纯CSS绘制三角形(各种角度)类似于使用字符画法,根据位移不同,也可以使用两个元素画出三角边框

    我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...

  6. TensorFlow 官方文档中文版学习

    TensorFlow 官方文档中文版 地址:http://wiki.jikexueyuan.com/project/tensorflow-zh/

  7. Git的一些基本操作和命令

    1.创建版本库 在D盘中打开Git Bash Here 1.1.创建一个空目录 Mkdir gitDemo –创建一个目录 Cd gitDemo  --进入gitDemo目录 Pwd –查看当前目录的 ...

  8. 【转】每天一个linux命令(37):date命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/12/13/2815687.html 在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常 ...

  9. linux日志分析

    转一位大神的笔记. 日志管理: 1.基于服务的 2.基于时间的 /var/log/wtmp,/var/run/utmp,/var/log/lastlog(lastlog),/var/log/btmp( ...

  10. weexpack 使用

    weexpack 的github地址:https://github.com/weexteam/weex-pack weex-toolkit: 初始化的项目是针对开发单个 Weex 页面而设计的,也就是 ...