写点什么

基于 Qt 设计的课堂考勤系统 (采用 RDS for MySQL 云数据库 )

作者:DS小龙哥
  • 2022 年 7 月 13 日
  • 本文字数:7082 字

    阅读完需:约 23 分钟

1.前言

当前设计的这个考勤系统主要应用于高校课堂考勤,目前高校管理系统里有很多成功的案例,排课系统,教务管理系统、学生管理系统等等,这些系统的应用直接提高了师生的工作效率,下发课堂作业,检查课设报告等等,都可以直接在网上操作,非常方便。


目前设计的这个基于 RFID 的考勤系统,采用 C++作为编程语言,UI 界面采用 QT 设计,RFID 刷卡插件使用 C++开发,RFID 刷卡设备是 USB 接口协议,数据库采用华为云的 MySQL(RDS for MySQL),方便不同课堂、设备上运行软件可以同步考勤数据。


当前考勤系统包含的功能模块如下:


【1】登录模块:用户名和密码登录,本设计有三类用户名,包括系统管理员,教师和学生;【2】学生信息管理模块:学生基本信息的增加,删除,修改,查询;【3】考勤管理模块:进行学生签到和签退;【4】射频卡管理模块:利用射频卡对学生的考勤情况进行记录;【5】查询模块:管理员,教师,学生都可以对自己权限范围内考勤结果进行查询;【6】请假查询模块:通过 ID 查询学生请假情况;【7】数据备份模块:系统数据定期进行保存,但系统服务器出现故障时提供帮助。



该系统有 3 个用户权限,学生操作页面、管理员操作页面、教师操作页面。学生操作页面,可以查看自己的考勤记录;教师操作页面可以查看自己班级学生的考勤记录,添加考勤的学生;管理员可以查看所有人的考勤记录,支持所有功能。





当前系统里存储数据采用的华为云的在线云数据库 MySQL,MySQL 数据库是目前最受欢迎的开源数据库之一,其性能卓越,搭配 LAMP(Linux + Apache + MySQL + Perl/PHP/Python),成为 WEB 开发的高效解决方案。 华为云的 RDS for MySQL 数据库拥有稳定可靠、安全运行、弹性伸缩、轻松管理、经济实用等特点。


上面提到的云数据库 RDS(Relational Database Service,简称 RDS)是一种基于云计算平台的稳定可靠、弹性伸缩、便捷管理的在线云数据库服务。目前华为云数据库 RDS 支持以下引擎:


MySQLPostgreSQLSQL Server
复制代码


云数据库 RDS 服务具有完善的性能监控体系和多重安全防护措施,并提供了专业的数据库管理平台, 让用户能够在云上轻松的进行设置和扩展云数据库。通过云数据库 RDS 服务的管理控制台,用户无需编程就可以执行所有必需任务,简化运营流程,减少日常运维工作量,从而专注于开发应用和业务发展。

2. 部署(RDS for MySQL)云数据库

在华为云官网可以免费领取一个月的(RDS for MySQL)云数据库使用权,可以利用这个免费的机会,充分了解、体验(RDS for MySQL)数据库的使用效果。


注意: 数据库购买部署之后如果需要外网访问,需要绑定公网 IP 地址,如果之前购买过公网 IP,在购买数据库时注意选择相同的区域。


官网地址:https://activity.huaweicloud.com/free_test/index.html



向下翻,找到 MySQL 数据库,点击抢购。



根据引导页面填充信息,设置数据库登录密码。





最后完成支付。




查看订单详情。



购买成功后,接下来进入控制台管理页面。


稍等片刻就会处理完成。



然后在订单详情页面左上角点击控制台。



展开服务列表,找到云数据库 RDS。



也可以在资源管理里找到自己的实例。



选择自己购买的区域。



选择正确区域后,就能看到自己订单页面了。



地址: https://console.huaweicloud.com/rds/?agencyId=5fad13e389e142c09389a693ea18222b&locale=zh-cn&region=cn-north-9#/rds/management/list


进去之后可以看查看数据库信息。



在内网页面上可以直接登录数据库。



