Java教程

购物车项目(待完善)

本文主要是介绍购物车项目(待完善),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

启动文件
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

  1. 导入模块
import os
import json
  1. 定义一个全局字典用于存放用户登录成功后的用户名
login_state = {'username': None}
  1. 根据当前项目位置创建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)
  1. 获取文件中用户数据
# 传入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)
  1. 向文件中保存数据
# 传入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)
  1. 用户注册
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} 注册成功')
  1. 用户登录
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('用户名或密码错误')
  1. 登录认证装饰器 用于认证添加购物车和结算购物车功能时是否已经登录
# 登录认证装饰器
def wrapper(func):
    def inner(*args, **kwargs):
        if login_state.get('username'):
            res = func(*args, **kwargs)
            return res
        else:
            print('还没有登录哦')
            login()
    return inner
  1. 添加购物车功能
# 添加到购物车
@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
  1. 结算购物车功能
# 结算购物车
@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('哥哥~钱不够辣~赶快充值哦~')

效果展示

这篇关于购物车项目(待完善)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!