蓝燕云
电话咨询
在线咨询
免费试用

Java小项目水果管理系统怎么做?从零开始构建完整功能的入门实践

蓝燕云
2026-05-13
Java小项目水果管理系统怎么做?从零开始构建完整功能的入门实践

本文详细讲解了如何使用Java开发一个水果管理系统,涵盖项目设计、类结构划分、文件持久化、用户交互等全流程。适合初学者从零开始实践,掌握面向对象编程、集合操作、文件读写等核心技术,是Java入门阶段的理想练手项目。

Java小项目水果管理系统怎么做?从零开始构建完整功能的入门实践

在学习Java编程语言的过程中,很多初学者都会遇到一个共性问题:如何将理论知识转化为实际项目?一个简单但实用的小项目往往能带来极大的成就感和成长。今天我们就以水果管理系统为例,详细介绍如何用Java开发一个具备基础增删改查(CRUD)功能的桌面应用系统,帮助你掌握面向对象设计、文件读写、用户交互等核心技能。

一、项目背景与目标

随着信息化时代的到来,传统手工记录水果库存的方式已经难以满足日常管理需求。开发一个轻量级的水果管理系统,可以帮助小型水果店或校园社团实现对水果种类、数量、价格等信息的有效管理。本项目适合Java初学者作为实战练习,既能巩固语法基础,又能锻炼逻辑思维和工程化能力。

我们设定的目标如下:

  • 支持添加、删除、修改、查询水果信息
  • 数据持久化存储到本地文件(如CSV或文本文件)
  • 提供简洁易用的命令行界面(CLI)
  • 具备基本的数据校验机制(如防止重复添加、输入合法性检查)
  • 代码结构清晰,便于后续扩展为图形界面版本

二、技术选型与环境准备

本项目使用纯Java标准库完成,无需额外框架依赖,适合初学者上手:

  • 开发工具: IntelliJ IDEA 或 Eclipse(推荐IDEA,社区版免费)
  • Java版本: JDK 8 或更高版本(建议JDK 11以上,稳定性更好)
  • 运行平台: Windows / macOS / Linux 均可
  • 文件格式: 使用纯文本文件(.txt)或CSV格式保存数据,便于调试和理解

三、项目结构设计

为了保证代码的可维护性和可读性,我们将项目划分为以下几个模块:

1. 实体类 Fruit.java

public class Fruit {
    private String name;
    private double price;
    private int quantity;

    public Fruit(String name, double price, int quantity) {
        this.name = name;
        this.price = price;
        this.quantity = quantity;
    }

    // Getter and Setter 方法
    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 getQuantity() { return quantity; }
    public void setQuantity(int quantity) { this.quantity = quantity; }

    @Override
    public String toString() {
        return String.format("%s - ¥%.2f - %d个", name, price, quantity);
    }
}

2. 数据访问层:FruitDAO.java

负责读取和写入文件中的水果数据。这里我们采用简单的文本文件存储方式,每行一条记录,格式为:名称,单价,数量

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class FruitDAO {
    private static final String FILE_PATH = "fruits.txt";

    public List<Fruit> loadFruits() {
        List<Fruit> fruits = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(FILE_PATH))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] parts = line.split(",");
                if (parts.length == 3) {
                    String name = parts[0];
                    double price = Double.parseDouble(parts[1]);
                    int quantity = Integer.parseInt(parts[2]);
                    fruits.add(new Fruit(name, price, quantity));
                }
            }
        } catch (IOException e) {
            System.out.println("加载数据失败:" + e.getMessage());
        }
        return fruits;
    }

    public void saveFruits(List<Fruit> fruits) {
        try (PrintWriter pw = new PrintWriter(new FileWriter(FILE_PATH))) {
            for (Fruit f : fruits) {
                pw.println(f.getName() + "," + f.getPrice() + "," + f.getQuantity());
            }
        } catch (IOException e) {
            System.out.println("保存数据失败:" + e.getMessage());
        }
    }
}

3. 控制器层:FruitManager.java

这是整个系统的“大脑”,负责处理用户的操作请求,并调用DAO进行数据操作。

import java.util.Scanner;
import java.util.List;

public class FruitManager {
    private List<Fruit> fruits;
    private FruitDAO dao;
    private Scanner scanner;

    public FruitManager() {
        this.dao = new FruitDAO();
        this.fruits = dao.loadFruits();
        this.scanner = new Scanner(System.in);
    }

    public void start() {
        while (true) {
            showMenu();
            int choice = getIntInput("请选择操作:");

            switch (choice) {
                case 1:
                    addFruit();
                    break;
                case 2:
                    removeFruit();
                    break;
                case 3:
                    updateFruit();
                    break;
                case 4:
                    searchFruit();
                    break;
                case 5:
                    listAllFruits();
                    break;
                case 6:
                    saveAndExit();
                    return;
                default:
                    System.out.println("无效选项,请重新选择。");
            }
        }
    }

    private void showMenu() {
        System.out.println("\n========== 水果管理系统 ==========");
        System.out.println("1. 添加水果");
        System.out.println("2. 删除水果");
        System.out.println("3. 修改水果信息");
        System.out.println("4. 查询水果");
        System.out.println("5. 显示所有水果");
        System.out.println("6. 退出并保存");
    }

    private void addFruit() {
        System.out.print("请输入水果名称:");
        String name = scanner.nextLine();
        if (findFruitByName(name) != null) {
            System.out.println("该水果已存在!");
            return;
        }
        double price = getDoubleInput("请输入单价:");
        int quantity = getIntInput("请输入数量:");
        fruits.add(new Fruit(name, price, quantity));
        System.out.println("添加成功!");
    }

