Консольный менеджер задач на C с использованием SQLite для хранения данных. Поддерживает добавление, удаление, редактирование, изменение статусов и просмотр задач с красивым цветным выводом.
- ➕ Добавление задач — создание новых задач с автоматическим присвоением статуса
todo - 🗑️ Удаление задач — удаление по уникальному ID с подтверждением
- ✏️ Редактирование — изменение названия существующих задач
- ✓ Изменение статуса — переключение между
todo,in-progress,done - 📋 Просмотр списка — табличный вывод с цветовой индикацией и эмодзи
- 🔍 Поиск — поиск задач по названию
- 📊 Статистика — общая статистика с прогресс-баром
- 🧹 Очистка — массовое удаление выполненных задач
- 📄 Пагинация — постраничный просмотр больших списков
- 🎨 Цветной интерфейс — наглядное отображение статусов разными цветами
- 🔒 Безопасность — параметризованные SQL-запросы (защита от инъекций)
- GCC или другой C-компилятор
- SQLite3 (библиотека и заголовочные файлы)
macOS:
brew install sqlite3Ubuntu/Debian:
sudo apt-get install libsqlite3-devArch Linux:
sudo pacman -S sqlite# Простая сборка (рекомендуется)
make
# Или вручную (указать все исходные файлы)
gcc -o main main.c database.c display.c commands.c utils.c -lsqlite3./main help| Команда | Описание |
|---|---|
./main add [название] |
Добавить новую задачу (если название не указано — запросит интерактивно) |
./main delete [id] |
Удалить задачу по ID |
./main check [id] |
Изменить статус задачи |
./main edit [id] |
Редактировать название задачи |
./main list |
Показать все задачи |
./main list <status> |
Показать задачи по статусу |
./main search <запрос> |
Поиск задач по названию |
./main stats |
Показать статистику |
./main clear |
Удалить выполненные задачи |
./main page [страница] |
Показать задачи (странично) |
./main help |
Показать справку |
# Интерактивно (запросит название)
./main add
# Или сразу с названием
./main add Купить бананы➕ Добавить задачу
────────────────────────
✓ Задача добавлена со статусом 'todo'
┌────┬───────────────┬──────────────────────┬──────────────────┐
│ ID │ Статус │ Название задачи │ Время │
├────┼───────────────┼──────────────────────┼──────────────────┤
│ 1 │ todo │ Купить бананы │ 11:46:13 │
└────┴───────────────┴──────────────────────┴──────────────────┘
Всего задач: 1
./main list./main list todo
./main list in-progress
./main list done./main edit 1✏️ Редактировать задачу
────────────────────────
┌────┬────────────────┬────────────────────────┬──────────────────┐
│ ID │ Статус │ Название задачи │ Время │
├────┼────────────────┼────────────────────────┼──────────────────┤
│ 1 │ 📝 todo │ Купить продукты │ 14:30:00 │
└────┴────────────────┴────────────────────────┴──────────────────┘
Всего задач: 1
Введите ID задачи для редактирования (или 0 для отмены):
> 1
Введите новое название задачи:
> Купить молоко и хлеб
✓ Название задачи #1 обновлено
./main check 1✓ Изменить статус
───────────────────
┌────┬────────────────┬────────────────────────┬──────────────────┐
│ ID │ Статус │ Название задачи │ Время │
├────┼────────────────┼────────────────────────┼──────────────────┤
│ 1 │ 📝 todo │ Купить продукты │ 14:30:00 │
└────┴────────────────┴────────────────────────┴──────────────────┘
Всего задач: 1
Введите ID задачи (или 0 для отмены):
> 1
Выберите новый статус:
1) 📝 todo
2) ⏳ in-progress
3) ✅ done
> 3
✓ Статус задачи #1 изменён на '✅ done'
./main search молоко🔍 Поиск задач
───────────────
┌────┬────────────────┬────────────────────────┬──────────────────┐
│ ID │ Статус │ Название задачи │ Время │
├────┼────────────────┼────────────────────────┼──────────────────┤
│ 1 │ ✅ done │ Купить молоко │ 14:30:00 │
└────┴────────────────┴────────────────────────┴──────────────────┘
Найдено: 1 задач по запросу 'молоко'
./main stats📊 Статистика
─────────────
┌────────────────────────────────────────────┐
│ 📊 Статистика задач │
├────────────────────────────────────────────┤
│ Всего: 10 │
│ 📝 В планах (todo): 4 │
│ ⏳ В процессе: 2 │
│ ✅ Выполнено: 4 │
└────────────────────────────────────────────┘
Прогресс: ██████████████████████████░░░░░░░░░░░░░░░░ 40%
# Интерактивно
./main delete
# С указанием ID
./main delete 5🗑️ Удалить задачу
──────────────────
Вы уверены, что хотите удалить задачу? (y/n): y
✓ Задача #5 удалена
./main clear🧹 Очистить выполненные
───────────────────────
Найдено 4 выполненных задач.
Вы уверены, что хотите удалить все выполненные задачи? (y/n): y
✓ Удалено 4 выполненных задач
# Показать первую страницу (10 задач)
./main page
# Показать вторую страницу
./main page 2todo-c/
├── main.c # Точка входа, диспетчер команд
├── database.c # Работа с SQLite (CRUD операции)
├── database.h # Заголовки функций БД
├── display.c # Вывод данных, форматирование, цвета
├── display.h # Заголовки функций отображения
├── commands.c # Обработчики всех команд
├── commands.h # Заголовки обработчиков команд
├── utils.c # Утилиты ввода/вывода
├── utils.h # Заголовки утилит
├── Makefile # Система сборки
├── data.db # Файл базы данных (создаётся автоматически)
├── README.md # Документация
└── .gitignore # Игнорируемые файлы Git
Проект использует модульную архитектуру с разделением ответственности:
| Модуль | Файлы | Ответственность |
|---|---|---|
| main | main.c |
Точка входа, инициализация БД, диспетчеризация команд |
| database | database.c, database.h |
Работа с SQLite: подключение, CRUD-операции, запросы |
| display | display.c, display.h |
Визуализация: таблицы, цвета, эмодзи, форматирование |
| commands | commands.c, commands.h |
Бизнес-логика: обработчики всех команд приложения |
| utils | utils.c, utils.h |
Вспомогательные функции: ввод данных, валидация |
Такая структура обеспечивает:
- 🔹 Разделение ответственности — каждый модуль решает одну задачу
- 🔹 Лёгкое тестирование — модули независимы друг от друга
- 🔹 Читаемость — код организован логически
- 🔹 Масштабируемость — новые функции добавляются в соответствующие модули
main.c
├── commands.h
│ ├── database.h
│ ├── display.h
│ └── utils.h
└── database.h
Задачи хранятся в таблице tasks:
| Поле | Тип | Описание |
|---|---|---|
id |
INTEGER | Уникальный идентификатор (PRIMARY KEY, AUTOINCREMENT) |
name |
TEXT | Название задачи |
status |
TEXT | Статус: todo, in-progress, done |
createdAt |
DATETIME | Время создания |
updatedAt |
DATETIME | Время последнего изменения |
| Статус | Цвет | Эмодзи |
|---|---|---|
todo |
🟡 Жёлтый | 📝 |
in-progress |
🔵 Синий | ⏳ |
done |
🟢 Зелёный | ✅ |
| Команда | Описание |
|---|---|
make |
Сборка проекта |
make debug |
Сборка с отладочной информацией |
make release |
Оптимизированная сборка |
make clean |
Удаление объектных файлов |
make rebuild |
Очистка и сборка |
make test |
Запуск тестов |
make install |
Установка в /usr/local/bin |
make uninstall |
Удаление из /usr/local/bin |
Сделано с ❤️ на C