商苑面馆: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(); } }
运行结果
完整代码
接口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(); } }