输入账号密码后,点击测试连接。



测量连接成功后,再点击登录。




登录之后,接下来就可以新建数据库测试了。 数据库创建后就可以建表、填充数据,正常的进行数据库的事务操作了。


3. 绑定公网 IP 地址

3.1 购买公网 IP 地址

为了方便数据库支持外网连接,需要给数据库实例绑定公网 IP 地址。




没有公网 IP 地址就点击右上角买一个。



如果是试用期测试的话,可以先买一个月的。



公网 IP 购买成功之后就可以看到处于未绑定状态,接下来绑定即可。



在刚才的页面继续绑定。



公网 IP 地址绑定成功。


3.2 添加入口规则

根据自己的需要开放指定的端口、IP 地址范围,这样可以有效的限制网络攻击。




4. 考勤软件连接数据库与 RFID 读卡器

4.1 连接数据库

软件是采用 QT 设计的,在 QT 里要连接 MySQL 数据库还有点麻烦,需要自己编辑 MQYSQL 的库才行。


主要是 Qt 5 在高版本中取消了对 MySQL 数据库的默认支持,主要是因为随着商业版的 MySQL 推出,MySQL 已经不能算是一个完全开源的数据库了,Qt 默认只会给完全开源的数据库提供支持。


要使用数据库,需要在 QT 的.pro 工程文件里加上QT += sql


下面是 QT 里连接 MQYSQL 主要代码:


LoginWindow::LoginWindow(QWidget *parent) :    QWidget(parent),    ui(new Ui::LoginWindow){    ui->setupUi(this);
this->setWindowTitle("学生考勤管理系统"); //设置主题样式 SetStyle(":/blue.css"); //设置密码框为密码显示模式 ui->lineEdit_password->setEchoMode(QLineEdit::Password); //设置背景提示文字 ui->lineEdit_password->setPlaceholderText("请输入密码"); //设置背景提示文字 ui->lineEdit_user_name->setPlaceholderText("请输入用户名");
//读配置 read_config();
//读取数据库
//设置并打开数据库 if (QSqlDatabase::contains(LOG_IN_DATABASE_CONNECT_NAME)) { database = QSqlDatabase::database(LOG_IN_DATABASE_CONNECT_NAME); } else { //数据库类型 database = QSqlDatabase::addDatabase("QMYSQL"); database.setDatabaseName(LOG_IN_DATABASE_NAME); //数据库名称 database.setUserName("root"); //用户名 database.setPassword("12345678"); //数据库的登录密码 database.setHostName("114.116.250.107"); //连接本地主机 database.setPort(3389); }
//打开数据库,如果数据库存在就打开,不存在就自动创建 if(database.open()==false) { qDebug("数据库打开失败.请检查程序运行路径和权限.\n"); } else { qDebug("连接数据库成功.\n"); }
//建表--存放账号密码 CreateUserPassTAB();}
复制代码


如果没有编译设置好 mySQL 的库文件,编译的时候会报错。


QSqlDatabase: QMYSQL driver not loadedQSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
复制代码


系统运行的效果:


4.2 RFID 刷卡代码

采用的 RFID 读卡器是 USB 接口,厂家提供了 DLL 动态库,直接连接,调用 DLL 库就可以完成调用。 型号是: RF-EYE 系列非接触式 IC 卡读写器。


所以自己的代码就很简单了,要读取卡号,读写数据,调用对应的 DLL 库接口就行了。


//#ifdef _WIN32//typedef HANDLE void*;//#else//typedef HANDLE int;//#endif
#define HANDLE void*
extern "C"{HANDLE __stdcall rf_init(__int16 port,long baud);__int16 __stdcall rf_beep(HANDLE icdev,unsigned short _Msec);__int16 __stdcall rf_card(HANDLE icdev,unsigned char _Mode,unsigned long *_Snr);};
//读卡-RFIDQString Widget::read_card(){ int st=0; unsigned long Snr; QString card_number; HANDLE icdev;
icdev=rf_init(0,9600);
//设置蜂鸣器 rf_beep(icdev, 25);
//读卡 st=rf_card(icdev,1,&Snr);
//卡号 card_number=QString("%1").arg(Snr);
if(st==0) { Log_Text_Display(QString("卡号:%1\n").arg(Snr)); } else { Log_Text_Display(QString("卡号读取错误.\n")); } return card_number;}
复制代码

