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

小组成员:

徐佳澎、陈俊威

任务分配

任务成员
编码规范、前期调查、博客制作陈俊威
面向对象设计、功能设计徐佳澎

前期调查

1.京东商城中的购物车

在这里插入图片描述
每添加一件不同的商品到购物车中,购物车会生成一个条目,条目中显示商品名、单价、商品数量以及小计。购物车中还包括删除商品的功能,也就是直接删除一件商品的条目。

2.编码规范

阿里巴巴Java开发手册 终极版(1.3.0)

代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式
也要避免采用。
正例:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。
反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3

类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO /

DTO / VO / AO
正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion

方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。

正例: localValue / getHttpMessage() / inputUserId

包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。

正例: 应用工具类包名为 com.alibaba.open.util、类名为 MessageUtils(此规则参考
spring 的框架结构)

各层命名规约:

A) Service/DAO 层方法命名规约
1) 获取单个对象的方法用 get 做前缀。
2) 获取多个对象的方法用 list 做前缀。
3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save/insert 做前缀。
5) 删除的方法用 remove/delete 做前缀。
6) 修改的方法用 update 做前缀。
B) 领域模型命名规约
1) 数据对象:xxxDO,xxx 即为数据表名。
2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
3) 展示对象:xxxVO,xxx 一般为网页名称。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。

面向对象设计

在购物时首先要选定心仪的商品,而商品必定包含商品名、商品单价这两个基本属性,因此确定一个Commodity类,这个类用于设定取用某一个商品的名称以及单价。在选定心仪的商品后,放入购物车中,但是心仪的商品不一定只有一种,每一种不同的商品会在购物车中生成不同的条目,每一个条目显示了每一种商品的名称、单价、购买的数量,通常为了方便用户,购物车中的每一个条目还会提供一个“小计”让用户知道自己购买一种商品的总价。因此“购物车系统”要能够存储多种商品,每一种商品生成一个条目,显示商品的名称、单价、购买的数量以及小计。于是设定Cartitem类,用于存放购买的商品的条目信息。回到“购物车”系统本身,最基本的功能是加入、存储、删除商品的信息同时也需要显示购物车中的内容,因此设定Cart类,采用ArrayList的方法,ArrayList存储的信息是上面提到的Cartitem类的信息。在Cart类加入addList(添加商品到购物车)、Deleteitem(从购物车中删除某一商品)、以及total(计算购物车中的总价)方法。为了用户使用方便还可以加入“清空购物车”方法。

系统功能描述

在这里插入图片描述

结构图:
在这里插入图片描述

UML类图

在这里插入图片描述

面向对象的封装性

商品名称、单价是购物车中商品的基本属性,这些属性在程序的运行过程中是不可改变的,面向对象的封装性把类内部的信息统一保护起来,防止外包随意修改内部数据,保证数据的安全性,保证外部尽可能正确地使用这个类。
封装性包括属性的封装,方法的封装,类的封装,组件的封装。
在Commodity类中name、price、number的构造与调用以及Cartitem类中name、price、number的构造与调用体现了面向对象的封装性。

关键包结构与代码以及流程图

Commodity类,内含商品的属性(名称、价格以及数量)

public class Commodity {
	@Override
	public String toString() {
		return  no+" "+ name + " " + price + " " + number;
	}
	private String name;
	private int price;
	private int number;
	private int no;
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	private static int i=0;
	{
		i++;
	}
	 public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
	public Commodity(String name,int price,int number) {
		this.name=name;
		this.number=number;
		this.price=price;
		this.no=i;

	}
	public void decreaseNumber(int number) {
		this.number-=number;
		
	}
	
}



ShoppingCenter存储商城中拥有的商品的信息,以及判断商城中是否有某一商品的方法HaveCommodity以及打印商城商品的方法PrintfCommodity()

import java.util.ArrayList;

public class ShoppingCenter {
	private ArrayList<Commodity> hashList=new ArrayList<>();
	public ArrayList<Commodity> getList() {
		return hashList;
	}
	public void setList(ArrayList<Commodity> list) {
		this.hashList = list;
	}
	public void addList(String name,int price,int number)//添加商品
	{
		hashList.add(new Commodity(name, price, number));
	}
	{//为商场中添加商品
		hashList.add(new Commodity("黑人牙膏",10,5000));
		hashList.add(new Commodity("联想笔记本电脑",5000,1000));
		hashList.add(new Commodity("美的电饭煲",500,1000));
		hashList.add(new Commodity("蒙牛纯牛奶",50,50000));
		hashList.add(new Commodity("小米智能手机",2000,5000));
	}
	public int  haveCommodity(String name) {//判断商场中有没有该商品
		int i=0;
		for( i=0;i<hashList.size();i++) {
			if(hashList.get(i).getName().equals(name))
				{
				return i;
				}
				}
		return -1;
	}
	public int haveCommodity(int no) {//判断商场中有没有该商品
		int i=0;
		for( i=0;i<hashList.size();i++) {
			if(hashList.get(i).getNo()==no)
				{
				return i;
				}
				}
		return -1;
	}
	public void printCommoditys() {
		System.out.println("编号 名称 单价/元 库存");
		for(Commodity e:hashList)
			System.out.println(e);
	}

}

