71 lines
1.8 KiB
C++
71 lines
1.8 KiB
C++
#ifndef MALL_SHOPPING_CART_HPP
|
||
#define MALL_SHOPPING_CART_HPP
|
||
|
||
#include "product.hpp"
|
||
#include <vector>
|
||
#include <utility>
|
||
|
||
/**
|
||
* @brief 购物车条目,记录商品和购买数量。
|
||
*/
|
||
struct CartItem {
|
||
Product product; ///< 商品副本
|
||
int quantity = 0; ///< 购买数量
|
||
|
||
/** @brief 小计金额 = 单价 × 数量 */
|
||
double subtotal() const noexcept { return product.getPrice() * quantity; }
|
||
};
|
||
|
||
/**
|
||
* @brief 购物车类,管理用户选中的商品。
|
||
*/
|
||
class ShoppingCart {
|
||
public:
|
||
ShoppingCart() = default;
|
||
|
||
/**
|
||
* @brief 向购物车添加商品(若已存在则累加数量)。
|
||
* @param product 商品
|
||
* @param quantity 数量
|
||
*/
|
||
void addItem(const Product& product, int quantity);
|
||
|
||
/**
|
||
* @brief 从购物车移除指定商品(完全移除)。
|
||
* @param productId 商品编号
|
||
* @return true 移除成功,false 未找到
|
||
*/
|
||
bool removeItem(uint64_t productId);
|
||
|
||
/**
|
||
* @brief 修改某商品的数量。
|
||
* @param productId 商品编号
|
||
* @param quantity 新数量(≤0 则移除)
|
||
* @return true 修改成功
|
||
*/
|
||
bool updateQuantity(uint64_t productId, int quantity);
|
||
|
||
/** @brief 清空购物车 */
|
||
void clear();
|
||
|
||
/** @brief 获取所有条目 */
|
||
const std::vector<CartItem>& getItems() const noexcept { return items_; }
|
||
|
||
/**
|
||
* @brief 计算购物车总金额。
|
||
* @return 所有条目小计之和
|
||
*/
|
||
double totalPrice() const;
|
||
|
||
/** @brief 购物车是否为空 */
|
||
bool isEmpty() const noexcept { return items_.empty(); }
|
||
|
||
/** @brief 条目数量 */
|
||
size_t itemCount() const noexcept { return items_.size(); }
|
||
|
||
private:
|
||
std::vector<CartItem> items_; ///< 购物车条目列表
|
||
};
|
||
|
||
#endif // MALL_SHOPPING_CART_HPP
|