4.3 编译 MySQL 驱动

由于 Qt 5 在高版本中取消了对 MySQL 数据库的默认支持,要在 QT 里继续使用 mysql 需要自己编译库。


源码下载地址: https://download.qt.io/archive/qt/5.12/5.12.6/submodules/


我使用的是 QT5.12.6,如果是使用了其他版本 QT,下载对应的源码即可。如果在安装 QT 时,默认安装了 QT 源码,就不用单独下载源码了。



下载后解压,打开下面这个工程:



工程路径: qtbase-everywhere-src-5.12.6\src\plugins\sqldrivers\mysql



windows 电脑上也得先提前安装 MySQL,版本选择 5.7 下载链接:https://dev.mysql.com/downloads/



在这个页面显示的是最新版本,如果想下载历史版本,点击页面上的archives



历史版本下载地址:https://downloads.mysql.com/archives/installer/




双击进行安装。



Developer Default:开发者默认安装——MySQL服务器和MySQL应用程序开发所需的工具。此设置类型包括:MySQL服务器、MySQL外壳、MySQL路由器、MySQL工作台、用于VisualStudio的MySQL、MySQL连接器、示例和教程、文件。Server only:仅限服务器——只安装MySQL服务器。Client only:仅限客户——安装MySQL应用程序开发所需的工具,但不包括MySQL服务器本身。此设置类型包括:MySQL外壳、MySQL路由器、MySQL工作台、MySQL Visual Studio插件、MySQL连接器、示例和教程、文件。Full:全部——安装此目录中所有可用的产品,包括MySQL服务器、MySQL外壳、MySQL路由器、MySQL工作台、MySQL连接器、文档、示例和示例等。Custom:定制——允许准确选择要安装的产品。这还允许选择其他服务器版本和体系结构。
复制代码



或者下载mysql-connector-c-6.1.11-win32也行的。https://downloads.mysql.com/archives/c-c/(这个库根据自己需要的版本下载)。



我这里分别下载了 X86_64bit 和 X86_32bit,下载下来解压后的文件如下。(截图截的是 32 位的,64 位是一样的流程)



接下来就打开刚才下载的 QT 源码工程,mysql 工程。



然后修改源码mysql.pro文件。



这个路径要根据自己的实际路径进行修改,如果要编译 32 位的就设置 32 位的路径,64 位就设置 64 位的路径。


INCLUDEPATH+="C:\Users\11266\Downloads\mysql-connector-c-6.1.11-win32\include"LIBS+="C:\Users\11266\Downloads\mysql-connector-c-6.1.11-win32\lib\libmysql.lib"DEPENDPATH += "C:\Users\11266\Downloads\mysql-connector-c-6.1.11-win32\include"
还需要注释调用这行代码#QMAK_USE += mysql
复制代码


总之要记住:


不同版本和位数的MYSQL里包含不同的 libmysql.dll,不同的 libmysql.dll 必须和配套的 qsqlmysqld.dll (debug 版)或 qsqlmysql.dll(release 版) 一起才能正常工作!
复制代码


接在修改源码sqldriverbase.pri文件。



#include($$shadowed($$PWD)/qtsqldrivers-config.pri)include(./configure.pri)
复制代码


修改之后保存代码,点击左下角的锤子按钮,构建工程。


我先编译 32 位,这里构建工程的编译器选择 32 位的。



构建成功之后,在源码目录下会生成一个编译的目录。



然后按下键盘上的 windows 图片按键,弹出左边的窗口,找到 QT 对应的编译器。(自己构建源码时用的什么编译器,这里打开的就是对应的编译器窗口)



打开之后,执行 cd 命令,进入到刚才构建生成的工程目录下。


C:\Qt\Qt5.12.6\5.12.6\mingw73_32>cd /d C:\Users\11266\Downloads\qtbase-everywhere-src-5.12.6\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_12_6_MinGW_64_bit-Release
复制代码


