Finalizowanie narzędzia
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 22 z 56.
Wyzwanie
ŁatwyUkończ tworzenie narzędzia do zarządzania listą zadań, implementując główną pętlę programu, która łączy wszystkie funkcje. Ta ostatnia lekcja pozwoli utworzyć w pełni funkcjonalną aplikację do zarządzania zadaniami, która wielokrotnie wyświetla menu i przetwarza polecenia użytkownika, aż ten zdecyduje się zakończyć działanie programu.
Podane zostaną następujące dane wejściowe:
- Seria wyborów z menu (liczby całkowite: 1 — Add Task, 2 — View Tasks, 3 — Remove Task, 4 — Quit)
- W przypadku Add Task (wybór 1): ciąg znaków opisujący zadanie
- W przypadku Remove Task (wybór 3): liczba całkowita określająca numer zadania do usunięcia (indeksowanie od 1)
Twój program powinien:
- Rozpocząć od takiej samej konfiguracji jak w poprzednich lekcjach (pusty
std::vector<std::string>o nazwietasksi wiadomość powitalna) - Utworzyć główną pętlę, która będzie działać do momentu, gdy użytkownik zdecyduje się zakończyć program
- Wyświetlać menu i odczytywać wybór użytkownika w każdej iteracji
- Przetwarzać każdą opcję menu:
- Wybór 1: Odczytać opis zadania i dodać je za pomocą
push_back() - Wybór 2: Wyświetlić wszystkie zadania w ponumerowanym formacie lub pokazać "No tasks available.", jeśli lista jest pusta
- Wybór 3: Odczytać numer zadania, sprawdzić jego poprawność i usunąć zadanie za pomocą
.erase() - Wybór 4: Zakończyć pętlę programu
- Wybór 1: Odczytać opis zadania i dodać je za pomocą
- W przypadku nieprawidłowego wyboru z menu wyświetlić komunikat o błędzie i kontynuować pętlę
- Wyświetlić wiadomość pożegnalną, gdy użytkownik zakończy działanie programu
Użyj dokładnie następującego formatu wyjściowego:
Początkowa konfiguracja i wyświetlenie 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!W każdej iteracji menu wyświetl:
Choose an option: W przypadku Add Task (wybór 1):
Task "[task description]" added successfully!
Total tasks: [number of tasks]W przypadku View Tasks (wybór 2), gdy lista zawiera zadania:
Your Tasks:
1. [first task]
2. [second task]
...
Total tasks: [number of tasks]W przypadku View Tasks (wybór 2), gdy lista jest pusta:
No tasks available.W przypadku Remove Task (wybór 3), gdy numer zadania jest prawidłowy:
Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
...
Total tasks: [updated number of tasks]W przypadku Remove Task (wybór 3), gdy numer zadania jest nieprawidłowy:
Error: Invalid task number. Please enter a number between 1 and [total tasks].W przypadku nieprawidłowego wyboru z menu:
Invalid choice. Please try again.Gdy użytkownik zakończy działanie programu (wybór 4):
Thank you for using Task List Tool!Użyj pętli while, która będzie działać do momentu, gdy użytkownik wprowadzi 4. W funkcji Remove Task pamiętaj, aby sprawdzić, czy numer zadania mieści się w zakresie od 1 do tasks.size(), zanim użyjesz tasks.erase(tasks.begin() + index). Jeśli po usunięciu lista będzie pusta, wyświetl "No tasks remaining." zamiast listy pozostałych zadań.
Spróbuj swoich sił
#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;
}Wszystkie lekcje w sekcji Logika i przepływ programu
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadaniaPoćwicz samodzielnie: Kompilator C++ online