Wir sprechen weiterhin über Abschlussprojekte von Studenten unserer Bildungsprojekte. In dieser Ausgabe werden wir Ihnen drei Projekte in der Disziplin "Entwicklung in C ++" im Technopark vorstellen. Frühere Veröffentlichungen: eins , zwei , drei , vier .
— . .
JunTracker — CRM
Die Autoren des Projekts wollten etwas Nützliches tun, das im wirklichen Leben verwendet werden kann. Einer der Schüler arbeitete als Lehrer für Robotik, Programmierung und 3D-Modellierung an einer Schule für zusätzliche Bildung. In Excel wurden ein Zeitplan, eine Finanzbuchhaltung und ein Tagebuch mit Noten erstellt. Das alles war sehr unangenehm wahrzunehmen und du kannst es deinen Eltern nicht zeigen. Auf diese Weise entstand die Idee, einen bequemen Service für solche Schulen zu schaffen, der es ihnen ermöglicht, einen Stundenplan zu erstellen, die Schulfinanzen zu überwachen und ein elektronisches Tagebuch für die Schüler zu führen. In diesem Fall sollte der Dienst mit Rechtstrennung erfolgen.
CRM wurde in einem Semester von Grund auf neu geschrieben. Wir haben viel getan, aber wir haben es nicht geschafft, einige Dinge zu tun. Nächstes Semester werden die Autoren eine zweite Version mit einem React-Frontend und einem Go-Server erstellen.

Die linke Seite ist für den Schulverwalter und die rechte Seite zeigt alle Informationen zum aktuellen Tag an. Sie können die Schülerdatenbank nach Vor- und Nachnamen durchsuchen.

Jeder Schüler hat eine persönliche Karte mit Statistiken:

Die CRM-Architektur sieht folgendermaßen aus:

Das Frontend ist in JS, HTML und CSS geschrieben. Es werden State- und Composite-Muster verwendet. Die Vorlage verwendet die Django-Syntax und das "Factory" -Muster. Der Server verwendet das Mediatormuster. Um mit der PostgreSQL-Datenbank zu arbeiten, haben die Autoren einen Wrapper geschrieben.
Projektteam: Mark Bykhovets, Michail Truschelev, Timofey Makarov, Andrey Mavrin.
GitHub-Repository .
Video von der Projektverteidigung .
Desktop Messenger JMICKHENGER
Die Studenten wollten versuchen, einen Messenger zu erstellen, der die Grundfunktionen solcher modernen Anwendungen bietet. JMICKHENGER läuft unter Linux und MacOS. Er weiß, wie man Gespräche mit Personen aus der Kontaktliste erstellt (unterstützt eine unbegrenzte Anzahl von Benutzern in einem Chat), Bilder sendet und den Status der Nachricht anzeigt (gelesen oder nicht).

Der Messenger wurde mit den folgenden Technologien erstellt:
- OpenSSL.
- Qt - Zum Rendern der Schnittstelle wird das MVC-Entwurfsmuster angewendet.
- Boost.
- MongoDB.
- SQLite.
Allgemeine Systemarchitektur:

Auf der Anwendungsseite gibt es eine Netzwerkteilbibliothek. Sobald der Benutzer mit der Anwendung interagiert, wird eine bestimmte Client-Funktion aufgerufen. Abhängig von der Aktion wird ein Rückruf mit der gewünschten Funktionalität übergeben, der ausgeführt wird, nachdem der Netzwerkteil die Antwort vom Server verarbeitet oder das Modell über einen Fehler informiert hat. Bei falschen Aktionen verarbeitet die Anwendung den Benutzer und benachrichtigt ihn über die Ungenauigkeit der eingegebenen Daten oder andere Aktionen (falsches Login oder Passwort, bereits registrierter Benutzer, nicht vorhandener Freund oder Freund ist bereits auf der Liste usw.). Die Anzahl der Anforderungen an den Server wurde reduziert: Es werden eindeutige IDs zugewiesen, um alle Benutzer im Chat zu benachrichtigen, die anstelle von Anforderungen verwendet werden. Es gibt einen Schutz vor ungeduldigen Benutzern: Es ist sinnlos, jedes Mal, wenn eine Anfrage gesendet wird, mehrmals auf dieselbe Schaltfläche zu klicken.Ich hoffe, so schnell wie möglich eine Antwort vom Server zu erhalten :)
Der Netzwerkteil interagiert mit dem Remote-Server. Der asynchrone Client wird auf einem separaten dedizierten Thread ausgeführt und mit Boost Asio geschrieben. Der Client unterhält eine TLS-Verbindung zum Server. Das Datenaustauschformat ist JSON. OpenSSL wird aus Sicherheitsgründen verwendet. Die Interaktion mit dem Netzwerkteil erfolgt über Rückrufe. Einige Rückrufe werden einmal ausgeführt, nachdem eine Antwort vom Server empfangen wurde, während andere für die gesamte Dauer des Anwendungsbetriebs festgelegt und jedes Mal ausgelöst werden, wenn bestimmte Informationen vom Server empfangen werden (analog zum Beobachter im Google Firestore). Für einige Informationen, die selten aktualisiert werden, wird ein Cache mit SQLite implementiert.
Asynchroner TCP-Server wird auch mit Boost Asio und OpenSSL geschrieben. Der Server identifiziert Verbindungen mit eindeutigen IDs und delegiert ihre Ausführung mithilfe einer Anforderungswarteschlange an eine Instanz der Geschäftslogikklasse. Außerdem haben die Autoren, die die Mongocxx-Bibliothek verwenden, eine Wrapper-Klasse für die Arbeit mit MongoDB geschrieben. Bei der Erstellung wurde die Mongocxx-Bibliothek verwendet. Die Geschäftslogik kann grob in drei Teile unterteilt werden: Empfangen einer Anfrage von einem Client in Form von JSON und Parsen dieser; Arbeiten mit der Datenbank und in einigen Fällen Überprüfen der Richtigkeit; Bildung einer Antwort an den Kunden. Darüber hinaus wurde die Geschäftslogik als dynamische Bibliothek implementiert, damit sie bequemer mit Serverteilen kombiniert werden kann.
Das Schema des Datenaustauschs zwischen Client und Server:

