[C++, Учебный процесс в IT, Карьера в IT-индустрии] CRM, мессенджер и штрих-коды: продолжаем рассказывать об учебных проектах Технопарка

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
14-Сен-2020 14:31


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

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. Его задачи:
  • Получение HTTP-запросов.
  • Обращение к базе данных.
  • Аутентификация пользователя/сканера.
  • Регистрация пользователя/сканера.
  • Генерирование уникальных QR-кодов.
  • Отправка HTTP-ответов.

В роли БД выступает MySQL.
Архитектура сервера и базы данных:

Команда проекта: Даниил Черный, Николай Умрихин, Сергей Чепурной.
Видео с защиты проекта.
Подробнее о наших образовательных проектах вы можете почитать по этой ссылке. И почаще заходите на канал Технострим, там регулярно появляются новые обучающие видео о программировании, разработке и других дисциплинах.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_c++, #_uchebnyj_protsess_v_it (Учебный процесс в IT), #_karera_v_itindustrii (Карьера в IT-индустрии), #_obuchenie_programmirovaniju (обучение программированию), #_blog_kompanii_mail.ru_group (
Блог компании Mail.ru Group
)
, #_c++, #_uchebnyj_protsess_v_it (
Учебный процесс в IT
)
, #_karera_v_itindustrii (
Карьера в IT-индустрии
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 19:41
Часовой пояс: UTC + 5