【购物车程序】


一. 部分功能运行结果展示:

1.商城内初始商品窗口显示
在这里插入图片描述
2.商品添加不允许重复
在这里插入图片描述
3.商品查询和删除功能
在这里插入图片描述
4.添加商品进购物车
在这里插入图片描述
5.计算商品总价,退出系统
在这里插入图片描述

二. 系统描述:

该系统是一个简单的购物车系统,用户可以选择添加商品、查看全部商品、查看指定编号的商品信息、删除商品、添加商品到购物车、显示购物车商品、删除购物车商品和计算购物车总价等操作。
名词: 商品,购物车;
动词:添加,查看,删除,计算,显示;

系统中存在以下对象:

  • MainFrame:界面类,用于显示商品列表和与用户进行交互。
  • ShoppingCenter:商店类,用于管理商品的增加、删除和查询。
  • Commodity:商品类,包含商品的编号、名称和价格等属性。
  • ShoppingCart:购物车类,用于管理购物车中的商品条目。
  • ItemEntry:购物车条目类,包含商品和数量等属性。

系统的流程如下:

  1. 用户打开系统,界面显示商品列表。
  2. 用户可以选择添加商品、查看全部商品、查看指定编号的商品信息、删除商品、添加商品到购物车、显示购物车商品、删除购物车商品和计算购物车总价等操作。
  3. 添加商品:用户输入商品的编号、名称和价格,系统将商品添加到商店中。
  4. 查看全部商品:系统显示商店中所有的商品信息。
  5. 查看指定编号的商品信息:用户输入商品编号,系统根据编号查找商品信息并显示。
  6. 删除商品:用户输入商品编号,系统根据编号删除对应的商品。
  7. 添加商品到购物车:用户输入商品编号和数量,系统将商品添加到购物车中。
  8. 显示购物车商品:系统显示购物车中的所有商品信息。
  9. 删除购物车商品:用户输入商品删除对应商品使得数量减一

主要功能的流程图:

  1. 购物车添加商品的流程图:
开始 -> 显示商品列表 -> 选择商品 -> 添加到购物车 -> 显示购物车内容 -> 结束
  1. 关键代码:
  • 购物车类
package shopping;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class ShoppingCart {

	private static List<ItemEntry> itemList = new ArrayList<>();//

	// 计算购物车内商品总价
	public String calculate() {
		BigDecimal sum = new BigDecimal("0");
		for (ItemEntry itemEntry : itemList) {
			BigDecimal priceCal = new BigDecimal(Double.toString(itemEntry.item.getPrice()));
			BigDecimal qtyCal = new BigDecimal(itemEntry.qty.toString());
			sum = sum.add(priceCal.multiply(qtyCal));
		}
		return sum.toString();
	}

	// 增加商品
	public void add(Commodity e, int sum) {
		if (e == null) {
			return;
		}
		int index = findById(e.getId());
		if (index == -1) {// 如果不包含该商品的条目
			itemList.add(new ItemEntry(e, sum));
		} else {
			System.out.println("商品已经存在购物车,数量增加");
			itemList.get(index).increase(sum);
		}
	}

	// 减少商品数量
	public boolean remove(Integer id) {
		if (id == null)
			return false;
		int index = findById(id);
		if (index == -1) { // 未找到
			return false;
		} else {
			ItemEntry entry = itemList.get(index);
			if (entry.getQty() <= 1) {// 当条目数量<1则删除条目
				itemList.remove(index);
			} else {
				entry.decrease();
			}
		}
		return true;
	}

	// 展示购物车内的商品
	public void diplayAll() {
		for (ItemEntry itemEntry : itemList) {
			System.out.println(itemEntry);
		}
	}

	// 通过id在购物车中查找是否已存在相关条目。 声明为private,因为只在本类中使用。 如果包含返回相关条目所在下标,否则返回-1
	private int findById(Integer id) {
		for (int i = 0; i < itemList.size(); i++) {
			if (itemList.get(i).getItem().getId().equals(id))
				return i;
		}
		return -1;
	}

	// 购物车条目类:代表购物车的某一个条目,包含商品与商品对应的数量。该类为内部类。
	private class ItemEntry {
		Commodity item;// 商品
		Integer qty;// 数量

		public ItemEntry(Commodity item, int sum) {
			this.item = item;
			qty = sum;
		}

		public void increase(int sum) {
			qty += sum;
		}

		public void decrease() {
			qty--;
		}

		public Commodity getItem() {
			return item;
		}

		public Integer getQty() {
			return qty;
		}

		@Override
		public String toString() {
			return "条目:" + item + ", 商品数量=" + qty;
		}

	}

}

  • 商城类
package shopping;

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

public class ShoppingCenter {

	private static List<Commodity> commodityList = new ArrayList<Commodity>();
	// static 静态代码块,第一次加载的时候执行,只执行一次,静态变量进行初始化
	static {
		commodityList.add(new Commodity(1000, "手机", 2999.9));
		commodityList.add(new Commodity(1001, "电脑", 12999.9));
		commodityList.add(new Commodity(1002, "充电器", 9.9));
		commodityList.add(new Commodity(1003, "牛奶", 59.9));
	}

	public void add(Commodity co) {
		boolean flag = false;
		for (int i = 0; i < commodityList.size(); i++) {
			Commodity commodity = commodityList.get(i);
			if (co.getId().equals(commodity.getId())) {
				flag = true;
				break;
			}
		}
		if (flag) {
			System.out.println("商品已经存在");
		} else {
			System.out.println("添加成功");
			commodityList.add(co);
		}
	}

	public void diplayAll() {
		for (Commodity commodity : commodityList) {
			System.out.println(commodity);
		}
	}

	public List<Commodity> findAll() {

		return commodityList;
	}

	public Commodity findId(int id) {
		// 比较查找编号
		for (int i = 0; i < commodityList.size(); i++) {

			Commodity commodity = commodityList.get(i);
			if (commodity.getId() == id) {
				return commodity;

			}
		}
		return null;
	}

	public void removeId(int id) {
		boolean flag = false;
		for (int i = 0; i < commodityList.size(); i++) {
			Commodity commodity = commodityList.get(i);
			if (commodity.getId() == id) {
				commodityList.remove(commodity);
				flag = true;
			}
		}
		if (flag) {
			System.out.println("删除成功");
		} else {
			System.out.println("没有该商品");
		}
	}

}

三. 系统优化总结

系统主要优化了以下功能:

  1. 改进ShoppingCart类中的add方法,将相同商品归为一类。
  2. 为Commodity类添加编号属性,用来唯一区别每一个不同的商品,确保商品编号唯一性。
  3. 增加专门的菜单类,用来显示菜单。
  4. 增加专门的类用来进行Commodity数据的初始化。
  5. 将ShoppingCart类的控制台输出代码(System.out.println…)全部移除。
  6. Commodity类的price为double类型不精确。在运算过程中会出现误差。使用BigDecimal类:BigDecimal类提供了高精度的十进制运算,避免浮点数运算的精度问题,使得运算结果精确。
  7. 在开始增加窗口显示商城商品。
  8. 利用购物车条目存储商品信息。
  9. 解决同一商品多次存储问题,在增加商品进入购物车时可以选择数量。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值