第1次任务:购物车程序的面向对象设计

本次任务,按小组完成。每组最多2人。

目标:

学会使用讲故事的方式找到系统中可能包含的类与属性
理解封装

任务:

编码规范:使用英文对类、方法、包进行命名(查英文词典,不得出现拼音)。参考JAVA编码规范,进行类命名,方法命名、包命名,合适的缩进,有意义的变量名。见参考资料1中的1.1-1.4。
前期调查与功能设计:调查京东商城或者亚马逊商城中的购物车,体验从搜索商品、加入购物车、操作购物车、下单全过程,思考该过程可能包含的类。演示中要求图多字少。
面向对象设计:以面向对象的方法编写购物车代码。先设计有什么类,再考虑什么方法放到那个类中合适。初期可不用完成具体功能,只要将类名、类之间的关系、方法名设计好即可。见参考资料2、3。注意学习类与类之间的关系(先重点掌握关联关系与依赖关系)。
PPT制作或博客制作并上台演示:演示前,请务必自己在同学面前预演一遍。

注意:初期将重点放在面向对象设计、命名规范。
以上任务,请小组组长明确分工,课堂展示时教师将针对每个组员负责的部分进行提问检查。
未完成所负责任务,考核不合格。

分工表格示例(请组长将上述任务妥善分配):

任务 姓名
编码规范、前期调查与功能设计 胡旻轩
面向对象设计、PPT制作或博客制作 卢伟杰

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-查看购物车" + "	" + "2-查询商品" + "
" + "3-结算" + "	" + "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("登录失败");
		}
 
	}

原文地址:https://www.cnblogs.com/eau2077/p/15376270.html