Завершение работы над инструментом
Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 22 из 56.
Задание
ЛегкоЗавершите создание инструмента для работы со списком задач, реализовав главный цикл программы, объединяющий все функции. В этом заключительном уроке создаётся полностью функциональное приложение для управления задачами, которое многократно отображает меню и обрабатывает команды пользователя, пока тот не выберет выход.
Будут предоставлены следующие входные данные:
- Серия вариантов меню (целые числа: 1 для Add Task, 2 для View Tasks, 3 для Remove Task, 4 для Quit)
- Для Add Task (choice 1): строка, представляющая описание задачи
- Для Remove Task (choice 3): целое число, представляющее номер удаляемой задачи (индексация с 1)
Ваша программа должна:
- Начинать с той же настройки, что и в предыдущих уроках (пустой
std::vector<std::string>с именемtasksи приветственное сообщение) - Создавать основной цикл, который продолжается, пока пользователь не выберет выход
- Отображать меню и считывать выбор пользователя на каждой итерации
- Обрабатывать каждый вариант меню:
- Choice 1: Считать описание задачи и добавить его с помощью
push_back() - Choice 2: Отобразить все задачи в нумерованном формате или показать "No tasks available.", если список пуст
- Choice 3: Считать номер задачи, проверить его и удалить задачу с помощью
.erase() - Choice 4: Завершить цикл программы
- Choice 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 (choice 1):
Task "[task description]" added successfully!
Total tasks: [number of tasks]Для View Tasks (choice 2), если есть задачи:
Your Tasks:
1. [first task]
2. [second task]
...
Total tasks: [number of tasks]Для View Tasks (choice 2), если список пуст:
No tasks available.Для Remove Task (choice 3), если номер задачи допустим:
Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
...
Total tasks: [updated number of tasks]Для Remove Task (choice 3), если номер задачи недопустим:
Error: Invalid task number. Please enter a number between 1 and [total tasks].Для недопустимого варианта меню:
Invalid choice. Please try again.Когда пользователь завершает работу (choice 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Проект: Список задач
Обзор проектаДобавление задачиПотренируйтесь самостоятельно: Онлайн-компилятор C++