Menu
Coddy logo textTech

Завершение работы над инструментом

Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 22 из 56.

challenge icon

Задание

Легко

Завершите создание инструмента для работы со списком задач, реализовав главный цикл программы, объединяющий все функции. В этом заключительном уроке создаётся полностью функциональное приложение для управления задачами, которое многократно отображает меню и обрабатывает команды пользователя, пока тот не выберет выход.

Будут предоставлены следующие входные данные:

  • Серия вариантов меню (целые числа: 1 для Add Task, 2 для View Tasks, 3 для Remove Task, 4 для Quit)
  • Для Add Task (choice 1): строка, представляющая описание задачи
  • Для Remove Task (choice 3): целое число, представляющее номер удаляемой задачи (индексация с 1)

Ваша программа должна:

  1. Начинать с той же настройки, что и в предыдущих уроках (пустой std::vector<std::string> с именем tasks и приветственное сообщение)
  2. Создавать основной цикл, который продолжается, пока пользователь не выберет выход
  3. Отображать меню и считывать выбор пользователя на каждой итерации
  4. Обрабатывать каждый вариант меню:
    • Choice 1: Считать описание задачи и добавить его с помощью push_back()
    • Choice 2: Отобразить все задачи в нумерованном формате или показать "No tasks available.", если список пуст
    • Choice 3: Считать номер задачи, проверить его и удалить задачу с помощью .erase()
    • Choice 4: Завершить цикл программы
  5. Для недопустимых вариантов меню отображать сообщение об ошибке и продолжать цикл
  6. Выводить прощальное сообщение, когда пользователь завершает работу

Используйте следующий точный формат вывода:

Начальная настройка и отображение меню:

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;
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор C++