Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📋 Менеджер задач (Todo CLI)

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

✨ Возможности

Основные

  • Добавление задач — создание новых задач с автоматическим присвоением статуса todo
  • 🗑️ Удаление задач — удаление по уникальному ID с подтверждением
  • ✏️ Редактирование — изменение названия существующих задач
  • Изменение статуса — переключение между todo, in-progress, done
  • 📋 Просмотр списка — табличный вывод с цветовой индикацией и эмодзи

Расширенные

  • 🔍 Поиск — поиск задач по названию
  • 📊 Статистика — общая статистика с прогресс-баром
  • 🧹 Очистка — массовое удаление выполненных задач
  • 📄 Пагинация — постраничный просмотр больших списков
  • 🎨 Цветной интерфейс — наглядное отображение статусов разными цветами
  • 🔒 Безопасность — параметризованные SQL-запросы (защита от инъекций)

📦 Зависимости

  • GCC или другой C-компилятор
  • SQLite3 (библиотека и заголовочные файлы)

Установка зависимостей

macOS:

brew install sqlite3

Ubuntu/Debian:

sudo apt-get install libsqlite3-dev

Arch 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 2

🏗️ Структура проекта

todo-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 🟢 Зелёный

🛠️ Makefile команды

Команда Описание
make Сборка проекта
make debug Сборка с отладочной информацией
make release Оптимизированная сборка
make clean Удаление объектных файлов
make rebuild Очистка и сборка
make test Запуск тестов
make install Установка в /usr/local/bin
make uninstall Удаление из /usr/local/bin

Сделано с ❤️ на C

About

Консольный менеджер задач на C

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages