13. Мини-проект: Менеджер задач
Идея проекта
Менеджер задач (To-Do List) — это программа, которая помогает пользователю управлять своими делами: добавлять задачи, отмечать выполненные и сохранять их в файл.Этот проект объединяет всё, что вы уже изучили: структуры, циклы, условия, функции, файлы и немного ООП.
Постановка задачи
Программа должна уметь:- Добавлять новую задачу.
- Показывать список всех задач.
- Отмечать задачу как выполненную.
- Сохранять и загружать задачи из файла.
Структура программы
Для начала создадим структуру для хранения задач:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;struct Task {
string title;
bool done;
};
Функции для работы с задачами
Создадим отдельные функции, чтобы программа была понятнее.
void addTask(vector<Task>& tasks, const string& title) {
tasks.push_back({title, false});
cout << "Задача добавлена!" << endl;
}void showTasks(const vector<Task>& tasks) {
cout << "\nСписок задач:\n";
for (size_t i = 0; i < tasks.size(); i++) {
cout << i + 1 << ". [" << (tasks[i].done ? 'X' : ' ') << "] " << tasks[i].title << endl;
}
}
void markDone(vector<Task>& tasks, int index) {
if (index < 1 || index > (int)tasks.size()) {
cout << "Неверный номер задачи!" << endl;
return;
}
tasks[index - 1].done = true;
cout << "Задача выполнена!" << endl;
}
Сохранение и загрузка в файл
void saveToFile(const vector<Task>& tasks, const string& filename) {
ofstream file(filename);
for (auto& t : tasks) {
file << t.title << '|' << t.done << '\n';
}
file.close();
}void loadFromFile(vector<Task>& tasks, const string& filename) {
ifstream file(filename);
if (!file.is_open()) return;
tasks.clear();
string line;
while (getline(file, line)) {
size_t sep = line.find('|');
if (sep != string::npos) {
string name = line.substr(0, sep);
bool done = (line.substr(sep + 1) == "1");
tasks.push_back({name, done});
}
}
file.close();
}
Главное меню программы
Теперь соединим всё в одной функции main().
int main() {
vector<Task> tasks;
string filename = "tasks.txt";
loadFromFile(tasks, filename);int choice;
do {
cout << "\n=== МЕНЕДЖЕР ЗАДАЧ ===\n";
cout << "1. Добавить задачу\n";
cout << "2. Показать задачи\n";
cout << "3. Отметить как выполненную\n";
cout << "4. Сохранить и выйти\n";
cout << "Выберите действие: ";
cin >> choice;
cin.ignore();
if (choice == 1) {
cout << "Введите название задачи: ";
string title;
getline(cin, title);
addTask(tasks, title);
} else if (choice == 2) {
showTasks(tasks);
} else if (choice == 3) {
cout << "Введите номер задачи: ";
int num;
cin >> num;
markDone(tasks, num);
} else if (choice == 4) {
saveToFile(tasks, filename);
cout << "Данные сохранены. До встречи!" << endl;
}
} while (choice != 4);
return 0;
}
Пример работы программы
=== МЕНЕДЖЕР ЗАДАЧ === 1. Добавить задачу 2. Показать задачи 3. Отметить как выполненную 4. Сохранить и выйти Выберите действие: 1 Введите название задачи: Купить хлеб Задача добавлена!Выберите действие: 2 Список задач: 1. [ ] Купить хлеб
Добавляем улучшения
Вот как можно сделать программу ещё лучше:- Добавить даты или приоритеты для задач.
- Использовать цветной вывод (через ANSI-коды).
- Сделать автосохранение после каждого действия.
- Добавить возможность удалить задачу.
Советы новичкам
- Разделяйте код на функции — так его легче читать и отлаживать.
- Не бойтесь использовать STL (например, vector и string) — это мощные инструменты C++.
- Регулярно сохраняйте данные в файл — чтобы не потерять прогресс.
- Пробуйте улучшать программу шаг за шагом: от простого к сложному.
Итоги урока
Теперь вы знаете:- Как создавать структуры и хранить данные в векторе.
- Как работать с файлами для сохранения данных.
- Как реализовать простое меню и взаимодействие с пользователем.
- Как построить реальный мини-проект на C++!