package practise;import java.io.*;import java.util.ArrayList;import java.util.Scanner;/*** @auther Devil(丁杨维)* @create 2021-10-21-17:04* 完成一个仓储系统:* 能够显示当前仓库中每件商品的id,商品名称,当前数量,总数量,要求能够添加商品,借出商品* 能够根据商品名称模糊查询商品的全部信息*/public class E_28 {public static void main(String[] args) {int i;Scanner sc = new Scanner(System.in);try {//读取文件中的数据ArrayList<Product> products = inputData();//创建一个文件管理对象ProductManagement productManagement = new ProductManagement(products);System.out.println("--------------------欢迎使用仓库管理系统----------------------");while (true) {//简易的菜单System.out.println("**************1.模糊查询商品的信息****************");System.out.println("**************2.添加商品*************************");System.out.println("**************3.借出商品*************************");System.out.println("**************4.查询商品全部信息******************");System.out.println("**************0.退出*****************************");System.out.print("请输入数字编号以操作:");i = sc.nextInt();for (int i1 = 0; i1 < 50; i1++) {System.out.println();}switch (i) {case 1:System.out.print("1.模糊查询商品的信息\n请输入商品名称关键字查找:");if (!productManagement.queryProducts(sc.next())) {System.out.println("查找失败,可能没有该商品,请重新操作");}break;case 2:System.out.print("添加商品\n请输入要添加的位置和商品的信息(商品id、商品名称、商品当前数量、总数量,用空格隔开):");if (!productManagement.add(new Product(sc.next(), sc.next(), sc.nextInt(), sc.nextInt()))) {System.out.println("添加失败");} else {System.out.println("添加成功");}break;case 3:System.out.print("借出商品\n请输入商品名称和借出的数量(用空格隔开):");if (!productManagement.lend(sc.next(), sc.nextInt())) {System.out.println("借出商品失败,可能时没有该商品也可能时借出的数量超过商品当前数量,请重新操作");}break;case 4:System.out.println("全部商品信息:");productManagement.queryProducts();break;case 0://将修改后的数据存入文件outputData(products);System.out.print("退出成功!");System.exit(0);default:break;}}} catch (Exception e) {e.printStackTrace();}}/*** 从文件中读取数据到内存** @return ArrayList<Product>*/public static ArrayList<Product> inputData() throws Exception {ArrayList<Product> p = new ArrayList<>();String str;ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();FileReader fileReader = new FileReader("chanpin.txt");BufferedReader bufferedReader = new BufferedReader(fileReader);while ((str = bufferedReader.readLine()) != null) {String[] data = str.split(" +");p.add(new Product(data[0], data[1], Integer.parseInt(data[2]), Integer.parseInt(data[3])));}bufferedReader.close();fileReader.close();return p;}/*** 将内存中的数据输出到文件*/public static void outputData(ArrayList<Product> products) throws Exception {String str;FileWriter fileWriter = new FileWriter("chanpin.txt", false);BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);for (Product product : products) {str = product.getId() + " " + product.getName() + " " + product.getCurrentQuantity() + " " + product.getTotalAmount();bufferedWriter.write(str, 0, str.length());bufferedWriter.newLine();}bufferedWriter.close();fileWriter.close();}}/*** 产品类*/class Product {private String id;private String name;private int currentQuantity;private int totalAmount;public Product(String id, String name, int currentQuantity, int totalAmount) {this.id = id;this.name = name;this.currentQuantity = currentQuantity;this.totalAmount = totalAmount;}/*** 更新商品当前数量*/public void setCurrentQuantity(int currentQuantity) {this.currentQuantity = currentQuantity;}/*** 更新商品总数*/public void setTotalAmount(int totalAmount) {this.totalAmount = totalAmount;}public String getId() {return id;}/*** 获取商品名称*/public String getName() {return name;}/*** 获取商品当前数量*/public int getCurrentQuantity() {return currentQuantity;}/*** 获取商品总数*/public int getTotalAmount() {return totalAmount;}}/*** 产品管理类*/class ProductManagement {ArrayList<Product> products;Product p = null;public ProductManagement(ArrayList<Product> products) {this.products = products;}/*** 添加商品*/public boolean add(Product product) {int i;boolean flag = false;for (i = 0; i < products.size(); i++) {if (products.get(i).getName().equals(product.getName())) {products.get(i).setTotalAmount(products.get(i).getTotalAmount() + product.getTotalAmount());products.get(i).setCurrentQuantity(products.get(i).getCurrentQuantity() + product.getCurrentQuantity());flag = true;break;}}if (i >= products.size()) {flag = true;products.add(product);}return flag;}/*** 借出商品*/public boolean lend(String str, int num) {if ((p = queryProduct(str)) != null) {if ((p.getCurrentQuantity() - num) < 0) {return false;}p.setCurrentQuantity(p.getCurrentQuantity() - num);return true;} else {return false;}}/*** 模糊查询产品信息*/public boolean queryProducts(String name) {boolean flag = false;for (Product product : products) {if (product.getName().contains(name)) {System.out.println("产品id:" + product.getId() + " 商品名称:" + product.getName() + " 商品当前数量:" + product.getCurrentQuantity() + " 商品总数量:" + product.getTotalAmount());flag = true;}}return flag;}/*** 输出全部商品的全部信息*/public void queryProducts() {for (Product product : products) {System.out.println("产品id:" + product.getId() + " 商品名称:" + product.getName() + " 商品当前数量:" + product.getCurrentQuantity() + " 商品总数量:" + product.getTotalAmount());}System.out.println("\n");}/*** 商品名称查询商品*/public Product queryProduct(String name) {Product product = null;for (Product value : products) {if (name.equals(value.getName())) {product = value;}}return product;}}
文件chanpin.txt内容
1 小可乐 20 20
2 中可乐 1 20
3 雪碧 19 20
4 大可乐 0 20
5 橙汁 18 20
6 我很想喝可乐 1 20
控制台输出:








