“商苑面馆:Java命令行版之 CartDao”的版本间的差异
来自CloudWiki
(→编写测试代码) |
|||
(未显示同一用户的6个中间版本) | |||
第46行: | 第46行: | ||
//初始化购物车 | //初始化购物车 | ||
this.f= new HashMap<>(); | this.f= new HashMap<>(); | ||
− | Food f1 = new Noodle("炸酱面",12.0,3,"不辣"); | + | |
− | Food f2 =new Noodle("臊子面",14.0,2,"麻辣"); | + | } |
+ | |||
+ | |||
+ | |||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </nowiki> | ||
+ | |||
+ | ===添加商品方法:AddFood()=== | ||
+ | <nowiki> /** | ||
+ | * 向购物车中添加商品 | ||
+ | * @param g 向购物车中添加商品 | ||
+ | * @return 值为空 | ||
+ | */ | ||
+ | public void addFood(Food g,Integer n){ | ||
+ | |||
+ | this.f.put(g, n); | ||
+ | |||
+ | } | ||
+ | |||
+ | </nowiki> | ||
+ | ===删除商品方法:DelFood()=== | ||
+ | <nowiki> /** | ||
+ | * 向购物车中删除商品 | ||
+ | * @param Food 向购物车中删除商品 | ||
+ | * @return 值为空 | ||
+ | */ | ||
+ | public void delFood(Food g){ | ||
+ | //将数组中myFood条目对应的商品数量减为0 | ||
+ | this.f.remove(g); | ||
+ | } | ||
+ | </nowiki> | ||
+ | |||
+ | ===查询商品方法:query()=== | ||
+ | <nowiki>/** | ||
+ | * 遍历查询购物车中的商品 | ||
+ | * @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; | ||
+ | }</nowiki> | ||
+ | ===判断商品是否在购物车内:hasFood()=== | ||
+ | <nowiki>/** | ||
+ | * 查询购物车中的商品 | ||
+ | * @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; | ||
+ | }</nowiki> | ||
+ | ===修改购物车内商品数量=== | ||
+ | <nowiki>/** | ||
+ | * 修改购物车中商品的数量 | ||
+ | * @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); | ||
+ | } | ||
+ | |||
+ | }</nowiki> | ||
+ | |||
+ | ===编写测试代码=== | ||
+ | 在CartDaoMap类的main方法中编写测试代码: | ||
+ | |||
+ | <nowiki> 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方法 | ||
+ | |||
+ | }</nowiki> | ||
+ | |||
+ | [[文件:java7-46.png|500px]] | ||
+ | |||
+ | ==完整代码== | ||
+ | |||
+ | <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, | + | //this.addFood(f1,1); |
− | this.addFood(f2, | + | //this.addFood(f2,1); |
} | } | ||
第89行: | 第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); | ||
+ | } | ||
+ | |||
} | } | ||
第96行: | 第322行: | ||
*/ | */ | ||
@Override | @Override | ||
− | + | public String toString() { | |
String s=""; | String s=""; | ||
第109行: | 第335行: | ||
return s; | return s; | ||
} | } | ||
− | public static void main(String[] args) { | + | public static void main(String[] args) { |
− | + | // TODO Auto-generated method stub | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
CartDao f = new CartDaoMap();//用数组列表f初始化食物仓库foodset | CartDao f = new CartDaoMap();//用数组列表f初始化食物仓库foodset | ||
第139行: | 第354行: | ||
f.delFood(f3); | f.delFood(f3); | ||
f.queryFood();//调用toString方法 | f.queryFood();//调用toString方法 | ||
+ | |||
+ | |||
− | } | + | } |
− | + | }</nowiki> |
2019年5月13日 (一) 02:07的最新版本
目录
Dao层
实现步骤
建立接口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方法 }
完整代码
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方法 } }