商苑面馆:Java命令行版之 CartDao

来自CloudWiki
跳转至: 导航搜索

Dao层

Java8-1.png


实现步骤

建立接口CartDao

在包dao下建立抽象接口CartDao

package dao;

import entity.*;
public interface CartDao {
	
	  public void addFood(Food f1, Integer num);//添加商品
	 
	  public void delFood(Food g);//删除商品
	  
	  public void queryFood();//查询购物车内已放商品
	  
	  //public Integer hasFood(Food g);//查询购物车内是否已有某件商品
	 
	  //public void modifyFood(Food g,Integer num);//修改购物车内该种商品的数量

	
	
}

建立接口的实现类

接口实现类可以用多种方式实现,ArrayList,LinkedList, MySQL等

这里我们用HashMap实现

接口实现类CartDaoMap

package dao;

import java.util.*;

import entity.Food;
import entity.Noodle;
public class CartDaoMap implements CartDao {
	
    private HashMap<Food,Integer> f ;
	
    public CartDaoMap(){
    	//初始化购物车
    	this.f= new HashMap<>();
      	
    }

   
    
   
    public static void main(String[] args) {            
        
        
    }

}

添加商品方法:AddFood()

 /**
	   * 向购物车中添加商品
	   * @param g 向购物车中添加商品
	   * @return 值为空
	   */
    public void addFood(Food g,Integer n){
    	
	    this.f.put(g, n);  		
	  	
   }
    
   

删除商品方法:DelFood()

 /**
	   * 向购物车中删除商品
	   * @param Food 向购物车中删除商品
	   * @return 值为空
	   */
   public void delFood(Food g){
	   //将数组中myFood条目对应的商品数量减为0	   
	   this.f.remove(g);
   }
   

查询商品方法:query()

/**
	   * 遍历查询购物车中的商品
	   * @param 值为空
	   * @return 值为空
	   */
    public void queryFood(){
    	
    	String s =this.toString();//调用本类的toString方法
	System.out.println(s);
		
    }
   
    /**
	   * 返回该类的字符串形式
	   * @return 返回该类的字符串形式
	   */
    @Override
   public String toString() {
    	 
		 String s="";
		 s +="购物车商品明细:\r\n";
		 //显示所有书籍    	
	     Set<Food> keys = f.keySet();
	     s += "***********************\r\n";
		 //遍历keyset,通过map.get(key)方法获得value的值
		 for(Food key : keys){
			s +=key.toString() + "\t" +"选中数量:\t"+ f.get(key)+"\r\n";
		}	
		return s;
 	}

判断商品是否在购物车内:hasFood()

/**
	   * 查询购物车中的商品
	   * @param myFood 带查询的商品
	   * @return 该商品的数量
	   */
    public Integer hasFood(Food g){
    	// 遍历所有的书籍信息
    	
    	//if(f.containsKey(g))
    		//return f.get(g);
    	Set<Food> keys = f.keySet();
		
	//遍历keyset,通过map.get(key)方法获得value的值
	for (Food key : keys){
		if(key.getName().equals(g.getName())){
			return f.get(key);
		}
	}	
    	return 0;
    }

修改购物车内商品数量

/**
	   * 修改购物车中商品的数量
	   * @param g待修改的商品
	   * @param n 该商品要增加或减少的数量
	   * @return 布尔值,表明是否修改成功
	   */
    
    /**
	   * 修改购物车中商品的数量
	   * @param g待修改的商品
	   * @param n 该商品要增加或减少的数量
	   * @return 布尔值,表明是否修改成功
	   */
    
    public void modifyFood(Food g,Integer n){
    	//修改某种商品在购物车中的数目
    	Integer num=0;//用num来表示购物车中商品g的数量
    	System.out.println("n="+n);
    	if(this.hasFood(g)==0){//如果购物车中没有,num暂时为0
    		num =0;
    	}else {//如果购物车中有,获得它现在的数量
    		Set<Food> keys = f.keySet();
    		for (Food key : keys){
    			if(key.getName().equals(g.getName())){
    				num = f.get(key);
    			}
    		}	    		
    	}
    	System.out.println("num="+num);
    	num += n;
    	if(num==0){//如果库存数量为0,就直接删除
    		f.remove(g);
    	}else{//如果库存数量不为0,仅仅修改它的数数量
    	    f.remove(g);
    	    f.put(g,num);
    	}
    	
    }

编写测试代码

