在Java中开发简单库存管理系统,核心是利用集合存储商品数据,实现基础的业务操作逻辑,不需要额外的数据库依赖,非常适合用来练习Java集合的实际应用。整个系统围绕商品信息的管理展开,通过不同的集合类型搭配完成数据存储和功能实现。

核心实现思路
库存管理的核心是对商品信息的增删改查,我们可以设计一个商品类存储单个商品的属性,再使用Java集合存储所有商品对象。其中ArrayList适合存储有序的商品列表,方便遍历和按顺序操作;HashMap适合通过商品唯一标识快速查询商品,提升查询效率。两个集合搭配使用,可以兼顾操作便利性和查询性能。
商品类定义
首先定义商品类,包含商品的基础属性,比如商品编号、名称、库存数量、单价等,同时提供对应的构造方法和getter、setter方法,方便后续操作商品数据。
// 商品类,存储单个商品的所有信息
public class Product {
// 商品唯一编号
private String productId;
// 商品名称
private String productName;
// 当前库存数量
private int stockCount;
// 商品单价
private double price;
// 构造方法,初始化商品属性
public Product(String productId, String productName, int stockCount, double price) {
this.productId = productId;
this.productName = productName;
this.stockCount = stockCount;
this.price = price;
}
// 获取商品编号
public String getProductId() {
return productId;
}
// 设置商品编号
public void setProductId(String productId) {
this.productId = productId;
}
// 获取商品名称
public String getProductName() {
return productName;
}
// 设置商品名称
public void setProductName(String productName) {
this.productName = productName;
}
// 获取库存数量
public int getStockCount() {
return stockCount;
}
// 设置库存数量
public void setStockCount(int stockCount) {
this.stockCount = stockCount;
}
// 获取商品单价
public double getPrice() {
return price;
}
// 设置商品单价
public void setPrice(double price) {
this.price = price;
}
// 重写toString方法,方便打印商品信息
@Override
public String toString() {
return "商品编号:" + productId + ",商品名称:" + productName + ",库存数量:" + stockCount + ",单价:" + price;
}
}
库存管理核心类实现
接下来实现库存管理类,在这个类中定义集合存储商品数据,同时实现添加商品、查询商品、修改库存、删除商品、展示所有商品等功能。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
// 库存管理核心类
public class InventoryManager {
// 使用HashMap存储商品,key为商品编号,value为商品对象,方便快速查询
private Map<String, Product> productMap;
// 使用ArrayList存储商品列表,方便按顺序遍历和展示
private List<Product> productList;
// 构造方法,初始化集合
public InventoryManager() {
productMap = new HashMap<>();
productList = new ArrayList<>();
}
// 添加商品到库存
public void addProduct(Product product) {
// 判断商品编号是否已存在
if (productMap.containsKey(product.getProductId())) {
System.out.println("添加失败,商品编号" + product.getProductId() + "已存在");
return;
}
// 同时添加到HashMap和ArrayList中
productMap.put(product.getProductId(), product);
productList.add(product);
System.out.println("商品添加成功:" + product);
}
// 根据商品编号查询商品
public Product getProductById(String productId) {
return productMap.get(productId);
}
// 修改商品库存数量
public void updateStock(String productId, int newStock) {
Product product = productMap.get(productId);
if (product == null) {
System.out.println("修改失败,未找到编号为" + productId + "的商品");
return;
}
product.setStockCount(newStock);
System.out.println("库存修改成功,当前商品信息:" + product);
}
// 删除商品
public void deleteProduct(String productId) {
Product product = productMap.get(productId);
if (product == null) {
System.out.println("删除失败,未找到编号为" + productId + "的商品");
return;
}
// 同时从HashMap和ArrayList中移除
productMap.remove(productId);
productList.remove(product);
System.out.println("商品删除成功:" + product);
}
// 展示所有库存商品
public void showAllProducts() {
if (productList.isEmpty()) {
System.out.println("当前库存为空,没有商品信息");
return;
}
System.out.println("当前所有库存商品信息:");
for (Product product : productList) {
System.out.println(product);
}
}
}
功能测试示例
最后编写测试类,验证库存管理系统的各项功能是否正常运行,测试添加、查询、修改、删除、展示等操作的执行效果。
public class InventoryTest {
public static void main(String[] args) {
// 创建库存管理对象
InventoryManager manager = new InventoryManager();
// 添加商品测试
Product p1 = new Product("P001", "无线鼠标", 50, 89.9);
Product p2 = new Product("P002", "机械键盘", 30, 299.0);
Product p3 = new Product("P003", "USB扩展坞", 20, 49.5);
manager.addProduct(p1);
manager.addProduct(p2);
manager.addProduct(p3);
// 展示所有商品
manager.showAllProducts();
// 查询商品测试
System.out.println("n查询编号P002的商品:");
Product queryResult = manager.getProductById("P002");
if (queryResult != null) {
System.out.println(queryResult);
} else {
System.out.println("未找到对应商品");
}
// 修改库存测试
System.out.println("n修改P001的库存为60:");
manager.updateStock("P001", 60);
// 删除商品测试
System.out.println("n删除编号P003的商品:");
manager.deleteProduct("P003");
// 再次展示所有商品
System.out.println("n删除后的所有商品信息:");
manager.showAllProducts();
}
}
实现注意事项
- 两个集合的数据需要保持同步,添加或删除商品时要同时操作
HashMap和ArrayList,避免出现数据不一致的问题 - 商品编号作为唯一标识,添加商品时需要做重复校验,防止出现编号重复的商品
- 查询商品时优先使用
HashMap的get方法,时间复杂度为O(1),比遍历ArrayList效率更高 - 如果是实际使用的系统,还需要考虑线程安全问题,当前实现仅适合单线程场景的练习使用