Finalizar la herramienta
Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 22 de 56.
Desafío
FácilCompleta tu herramienta de lista de tareas implementando el bucle principal del programa que une toda la funcionalidad. Esta lección final crea una aplicación de gestión de tareas totalmente funcional que muestra repetidamente el menú y procesa los comandos del usuario hasta que este decide salir.
Se proporcionarán las siguientes entradas:
- Una serie de opciones de 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 tarea a eliminar (indexación basada en 1)
Tu programa debe:
- Comenzar con la misma configuración de las lecciones anteriores (un
std::vector<std::string>vacío llamadotasksy el mensaje de bienvenida) - Crear un bucle principal que continúe hasta que el usuario elija salir
- Mostrar el menú y leer la elección del usuario en cada iteración
- 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
- Opción 1: Leer una descripción de tarea y añadirla usando
- Para opciones de menú inválidas, mostrar un mensaje de error y continuar el bucle
- Imprimir un mensaje de despedida cuando el usuario salga
Utiliza exactamente el siguiente formato de salida:
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ú, mostrar:
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 inválido:
Error: Invalid task number. Please enter a number between 1 and [total tasks].Para una opción de menú inválida:
Invalid choice. Please try again.Cuando el usuario sale (opción 4):
Thank you for using Task List Tool!Utiliza un bucle while que continúe hasta que el usuario ingrese 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, imprime "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
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tarea