Nous continuons à parler des projets de fin d'études des étudiants de nos projets éducatifs. Dans ce numéro, nous vous parlerons de trois projets dans la discipline "Développement en C ++" dans Technopark. Publications précédentes: un , deux , trois , quatre .
— . .
JunTracker — CRM
Les auteurs du projet voulaient faire quelque chose d'utile qui pourrait être utilisé dans la vraie vie. L'un des étudiants a travaillé comme enseignant en robotique, programmation et modélisation 3D dans une école d'enseignement complémentaire. Dans Excel, un calendrier a été fait, et la comptabilité financière, et un journal avec les notes des étudiants. Tout cela était très inconfortable à percevoir et vous ne pouvez pas montrer à vos parents. C'est ainsi qu'est née l'idée de créer un service pratique pour ces écoles, qui vous permet d'établir un emploi du temps, de surveiller les finances de l'école et de tenir à jour un journal électronique pour les étudiants. Dans ce cas, le service devrait être avec séparation des droits.
Le CRM a été rédigé à partir de zéro en un semestre. Nous avons fait beaucoup, mais nous n'avons pas réussi à faire certaines choses. Au semestre suivant, les auteurs en feront une seconde version avec un frontend React et un serveur Go.
Le côté gauche est destiné à l'administrateur de l'école et le côté droit affiche toutes les informations sur la journée en cours. Vous pouvez rechercher dans la base de données des étudiants par prénom et nom.
Chaque étudiant dispose d'une carte personnelle avec des statistiques:
L'architecture CRM ressemble à ceci:
Le frontend est écrit en JS, HTML et CSS. Il utilise des modèles State et Composite. Le modèle utilise la syntaxe Django et le modèle "usine". Le serveur utilise le modèle de médiateur. Pour travailler avec la base de données PostgreSQL, les auteurs ont écrit un wrapper.
Équipe du projet: Mark Bykhovets, Mikhail Truschelev, Timofey Makarov, Andrey Mavrin.
Dépôt GitHub .
Vidéo de la défense du projet .
Messager de bureau JMICKHENGER
Les étudiants voulaient s'essayer à la création d'un messager possédant les fonctions de base de telles applications modernes. JMICKHENGER fonctionne sous Linux et macOS. Il sait créer des conversations avec des personnes de la liste de contacts (prend en charge un nombre illimité d'utilisateurs dans un chat), envoyer des images et afficher l'état du message (lu ou non).
Le messager a été créé à l'aide des technologies suivantes:
- OpenSSL.
- Qt - utilisé pour rendre l'interface, le modèle de conception MVC est appliqué.
- Renforcer.
- MongoDB.
- SQLite.
Architecture générale du système:
Du côté de l'application, il existe une bibliothèque de composants réseau. Dès que l'utilisateur interagit avec l'application, une fonction client spécifique est appelée. Et en fonction de l'action, un rappel est passé avec la fonctionnalité souhaitée, qui sera exécutée après que la partie réseau traite la réponse du serveur ou informe le modèle d'une erreur. En cas d'actions incorrectes, l'application traitera et informera l'utilisateur de l'inexactitude des données saisies ou d'autres actions (login ou mot de passe incorrect, utilisateur déjà enregistré, ami inexistant ou ami est déjà sur la liste, etc.). Le nombre de requêtes adressées au serveur a été réduit: des ID uniques sont alloués pour notifier tous les utilisateurs du chat, qui sont utilisés à la place des requêtes. Il existe une protection contre les utilisateurs impatients: il est inutile de cliquer plusieurs fois sur le même bouton, chaque fois en envoyant une requête,en espérant obtenir une réponse du serveur dès que possible :)
La partie réseau interagit avec le serveur distant. Le client asynchrone s'exécute sur un thread dédié séparé et est écrit à l'aide de Boost Asio. Le client maintient une connexion TLS avec le serveur. Le format d'échange de données est JSON. OpenSSL est utilisé pour la sécurité. L'interaction avec la partie réseau a lieu à l'aide de rappels. Certains rappels sont exécutés une fois après avoir reçu une réponse du serveur, tandis que d'autres sont définis pour toute la durée de fonctionnement de l'application et sont déclenchés chaque fois que certaines informations sont reçues du serveur (analogue à observer dans Google Firestore). Pour certaines informations rarement mises à jour, un cache est implémenté à l'aide de SQLite.
Le serveur TCP asynchrone est également écrit en utilisant Boost Asio et OpenSSL. Le serveur identifie les connexions avec des ID uniques et utilise une file d'attente de demandes pour déléguer leur exécution à une instance de la classe de logique métier. De plus, les auteurs utilisant la bibliothèque mongocxx ont écrit une classe wrapper pour travailler avec MongoDB. Lors de sa création, la bibliothèque mongocxx a été utilisée. La logique métier peut être divisée en trois parties: recevoir une requête d'un client sous la forme de JSON et l'analyser; travailler avec la base de données et, dans certains cas, vérifier leur exactitude; formation d'une réponse au client. De plus, la logique métier a été implémentée sous forme de bibliothèque dynamique, de sorte qu'il serait plus pratique de la combiner avec des composants serveur.
Le schéma d'échange de données entre client et serveur:
Et voici comment fonctionne l'échange de données avec la base de données:
Équipe du projet: Konstantin Pavlov, Sergey Alekseev, Nikolay Manzeev, Nikita Shchelkanov.
Dépôt GitHub .
Vidéo de la défense du projet .
Système de code à barres
Les auteurs ont créé un système de codes-barres pour les entreprises qui produisent toutes sortes d'appareils électroniques. Le système est capable de prendre automatiquement en compte les produits, de contrôler le passage des produits à travers les différentes étapes du processus technologique, et permet d'augmenter l'automatisation de la production.
Le système réduit la charge de contrôle de la production des produits. Toutes les informations pertinentes sont disponibles en ligne. Le système élimine également les erreurs humaines lors du comptage des produits à différents stades de production.
Schéma de travail:
Le logiciel client permet de générer des codes-barres et d'enregistrer les produits manufacturés dans la base de données sur le serveur. Les artistes interprètes utilisent des scanners sans fil pour lire les codes-barres imprimés sur l'emballage ou les produits eux-mêmes. Le scanner envoie des informations sur le code-barres numérisé et demande à la base de données d'enregistrer un nouveau produit.
Le système nécessite un lecteur de codes-barres sans fil, comme ceci:
Caractéristiques du firmware:
- Un IDE à la pointe de la technologie qui prend exclusivement en charge le langage C.
- API C partiellement documentée pour la numérisation et l'utilisation des touches, de l'affichage, des lumières, du WiFi, du stockage interne.
- Il existe un utilitaire pour charger le firmware en mémoire.
Pour rendre le scanner compatible avec son système de codes-barres, les auteurs du projet ont procédé à une ingénierie inverse de l'EDI. Il s'est avéré que l'appareil est équipé d'un microcontrôleur STM32F103xx avec un noyau ARMv7-M. Nous avons également réussi à trouver une bibliothèque statique avec une logique métier pour gérer les appels d'API.
Outils utilisés pour développer le système:
- cc-arm-none-eabi (GNU ARM Toolchain) - un ensemble d'outils de développement pour l'architecture ARM (compilateurs , ++, ASM; ld, objdump).
- linker-script - pour le balisage Flash et RAM.
- cmake comme système de construction + fichier de chaîne d'outils cmake pour la compilation croisée pour les microcontrôleurs STM32 (grâce au référentiel https://github.com/ObKo/stm32-cmake ) /
- Spécification, documentation, Stackoverflow, forums thématiques.
J'ai dû écrire les modules suivants:
- Une classe wrapper pour l'interaction de l'utilisateur via des clés.
- "GUI" pour travailler avec l'utilisateur.
- Pile TCP-HTTP-JSON sur la couche IP implémentée dans l'API du scanner.
- Une classe wrapper sur l'API du scanner pour scanner les codes-barres et obtenir les résultats de l'analyse.
Ensuite, l'équipe a écrit un logiciel client qui vous permet de:
- Autoriser l'utilisateur.
- Affichez tous les modèles de produits et les informations les concernant.
- Afficher tous les appareils.
- Ajoutez des appareils.
- Ajoutez des modèles.
- Générez un code-barres pour le modèle.
- Imprimer le code-barres sur l'imprimante
- Enregistrez le code-barres dans un fichier.
Ce logiciel a été écrit avec:
- QtCreator (interface graphique).
- Boost (implémentation réseau et analyse JSON).
- Bibliothèques pour convertir un ID de produit en code-barres.
Le serveur HTTP est construit à l'aide de Boost.beast, MySqlCppConnector, Boost.thread et OpenSSL. Ses missions:
- Recevoir des requêtes HTTP.
- Accéder à la base de données.
- Authentification utilisateur / scanner.
- Enregistrement utilisateur / scanner.
- Génération de codes QR uniques.
- Envoi de réponses HTTP.
MySQL agit comme une base de données.
Architecture du serveur et de la base de données:
Équipe du projet: Daniil Cherny, Nikolay Umrikhin, Sergey Chepurnoy.
Vidéo de la défense du projet .
Vous pouvez en savoir plus sur nos projets éducatifs sur ce lien . Et le plus souvent aller sur la chaîne Technostream , apparaissent régulièrement de nouvelles vidéos de formation sur la programmation, le développement et d'autres disciplines.