商苑面馆:Java接口 补充练习

来自CloudWiki
跳转至: 导航搜索

购物车

作用

在网上商城中,购物车的作业很重要。

用户把想买的商品放到购物车后,

到最后一齐将购物车中的商品结算。

实现思路

也是遵循和上一个实训相同的思路,

先建立购物车的抽象接口CartDao,

然后再建立抽象接口的实现类 ,接口的实现类里,数据存储可用Arraylist ,LinkedList,HashMap等多种形式,这里选用HashMap。

通过HashMap的添加元素、查看元素等方法,实现购物车的增删改查。

依赖知识点:HashMap简单应用

public static void main(String[] args) {
		Map<String, String> map = new HashMap<>();
		//添加元素
		map.put("01", "Think in java");
		map.put("02", "java 讲义");
		//删除元素
		map.remove("03");
		System.out.println("字典中是否包含 \"java 语言程序设计\" :"+map.containsKey("03"));
		//修改元素的值
		map.put("02", "平凡的世界");
		System.out.println("字典中是否包含 \"java 讲义\" :"+map.containsValue("java 讲义"));
		//获取字典中的元素
		System.out.println("编号02的名称为:"+map.get("02"));		

               //HashMap遍历
               // 先获取map集合的所有键的set集合,keyset()
               Set<String> keys = map.keySet();
		System.out.println("编号\t书名");
		System.out.println("***********************");
		//遍历keyset,通过map.get(key)方法获得value的值
		for (String key : keys)
			System.out.println(key + "\t" + map.get(key));
}

面馆实训

新建接口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);//修改购物车内该种商品的数量

	
	
}

建立接口的实现类CartDaoMap

在文末有本类的完整代码,但是建议大家先自己思考,然后再去看答案。

package dao;

import java.util.*;

import entity.Food;
public class CartDaoMap implements CartDao {
	
    private HashMap<Food,Integer> f = new HashMap<>();
	
    public CartDaoMap(){
    	
    }

    public CartDaoMap(HashMap<Food,Integer> f){   	
	  	
    	this.f= f;
    }
    
    /**
	   * 向购物车中添加商品
	   * @param g 向购物车中添加商品
	   * @return 值为空
	   */
    public void addFood(Food g,Integer n){    	
	    		
	  	
   }
    
    /**
	   * 向购物车中删除商品
	   * @param Food 向购物车中删除商品
	   * @return 值为空
	   */
   public void delFood(Food g){
	   //将数组中myFood条目对应的商品数量减为0	   
	  
   }
   /**
	   * 遍历查询购物车中的商品
	   * @param 值为空
	   * @return 值为空
	   */
    public void queryFood(){
    	
    	
		
    }
    /**
	   * 查询购物车中的商品
	   * @param myFood 带查询的商品
	   * @return 该商品的数量
	   */
    public Integer hasFood(Food g){
    	// 遍历所有的书籍信息
    	
    	
    }
    
    /**
	   * 修改购物车中商品的数量
	   * @param g待修改的商品
	   * @param n 该商品要增加或减少的数量
	   * @return 布尔值,表明是否修改成功
	   */
    
    public void modifyFood(Food g,Integer n){
    	//修改某种商品在购物车中的数目
    	
    	
    }
   
    /**
	   * 返回该类的字符串形式
	   * @return 返回该类的字符串形式
	   */
    @Override
 	public String toString() {
    	 
		 
 	}
	

}

测试类Main

Main.class:

package dao;

import java.util.Scanner;

import entity.*;
;
/*本类对应实训: */
public class Main {
	  public static void main(String[] args) {
		  Scanner scan = new Scanner(System.in);
		  
		  
		
	      //数组初始化    
	      Food f1 = new Food("炸酱面",12.0,3);
	      Food f2 =new Noodle("臊子面",14.0,2,"麻辣");
	      Food f3 = new Noodle("刀削面",10.0,5,"微辣");
	    	
	      
	      //添加购物车
	      CartDao cart= new CartDaoMap();
	      Integer num = 2;Integer num2 =1;
	      cart.addFood(f1,num);//购物车添加商品
	      System.out.println("购物车添加了商品:"+f1.getName()+" "+num.toString());
	      cart.addFood(f2,num);//购物车添加商品
	      System.out.println("购物车添加了商品:"+f2.getName()+" "+num.toString());
	      cart.delFood(f1);//购物车删除商品
	      System.out.println("购物车删除了商品:"+f1.getName());
	      cart.modifyFood(f1, num2);//修改购物车车内商品1的的数量
	      System.out.println("购物车修改了商品:"+f1.getName()+" 的数量:增加  "+num2.toString());
	      cart.queryFood();//列出购物车现有商品
	      
	      if(cart.hasFood(f3)==0){
	    	  System.out.println("商品 "+f3.getName()+
	    			  "现在并不在购物车内,是否添加 ?");	    	 
	      }
	      scan.close();   
		   
          
		 
	      
	  }
}

运行结果

Java7-24.png

完整代码

接口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);//修改购物车内该种商品的数量

	
	
}

接口的实现类CartDaoMap

package dao;

import java.util.*;

import entity.Food;
public class CartDaoMap implements CartDao {
	
    private HashMap<Food,Integer> f = new HashMap<>();
	
    public CartDaoMap(){
    	
    }

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

}

测试类Main

Main.class:

package dao;

import java.util.Scanner;

import entity.*;
;
/*本类对应实训: */
public class Main {
	  public static void main(String[] args) {
		  Scanner scan = new Scanner(System.in);
		  
		  
		
	      //数组初始化    
	      Food f1 = new Food("炸酱面",12.0,3);
	      Food f2 =new Noodle("臊子面",14.0,2,"麻辣");
	      Food f3 = new Noodle("刀削面",10.0,5,"微辣");
	    	
	      
	      //添加购物车
	      CartDao cart= new CartDaoMap();
	      Integer num = 2;Integer num2 =1;
	      cart.addFood(f1,num);//购物车添加商品
	      System.out.println("购物车添加了商品:"+f1.getName()+" "+num.toString());
	      cart.addFood(f2,num);//购物车添加商品
	      System.out.println("购物车添加了商品:"+f2.getName()+" "+num.toString());
	      cart.delFood(f1);//购物车删除商品
	      System.out.println("购物车删除了商品:"+f1.getName());
	      cart.modifyFood(f1, num2);//修改购物车车内商品1的的数量
	      System.out.println("购物车修改了商品:"+f1.getName()+" 的数量:增加  "+num2.toString());
	      cart.queryFood();//列出购物车现有商品
	      
	      if(cart.hasFood(f3)==0){
	    	  System.out.println("商品 "+f3.getName()+
	    			  "现在并不在购物车内,是否添加 ?");	    	 
	      }
	      scan.close();   
		   
          
		 
	      
	  }
}