Как стать автором
Обновить
VK
Технологии, которые объединяют

CRM, мессенджер и штрих-коды: продолжаем рассказывать об учебных проектах Технопарка

Время на прочтение 5 мин
Количество просмотров 2.1K


Мы продолжаем рассказывать о выпускных проектах слушателей наших образовательных проектов. В этом выпуске мы расскажем про три проекта по дисциплине «Разработка на С++» в Технопарке. Предыдущие публикации: один, два, три, четыре.

Для студентов Технопарка эта работа — первый опыт проектной деятельности в рамках образовательной программы. Далее они столкнутся с такой задачей во втором и выпускном семестре.


JunTracker — CRM для школ дополнительного образования


Авторам проекта хотелось сделать что-то полезное, что могло бы использоваться в реальной жизни. Один из студентов работал в школе дополнительного образования преподавателем по робототехнике, программированию и 3D-моделированию. В Excel было сделано и расписание, и учёт финансов, и журнал с оценкам студентов. Всё это было очень неудобно воспринимать, да и родителям не покажешь. Так возникла идея сделать удобный сервис для подобных школ, позволяющий составлять расписание, следить за финансами школы и вести электронный журнал для учеников. При этом сервис должен быть с разделением прав.

CRM написали за семестр с нуля. Сделали многое, но кое-что не успели. В следующем семестре авторы сделают вторую версию с фронтендом на React и сервером на Go.


Левая часть предназначена для администратора школы, а справа отображается вся информация о текущем дне. В базе учеников можно искать по имени и фамилии.


У каждого ученика есть личная карточка со статистикой:


Архитектура CRM выглядит так:


Фронтенд написан на JS, HTML и CSS. В нём использованы паттерны State и «компоновщик». В шаблонизаторе использован синтаксис Django и паттерн «фабрика». В сервере использован паттерн «посредник». Для работы с базой данных PostgreSQL авторы написали обёртку.

Команда проекта: Марк Быховец, Михаил Трущелев, Тимофей Макаров, Андрей Маврин.

GitHub-репозиторий.

Видео с защиты проекта.

Настольный мессенджер JMICKHENGER


Студенты захотели попробовать свои силы в создании мессенджера, обладающего основными функциями подобных современных приложений. JMICKHENGER работает под Linux и macOS. Он умеет создавать беседы с людьми из списка контактов (поддерживает неограниченное количество пользователей в одном чате), отправлять изображения и показывать состояние сообщения (прочитано оно или нет).


Мессенджер создан с использованием таких технологий:

  • OpenSSL.
  • Qt — используется для отрисовки интерфейса, применён шаблон проектированиz MVC.
  • Boost.
  • MongoDB.
  • SQLite.

Общая архитектура системы:


На стороне приложения находится библиотека сетевой части. Как только пользователь взаимодействует с приложением, вызывается определенная функция клиента. И в зависимости от действия передается callback с нужной функциональностью, которая выполнится после того, как сетевая часть обработает ответ от сервера или уведомит модель об ошибке. При неверных действиях приложение обработает и уведомит пользователя о неточности введенных данных или других действиях (неправильный логин или пароль, уже зарегистрированный пользователь, несуществующий друг, или друг уже есть в списке, и т. п.). Количество запросов к серверу уменьшено: выделяются уникальные ID для уведомления всех пользователей в чате, которые используются вместо запросов. Есть защита от нетерпеливых пользователей: бесполезно кликать много раз по одной и той же кнопке, каждый раз отправляя запрос, в надежде поскорее получить ответ от сервера :)

Сетевая часть взаимодействует с удаленным сервером. Асинхронный клиент работает в отдельном выделенном потоке и написан с использованием Boost Asio. Клиент поддерживает TLS-соединение с сервером. Формат обмена данными — JSON. Для обеспечения безопасности использован OpenSSL. Взаимодействие с сетевой частью происходит с помощью callback’ов. Некоторые callback’и выполняются однократно после прихода ответа от сервера, другие же устанавливаются на всё время работы приложения и срабатывают при каждом получении определенной информации от сервера (аналог observer в Google Firestore). Для некоторой информации, которая редко обновляется, реализован кэш с использованием SQLite.