在CartDaoMap类的main方法中编写测试代码:

 public static void main(String[] args) {
		    	 
    	// TODO Auto-generated method stub
    	 
    	CartDao  f = new CartDaoMap();//用数组列表f初始化食物仓库foodset
    	
        //查看购物车
    	System.out.println("查看购物车");
        f.queryFood();//调用toString方法
        
        //向购物车添加商品
        Food f3 = new Noodle("刀削面",10.0,5,"微辣");
        System.out.println("购买商品"+f3.getName());        
        f.addFood(f3, 1);      
        f.queryFood(); //查看购物车
        
        //取消购买
        System.out.println("取消购买");
        f.delFood(f3);
        f.queryFood();//调用toString方法
        
    }

Java7-46.png

完整代码

package dao;

import java.util.*;

import entity.Food;
import entity.Noodle;
public class CartDaoMap implements CartDao {
	
    private HashMap<Food,Integer> f ;
	
    public CartDaoMap(){
    	//初始化购物车
    	this.f= new HashMap<>();
    	//Food f1 = new Noodle("炸酱面",12.0,3,"不辣");
    	//Food f2 =new Noodle("臊子面",14.0,2,"麻辣");
    	
    	//this.addFood(f1,1);
    	//this.addFood(f2,1);
    	
    }

    public CartDaoMap(HashMap<Food,Integer> f){   	
	  	
    	this.f= f;
    }
    
    /**
	   * 向购物车中添加商品
	   * @param g 向购物车中添加商品
	   * @return 值为空
	   */
    public void addFood(Food g,Integer n){
    	
	    this.f.put(g, n);  		
	  	
   }
    
    /**
	   * 向购物车中删除商品
	   * @param Food 向购物车中删除商品
	   * @return 值为空
	   */
   public void delFood(Food g){
	   //将数组中myFood条目对应的商品数量减为0	   
	   this.f.remove(g);
   }
   /**
	   * 遍历查询购物车中的商品
	   * @param 值为空
	   * @return 值为空
	   */
    public void queryFood(){
    	
    	String s =this.toString();//调用本类的toString方法
		System.out.println(s);
		
    }
    /**
	   * 查询购物车中的商品
	   * @param myFood 带查询的商品
	   * @return 该商品的数量
	   */
    public Integer hasFood(Food g){
    	// 遍历所有的书籍信息
    	 
    	//if(f.containsKey(g))
    		//return f.get(g);
    	Set<Food> keys = f.keySet();
		
		//遍历keyset,通过map.get(key)方法获得value的值
		for (Food key : keys){
			if(key.getName().equals(g.getName())){
				return f.get(key);
			}
		}	
    	return 0;
    }
    
    /**
	   * 修改购物车中商品的数量
	   * @param g待修改的商品
	   * @param n 该商品要增加或减少的数量
	   * @return 布尔值,表明是否修改成功
	   */
    
    public void modifyFood(Food g,Integer n){
    	//修改某种商品在购物车中的数目
    	Integer num=0;//用num来表示购物车中商品g的数量
    	System.out.println("n="+n);
    	if(this.hasFood(g)==0){//如果购物车中没有,num暂时为0
    		num =0;
    	}else {//如果购物车中有,获得它现在的数量
    		Set<Food> keys = f.keySet();
    		for (Food key : keys){
    			if(key.getName().equals(g.getName())){
    				num = f.get(key);
    			}
    		}	    		
    	}
    	System.out.println("num="+num);
    	num += n;
    	if(num==0){//如果库存数量为0,就直接删除
    		f.remove(g);
    	}else{//如果库存数量不为0,仅仅修改它的数数量
    		f.remove(g);
    	    f.put(g,num);
    	}
    	
    }
   
    /**
	   * 返回该类的字符串形式
	   * @return 返回该类的字符串形式
	   */
    @Override
 	public String toString() {
    	 
		 String s="";
		 s +="购物车商品明细:\r\n";
		 //显示所有书籍    	
	     Set<Food> keys = f.keySet();
	     s += "***********************\r\n";
		 //遍历keyset,通过map.get(key)方法获得value的值
		 for(Food key : keys){
			s +=key.toString() + "\t" +"选中数量:\t"+ f.get(key)+"\r\n";
		}	
		return s;
 	}
    public static void main(String[] args) {
		// TODO Auto-generated method stub
    	 
    	CartDao  f = new CartDaoMap();//用数组列表f初始化食物仓库foodset
    	
        //查看购物车
    	System.out.println("查看购物车");
        f.queryFood();//调用toString方法
        
        //向购物车添加商品
        Food f3 = new Noodle("刀削面",10.0,5,"微辣");
        System.out.println("购买商品"+f3.getName());        
        f.addFood(f3, 1);      
        f.queryFood(); //查看购物车
        
        //取消购买
        System.out.println("取消购买");
        f.delFood(f3);
        f.queryFood();//调用toString方法
             
        
        
    }

}