Menu
Coddy logo textTech

Finalizando a Ferramenta

Parte da seção Lógica & Fluxo do Journey de C++ da Coddy. Lição 22 de 56.

challenge icon

Desafio

Fácil

Conclua sua ferramenta de lista de tarefas implementando o loop principal do programa que conecta todas as funcionalidades. Esta lição final cria uma aplicação de gerenciamento de tarefas totalmente funcional que exibe repetidamente o menu e processa os comandos do usuário até que ele escolha sair.

As seguintes entradas serão fornecidas:

  • Uma série de opções do menu (inteiros: 1 para Adicionar tarefa, 2 para Ver tarefas, 3 para Remover tarefa, 4 para Sair)
  • Para Adicionar tarefa (opção 1): uma string representando a descrição da tarefa
  • Para Remover tarefa (opção 3): um inteiro representando o número da tarefa a ser removida (indexação baseada em 1)

Seu programa deve:

  1. Começar com a mesma configuração das lições anteriores (std::vector<std::string> vazio chamado tasks e mensagem de boas-vindas)
  2. Criar um loop principal que continue até que o usuário escolha sair
  3. Exibir o menu e ler a escolha do usuário a cada iteração
  4. Processar cada opção do menu:
    • Opção 1: Ler uma descrição de tarefa e adicioná-la usando push_back()
    • Opção 2: Exibir todas as tarefas em formato numerado ou mostrar "No tasks available." se estiver vazio
    • Opção 3: Ler um número de tarefa, validá-lo e remover a tarefa usando .erase()
    • Opção 4: Sair do loop do programa
  5. Para opções de menu inválidas, exibir uma mensagem de erro e continuar o loop
  6. Exibir uma mensagem de despedida quando o usuário sair

Use o seguinte formato exato de saída:

Configuração inicial e exibição do 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 cada iteração do menu, exiba:

Choose an option: 

Para Adicionar tarefa (opção 1):

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

Para Ver tarefas (opção 2) com tarefas:

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

Para Ver tarefas (opção 2) quando estiver vazio:

No tasks available.

Para Remover tarefa (opção 3) com um número de tarefa válido:

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

Para Remover tarefa (opção 3) com um número de tarefa inválido:

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

Para uma opção de menu inválida:

Invalid choice. Please try again.

Quando o usuário sair (opção 4):

Thank you for using Task List Tool!

Use um loop while que continue até que o usuário insira 4. Para a funcionalidade Remover tarefa, lembre-se de validar se o número da tarefa está entre 1 e tasks.size() antes de usar tasks.erase(tasks.begin() + index). Se a lista ficar vazia após a remoção, exiba "No tasks remaining." em vez da lista de tarefas restantes.

Experimente você mesmo

#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 as lições de Lógica & Fluxo

Pratique por conta própria: Compilador de C++ online