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

来自CloudWiki
Cloud17讨论 | 贡献2019年5月12日 (日) 09:01的版本
跳转至: 导航搜索

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<>();
    	Food f1 = new Noodle("炸酱面",12.0,3,"不辣");
    	Food f2 =new Noodle("臊子面",14.0,2,"麻辣");
    	
    	this.addFood(f1,3);
    	this.addFood(f2,3);
    	
    }

   
    
   
    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);
    	
    	return 0;
    }

修改购物车内商品数量

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

完整代码

 <nowiki>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,3);
    	this.addFood(f2,3);
    	
    }

    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);
		
    }
   
    /**
	   * 返回该类的字符串形式
	   * @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) {            
        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方法
        
    }

}
</nowiki>