Todo Cli Cpp Dsa

Semester 2, SDF II PBL - ToDo list CLI applicartion using various data structures & OOPs concepts.

0 0

To-Do List Application: Task Management and Organization System#

This project is a feature-rich to-do list application aimed at effectively managing and organizing tasks for a diverse range of users, from students to professionals. It offers robust task management, prioritization, categorization, and progress tracking functionalities, along with an intuitive user interface.

Index#

  1. Problem Statement
  2. Solution Approach
  3. Data Structures Used and Why
  4. Implementation

Problem Statement#

Develop a user-friendly and efficient to-do list application to help users prioritize, categorize, and track tasks. The application will serve as an organizational tool for users handling various workloads.

Key Objectives#

  1. Task Management

    • Create, edit, and delete tasks.
    • Assign due dates, reminders, and priorities.
  2. Task Categorization

    • Implement tagging for task categories.
    • Allow filtering and sorting based on categories.
  3. Progress Tracking

    • Visualize task completion with progress bars or checkmarks.
    • Maintain a history of completed tasks.
  4. User Experience

    • Design an intuitive interface with responsive and visually appealing elements.
  5. Additional Features

    • Add note-taking capabilities for detailed task descriptions.
    • Suggest important tasks using prioritization algorithms.

Solution Approach#

1. User Interface Design#

  • An intuitive and responsive design adaptable to multiple devices.
  • Visual indicators (e.g., icons, checkmarks) for task status.

2. Task Management#

  • Add, edit, remove, and mark tasks as complete.
  • Store tasks efficiently in hierarchical or structured data formats.

3. Task Prioritization#

  • Assign priority levels to tasks.
  • Use scheduling algorithms to organize tasks by urgency and importance.

4. Due Date and Notification System#

  • Notify users about upcoming deadlines via reminders.
  • Offer snooze/postpone options for flexible workload management.

5. Task Categorization#

  • Tag tasks for efficient categorization.
  • Enable filtering/sorting based on categories or tags.
  • Implement robust search functionalities with fuzzy search to handle typos.

7. Undo/Redo and Version Control#

  • Provide undo/redo actions for task modifications.
  • Maintain a history of changes for version control.

8. Task Dependencies#

  • Manage task relationships using dependency graphs.
  • Prevent dependent tasks from completion before prerequisite tasks.

9. Task Visualization#

  • Incorporate Gantt charts or kanban boards for progress tracking.

Data Structures Used and Why#

Current Data Structures#

  1. Vector
    • Stores a flat list of tasks, offering simplicity and quick access.

Proposed Enhancements#

  1. Tree Data Structure

    • Represents hierarchical relationships (parent/child tasks).
    • Facilitates efficient task retrieval and dependency management.
  2. Hash Table

    • Manages task categories for fast lookup and sorting.
  3. Priority Queue

    • Prioritizes tasks for quick retrieval of high-priority tasks.

Benefits#

  • Enhanced organization for complex tasks and dependencies.
  • Optimized task prioritization and retrieval.
  • Reduced memory usage for larger datasets.

Implementation#

Programming Language and Libraries#

  • Language: C++
  • Libraries: None (lightweight and platform-independent implementation).

Key Components#

  1. Task Class

    • Attributes: name, status, priority, dueDate, categories, reminderDate, and dependencies.
  2. Task Management Features

    • Add Task: Creates a new task with default status and priority.
    • Remove Task: Deletes a specified task while tracking changes in an undo stack.
    • Mark Complete: Updates task status to “Complete.”
  3. Undo/Redo Mechanism

    • Uses two stacks (undoStack and redoStack) to track task modifications.
  4. Task Dependencies

    • Establishes relationships between tasks using a dependency graph.
  5. Task Prioritization

    • Utilizes a priority queue to prioritize tasks dynamically.
  6. Visualization

    • Progress bars and kanban boards for task tracking.