Finalizando a Ferramenta
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 22 de 56.
Desafio
FácilComplete sua ferramenta de lista de tarefas implementando o loop principal do programa que une todas as funcionalidades. Esta lição final cria um aplicativo 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 escolhas de menu (inteiros: 1 para "Add Task", 2 para "View Tasks", 3 para "Remove Task", 4 para "Quit")
- Para "Add Task" (escolha 1): uma string representando a descrição da tarefa
- Para "Remove Task" (escolha 3): um inteiro representando o número da tarefa a ser removida (indexação baseada em 1)
Seu programa deve:
- Começar com a mesma configuração das lições anteriores (um
std::vector<std::string>vazio chamadotaskse a mensagem de boas-vindas) - Criar um loop principal que continua até que o usuário escolha sair
- Exibir o menu e ler a escolha do usuário para cada iteração
- Processar cada opção do menu:
- Escolha 1: Ler uma descrição de tarefa e adicioná-la usando
push_back() - Escolha 2: Exibir todas as tarefas em formato numerado, ou mostrar "No tasks available." se estiver vazio
- Escolha 3: Ler um número de tarefa, validá-lo e remover a tarefa usando
.erase() - Escolha 4: Sair do loop do programa
- Escolha 1: Ler uma descrição de tarefa e adicioná-la usando
- Para escolhas de menu inválidas, exibir uma mensagem de erro e continuar o loop
- Imprimir uma mensagem de despedida quando o usuário sair
Use o seguinte formato de saída exato:
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!Para cada iteração do menu, exiba:
Choose an option: Para "Add Task" (escolha 1):
Task "[task description]" added successfully!
Total tasks: [number of tasks]Para "View Tasks" (escolha 2) com tarefas:
Your Tasks:
1. [first task]
2. [second task]
...
Total tasks: [number of tasks]Para "View Tasks" (escolha 2) quando estiver vazio:
No tasks available.Para "Remove Task" (escolha 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 "Remove Task" (escolha 3) com um número de tarefa inválido:
Error: Invalid task number. Please enter a number between 1 and [total tasks].Para escolha de menu inválida:
Invalid choice. Please try again.Quando o usuário sair (escolha 4):
Thank you for using Task List Tool!Use um loop while que continue até que o usuário insira 4. Para a funcionalidade "Remove Task", 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, imprima "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
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa