黑马程序员技术交流社区

标题: 加强了这么多天,运用集合知识,搞个购物商场 [打印本页]

作者: 唐溪永    时间: 2012-2-21 23:42
标题: 加强了这么多天,运用集合知识,搞个购物商场
{:soso_e113:}

模拟购物商城:

思路:
a) 抽象现实世界中的商品. Product.java
商品的属性:
商品编号(String  no)
商品的名称(String  name)
商品的单价(double  price)
属性私有化,提供公开的访问方法.
重写hashCode和equals方法(凡是商品的编号一致的,这两个商品就是同一个商品.)

b) 抽象现实世界中的顾客. Customer.java
顾客的属性:
顾客的名字(String name)
顾客的购物车(ShoppingCart cart)

在构造方法中为顾客提供购物车.
属性私有化,提供公开的访问方法.
重写hashCode,equals,toString方法.
(顾客的名字一致就代表是同一个顾客.)

c) 编写购物车 ShoppingCart.java
属性:
Map<Product,Integer> productsMap;
购物车总价(double totalPrice;)

方法:
  清空
  加1个商品
  加多个商品
  删1个商品
  删多个商品
  打印购物车明细

d) 抽象现实世界中的 SuperMarket.java
属性:
货架: Map<Product,Integer>;
e) 测试程序: Test.java


  1. public class Product{
  2. private String no;
  3. private String name;
  4. private double price; //单价

  5. public Product(){}

  6. public Product(String no,String name,double price){
  7.   this.no = no;
  8.   this.name = name;
  9.   this.price = price;
  10. }


  11. public void setNo(String no){
  12.   this.no = no;
  13. }
  14. public String getNo(){
  15.   return no;
  16. }
  17. public void setName(String name){
  18.   this.name = name;
  19. }
  20. public String getName(){
  21.   return name;
  22. }
  23. public void setPrice(double price){
  24.   this.price = price;
  25. }
  26. public double getPrice(){
  27.   return price;
  28. }

  29. public boolean equals(Object obj){
  30.   if(this==obj) return true;
  31.   if(obj instanceof Product){
  32.    Product product = (Product)obj;
  33.    if(product.getNo().equals(this.getNo())){
  34.     return true;
  35.    }
  36.   }
  37.   return false;
  38. }

  39. public int hashCode(){
  40.   return (no!=null)?no.hashCode():0;
  41. }

  42. public String toString(){
  43.   //return "Product [no="+no+",name="+name+",price="+price+"]";
  44.   return name;
  45. }
  46. }
复制代码

  1. public class Customer{
  2.        
  3.         //属性
  4.         private String name;
  5.         private ShoppingCart cart;
  6.        
  7.         //构造方法
  8.         public Customer(){}
  9.         public Customer(String name){ //在创建Customer对象的时候分配购物车对象
  10.                 this.name = name;
  11.                 this.cart = new ShoppingCart();
  12.         }
  13.        
  14.         //setter and getter
  15.         public void setName(String name){
  16.                 this.name = name;
  17.         }
  18.         public String getName(){
  19.                 return name;
  20.         }
  21.        
  22.         public void setCart(ShoppingCart cart){
  23.                 this.cart = cart;
  24.         }
  25.         public ShoppingCart getCart(){
  26.                 return cart;
  27.         }
  28.        
  29.        
  30.         //equals
  31.         public boolean equals(Object o){
  32.                
  33.                 if(this==o){
  34.                         return true;
  35.                 }
  36.                
  37.                 if(o instanceof Customer){
  38.                         Customer customer = (Customer)o;
  39.                         if((customer.getName().equals(this.getName()))){
  40.                                 return true;
  41.                         }
  42.                        
  43.                 }
  44.                 return false;
  45.                
  46.         }
  47.        
  48.         //hashCode
  49.         public int hashcode(){
  50.                 return name.hashCode();
  51.         }
  52.        
  53.         //toString
  54.         public String toString(){
  55.                 // Customer[name=sun]
  56.                 return "Customer[name=" + this.getName() + "]";
  57.         }
  58. }
