day21ATM+购物车
start 开始文件
from core import src
if __name__ == '__main__':
src.main()
用户视图层 core下的src.py
from interface import user
from interface import back
from interface import shopping
from db import db_handler
from lib import common
user_data = {
'username': None,
'is_login': False,
}
def logintout():
print('退出成功')
exit()
def register():
print('注册功能')
if user_data['is_login']:
print('已经登录')
return
while True:
username = input('请输入姓名')
if user.get_userinfo_interface(username):
print('用户名已存在')
continue
else:
password = input('请输入密码:').strip()
user.register_a(username, password)
common.write_log('%s注册成功' % username)
print('%s注册成功' % username)
break
def login():
print('登录功能')
count = 0
if user_data['is_login']:
print('用户已登录')
return
while True:
username = input('请输入姓名:').strip()
user_dic = user.get_userinfo_interface(username)
if not user_dic:
print('账号不存在')
continue
if user_dic.get('locked'):
print('账号已锁定,请联系相关人员')
break
password = input('请输入密码:').strip()
user_dic = user.get_userinfo_interface(username)
if password == user_dic['password']:
print('登陆成功')
common.write_log('%s登录成功' % username)
user_data['username'] = username
user_data['is_login'] = True
break
else:
print('登陆失败')
count += 1
if count == 3:
print('错误三次,账号锁定')
user_dic['locked'] = True
user.user_locked(user_dic)
break
@common.login_auth
def withdraw():
print('提现功能')
while True:
money = input('请输入提现金额:').strip()
if not money:
print("你啥也不输入 ,你提现个毛线")
continue
if not money.isdigit():
print('请输入正确的金额')
continue
money = int(money)
user_dic = user.get_userinfo_interface(user_data['username'])
if user_dic['account'] >= money * 1.05:
back.withdraw(user_dic, money)
common.write_log('%s提现成功' % user_data['username'])
print('%s提现成功,金额为:%s' % (user_dic['username'], money * 1.05))
break
else:
print('余额不足')
@common.login_auth
def transfer():
print('转账功能')
while True:
to_user = input('请输入对方账户:').strip()
to_user_dic = user.get_userinfo_interface(to_user)
if not to_user_dic:
print('对方账户不存在,请从新输入')
continue
transfer_money = input('请输入转账金额:').strip()
if not transfer_money.isdigit():
print('金额必须是纯数字')
continue
transfer_money = int(transfer_money)
from_user_dic = user.get_userinfo_interface(user_data['username'])
if from_user_dic['account'] >= transfer_money:
back.transfer(from_user_dic, to_user_dic, transfer_money)
print('转账成功,金额为:%s' % transfer_money)
common.write_log('%s转账成功' % from_user_dic['username'])
break
else:
print('钱不够')
@common.login_auth
def pay():
print('充值功能')
while True:
pay_money = input('请输入充值金额:').strip()
if not pay_money.isdigit():
print('请输入正确的金额')
continue
pay_money = int(pay_money)
user_dic = user.get_userinfo_interface(user_data['username'])
back.pay(user_dic, pay_money)
print('充值成功,金额为:%s' % pay_money)
common.write_log('%s充值成功' % user_data['username'])
break
@common.login_auth
def check_money():
print('查看余额')
user_dic = user.get_userinfo_interface(user_data['username'])
print('当前用户余额为:%s' % user_dic['account'])
common.write_log('%s查看了余额' % user_data['username'])
@common.login_auth
def check_flow():
print('查看流水')
user_dic = user.get_userinfo_interface(user_data['username'])
for i in user_dic['flow']:
print(i)
common.write_log('%s查看了流水' % user_data['username'])
@common.login_auth
def shopping_car():
print('购买商品')
shopping_car = {}
while True:
goods = [
['肥宅快乐水', 5],
['炸鸡', 30],
['苹果', 8],
['雪糕', 3],
['瓜子', 12],
['火腿', 2],
['烤全羊', 1000],
['辣条', 4],
['笔记本电脑', 8000],
['泡泡糖', 4.5]
]
for k, v in enumerate(goods):
print(k, v[0], v[1])
num = input('请输入商品对应编号').strip()
if num.isdigit():
num = int(num)
goods_names = goods[num][0]
goods_price = goods[num][1]
if goods_names not in shopping_car:
shopping_car[goods_names] = {'price': goods_price, 'count': 1}
else:
shopping_car[goods_names]['count'] += 1
print('接着买,输入q退出')
elif num == 'q':
if shopping_car:
shopping.add_car(user_data['username'], shopping_car)
print('欢迎下次再来')
common.write_log('%s购买了商品' % user_data['username'])
break
else:
print('输入不合法')
@common.login_auth
def check_shopping_car():
print('查看购物车')
user_dic = user.get_userinfo_interface(user_data['username'])
for i in user_dic['shopping']:
print('名称:%s 价格:%s 数量:%s' % (i, user_dic['shopping'][i]['price'], user_dic['shopping'][i]['count']))
common.write_log('%s查看了购物车' % user_data['username'])
func_dic = {
'0': ['退出', logintout],
'1': ['注册', register],
'2': ['登录', login],
'3': ['提现', withdraw],
'4': ['转账', transfer],
'5': ['充值', pay],
'6': ['查看余额', check_money],
'7': ['查看流水', check_flow],
'8': ['购买商品', shopping_car],
'9': ['查看购物车', check_shopping_car],
}
def main():
while True:
for line in func_dic:
print(line, '-', func_dic[line][0])
choise = input('请输入您要选功能的编号:').strip()
if choise in func_dic:
func_dic[choise][1]()
else:
print('请从新输入')
用户逻辑层,接口层 interface
①user.py用户接口
from db import db_handler
def register_a(username,password):
user_dic ={
'username':username,
'password':password,
'account':15000,
'locked':False,
'flow':[],
'shopping':{},
}
db_handler.update(user_dic)
def get_userinfo_interface(username):
return db_handler.select(username)
def user_locked(user_dic):
db_handler.update(user_dic)
②back.py
from db import db_handler
import time
now =time.strftime('%Y-%m-%d %X')
def withdraw(user_dic,money):
user_dic['account']-=money*1.05
user_dic['flow'].append('%s提现了%s元'%(now,money))
db_handler.update(user_dic)
def transfer(from_user_dic,to_user_dic,money):
to_user_dic['account']+=money
to_user_dic['flow'].append('%s收到了%s的%s元'%(now,from_user_dic['username'],money))
db_handler.update(to_user_dic)
from_user_dic['account']-=money
from_user_dic['flow'].append('%s转给了%s%s元'%(now,to_user_dic['username'],money))
db_handler.update(from_user_dic)
def pay(user_dic,money):
user_dic['account']+=money
user_dic['flow'].append('%s充值了%s元'%(now,money))
db_handler.update(user_dic)
③shopping
from db import db_handler
from interface import user
def add_car(username,shopping_car):
user_dic=user.get_userinfo_interface(username)
user_dic['shopping']=shopping_car
db_handler.update(user_dic)
实体层 db下的db_handler
import os
from conf import settings
import json
def update(user_dic):
path_file = os.path.join(settings.PATH_DIR, 'db', '%s.json' % user_dic['username'])
with open(path_file,'w',encoding='utf-8')as f:
json.dump(user_dic,f,ensure_ascii=False)
def select (username):
path_file = os.path.join(settings.PATH_DIR, 'db', '%s.json' % username)
if os.path.exists(path_file):
with open(path_file,'r',encoding='utf-8')as f:
return json.load(f)
else:
return False
conf 下的setting.py配置文件
import os
import sys
PATH_DIR=os.path.dirname(os.path.dirname(__file__))
lib下的common 常用函数
from core import src
import logging
import os
from conf import settings
def login_auth(func):
def inner(*args,**kwargs):
if src.user_data['username']:
return func(*args,**kwargs)
else:
print('请先登录')
src.login()
return inner
logging.basicConfig(
filename=os.path.join(settings.PATH_DIR, 'log', 'access.log'),
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
encoding='utf-8',
level=10,
)
def write_log(info):
logging.debug(info)
'''
# 注意下面的root是默认的日志名字
WARNING:root:警告warn
ERROR:root:错误error
CRITICAL:root:严重critical
'''
log 日志文件
2021-08-22 18:46:46 PM - root - DEBUG -common: z注册成功
2021-08-22 18:50:42 PM - root - DEBUG -common: qwe注册成功
2021-08-22 18:50:47 PM - root - DEBUG -common: qwe登录成功
2021-08-22 18:50:53 PM - root - DEBUG -common: qwe提现成功
2021-08-22 18:51:00 PM - root - DEBUG -common: qwe转账成功
2021-08-22 18:51:07 PM - root - DEBUG -common: qwe充值成功
2021-08-22 18:51:10 PM - root - DEBUG -common: qwe查看了流水
2021-08-22 18:51:11 PM - root - DEBUG -common: qwe查看了金额
2021-08-22 18:51:20 PM - root - DEBUG -common: qwe购买了商品
2021-08-22 18:51:23 PM - root - DEBUG -common: qwe查看了购物车