本次任务,按小组完成。每组最多2人。
目标:
学会使用讲故事的方式找到系统中可能包含的类与属性
理解封装
任务:
编码规范:使用英文对类、方法、包进行命名(查英文词典,不得出现拼音)。参考JAVA编码规范,进行类命名,方法命名、包命名,合适的缩进,有意义的变量名。见参考资料1中的1.1-1.4。
前期调查与功能设计:调查京东商城或者亚马逊商城中的购物车,体验从搜索商品、加入购物车、操作购物车、下单全过程,思考该过程可能包含的类。演示中要求图多字少。
面向对象设计:以面向对象的方法编写购物车代码。先设计有什么类,再考虑什么方法放到那个类中合适。初期可不用完成具体功能,只要将类名、类之间的关系、方法名设计好即可。见参考资料2、3。注意学习类与类之间的关系(先重点掌握关联关系与依赖关系)。
PPT制作或博客制作并上台演示:演示前,请务必自己在同学面前预演一遍。
注意:初期将重点放在面向对象设计、命名规范。
以上任务,请小组组长明确分工,课堂展示时教师将针对每个组员负责的部分进行提问检查。
未完成所负责任务,考核不合格。
分工表格示例(请组长将上述任务妥善分配):
任务 | 姓名 |
---|---|
编码规范、前期调查与功能设计 | 卢伟杰 |
面向对象设计、PPT制作或博客制作 | 胡旻轩 |
- 1.前期调查。
- 2.系统功能结构图。
- 3.系统描述:一段用来描述系统功能与流程的文字,用红色字代表可能的对象(名词)或属性,用蓝色字代表可能的方法(动词)。
- 4.UML类图:类的关键属性与方法、类与类之间的关系。每个类的功能描述。可使用ProcessOn绘制。
- 5.本系统哪里体现了面向对象的封装性。
- 6.项目包结构与关键代码:项目的包结构(为什么要这样设计包结构),主要功能(如网购物车添加、删除商品)的流程图与关键代码。
1.前期调查。
通过对京东商城的调查,商城需要具有搜索、添加购物车功能,购物车的属性有商品名、商品数量以及商品价格;且购物车需要具有添加商品、删除商品、计算商品总价格和结算生成订单功能。
2.系统功能结构图。
购物流程图
购物车功能结构图
3.系统描述:一段用来描述系统功能与流程的文字,用红色字代表可能的对象(名词)或属性,用蓝色字代表可能的方法(动词)。
- 首先进行搜索商品,可通过商品名称或编号进行相应的搜索,然后可添加至购物车中,即可在购物车中进行商品的添加、删除、以及进行结算。
4.UML类图:类的关键属性与方法、类与类之间的关系。每个类的功能描述。可使用ProcessOn绘制。
5.本系统哪里体现了面向对象的封装性。
- 商品的属性上体现了面对对象的封装,private就是一种私有化的封装。
class shangping {
private long bianhao; //商品编号
private String name; //商品名称
private int shuliang; //商品数量
private double jiage; //商品价格
private String leibie; //商品类别
public long getBianhao() {
return bianhao;
}
public void setBianhao(long bianhao) {
this.bianhao = bianhao;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getShuliang() {
return shuliang;
}
public void setShuliang(int shuliang) {
this.shuliang = shuliang;
}
public double getJiage() {
return jiage;
}
public void setJiage(double jiage) {
this.jiage = jiage;
}
public String getLeibie() {
return leibie;
}
public void setLeibie(String leibie) {
this.leibie = leibie;
}
@Override
public String toString() {
return "shangping [bianhao=" + bianhao + ", name=" + name + ", shuliang=" + shuliang + ", jiage=" + jiage
+ ", leibie=" + leibie + "]";
}
public shangping(long bianhao, String name, int shuliang, double jiage, String leibie) {
super();
this.bianhao = bianhao;
this.name = name;
this.shuliang = shuliang;
this.jiage = jiage;
this.leibie = leibie;
}
}
6.项目包结构与关键代码:项目的包结构(为什么要这样设计包结构),主要功能(如网购物车添加、删除商品)的流程图与关键代码。
- 商品的加购
private static void jiagou(yonghu loginuser, int i, shangcheng sc) {
// TODO Auto-generated method stub
gouwuche gou = new gouwuche(sc.getShangpings().get(i), 1);
sc.getShangpings().get(i).setShuliang(sc.getShangpings().get(i).getShuliang() - 1);
loginuser.getGouwuches().add(gou);
}
- 商品的查询
private static int chaxun(String searchname, shangcheng sc) {
// TODO Auto-generated method stub
int s = -1;
for (int i = 0; i < sc.getShangpings().size(); i++) {
if (sc.getShangpings().get(i).getName().equals(searchname)) {
System.out.println("编号:" + sc.getShangpings().get(i).getBianhao());
System.out.println("名称:" + sc.getShangpings().get(i).getName());
System.out.println("价格:" + sc.getShangpings().get(i).getJiage());
System.out.println("库存:" + sc.getShangpings().get(i).getShuliang());
System.out.println("类别:" + sc.getShangpings().get(i).getLeibie());
s = i;
}
}
return s;
}
- 商品的结算
private static double jiesuan(yonghu loginuser) {
// TODO Auto-generated method stub
double sum = 0;
for (int i = 0; i < loginuser.getGouwuches().size(); i++) {
sum += loginuser.getGouwuches().get(i).getShuliang()
* loginuser.getGouwuches().get(i).getShangping().getJiage();
}
return sum;
}
- 基本功能的实现:1-加入购物车,2-查询商品,3-结算,4-退出
if (user) {
System.out.println("登录成功");
while (true) {
System.out.println("1-查看购物车" + "\t" + "2-查询商品" + "\n" + "3-结算" + "\t" + "4-退出");
int a = input.nextInt();
yonghu loginuser = getuser(name, sc);
if (a == 1) {
showgou(loginuser);
} else if (a == 2) {
System.out.println("请输入查询商品信息:");
String searchname = input.next();
int i = chaxun(searchname, sc);
if (i == -1) {
System.out.println("没有此商品");
} else {
System.out.println("是否加入购物车 是/否");
String jiagou = input.next();
if (jiagou.equals("是")) {
jiagou(loginuser, i, sc);
} else {
continue;
}
}
} else if (a == 3) {
showgou(loginuser);
System.out.println();
System.out.println(jiesuan(loginuser));
} else {
break;
}
}
} else {
System.out.println("登录失败");
}
}