• 购物车


    一个购物车有两个实体:

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

    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");
        }
  • 相关阅读:
    访问HTML可以,访问PHPfile not found
    查看php-fpm的进程和端口号
    nginx调用PHP有sock方式和端口方式
    Linux创建用户、设置密码、修改用户、删除用户命令
    CentOS7 添加FTP用户并设置权限
    PHP使用文件锁解决高并发问题示例
    Huge CSV and XML Files in Python, Error: field larger than field limit (131072)
    怎样查询房产证是否抵押
    Python中模拟enum枚举类型的5种方法分享
    git for windows+TortoiseGit客户端的使用
  • 原文地址:https://www.cnblogs.com/learnjfm/p/7003124.html
Copyright © 2020-2023  润新知