📅  最后修改于: 2023-12-03 14:58:20.885000             🧑  作者: Mango
这是 GATE CS 2020 的第 46 道题。它是一道编程题,要求编写代码实现一个系统,用于维护商品库存信息。以下是该系统的要求:
以下是实现该系统所需的代码片段。
首先,我们需要实现一个商品类(Item
),用于存储每个商品的信息。
public class Item {
private String name;
private int quantity;
private double price;
// 构造函数
public Item(String name, int quantity, double price) {
this.name = name;
this.quantity = quantity;
this.price = price;
}
// 获取商品名称
public String getName() {
return name;
}
// 获取库存数量
public int getQuantity() {
return quantity;
}
// 获取商品价格
public double getPrice() {
return price;
}
// 设置库存数量
public void setQuantity(int quantity) {
this.quantity = quantity;
}
// 设置商品价格
public void setPrice(double price) {
this.price = price;
}
// 重写 toString 方法
@Override
public String toString() {
return String.format("%s, %d, %.2f", name, quantity, price);
}
}
下一步,我们需要实现一个库存类(Inventory
),用于维护商品库存信息。
import java.util.*;
public class Inventory {
private Map<String, Item> items;
// 构造函数
public Inventory() {
this.items = new HashMap<>();
}
// 添加商品到库存
public void add(Item item) {
items.put(item.getName(), item);
}
// 更新库存中的商品信息
public void update(String name, int quantity, double price) {
if (items.containsKey(name)) {
Item item = items.get(name);
item.setQuantity(quantity);
item.setPrice(price);
}
}
// 从库存中删除商品
public void remove(String name) {
items.remove(name);
}
// 按商品名称获取商品信息
public Item get(String name) {
return items.get(name);
}
// 按名称、数量或价格进行排序
public List<Item> sort(String column, boolean ascending) {
List<Item> sortedItems = new ArrayList<>(items.values());
Comparator<Item> comparator;
switch (column) {
case "name":
comparator = Comparator.comparing(Item::getName);
break;
case "quantity":
comparator = Comparator.comparingInt(Item::getQuantity);
break;
case "price":
comparator = Comparator.comparingDouble(Item::getPrice);
break;
default:
throw new IllegalArgumentException("Invalid column: " + column);
}
if (!ascending) {
comparator = comparator.reversed();
}
sortedItems.sort(comparator);
return sortedItems;
}
// 从输入流中读取 CSV 文件并加入到库存中
public void readCsv(InputStream input) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
// 读取标题行
String line = reader.readLine();
String[] headers = line.split(",");
// 逐行读取数据并添加到库存中
while ((line = reader.readLine()) != null) {
String[] fields = line.split(",");
Item item = new Item(fields[0], Integer.parseInt(fields[1]), Double.parseDouble(fields[2]));
add(item);
}
reader.close();
}
// 将库存的内容以 CSV 格式写入输出流
public void writeCsv(OutputStream output) throws IOException {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));
// 写入标题行
writer.write("name,quantity,price\n");
// 逐行写入数据
for (Item item : items.values()) {
writer.write(item.toString() + "\n");
}
writer.close();
}
}
最后,以下是一个使用上述类的示例:
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// 初始化库存
Inventory inventory = new Inventory();
// 从文件中读取商品数据并加入到库存中
InputStream input = new FileInputStream("inventory.csv");
inventory.readCsv(input);
input.close();
// 更新商品信息
inventory.update("apple", 15, 1.5);
// 排序库存
for (Item item : inventory.sort("name", true)) {
System.out.println(item);
}
// 将库存数据写入到文件中
OutputStream output = new FileOutputStream("inventory_updated.csv");
inventory.writeCsv(output);
output.close();
}
}
以上代码演示了如何从 CSV 文件读取商品数据、更新商品信息并排序库存,最后将更新后的数据写入到文件中。