小组成员:
徐佳澎、陈俊威
任务分配
任务 | 成员 |
---|---|
编码规范、前期调查、博客制作 | 陈俊威 |
面向对象设计、功能设计 | 徐佳澎 |
前期调查
1.京东商城中的购物车
每添加一件不同的商品到购物车中,购物车会生成一个条目,条目中显示商品名、单价、商品数量以及小计。购物车中还包括删除商品的功能,也就是直接删除一件商品的条目。
2.编码规范
代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式
也要避免采用。
正例: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();
}