鱼C论坛

 找回密码
 立即注册
查看: 2345|回复: 1

用流解决商品进货问题(菜菜,大佬帮帮)

[复制链接]
发表于 2022-4-22 20:52:44 | 显示全部楼层 |阅读模式
5鱼币
每个商城都需要进货,而这些进货记录整理起来很不方便,本案例要求编写一个记录商城进货交易的程序,使用字节流将商场的进货信息记录在本地的csv文件中。程序具体要求如下:
当用户输入商品编号时,后台会根据商品编号查询到相应商品信息,并打印商品信息。接着让用户输入需要进货的商品数量,程序将原有的库存数量与输入的数量相加,将相加后的结果信息保存至本地的csv文件中。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-5 12:37:16 | 显示全部楼层

用着笨方法试着写了下,这里 csv 文件结构是这样的:
Id,Goods,Inventory
1,Banada,10
2,Apple,10
3,Durain,15
4,Orange,10
5,Strawberry,10

GoodsInventory.java 文件:
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class GoodsInventory {
    private Map<Integer, Object[]> map = new TreeMap<>();
    private Object[] head;

    public boolean writeFile(String filePath, Map<Integer, Object[]> map) {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(filePath);
            fos.write(String.format("%s,%s,%s\n", head).getBytes(StandardCharsets.UTF_8));
            for (Integer id : map.keySet()){
                fos.write(String.format("%s,%s,%s\n", map.get(id)).getBytes(StandardCharsets.UTF_8));
            }
            System.out.println("库存文件更新成功!");
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return false;
    }


    public boolean updateInventoryById(Integer id, Integer count){
        Object[] obj = map.get(id);
        if (obj == null){
            return false;
        }
        Integer temp = (Integer) obj[2] + count;
        if (temp < 0){
            System.out.println("库存不足!");
            return false;
        }
        obj[2] = (Integer) obj[2] + count;
        return true;
    }


    public Map<Integer, Object[]> readFile(String fileName){
        FileInputStream fis = null;
        BufferedReader br = null;
        try {
            fis = new FileInputStream(fileName);
            br = new BufferedReader(new InputStreamReader(fis));

            String data;
            String[] str;
            if ((data = br.readLine()) != null){
                str = data.split(",");
                head = str;
            }
            while ((data = br.readLine()) != null) {
                str = data.split(",");
                Object[] temp = {str[0], str[1], Integer.parseInt(str[2])};
                map.put(Integer.parseInt(str[0]), temp);
            }
        } catch (Exception e) {
            throw new RuntimeException("文件未找到,请检查路径或文件名是否正确!");
        } finally {
            try {
                if (br != null){
                    br.close();
                } else if (fis != null)
                    fis.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        return map;
    }

    public boolean printGoodsByIdData(Integer id){
        Object[] obj = map.get(id);
        if (obj == null){
            System.out.println("错误:没有找到此ID商品项!");
            System.out.print("请重新输入商品ID: ");
            return false;
        }
        System.out.printf("%s\t %s\t %s\n", head);
        System.out.printf("%s\t %s\t %s\n", map.get(id));
        return true;
    }
}

GoodsInventoryTest.java 测试程序:
import java.util.Map;
import java.util.Scanner;

public class GoodsInventoryTest {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        String filePath = "./src/pers/uang/demo05/GoodsInventory.csv";
        GoodsInventory inventory = new GoodsInventory();
        Map<Integer , Object[]> map = inventory.readFile(filePath);
        int id = -1;
        boolean flag = false;
        boolean isNew = false;
        while (!flag){
            System.out.print("请输入商品ID: ");
            while (!flag) {
                id = scan.nextInt();
                scan.nextLine();
                flag = inventory.printGoodsByIdData(id);
            }
            System.out.print("\n请输入需要更新的库存数量(负号表示库存减少):");
            int count = scan.nextInt();
            scan.nextLine();
            if (inventory.updateInventoryById(id, count)) {
                isNew = true;
                System.out.println("\n更新成功!");
            } else {
                System.out.println("\n更新失败!");
            }
            System.out.print("还需要更新其它商品的库存记录吗(回车则继续, 任意输入退出系统): ");
            String isExit = scan.nextLine();
            if ("".equals(isExit)){
                flag = false;
            }
        }

        // 写入文件中去
        if (isNew){
            inventory.writeFile(filePath, map);
        } else {
            System.out.println("库存暂未更新, 无需写入!");
        }
    }
}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 06:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表