使用IO流完成项目实战水果库存系统

  • 以下内容本人都是在 Maven 工程下总结的
  1. 需求介绍
  2. 显示主菜单
  3. 让程序无线运行下去
  4. 加载数据
  5. 显示库存列表
  6. 根据名称查找特定库存记录
  7. 添加库存记录
  8. 查看_下架_退出功能实现
  9. 持久化数据 / 钝化:将 内存 里的数据持久化存储到 硬盘  IO流
java">package com.csdn.fruit.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Fruit {
    private String fname;
    private Integer price;
    private Integer fcount;
    private String remark;

    @Override
    public String toString() {
        return fname + "\t\t" + price + "\t\t" + fcount + "\t\t" + remark;
    }
}
java">package com.csdn.fruit.view;
import com.csdn.fruit.pojo.Fruit;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.function.Consumer;
import java.util.function.Predicate;

public class Menu {

    Scanner input = new Scanner(System.in);

    List<Fruit> fruitList = new ArrayList<>();

    {
        try {
            loadData();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    //加载数据
    public void loadData() throws IOException {
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("fruit.dat");
        if (inputStream != null) {
            //字节流转换成字符流
            //字节流:InputStream    字符流:Reader  字符转换流:InputStreamReader
            BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream));
            String str = null;
            while ((str = bf.readLine()) != null) {
                String[] arr = str.split(" ");
                String fname = arr[0];
                Integer price = Integer.parseInt(arr[1]);
                Integer fcount = Integer.parseInt(arr[2]);
                String remark = arr[3];

                Fruit fruit = new Fruit(fname, price, fcount, remark);

                fruitList.add(fruit);
            }
        }
    }

    //显示主菜单
    public int showMainMenu() {
        System.out.println("================欢迎使用水果库存系统===================");
        System.out.println("1.显示库存列表");
        System.out.println("2.添加库存记录");
        System.out.println("3.查看特定库存");
        System.out.println("4.水果下架");
        System.out.println("5.退出");
        System.out.println("====================================================");
        System.out.print("请选择:");


        return input.nextInt();
    }

    //显示库存列表
    public void showFruitList() {
        System.out.println("----------------------------------------------------");
        System.out.println("名称\t\t单价\t\t库存\t\t备注");
        if (fruitList == null || fruitList.size() <= 0) {
            System.out.println("对不起,库存为空!");
        } else {
            /*fruitList.forEach(new Consumer<Fruit>() {
                @Override
                public void accept(Fruit fruit) {
                    System.out.println(fruit);
                }
            });*/
//            fruitList.forEach(fruit -> System.out.println(fruit));
            fruitList.forEach(System.out::println);
        }
        System.out.println("----------------------------------------------------");
    }

    //根据名称查询指定的库存记录
    public Fruit getFruitByFname(String fname) {
        //判断型接口    有参数,返回值是布尔类型
      /*  fruitList.stream().filter(new Predicate<Fruit>() {
            @Override
            public boolean test(Fruit fruit) {
                return fname.equals(fruit.getFname());
            }
        });*/
        return fruitList.stream().filter(fruit -> fname.equals(fruit.getFname())).findFirst().orElseGet(() -> null);

      /*  for (Fruit fruit : fruitList) {
            if (fname.equals(fruit.getFname())) {
                return fruit;
            }
        }
        return null;*/
    }

    //添加库存记录
    public void addFruit() {
        System.out.print("请输入水果名称:");
        String fname = input.next();

        Fruit fruit = getFruitByFname(fname);

        if (fruit == null) {
            System.out.print("请输入水果单价:");
            Integer price = input.nextInt();
            System.out.print("请输入水果库存:");
            Integer fcount = input.nextInt();
            System.out.print("请输入水果备注:");
            String remark = input.next();

            fruit = new Fruit(fname, price, fcount, remark);
            fruitList.add(fruit);
        } else {
            System.out.print("请输入追加的库存量:");
            Integer fcount = input.nextInt();
            fruit.setFcount(fruit.getFcount() + fcount);
        }
        System.out.println("添加成功!");
    }

