购物车模块实现(一)

* 学商城项目有一段时间了,一直想写一篇博客,但是找不到时间,其实是懒癌患者。今天做完了商城项目的购物车模块,还有点时间,出来献丑了,还请不当的地方大家多多指正,我一定改正。*

第一步:我们来分析一下购物车。

JAVA购物车完整代码_对象


1.1 购物项对象

1.1.1 商品信息(商品图片和商品价格)

购买数量(判断是否是同一种商品,如果是,商品的数量加 1,如果不是,添加购物项)

小计(购物数量乘以价格,自动计算)

public class CartItem {
    private Product product;  //购物项中的商品信息
    private int count ;       //购买数量
    private double subtotal;  //小计
    public Product getProduct() {
        return product;
    }
    public void setProduct(Product product) {
        this.product = product;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    //小计是自动计算出来的
    public double getSubtotal() {
        return count * product.getShop_price();
    }
}

1.2 购物车对象
包括购物车的属性和功能
属性包括购物车中含有购物项,总计
功能包括清空购物车,添加购物项,清除购物项

public class Cart implements Serializable {
//购物车的属性
    //购物项的集合
    private Map<Integer,CartItem> map = new LinkedHashMap<Integer, CartItem>();
    //将map的value化为单列集合,遍历简单
    //Cart对象中有一个CartItems的属性
    public Collection<CartItem> getCartItems(){
        return map.values();
    }

    //购物总计
    private double total;
    public double getTotal() {
        return total;
    }
//购物车的功能

//    1.将购物项添加到购物车
    public void addCart(CartItem cartItem){
        /*
         * 首先判断购物车中是否含有该购物项
         * 如果存在,将count加1,总计
         * 如果不存在,将购物项加到购物车中,总计
         *
         */
        Integer pid = cartItem.getProduct().getPid();
        if(map.containsKey(pid)){
            CartItem _cartItem = map.get(pid);//获得原来的购物项
            _cartItem.setCount(_cartItem.getCount()+cartItem.getCount());
        }else {
        map.put(pid,cartItem ); 
        }
        total += cartItem.getSubtotal();
    }



    //    2.从购物车移除购物项
    public void removeCart(Integer pid){
    //将购物项从购物车中移除
        CartItem cartItem = map.remove(pid);
    //将总计减去购物项的
        total -= cartItem.getSubtotal();
        }

    //    3.清空购物车
     public void clearCart(){
    //将所有的购物项清空
         map.clear();
    //总计设置为0
         total =0;
     }
}

1.3购物车的Action

public class CartAction extends ActionSupport{
    //接收count
    private Integer count;
    //接收pid
    private Integer pid;
    //注入productService
    private ProductService productService;

    public void setProductService(ProductService productService) {
        this.productService = productService;
    }
    public void setCount(Integer count) {
            this.count = count;
        }
        public void setPid(Integer pid) {
            this.pid = pid;
        }
        //将购物项添加到购物车
    public String addCart(){
        //封装一个cartItem对象
        CartItem cartItem = new CartItem();
        cartItem.setCount(count);
        //根据商品id获取商品
        Product product = productService.findByPid(pid);
        //设置商品
        cartItem.setProduct(product);
        //将购物项添加到购物车
        Cart cart = getCart();
        cart.addCart(cartItem);
        return "addCart";
    }
    //从session中获得购物车
    private Cart getCart() {
        Cart cart = (Cart) ServletActionContext.getRequest().getSession()
                .getAttribute("cart");
        if (cart == null) {
            cart = new Cart();
            ServletActionContext.getRequest().getSession()
                    .setAttribute("cart", cart);
        }
        return cart;
    }
    // 清空购物车的执行的方法:
    public String clearCart(){
        // 获得购物车对象.
        Cart cart = getCart();
        // 调用购物车中清空方法.
        cart.clearCart();
        return "clearCart";
        }
    //购物车中移除购物项
    public String removeCart(){
        // 获得购物车对象.
        Cart cart = getCart();
        //调用购物车的清除功能
        cart.removeCart(pid);
        return "removeCart";
    }
    //点击我的购物车,完成页面跳转
    public String myCart(){
        return "myCart";
    }
}

第一篇是简单的代码实现,第二篇写一点心得以及涉及到的一些我不懂的巧妙方法,毕竟字数多了,人会产生视觉疲劳。