Документация - Amrax232/sadykovnurgeldiev GitHub Wiki

Описание проекта

Проект представляет собой клиент-серверную систему "Тренажер по МЛТА" (математическая логика и теория алгоритмов), предназначенную для обучения и автоматизированной проверки решения задач.

Структура Git

  • Основная ветка: main (или master) - содержит стабильную версию.
  • Ветки разработки: develop - для разработки новых функций, feature/* - для отдельных фич, bugfix/* - для исправления ошибок.
  • Ветки релиза: release/* - для подготовки к релизу.

Технологии

  • Язык: C++17
  • Фреймворк: Qt 6
  • База данных: SQLite
  • Инструменты: Docker, Doxygen, QTest

Архитектура

Авторизация

AuthWindow (Авторизациярегистрация)

Диаграмма последовательности решения задачи

##Оконный интерфейс Диаграмма состояний оконного интерфейса

Диаграмма классов (Server)

![Диаграмма классов сервера]( диаграмма класса для сервера .png)

Диаграмма классов (Client)

![Диаграмма классов клиента]( диаграмма класса для клиента .png)

Use Case Diagram

Use Case Diagram

Серверная часть

Задача Статус
Обработка запросов (parse + заглушки) Выполнено
БД в синглтоне Выполнено
Поддержка нескольких клиентов Выполнено
Подключение БД Выполнено
Авторизация и регистрация Выполнено
Заглушки функционала Выполнено

Клиентская часть

Задача Статус
Оконный интерфейс Выполнено
Клиент в синглтоне Выполнено
Готовый клиент Выполнено

Функциональность

  • Авторизация и регистрация пользователей
  • Получение заданий
  • Проверка решений заданий
  • Просмотр статистики (индивидуальной и общей)
  • (Добавь другие ключевые функции)

База данных

схема БД

Модуль Database (Синглтон)

Модуль Database (синглтон) Назначение и функции: Модуль Database обеспечивает централизованное управление подключением к SQLite базе данных. Реализован как синглтон, гарантируя единственный экземпляр подключения во всем приложении.

Сетевой модуль (сингтон)

Сетевой модуль (синглтон) Назначение и функции: Сетевой модуль отвечает за TCP-соединение между клиентом и сервером. Реализован как синглтон, обеспечивая единую точку сетевого взаимодействия.

Алгоритмы и методы

  • Triple DES (3DES): Используется для шифрования конфиденциальных данных, таких как пароли или ключи API, перед их сохранением в базе данных или передачей по сети. Реализация Triple DES в Qt может быть выполнена с использованием класса QCryptographicHash в сочетании с ручной обработкой блоков данных для соответствия стандарту 3DES. (Укажи, какие именно данные ты шифруешь)

  • MD5: Применяется для хеширования паролей пользователей при регистрации и аутентификации. Вместо хранения паролей в открытом виде, в базе данных сохраняется их MD5-хеш. Это повышает безопасность, так как даже при утечке базы данных злоумышленники не смогут сразу получить доступ к паролям. Для генерации MD5-хеша используется класс QCryptographicHash в Qt:

    QString password = ui->passwordLineEdit->text();
    QByteArray passwordHash = QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Md5);
    QString passwordHashString = passwordHash.toHex();
  • Метод секущих: Используется для приближенного решения уравнений при расчете оптимальных параметров в алгоритмах машинного обучения, используемых для автоматической генерации или оценки сложности заданий. Метод секущих реализован в функции secantMethod(double initialGuess, double tolerance) и применяется для поиска корня производной функции ошибки. (если ты где-то его используешь, укажи где именно).

  • Проверка цикла графа (гамильтонова цикла): Реализован алгоритм для проверки, содержит ли заданный граф гамильтонов цикл. Алгоритм использует поиск в глубину (DFS) с возвратом (backtracking) для перебора всех возможных путей в графе. Функция hamiltonianCycleCheck(QVector<QVector<int>>& graph, QVector<int>& path, QVector<bool>& visited, int startNode) проверяет, является ли текущий путь гамильтоновым циклом.

Docker

(Инструкции по сборке и запуску приложения с помощью Docker. Можете ознакомиться в папке docs в файле "Dockerfile.cpp"

Doxygen

Документация к проекту сгенерирована с помощью Doxygen и доступна по адресу:

Ссылка на документацию

Инструкция по сборке

  1. Установите Qt Creator
  2. Откройте файл .pro
  3. Выполните сборку проекта )

Спецификация требований

Ссылка на спецификацию

Авторы

Cадыков Амрах Элхан оглы Нургелдиев Овез

⚠️ **GitHub.com Fallback** ⚠️