我们继续谈论教育项目中学生的毕业项目。在本期中,我们将向您介绍Technopark中“开发C ++”学科中的三个项目。以前的出版物:一个,2,3,4。
— . .
JunTracker — CRM
该项目的作者希望做一些可以在现实生活中使用的有用的东西。其中一名学生在一所额外的学校担任过机器人技术,编程和3D建模方面的老师。在Excel中,制定了时间表,财务会计以及具有学生成绩的日记。这一切让我很难受,而且你不能向父母展示。出现这种想法的目的是为此类学校提供便捷的服务,使他们能够制定时间表,监控学校财务状况并为学生维护电子期刊。在这种情况下,服务应具有权利分离。
CRM是在一个学期中从头开始编写的。我们做了很多,但是我们没有做一些事情。下学期,作者将制作第二个版本,在React中使用前端,在Go中使用服务器。
左侧用于学校管理员,右侧显示有关当天的所有信息。您可以按名字和姓氏搜索学生数据库。
每个学生都有一张带有统计信息的个人卡:
CRM体系结构如下所示:
前端用JS,HTML和CSS编写。它使用状态和复合模式。该模板使用Django语法和“工厂”模式。服务器使用中介者模式。为了使用PostgreSQL数据库,作者编写了一个包装器。
项目团队:Mark Bykhovets,Mikhail Truschelev,Timofey Makarov,Andrey Mavrin。
GitHub存储库。
来自项目防御的视频。
桌面信使JMICKHENGER
学生们想尝试创建具有这种现代应用程序基本功能的Messenger。JMICKHENGER在Linux和macOS上运行。他知道如何从联系人列表中与他人进行对话(一次聊天中支持无限数量的用户),发送图像并显示消息状态(已读或未读)。
该Messenger是使用以下技术创建的:
- OpenSSL。
- Qt-用于渲染界面,应用了MVC设计模式。
- 促进。
- MongoDB。
- SQLite。
通用系统架构:
在应用程序一侧,有一个网络部件库。用户与应用程序进行交互后,就会立即调用特定的客户端功能。并且根据操作,将传递具有所需功能的回调,该回调将在网络部分处理来自服务器的响应或将错误通知模型后执行。如果操作不正确,则应用程序将处理并通知用户输入的数据或其他操作不正确(错误的登录名或密码,已注册的用户,不存在的朋友或列表中已经有朋友等)。减少了对服务器的请求数量:分配了唯一的ID来通知聊天中的所有用户,这些ID用于代替请求。可以防止不耐烦的用户:多次单击同一按钮,每次发送请求,希望尽快从服务器得到响应:)
网络部分与远程服务器进行交互。异步客户端在单独的专用线程上运行,并使用Boost Asio编写。客户端维护与服务器的TLS连接。数据交换格式为JSON。 OpenSSL用于安全性。与网络部分的交互使用回调进行。有些回调在收到服务器的响应后才执行一次,而其他回调则在应用程序操作的整个过程中进行设置,并在每次从服务器收到某些信息时触发(类似于Google Firestore中的观察者)。对于一些很少更新的信息,可以使用SQLite实现缓存。
异步TCP Server也使用Boost Asio和OpenSSL编写。服务器标识具有唯一ID的连接,并使用请求队列将其执行委托给业务逻辑类的实例。另外,使用mongocxx库的作者编写了一个包装类,用于处理MongoDB。创建它时,使用了mongocxx库。业务逻辑可以有条件地分为三个部分:以JSON的形式接收来自客户端的请求并进行解析;使用数据库,并在某些情况下检查其正确性;对客户的回应。另外,业务逻辑被实现为动态库,因此将其与服务器部件结合起来将更加方便。
客户端和服务器之间的数据交换方案:
这就是与数据库进行数据交换的方式:
项目团队:Konstantin Pavlov,Sergey Alekseev,Nikolay Manzeev,Nikita Shchelkanov。
GitHub存储库。
来自项目防御的视频。
条码系统
作者为生产各种电子产品的企业制作了条形码系统。该系统能够自动考虑产品,在工艺过程的各个阶段控制产品的通过,并提高生产自动化程度。
该系统减轻了控制产品生产的负担。所有相关信息均可在线获得。该系统还消除了在不同生产阶段对产品进行计数时的人为错误。
工作计划:
客户端软件允许生成条形码并将制成品注册到服务器上的数据库中。表演者使用无线扫描仪读取包装或产品本身上印刷的条形码。扫描仪发送有关扫描条形码的信息,并要求数据库注册新产品。
系统需要无线条形码扫描仪,如下所示:
固件功能:
- 专门支持C语言的最新IDE。
- 部分记录的C API,用于扫描和使用按键,显示屏,指示灯,WiFi,内部存储。
- 有一个实用程序可将固件加载到内存中。
为了使扫描仪与其条形码系统兼容,该项目的作者对IDE进行了反向工程。事实证明,该设备配备了带有ARMv7-M内核的STM32F103xx微控制器。我们还设法找到一个具有业务逻辑的静态库来处理API调用。
用于开发系统的工具:
- cc-arm-none-eabi(GNU ARM工具链)-一组用于ARM体系结构的开发工具(编译器,++,ASM; ld,objdump)。
- 链接描述文件-用于Flash和RAM标记。
- CMake的作为构建系统+ cmake的工具链交叉编译为STM32微控制器文件(感谢到存储库https://github.com/ObKo/stm32-cmake)/
- 规格,文档,Stackoverflow,主题论坛。
我必须编写以下模块:
- 包装类,用于通过键进行用户交互。
- 与用户一起使用的“ GUI”。
- 在扫描程序API中实现的IP层上的TCP-HTTP-JSON堆栈。
- 扫描仪API上的包装器类,用于扫描条形码和获取扫描结果。
接下来,团队编写了客户端软件,使您可以:
- 授权用户。
- 查看所有产品型号以及有关它们的信息。
- 查看所有设备。
- 添加设备。
- 添加模型。
- 生成模型的条形码。
- 在打印机上打印条形码
- 将条形码保存到文件。
该软件的编写:
- QtCreator(图形界面)。
- Boost(网络实现和JSON解析)。
- 图书馆的产品ID转换为条形码。
HTTP服务器使用Boost.beast,MySqlCppConnector,Boost.thread和OpenSSL构建。它的任务:
- 接收HTTP请求。
- 访问数据库。
- 用户/扫描仪身份验证。
- 用户/扫描仪注册。
- 生成唯一的QR码。
- 发送HTTP响应。
MySQL充当数据库。
服务器和数据库架构:
项目团队:Daniil Cherny,Nikolay Umrikhin,Sergey Chepurnoy。
来自项目防御的视频。
您可以通过此链接阅读有关我们的教育项目的更多信息。经常访问Technostream频道,并定期出现有关编程,开发和其他学科的新培训视频。