简单购物车设计

简单的购物车设计

分工:

任务 姓名
商品类、购物车类、面向对象设计、功能设计、代码实现、博客编写 组长:陈曦
菜单代码的编写、编码规范检查、前期调查、思维导图的构建 林伟涛

1.前期调查:对于商品来说,有几个属性是最基本的,比如说商品的名称,商品的编号,价格等等,而对于购物车来说呢,我们需要他能完成几个功能,比如:增加删除商品和商品的数量,还有最重要的就是结算功能。
思维导图:
简单购物车设计_第1张图片

2.类的设计:对于商品类,我给了四个属性:商品的id,商品名称,商品单价,还有商品的数量。

    private int productId;//商品id
	private String name;//商品名称
	private double price;//商品单价
	private int count;//商品数量

对于购物车来说呢,我用一个ArrayList容器来存放这些商品。

ArrayList<Product> Pro=new ArrayList<>();

3.功能介绍

(1)首先是菜单的模块

public void showMenu()
	{
		System.out.println("==================================================================");
        System.out.println("请您选择如下命令进行操作:");
        System.out.println("1.添加商品到购物车 add");
        System.out.println("2.查看购物车商品 query");
        System.out.println("3.修改商品的数量 amend");
        System.out.println("4.删除相应的商品 delete");
        System.out.println("5.结算购物车商品金额 pay");
        System.out.println("6.结束程序 end");
        System.out.println("==================================================================");
	}

(2)增加商品的模块

public void addProduct(Product p)
	{
		Pro.add(p);
	}

(3)展示购物车的模块

public void show()
	 {
		System.out.println("---------------购物清单---------------");
		for(int i=0;i<Pro.size();i++)
		{
		 System.out.println("序号:"+Pro.get(i).getProductId()+" 名字:"+Pro.get(i).getName()+" 价格:"+Pro.get(i).getPrice()+" 购买数量:"+Pro.get(i).getCount());
	 }
	 }

(4)修改商品信息的模块

public int amendAmount(int id, int amount)
	{
		
		
			if(searchProduct(id)==true)
			{
				
				if(amount>Pro.get(id-1).getCount())
				{
					return -1;
				}
				else
				{
					int cartAmount=Pro.get(id-1).getCount();
					Pro.get(id-1).setCount(cartAmount-amount);
					return 1;
				}
			}
		
		return 0;
	}
	

(5)删除商品的模块

public void deleteProduct(int pId)
	{
		boolean flag=searchProduct(pId);
		if(flag==true)
		{
			System.out.print("找到此删除的商品!");
			Pro.remove(pId-1);
			System.out.println("删除成功!");
		}
		else
		{
		System.out.println("未找到此商品!请重新输入!");
	}
	}

(6)计算总价的模块

public double getTotal()
	{
		double total=0;
		for (int i = 0; i < Pro.size(); i++)
		{
		    	total+=Pro.get(i).getPrice()*Pro.get(i).getCount();
		}
				return total;
				
	}
}

(7)遍历寻找元素模块

public boolean searchProduct(int id)
	{
		boolean flag=false;
		for(int i=0;i<Pro.size();i++)
		{
			if(Pro.get(i).getProductId()==id)
			{
				flag=true;
			}
		}
		return flag;
	}

测试模块:这个模块我使用了一个switch case语句

public class Main {

	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
    Scanner sc=new Scanner(System.in);
    ShoppongCart p=new ShoppongCart();
    Product p1=new Product(1,"苹果",3.5,5);
    Product p2=new Product(2,"香蕉",2.0,4);
    Product p3=new Product(3,"芒果",4.5,2);
    p.showMenu();
    Thread.sleep( 1000 );
    while(sc.hasNextInt())
    {
    int select=sc.nextInt();
    switch (select) 
    {
	case 1:
	{
		p.addProduct(p1);
	    p.addProduct(p2);
	    p.addProduct(p3);
	    System.out.println("添加成功!");
		break;
	}
	case 2:
	{
		p.show();
		break;
	}
	case 3:
	{
		System.out.println("请输入您需要修改项目的编号和数量:");
		int amendId=sc.nextInt();
		int aAmount=sc.nextInt();
		int flag=0;
		flag=p.amendAmount(amendId,aAmount);
		if(flag==-1)
			System.out.println("您所删除的数量大于购物车里的数量!请重新输入!");
		else if(flag==0)
		System.out.println("未找到此商品,请重新输入!");
		else
			System.out.println("修改成功!");break;
		
	}
	case 4:
	{
		System.out.print("请输入您所需删除的商品的编码:");
		int deleteId=sc.nextInt();
	    p.deleteProduct(deleteId);
	    
	    break;
	}
	case 5:
	{
		System.out.println("您所选择的商品总价为:"+p.getTotal()+"元");break;
	}
	case 6:
	{
		System.out.println("谢谢惠顾!");System.exit(0);break;
	}
	
	default:System.out.println("输入错误!请重新输入!");
	}
    Thread.sleep( 1000 );
    }
	}

}

4.展示运行结果

简单购物车设计_第2张图片

5.反思和总结

(1)团队间的配合默契还欠缺,有一些代码写的组员接手过来比较难直接使用。

(2)代码能力还需要加强,有些功能卡了很久还没写出来。

(3)对setget的使用还有些陌生,使用起来没有很得心应手。

(4)本来我们一直想做一个清屏的操作,百度之后发现基本都是对于cmd界面的清屏,这里也有点遗憾。

(5)从这次实践可以领悟到,在函数模块内功能要越单一越好,免得后期要调用此模块时遇到很多难处和不便。

你可能感兴趣的:(java,前端,c++)