CRM, messenger, dan barcode: kami terus berbicara tentang proyek pendidikan Technopark





Kami terus berbicara tentang proyek kelulusan siswa dari proyek pendidikan kami. Dalam edisi ini kami akan memberitahu Anda tentang tiga proyek dalam disiplin "Pengembangan dalam C ++" di Technopark. Publikasi sebelumnya: satu , dua , tiga , empat .



โ€” . .




JunTracker โ€” CRM



Penulis proyek ingin melakukan sesuatu yang bermanfaat yang dapat digunakan dalam kehidupan nyata. Salah satu siswa bekerja sebagai guru di bidang robotika, pemrograman dan pemodelan 3D di sekolah pendidikan tambahan. Di Excel, jadwal dibuat, dan akuntansi keuangan, dan jurnal dengan nilai siswa. Semua ini sangat tidak nyaman untuk dilihat, dan Anda tidak dapat menunjukkan kepada orang tua Anda. Begitulah ide muncul untuk menciptakan layanan yang nyaman untuk sekolah tersebut, memungkinkan mereka untuk membuat jadwal, memantau keuangan sekolah dan memelihara jurnal elektronik untuk siswa. Dalam hal ini, layanan harus dengan pemisahan hak.



CRM ditulis dari awal dalam satu semester. Kami melakukan banyak hal, tetapi kami tidak berhasil melakukan beberapa hal. Semester selanjutnya, penulis akan membuat versi kedua dengan frontend di React dan server di Go.





Sisi kiri adalah untuk administrator sekolah, dan sisi kanan menampilkan semua informasi tentang hari ini. Dalam database siswa, Anda dapat mencari berdasarkan nama depan dan belakang.





Setiap siswa memiliki kartu pribadi dengan statistik:





Arsitektur CRM terlihat seperti ini:





Bagian depan ditulis dalam JS, HTML dan CSS. Ini menggunakan pola State dan Composite. Template menggunakan sintaks Django dan pola "pabrik". Server menggunakan pola mediator. Untuk bekerja dengan database PostgreSQL, penulis menulis pembungkusnya.



Tim proyek: Mark Bykhovets, Mikhail Truschelev, Timofey Makarov, Andrey Mavrin.



Repositori GitHub .



Video dari pertahanan proyek .



Messenger desktop JMICKHENGER



Para siswa ingin mencoba sendiri untuk membuat messenger yang memiliki fungsi dasar aplikasi modern. JMICKHENGER berjalan di Linux dan macOS. Dia tahu cara membuat percakapan dengan orang-orang dari daftar kontak (mendukung jumlah pengguna yang tidak terbatas dalam satu obrolan), mengirim gambar dan menunjukkan status pesan (baca atau tidak).





Utusan itu dibuat menggunakan teknologi berikut:



  • OpenSSL.
  • Qt - digunakan untuk merender antarmuka, menerapkan pola desain MVC.
  • Dorongan.
  • MongoDB.
  • SQLite.


Arsitektur sistem umum:





Di sisi aplikasi, ada perpustakaan bagian jaringan Segera setelah pengguna berinteraksi dengan aplikasi, fungsi klien tertentu dipanggil. Dan tergantung pada tindakannya, callback diteruskan dengan fungsionalitas yang diinginkan, yang akan dijalankan setelah bagian jaringan memproses respons dari server atau memberi tahu model tentang kesalahan. Jika ada tindakan yang salah, aplikasi akan memproses dan memberi tahu pengguna tentang ketidakakuratan data yang dimasukkan atau tindakan lain (salah login atau kata sandi, pengguna sudah terdaftar, teman tidak ada, atau teman sudah ada dalam daftar, dll.). Jumlah permintaan ke server telah dikurangi: ID unik dialokasikan untuk memberi tahu semua pengguna dalam obrolan, yang digunakan sebagai pengganti permintaan. Ada perlindungan terhadap pengguna yang tidak sabar: tidak ada gunanya mengklik tombol yang sama berkali-kali, setiap kali mengirim permintaan,berharap mendapat tanggapan dari server secepat mungkin :)



Bagian jaringan berinteraksi dengan server jarak jauh. Klien asinkron berjalan pada utas khusus yang terpisah dan ditulis menggunakan Boost Asio. Klien memelihara koneksi TLS ke server. Format pertukaran data adalah JSON. OpenSSL digunakan untuk keamanan. Interaksi dengan bagian jaringan berlangsung menggunakan callback. Beberapa callback dijalankan satu kali setelah menerima respons dari server, sementara yang lain disetel untuk seluruh durasi operasi aplikasi dan dipicu setiap kali informasi tertentu diterima dari server (analog dengan pengamat di Google Firestore). Untuk beberapa informasi yang jarang diperbarui, cache diimplementasikan menggunakan SQLite.



Asynchronous TCP Server juga ditulis menggunakan Boost Asio dan OpenSSL. Server mengidentifikasi koneksi dengan ID unik dan menggunakan antrian permintaan untuk mendelegasikan eksekusinya ke instance kelas logika bisnis. Selain itu, penulis yang menggunakan pustaka mongocxx menulis kelas pembungkus untuk bekerja dengan MongoDB. Saat membuatnya, pustaka mongocxx digunakan. Logika bisnis secara kondisional dapat dibagi menjadi tiga bagian: menerima permintaan dari klien dalam bentuk JSON dan menguraikannya; bekerja dengan database dan, dalam beberapa kasus, memeriksa kebenarannya; pembentukan respon terhadap klien. Selain itu, logika bisnis diimplementasikan sebagai pustaka dinamis, sehingga akan lebih mudah untuk menggabungkannya dengan bagian server.



Skema pertukaran data antara klien dan server:





Dan inilah cara kerja pertukaran data dengan database:





Tim proyek: Konstantin Pavlov, Sergey Alekseev, Nikolay Manzeev, Nikita Shchelkanov.



Repositori GitHub .



Video dari pertahanan proyek .



Sistem barcode



Penulis membuat sistem bar-coding untuk bisnis yang memproduksi semua jenis elektronik. Sistem ini dapat secara otomatis memperhitungkan produk, mengontrol jalannya produk melalui berbagai tahapan proses teknologi, dan memungkinkan peningkatan otomatisasi produksi.



Sistem tersebut mengurangi beban pengendalian produksi produk. Semua informasi yang relevan tersedia secara online. Sistem ini juga menghilangkan kesalahan manusia saat menghitung produk pada berbagai tahap produksi.



Skema kerja:





Perangkat lunak klien memungkinkan pembuatan barcode dan mendaftarkan produk yang diproduksi dalam database di server. Pelaku menggunakan pemindai nirkabel untuk membaca barcode yang dicetak pada kemasan atau produk itu sendiri. Pemindai mengirimkan informasi tentang kode batang yang dipindai dan meminta database untuk mendaftarkan produk baru.



Sistem membutuhkan pemindai kode batang nirkabel, seperti ini:





Fitur firmware:



  • IDE canggih yang secara eksklusif mendukung bahasa C.
  • C API yang terdokumentasi sebagian untuk memindai dan bekerja dengan kunci, layar, lampu, WiFi, penyimpanan internal.
  • Ada utilitas untuk memuat firmware ke dalam memori.


Untuk membuat pemindai kompatibel dengan sistem barcode-nya, penulis proyek merekayasa ulang IDE. Ternyata perangkat tersebut dilengkapi mikrokontroler STM32F103xx dengan inti ARMv7-M. Kami juga berhasil menemukan perpustakaan statis dengan logika bisnis untuk menangani panggilan API.



Alat yang digunakan untuk mengembangkan sistem:



  • cc-arm-none-eabi (GNU ARM Toolchain) - seperangkat alat untuk pengembangan arsitektur ARM (kompiler , ++, ASM; ld, objdump).
  • linker-script - untuk Flash dan markup RAM.
  • cmake sebagai sistem build + file toolchain cmake untuk kompilasi silang untuk mikrokontroler STM32 (berkat repositori https://github.com/ObKo/stm32-cmake ) /
  • Spesifikasi, dokumentasi, Stackoverflow, forum topik.


Saya harus menulis modul berikut:



  • Kelas pembungkus untuk interaksi pengguna melalui kunci.
  • "GUI" untuk bekerja dengan pengguna.
  • Tumpukan TCP-HTTP-JSON di atas lapisan IP yang diterapkan di API pemindai.
  • Kelas pembungkus di atas API pemindai untuk memindai kode batang dan mendapatkan hasil pemindaian.


Selanjutnya, tim menulis perangkat lunak klien yang memungkinkan Anda untuk:



  • Otorisasi pengguna.
  • Lihat semua model produk dan informasi tentang mereka.
  • Lihat semua perangkat.
  • Tambahkan perangkat.
  • Tambahkan model.
  • Hasilkan kode batang untuk model.
  • Cetak barcode pada printer
  • Simpan kode batang ke file.


Perangkat lunak ini dibuat dengan:



  • QtCreator (antarmuka grafis).
  • Boost (implementasi jaringan dan penguraian JSON).
  • Perpustakaan untuk mengubah pengenal produk menjadi kode batang.


Server HTTP dibuat menggunakan Boost.beast, MySqlCppConnector, Boost.thread, dan OpenSSL. Tugasnya:



  1. Menerima permintaan HTTP.
  2. Mengakses database.
  3. Otentikasi Pengguna / Pemindai.
  4. Pendaftaran Pengguna / Pemindai.
  5. Generasi kode QR unik.
  6. Mengirim tanggapan HTTP.


MySQL bertindak sebagai database.



Arsitektur server dan database:





Tim proyek: Daniil Cherny, Nikolay Umrikhin, Sergey Chepurnoy.



Video dari pertahanan proyek .






Anda dapat membaca lebih lanjut tentang proyek pendidikan kami di tautan ini . Dan lebih sering masuk ke saluran Technostream , di sana secara teratur muncul video pelatihan baru tentang pemrograman, pengembangan, dan disiplin ilmu lainnya.



All Articles