“商苑面馆:Java命令行版之 CartDao”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
接口实现类CartDaoMap
 
(未显示同一用户的1个中间版本)
第46行: 第46行:
 
     //初始化购物车
 
     //初始化购物车
 
     this.f= new HashMap<>();
 
     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);
 
   
 
 
     }
 
     }
  
第99行: 第94行:
 
    
 
    
 
     String s =this.toString();//调用本类的toString方法
 
     String s =this.toString();//调用本类的toString方法
System.out.println(s);
+
System.out.println(s);
 
 
 
     }
 
     }
第130行: 第125行:
 
     // 遍历所有的书籍信息
 
     // 遍历所有的书籍信息
 
    
 
    
     if(f.containsKey(g))
+
     //if(f.containsKey(g))
     return f.get(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;
 
     return 0;
 
     }</nowiki>
 
     }</nowiki>
 
===修改购物车内商品数量===
 
===修改购物车内商品数量===
 
  <nowiki>/**
 
  <nowiki>/**
 +
  * 修改购物车中商品的数量
 +
  * @param g待修改的商品
 +
  * @param n 该商品要增加或减少的数量
 +
  * @return 布尔值,表明是否修改成功
 +
  */
 +
   
 +
    /**
 
  * 修改购物车中商品的数量
 
  * 修改购物车中商品的数量
 
  * @param g待修改的商品
 
  * @param g待修改的商品
第145行: 第154行:
 
     public void modifyFood(Food g,Integer n){
 
     public void modifyFood(Food g,Integer n){
 
     //修改某种商品在购物车中的数目
 
     //修改某种商品在购物车中的数目
     Integer num;//用num来表示购物车中商品g的数量
+
     Integer num=0;//用num来表示购物车中商品g的数量
 +
    System.out.println("n="+n);
 
     if(this.hasFood(g)==0){//如果购物车中没有,num暂时为0
 
     if(this.hasFood(g)==0){//如果购物车中没有,num暂时为0
 
     num =0;
 
     num =0;
 
     }else {//如果购物车中有,获得它现在的数量
 
     }else {//如果购物车中有,获得它现在的数量
     num =f.get(g);
+
     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;
 
     num += n;
 
     if(num==0){//如果库存数量为0,就直接删除
 
     if(num==0){//如果库存数量为0,就直接删除
 
     f.remove(g);
 
     f.remove(g);
 
     }else{//如果库存数量不为0,仅仅修改它的数数量
 
     }else{//如果库存数量不为0,仅仅修改它的数数量
 +
        f.remove(g);
 
         f.put(g,num);
 
         f.put(g,num);
 
     }
 
     }
第190行: 第207行:
 
==完整代码==
 
==完整代码==
  
  <nowiki> <nowiki>package dao;
+
  <nowiki>package dao;
  
 
import java.util.*;
 
import java.util.*;
第203行: 第220行:
 
     //初始化购物车
 
     //初始化购物车
 
     this.f= new HashMap<>();
 
     this.f= new HashMap<>();
     Food f1 = new Noodle("炸酱面",12.0,3,"不辣");
+
     //Food f1 = new Noodle("炸酱面",12.0,3,"不辣");
     Food f2 =new Noodle("臊子面",14.0,2,"麻辣");
+
     //Food f2 =new Noodle("臊子面",14.0,2,"麻辣");
 
    
 
    
     this.addFood(f1,3);
+
     //this.addFood(f1,1);
     this.addFood(f2,3);
+
     //this.addFood(f2,1);
 
    
 
    
 
     }
 
     }
第246行: 第263行:
 
System.out.println(s);
 
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);
 +
    }
 +
   
 
     }
 
     }
 
    
 
    
第253行: 第322行:
 
  */
 
  */
 
     @Override
 
     @Override
  public String toString() {
+
public String toString() {
 
      
 
      
    String s="";
+
String s="";
    s +="购物车商品明细:\r\n";
+
s +="购物车商品明细:\r\n";
    //显示所有书籍   
+
//显示所有书籍   
 
    Set<Food> keys = f.keySet();
 
    Set<Food> keys = f.keySet();
 
    s += "***********************\r\n";
 
    s += "***********************\r\n";
    //遍历keyset,通过map.get(key)方法获得value的值
+
//遍历keyset,通过map.get(key)方法获得value的值
    for(Food key : keys){
+
for(Food key : keys){
s +=key.toString() + "\t" +"选中数量:\t"+ f.get(key)+"\r\n";
+
s +=key.toString() + "\t" +"选中数量:\t"+ f.get(key)+"\r\n";
    }
+
}
    return s;
+
return s;
 
  }
 
  }
     public static void main(String[] args) {          
+
     public static void main(String[] args) {
        CartDao  f = new CartDaoMap();//用数组列表f初始化食物仓库foodset
+
// TODO Auto-generated method stub
 +
   
 +
    CartDao  f = new CartDaoMap();//用数组列表f初始化食物仓库foodset
 
    
 
    
 
         //查看购物车
 
         //查看购物车
第283行: 第354行:
 
         f.delFood(f3);
 
         f.delFood(f3);
 
         f.queryFood();//调用toString方法
 
         f.queryFood();//调用toString方法
 +
           
 +
       
 
          
 
          
 
     }
 
     }
  
}
+
}</nowiki>
</nowiki></nowiki>
 

2019年5月13日 (一) 02:07的最新版本

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方法
             
        
        
    }

}