-
Notifications
You must be signed in to change notification settings - Fork 0
Home
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
- Откройте приложение
- Зарегистрируйтесь (получите код на почту, введите его)
- Войдите с логином и паролем (также через код из email)
- Настройте параметры 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 |