目录

Git源码

https://gitee.com/shen-chao/sc-java-code.git

一.成员分工

姓名 工作
赵祥 前期调查,功能设计,Git方式管理
黄志昌 UML设计,博客撰写
陈理荣 编码规范,包规划
申超 面向对象设计

二.前期调查

三.系统结构

1.结构图:

2.系统描述:

运行进入页面显示商城里的各种商品,进入加购页面选择完产品信息产生相应的商品条目,将商品条目加入购物车,在购物车内科进行增减商品数量,删除商品,展示购物车内商品等操作,在购物车内进行结算操作产生相应的总金额。

四.UML类图

五.代码展示

1.Commodity类

定义了商品的编号、名称、价格、描述、库存属性,并覆盖了toString、equals方法

public class Commodity {
	private Integer id;
	private String name;
	private Double price;
	private String describe;//描述;
	private int goodsNum=0;//库存
	
	public int getGoodsNum() {
		return goodsNum;
	}

	public void setGoodsNum(int goodsNum) {
		this.goodsNum = goodsNum;
	}

	

	public Commodity(Integer id, String name,Double price) {
		this.id = id;
		this.name = name;
		this.price=price;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	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 getDescribe() {
		return describe;
	}

	public void setDescribe(String describe) {
		this.describe = describe;
	}

	

	@Override
	public boolean equals(Object obj) {  //只比较id,id相同则说明两个商品相同
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Commodity other = (Commodity) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "序号:" + id +"\t"+ "商品名称:" + name +"\t\t"+ "商品价格:" + price;
	}

	

	
}

定义了food、ElectronicProducts、Shoes类都继承了Commodity类,其中定义了各自的属性并重新覆盖了toString方法。

class Food extends Commodity{
	private String date;//生产日期;
	private String QuaGuaPeriod;//保质期;
	}
	@Override
	public String toString() {
		return super.toString() +"\t\t生产日期:" + date +"\t\t"+ "保质期:" + QuaGuaPeriod;
	}	
}
class ElectronicProducts extends Commodity{
	private  String model;//型号;
	private String  configuration;//电脑配置;
	@Override
	public String toString() {
		return super.toString() +"\t型号:" + model + "\t	电脑配置:" +configuration;
	}	
}
class Shoes extends Commodity{
	private String size;//码数范围;
	private String color;//颜色;
	private String brand;//品牌;
	@Override
	public String toString() {
		return super.toString() +"\t\t码数范围:" + size + "\t\t颜色:" +color+ "\t\t品牌:" +brand;
	}
}

2.CartDao接口

public interface CartDao {

	public void addCommodity(Commodity e,int count);//加入购物车
	public boolean remove(Integer id);//将商品移除
	public void diplayAll();//输出购物车内商品条目
	public double checkout();//输出总金额
	public void delete();//清空
}

3.Cart类

实现了对商品的加购、移除、展示和结算。

