Menu
Coddy logo textTech

Finaliser l'outil

Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 22 sur 56.

challenge icon

Défi

Facile

Complé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 :

  1. Commencer avec la même configuration que les leçons précédentes (un std::vector<std::string> vide nommé tasks et un message de bienvenue)
  2. Créer une boucle principale qui continue jusqu'à ce que l'utilisateur choisisse de quitter
  3. Afficher le menu et lire le choix de l'utilisateur à chaque itération
  4. 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
  5. Pour les choix de menu invalides, afficher un message d'erreur et continuer la boucle
  6. 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