项目练习

项目说明

    用户数据采用json格式存储到文件目录db下 一个用户一个单独的文件
     数据格式 {"name":"jason","pwd":123} 
         # ps:文件名可以直接用用户名便于校验
     用户注册时给每个用户添加两个默认的键值对(账户余额 购物车)
      {"balance":15000,"shop_car":{}}
     添加购物车功能 商品列表可以自定义或者采用下列格式
            good_list = [
                 ['挂壁面',3],
                 ['印度飞饼', 22],
                 ['极品木瓜', 666],
                 ['土耳其土豆', 999],
                 ['伊拉克拌面', 1000],
                 ['董卓戏张飞公仔', 2000],
                 ['仿真玩偶', 10000],
            ]
      用户可以反复添加商品,在购物车中记录数量
        {'极品木瓜':[个数,单价]}
     结算购物车
      获取用户购物车中所有的商品计算总价并结算即可
  针对添加购物车和结算只有登录的用户才可以执行

技术点

# 1. 装饰器+全局变量(小字典)实现登录校验
is_login = {
    'username': ''  # 一旦用户登录存储用户名 这样方便后续获取用户详细信息
}

# 2. 购物车数据结构:{'shop_car':{'印度飞饼':[2,22],'仿真玩偶':[10,10000]}},先将用户数据取出,添加修改好shop_car的值,再覆盖写入

# 3. 功能字典 func_dict 取代繁琐的分支结构
func_dict = {
    '1': register,
    '2': login,
    '3': add_shop_car,
    '4': pay_shop_car
}

# 4. ensure_ascii=False 参数 写入非acsii字符
with open(user_path, 'w', encoding='utf8') as f:
    json.dump(user_data_dict, f, ensure_ascii=False)

# 5. 在添加购物车的函数内使用 临时字典 将用户添加购物车的信息存入临时字典 只有在退出时才写入到文件 尽可能减少文件读写的次数
临时字典数据结构:
temp_shop_car = {'印度飞饼':[10,22],'仿真玩偶':[2,10000]}
temp_shop_car = {'商品名':[数量,价格],... ,...}

# 5.1 核心代码:
temp_shop_car = {}  # 构造临时小字典存储商品信息
good_list = [
            ['挂壁面', 3],
            ['印度飞饼', 22],
            ['极品木瓜', 666],
            ['土耳其土豆', 999],
            ['伊拉克拌面', 1000],
            ['董卓戏张飞公仔', 2000],
            ['仿真玩偶', 10000]
        ]
choice_num = input('请输入您想要购买的商品编号(q)>>>:').strip()
target_good_list = good_list[choice_num]
good_num = input(f'请输入您想要购买的{target_good_list[0]}的商品数量>>>:').strip()
good_name = target_good_list[0]
'''以下临时字典添加购物车 核心代码'''
if good_name in temp_shop_car:  # 如果商品 已经在临时字典 存在
     temp_shop_car.get(good_name)[0] += good_num  # 那就在临时字典里 添加数量
else:
     temp_shop_car[good_name] = [good_num, target_good_list[1]]  # 如果不存在 就新增一个商品键值对

代码实现:

链接:https://pan.baidu.com/s/1RxH822a1qEj49lxpjjoHgg
提取码:s7a4

posted @ 2022-10-23 22:21  passion2021  阅读(35)  评论(0编辑  收藏  举报