Асинхронный TCP-сервер тоже написан с использованием Boost Asio и OpenSSL. Сервер идентифицирует подключения с уникальными ID, и с помощью очереди запросов делегирует их выполнение экземпляру класса бизнес-логики. Также авторы с помощью библиотеки mongocxx написали класс-обёртку для работы с MongoDB. При его создании была использована библиотека mongocxx. Бизнес-логику можно условно разделить на три части: получение запроса от клиента в виде JSON’а и его парсинг; работа с базой данных и, в некоторых случаях, проверка их правильности; формирование ответа клиенту. Кроме того, бизнес логику реализовали в виде динамической библиотеки, чтобы удобнее было объединять её с частями сервера.

Схема обмена данными между клиентом и сервером:


А так устроен обмен данными с базой:


Команда проекта: Константин Павлов, Сергей Алексеев, Николай Манзеев, Никита Щелканов.

GitHub-репозиторий.

Видео с защиты проекта.

Система штрих-кодирования


Авторы сделали систему для штрих-кодирования для предприятий, выпускающих всевозможную электронику. Система умеет автоматически учитывать продукцию, контролировать прохождение изделиями различных этапов технологического процесса, и позволяет повысить автоматизацию производства.

Система снижает нагрузку по контролю за производством изделий. Вся актуальная информация доступна в онлайне. Также система исключает человеческие ошибки при подсчёте изделий на разных этапах производства.

Схема работы:


Клиентское ПО позволяет генерировать штрих-коды и регистрировать в базе данных на сервере производимую продукцию. Исполнители с помощью беспроводных сканеров считывают штрих-коды, нанесённые на упаковку или сами изделия. Сканер отправляет информацию о считанном штрих-коде и просит БД зарегистрировать новое изделие.

Для работы системы необходим беспроводной сканер штрих-кодов, вроде такого:


Особенности встроенного ПО:

  • Суперсовременная IDE, поддерживающая исключительно язык С.
  • Частично задокументированный API на языке С для сканирования и работы с клавишами, дисплеем, лампочками, WiFi, внутренним хранилищем.
  • Есть утилита для загрузки прошивки в память.

Чтобы подружить сканер со своей системой штрих-кодирования, авторы проекта провели обратный инжиниринг IDE. Выяснилось, что устройство оснащено микроконтроллером STM32F103xx с ядром ARMv7-M. Также удалось найти статическую библиотеку с бизнес-логикой для обработки API-вызовов.

Инструменты, применявшиеся для разработки системы:

  • cc-arm-none-eabi (GNU ARM Toolchain) — набор средств для разработки под архитектуру ARM (компиляторы С, С++, ASM; ld, objdump).
  • linker-script — для разметки Flash и RAM.
  • cmake в качестве системы сборки + cmake toolchain file для кросс-компиляции под микроконтроллеры STM32 (спасибо репозиторию https://github.com/ObKo/stm32-cmake)/
  • Спецификации, документация, Stackoverflow, тематические форумы.

Пришлось написать такие модули:

  • Класс-обёртку для взаимодействия с пользователем через клавиши.
  • «GUI» для работы с пользователем.
  • Стек TCP-HTTP-JSON над реализованным в API сканера IP-уровнем.
  • Класс-обёртку над API сканера для сканирования штрих-кодов и получения результатов сканирования.

Далее команда написала клиентское ПО, которое позволяет:

  • Авторизовать пользователя.
  • Просматривать все модели изделий и информацию о них.
  • Просматривать все устройства.
  • Добавлять устройства.
  • Добавлять модели.
  • Генерировать штрих-код для модели.
  • Печатать штрих-код на принтере
  • Сохранять штрих-код в файл.

Это ПО написали с помощью:

  • QtCreator (графический интерфейс).
  • Boost (реализация сетевого взаимодействия и парсинг JSON).
  • Библиотеки для преобразования идентификатора изделия в штрих-код.

HTTP-сервер создан с использованием Boost.beast, MySqlCppConnector, Boost.thread и OpenSSL. Его задачи:

  1. Получение HTTP-запросов.
  2. Обращение к базе данных.
  3. Аутентификация пользователя/сканера.
  4. Регистрация пользователя/сканера.
  5. Генерирование уникальных QR-кодов.
  6. Отправка HTTP-ответов.

В роли БД выступает MySQL.

Архитектура сервера и базы данных:


Команда проекта: Даниил Черный, Николай Умрихин, Сергей Чепурной.

Видео с защиты проекта.



Подробнее о наших образовательных проектах вы можете почитать по этой ссылке. И почаще заходите на канал Технострим, там регулярно появляются новые обучающие видео о программировании, разработке и других дисциплинах.
Теги:
Хабы:
+22
Комментарии 2
Комментарии Комментарии 2

Публикации

Информация

Сайт
team.vk.company
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия
Представитель
Руслан Дзасохов