java实现简单购物车ShoppingCart

…衆ロ難τιáo~ 提交于 2020-03-01 19:33:48

Product.java

//超市中的商品
public class Product
{
	//Field
	private int no;
	private String name;
	private double price;

	//Constructor
	public Product(){}

	public Product(int no,String name,double price){
		this.no = no;
		this.name = name;
		this.price = price;
	}

	//setter and getter
	public void setNo(int no){
		this.no = no;
	}
	public int getNo(){
		return no;
	}
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
	public void setPrice(double price){
		this.price = price;
	}
	public double getPrice(){
		return price;
	}
	//toString
	public String toString(){
		return "Product[编号:"+no+",名称:"+name+",单价:"+price+"元/个]";
	}

	//hashCode
	//超市商品编号的格式:[1000-9999]
	public int hashCode(){
		return no/1000;
	}

	//equals
	//需求:如果商品编号和商品名字都一样,表示同一个商品
	public boolean equals(Object o){
		if(this==o){return true;}

		if(o instanceof Product){
			Product p = (Product)o;
			if(p.no==this.no && p.name.equals(this.name)){
				return true;
			}
		}

		return false;
	}

}

ShoppingCart.java

//购物车
import java.util.*;
public class ShoppingCart
{
	//使用Map存储商品条目
	Map<Product,Integer> productMaps;

	//总价
	double totalPrice;

	//Constructor
	ShoppingCart(){
		productMaps = new HashMap<Product,Integer>();
	}

	//添加一个商品
	public void add(Product p){
		add(p,1);
	}

	//添加N个商品
	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);//key重复,value覆盖
		}
		//修改总价
		totalPrice += p.getPrice()*n;
	}

	//删除一个商品
	public void remove(Product p){
		remove(p,1);
	}

	//删除N个商品
	public void remove(Product p,int n){
		int before = productMaps.get(p).intValue();//删除商品之前的该商品数量
		//如果购物车中的某商品数量和n是相等的,必须删除整个条目
		if(before==n){
			productMaps.remove(p);
		}else{
			int after = before - n;
			productMaps.put(p,after);//key重复,value覆盖
		}
		

		//修改总价
		totalPrice -= p.getPrice()*n;
		
		
	}

	//清空购物车
	public void clear(){
		productMaps.clear();
		totalPrice = 0.0;
	}

	//输出购物车详单
	/*
		格式:
		购物详单:
		10	苹果	10元
		3	西瓜	30元
		.......
		总价:40元
	*/
	public void print(){
		StringBuffer sb = new StringBuffer();
		sb.append("购物详单:\n");

		//遍历Map
		Set<Product> keys = productMaps.keySet();
		Iterator<Product> it = keys.iterator();
		while(it.hasNext()){
			Product k = it.next();
			Integer v = productMaps.get(k);
			sb.append("\t"+v.intValue()+"\t"+k+"\t"+v.intValue()*k.getPrice()+"元\n");
		}
		sb.append("\t\t\t\t总价:"+totalPrice+"元");

		System.out.println(sb);
		
	
	}
}

Test01.java


public class Test01
{
	public static void main(String[] args){
		//创建购物车
		ShoppingCart cart = new ShoppingCart();

		//货物
		Product p1 = new Product(1000,"iphone4s",10.0);
		Product p2 = new Product(2000,"三星",3.0);
		Product p3 = new Product(3000,"htc",6.0);
		Product p4 = new Product(4000,"小米",2.0);

		//开始购物
		cart.add(p1);
		cart.add(p1,3);

		cart.add(p2,1);
		cart.add(p3,2);
		cart.add(p4,3);

		cart.remove(p1);
		cart.remove(p1,2);

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

		//清空
		cart.clear();

		cart.print();
	}
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!