面向对象第一次大作业-购物车 组员:高旭 林语晴
一.前期调查
-
进入京东商城(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一些语言的使用,类的意义等等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~