HomeworkTracker (WPF) – десктопное приложение для организации и контроля выполнения домашних заданий. Позволяет управлять учебными дисциплинами, создавать задания с прикреплением файлов, сдавать решения (отдельные файлы-ответы), отслеживать прогресс через календарь и получать уведомления о ближайших дедлайнах. Реализована полнотекстовая фильтрация заданий с подсветкой найденных вхождений, валидация вводимых данных и удобный интерфейс в стиле современных приложений. В приложении используется Entity Framework Core (SQLite).
Данный проект создан в рамках курсовой работы. В ветке main (текущая) находится основное приложение, созданное с помощью WPF Application. В ветке winforms находится аналог этого приложения на Windows Forms, но с урезанным функционалом - нет уведомлений и поиска, а так же с устаревшим интерфейсом.
| Функция | Описание |
|---|---|
| 📚 Дисциплины | Добавление, редактирование и удаление предметов |
| ✏️ Задания | Создание, редактирование, удаление; название, описание, срок выполнения; прикрепление файлов |
| 📎 Вложения | Открытие, переименование, удаление, сохранение любых файлов, связанных с заданием |
| 📤 Сдача решений | Прикрепление файлов-ответов; задание автоматически отмечается выполненным |
| 📅 Календарь | Просмотр заданий на выбранную дату; прогресс-бар с процентом выполнения; мотивационные сообщения |
| ✔️ Статус выполнения | Отметка галочкой → зачеркивание текста (задание выполнено); просроченные невыполненные задания подсвечиваются оранжевым |
| 🔔 Уведомления | Индикатор с количеством заданий, срок которых истекает в ближайшие 3 дня; по клику – список с возможностью перехода к заданию |
| 🔍 Поиск | Фильтрация заданий по названию и описанию; подсветка найденных вхождений |
| 📖 О программе | Информация о версии и краткое руководство пользователя |
| Компонент | Версия | Назначение | Бейдж |
|---|---|---|---|
| .NET | 8.0 | Платформа приложения | |
| WPF | 8.0 | Графический интерфейс | |
| Entity Framework Core | 8.0.8 | ORM для доступа к БД | |
| SQLite | 8.0.8 | Локальная база данных | |
| C# | 12 | Основной язык |
homework-tracker/
├── Controls/ # Пользовательские элементы управления
│ └── HighlightTextBlock.cs
├── Converters/ # Конвертеры для XAML-привязок
│ ├── BoolToVisibilityConverter.cs
│ ├── CountToVisibilityConverter.cs
│ ├── EmptyStringToVisibilityConverter.cs
│ ├── IsOverdueConverter.cs
│ ├── StrikeThroughConverter.cs
│ ├── StringToVisibilityConverter.cs
│ └── TruncateStringConverter.cs
├── Data/ # Доступ к базе данных
│ └── AppDbContext.cs # Контекст Entity Framework Core (SQLite)
├── Helpers/ # Вспомогательные классы
│ ├── FileHelper.cs # Диалог выбора файла, копирование в папку приложения, создание Attachment
│ ├── FileNameHelper.cs # Ввод имени файла с валидацией (InputBox)
│ └── FileNameValidator.cs # Проверка имени файла на запрещенные символы и длину
├── Migrations/ # Миграции Entity Framework Core
├── Models/ # Сущности базы данных
│ ├── Attachment.cs
│ ├── Discipline.cs
│ └── HomeworkTask.cs
├── readme_images/ # Изображения для README.md
├── Styles/ # Стили приложения
│ ├── Resources/
│ │ └── favicon.ico # Иконка приложения
│ └── AppStyles.xaml # Глобальные стили приложения
├── ViewModels/ # Логика привязки данных (MVVM)
│ ├── AnswerFilesViewModel.cs # Управление файлами-ответами
│ ├── AttachmentsViewModel.cs # Управление обычными вложениями
│ ├── BaseFileManagerViewModel.cs # Базовый класс для обоих типов файлов
│ ├── CalendarViewModel.cs # Данные и логика календаря
│ ├── MainViewModel.cs # Главная ViewModel (поля, свойства, команды)
│ ├── MainViewModel.Calendar.cs # Часть, отвечающая за календарь
│ ├── MainViewModel.Disciplines.cs # Часть, отвечающая за дисциплины (добавление, редактирование, удаление)
│ ├── MainViewModel.Files.cs # Часть, отвечающая за открытие окон файлов
│ ├── MainViewModel.Notifications.cs # Часть, отвечающая за уведомления
│ ├── MainViewModel.Tasks.cs # Часть, отвечающая за задания (создание, редактирование, удаление, фильтрация)
│ ├── RelayCommand.cs # Базовая реализация ICommand для MVVM
│ ├── TaskEditorViewModel.cs # Создание и редактирование задания
│ └── ViewModelBase.cs # Базовый класс для всех ViewModel
├── Views/ # Окна и разметка
│ ├── AboutWindow.xaml + .cs # Информация о программе + краткое руководство
│ ├── AnswerFilesWindow.xaml + .cs # Окно управления файлами-ответами
│ ├── AttachmentsWindow.xaml + .cs # Окно управления обычными вложениями
│ ├── CalendarWindow.xaml + .cs # Окно календаря
│ ├── MainWindow.xaml + .cs # Главное окно
│ ├── NotificationsWindow.xaml + .cs # Окно уведомлений
│ └── TaskEditorWindow.xaml + .cs # Окно создания и редактирования задания
├── .gitignore
├── App.xaml + .cs # Точка входа, глобальные ресурсы, инициализация базы данных
├── AssemblyInfo.cs # Атрибуты сборки
├── LICENSE.txt
├── README.en.md
└── README.md- .NET 8.0 SDK
- Visual Studio 2022 (или любая IDE с поддержкой WPF)
Microsoft.EntityFrameworkCore.Sqlite -Version 8.0.8
Microsoft.EntityFrameworkCore.Tools -Version 8.0.8git clone https://github.com/MordaRedFox/homework-tracker.git
cd homework-tracker
dotnet restore
dotnet ef database update
dotnet runПри первом запуске база данных и все необходимые таблицы создаются автоматически в папке %LocalAppData%\HomeworkTracker\homework.db. Прикрепленные файлы копируются в подпапку Attachments.
- На левой панели нажмите "➕ Добавить предмет" и введите название (максимум 64 символа)
- Вы так же можете редактировать и удалить предмет, нажимая на соотвествующие кнопки около названия нуного предмета
- Выберите дисциплину в левом списке
- Нажмите "➕ Новое задание"
- Заполните поля: название, описание, срок выполнения
- Прикрепите файлы к своему заданию (кнопка "➕ Добавить файл")
- Нажмите "Сохранить"
- Вы можете редактировать существующие задание, нажав на соотвествующую кнопку на карточке задания
- На карточке задания нажмите "📁 Файлы"
- Откроется окно со списком вложений
- Вложения к заданию можно открыть (на стандартной программе компьютера для этого расширения), переименовать, удалить, сохранить как
- В карточке задания нажмите "📤 Сдать решение"
- Выберите файл, введите отображаемое имя – задание автоматически отметится выполненным
- Ответы к заданию можно открыть (на стандартной программе компьютера для этого расширения), переименовать, удалить, сохранить как
- На левой панели нажмите "📅 Календарь"
- Выберите дату – справа отобразятся задания на эту дату
- Прогресс-бар и мотивирующее сообщение показывают процент выполнения заданий на эту дату
- Двойной клик по заданию в списке откроет редактор задания
- Кнопка "🔔 Уведомления" показывает количество заданий, срок которых истекает в ближайшие 3 дня (включая сегодня)
- При нажатии открывается окно со списком уведомлений
- Двойной клик по заданию открывает его редактирование
- Поле "🔍 Поиск задания" фильтрует задания в текущей дисциплине по названию и описанию (без учета регистра)
- Найденные вхождения подсвечиваются желтым полупрозрачным фоном
Этот проект был разработан начинающим программистом-самоучкой. Код может содержать:
- ❌ Ошибки и баги
- ⚡ Неоптимальные решения
- 🛡️ Недочёты в архитектуре
Я открыт для конструктивной критики и предложений по улучшению кода. Если вы нашли ошибку или знаете, как сделать что-то лучше - пожалуйста, свяжитесь со мной!