执行编译、安装命令即可。


mingw32-makemingw32-make install
复制代码


执行安装命令过程中,可以看到需要的文件已经生成,并且拷贝到对应的编译器目录下去了。



C:\Users\11266\Downloads\qtbase-everywhere-src-5.12.6\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_12_6_MinGW_32_bit-Release>mingw32-make installmingw32-make -f Makefile.Release installmingw32-make[1]: Entering directory 'C:/Users/11266/Downloads/qtbase-everywhere-src-5.12.6/src/plugins/sqldrivers/build-mysql-Desktop_Qt_5_12_6_MinGW_32_bit-Release'copy /y \plugins\sqldrivers\qsqlmysql.dll C:\Qt\Qt5.12.6\5.12.6\mingw73_32\plugins\sqldrivers\qsqlmysql.dll已复制         1 个文件。C:\Qt\Qt5.12.6\5.12.6\mingw73_32\bin\qmake.exe -install qinstall \lib\cmake\Qt5Sql\Qt5Sql_QMYSQLDriverPlugin.cmake C:\Qt\Qt5.12.6\5.12.6\mingw73_32\lib\cmake\Qt5Sql\Qt5Sql_QMYSQLDriverPlugin.cmakemingw32-make[1]: Leaving directory 'C:/Users/11266/Downloads/qtbase-everywhere-src-5.12.6/src/plugins/sqldrivers/build-mysql-Desktop_Qt_5_12_6_MinGW_32_bit-Release'mingw32-make -f Makefile.Debug installmingw32-make[1]: Entering directory 'C:/Users/11266/Downloads/qtbase-everywhere-src-5.12.6/src/plugins/sqldrivers/build-mysql-Desktop_Qt_5_12_6_MinGW_32_bit-Release'copy /y \plugins\sqldrivers\qsqlmysqld.dll C:\Qt\Qt5.12.6\5.12.6\mingw73_32\plugins\sqldrivers\qsqlmysqld.dll已复制         1 个文件。C:\Qt\Qt5.12.6\5.12.6\mingw73_32\bin\qmake.exe -install qinstall \lib\cmake\Qt5Sql\Qt5Sql_QMYSQLDriverPlugin.cmake C:\Qt\Qt5.12.6\5.12.6\mingw73_32\lib\cmake\Qt5Sql\Qt5Sql_QMYSQLDriverPlugin.cmakemingw32-make[1]: Leaving directory 'C:/Users/11266/Downloads/qtbase-everywhere-src-5.12.6/src/plugins/sqldrivers/build-mysql-Desktop_Qt_5_12_6_MinGW_32_bit-Release'
复制代码


然后打开 QT 安装目录下对应编译器的目录。


C:\Qt\Qt5.12.6\5.12.6\mingw73_32\plugins\sqldrivers
复制代码



可以看到,对应的qsqlmysql.dll插件文件已经生成了。64 位的编译器也是一样的操作流程,生成对应的插件。


最后再把 MySQL 安装目录下的libmysql.dll文件拷贝到 QT 对应编译器的bin目录下即可。



搞定之后,在 QT 代码目录下执行代码。


//打印Qt支持的数据库驱动qDebug()<<QSqlDatabase::drivers();
复制代码


在控制台会输出:


