> For the complete documentation index, see [llms.txt](https://codewithmeiy.gitbook.io/core-java/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://codewithmeiy.gitbook.io/core-java/test-your-knowledge/collections/mini-project-task-management-system.md).

# Mini Project - Task Management System

### Mini Project: Task Management Application

**Project Description:**

Develop a simple command-line Task Management Application using Java Collections. The application should allow users to create tasks, assign them to categories, mark them as completed, and view tasks based on different criteria.

**Features to Implement:**

1. **Task Class:**
   * Create a Task class with attributes like title, description, due date, category, and status (completed or pending).
2. **Task Manager:**
   * Implement a collection (e.g., ArrayList) to manage tasks.
   * Provide functionalities to add new tasks, mark tasks as completed, and remove tasks from the list.
3. **Categories:**
   * Allow users to assign tasks to different categories (e.g., Work, Personal, Shopping, etc.).
   * Provide options to view tasks based on categories.
4. **Task Display:**
   * Implement functionality to display all tasks in the list.
   * Allow users to filter tasks based on their status (completed or pending).
5. **Task Details:**
   * Provide an option to view detailed information about a specific task, including its description, due date, and category.

**Additional Features (Optional):**

* Implement error handling and validation for user inputs.
* Allow users to edit task details or mark them as incomplete.
* Implement sorting functionalities based on due date or category.
* Persist data using file I/O or serialization for future sessions.

**Project Evaluation:**

Your project will be evaluated based on the following criteria:

* Correct implementation of classes and methods.
* Proper use of Java Collections to manage tasks.
* User-friendly interface with clear instructions and error handling.
* Efficient filtering and sorting algorithms.
* Ability to handle edge cases and unexpected inputs.
