第1次任务-面向对象设计(购物车) 小组分工: 编码规范:叶鸿章 前期调查与功能设计:吴潮汇 面向对象设计与UML制作:张赓 PPT制作、演示:陈伟杰 1.前期调查 2.系统功能结构图 3
第1次任务-面向对象设计(购物车)
小组分工:
- 编码规范:叶鸿章
- 前期调查与功能设计:吴潮汇
- 面向对象设计与UML制作:张赓
- PPT制作、演示:陈伟杰
1.前期调查
2.系统功能结构图
3.系统描述
4.UML类图
5.面向对象的封装性
体现封装性的几个点:
商品类中的属性都设为private,外部无法直接访问到它的属性,只能通过getters来访问
购物车类里的查找函数findByid设为private,因为该查找函数返回的结果只服务于此类里的 增加/移除 等操作,外部没有必要访问到该函数返回值
购物车类里的移除方法removeFromMyCart返回的是boolean值,移除成功或失败都不会直接在方法里打印出类似“移除成功”“移除失败”的效果,而是返回true或false的值给外部
订单类里的评分/评论方法若直接写在商品类中,可以省去一定代码量,更加容易实现,但不符合逻辑,因为不是“商品给XX评分评论”,而是“用户通过订单对商品评分评价”
6.项目包结构与主要功能流程图
项目包结构:
主要功能流程图:
7.关键代码
购物车类ShoppingCart(只展示方法)
public class ShoppingCart { public void addToMyCart(Commidity commidity) { // 添加商品至购物车 ItemEntry tem = new ItemEntry(commidity); int index = this.findByid(commidity.getId()); if (index == -1) { // 若购物车不存在该商品,则直接增加一条ItemEntry this.EntryList.add(tem); } else {// 若购物车存在该商品,直接在对应ItemEntry中数量+1 this.EntryList.get(index).increase(); } } public boolean removeFromMyCart(int id) { // 从购物车中移除商品 int index = this.findByid(id); if (index == -1) { // 若购物车不存在该商品,返回false return false; } else { // 若购物车存在该商品 if (this.EntryList.get(index).getNum()>1) { this.EntryList.get(index).decrease();// 该商品选中数量>1,则对应ItemEntry数量-1 } else { this.EntryList.remove(index);// 该商品选中数量=1,则直接移除对应ItemEntry } return true; } } public void showMyCart() { // 展示购物车 for(ItemEntry now:EntryList) { System.out.println(now.toString()); } } public double countTotalPrice() { //计算购物车中所有商品的总价 for(ItemEntry now:EntryList) { totalPrice += now.getPrice(); } return this.totalPrice; } public void generateOrder(int index) { //生成一条相应订单给user ItemEntry tem = this.EntryList.get(index); Order order = new Order(tem); user.getOrderList().add(order); this.totalPrice -= tem.getPrice();//购物车总价减去该订单价格 this.EntryList.remove(index);//购物车中移除该商品条目 } private int findByid(int id) { // 若购物车存在此商品,返回下标;若不存在,返回-1 int index = -1; if ( this.EntryList.size()>0) { for(int i = 0; i<this.EntryList.size();i++) { if ( this.EntryList.get(i).getItem().getId() == id) { index = i; break; } } } return index; } }
商品条目类ItemEntry(省略setter/getter)
public class ItemEntry {// 所选商品的信息 private Commidity commidity; private double price; private int num; public ItemEntry(Commidity commidity){ this.price = commidity.getPrice(); } public void increase() { // 该条目数量+1 num++; this.price += this.price;//该条目总价改变 } public void decrease() { // 该条目数量-1 num--; this.price -= this.price;//该条目总价改变 } }