("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
复制代码


可以看到,里面已经包含了 QMYSQL 数据库的支持了。

5. 软件设计流程与思路

5.1 需求分析

(1)使用范围此系统主要给高校的教师使用;上课时,学生进入教室拿出学生卡自己进行打开考勤,可以在系统里申请请假以及查看在校期间所有的上课出勤信息。


考虑到整个学校学生众多,个人隐私问题,为此每个新学生需要由管理员或自己的班主任教师登录进入学生信息管理页面进行增加学生的信息操作,进行添加学生的相关信息;再由学生自己到登录界面进行学生注册操作,完善自己的其他信息,当注册成功提示后,在进入到登陆界面填入注册时的账号和密码就可以登录成功,最后才可以使用学生操作页面的功能模块等操作。教师则需要通过指定的教师账号和密码登录到教师管理后台,才能使用教师的操作页面的功能模块等。系统管理员则需要通过指定的管理员账号、密码登录到管理员后台,才能使用管理员操作页面的功能模块等。三者的操作页面相互独立,都有权限限制。


(2)5.2 学生权限学生可以在密码信息管理模块对自己的账号修改密码操作;还可以在个人信息管理模块进行修改关于自己其他的各项信息,学号、电话、紧急联系人、宿舍编号等;可在学生信息管理的模块查看自己所有的信息,可以刷卡快速读取卡号信息,匹配到指定的学生;可在建议信息管理模块来增加、查询自己或者别人的建议信息;可在成绩信息管理模块来查询自己的成绩信息;可在考勤签到提醒管理模块来查看自己之前未签到,迟到的相关信息以及查询系统对自己的评价记录;如果需进行退出系统,可点击右上角的 XX 退出系统模块。如果学生忘记密码,可以在软件的登陆界面点击找回密码按钮,再填写相关信息就可找回密码,或者管理员帮助修改密码。


(3)教师与管理员权限教师可以在密码信息管理模块的页面上进行修改密码操作;然后可在个人的信息管理模块页面来修改关于自己的各项信息,比如:联系方式,姓名,职务等等;可以在注册教师管理模块页面查看自己注册的信息,可以查询本班级注册的其他学生;可在学生信息管理模块进行增加、查询学生的信息操作;可在成绩管理模块进行增加、查询学生成绩信息的操作;可在班费信息管理模块进行增加、查询班级活动费用的信息操作;可在通知公告管理模块页面进行增加、查询发布的通知公告操作……如果需要进行退出系统操作,可以点击退出系统模块,也可点击右上角的退出按钮。管理员是当前系统的最高权限者,在教师可进行的操作模块上还可以进行增加、查询教师用户的操作。

5.2 系统功能模块图


功能页面主要展示首页、考勤管理模块、查询模块、请假查询模块、用户登录、管理登录界面。新的学生在登录界面点击注册按钮注册个人信息。学生、管理员与教师需要通过各自登陆界面进入操作平台。


5.3 学生登录平台

(1)学生注册流程图在学生注册页面填写注册信息,必须由学生填写相关的注册信息,反之则无法进行登录操作。需要填写的注册信息包括姓名、班级、专业、学号、联系方式、登录密码和密保邮箱等。



(2)学生登录流程图学生填写登录信息的模块流程,学生账号需要与注册的时候填为一致,登录密码与自己完成注册时输入的密码一致



(3) 学生找回密码流程图学生填写找回密码信息的模块,需要输入登录账号和密保邮箱(与学生注册时所输入的密保邮箱一致)。


6.总结

这篇文章介绍了 RDS for MySQL,部署,到实际使用的整个流程,利用一个课堂考勤系统软件来介绍数据库的一个实际应用场景。云数据库 RDS for MySQL 拥有即开即用、稳定可靠、安全运行、弹性伸缩、轻松管理、经济实用等特点。架构成熟稳定,支持流行应用程序,适用于多领域多行业。华为云提供的关系型数据库服务具有完善的性能监控体系和多重安全防护措施,并提供了专业的数据库管理平台, 让用户能够在云中轻松的进行设置和扩展关系型数据库。通过华为云关系型数据库服务的管理控制台,用户几乎可以执行所有必需任务而无需编程,简化运营流程,减少日常运维工作量,从而专注于开发应用和业务发展。


发布于: 2022 年 07 月 13 日阅读数: 21
用户头像

DS小龙哥

关注

之所以觉得累,是因为说的比做的多。 2022.01.06 加入

熟悉C/C++、51单片机、STM32、Linux应用开发、Linux驱动开发、音视频开发、QT开发. 目前已经完成的项目涉及音视频、物联网、智能家居、工业控制领域

评论

发布
暂无评论
基于Qt设计的课堂考勤系统(采用RDS for MySQL云数据库 )_7月月更_DS小龙哥_InfoQ写作社区