    private void removeFruit() {
        System.out.print("请输入要删除的水果名称:");
        String name = scanner.nextLine();
        Fruit fruit = findFruitByName(name);
        if (fruit != null) {
            fruits.remove(fruit);
            System.out.println("删除成功!");
        } else {
            System.out.println("未找到该水果。");
        }
    }

    private void updateFruit() {
        System.out.print("请输入要修改的水果名称:");
        String name = scanner.nextLine();
        Fruit fruit = findFruitByName(name);
        if (fruit != null) {
            double newPrice = getDoubleInput("请输入新单价:");
            int newQuantity = getIntInput("请输入新数量:");
            fruit.setPrice(newPrice);
            fruit.setQuantity(newQuantity);
            System.out.println("更新成功!");
        } else {
            System.out.println("未找到该水果。");
        }
    }

    private void searchFruit() {
        System.out.print("请输入要查询的水果名称:");
        String name = scanner.nextLine();
        Fruit fruit = findFruitByName(name);
        if (fruit != null) {
            System.out.println("找到:" + fruit.toString());
        } else {
            System.out.println("未找到该水果。");
        }
    }

    private void listAllFruits() {
        if (fruits.isEmpty()) {
            System.out.println("暂无水果信息。");
            return;
        }
        System.out.println("当前水果列表:");
        for (Fruit f : fruits) {
            System.out.println(f.toString());
        }
    }

    private void saveAndExit() {
        dao.saveFruits(fruits);
        System.out.println("数据已保存,程序退出。");
    }

    private Fruit findFruitByName(String name) {
        return fruits.stream()
                .filter(f -> f.getName().equals(name))
                .findFirst()
                .orElse(null);
    }

    private int getIntInput(String prompt) {
        while (true) {
            try {
                System.out.print(prompt);
                return Integer.parseInt(scanner.nextLine());
            } catch (NumberFormatException e) {
                System.out.println("请输入有效数字。");
            }
        }
    }

    private double getDoubleInput(String prompt) {
        while (true) {
            try {
                System.out.print(prompt);
                return Double.parseDouble(scanner.nextLine());
            } catch (NumberFormatException e) {
                System.out.println("请输入有效数字。");
            }
        }
    }
}

四、主类启动入口 Main.java

public class Main {
    public static void main(String[] args) {
        FruitManager manager = new FruitManager();
        manager.start();
    }
}

五、运行效果演示

编译并运行后,控制台会显示菜单,用户可以按提示操作:

  1. 添加水果(如苹果、香蕉)
  2. 查询某个水果是否存在及其详情
  3. 修改某水果的价格或库存
  4. 删除不需要的水果条目
  5. 退出时自动保存至fruits.txt文件

六、常见问题与优化建议

1. 如何避免重复添加水果?

我们在addFruit()中加入了查找逻辑,如果发现同名水果则提示“已存在”,这是最直接有效的防重策略。

2. 文件路径如何设置更灵活?

目前固定为fruits.txt,建议改为配置项,比如通过参数传入文件路径,或使用Properties文件管理路径。

3. 如何扩展成GUI版本?

未来可以引入Swing或JavaFX,将命令行界面转换为图形界面,增加按钮、表格展示等功能,提升用户体验。

4. 数据安全性考虑

当前版本仅做简单校验,生产环境中应加入异常捕获、日志记录、权限验证等机制。

七、总结与学习价值

这个Java小项目水果管理系统虽然功能简单,却是学习Java编程的良好起点。它涵盖了以下关键知识点:

  • 面向对象编程思想(封装、继承、多态)
  • 集合类的使用(List、Stream API)
  • 文件IO操作(读写文本文件)
  • 用户输入处理与异常处理
  • 模块化设计与职责分离(DAO层、业务逻辑层)

对于初学者来说,这是一个完整的开发闭环:从需求分析 → 设计类结构 → 编码实现 → 测试运行 → 优化改进。通过这样的项目实践,不仅能增强动手能力,还能建立起对软件工程流程的理解。

如果你正在学习Java,不妨尝试自己动手敲一遍代码,再根据自己的想法进行扩展,比如加入排序功能、导出Excel报表、支持模糊搜索等,让这个小项目变成你的第一个真正意义上的“作品”。

用户关注问题

Q1

什么叫工程管理系统?

工程管理系统是一种专为工程项目设计的管理软件,它集成了项目计划、进度跟踪、成本控制、资源管理、质量监管等多个功能模块。 简单来说,就像是一个数字化的工程项目管家,能够帮你全面、高效地管理整个工程项目。

Q2

工程管理系统具体是做什么的?

工程管理系统可以帮助你制定详细的项目计划,明确各阶段的任务和时间节点;还能实时监控项目进度, 一旦发现有延误的风险,就能立即采取措施进行调整。同时,它还能帮你有效控制成本,避免不必要的浪费。

Q3

企业为什么需要引入工程管理系统?

随着工程项目规模的不断扩大和复杂性的增加,传统的人工管理方式已经难以满足需求。 而工程管理系统能够帮助企业实现工程项目的数字化、信息化管理,提高管理效率和准确性, 有效避免延误和浪费。

Q4

工程管理系统有哪些优势?

工程管理系统的优势主要体现在提高管理效率、增强决策准确性、降低成本风险、提升项目质量等方面。 通过自动化和智能化的管理手段,减少人工干预和重复劳动,帮助企业更好地把握项目进展和趋势。