Menu
Coddy logo textTech

Completare lo strumento

Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 22 di 56.

challenge icon

Sfida

Facile

Completa il tuo strumento per la lista delle attività implementando il ciclo principale del programma che collega tutte le funzionalità. Questa lezione finale crea un'applicazione di gestione delle attività completamente funzionale, che visualizza ripetutamente il menu ed elabora i comandi dell'utente finché quest'ultimo non sceglie di uscire.

Verranno forniti i seguenti input:

  • Una serie di opzioni del menu (interi: 1 per Add Task, 2 per View Tasks, 3 per Remove Task, 4 per Quit)
  • Per Add Task (opzione 1): una stringa che rappresenta la descrizione dell'attività
  • Per Remove Task (opzione 3): un intero che rappresenta il numero dell'attività da rimuovere (indicizzazione a partire da 1)

Il programma dovrebbe:

  1. Iniziare con la stessa configurazione delle lezioni precedenti (std::vector<std::string> vuoto denominato tasks e messaggio di benvenuto)
  2. Creare un ciclo principale che continui finché l'utente non sceglie di uscire
  3. Visualizzare il menu e leggere la scelta dell'utente a ogni iterazione
  4. Elaborare ogni opzione del menu:
    • Opzione 1: leggere la descrizione di un'attività e aggiungerla usando push_back()
    • Opzione 2: visualizzare tutte le attività in formato numerato, oppure mostrare "No tasks available." se l'elenco è vuoto
    • Opzione 3: leggere il numero di un'attività, convalidarlo e rimuovere l'attività usando .erase()
    • Opzione 4: uscire dal ciclo del programma
  5. Per le opzioni del menu non valide, visualizzare un messaggio di errore e continuare il ciclo
  6. Stampare un messaggio di arrivederci quando l'utente esce

Usa il seguente formato di output esatto:

Configurazione iniziale e visualizzazione del 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!

A ogni iterazione del menu, visualizza:

Choose an option: 

Per Add Task (opzione 1):

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

Per View Tasks (opzione 2) con attività presenti:

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

Per View Tasks (opzione 2) quando l'elenco è vuoto:

No tasks available.

Per Remove Task (opzione 3) con un numero di attività valido:

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

Per Remove Task (opzione 3) con un numero di attività non valido:

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

Per una scelta del menu non valida:

Invalid choice. Please try again.

Quando l'utente esce (opzione 4):

Thank you for using Task List Tool!

Usa un ciclo while che continui finché l'utente non inserisce 4. Per la funzionalità Remove Task, ricordati di verificare che il numero dell'attività sia compreso tra 1 e tasks.size() prima di usare tasks.erase(tasks.begin() + index). Se l'elenco diventa vuoto dopo la rimozione, stampa "No tasks remaining." invece dell'elenco delle attività rimanenti.

Provalo tu

#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;
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C++ online