public class Cart implements CartDao {
	private ArrayList<CommodityItem> cartList=new ArrayList<>();
	@Override
	public void addCommodity(Commodity e, int count) {
		if (e == null) {
			return ;
		}
		int index = findById(e.getId());

		if (index == -1) {// 如果不包含该商品的条目
			cartList.add(new CommodityItem(e,count));
		} else {
			cartList.get(index).increase();
		}		
	}
	@Override
	public boolean remove(Integer id) {
		// TODO 自动生成的方法存根
		if (id == null) {
			System.out.println("商品不存在!");
			return false;
		}
		int index = findById(id);
		if (index == -1) {// 未找到
			System.out.println("商品不存在!");
			return false;
		} else {
			// 删除条目
			cartList.remove(index);
		}
		System.out.println("商品删除成功!!");

		return true;
	}
	@Override
	public void diplayAll() {
		// TODO 自动生成的方法存根
		for (CommodityItem e : cartList) {
			System.out.println(e);
		}
	}
	@Override
	public double checkout() {
		// TODO 自动生成的方法存根
		double money=0;
		for (CommodityItem e : cartList) {
			money=money+e.totalMoney();
			System.out.println(e);
		}
		return money;
	}
	private int findById(Integer id) {
		for (int i = 0; i < cartList.size(); i++) {
			if (cartList.get(i).getId().equals(id))
				return i;
		}
		return -1;
	}

4.CommodityItem类,储存加购商品的信息和商品数量增删。

private class CommodityItem {
    	Commodity product;// 购买的商品(包含商品编号,名称,分类,单价)
    	int count;// 商品数量
    	public double totalMoney() {
    		double price = product.getPrice();
    		return price * count; 
    	}
    	public Object getId() {		
		return product.getId();
	}
	public CommodityItem(Commodity product) {
    		this.product = product;
    		count=1;
    	}
	public void increase() {
            count++;
        }
        public void decrease() {
           count--;
        }
    	@Override
		public String toString() {
			return "ItemEntry [product=" + product + ", count=" + count + "]";
	}
	@Override
	public void delete() {
		cartList.clear();	
	}
}

5.MarketDao接口

public interface MarketDao {
	public boolean addCommodity(Commodity e);//添加商品
	public boolean deleteCommodity(Commodity e);//删除商品
	public void showCommodity();//展示货架上的商品
	public Commodity getItemById(Integer id);//根据id找商品
}

6.Market类

编写商城类并添加各种商品及其信息

public class Market implements MarketDao {
	private ArrayList<Commodity> marketList=new ArrayList<>();// 货架
	@Override
	public boolean addCommodity(Commodity e) {//添加商品到商城;
		if (e == null) {
			return false;
		}
		int index = findById(e.getId());
		if (index == -1) {   // 如果该商品编号不存在,则需创建新的商品
			marketList.add(e);
		} else {
			marketList.get(index).setGoodsNum(marketList.get(index).getGoodsNum() + e.getGoodsNum());
		}
		return true;
	}
	@Override
	public boolean deleteCommodity(Commodity e) {
		if (e.getId() == null)
			return false;
		int index = findById(e.getId());
		if (index == -1) {// 未找到
			return false;
		} else {
			 marketList.remove(index);
		}
		return true;
	}
	@Override
	public void showCommodity() {
		for (Commodity e : marketList) {
			System.out.println(e);
		}
	}
	@Override
	public Commodity getItemById(Integer id) {
		if (id == null)
			return null;
		int index = findById(id);
		if (index == -1) {// 未找到
			return null;
		} else {
			return marketList.get(index);
		}
	}
	private int findById(Integer id) {
		for (int i = 0; i < marketList.size(); i++) {
			if (marketList.get(i).getId().equals(id))
				return i;
		}
		return -1;
	}
}

7.Main类

public class Main {

	public static void main(String[] args) {
		
		
		CartDao cart = new Cart();
		MarketDao market = new Market();
		int choice;

		while (true) {

			Scanner sc=new Scanner(System.in);
			System.out.println("*******************");
			System.out.println("请选择:");
			System.out.println("1.加购商品");
			System.out.println("2.进入购物车");
			System.out.println("按其他键退出");
			choice = sc.nextInt();
			if (choice == 1) {// 添加商品到购物车
			
				System.out.println("*******************");
				market.showCommodity();// 展示货架内的商品
				System.out.println("请选择你要加入购物车的商品id:");
				int id = sc.nextInt();
				if(market.getItemById(id)==null) {
					System.out.println("商品不存在!");
					continue;
				}
				System.out.println("请输入你要加购的数量:");
				int n = sc.nextInt();
				if(n > market.getItemById(id).getGoodsNum()){
					System.out.format("库存不足!!!(当前库存为%s)\n\n",market.getItemById(id).getGoodsNum());
					//System.out.println("库存不足!!!");
				}else {
				 cart.addCommodity(market.getItemById(id), n);
				 market.reduceCommodity(market.getItemById(id),n);
				 System.out.println("添加成功!");
				} 
				}else if (choice == 2) {
				while (true) {
					System.out.println("*******************");
					System.out.println("请选择:");
					System.out.println("1.删除一个商品");
					System.out.println("2.清空购物车");
					System.out.println("3.展示购物车");
					System.out.println("4.结算");
					System.out.println("其他键退出");
					int nextchoice = sc.nextInt();
					System.out.println("*******************");
					switch (nextchoice) {
					case 1:
						System.out.println("请输入需要删除的商品的id:");
						int in = sc.nextInt();
						cart.remove(in);
						System.out.println("删除成功!");
						break;
					case 2:
						cart.delete();;
						break;

					case 3:
						cart.diplayAll();// 展示购物车
						break;
					case 4:
						System.out.println("总金额为:" + cart.checkout());
						System.out.println("*******************");
						break;
					default:
						break;
					}
					if(nextchoice!=1&&nextchoice!=2&&nextchoice!=3) break;
				
				}

			} else {
				break;
			}
	
		}
	}

}

六.效果展示

1.运行页面:

2.加购商品:

3.购物车功能:

4.展示和删除商品:

5.结算: