Finaliser l'outil
Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 22 sur 56.
Défi
FacileComplétez votre outil de liste de tâches en implémentant la boucle principale du programme qui lie toutes les fonctionnalités entre elles. Cette dernière leçon crée une application de gestion de tâches entièrement fonctionnelle qui affiche le menu de manière répétée et traite les commandes de l'utilisateur jusqu'à ce qu'il choisisse de quitter.
Les entrées suivantes seront fournies :
- Une série de choix de menu (entiers : 1 pour "Add Task", 2 pour "View Tasks", 3 pour "Remove Task", 4 pour "Quit")
- Pour "Add Task" (choix 1) : une chaîne de caractères représentant la description de la tâche
- Pour "Remove Task" (choix 3) : un entier représentant le numéro de la tâche à supprimer (indexation commençant à 1)
Votre programme doit :
- Commencer avec la même configuration que les leçons précédentes (un
std::vector<std::string>vide nommétaskset un message de bienvenue) - Créer une boucle principale qui continue jusqu'à ce que l'utilisateur choisisse de quitter
- Afficher le menu et lire le choix de l'utilisateur à chaque itération
- Traiter chaque option du menu :
- Choix 1 : Lire une description de tâche et l'ajouter en utilisant
push_back() - Choix 2 : Afficher toutes les tâches au format numéroté, ou afficher "No tasks available." si la liste est vide
- Choix 3 : Lire un numéro de tâche, le valider, et supprimer la tâche en utilisant
.erase() - Choix 4 : Sortir de la boucle du programme
- Choix 1 : Lire une description de tâche et l'ajouter en utilisant
- Pour les choix de menu invalides, afficher un message d'erreur et continuer la boucle
- Afficher un message d'adieu lorsque l'utilisateur quitte
Utilisez exactement le format de sortie suivant :
Configuration initiale et affichage du menu :
Welcome to Task List Tool!
Menu Options:
1. Add Task
2. View Tasks
3. Remove Task
4. Quit
Task list system initialized and ready!Pour chaque itération du menu, affichez :
Choose an option: Pour "Add Task" (choix 1) :
Task "[task description]" added successfully!
Total tasks: [number of tasks]Pour "View Tasks" (choix 2) avec des tâches :
Your Tasks:
1. [first task]
2. [second task]
...
Total tasks: [number of tasks]Pour "View Tasks" (choix 2) quand la liste est vide :
No tasks available.Pour "Remove Task" (choix 3) avec un numéro de tâche valide :
Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
...
Total tasks: [updated number of tasks]Pour "Remove Task" (choix 3) avec un numéro de tâche invalide :
Error: Invalid task number. Please enter a number between 1 and [total tasks].Pour un choix de menu invalide :
Invalid choice. Please try again.Quand l'utilisateur quitte (choix 4) :
Thank you for using Task List Tool!Utilisez une boucle while qui continue jusqu'à ce que l'utilisateur saisisse 4. Pour la fonctionnalité "Remove Task", n'oubliez pas de valider que le numéro de la tâche est compris entre 1 et tasks.size() avant d'utiliser tasks.erase(tasks.begin() + index). Si la liste devient vide après une suppression, affichez "No tasks remaining." au lieu de la liste des tâches restantes.
Essayez vous-même
#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;
}Toutes les leçons de Logique et Flux
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâche