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

Terminez votre outil de liste de tâches en implémentant la boucle principale du programme qui relie toutes les fonctionnalités. Cette dernière leçon crée une application de gestion des tâches entièrement fonctionnelle qui affiche le menu à plusieurs reprises 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 ajouter une tâche, 2 pour afficher les tâches, 3 pour supprimer une tâche, 4 pour quitter)
  • Pour l’ajout d’une tâche (choix 1) : une chaîne représentant la description de la tâche
  • Pour la suppression d’une tâche (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 dans les leçons précédentes (std::vector<std::string> vide nommé tasks et 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 à l’aide de push_back()
    • Choix 2 : Afficher toutes les tâches dans un 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 à l’aide de .erase()
    • Choix 4 : Quitter 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’au revoir lorsque l’utilisateur quitte

Utilisez le format de sortie exact 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!

À chaque itération du menu, affichez :

Choose an option: 

Pour l’ajout d’une tâche (choix 1) :

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

Pour l’affichage des tâches (choix 2) lorsqu’il y a des tâches :

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

Pour l’affichage des tâches (choix 2) lorsque la liste est vide :

No tasks available.

Pour la suppression d’une tâche (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 la suppression d’une tâche (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.

Lorsque 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é de suppression d’une tâche, pensez à vérifier que le numéro de tâche est compris entre 1 et tasks.size() avant d’utiliser tasks.erase(tasks.begin() + index). Si la liste devient vide après la 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

Entraînez-vous par vous-même : Compilateur C++ en ligne