Und so funktioniert der Datenaustausch mit der Datenbank:

Projektteam: Konstantin Pavlov, Sergey Alekseev, Nikolay Manzeev, Nikita Shchelkanov.
GitHub-Repository .
Video von der Projektverteidigung .
Barcode-System
Die Autoren entwickelten ein Strichcode-System für Unternehmen, die alle Arten von Elektronik herstellen. Das System ist in der Lage, Produkte automatisch zu berücksichtigen, den Durchgang von Produkten durch verschiedene Phasen des technologischen Prozesses zu steuern und die Automatisierung der Produktion zu erhöhen.
Das System reduziert den Aufwand für die Kontrolle der Produktion von Produkten. Alle relevanten Informationen sind online verfügbar. Das System eliminiert auch menschliche Fehler beim Zählen von Produkten in verschiedenen Produktionsstadien.
Arbeitsschema:

Die Client-Software ermöglicht das Generieren von Barcodes und das Registrieren hergestellter Produkte in der Datenbank auf dem Server. Die Darsteller verwenden drahtlose Scanner, um die auf der Verpackung oder den Produkten selbst aufgedruckten Barcodes zu lesen. Der Scanner sendet Informationen über den gescannten Barcode und fordert die Datenbank auf, ein neues Produkt zu registrieren.
Das System benötigt einen drahtlosen Barcode-Scanner wie folgt:

Merkmale der Firmware:
- Eine IDE auf dem neuesten Stand der Technik, die nur die Sprache C unterstützt.
- Teilweise dokumentierte C-API zum Scannen und Arbeiten mit Schlüsseln, Display, Beleuchtung, WLAN und internem Speicher.
- Es gibt ein Dienstprogramm zum Laden der Firmware in den Speicher.
Um den Scanner mit seinem Strichcode-System kompatibel zu machen, haben die Autoren des Projekts die IDE rückentwickelt. Es stellte sich heraus, dass das Gerät mit einem STM32F103xx-Mikrocontroller mit einem ARMv7-M-Kern ausgestattet ist. Es ist uns auch gelungen, eine statische Bibliothek mit Geschäftslogik für die Verarbeitung von API-Aufrufen zu finden.
Tools zur Entwicklung des Systems:
- cc-arm-none-eabi (GNU ARM Toolchain) - eine Reihe von Tools für die Entwicklung der ARM-Architektur (Compiler , ++, ASM; ld, objdump).
- Linker-Skript - für Flash- und RAM-Markup.
- cmake als Build-System + cmake-Toolchain-Datei für die Cross-Kompilierung von STM32-Mikrocontrollern (dank des Repositorys https://github.com/ObKo/stm32-cmake ) /
- Spezifikation, Dokumentation, Stackoverflow, Themenforen.
Ich musste folgende Module schreiben:
- Eine Wrapper-Klasse für die Benutzerinteraktion über Schlüssel.
- "GUI" für die Arbeit mit dem Benutzer.
- TCP-HTTP-JSON-Stack über die in der Scanner-API implementierte IP-Schicht.
- Eine Wrapper-Klasse über die Scanner-API, um Barcodes zu scannen und Scanergebnisse zu erhalten.
Als nächstes schrieb das Team eine Client-Software, mit der Sie:
- Benutzer autorisieren.
- Alle Produktmodelle und Informationen dazu anzeigen.
- Alle Geräte anzeigen.
- Geräte hinzufügen.
- Modelle hinzufügen.
- Generieren Sie einen Barcode für das Modell.
- Barcode auf dem Drucker drucken
- Barcode in Datei speichern.
Diese Software wurde geschrieben mit:
- QtCreator (grafische Oberfläche).
- Boost (Netzwerkimplementierung und JSON-Analyse).
- Bibliotheken zum Konvertieren einer Produkt-ID in einen Barcode.
Der HTTP-Server wird mit Boost.beast, MySqlCppConnector, Boost.thread und OpenSSL erstellt. Seine Aufgaben:
- HTTP-Anfragen empfangen.
- Zugriff auf die Datenbank.
- Benutzer- / Scannerauthentifizierung.
- Benutzer- / Scannerregistrierung.
- Generierung eindeutiger QR-Codes.
- Senden von HTTP-Antworten.
MySQL fungiert als Datenbank.
Server- und Datenbankarchitektur:

Projektteam: Daniil Cherny, Nikolay Umrikhin, Sergey Chepurnoy.
Video von der Projektverteidigung .
Weitere Informationen zu unseren Bildungsprojekten finden Sie unter diesem Link . Und öfter gehen Sie zum Technostream- Kanal , dort erscheinen regelmäßig neue Trainingsvideos über Programmierung, Entwicklung und andere Disziplinen.