Статьи

Учебные материалы по языку C++ — от основ до продвинутых тем

Итоговый проект: консольный менеджер задач

Страница 43 из 43 · 2026-10-25 · 2 мин чтения

Итоговый проект: консольный менеджер задач

Цель

Создай консольный менеджер задач. Пользователь должен уметь добавлять задачу, показывать список, отмечать задачу выполненной и сохранять список в файл.

Модель данных

struct Task {    std::string title;    bool completed = false;};

Храни задачи в std::vector<Task>. Для добавления используй push_back, для обхода — range-based for, а для изменения состояния выбирай задачу по индексу после проверки границ.

Раздели ответственность

Рекомендуемый набор функций:

  • PrintMenu() — выводит команды.
  • AddTask(std::vector<Task>& tasks) — добавляет задачу.
  • ListTasks(const std::vector<Task>& tasks) — показывает список.
  • CompleteTask(std::vector<Task>& tasks, std::size_t index) — отмечает задачу выполненной.
  • LoadTasks(...) и SaveTasks(...) — чтение и запись файла.

Передавай контейнер по ссылке, когда функция должна его изменить, и по const-ссылке, когда она только читает данные.

Главный цикл

Используй цикл while для меню. Через switch выбирай команду, а через if проверяй границы и корректность введённых значений. Обрабатывай конец ввода и ошибки потока, чтобы программа не застревала в бесконечном цикле.

Формат сохранения

Для учебного проекта можно сохранять по одной задаче на строку, но нужно продумать обработку символов новой строки внутри названия и формат поля completed. Для более надёжного варианта используй явный формат данных с экранированием или готовую библиотеку формата.

Не считывай произвольный бинарный дамп объекта Task: строка содержит внутреннее управление памятью и не может безопасно сохраняться простым копированием байтов.

Проверочный список

  • Можно добавить несколько задач.
  • Пустой список отображается корректно.
  • Неверный индекс не приводит к выходу за границы.
  • Файл может отсутствовать при первом запуске.
  • Ошибки чтения и записи не игнорируются.
  • После перезапуска задачи восстанавливаются.

Что улучшить дальше

Добавь удаление задач, фильтр по выполненным, поиск по названию, сортировку и модульные тесты. Затем вынеси реализацию из main.cpp в отдельные заголовочные и исходные файлы и собери проект через CMake.

Итог

Итоговый проект объединяет базовый синтаксис с практикой проектирования. Главное — не писать всё в одной функции: разделяй ввод, бизнес-логику и работу с файлами.