购物车项目(待完善)
作者:互联网
启动文件
bin>>>start.py
from core.src import *
cmd_dict = {
'1': register,
'2': login,
'3': add_to_cart,
'4': settle_cart
}
while True:
print('''
1.用户注册
2.用户登录
3.添加购物车
4.结算购物车
''')
cmd = input('请输入指令>>>:').strip()
if cmd in cmd_dict:
func = cmd_dict.get(cmd)
func()
else:
print('请输入正确的指令')
core>>>src.py
- 导入模块
import os
import json
- 定义一个全局字典用于存放用户登录成功后的用户名
login_state = {'username': None}
- 根据当前项目位置创建db文件夹
# 获取项目文件所在的路径
current_path = os.path.dirname(os.path.dirname(__file__))
# 拼接db文件夹路径
db_path = os.path.join(current_path, 'db')
# 创建db文件夹
if not os.path.exists(db_path):
os.mkdir(db_path)
- 获取文件中用户数据
# 传入username参数实现拼接完整路径名
def load_userinfo(username):
# 获取存储当前用户信息的文件路径
user_file_path = os.path.join(db_path, '%s.json' % username)
with open(user_file_path, 'r', encoding='utf8') as f:
# 获取用户数据
return json.load(f)
- 向文件中保存数据
# 传入username参数实现拼接完整路径名
# data为想要保存的数据
def dump_userinfo(username, data):
# 获取存储当前用户信息的文件路径
user_file_path = os.path.join(db_path, '%s.json' % username)
with open(user_file_path, 'w', encoding='utf8') as f:
# 保存数据
json.dump(data, f, ensure_ascii=False)
- 用户注册
def register():
# 1.用户名 密码 重复密码
user_name = input('username>>>:').strip()
user_pwd = input('password>>>:').strip()
re_pwd = input('repassword>>>:').strip()
# 2.判断两次密码是否一致
if user_pwd != re_pwd:
print('两次密码不一致')
return
# 3.获取当前用户注册后生成的路径
user_file_path = os.path.join(db_path, '%s.json' % user_name)
# 4.路径存在则表明用户已被注册
if os.path.exists(user_file_path):
print('用户已存在')
return
# 5.生成用户信息
user_data = {
'username': user_name,
'password': user_pwd,
'balance': 20000,
'shopping_cart': {}
}
# 6.保存用户信息
dump_userinfo(user_name, user_data)
print(f'用户 {user_name} 注册成功')
- 用户登录
def login():
# 1.输入用户名 密码
user_name = input('username>>>:').strip()
user_pwd = input('password>>>:').strip()
# 2.生成用户名对应的文件路径
user_file_path = os.path.join(db_path, '%s.json' % user_name)
# 3.判断用户名文件路径是否存在
if not os.path.isfile(user_file_path):
print('用户名不存在')
return
# 4.存在则取出该用户名对应的文件信息
user_data = load_userinfo(user_name)
# 5.判断密码是否正确
if user_pwd == user_data.get('password'):
print(f'用户 {user_name} 登录成功')
# 6.登录成功则修改全局字典
login_state['username'] = user_name
print(login_state['username'])
else:
print('用户名或密码错误')
- 登录认证装饰器 用于认证添加购物车和结算购物车功能时是否已经登录
# 登录认证装饰器
def wrapper(func):
def inner(*args, **kwargs):
if login_state.get('username'):
res = func(*args, **kwargs)
return res
else:
print('还没有登录哦')
login()
return inner
- 添加购物车功能
# 添加到购物车
@wrapper
def add_to_cart():
# 1.创建商品列表
goods_list = [['奥里给', 3],
['老八秘制小汉堡', 40],
['超甜的糖果', 20],
['好凉凉的桃桃', 15],
['没事就吃的溜溜梅', 5],
['太美的鸡', 100],
['人人果实原味', 99999]]
# 2.创建临时的购物车
temp_cart = {}
while True:
# 3.循环格式化打印商品列表
for i, j in enumerate(goods_list, start=1):
print(f'商品编号: {i}\t商品名: {j[0]}\t商品单价: {j[1]}' )
# 4.获取用户输入的商品编号
goods_num = input('请输入想要购买的商品编号或者输入q结束>>>:').strip()
# 13.如果输入的是q 则修改用户真实购物车并保持
if goods_num == 'q':
# 14.获取用户数据
user_data = load_userinfo(login_state.get('username'))
# 15.取出真正的购物车数据(此处避免原购物车不为空 不能用临时购物车直接替换)
real_cart = user_data.get('shopping_cart')
# 16.取出临时购物车数据判断是否原购物车内就有该商品
for goods_name in temp_cart:
if goods_name in real_cart:
# 17.已存在则修改数量
real_cart[goods_name][0] += temp_cart[goods_name][0]
else:
# 18.不存在则加增
real_cart[goods_name] = temp_cart[goods_name]
# 19.将取出的真正购物车放回原用户信息中
user_data['shopping_cart'] = real_cart
# 20.保存用户信息
dump_userinfo(login_state.get('username'), user_data)
break
# 5.判断编号是否为纯数字
if not goods_num.isdigit():
print('编号格式必须是纯数字')
return
# 6.是纯数字则转为整型
goods_num = int(goods_num)
# 7.判断编号是否在范围内
if goods_num not in range(1, len(goods_list) + 1):
print('编号不存在')
continue
# 8.获取用户想要购买的商品信息
target_goods_list = goods_list[goods_num - 1]
target_goods_name = target_goods_list[0]
target_goods_price = target_goods_list[1]
# 9.获取用户想要购买当前编号商品的数量
target_num = input('请输入想要购买的数量>>>:').strip()
if not target_num.isdigit():
print('商品数量必须是纯数字')
target_num = int(target_num)
# 10.判断刚添加入临时购物车的商品名是否已存在于临时购物车
if target_goods_name not in temp_cart:
# 11.不存在则新增商品信息
temp_cart[target_goods_name] = [target_num, target_goods_price]
else:
# 12.存在则修改数量
temp_cart[target_goods_name][0] += target_num
- 结算购物车功能
# 结算购物车
@wrapper
def settle_cart():
# 1.取出登录用户的信息
user_data = load_userinfo(login_state.get('username'))
# 2.取出购物车
cart = user_data.get('shopping_cart')
# 3.定义总价进行判断
total_money = 0
# 5.计算购物车总价
for goods_num, goods_price in cart.values():
total_money += goods_num * goods_price
# 6.判断余额够不够
balance = user_data.get('balance')
# 7.余额够的话则扣费 并清空购物车
if balance >= total_money:
rest_money = balance - total_money
# 8.将余额存回
user_data['balance'] = rest_money
# 9.清空购物车
user_data['shopping_cart'] = {}
# 10.保存数据
dump_userinfo(login_state.get('username'), user_data)
print(f'结算成功! 一共消费{total_money} 余额{rest_money}')
else:
print('哥哥~钱不够辣~赶快充值哦~')
效果展示
标签:完善,goods,name,项目,cart,购物车,user,path 来源: https://www.cnblogs.com/run-fast-hit-fast-win-fast/p/16084981.html