Menu
Coddy logo textTech

Finalizar la herramienta

Parte de la sección Lógica y Flujo del Journey de C++ de Coddy. Lección 22 de 56.

challenge icon

Desafío

Fácil

Completa tu herramienta de lista de tareas implementando el bucle principal del programa que conecta toda la funcionalidad. Esta lección final crea una aplicación de gestión de tareas completamente funcional que muestra repetidamente el menú y procesa los comandos del usuario hasta que este elija salir.

Se proporcionarán las siguientes entradas:

  • Una serie de opciones del menú (enteros: 1 para Add Task, 2 para View Tasks, 3 para Remove Task, 4 para Quit)
  • Para Add Task (opción 1): una cadena que representa la descripción de la tarea
  • Para Remove Task (opción 3): un entero que representa el número de la tarea que se eliminará (indexación basada en 1)

Tu programa debe:

  1. Comenzar con la misma configuración de las lecciones anteriores (std::vector<std::string> vacío llamado tasks y el mensaje de bienvenida)
  2. Crear un bucle principal que continúe hasta que el usuario elija salir
  3. Mostrar el menú y leer la opción del usuario en cada iteración
  4. Procesar cada opción del menú:
    • Opción 1: leer una descripción de tarea y añadirla usando push_back()
    • Opción 2: mostrar todas las tareas en formato numerado, o mostrar "No tasks available." si está vacío
    • Opción 3: leer un número de tarea, validarlo y eliminar la tarea usando .erase()
    • Opción 4: salir del bucle del programa
  5. Para opciones de menú no válidas, mostrar un mensaje de error y continuar el bucle
  6. Mostrar un mensaje de despedida cuando el usuario salga

Usa el siguiente formato de salida exacto:

Configuración inicial y visualización del menú:

Welcome to Task List Tool!

Menu Options:
1. Add Task
2. View Tasks
3. Remove Task
4. Quit

Task list system initialized and ready!

Para cada iteración del menú, muestra:

Choose an option: 

Para Add Task (opción 1):

Task "[task description]" added successfully!
Total tasks: [number of tasks]

Para View Tasks (opción 2) con tareas:

Your Tasks:
1. [first task]
2. [second task]
...
Total tasks: [number of tasks]

Para View Tasks (opción 2) cuando está vacío:

No tasks available.

Para Remove Task (opción 3) con un número de tarea válido:

Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
...
Total tasks: [updated number of tasks]

Para Remove Task (opción 3) con un número de tarea no válido:

Error: Invalid task number. Please enter a number between 1 and [total tasks].

Para una opción de menú no válida:

Invalid choice. Please try again.

Cuando el usuario salga (opción 4):

Thank you for using Task List Tool!

Usa un bucle while que continúe hasta que el usuario introduzca 4. Para la funcionalidad Remove Task, recuerda validar que el número de tarea esté entre 1 y tasks.size() antes de usar tasks.erase(tasks.begin() + index). Si la lista queda vacía después de la eliminación, muestra "No tasks remaining." en lugar de la lista de tareas restantes.

Pruébalo tú mismo

#include <iostream>
#include <vector>
#include <string>

int main() {
    std::vector<std::string> tasks;
    
    std::cout << "Welcome to Task List Tool!" << std::endl;
    std::cout << std::endl;
    std::cout << "Menu Options:" << std::endl;
    std::cout << "1. Add Task" << std::endl;
    std::cout << "2. View Tasks" << std::endl;
    std::cout << "3. Quit" << std::endl;
    std::cout << std::endl;
    std::cout << "Task list system initialized and ready!" << std::endl;
    
    int n;
    std::cin >> n;
    std::cin.ignore();
    
    for (int i = 0; i < n; i++) {
        std::string task;
        std::getline(std::cin, task);
        tasks.push_back(task);
    }
    
    int taskNumber;
    std::cin >> taskNumber;
    
    if (taskNumber < 1 || taskNumber > tasks.size()) {
        std::cout << "Error: Invalid task number. Please enter a number between 1 and " << tasks.size() << "." << std::endl;
    } else {
        std::string removedTask = tasks[taskNumber - 1];
        tasks.erase(tasks.begin() + (taskNumber - 1));
        
        std::cout << "Task \"" << removedTask << "\" removed successfully!" << std::endl;
        
        if (tasks.empty()) {
            std::cout << "No tasks remaining." << std::endl;
        } else {
            std::cout << "Remaining Tasks:" << std::endl;
            for (int i = 0; i < tasks.size(); i++) {
                std::cout << (i + 1) << ". " << tasks[i] << std::endl;
            }
        }
        
        std::cout << "Total tasks: " << tasks.size() << std::endl;
    }
    
    return 0;
}

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de C++ online