面向对象第一次大作业-购物车 组员:高旭 林语晴

一.前期调查

  • 进入京东商城(Menu)有可以根据商品名搜索商品(Commodity)的搜索界面。

  • 也有可以根据种类(Type)查找商品(Commodity)的界面。

  • 点击其中一个种类(Type)会出现该类所有商品(Commodity)。

  • 根据搜索框也能精确搜索需要的商品。

可以点击加入购物车,然后此商品就会出现在自己的购物车(ShoppingCart)内,可以选择继续添加商品,也可以选择直接结算。

购物车内,可以删除(cart.remove)自己不想买的商品,也可以一键删除(clearCart)。

参考来源:京东

二.参考设计

主要框架是学银网课平台上的代码。进行完善。
也参考了优秀作业的一部分。

已经设计好的点:

①商品的类(其中有商品名和价格)。
②商品购买一系列流程(但仅提供了流程并未代码实现)。
③商品种类。

增加的点:

①增加商品唯一的编号。
②完善流程中以下代码。

  • Ⅰ.商品可以根据自己的Type进行查找。
  • Ⅱ.把商品存放入购物车中。
  • Ⅲ.逐个删除购物车内的东西或者全部删除。
  • Ⅳ.显示购物车中的商品。
  • Ⅴ.显示商城所有物品
  • Ⅵ.根据编号查找物品

三.购物车系统流程图。

业务流程图

类图

四.代码实现

①Main

package Shopping;

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


public class Main {
	public static void main(String[] args) {
		Mall Mall =  new Mall();
		ShoppingCart cart = new ShoppingCart();
		Scanner scanner = new Scanner(System.in);
		boolean flag = true;
		while (flag) {
			System.out.println("***************选项表***************");
			System.out.println("          0、显示所有商品");
			System.out.println("          1、添加商品到购物车");
			System.out.println("          2、删除购物车的商品");
			System.out.println("          3、按类型查找商品");
			System.out.println("          4、按编号查找商品");
			System.out.println("          5、清空购物车");
			System.out.println("          6、查看购物车的商品");
			System.out.println("          7、退出");
			System.out.print("请输入选项:");
			int choice = scanner.nextInt();
			switch (choice) {
			case 0:
				//展示商城
				for(int i=0;i<Mall.showGoods().size();i++) 
				{
					System.out.print("商品名称:" + Mall.showGoods().get(i).getName() + "  ");
					System.out.print("商品价格:" + Mall.showGoods().get(i).getPrice() + "  ");
					System.out.print("商品编号:" + Mall.showGoods().get(i).getId() + "  ");
					System.out.println("商品类型:" + Mall.showGoods().get(i).getType());
				}
				break;
			case 1:
				//根据编号添加购物车
				System.out.println("输入您想添加的商品编号");
				Scanner sc1 = new Scanner(System.in);
				 int i = sc1.nextInt();
				 Commodity addGood = Mall.searchById(i);
				 cart.addToCart(addGood);
				 System.out.println("商品添加成功!");
				 break;
			case 2:
				 //删除购物车一件商品
				System.out.println("输入您想刪除的商品编号"); 
				Scanner sc2 = new Scanner(System.in);
				 int j = sc2.nextInt();
				 
				 if(cart.remove(j))
					{
						System.out.println("删除成功");
					}
					else 
						System.out.println("购物车中无此商品");
				break;
			case 3:
				//按照类型查找
				System.out.println("输入您想搜索的商品类型:");
				Scanner sc3 = new Scanner(System.in);
				String str = sc3.next();
				List<Commodity> list1 = new ArrayList<>();
				list1 = Mall.searchByType(str);
				if(null!=list1&&list1.size()>0) 
				{
					System.out.println("搜索结果:");
					for(int i2=0;i2<list1.size();i2++) 
					{
						System.out.print("商品名称:" + list1.get(i2).getName() + "  ");
						System.out.print("商品价格:" + list1.get(i2).getPrice() + "  ");
						System.out.print("商品编号:" + list1.get(i2).getId() + "  ");
						System.out.println("商品类型:" + list1.get(i2).getType());
					}
				}else System.out.println("对不起,没找到此商品");
				break;
			case 4:
				//按照编号查找
				System.out.println("输入您想搜索的商品编号:");
				Scanner sc4 = new Scanner(System.in);
				int k = sc4.nextInt();
				Commodity list2 = new Commodity();
				list2 = Mall.searchById(k);
				if(list2.getId()!=0) 
				{
					System.out.print("商品名称:" + list2.getName() + "  ");
					System.out.print("商品价格:" + list2.getPrice() + "  ");
					System.out.print("商品编号:" + list2.getId() + "  ");
					System.out.println("商品类型:" + list2.getType());
				}
					
				 break;
			case 5:
				//清空购物车
				cart.clearCart();
				System.out.println("清空成功");
				break;
			case 6:
				//查看购物车
				if(null!=cart.seeMyCart()&&cart.seeMyCart().size()>0) {//如果不为NULL且不为0
					System.out.println("您的购物车中有");
					for (int j2 = 0; j2 < cart.seeMyCart().size(); j2++) 
					{
						System.out.print("商品名称:" + cart.seeMyCart().get(j2).getData().getName() + "  ");
						System.out.print("商品价格:" + cart.seeMyCart().get(j2).getData().getPrice() + "  ");
						System.out.print("商品编号:" + cart.seeMyCart().get(j2).getData().getId() + "  ");
						System.out.print("商品类型:" + cart.seeMyCart().get(j2).getData().getType()+ "  ");
						System.out.println("数量:" + cart.seeMyCart().get(j2).getNum());
					}
				}
				else System.out.println("您的购物车没有商品");
				break;
			case 7:
				flag = false;
				System.out.println("退出成功");
				break;
			}
 
		}

	}

	}

