第1次任务:购物车程序的面向对象设计
0. 人员分工
任务 | 姓名 |
---|---|
编码规范、前期调查与功能设计 | 余锋 |
面向对象设计、PPT制作或博客制作 | 李奇 |
1. 前期调查
以京东购物为例,我们搜索数据结构和JDK学习笔记,这里就需要一个商品的类,Commodity
将他们加入购物车,需要一个购物车类,ShoppingCart
我们发现这里的数量可以调整,且与后来提交的订单有直接关系
2. 系统功能结构图
3. 系统描述
描述
用户在网上商城搜索并浏览商品, 一旦看到中意的商品可将商品放入购物车,可放多个。并可在购物车中增删商品、获得所有商品价格,最后可点击结算生成订单。
类
用户、商城、商品、购物车、订单
方法
放入,增删,结算,浏览,搜索
4. UML类图与代码
Commodity
字段名字、价格、库存stock私有化,体现封装性
package shop;
//商品
public class Commodity {
private String name; //名称
private double price; //价格
private int stock; //库存
public Commodity(String name, double price, int stock) {
this.name = name;
this.price = price;
this.stock = stock;
}
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 int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
}
ShoppingCart
用哈希表将商品存入购物车,其中有加入商品,删除商品,清空购物车,结算订单
package shop;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
//购物车
public class ShoppingCart {
private HashMap<Commodity,Integer> shoppingCartHashMap; //哈希容器,前者是商品,后者是数量
//将num个商品加入购物车
public void addCommodity(Commodity commodity,int num)
{
shoppingCartHashMap.merge(commodity,num,Integer::sum);
//merge()它将新的值赋值到 key (如果不存在)或更新给定的key 值对应的 value,最后的是remappingFunction,返回参数总和
}
//将商品移除购物车
public void removeCommodity(Commodity commodity,int num)
{
shoppingCartHashMap.remove(commodity);
}
//计算商品总价
public int getPrice()
{
int sum=0;
for (Commodity commodity: shoppingCartHashMap.keySet()) {
sum+=commodity.getPrice()*shoppingCartHashMap.get(commodity); //单价*键值(即数量)
}
return sum;
}
//清空购物车
public void clearShoppingCart(){
shoppingCartHashMap.clear();
}
}
Customer
用户名和购物车私有,新建时初始化购物车。
package shop;
//顾客
public class Customer {
private String userName;
private ShoppingCart shoppingCart=new ShoppingCart();
public Customer(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public ShoppingCart getShoppingCart() {
return shoppingCart;
}
}
5. 其他
目前将所有类放在shop包名下,因此可以更好得互相调用