ATM
(1)作业需求:
- 额度 15000或自定义
- 实现购物商城,买东西加入 购物车,调用信用卡接口结账
- 可以提现,手续费5%
- 支持多账户登录
- 支持账户间转账
- 记录每月日常消费流水
- 提供还款接口
- ATM记录操作日志
- 提供管理接口,包括添加账户、用户额度,冻结账户等。。。
- 用户认证用装饰器。
(2)作业完成情况:
- 额度 15000
- 实现购物商城,买东西加入 购物车,调用信用卡接口结账
- 可以提现,手续费5%
- 支持多账户登录
- 支持账户间转账
- 记录每月日常消费流水
- ATM记录操作日志
- 提供还款接口
- 用户认证用装饰器
(3)编写感想:
- 如果需要预留接口,建议编写时候统一使用相对路径方便调用:
import os
import sys
BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(file)))
sys.path.append(BASEDIR) - 记录相关内容时候可以使用logging模块,以为案例:
1 import logging
2 logger = logging.getLogger('操作')
3 loggers = logging.getLogger('流水')
4 logger.setLevel(logging.DEBUG)
5 loggers.setLevel(logging.DEBUG)
6 fh = logging.FileHandler("../log/操作" , encoding='utf-8')
7 ch = logging.FileHandler("../log/流水" , encoding='utf-8')
8 fh.setLevel(logging.DEBUG)
9 ch.setLevel(logging.DEBUG)
10 formatter = logging.Formatter('%(asctime)s - %(name)s - %(message)s - %(module)s - %(lineno)d')
11 formatters = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
12 fh.setFormatter(formatter)
13 ch.setFormatter(formatters)
14 logger.addHandler(fh)
15 loggers.addHandler(ch)
相关资料:
http://www.cnblogs.com/alex3714/articles/5765046.html - 装饰器,简单的来讲就是未改变函数代码情况下功能累加的作用。不过没有试过装饰器是否可以反复装饰。本来已经写相关登录验证,但为了方便用装饰器正佳重复扣款免密码功能。
1 user_start = False
2 def long_deco(func):
3 def deco (*args,**kwargs):
4 global user_start
5 if user_start == False:
6 return func(*args,**kwargs)
7 else:
8 p = open_date.open_db(*args)
9 name_dict = eval(p)
10 return name_dict
11 return deco
12 @long_deco
13 def login (name_in=None):
14 name_dict = {}
15 wrong_number = 0
16 if open_date.open_db(name_in) == None:
17 print("没有此然账户")
18 return None
19 else:
20 p = open_date.open_db(name_in)
21 name_dict = eval(p)
22 task = False
23 while task is False:
24 passwd_in = input("输入密码:")
25 passwd_in = str(passwd_in)
26 if name_dict['password'] == passwd_in:
27 print("登录成功")
28 log.logger.info('%s登录 余额%s'%(name_in,name_dict['balance']))
29 print("可用余额:",name_dict['balance'])
30 task = True
31 global user_start
32 user_start = True
33 return name_dict
34 else:
35 print("密码不正确")
36 wrong_number += 1
37 log.logger.debug("%s密码不正确"%(name_in))
38 if wrong_number == 3 :
39 task = True
40 return None
转载于:https://www.cnblogs.com/diyusishen/p/6291114.html