主要功能

  • 主菜单界面(功能选择界面)。
  • 商品的展示修改功能。

②Commodity

代码

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

public class Commodity {//商品
    private String name;
    private double price;
    private Integer id;
    private String type;
    

    public Commodity(String name, double price, Integer id, String type) {        
        this.name = name;
        this.price = price;
        this.id = id;
        this.type = type;
    }

	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	//
	
	
}

主要功能

  • 定义商品的属性(名称编号等)。
  • 商品类属性的增删查改。

③ShoppingCart

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

public class ShoppingCart {
    private List<ShoppingCartData> dataList = new ArrayList<>();
//添加商品
    public void addToCart(Commodity e) {
        int index = findById(e.getId());
        if (index == -1) {
            dataList.add(new ShoppingCartData(e));//如果没有找到购物车,这会返回index初始值-1,所以新建一个购物车,且将第一个商品加入购物车

        } else {
            dataList.get(index).increase();//get返回购物车中第index位的元素,increase是为了增加一次商品的数量
        }
    }
//清空购物车
    public List<ShoppingCartData> clearCart(){
        dataList.clear();
        return dataList;
    }
//查看购物车
    public List<ShoppingCartData> seeMyCart() {
        return dataList;
    }
//删除购物车的商品
    public boolean remove(Integer id) {
        if (id == null)
            return false;//id不存在返回0
        int index = findById(id);
        if (index == -1) {// 未找到证明没有购物车
            return false;
        } else {
        	ShoppingCartData cart = this.dataList.get(index);//把当前在购物车内排于index位的商品属性赋予cart
            if (cart.getNum() <= 1) {
                this.dataList.remove(index);//如果商品数量为1,直接移除商品
            } else {
                cart.decrease();//如果商品有多个数量,数量--
            }
        }
        return true;
    }
//查找商品ID对应在购物车内的位置
    private int findById(Integer id) {
        int index = -1;
        if (dataList.size() > 0) //如果购物车存在{
            for (int i = 0; i < dataList.size(); i++) {
            	if (dataList.get(i).getData().getId()==id)//找到购物车内位置
                    index = i;
            }
        }
        return index;
    }
}

主要功能

  • 实现购物车的增删查改

④Mall

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


public class Mall {
	//初始化
	private List<Commodity> commodities = new ArrayList<>();
	{
        commodities.add(new Commodity("回力纯色帆布鞋", 69, 1, "鞋子"));
        commodities.add(new Commodity("Redmi K50", 3399, 2, "手机"));
        commodities.add(new Commodity("Apple iPhone 13", 8699, 3, "手机"));
        commodities.add(new Commodity("联想笔记本电脑 小新Air14", 4299, 4, "电脑"));
        commodities.add(new Commodity("斯凯奇休闲鞋", 319, 5, "鞋子"));
        commodities.add(new Commodity("联想ThinkBook 14+", 5699, 6, "电脑"));
        commodities.add(new Commodity("华为笔记本电脑MateBook D", 3999.00, 7, "电脑"));
        commodities.add(new Commodity("Redmi Note11T", 1599, 8, "手机"));
        commodities.add(new Commodity("七匹狼休闲鞋", 309, 9, "鞋子"));
        commodities.add(new Commodity("惠普战66五代 锐龙版", 4899.00, 10, "电脑"));
	}
	//展示商品
    public List<Commodity> showGoods() {//返回商城所有商品
        return this.commodities;
     }
    //按编号搜索商品
      public Commodity searchById(int id) {
         int i = 0, flag = 1;//i无实际意义,只参与循环,flag用于判断是否找到商品
         for (i = 0; i < commodities.size(); i++) {
             if (commodities.get(i).getId() == (id)) {//找到的商品属性复制到commodities。
                 return commodities.get(i);
             }
         }
         if (flag == 1)
             System.out.println("此商品不存在!!");
             return null;
     }
    //按类型搜索商品
    public List<Commodity> searchByType(String type) {//将查找到的商品复制到list中,返回这个商品
         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;
     }
}

主要功能

  • 存储所有商品的属性
  • 根据编号或者类别查找商品

⑤ShoppingCartData

public class ShoppingCartData {/
        Commodity data;//商品
        Integer num;//购物车的商品数量

        public ShoppingCartData(Commodity data) {
            this.data = data;
            num = 1;
        }

		public void increase() {
            num++;
        }

        public void decrease() {
            num--;
        }
        
        public String toString() {
            return "ShoppingCartData [data=" + data + ", num=" + num + "]";
        }

		public Commodity getData() {
			return data;
		}

		public void setData(Commodity data) {
			this.data = data;
		}

		public Integer getNum() {
			return num;
		}

		public void setNum(Integer num) {
			this.num = num;
		}

        
}

主要功能

  • 存储购物车内商品的功能

五.不足之处以及思考

没有实现的内容。

  • ①没能实现对商店商品的增添改查(root)。

  • ②没有实现对商品数量的管理,此代码默认商品是全满的。

  • ③没有实现对购物车总价格的结算(此代码由于时间原因没能完善被注释)。

    一开始我们两人没有用网课平台的框架,使用的是自己编写的,写到即将完善发现我们只是实现了超级用户界面,即指只能操作商城商品,但是没有购物车功能,所以很遗憾此功能只能在下一次改进时进行完善。此次大作业也让我明白了java一些语言的使用,类的意义等等。

posted @ 2022-09-25 21:13  魔法少女小胖  阅读(66)  评论(0编辑  收藏  举报