java编程完成一个商品销售管理系统,实现了对商品的查询、购买、添加以及删除等操作。 要求: 1、商品信息以文本文件形式存储在本地磁盘中,一行存放一条商品信息,包括商品编号(id)、商品名称(name)、商品价格(price)、商品数量(nums)、上架时间(time)等五个字段,每个字段之间由逗号隔开。 2、使用集合来管理商品,对商品的查询、添加、购买、删除实际上就转变为从集合中查询、添加、删除商品对象。 3、在对商品进行购买、添加、删除等更新操作时,每完成一个更新操作都需要进行一次文件写入,即将最新修改结果实时写入文件内
时间: 2023-06-24 09:06:11 浏览: 211
代码如下:
```java
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class CommodityManagementSystem {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<Commodity> commodityList = new ArrayList<>();
File file = new File("commodity.txt");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
String[] arr = line.split(",");
Commodity commodity = new Commodity(arr[0], arr[1], Double.parseDouble(arr[2]), Integer.parseInt(arr[3]), arr[4]);
commodityList.add(commodity);
}
} catch (IOException e) {
e.printStackTrace();
}
while (true) {
System.out.println("请选择操作:1.查询商品信息 2.购买商品 3.添加新商品 4.删除商品 5.退出系统");
int choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println("请输入商品编号或名称:");
String keyword = scanner.next();
boolean find = false;
for (Commodity commodity : commodityList) {
if (commodity.getId().equals(keyword) || commodity.getName().equals(keyword)) {
System.out.println(commodity);
find = true;
}
}
if (!find) {
System.out.println("未找到匹配的商品信息!");
}
break;
case 2:
System.out.println("请输入商品编号:");
String id = scanner.next();
Commodity buyCommodity = null;
for (Commodity commodity : commodityList) {
if (commodity.getId().equals(id)) {
buyCommodity = commodity;
break;
}
}
if (buyCommodity == null) {
System.out.println("未找到匹配的商品信息!");
} else {
System.out.println("请输入购买数量:");
int nums = scanner.nextInt();
if (buyCommodity.getNums() < nums) {
System.out.println("库存不足!");
} else {
buyCommodity.setNums(buyCommodity.getNums() - nums);
System.out.println("购买成功!总价为:" + buyCommodity.getPrice() * nums);
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
for (Commodity commodity : commodityList) {
writer.write(commodity.toString());
writer.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
break;
case 3:
System.out.println("请输入商品编号、名称、价格、数量、上架时间:");
String newId = scanner.next();
String newName = scanner.next();
double newPrice = scanner.nextDouble();
int newNums = scanner.nextInt();
String newTime = scanner.next();
Commodity newCommodity = new Commodity(newId, newName, newPrice, newNums, newTime);
commodityList.add(newCommodity);
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
for (Commodity commodity : commodityList) {
writer.write(commodity.toString());
writer.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("添加成功!");
break;
case 4:
System.out.println("请输入商品编号:");
String deleteId = scanner.next();
boolean deleteSuccess = false;
for (Commodity commodity : commodityList) {
if (commodity.getId().equals(deleteId)) {
commodityList.remove(commodity);
System.out.println("删除成功!");
deleteSuccess = true;
break;
}
}
if (!deleteSuccess) {
System.out.println("未找到匹配的商品信息!");
} else {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
for (Commodity commodity : commodityList) {
writer.write(commodity.toString());
writer.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
break;
case 5:
System.out.println("退出系统!");
return;
default:
System.out.println("输入有误,请重新输入!");
}
}
}
}
class Commodity {
private String id;
private String name;
private double price;
private int nums;
private String time;
public Commodity(String id, String name, double price, int nums, String time) {
this.id = id;
this.name = name;
this.price = price;
this.nums = nums;
this.time = time;
}
public String getId() {
return id;
}
public void setId(String 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;
}
public int getNums() {
return nums;
}
public void setNums(int nums) {
this.nums = nums;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
@Override
public String toString() {
return id + "," + name + "," + price + "," + nums + "," + time;
}
}
```
实现思路:
1. 读取文件中的商品信息,将每一行数据按逗号分隔,封装成商品对象,并加入集合中。
2. 根据用户输入的选择,进行查询、购买、添加、删除等操作。
3. 在更新商品信息后,将集合中的最新数据写入文件。
需要注意的点:
1. 文件的读写,使用 try-with-resources 语句,在代码块结束时自动关闭流。
2. 对于输入商品价格和数量等浮点数和整数类型的数据,使用 nextDouble 和 nextInt 方法读取,避免使用 nextLine 方法造成输入错误。
3. 商品信息的存储和读取,使用 toString 和构造方法实现对象的转换。
4. 集合中的对象的删除,不能在遍历集合的过程中直接删除对象,应该使用迭代器进行删除,否则会报 ConcurrentModificationException 异常。