• 商品加入购物车表结构设计


    如图所示:

    Product(绿色框)是每件商品的信息,对应数据库中的product每一项,不是重点

    CartItem(红色框)是每一个购物项,也就是你点击加入购物车的所有信息,包括Product,还有购买数量,和购买这个商品的总价格 重点

    Cart(蓝色框)是购物车,也是你本次购买所有商品的总的信息,包括CartItem,和所有购物项的总金额 重点

    CartItem实体类:

    public class CartItem {//购物项
    
        private Product product;//这个购物项中的商品信息
        private int buyNum;//购买数量
        private double subtotal;//总价格
        
        public Product getProduct() {
            return product;
        }
        public void setProduct(Product product) {
            this.product = product;
        }
        public int getBuyNum() {
            return buyNum;
        }
        public void setBuyNum(int buyNum) {
            this.buyNum = buyNum;
        }
        public double getSubtotal() {
            return subtotal;
        }
        public void setSubtotal(double subtotal) {
            this.subtotal = subtotal;
        }
        
    }

    Cart实体类:

    import java.util.HashMap;
    import java.util.Map;
    
    public class Cart {//购物车
    
        //该购物车中存储的n个购物项  用Map集合是为了之后业务操作
        //Map中的key是String类型,存放的是购物项中商品的pid(主键)为了之后多次加入该商品方便累加
        private Map<String,CartItem> cartItems = new HashMap<String,CartItem>();
        
        //n个购物项的总计
        private double total;
    
        public Map<String, CartItem> getCartItems() {
            return cartItems;
        }
    
        public void setCartItems(Map<String, CartItem> cartItems) {
            this.cartItems = cartItems;
        }
    
        public double getTotal() {
            return total;
        }
    
        public void setTotal(double total) {
            this.total = total;
        }
    
    }

    商品信息页面:

    <script type="text/javascript">
        function addCart(){
            //获得购买的商品的数量
            var buyNum = $("#buyNum").val();
            location.href="${pageContext.request.contextPath}/product?method=addProductToCart&pid=${product.pid}&buyNum="+buyNum;
        }
    </script>
    <div class="col-md-6">
            <div>
                <strong>${product.pname}</strong>
            </div>
            <div
                style="border-bottom: 1px dotted #dddddd;  350px; margin: 10px 0 10px 0;">
                <div>编号:${product.pid}</div>
            </div>
    
            <div style="margin: 10px 0 10px 0;">
                亿家价: <strong style="color: #ef0101;">¥:${product.shop_price}元/份</strong> 参 考 价:
                <del>¥${product.market_price}元/份</del>
            </div>
    
            <div style="margin: 10px 0 10px 0;">
                促销: <a target="_blank" title="限时抢购 (2014-07-30 ~ 2015-01-01)"
                    style="background-color: #f07373;">限时抢购</a>
            </div>
    
            <div
                style="padding: 10px; border: 1px solid #e7dbb1;  330px; margin: 15px 0 10px 0;; background-color: #fffee6;">
                <div style="margin: 5px 0 10px 0;">白色</div>
    
                <div
                    style="border-bottom: 1px solid #faeac7; margin-top: 20px; padding-left: 10px;">
                    购买数量: 
                    <input id="buyNum" name="buyNum" value="1" maxlength="4" size="10" type="text">
                </div>
    
                <div style="margin: 20px 0 10px 0;; text-align: center;">
                    <a href="javascript:void(0);" onclick="addCart()">
                     <input style="background: url('./images/product.gif') no-repeat scroll 0 -600px rgba(0, 0, 0, 0); height: 36px;  127px;"
                        value="加入购物车" type="button">
                    </a> &nbsp;收藏商品
                </div>
            </div>
            <div>
                <a href="${pageContext.request.contextPath}/product?method=productList&cid=${cid }&currentPage=${currentPage}">返回列表页面</a>
            </div>
        </div>
    </div>

    点击加入购物车的逻辑:

    public void addProductToCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        HttpSession session = request.getSession();
    
        ProductService service = new ProductService();
    
    
        //获得要放到购物车的商品的pid
        String pid = request.getParameter("pid");
        //获得该商品的购买数量
        int buyNum = Integer.parseInt(request.getParameter("buyNum"));
    
        //获得product对象
        Product product = service.findProductByPid(pid);
        //计算小计
        double subtotal = product.getShop_price()*buyNum;
        //封装CartItem
        CartItem item = new CartItem();
        item.setProduct(product);
        item.setBuyNum(buyNum);
        item.setSubtotal(subtotal);
    
        //获得购物车---判断是否在session中已经存在购物车
        Cart cart = (Cart) session.getAttribute("cart");
        if(cart==null){
            cart = new Cart();
        }
    
        //将购物项放到车中---key是pid
        //先判断购物车中是否已将包含此购物项了 ----- 判断key是否已经存在
        //如果购物车中已经存在该商品----将现在买的数量与原有的数量进行相加操作
        Map<String, CartItem> cartItems = cart.getCartItems();
    
        double newsubtotal = 0.0;
    
        if(cartItems.containsKey(pid)){
            //取出原有商品的数量
            CartItem cartItem = cartItems.get(pid);
            int oldBuyNum = cartItem.getBuyNum();
            oldBuyNum+=buyNum;
            cartItem.setBuyNum(oldBuyNum);
            cart.setCartItems(cartItems);
            //修改小计
            //原来该商品的小计
            double oldsubtotal = cartItem.getSubtotal();
            //新买的商品的小计
            newsubtotal = buyNum*product.getShop_price();
            cartItem.setSubtotal(oldsubtotal+newsubtotal);
    
        }else{
            //如果车中没有该商品
            cart.getCartItems().put(product.getPid(), item);
            newsubtotal = buyNum*product.getShop_price();
        }
    
        //计算总计
        double total = cart.getTotal()+newsubtotal;
        cart.setTotal(total);
    
    
        //将车再次访问session
        session.setAttribute("cart", cart);
    
        //直接跳转到购物车页面
        response.sendRedirect(request.getContextPath()+"/cart.jsp");
    }
  • 相关阅读:
    Scrum Meeting Beta
    Scrum Meeting Beta
    Scrum Meeting Beta
    Scrum Meeting Beta
    《人月神话》读后感
    【最后的总结】我们的Sprint3冲刺——闹钟的添加和管理(刘铸辉,何晓楠)
    【软件结课】软件工程课的评价
    【软件结课】软件工程课的收获
    springt2第二次冲刺计划表
    给出一个 m*n 的二维数组(元素可为正可为负),求该二维数组的一个子数组,且此子数组中所有元素的和最大,并输出该数组的和。
  • 原文地址:https://www.cnblogs.com/ms-grf/p/7209643.html
Copyright © 2020-2023  润新知