购物车程序的面向对象设计

1.人员分工

任务姓名
编码规范、前期调查与功能设计郑署滨
面向对象设计、博客制作涂睿哲

2.前期调查

1.先通过搜索商品来进行对商品的浏览
在这里插入图片描述

2.点进去商品可以看到商品的价格和具体内容
在这里插入图片描述
3.将所要购买的商品加入购物车后可以看到每个商品的价格和总的价格
在这里插入图片描述
4.也可以在购物车中讲商品进行删除
在这里插入图片描述

3.系统描述:

登录京东,然后在搜索栏中输入商品名称,搜索后可以看见商品的编号名称价格,然后将心仪的一定数量的商品添加至购物车,在购物车中可见看见所展示的商品,可以对一定数量的商品进行删除或者清空购物车,最后得出商品的总价结账

4.系统功能结构图

在这里插入图片描述

5.UML类图

在这里插入图片描述

6.本系统哪里体现了面向对象的封装性

例如,Commodity.java中:

public class Commodity {
   private Integer id;
   private String name;
   private String details;
   private int unitprice;
   private String type;
   public Commodity(Integer id,String name,String details,int unitprice,String type)
   {
	  this.id=id;
	  this.name=name;	
	  this.details=details;
	  this.unitprice=unitprice;
	  this.type=type;
   }//商品的基本信息
   @Override
	public String toString() {
		return "Commodity [id=" + id + ", name=" + name + ", details=" + details + ", unitprice=" + unitprice + ", type="
				+ type + "]";
	}
	public int getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public int getUnitprice() {
		return unitprice;
	}
	public void setUnitprice(int unitprice) {
		this.unitprice = unitprice;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
}

  • pubilc、private体现了面向对象的封装性:
    • 展示商品,通过分类找商品,通过id找商品,把物品添加到购物车,存储商品信息,购物车商品删除以及修改都可以体现面向对象的封装性

7.项目包结构与关键代码:

1.ShoppingMall

package ShoopingCar;

import java.util.ArrayList;
import java.util.List;

public class ShoppingMall {
   List<Commodity> commodities=new ArrayList<>();
   {
	   commodities.add(new Commodity(0,"羽毛球拍","5UG5,速度型",688,"sport"));
	   commodities.add(new Commodity(1,"香梨","清甜可口",25,"fruit"));
	   commodities.add(new Commodity(2,"剃须刀","(PHILIPS)飞利浦,三面刀头",188,"electrical"));
	   commodities.add(new Commodity(3,"手表","运动型机械手表,防水",488,"watch"));
	   commodities.add(new Commodity(4,"老干妈","辣子鸡味,好吃好吃",10,"flavouring"));
   }
   public  List<Commodity> showCommodities(){
	   return this.commodities;
   }
   public Commodity searchById(Integer id) {
	   int i=0;
	   int flag=1;
	   for(i=0;i<commodities.size();i++) {
		   if(commodities.get(i).getId()==(id)) {
			   return commodities.get(i);
		   }
	   }
	   if(flag==1)
		   System.out.println("抱歉,没有找到搜索的商品");
	return null;
   }//按id搜索商品
   public List<Commodity> searchByType(String type) {
	   int i=0;
	   List<Commodity> list=new ArrayList<>();
	   for(i=0;i<commodities.size();i++) {
		   if(commodities.get(i).getType().equals(type))
		   {
			   list.add(commodities.get(i));
		   }
	   }
	   return list;
   }

   }
  • 功能:
    • 展示商城的所有商品
    • 通过商品的分类寻找商品;否则无法输出
    • 输入商品的id,将该类商品招出并输出;id不存在则无法输出

2.Commodity

package ShoopingCar;

public class Commodity {
   private Integer id;
   private String name;
   private String details;
   private int unitprice;
   private String type;
   public Commodity(Integer id,String name,String details,int unitprice,String type)
   {
	  this.id=id;
	  this.name=name;	
	  this.details=details;
	  this.unitprice=unitprice;
	  this.type=type;
   }//商品的基本信息
   @Override
	public String toString() {
		return "Commodity [id=" + id + ", name=" + name + ", details=" + details + ", unitprice=" + unitprice + ", type="
				+ type + "]";
	}
	public int getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public int getUnitprice() {
		return unitprice;
	}
	public void setUnitprice(int unitprice) {
		this.unitprice = unitprice;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
}
  • 功能
    • 储存所有商品的信息:商品名称,编号,商品价格,种类

3.ShoppingCart

package ShoopingCar;

import java.util.ArrayList;
import java.util.List;

public class ShoppingCart {
    private List<ItemEntry> itemList = new ArrayList<>();

    public void addToCart(Commodity e) {

        int index = findById(e.getId());
        if (index == -1) {
            itemList.add(new ItemEntry(e));

        } else {
            itemList.get(index).increase();
        }
    }

    public List<ItemEntry> getItemList() {
        return itemList;
    }
    public List<ItemEntry> emptyCart(){
        itemList.clear();
        return itemList;
    }
    public List<ItemEntry> seeMyCart() {
        return itemList;
    }



