购物车项目(待完善)
2022/4/1 6:19:54
本文主要是介绍购物车项目(待完善),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
启动文件
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('哥哥~钱不够辣~赶快充值哦~')
效果展示
这篇关于购物车项目(待完善)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略