Skip to content
ayznde edited this page May 29, 2026 · 6 revisions

ТиМП — Графическое отображение ветвящейся функции

Содержание

Участники

  • Миханошин Дмитрий
  • Акимова Ангелина
  • Сорокина Алина
  • Николаев Максим

Подгруппа 2

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

Клиент-серверное приложение для графического отображения ветвящейся функции:

f(x) = √(-x) + a,        x < 0
f(x) = arcsin(x/π) + b,   0 ≤ x < π
f(x) = arccos(x/π) - c,   x ≥ π

Пользователь задаёт параметры a, b, c через слайдеры. Сервер вычисляет 200 точек графика и возвращает их клиенту. Клиент строит график и таблицу значений.

Возможности

  • Авторизация и регистрация с верификацией через email
  • Восстановление пароля по email
  • Интерактивное построение графика с настройкой параметров a, b, c
  • Таблица значений функции
  • Просмотр задания и блок-схемы

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

TaMP/
├── docker-compose.yml        # Определение сервисов
├── init.sql                  # Инициализация БД (таблица users)
│
├── Auth/                     # Сервис авторизации
│   ├── main_server_auth.cpp  # TCP-сервер (порт 11998)
│   ├── auth.h / auth.cpp     # Логика: login, register, reset
│   ├── database.h / .cpp     # Подключение к PostgreSQL
│   ├── email_service.h / .cpp# Отправка email через SMTP
│   ├── email_config.h        # Настройки SMTP
│   ├── common.h              # Общие заголовки
│   └── Dockerfile.auth
│
├── Client_Server/            # Сервис вычислений
│   ├── main_server.cpp       # TCP-сервер (порт 11999)
│   ├── TCPServer.hpp / .cpp  # TCP-обёртка
│   ├── Dockerfile.server
│   └── Makefile
│
├── Functoin/                 # Библиотека вычисления f(x)
│   ├── func.hpp
│   └── func.cpp
│
├── Qt_client/                # Qt GUI-клиент
│   ├── test.pro              # Файл сборки
│   ├── main.cpp
│   ├── mainwindow.h / .cpp
│   ├── authwidget.h / .cpp   # Экран входа
│   ├── regwidget.h / .cpp    # Экран регистрации
│   ├── verifywidget.h / .cpp # Экран верификации кода
│   ├── resetwidget.h / .cpp  # Экран сброса пароля
│   ├── graphwidget.h / .cpp  # График + таблица
│   ├── clientsingleton.h/.cpp# TCP calc-сервер (сырой протокол)
│   ├── authclient.h / .cpp   # TCP auth-сервер (JSON-протокол)
│   ├── schemadialog.h / .cpp # Блок-схема
│   ├── taskdialog.h / .cpp   # Описание задания
│   ├── Schema.png
│   └── UseCaseDiagram.png
│
└── docs/                     # Документация

Архитектура

┌──────────────────┐
│   Qt Client      │  Локально на Windows
│   (MinGW / Qt6)  │
└──────┬───────┬───┘
       │       │
       │ TCP   │ TCP
       │ :11998│ :11999
       ▼       ▼
┌──────────┐ ┌──────────────────┐
│ auth     │ │ calculation      │  Docker
│ service  │ │ server           │
└────┬─────┘ └──────────────────┘
     │
     │ TCP :5432
     ▼
┌──────────┐
│ postgres │  Docker
└──────────┘
Сервис Порт Назначение
postgres 5432 PostgreSQL — хранение пользователей
auth 11998 Авторизация, регистрация, сброс пароля (JSON/TCP)
calculation_server 11999 Вычисление f(x) (текстовый протокол)

Протоколы

Calc-сервер (сырой текст):

  • Запрос: a;b;c\n — генерация графика
  • Запрос: x\n — вычисление f(x) для одного значения
  • Ответ: JSON-массив [[x1,y1],[x2,y2],...]

Auth-сервер (JSON/TCP):

  • Запрос: {"type":"login","data":{"login":"...","password":"..."}}\n
  • Ответ: {"status":"need_verification"} / {"status":"error","message":"..."}
  • Типы: login, verify_login, register, verify_register, reset_request, reset_verify, reset_finish

Запуск

Требования

  • Windows 10/11
  • Docker Desktop
  • Qt 6 с MinGW (устанавливается через Qt Online Installer)

Шаги

# 1. Запустить Docker

# 2. Поднять сервисы
cd TaMP
docker-compose up 

# 3. Проверить что контейнеры запущены
docker ps
# Должны быть: auth_service (:11998), calc_server (:11999), auth_postgres (:5432)

# 4. Открыть Qt_client/test.pro в Qt Creator

# 5. Build → Run qmake → Build All (Ctrl+B)

# 6. Run (Ctrl+R)

При запуске откроется диалог ввода IP-адреса сервера. По умолчанию 127.0.0.1, подходит, если сервер стоит на том же устройстве.

Также можно передать IP аргументом командной строки:

client.exe 192.168.1.100

Проверка

  1. Откройте приложение
  2. Зарегистрируйтесь (получите код на почту, введите его)
  3. Войдите с логином и паролем (также через код из email)
  4. Настройте параметры a, b, c — график обновится

Логи

  • Auth-сервер: docker-compose logs -f auth
  • Calc-сервер: docker-compose logs -f calculation_server
  • Qt-клиент: Application Output в Qt Creator (видны AuthClient: ... и ClientSingleton: ...)

Технологии

Компонент Технология
Клиент Qt 6 (C++17, MinGW), QTcpSocket
Сервер вычислений C++17, POSIX threads, raw TCP
Авторизация C++20, libsodium (Argon2), libpqxx, libcurl (SMTP)
База данных PostgreSQL 16
Контейнеризация Docker, Docker Compose