简单的购物车设计
分工:
任务 | 姓名 |
---|---|
商品类、购物车类、面向对象设计、功能设计、代码实现、博客编写 | 组长:陈曦 |
菜单代码的编写、编码规范检查、前期调查、思维导图的构建 | 林伟涛 |
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.展示运行结果
5.反思和总结
(1)团队间的配合默契还欠缺,有一些代码写的组员接手过来比较难直接使用。
(2)代码能力还需要加强,有些功能卡了很久还没写出来。
(3)对set
和get
的使用还有些陌生,使用起来没有很得心应手。
(4)本来我们一直想做一个清屏的操作,百度之后发现基本都是对于cmd
界面的清屏,这里也有点遗憾。
(5)从这次实践可以领悟到,在函数模块内功能要越单一越好,免得后期要调用此模块时遇到很多难处和不便。