CartItem类,用于存放商品加入购物车后生成的条目的信息。存储购物车中某一类商品的商品名、单价、数量以及小计。

public class CartItem {
	private String name;
	@Override
	public String toString() {
		return no + " " + name + " " + price + " " + number  ;
	}
	private int price;
	private int number=0;
	private int no=0;
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public CartItem(String name,int price,int number,int no) {//构造方法
		this.name=name;
		this.price=price;
		this.number+=number;
		this.no=no;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
}

cart类,实现“购物车”功能的主要的代码,内含addList(添加商品到购物车)、Deleteitem(从购物车中删除某一商品)、以及total(显示购物车中的总价)的方法。

import java.util.ArrayList;
import java.util.Scanner;
public class Cart {
	private ArrayList<CartItem> hashItems=new ArrayList<>();
	public ArrayList<CartItem> getItems() {
		return hashItems;
	}
	public void setItems(ArrayList<CartItem> items) {
		this.hashItems = items;
	}
	public void addList(String name,int price,int number,int no)//添加商品进购物车
	{
		int index=0;//记录该商品是否已经添加进购物车
		int i=0;
		for( i=0;i<hashItems.size();i++) {
			if(hashItems.get(i).getName().equals(name))
				{index=1;
				break;
				}
				}
		if(	index!=1)
		hashItems.add(new CartItem(name, price,number,no));
		else {
		CartItem item=new CartItem(name,price,number,no);
		hashItems.set(i,item);
		}
	}
	public int totalPrice() {//计算价格
		int alltotal=0;
		for(int i=0;i<hashItems.size();i++) {
			alltotal+=hashItems.get(i).getNumber()*hashItems.get(i).getPrice();
		}
		return alltotal;
	}
	public void deleteItem(String name) {
		int index=0;//记录该商品是否已经添加进购物车
		int i=0;
		for( i=0;i<hashItems.size();i++) {
			if(hashItems.get(i).getName().equals(name))
				{index=1;
				break;
				}
				}
		if(	index==1)
			hashItems.remove(i);
		else {
					System.out.println("购物车中没有该商品,请重新选择!");
			}
	}
	public void deleteItem(int no) {
		int index=0;//记录该商品是否已经添加进购物车
		int i=0;
		for( i=0;i<hashItems.size();i++) {
			if(hashItems.get(i).getNo()==no)
				{index=1;
				break;
				}
				}
		if(	index==1)
			hashItems.remove(i);
		else {
					System.out.println("购物车中没有该商品,请重新选择!");
			}
	}
	public void decreaseItem(String name,Scanner sc) {
		int index=0;//记录该商品是否已经添加进购物车
		int i=0;
		for( i=0;i<hashItems.size();i++) {
			if(hashItems.get(i).getName().equals(name))
				{index=1;
				break;
				}
				}
		if(	index==1) {
			System.out.println("请输入你要减少的数量:");
			int s=sc.nextInt();
			hashItems.get(i).setNumber(hashItems.get(i).getNumber()-s);
			//items.remove(i);
		}		else {
					System.out.println("购物车中没有该商品,请重新选择!");
			}
		
	}public void DecreaseItem(int no,Scanner sc) {
		int index=0;//记录该商品是否已经添加进购物车
		int i=0;
		for( i=0;i<hashItems.size();i++) {
			if(hashItems.get(i).getNo()==no)
				{index=1;
				break;
				}
				}
		if(	index==1) {
			System.out.println("请输入你要减少的数量:");
			int s=sc.nextInt();
			hashItems.get(i).setNumber(hashItems.get(i).getNumber()-s);
			//items.remove(i);
		}		else {
					System.out.println("购物车中没有该商品,请重新选择!");
			}
		
	}
	public void clearCart() {//清空购物车
		this.hashItems.clear();
	}
	public void printfCartItems() {
		System.out.println("编号 名称 价格 数量 小计");
		for(CartItem e:hashItems)
			System.out.println(e);
		System.out.println("       总价:"+this.totalPrice());
	}
	
}

cart类中添加商品到购物车方法:

public void addList(String name,int price,int number)//添加商品进购物车
	{
		int index=0;//记录该商品是否已经添加进购物车
		int i=0;
		for( i=0;i<items.size();i++) {
			if(items.get(i).getName().equals(name))
				{index=1;
				break;
				}
				}
		if(	index!=1)
		items.add(new Cartitem(name, price,number));
		else {
		Cartitem item=new Cartitem(name,price,number);
		items.set(i,item);
		}
	}

流程图
在这里插入图片描述

cart类中删除购物车中商品方法