复制代码


  1. import java.util.*;

  2. public class ShoppingCart {
  3.        
  4.         private Map<Product,Integer> productsMap ;
  5.         private double totalPrice;
  6.        
  7.         public ShoppingCart() {
  8.                 this.productsMap = new HashMap<Product,Integer>();
  9.         }
  10.        
  11.         public Map<Product, Integer> getProductsMap() {
  12.                 return productsMap;
  13.         }
  14.         public void setProductsMap(Map<Product, Integer> productsMap) {
  15.                 this.productsMap = productsMap;
  16.         }
  17.         public double getTotalPrice() {
  18.                 return totalPrice;
  19.         }
  20.         public void setTotalPrice(double totalPrice) {
  21.                 this.totalPrice = totalPrice;
  22.         }
  23.        
  24.         //清空购物车
  25.         public void clear(){
  26.                 productsMap.clear(); //清空集合
  27.                 totalPrice = 0.0; //总价归零
  28.         }
  29.        
  30.         //向购物车中添加一个商品
  31.         public void add(Product p){
  32.                 if(!productsMap.containsKey(p)){
  33.                         productsMap.put(p,1);
  34.                 }else{
  35.                         productsMap.put(p,productsMap.get(p).intValue()+1);
  36.                 }
  37.                 this.setTotalPrice(this.getTotalPrice()+ p.getPrice());
  38.                
  39.                 System.out.println("成功添加1个"+p);
  40.         }
  41.        
  42.         public void add(Product p,int count){
  43.                 if(!productsMap.containsKey(p)){
  44.                         productsMap.put(p,count);
  45.                 }else{
  46.                         productsMap.put(p, productsMap.get(p) + count);
  47.                 }
  48.                 this.setTotalPrice(this.getTotalPrice()+ p.getPrice()*count);
  49.                 System.out.println("成功添加"+count+"个"+p);
  50.         }
  51.        
  52.        
  53.         //删除一个商品
  54.         public void remove(Product p){
  55.                 if(!productsMap.containsKey(p)){
  56.                         System.out.println("购物车中没有" + p);
  57.                         return;
  58.                 }
  59.                 if(productsMap.get(p)==1){
  60.                         productsMap.remove(p); //删除一个条目
  61.                 }else{
  62.                         productsMap.put(p,productsMap.get(p).intValue()-1);
  63.                 }
  64.                 System.out.println("成功删除1个" + p + ",该购物车中"+p+"剩余"+ productsMap.get(p) +"个");
  65.                
  66.                 this.setTotalPrice(this.getTotalPrice()-p.getPrice());
  67.                
  68.         }
  69.        
  70.         //删除多个商品
  71.         public void remove(Product p,int count){
  72.                 if(!productsMap.containsKey(p)){
  73.                         System.out.println("购物车中没有" + p);
  74.                         return;
  75.                 }
  76.                
  77.                 Integer productCount = productsMap.get(p); //获取p商品的数量
  78.                 if(productCount<count){
  79.                         System.out.println("购物车中一共有"+productCount+"个"+p+",您却要删除"+count+"个.这是不行的");
  80.                         return;
  81.                 }
  82.                
  83.                 if(count==productCount){
  84.                         productsMap.remove(p);
  85.                 }else{
  86.                         productsMap.put(p,productCount-count);
  87.                 }
  88.                
  89.                 System.out.println("成功删除"+count+"个" + p + ",该购物车中"+p+"剩余"+ productsMap.get(p) +"个");
  90.                 this.setTotalPrice(this.getTotalPrice()- p.getPrice()*count);
  91.         }
  92.        
  93.         //显示购物车中的明细(遍历Map)
  94.         public void printProductList(){
  95.                 if(productsMap.size()==0){
  96.                         System.out.println("购物车中没有商品");
  97.                         return;
  98.                 }
  99.                 Set<Product> keys = productsMap.keySet();
  100.                 System.out.println("购物车明细:");
  101.                 for(Product k:keys){
  102.                         System.out.println("\t" + k + "" + productsMap.get(k) +"个");
  103.                 }
  104.                 System.out.println("购物车总价是:" + this.getTotalPrice());
  105.         }
  106.        
  107.        
  108. }
复制代码

  1. import java.util.HashMap;
  2. import java.util.Map;

  3. public class SuperMarket{
  4.        
  5.         private Map<Product,Integer> productsMap;

  6.         public SuperMarket(Map<Product,Integer> productsMap) {
  7.                 super();
  8.                 this.productsMap = productsMap;
  9.         }

  10.         public Map<Product, Integer> getProductsMap() {
  11.                 return productsMap;
  12.         }

  13.         public void setProductsMap(Map<Product, Integer> productsMap) {
  14.                 this.productsMap = productsMap;
  15.         }
  16. }
复制代码

  1. import java.util.*;

  2. public class Test{
  3.        
  4.         public static void main(String[] args){
  5.                
  6.                 //0.准备货物
  7.                
  8.                 Product p1 = new Product("001","西瓜",5.1);
  9.                 Product p2 = new Product("002","冬瓜",6.2);
  10.                 Product p3 = new Product("003","南瓜",7.3);
  11.                 Product p4 = new Product("004","北瓜",8.4);
  12.                 Product p5 = new Product("005","香瓜",5.5);
  13.                 Product p6 = new Product("006","哈密瓜",5.2);
  14.                 Product p7 = new Product("007","黄瓜",10.3);
  15.                 Product p8 = new Product("008","丝瓜",8.56);
  16.                
  17.                 Map<Product,Integer> productsMap = new HashMap<Product,Integer>();
  18.                
  19.                 productsMap.put(p1,3);
  20.                 productsMap.put(p2,10);
  21.                 productsMap.put(p3,4);
  22.                 productsMap.put(p4,11);
  23.                 productsMap.put(p5,5);
  24.                 productsMap.put(p6,12);
  25.                 productsMap.put(p7,6);
  26.                 productsMap.put(p8,13);
  27.                
  28.                 //1.创建超市
  29.                 SuperMarket sm = new SuperMarket(productsMap);
  30.                
  31.                 //2.创建一个顾客
  32.                 Customer c = new Customer("张三");
  33.                
  34.                
  35.                 ShoppingCart cart = c.getCart();
  36.                 //3.添加1商品
  37.                 cart.add(p1);
  38.                 cart.add(p2);
  39.                 cart.add(p3);
  40.                 cart.add(p4);
  41.                 cart.add(p5);
  42.                 cart.add(p6);
  43.                 cart.add(p7);
  44.                
  45.                 cart.printProductList();
  46.                
  47.                 //4.添加多个商品
  48.                 cart.add(p1,2);
  49.                 cart.add(p8,10);
  50.                 cart.printProductList();
  51.                
  52.                 //5.删除1个商品
  53.                 cart.remove(p8);
  54.                 cart.printProductList();
  55.                
  56.                 //6.删除多个商品
  57.                 cart.remove(p8,8);
  58.                 cart.printProductList();
  59.                
  60.                 //7.清空购物车
  61.                 cart.clear();
  62.                 cart.printProductList();
  63.                
  64.         }
  65.        
  66. }
复制代码
大家指点指点{:soso_e104:}
作者: 李晓俊老师    时间: 2012-2-21 23:54
汗,真强,向你学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2