    public boolean remove(Integer id) {
        if (id == null)
            return false;
        int index = findById(id);
        if (index == -1) {// 未找到
            return false;
        } else {
            ItemEntry entry = this.itemList.get(index);
            if (entry.getPiece() <= 1) {
                this.itemList.remove(index);
            }
        }
        return true;
    }

    private int findById(Integer id) {
        int index = -1;
        if (itemList.size() > 0) {
            for (int i = 0; i < itemList.size(); i++) {
                if (itemList.get(i).getItem().getId() == id)
                    index = i;
            }
        }
        return index;
    }
}

4.ShoppingCart的内部类ItemEntry

package ShoopingCar;
public class ItemEntry {
        Commodity item;
        int piece;

        public ItemEntry(Commodity item) {
            this.item = item;
            piece = 1;
        }       



		public void increase() {
            piece++;
        }

        public Commodity getItem() {
			return item;
		}

		public void setItem(Commodity item) {
			this.item = item;
		}

		public int getPiece() {
			return piece;
		}

		public void setPiece(int piece) {
			this.piece = piece;
		}

		public void decrease() {
            piece--;
        }
        public String toString() {
            return "ItemEntry [item=" + item + ", piece=" + piece + "]";
        }

    }
  • 功能
    • 将商品添加到购物车
    • 查看购物车现有的商品
    • 清空购物车
    • 移除商品
  • 内置类ItemEntry
    • 储存购物车的商品和商品数量
    • 将新加入的商品数量定为1
    • 操作商品数量
    • 输出商品信息

5.Menu

package ShoppingCar;

public class Menu {
	
	public static void beginMenu() {
		System.out.println("  **********************************");
		System.out.println("  ******       欢迎光临!           *****");
		System.out.println("  **********************************");
		System.out.println("您有什么需要?");
		System.out.println("1)商品展示");
		System.out.println("2)商品查询(类型)");
		System.out.println("3)商品查询(id)");
		System.out.println("4)添加商品至购物车");
		System.out.println("5)减少购物车商品的数量");
		System.out.println("6)查看购物车");
		System.out.println("7)清空购物车");
		System.out.println("8)购物车预结算");
	}
 
	public static void endMenu() {
		System.out.println("  **************************************");
		System.out.println("  ****      谢谢惠顾,欢迎下次光临!    ****");
		System.out.println("  **************************************");
	}

}

6.Main

package ShoppingCar;

import java.util.List;
import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
		Scanner c = new Scanner(System.in);
		Scanner pause = new Scanner(System.in);
		ShoppingMall test = new ShoppingMall();
		ShoppingCart test1 = new ShoppingCart();
		List<Commodity> list = test.showCommodities();
		while(true) {
			Menu.beginMenu();
			System.out.println("请输入你的功能选择");
			int choose = c.nextInt();
			switch(choose) {
			case 1://展示商品
				for (Commodity temp : list) {
					System.out.println(temp);
				}
				System.out.println("输入任意数字,按回车返回主界面");
				String Pause = pause.next();
				break;
			case 2://按类型查询商品
				System.out.println("请输入你要查询的类型");
				String name = c.next();
				System.out.println(test.searchByType(name));
			    System.out.println("输入任意数字,按回车返回主界面");
				Pause = pause.next();
			    break;
			case 3://按id查询商品
				System.out.println("请输入你要查询的id");
				System.out.println(test.searchById(c.nextInt()));
				System.out.println("输入任意数字,按回车返回主界面");
				Pause = pause.next();
				break;
			case 4://添加商品到购物车
				System.out.println("请输入你要添加的商品的id,如果输入-1则结束添加商品");
				while(true) {
					int flag = c.nextInt();
					if(flag==-1) {
						System.out.println("输入任意数字,按回车返回主界面");
						Pause = pause.next();
						break;
					}
					else {
	                    test1.addToCart(list.get(flag));
					}
				}
				break;
			case 5://减少购物车商品的数量
				System.out.println("请输入你要减少的商品的id");
				test1.remove(c.nextInt());
				System.out.println("输入任意数字,按回车返回主界面");
				Pause = pause.next();
				break;
			case 6://查看购物车
				List<ItemEntry> list1 = test1.seeMyCart();
				for (ItemEntry temp1 : list1) {
					System.out.println(temp1);
				}
				System.out.println("输入任意数字,按回车返回主界面");
				Pause = pause.next();
				break;
			case 7://清空购物车
				test1.emptyCart();
				System.out.println("输入任意数字,按回车返回主界面");
				Pause = pause.next();
				break;
			case 8://购物车预结算
				List<ItemEntry> list2 = test1.seeMyCart();
				list2.get(0).getItem().getUnitprice();
				int temp=0;
				for (ItemEntry temp1 : list2) {
					temp=temp1.getPiece()*temp1.getItem().getUnitprice()+temp;
				}	
				System.out.println("总价为:"+temp);
				System.out.println("输入任意数字,按回车返回主界面");
				Pause = pause.next();
				break;
		}
	}
}
	
	
	
	
	
	
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值