大家一起做的工作有:
前期调查以及类框架设计的考量。
林进源 | 完成商品总类的设计和子类的设计,负责UML图的绘制,负责Shop类的设计。 |
---|---|
骆锟宏 | 完成ShoppingCart类的书写,完成对商品类和子类的修正,完成MainOperating类,完成博客的撰写。 |
该部分属于商城类的部分,由于本次时间等因素的原因,我们暂时把目光聚焦在购物车类上,这个待实现。
在本环节的展示过程中我们对商品上架的部分暂时以在Main类中直接新建对应的商品实例来代替。
goodsID的形式也暂时以直接给定的形式来定义。
一段用来描述系统功能与流程的文字,用红色字代表可能的对象(名词)或属性,用蓝色字代表可能的方法(动词)。
首先, 本系统创建了一个购物车的实例。
其次, 本系统通过在流程控制模块中声明并创建了book,clothing,eProducts,food这四个商品。
类的关键属性与方法、类与类之间的关系。每个类的功能描述。可使用ProcessOn绘制。
图例:
商品父类:
商品子类:
商品父类和子类的继承和多态的关系:
购物车类:
整体的一个初步的功能框架的设定:
可选:哪里体现了继承与多态。
(为什么要这样设计包结构)
基于我们前期对现在已有购物网站的调查得出从后端功能实现角度有两条主要的主线:
其一是商品应该首先是载入到商城中由载入商城的过程中产生一个唯一的代表该商品的唯一的ID号,这个过程是在供给端上架了可以供用户去选择和购买的商品。
其二是当商品已经上架到商城后,在购买端,我们用户根据在商城中对商品信息的了解,最后做出选择把商品加入我们自己的购物车,作为可能购买的商品。
以这两条为主线展开我们对这个购物车大作业的设计。而又由于部分时间的因素,我们暂时不进行商城这个包的代码的撰写和设计,我们优先把焦点集中到购物车类的撰写和方便对购物车类的功能的测试上,我们在体现出我们掌握了继承和多态的知识的前提下,简略地设计了几个具体的子类,以在时间不足的情况下,体现出我们对继承和多态这一知识的掌握。
之所以商品要独立成一个包是考虑到拓展性上,我们觉得商品的子类在实际情况下是可以进行无限地拓展地,所以独立设计一个包会更加合适。
另外,购物车类要独立设计成一个类的考虑有两点,第一点是购物车的很多功能是自成一体的,所以出于独立性的考虑要独立撰写一个包;第二点是,考虑到拓展性上,其实购物车类会是用户类的一个子类,购物车构成一个用户的功能之一。
最后,Main类其实是在前端的操作框架没有实现之前,用来测试整个程序的具体功能的一个测试包,后续加入操作界面后,这个Main类就会被具体代替。
(如网购物车添加、删除商品)的流程图与关键代码。
package shoppingCar; import java.util.HashMap;//引入哈希表作为购物车的数据结构基础。 import java.math.BigDecimal;//用来表示大数。 import product.*;//引用product包 public class shoppingCar { private BigDecimal totalPrice = BigDecimal.valueOf(0.0); public HashMap<String, Commodity> ShoppingCar = new HashMap<>(); public void AddIntoSPC(Commodity commodity) { if (!ShoppingCar.containsKey(commodity.getGoodsID()))// 若商品不存在 { ShoppingCar.put(commodity.getGoodsID(), commodity); } commodity.setNumb(commodity.getNumb() + 1);// 商品数量加一 } public void GetTotalPrice() { for (Commodity commodity : ShoppingCar.values()) { totalPrice = totalPrice.add(commodity.getPrice().multiply(BigDecimal.valueOf(commodity.getNumb()))); } System.out.println("The total price is:" + totalPrice); } public void ShowSPC() {//展示购物车 if (ShoppingCar.isEmpty()) { System.out.println(); System.out.println("---------------------------------------------------------------------------"); System.out.println("您的购物车当前为空~"); System.out.println("---------------------------------------------------------------------------"); System.out.println(); } else { int i = 1; System.out.println(); System.out.println("---------------------------------------------------------------------------"); for (Commodity commodity : ShoppingCar.values()) { System.out.println("NO." + i + " " + commodity.toString()); i++; } System.out.println("---------------------------------------------------------------------------"); System.out.println(); } } public void ClearSPC() { ShoppingCar.clear(); System.out.println("———清空购物车完毕!———"); } }
double
这类数据类型是有浮点误差的缺点的,所以在价格的数据类型上我们细致地选择了: