CRM, messenger y códigos de barras: seguimos hablando de proyectos educativos de Technopark





Seguimos hablando de proyectos de graduación de alumnos de nuestros proyectos educativos. En este número te contamos tres proyectos de la disciplina "Desarrollo en C ++" en Technopark. Publicaciones anteriores: uno , dos , tres , cuatro .



— . .




JunTracker — CRM



Los autores del proyecto querían hacer algo útil que pudiera usarse en la vida real. Uno de los estudiantes trabajó como profesor en robótica, programación y modelado 3D en una escuela de educación adicional. En Excel se elaboró ​​un cronograma, contabilidad financiera y un diario con las calificaciones de los alumnos. Todo esto fue muy incómodo de percibir y no puedes mostrárselo a tus padres. Fue así como surgió la idea de crear un servicio conveniente para tales escuelas, que les permitiera elaborar un horario, monitorear las finanzas escolares y mantener un diario electrónico para los estudiantes. En este caso, el servicio debe ser con separación de derechos.



CRM se escribió desde cero en un semestre. Hicimos mucho, pero no logramos hacer algunas cosas. El próximo semestre, los autores harán una segunda versión con un frontend en React y un servidor en Go.





El lado izquierdo es para el administrador de la escuela y el lado derecho muestra toda la información sobre el día actual. Puede buscar en la base de datos de estudiantes por nombre y apellido.





Cada alumno tiene una tarjeta personal con estadísticas:





La arquitectura de CRM tiene este aspecto:





La interfaz está escrita en JS, HTML y CSS. Utiliza patrones de estado y compuestos. La plantilla usa la sintaxis de Django y el patrón de "fábrica". El servidor usa el patrón de mediador. Para trabajar con la base de datos PostgreSQL, los autores escribieron un contenedor.



Equipo de proyecto: Mark Bykhovets, Mikhail Truschelev, Timofey Makarov, Andrey Mavrin.



Repositorio de GitHub .



Video de la defensa del proyecto .



Mensajero de escritorio JMICKHENGER



Los estudiantes querían probar suerte para crear un mensajero que tuviera las funciones básicas de aplicaciones tan modernas. JMICKHENGER se ejecuta en Linux y macOS. Sabe cómo crear conversaciones con personas de la lista de contactos (admite un número ilimitado de usuarios en un chat), enviar imágenes y mostrar el estado del mensaje (leído o no).





El mensajero se creó utilizando las siguientes tecnologías:



  • OpenSSL.
  • Qt: utilizado para renderizar la interfaz, se aplicó el patrón de diseño MVC.
  • Aumentar.
  • MongoDB.
  • SQLite.


Arquitectura general del sistema:





En el lado de la aplicación, hay una biblioteca de elementos de red. Tan pronto como el usuario interactúa con la aplicación, se llama a una función de cliente específica. Y dependiendo de la acción, se pasa una devolución de llamada con la funcionalidad deseada, que se ejecutará después de que la parte de la red procese la respuesta del servidor o notifique al modelo sobre un error. En caso de acciones incorrectas, la aplicación procesará y notificará al usuario sobre la inexactitud de los datos ingresados ​​u otras acciones (nombre de usuario o contraseña incorrectos, usuario ya registrado, amigo inexistente o amigo ya está en la lista, etc.). Se ha reducido el número de solicitudes al servidor: se asignan ID únicos para notificar a todos los usuarios en el chat, que se utilizan en lugar de solicitudes. Existe una protección contra los usuarios impacientes: es inútil hacer clic en el mismo botón muchas veces, cada vez que se envía una solicitud,con la esperanza de obtener una respuesta del servidor lo antes posible :)



La parte de la red interactúa con el servidor remoto. El cliente asincrónico se ejecuta en un hilo dedicado separado y está escrito usando Boost Asio. El cliente mantiene una conexión TLS con el servidor. El formato de intercambio de datos es JSON. OpenSSL se utiliza por motivos de seguridad. La interacción con la parte de la red se lleva a cabo mediante devoluciones de llamada. Algunas devoluciones de llamada se ejecutan una vez después de recibir una respuesta del servidor, mientras que otras se establecen para toda la duración de la operación de la aplicación y se activan cada vez que se recibe cierta información del servidor (análoga al observador en Google Firestore). Para cierta información que rara vez se actualiza, se implementa una caché usando SQLite.



El servidor TCP asincrónico también se escribe usando Boost Asio y OpenSSL. El servidor identifica conexiones con ID únicos y usa una cola de solicitudes para delegar su ejecución a una instancia de la clase de lógica empresarial. Además, los autores que utilizan la biblioteca mongocxx escribieron una clase contenedora para trabajar con MongoDB. Al crearlo, se utilizó la biblioteca mongocxx. La lógica empresarial se puede dividir condicionalmente en tres partes: recibir una solicitud de un cliente en forma de JSON y analizarla; trabajar con la base de datos y, en algunos casos, comprobar su corrección; formación de una respuesta al cliente. Además, la lógica empresarial se implementó como una biblioteca dinámica, por lo que sería más conveniente combinarla con partes del servidor.



El esquema de intercambio de datos entre cliente y servidor:





Y así es como funciona el intercambio de datos con la base de datos:





Equipo de proyecto: Konstantin Pavlov, Sergey Alekseev, Nikolay Manzeev, Nikita Shchelkanov.



Repositorio de GitHub .



Video de la defensa del proyecto .



Sistema de código de barras



Los autores crearon un sistema de códigos de barras para empresas que producen todo tipo de productos electrónicos. El sistema es capaz de tomar en cuenta automáticamente los productos, controlar el paso de los productos por las distintas etapas del proceso tecnológico y permite incrementar la automatización de la producción.



El sistema reduce la carga de controlar la producción de productos. Toda la información relevante está disponible en línea. El sistema también elimina los errores humanos al contar productos en diferentes etapas de producción.



Esquema de trabajo:





El software del cliente permite generar códigos de barras y registrar productos fabricados en la base de datos del servidor. Los artistas utilizan escáneres inalámbricos para leer los códigos de barras impresos en el embalaje o en los propios productos. El escáner envía información sobre el código de barras escaneado y solicita a la base de datos que registre un nuevo producto.



El sistema requiere un escáner de código de barras inalámbrico, como este:





Funciones de firmware:



  • Un IDE de última generación que admite exclusivamente el lenguaje C.
  • API C parcialmente documentada para escanear y trabajar con teclas, pantalla, luces, WiFi, almacenamiento interno.
  • Existe una utilidad para cargar el firmware en la memoria.


Para que el escáner sea compatible con su sistema de códigos de barras, los autores del proyecto realizaron ingeniería inversa al IDE. Resultó que el dispositivo está equipado con un microcontrolador STM32F103xx con un núcleo ARMv7-M. También logramos encontrar una biblioteca estática con lógica comercial para manejar las llamadas a la API.



Herramientas utilizadas para desarrollar el sistema:



  • cc-arm-none-eabi (GNU ARM Toolchain): un conjunto de herramientas para el desarrollo de la arquitectura ARM (compiladores , ++, ASM; ld, objdump).
  • linker-script - para marcado Flash y RAM.
  • cmake como un sistema de compilación + cmake archivo de cadena de herramientas para la compilación cruzada para microcontroladores STM32 (gracias al repositorio https://github.com/ObKo/stm32-cmake ) /
  • Especificaciones, documentación, Stackoverflow, foros temáticos.


Tuve que escribir los siguientes módulos:



  • Una clase contenedora para la interacción del usuario mediante claves.
  • "GUI" para trabajar con el usuario.
  • Pila TCP-HTTP-JSON sobre la capa IP implementada en la API del escáner.
  • Una clase de envoltura sobre la API del escáner para escanear códigos de barras y obtener resultados de escaneo.


A continuación, el equipo escribió un software de cliente que le permite:



  • Autorizar al usuario.
  • Ver todos los modelos de productos e información sobre ellos.
  • Ver todos los dispositivos.
  • Agrega dispositivos.
  • Agrega modelos.
  • Genere código de barras para el modelo.
  • Imprimir código de barras en la impresora
  • Guarde el código de barras en el archivo.


Este software fue escrito con:



  • QtCreator (interfaz gráfica).
  • Boost (implementación de redes y análisis JSON).
  • Bibliotecas para convertir un identificador de producto en un código de barras.


El servidor HTTP se crea utilizando Boost.beast, MySqlCppConnector, Boost.thread y OpenSSL. Sus tareas:



  1. Recibiendo solicitudes HTTP.
  2. Accediendo a la base de datos.
  3. Autenticación de usuario / escáner.
  4. Registro de usuario / escáner.
  5. Generación de códigos QR únicos.
  6. Envío de respuestas HTTP.


MySQL actúa como una base de datos.



Arquitectura de servidor y base de datos:





Equipo de proyecto: Daniil Cherny, Nikolay Umrikhin, Sergey Chepurnoy.



Video de la defensa del proyecto .






Puede leer más sobre nuestros proyectos educativos en este enlace . Y con más frecuencia van al canal Technostream , aparecen regularmente nuevos videos de capacitación sobre programación, desarrollo y otras disciplinas.



All Articles