面向对象大作业——购物车

小组成员:刘倩,苏晨茜,陈俐文

小组分工:

内容负责人
main类主菜单代码的编写刘倩
前期调查,博客撰写,商城类苏晨茜
商品类,购物车类,对代码的整理与修改陈俐文

 一.前期调查

顾客客人先在商城(shop)中浏览商品(Commidity),将浏览的商品加入购物车(ShoppingCart),最后通过购物车生成订单。

二.购物车

购买过程图:

 系统结构图:

 包结构:

 三.代码

Menu

package shopping;

import java.util.Scanner;
//用户可以选择进入商品管理模块、购物车管理模块,或者退出。
public class Menu {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

while (true) {
System.out.println("1. 商品管理");
System.out.println("2. 购物车管理");
System.out.println("3. 退出");
System.out.print("请输入选项:");
int option = scanner.nextInt();
scanner.nextLine();

switch (option) {
case 1:
CommodityManagementMenu();
break;
case 2:
ShoppingMenu();
break;
case 3:
System.out.println("感谢使用,再见!");
System.exit(0);
default:
System.out.println("无效选项,请重新输入");
}
}
}
//用户可以根据需要选择不同的功能,进行商品的添加、查看、更新和删除等操作,并随时退出菜单.
public static void CommodityManagementMenu() {
ArrayList<Commodity> commodities = new ArrayList<>();

Scanner scanner = new Scanner(System.in);

while (true) {
System.out.println("1. 添加商品");
System.out.println("2. 查看所有商品");
System.out.println("3. 更新商品信息");
System.out.println("4. 删除商品");
System.out.println("5. 退出");

System.out.print("请输入选项:");
int option = scanner.nextInt();
scanner.nextLine();

switch (option) {
case 1:
System.out.print("请输入商品名称:");
String name = scanner.nextLine();
System.out.print("请输入商品价格:");
double price = scanner.nextDouble();
scanner.nextLine();
System.out.print("请输入商品编号:");
String id = scanner.nextLine();

Commodity commodity = new Commodity(name, price, id);
commodities.add(commodity);
System.out.println("已添加商品");
break;
case 2:
if (commodities.isEmpty()) {
System.out.println("还未添加商品");
} else {
System.out.println("所有商品:");
for (Commodity c : commodities) {
System.out.println("商品名称: "+c.getName() + ", " + "商品价格: "+c.getPrice() + ", " +",商品编号:"+ c.getId());
}
}
break;
case 3:
if (commodities.isEmpty()) {
System.out.println("还未添加商品");
} else {
System.out.print("请输入要更新的商品编号:");
String updateCommodityId = scanner.nextLine();
boolean updated = false;
for (Commodity c : commodities) {
if (c.getId().equals(updateCommodityId)) {
System.out.println("请重新输入商品名称:");
String updatedName = scanner.nextLine();
System.out.println("请重新输入商品价格:");
double updatedPrice = scanner.nextDouble();
scanner.nextLine();
c.setName(updatedName);
c.setPrice(updatedPrice);
System.out.println("商品信息已更新");
updated = true;
break;
}
}
if (!updated) {
System.out.println("商品不存在或商品编号输入错误");
}
}
break;
case 4:
if (commodities.isEmpty()) {
System.out.println("还未添加商品");
} else {
System.out.print("请输入要删除的商品编号:");
String deleteCommodityId = scanner.nextLine();
boolean deleted = false;
for (Commodity c : commodities) {
if (c.getId().equals(deleteCommodityId)) {
commodities.remove(c);
System.out.println("商品已删除");
deleted = true;
break;
}
}
if (!deleted) {
System.out.println("商品不存在或商品编号输入错误");
}
}
break;
case 5:
System.out.println("感谢使用,再见!");
System.exit(0);
default:
System.out.println("无效选项,请重新输入");
}
}
}

//根据用户的选择,菜单会调用购物车类和商城类的相应方法来实现功能。用户可以根据需要选择不同的功能,进行商品的添加、数量的查看、结算和展示购物车等操作。
public static void ShoppingMenu() {
ShoppingCart shoppingCart = new ShoppingCart();
Store store = new Store();

// 初始化商城商品
store.initialize();

Scanner scanner = new Scanner(System.in);

while (true) {
System.out.println("1. 添加商品到购物车");
System.out.println("2. 查看购物车内商品数量");
System.out.println("3. 结算");
System.out.println("4. 显示购物车内商品");
System.out.println("5. 退出");

System.out.print("请输入选项:");
int option = scanner.nextInt();
scanner.nextLine();

switch (option) {
case 1:
System.out.print("请输入要添加的商品编号:");
String commodityId = scanner.nextLine();
Commodity selectedCommodity = store.search(commodityId);
if (selectedCommodity != null) {
shoppingCart.add(selectedCommodity);
System.out.println("已添加商品到购物车");
} else {
System.out.println("商品不存在,请重新输入");
}
break;
case 2:
int quantity = shoppingCart.getQty();
System.out.println("购物车内商品数量为:" + quantity);
break;
case 3:
double totalPrice = shoppingCart.checkout();
System.out.println("购物车内商品总价为:" + totalPrice);
break;
case 4:
shoppingCart.show();
break;
case 5:
System.out.println("感谢使用,再见!");
System.exit(0);
default:
System.out.println("无效选项,请重新输入");
}
}
}
}

 功能介绍:

1.menu为主菜单,使用者先选择进行商场货物管理的操作还是购物车的操作

2.CommodityManageMenu为进行商场货物管理的菜单,有添加商品、查看商品、更新商品信息、删除商品、退出该系统的操作,其中删除商品是根据商品编号进行处理,添加商品需要输入商品编号、商品数量、商品价格等关键信息

3.ShoppingMenu为顾客进行购物车操作的菜单,有添加到购物车,查看购物车商品数量、结算、显示购物车、退出的操作,均通过商品编号实行

Commodity


package shopping;


/**
 * 商品类:用来存放商品的信息(商品名称name、商品价格price、商品编号id)
 */
public class Commodity {
	private String name;
	private double price;
    private int id;

	public Commodity(String name, double price) {
		this.name = name;
		this.price = price;
		this.buyNumber = buyNumber;
	}
	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;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
}

 功能介绍:

存放商品信息(商品数量、商品价格、商品编号)

ShoppingCart

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * 购物车类:可以用来存放商品,且包含购物车常用的操作方法。
 */
public class ShoppingCart {
private HashMap<Commodity, Integer> items = new HashMap<>();
// 存放商品的容器,键为商品对象,值为商品数量

    /**
     * 往购物车里面存放商品。
     * 如果购物车中已经存在相同的商品,则将数量加1;否则,添加新商品到购物车。
     */
    public void add(Commodity item) {
        if (items.containsKey(item)) {
            int quantity = items.get(item);
            items.put(item, quantity + 1);
        } else {
            items.put(item, 1);
        }
    }

    /**
     * 获得购物车内商品的数量
     */
    public int getQty() {
        int totalQuantity = 0;
        for (int quantity : items.values()) {
            totalQuantity += quantity;
        }
        return totalQuantity;
    }

    /**
     * 结算
     *
     * @return 返回购物车中所有商品的总价
     */
    public double checkout() {
        double totalPrice = 0;
        for (Map.Entry<Commodity, Integer> entry : items.entrySet()) {
            Commodity commodity = entry.getKey();
            int quantity = entry.getValue();
            double price = commodity.getPrice();
            totalPrice += price * quantity;
        }
        return totalPrice;
    }

    /**
     * 显示购物车中的商品
     */
    public void show() {
        for (Map.Entry<Commodity, Integer> entry : items.entrySet()) {
            Commodity commodity = entry.getKey();
            int quantity = entry.getValue();
            printCommodity(commodity, quantity);
            System.out.println();
        }
    }

    private void printCommodity(Commodity commodity, int quantity) {
        System.out.printf("name: %s, price: %f, quantity: %d", commodity.getName(), commodity.getPrice(), quantity);
    }
}

功能介绍:

使用哈希表和图的结构

1.向购物车里添加、删除商品

2.显示购物车里的所有商品

3.对购物车里的商品进行结算

Shop

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

public class Shop {
    private List<Commodity> commodityList;

    public Shop() {
        commodityList = new ArrayList<>();
    }

    public void addCommodity(Commodity commodity) {
        commodityList.add(commodity);
    }

    public Commodity searchCommodity(String name) {
        for (Commodity commodity : commodityList) {
            if (commodity.getName().equals(name)) {
                return commodity;
            }
        }
        return null;
    }
}


public class Main {
    public static void main(String[] args) {
        Shop shop = new Shop();

        // 初始化商品
        Commodity phone = new Commodity("手机", 1999.99, "P001");
        Commodity clothes = new Commodity("衣服", 99.99, "C001");
        Commodity vegetable = new Commodity("蔬菜", 9.99, "V001");
        Commodity apple = new Commodity("苹果", 5.99, "A001");
        Commodity toy = new Commodity("玩具", 49.99, "T001");

        // 添加商品到商城
        shop.addCommodity(phone);
        shop.addCommodity(clothes);
        shop.addCommodity(vegetable);
        shop.addCommodity(apple);
        shop.addCommodity(toy);

        // 搜索商品
        Commodity searchedCommodity = shop.searchCommodity("手机");
        }
    }
}

功能介绍:

1.对商品进行初始化

2.添加商品到商城

3.搜索商品

四.实现思路

1.具体功能设计

(1)在商城中初始化部分商品,并对商城中的商品进行基础操作

(2)对购物车里的商品进行增加、删除、展示、结算等基础操作

2.设计小原则

(1)命名、代码的规范性

(2)方法与类之间存在紧密练习

(3)将输入输出信息放在Menu目录中,尽量不在后续的代码过程中从控制台进行输入输出

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值