网购商城 普通购物车功能的实现

购物车的设计思想如下:

  1. 购物车中放入的信息是用户在完成生成订单前添加的商品信息,一般 购物商城中 对于购物车中的信息 大多数是存放在会话session中 并未牵扯到数据库 
  2. 购物车中显示的是一条或多条商品条目,而商品条目中一般包括 :商品的基本信息 (商品名称 商品的单价),购买数量 ,每个商品条目的价钱小计,最后 往往有购物车中所有商品的价格总计。
  3.  经过上面的分析 我们可以定义一个购物车条目类 即CartItem 在该类即对购物车中每个商品条目的封装 实现了商品信息,购买数量,价格总计的定义。其中totalPrice为只读属性 因为该属性值可以通过内部计算获取
    public class CartItem {
    	private FoodInfo finfo;
    	private int iCount;
    	private float totalPrice;
    	public FoodInfo getFinfo() {
    		return finfo;
    	}
    	public void setFinfo(FoodInfo finfo) {
    		this.finfo = finfo;
    	}
    	public int getiCount() {
    		return iCount;
    	}
    	public void setiCount(int iCount) {
    		this.iCount = iCount;
    	}
    	public float getTotalPrice() {
    		this.totalPrice=this.iCount*this.finfo.getFood_price();
    		return totalPrice;
    	}
    	public CartItem(FoodInfo finfo, int iCount) {
    		super();
    		this.finfo = finfo;
    		this.iCount = iCount;
    	}
    	
    }
    
     
  4. 因为 本次购物车 并未牵扯到数据库 所以 在购物车的实现我们直接在业务逻辑层中来完成。cartAdd方法用来实现商品条目添加,首先判断购物车中是否存在该商品 如果有更新即可否则加入cartMap中;getCartMap()方法用来读取购物车中信息;cartUpd()方法用来更新修改购物车中的信息;cartDel用来删除购物车中的某一个商品;cartClear()用来实现 清空购物车
    public class CartBizImpl implements CartBiz {
    //声明定义Map对象 cartMap用来存放 商品条目cartItem。其中key为商品编号 value为cartItem
    	private HashMap<Integer, CartItem> cartMap=new HashMap<Integer, CartItem>();
    	public boolean cartAdd(CartItem ci) {
    		if(cartMap.containsKey(ci.getFinfo().getFood_id())){
    			CartItem cOld=cartMap.get(ci.getFinfo().getFood_id());
    			cOld.setiCount(ci.getiCount()+cOld.getiCount());
    		}
    		else{
    			cartMap.put(ci.getFinfo().getFood_id(), ci);
    		}
    		return true;
    	}
    
    	public HashMap<Integer, CartItem> getCartMap() {
    		return this.cartMap;
    	}
    
    	public boolean cartUpd(CartItem ci) {
    		cartMap.put(ci.getFinfo().getFood_id(), ci);
    		return true;
    	}
    
    	public boolean cartDel(int foodid) {
    		cartMap.remove(foodid);
    		return true;
    	}
    
    	public boolean cartClear() {
    		cartMap.clear();
    		return true;
    	}
    	public CartItem get(int foodId){
    		return cartMap.get(foodId);
    	}
    
    }
    
  5.  在购物车的servlet中 来具体实现购物车的功能,因为购物车业务类在每次声明创建之后 完成了本次servlet它的生命周期 即结束 所以 我们将其放入session中 已达到 该业务类 能够在 整个会话期间使用
    CartItem ci=new CartItem(fi,iCount);
    		boolean flag=false;
    		if(session.getAttribute("shopCart")==null){
    			CartBiz cb=new CartBizImpl();
    			flag=cb.cartAdd(ci);
    			session.setAttribute("shopCart", cb);
    		}
    		else{
    			CartBiz cb=(CartBiz)session.getAttribute("shopCart");
    			flag=cb.cartAdd(ci);
    			session.setAttribute("shopCart", cb);
    		}
     

以上只是简单的给出了 购物车商品信息的添加 其更新功能此处就不加 说明了

猜你喜欢

转载自hxlzpnyist.iteye.com/blog/1506649