python做学程序编写——ATM
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