购物车的数据结构问题

xjpcj 2009-08-31 09:45:07
小弟想做个购物网,可是在购物车的结构设计上碰到了麻烦。望各位大侠相助!
public class ShopCart {
private HashMap<String, Product> hashMap;\\\\\\\\\\\\商品编号,商品类的hashMap

public HashMap<String, Product> getHashMap() {
return hashMap;
}

public void setHashMap(HashMap<String, Product> hashMap) {
this.hashMap = hashMap;
}

@SuppressWarnings("unchecked")
public ShopCart(){
hashMap = new HashMap();
}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\其他代码省略。

在购物网中 ,用户如果要购买的商品数量大于1以上,那使用hashMap并没有办法表示,如果在Product类中增加一个数量的属性那缺陷就太大了,最好是有什么数据结构能直接表示的?小弟觉得在ShopCart里面弄个内部类比较好。不知道做过购物网的朋友是怎么设计它的?
...全文
462 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcj_up 2009-08-31
  • 打赏
  • 举报
回复

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class ShopCart {

private Map items = new HashMap();


public void add(OrderLine line) {
Integer product_id = line.getProduct().getId();
OrderLine orderLine = (OrderLine) items.get(product_id);
if (orderLine == null) {
items.put(product_id, line);
} else {
orderLine.setAmount(orderLine.getAmount() + line.getAmount());
items.put(product_id, orderLine);
}
}



public void remove(OrderLine line) {
Integer product_id = line.getProduct().getId();
items.remove(product_id);
}

public void remove(Integer id) {
items.remove(id);
}


public void modify(OrderLine line) {
Integer product_id = line.getProduct().getId();
items.put(product_id, line);
}

public double getTotal() {
double total = 0;
Set set = items.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Integer id = (Integer) it.next();
OrderLine line = (OrderLine) items.get(id);
total += line.getProduct().getBasePrice() * line.getAmount();
}
return total;
}


public int getCount() {
int count = 0;
Set set = items.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Integer id = (Integer) it.next();
OrderLine line = (OrderLine) items.get(id);
count += line.getAmount();
}
return count;
}


public int getSize() {
return items.size();
}


public Order getOrder() {
Order order = new Order();
Set set = new HashSet();
Collection list = items.values();
set.addAll(list);
order.setOrderlines(set);
return order;
}


public void clearCart() {
items.clear();
}

public Map getItems() {
return items;
}

public void setItems(Map items) {
this.items = items;
}

}
tuyan123 2009-08-31
  • 打赏
  • 举报
回复
package com.shopping.impl;

import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.shopping.cart.Cart;
import com.shopping.pojo.ProductItemVO;
import com.shopping.pojo.ProductVO;
//购物车
public class CartImpl implements Cart {

private Map<String, ProductItemVO> cart = Collections.synchronizedMap(new HashMap<String, ProductItemVO>());

public void addItem(ProductVO product) {

String key = product.getPpid();
ProductItemVO item = cart.get(key);
if (item == null){
item = new ProductItemVO();
item.setProduct(product);
item.setQuantity(1);
cart.put(key, item);
}else{
item.incrementQuantity();
}
}

public void incrementQuantity(String key){
ProductItemVO item = cart.get(key);
item.incrementQuantity();
}

public void setQuantity(String key, int quantity){
ProductItemVO item = cart.get(key);
item.setQuantity(quantity);
}

public void clear() {
cart.clear();
}

public void removeItem(String index) {
cart.remove(index);
}

public double getTotalMoney(){
double totalMoney = 0.0;
for (Iterator<ProductItemVO> iter = cart.values().iterator(); iter.hasNext(); ){
ProductItemVO item = iter.next();
totalMoney = totalMoney + item.getTotalPrice();
}
return totalMoney;
}

public Map<String, ProductItemVO> getCart() {
return cart;
}

public int getAmount() {
// TODO Auto-generated method stub
int amount = 0;
for (Iterator<ProductItemVO> iter = cart.values().iterator(); iter.hasNext(); ){

ProductItemVO item = iter.next();

amount = amount + item.getQuantity();
}

return amount;
}

public boolean hasItem(String key) {
// TODO Auto-generated method stub
return cart.containsKey(key);
}
}


//商品枚举
package com.shopping.pojo;

import java.io.Serializable;

public class ProductItemVO implements Serializable{

/**
* 此商品枚举中的商品
*/
private ProductVO product;

/**
* 此商品枚举中的相应商品的数量
*/
private int quantity;

public ProductVO getProduct() {
return product;
}
public void setProduct(ProductVO product) {
this.product = product;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
/**
* 商品数量的增加
*/
public void incrementQuantity(){
quantity++;
}
/**
* 商品价格
* @return
*/
public double getTotalPrice() {
if (product != null) {
return product.getPrice() * quantity;
}else {
return 0;
}
}
}

ouwarmth 2009-08-31
  • 打赏
  • 举报
回复
之前做过,但我用的数据结构是:HashMap <int, int>。第一个int类型储存的是商品的Id号,唯一的;第二个int类型可以用来储存对应商品的数量。这样就可以实现楼主想要的结果了。
money8899 2009-08-31
  • 打赏
  • 举报
回复
google
lcj_up 2009-08-31
  • 打赏
  • 举报
回复
是的。。。。
xjpcj 2009-08-31
  • 打赏
  • 举报
回复
二楼的朋友意见挺好,四楼的朋友OrderLine类是不是包含了商品类和数量的属性?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