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

一.前期调查

  • 进入京东商城(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 @   魔法少女小胖  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示