    //查看特定库存记录
    public void showFruitInfo() {
        System.out.print("请输入水果名称:");
        String fname = input.next();
        Fruit fruit = getFruitByFname(fname);

        if (fruit == null) {
            System.out.println("对不起,没有找到对应的库存记录!");
        } else {
            System.out.println("----------------------------------------------------");
            System.out.println("名称\t\t单价\t\t库存\t\t备注");
            System.out.println(fruit);
            System.out.println("----------------------------------------------------");
        }
    }

    //水果下架
    public void delFruit() {
        System.out.print("请输入水果名称:");
        String fname = input.next();

        Fruit fruit = getFruitByFname(fname);
        if (fruit == null) {
            System.out.println("对不起,没有找到需要下架的库存记录!");
        } else {
            System.out.print("是否确认下架?(Y/N)");
            String confirm = input.next();
            if ("y".equalsIgnoreCase(confirm)) {
                fruitList.remove(fruit);
            }

        }
    }

    //退出
    public boolean exit() {
        System.out.print("是否确认退出?(Y/N)");
        String confirm = input.next();
        boolean flag= !"y".equalsIgnoreCase(confirm);
        if (!flag) {
            try {
                saveData();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return flag;
    }

    //保持数据
    public void saveData() throws IOException {
        PrintWriter pw = new PrintWriter(new FileWriter("pro02-fruit-IO/src/main/resources/fruit.dat"));

      /*  fruitList.forEach(new Consumer<Fruit>() {
            @Override
            public void accept(Fruit fruit) {
                pw.println(fruit.getFname() + " " + fruit.getPrice() + " " + fruit.getFcount() + " " + fruit.getRemark());
            }
        });*/

        fruitList.forEach(fruit -> pw.println(fruit.getFname() + " " + fruit.getPrice() + " " + fruit.getFcount() + " " + fruit.getRemark()));

        pw.flush();
    }
}
java">package com.csdn.fruit.view;

public class Client {
    
    public static void main(String[] args) {
        Menu m = new Menu();

        boolean flag = true;
        while (flag) {
            int slt = m.showMainMenu();
            switch (slt) {
                case 1:
                    m.showFruitList();
                    break;
                case 2:
                    m.addFruit();
                    break;
                case 3:
                    m.showFruitInfo();
                    break;
                case 4:
                    m.delFruit();
                    break;
                case 5:
                    //方法设计时是否需要返回值,依据是:是否在调用的地方需要留下一些值用于再运算
                    flag = m.exit();
                    break;
                default:
                    System.out.println("你不按套路出牌!");
                    break;
            }
        }
        System.out.println("谢谢使用!再见!");
    }
}

  • 需求介绍 

java">================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:1
----------------------------------------------------
名称         单价          库存           备注
苹果         5            100            苹果很好吃
菠萝         3            150            菠萝很好吃
榴莲         4            200            榴莲很好吃
----------------------------------------------------
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:1
----------------------------------------------------
名称         单价          库存           备注
对不起,库存为空!
----------------------------------------------------
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:2
请输入水果名称:苹果
请输入追加的库存量:30
添加成功!
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:1
----------------------------------------------------
名称         单价          库存           备注
苹果         5            130            苹果很好吃
菠萝         3            150            菠萝很好吃
榴莲         4            200            榴莲很好吃
----------------------------------------------------
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:2
请输入水果名称:西瓜
请输入水果单价:6
请输入水果库存:120
请输入水果备注:西瓜很好吃!
添加成功!
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:1
----------------------------------------------------
名称         单价          库存           备注
苹果         5            130            苹果很好吃
菠萝         3            150            菠萝很好吃
榴莲         4            200            榴莲很好吃
西瓜         6            120            西瓜很好吃
----------------------------------------------------
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:3
请输入水果名称:榴莲
----------------------------------------------------
名称         单价          库存           备注
榴莲         4            200            榴莲很好吃
----------------------------------------------------
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:3
请输入水果名称:橙子
对不起,没有找到对应的库存记录!
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:4
请输入水果名称:橙子
对不起,没有找到需要下架的库存记录!
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:4
请输入水果名称:西瓜
是否确认下架?(Y/N)  Y
下架成功!
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:1
----------------------------------------------------
名称         单价          库存           备注
苹果         5            130            苹果很好吃
菠萝         3            150            菠萝很好吃
榴莲         4            200            榴莲很好吃
----------------------------------------------------
================欢迎使用水果库存系统===================
1.显示库存列表
2.添加库存记录
3.查看特定库存
4.水果下架
5.退出
====================================================
请选择:5
是否确认退出?(Y/N) Y
谢谢使用!再见!


http://www.niftyadmin.cn/n/5117410.html

相关文章

QLable 类使用教程

文章目录 1、简介2 、公共类型3、属性4、functions4.1、访问属性相关 function4.2、公共槽4.3、Signal4.4、其他方法 QLabel 内容长度超过控件本身长度时处理1、QLabel 内容长度超过控件本身长度时超出的部分用省略号2、QLabel 内容长度超过控件本身长度时使用定时器滑动显示文…

高速下载b站视频的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

windows10下pytorch环境部署留念

pytorch环境部署留念 第一步&#xff1a;下载安装anaconda 官网地址 &#xff08;也可以到清华大学开源软件镜像站下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/&#xff09; 我安装的是下面这个&#xff0c;一通下一步就完事儿。 第二步&#x…

JSX 注意事项

学习目标&#xff1a; 掌握 JSX 实际开发过程中的一些注意事项   1. JSX 必须具有一个根节点&#xff0c;如果没有根节点可以使用<></>(幽灵节点)代替根节点将所有元素包裹起来 function App() {return (<><div className"App">1</div&…

php实战案例记录(25)intval函数的用法

在PHP中&#xff0c;intval()函数用于将一个字符串转换为整数。它的语法如下&#xff1a; intval(string $value, int $base 10): int参数说明&#xff1a; $value&#xff1a;要转换的字符串。$base&#xff08;可选&#xff09;&#xff1a;进制数&#xff0c;默认为10。如…

《java核心卷Ⅰ》知识点总结(可作面试题)

&#x1f6eb; JDK和JRE傻傻分不清?&#x1f6eb; HelloWorld的输出都经历了啥&#xff1f;&#x1f6eb; Java的三个版本都是啥&#xff1f;&#x1f6eb; 关于main方法你都知道啥&#xff1f;main方法被声明为private会怎样&#xff1f;&#x1f6eb; 强制and自动类型转换都…

Windows / Ubuntu 连wifi,网线连接旭日X3派以共享网络

首先&#xff0c;PC电脑连好wifi Windows 找到【控制面板->网络和Internet->网络和共享中心->查看网络状态和任务->更改适配器设置】 找到WLAN&#xff0c;右键【属性->共享】勾上允许&#xff0c;然后【确定】。 Ubuntu 打开设置&#xff0c;找到有线设置…

Ubuntu18.04如何安装搜狗、网易云音乐、百度网盘、金山WPS、谷歌浏览器、微信、Maven、Pycharm、Anaconda、MySQL8.0等软件

目录 1.搜狗输入法 下载 安装 卸载 2.网易云音乐 下载 安装 3.百度网盘 下载 安装 4.金山WPS 下载 安装 5.谷歌浏览器 下载 安装 6.微信 下载安装 7.Maven 下载 安装 配置镜像源 8.Pycharm 下载 安装 9.Anaconda 下载 安装 卸载 10.MySQL8.0 下载…