Завершение работы над инструментом
Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 22 из 56.
Задание
ЛегкоЗавершите создание инструмента для списка задач, реализовав основной цикл программы, который объединяет всю функциональность. Этот финальный урок создает полностью функциональное приложение для управления задачами, которое многократно отображает меню и обрабатывает команды пользователя, пока он не решит выйти.
Будут предоставлены следующие входные данные:
- Серия вариантов меню (целые числа: 1 для Add Task, 2 для View Tasks, 3 для Remove Task, 4 для Quit)
- Для Add Task (вариант 1): строка, представляющая описание задачи
- Для Remove Task (вариант 3): целое число, представляющее номер задачи для удаления (индексация начинается с 1)
Ваша программа должна:
- Начинаться с той же настройки, что и в предыдущих уроках (пустой
std::vector<std::string>с именемtasksи приветственное сообщение) - Создать основной цикл, который продолжается до тех пор, пока пользователь не решит выйти
- Отображать меню и считывать выбор пользователя на каждой итерации
- Обрабатывать каждый пункт меню:
- Вариант 1: Считать описание задачи и добавить его с помощью
push_back() - Вариант 2: Отобразить все задачи в нумерованном формате или вывести "No tasks available.", если список пуст
- Вариант 3: Считать номер задачи, проверить его и удалить задачу с помощью
.erase() - Вариант 4: Выйти из цикла программы
- Вариант 1: Считать описание задачи и добавить его с помощью
- Для неверных вариантов меню выводить сообщение об ошибке и продолжать цикл
- Вывести прощальное сообщение, когда пользователь выходит из программы
Используйте следующий точный формат вывода:
Начальная настройка и отображение меню:
Welcome to Task List Tool!
Menu Options:
1. Add Task
2. View Tasks
3. Remove Task
4. Quit
Task list system initialized and ready!Для каждой итерации меню выводите:
Choose an option: Для Add Task (вариант 1):
Task "[task description]" added successfully!
Total tasks: [number of tasks]Для View Tasks (вариант 2) при наличии задач:
Your Tasks:
1. [first task]
2. [second task]
...
Total tasks: [number of tasks]Для View Tasks (вариант 2), когда список пуст:
No tasks available.Для Remove Task (вариант 3) с валидным номером задачи:
Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
...
Total tasks: [updated number of tasks]Для Remove Task (вариант 3) с невалидным номером задачи:
Error: Invalid task number. Please enter a number between 1 and [total tasks].Для неверного выбора в меню:
Invalid choice. Please try again.Когда пользователь выходит (вариант 4):
Thank you for using Task List Tool!Используйте цикл while, который продолжается до тех пор, пока пользователь не введет 4. Для функционала Remove Task не забудьте проверить, что номер задачи находится в диапазоне от 1 до tasks.size(), прежде чем использовать tasks.erase(tasks.begin() + index). Если после удаления список становится пустым, выведите "No tasks remaining." вместо списка оставшихся задач.
Попробуйте сами
#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;
}Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров3Проект: Список задач
Обзор проектаДобавление задачи