购物车系统 (练习集合等知识)

总的来说在做这个购物车的小项目的时候:发现了好多的问题。用了javase 的相关的知识,特别是集合方面的东西Map

以及Integer  自动装箱,自动拆箱 Integer.intVlaue; equals等方法

购物车

package ShoppingCar;

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

public class ShoppingCar {
//购物车
	double  totalprice;
	//使用map存储商品条目
	Map<ShoppingCenter,Integer> ProductMaps;

	
	ShoppingCar(){
		ProductMaps = new HashMap<ShoppingCenter,Integer>();
		}
		//添加一个商品
		public void add(ShoppingCenter p) {
			add(p,1);
		}
		//添加n个商品
		public void add(ShoppingCenter 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(ShoppingCenter p) {
			remove(p,1);
		}
		//删除n个
		public void remove(ShoppingCenter p,int n) {
			//如果某商品的数量和删除的个数相等,删除该条目
			int before = ProductMaps.get(p).intValue();//之前的商品数
			if(before==n) {
				ProductMaps.remove(p);
			}else {
			int after  = before-n;
			ProductMaps.put(p,after);
		}
			totalprice -= p.getPrice()*n;}
		//清空购物车
		public void clear() {
			ProductMaps.clear();
			totalprice = 0.0;
		}
		//输出购物车清单
		public void print() {
			StringBuffer sb = new StringBuffer();
			sb.append("购物清单:\n");
			Set<ShoppingCenter> keys = ProductMaps.keySet();
			Iterator<ShoppingCenter> it = keys.iterator();
			while(it.hasNext()) {
				ShoppingCenter 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总价:"+totalprice);
			System.out.println(sb);
		}
		
	}

超市商品

package ShoppingCar;

public class ShoppingCenter {
	private int no;//编号
	private String name;
	private double price;
	
	public ShoppingCenter(){}

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


	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;
	}

	public String toString() {
		return "商品    [编号: " + no + "   名字: " + name + "   价格: " + price + "元]";
	}
	//equals  如果商品名字和编号都一样表示同一个商品
	public boolean equals(Object o) {
		if(this==o)return true;
		if(o instanceof ShoppingCenter) { 
		ShoppingCenter p = (ShoppingCenter)o;
		if(p.no==this.no&&p.name.equals(this.name)) {
			return true;
		}
		}
		return false;
	}
	//所有商品格式,::  [1000-9999]编号范围
	public int hashCode() {
		return no/10;
	}
	
	
}

 

测试

package ShoppingCar;

public class Test {
	public static void main(String[] args) {
		
		ShoppingCar car = new ShoppingCar();
		
		//开始购物
		ShoppingCenter p1 = new ShoppingCenter(1000,"西瓜",100.0);
		ShoppingCenter p2 = new ShoppingCenter(2000,"妮子",120.0);
		ShoppingCenter p3 = new ShoppingCenter(3000,"弟弟",1.0);
		ShoppingCenter p4 = new ShoppingCenter(4000,"思思",30.0);
		
	
		car.add(p1);
		car.add(p4,8);
		car.add(p2,3);
		car.add(p1,3);
		
		
	    car.remove(p1,2);
	    
	    //car.clear();
	    
		car.print();
		
	}
}

 

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值