company_banner

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



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

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


    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.

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


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

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



    Подробнее о наших образовательных проектах вы можете почитать по этой ссылке. И почаще заходите на канал Технострим, там регулярно появляются новые обучающие видео о программировании, разработке и других дисциплинах.
    Mail.ru Group
    Строим Интернет

    Комментарии 2

      0

      В мою молодость все студенты вместо CRM писали CMS
      Вместо чатов — форумы
      Вместо штрих-кодов QR-коды
      А так забавно ...

        0
        Суперсовременная IDE, поддерживающая исключительно язык С

        почти как «программа прекрасно документирована на языке С».

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое