表示购物车的数据结构

时间:2013-08-07 22:58:13

标签: design-patterns data-structures linked-list

用于表示购物车内容的正确数据结构是什么?

  1. 链接列表
  2. 阵列
  3. 数组列表
  4. 其他东西
  5. 我没有考虑什么是最方便的,即只使用数组,但更多的是最正确的。

    这将是一个非常标准的购物车概念,其中包含以下内容:

    1. 有关购物车的基本元数据,例如小计等
    2. 购物车商品的集合,每个购物商品包含购物车信息的属性,例如数量和价格以及包含对基础商品的访问权限的商品属性
    3. 以下内容也很重要:

      1. 应该能够添加和删除项目
      2. 购物车应该可以通过一个动作清空
      3. 添加/删除项目时应更新元数据的某些部分,例如小计,数量等。

2 个答案:

答案 0 :(得分:2)

  • 数组:我不会真的这样做,因为您必须知道购物车中有多少物品会在手中运行,这将迫使您多次调整/重新初始化阵列。
  • LinkedList (在其实现中不使用Array):我主要会考虑到这一点,特别是它符合您提到的其他要求。
  • 哈希收集:可以使用它但不太适合这种情况,因为不需要通过某个关键元素快速访问篮子的内容。

该行的底部,我只是模拟购物车,因为大多数开发商会订购一个订单项目列表,所以我会有一个购物车类,其中包含项目总数,总价格等的吸气剂并使用链表对cotents进行建模。

当然,如果它是一个因素,你可能会考虑分配,但在大多数情况下,上述应该是绰绰有余。

答案 1 :(得分:0)

购物车的基本CPP计划

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;

struct Item {
    string name;
    int quantity;
    int price;
};

class ShoppingCart {
private:
    vector<Item> item;
    int total_price;
public:
    ShoppingCart();
    void addItem(string name, int quantity, int price);
    void removeItem(string name, int quantity);
    int getTotal();
};

ShoppingCart::ShoppingCart() {
    cout << "Creating a new shopping cart" << endl;
    total_price = 0;
}

void ShoppingCart::addItem(string name, int quantity, int price) {
    for (int i = 0; i < item.size(); i++) {
        if (item[i].name == name) {
            item[i].quantity += quantity;
            return;
        }
    }

    Item temp;
    temp.name = name;
    temp.quantity = quantity;
    temp.price = price;
    item.push_back(temp);
}

void ShoppingCart::removeItem(string name, int quantity) {
    for (int i = 0; i < item.size(); i++) {
        if (item[i].name == name) {
            if (item[i].quantity >= quantity) {
                item[i].quantity -= quantity;
                return;
            }
            cout << "Not enough items present in the cart to be removed" << endl;
            return;
        }
    }
    cout << "This item is not present in the cart" << endl;
}

int ShoppingCart::getTotal() {
    total_price = 0;
    for (int i = 0; i < item.size(); i++) {
        total_price += item[i].quantity * item[i].price;
    }
    return total_price;
}

int main() {
    ShoppingCart cart;
    cart.addItem("Maggi", 10, 5);
    cart.addItem("Biryani", 2, 15);
    cart.addItem("Ketchup", 1, 5);
    cout << "Total cost: " << cart.getTotal() << endl;
    cart.addItem("Football", 2, 15);
    cart.removeItem("Maggi", 4);
    cart.removeItem("Ketchup", 2);
    cout << cart.getTotal() << endl;
    cart.addItem("Candy", 15, 2);
    cart.removeItem("Bat", 1);
    cout << "Total cost: " << cart.getTotal() << endl;
}