首页 > 代码库 > 购物车

购物车

一个购物车有两个实体:

  一个是购物项,一个是购物车
  购物车里面有购物项的集合,因为一个购物车应该包括若干购物项
购物项包括:商品,数量,总价

class CartItem {
    //商品
    private Product product;
    //数量
    private Integer count;
    //总价
    private Double subtotal;
    public Product getProduct() {
        return product;
    }
    public void setProduct(Product product) {
        this.product = product;
    }
    public Integer getCount() {
        return count;
    }
    public void setCount(Integer count) {
        this.count = count;
    }
    //每个购物项的总价通过数量和单价算出
    public Double getSubtotal() {
        return count * product.getShop_price();
    }
}

购物车应该包括:总价和购物项的集合

  购物项的集合用map集合:id作为key,购物项作为value
  此外,购物车还提供将购物项添加到购物车 的方法,和从购物车移除购物项的方法,清空购物车的方法

class Cart {
    //总计
    private Double total = 0d;
    //购物的集合
    //商品id作为map的key,购物项作为map的value
    Map<String,CartItem> map = new LinkedHashMap<>();
    public Double getTotal() {
        return total;
    }
    public void setTotal(Double total) {
        this.total = total;
    }
    public Map<String, CartItem> getMap() {
        return map;
    }
    public void setMap(Map<String, CartItem> map) {
        this.map = map;
    }
    //清空购物车的方法
    public void clearCart() {
        //清空map集合中的数据
        map.clear();
        //设置总价为0
        total = 0d;
    }
    //从购物车中移除其中某个购物项
    public void removeCartItem(String pid){
        //删除对应id的购物项
        CartItem cartItem = map.remove(pid);
        //修改总计的价格
        total -= cartItem.getSubtotal();
    }
    //将购物项添加到购物车的方法
    public void addCart(CartItem cartItem) {
        //首先判断在原来的购物车中是否包含这个购物项
        //获得这个购物项的pid
        String pid = cartItem.getProduct().getPid();
        if(map.containsKey(pid)) {
            //购物车中有这个购物项
            //获得原有的购物项
            CartItem cartItem1 = map.get(pid);
            //在原有的数量上添加
            cartItem1.setCount(cartItem1.getCount()+cartItem.getCount());
        }else {
            //购物车中没有这个购物项
            map.put(pid,cartItem);
        }    
    }
}

写完了购物车的实体类之后就是购物车的servlet

  在这个servlet中提供添加到购物车,清空购物车,和删除其中一个购物项的方法

//首先是添加到购物车的方法
    //因为向上抽取了一个baseServlet,所有后面的servlet全部继承baseServlet,然后直接写完成逻辑的方法
    public String addCart(HttpServletRequest request,HttpServletResponse response){
        //在这里省略service层和dao层
        //首先接收jsp中传过来的pid
        String pid = request.getParameter("pid");
        //获取表单中传递过来的数量
        Integer count = Integer.parseInt(request.getParameter("count"));
        //把数据封装到CartItem中
        //调用service层获取对应id的product
        ProductService ps = new ProductServiceImpl();
        Product product = ps.findById(pid);
        //创建CartItem对象,开始封装数据
        CartItem cartItem = new CartItem();
        //封装商品数量
        cartItem .setCount(count);
        //封装商品
        cartItem.setProduct(product);
        //从session域对象中拿购物车
        Cart cart = (Cart)request.getSession.getAttribute("cart");
        //判断有没有购物车存在
        if(cart == null) {
            //如果没有购物车就创建购物车
            cart = new Cart();
            //然后保存到session域中
            request.getSession.setAttribute("cart",cart);
        }
        //如果从session域中拿到了cart
        //调用cart的将购物项保存到购物车的方法
        cart.addCart(cartItem);
        //重定向
        response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
        return null;
    }
//一个清空购物车的方法
    public String clearCart(HttpServletRequest request,HttpServletResponse response) {
        //获得购物车对象
        Cart cart = (Cart)request.getSession.getAttribute("cart");
        if(cart == null) {
            //如果没有购物车就创建购物车
            cart = new Cart();
            //然后保存到session域中
            request.getSession.setAttribute("cart",cart);
        }
        //调用购物车的清空购物车的方法
        cart.clearCart();
        //重定向
        response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
        return null;
    }
//删除购物车中的一个购物项
    public String removeCart(HttpServletRequest request,HttpServletResponse response) {
        //获得购物车对象
        Cart cart = (Cart)request.getSession.getAttribute("cart");
        if(cart == null) {
            //如果没有购物车就创建购物车
            cart = new Cart();
            //然后保存到session域中
            request.getSession.setAttribute("cart",cart);
        }
        //获得删除传递过来的pid
        String pid = request.getParameter("pid");
        cart.removeCartItem(pid);
        //重定向
        response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
    }

 

购物车