	public void deleteItem(String name) {
		int index=0;//记录该商品是否已经添加进购物车
		int i=0;
		for( i=0;i<items.size();i++) {
			if(items.get(i).getName().equals(name))
				{index=1;
				break;
				}
				}
		if(	index==1)
			items.remove(i);
		else {
					System.out.println("购物车中没有该商品,请重新选择!");
			}
	}

流程图:
在这里插入图片描述
cart类中减少购物车中商品的数量

	public void decreaseItem(String name,Scanner sc) {
		int index=0;//记录该商品是否已经添加进购物车
		int i=0;
		for( i=0;i<items.size();i++) {
			if(items.get(i).getName().equals(name))
				{index=1;
				break;
				}
				}
		if(	index==1) {
			System.out.println("请输入你要减少的数量:");
			int s=sc.nextInt();
			items.get(i).setNumber(items.get(i).getNumber()-s);
			//items.remove(i);
		}		else {
					System.out.println("购物车中没有该商品,请重新选择!");
			}
		
	}

流程图
在这里插入图片描述
显示购物车

	private static void cartPrintf(Cart buyer) {
		System.out.println("编号 名称 价格 数量 小计");
		for(int i=0;i<buyer.ShowCart().size();i++) 
		{
		System.out.println(buyer.ShowCart().get(i).toString()+" "+buyer.ShowCart().get(i).getPrice()*buyer.ShowCart().get(i).getNumber());
			//System.out.println(buyer.ShowCart().get(i).getName()+" "+buyer.ShowCart().get(i).getPrice()+" "+buyer.ShowCart().get(i).getNumber()+" "+buyer.ShowCart().get(i).getPrice()*buyer.ShowCart().get(i).getNumber());
	    }
		System.out.println("       总价:"+buyer.total());
	}
		public ArrayList<CartItem> ShowCart(){//输出购物车
		return this.items;
	}
	public int total() {//计算价格
		int alltotal=0;
		for(int i=0;i<items.size();i++) {
			alltotal+=items.get(i).getNumber()*items.get(i).getPrice();
		}
		return alltotal;
	}

流程图
在这里插入图片描述

清空购物车
因为使用ArryList来存储购物车中商品信息,因此要清空购物车只要清空items数组。

	public void clearCart() {//清空购物车
		this.items.clear();
	}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.系统需求 2 2.需求分析 4 2.1功能设置 4 2.2模块划分 5 2.3识别参与者和用例 6 2.3.1 顾客Customer用例图 7 2.3.2 系统管理员用例 13 2.3 静态结构模型 16 2.3.1 Customer 17 2.3.2Goods 18 2.3.3Order 19 2.3.4管理员 20 2.3.5标题title 20 2.3.6二级标题 21 2.3.7公共操作 22 2.3.8图 23 3.动态行为模式 23 3.1时序图 23 3.1.1顾客注册成为会员时序图 24 3.1.2顾客反馈信息时序图 25 3.1.3顾客浏览商品时序图 26 3.1.4顾客查询商品时序图 27 3.1.5顾客购买商品时序图 28 3.2.6管理员添加商品时序图 29 3.2.7管理员删除商品时序图 29 3.2.8管理员添加二级商品目录时序图 30 3.2.9管理员删除二级商品目录时序图 31 3.2.10管理员编辑促销产品时序图 31 3.2.11管理员编辑条款信息时序图 32 3.2.12管理员编辑购买流程时序图 33 3.2.13管理员删除会员时序图 34 3.2.14用户结算时序图 35 3.3.活动图 35 3.3.1用户顾客的活动图 35 3.3.2管理端管理员的活动图 36 3.4协作图 38 3.4.1顾客登录协作图 38 3.4.2顾客注册协作图 38 3.4.3顾客浏览商品协作图 39 3.4.4反馈信息协作图 39 3.4.5顾客查询商品协作图 40 3.4.6顾客购买商品协作图 40 3.4.7管理员删除会员协作图 41 3.4.8管理员添加商品协作图 41 3.4.9管理员添加商品标题协作图 42 3.4.10管理员删除商品协作图 42 3.4.11管理员删除标题协作图 43 3.4.12管理员编辑文本协作图 43 4.系统数据设计 44 4.1数据库的需求分析 44 4.2数据库的逻辑设计 44 5.参考文献: 47

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值