二十一、示例-简单购物车

【超市商品】

public class Product {
   private int no;
   private String name;
   private double price;
   public Product(int no, String name, double price) {
      super();
      this.no = no;
      this.name = name;
      this.price = price;
   }
   public Product(){
  
   }
   public int getNo() {
      return no;
   }
   public void setNo(int no) {
      this.no = no;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public double getPrice() {
      return price;
   }
   public void setPrice(double price) {
      this.price = price;
   }
   @Override
   public String toString() {
      return "Product [no=" + no + ", name=" + name + ", price=" + price
      + "]";
   }
   //超市商品编号的格式[1000-9999]
   @Override
   public int hashCode() {
      return no/1000;
   }
   @Override
   public boolean equals(Object obj) {
      if(this==obj){
       return true;
    }
    if(obj instanceof Product){
       Product p=(Product)obj;
       if(p.name.equals(this.name)&&p.no==this.no){
       return true;
     }
    }
    return false;
 }
}

【购物车】

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class ShoppingCart {
   //使用Map储存商品条目,Map中当key重复的时候,value采用的是覆盖
   Map<Product, Integer> productMaps;
   //总价:
   double totalPrice;
   ShoppingCart(){
      productMaps=new HashMap<Product, Integer>();
   }
   //添加一个商品
   public void add(Product p){
      add(p,1);
   }
   //添加多个商品
   public void add(Product p,int n){
      //判断商品购物车中是否包含有该商品
    if(!productMaps.containsKey(p)){
       productMaps.put(p, n);
    }else{
       int before=productMaps.get(p).intValue();
       int after=before+n;
       productMaps.put(p, after);
   }
    //修改总价
    totalPrice=p.getPrice()*n+totalPrice;
   }
 
  //删除一个商品
  public void remove(Product p){
      remove(p,1);
  }
   //删除多个商品
  public void remove(Product p,int n){
   //添加商品之前的数量:
   int before=productMaps.get(p).intValue();
    //如果购物车中的某商品的数量和n是相等的,必须删除整个条目 
    if(before==n){
       productMaps.remove(p);
    }else{
       //车中有该商品
        n=before-n;
       productMaps.put(p, n);//key重复Value覆盖
    }
      //修改总价
      totalPrice=p.getPrice()*n+totalPrice;
   }
     //情况购物车
   public void clear(){
      productMaps.clear();
   }
 
   public void print(){
      StringBuffer sb=new StringBuffer();
      sb.append("购物车详单:\n");
      //遍历Map
      Set<Product> keysProducts=productMaps.keySet();
      Iterator<Product> it=keysProducts.iterator();
      while(it.hasNext()){
         Product  k= it.next();
         Integer vInteger=productMaps.get(k);
         sb.append("\t"+"购买的数量"+vInteger.intValue()+"\t"+k+"\t"+(vInteger.intValue()*k.getPrice())+"\n");
      }
      sb.append("\t\t\t\t总价:"+totalPrice+"元");
      System.out.println(sb);
 }
}

【测试类】

public class Test {
 public static void main(String[] args) {
    //创建购物车:
    ShoppingCart cart=new ShoppingCart();
    //货车:
    Product p1=new Product(1000,"苹果",10.0);
    Product p2=new Product(2000,"橘子",3.0);
    Product p3=new Product(3000,"火龙果",10.0);
    Product p4=new Product(4000,"柚子",10.0);
  
    //开始购物
    cart.add(p1);
    cart.add(p1,3);  
    cart.add(p2,1);  
    cart.add(p3,2);  
    cart.add(p4,4);
  
    cart.remove(p1);
    cart.remove(p1,2);

    //打印详单  
    cart.print();
 }
}

 

posted @ 2016-12-30 10:35  爱笑的berg  阅读(140)  评论(0)    收藏  举报