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

2023年 10月 12日 87.2k 0

1.前言

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

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

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

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

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

image.png image.png image.png

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

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

MySQL
PostgreSQL
SQL Server

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

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

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

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

官网地址:activity.huaweicloud.com/free_test/i…

image.png

向下翻,找到MySQL数据库,点击抢购。 image.png 根据引导页面填充信息,设置数据库登录密码。 image.png image.png image.png 最后完成支付。 image.png image.png 查看订单详情。 image.png

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

稍等片刻就会处理完成。 image.png

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

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

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

选择自己购买的区域。 image.png

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

地址: console.huaweicloud.com/rds/?agency…

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

在内网页面上可以直接登录数据库。 image.png 输入账号密码后,点击测试连接。 image.png 测量连接成功后,再点击登录。 image.png image.png

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

3. 绑定公网IP地址

3.1 购买公网IP地址

为了方便数据库支持外网连接,需要给数据库实例绑定公网IP地址。 image.png image.png 没有公网IP地址就点击右上角买一个。 image.png 如果是试用期测试的话,可以先买一个月的。 image.png

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

在刚才的页面继续绑定。 image.png

公网IP地址绑定成功。 image.png

3.2 添加入口规则

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

image.png image.png image.png

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 loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

系统运行的效果: image.png

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);
};
​
//读卡-RFID
QString 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("卡号:%1n").arg(Snr));
    }
    else
    {
         Log_Text_Display(QString("卡号读取错误.n"));
    }
    return card_number;
}

4.3 编译MySQL驱动

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

源码下载地址: download.qt.io/archive/qt/…

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

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

工程路径: qtbase-everywhere-src-5.12.6srcpluginssqldriversmysql

image.png

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

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

image.png

历史版本下载地址: downloads.mysql.com/archives/in…

image.png

image.png

双击进行安装。 image.png

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:定制——允许准确选择要安装的产品。这还允许选择其他服务器版本和体系结构。

image.png

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

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

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

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

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

INCLUDEPATH+="C:Users11266Downloadsmysql-connector-c-6.1.11-win32include"
LIBS+="C:Users11266Downloadsmysql-connector-c-6.1.11-win32liblibmysql.lib"
DEPENDPATH += "C:Users11266Downloadsmysql-connector-c-6.1.11-win32include"
​
还需要注释调用这行代码
#QMAK_USE += mysql
​

总之要记住:

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

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

#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)

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

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

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

然后按下键盘上的windows图片按键,弹出左边的窗口,找到QT对应的编译器。 (自己构建源码时用的什么编译器,这里打开的就是对应的编译器窗口) image.png 打开之后,执行cd命令,进入到刚才构建生成的工程目录下。

C:QtQt5.12.65.12.6mingw73_32>cd /d C:Users11266Downloadsqtbase-everywhere-src-5.12.6srcpluginssqldriversbuild-mysql-Desktop_Qt_5_12_6_MinGW_64_bit-Release

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

mingw32-make
mingw32-make install

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

C:Users11266Downloadsqtbase-everywhere-src-5.12.6srcpluginssqldriversbuild-mysql-Desktop_Qt_5_12_6_MinGW_32_bit-Release>mingw32-make install
mingw32-make -f Makefile.Release install
mingw32-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 pluginssqldriversqsqlmysql.dll C:QtQt5.12.65.12.6mingw73_32pluginssqldriversqsqlmysql.dll
已复制         1 个文件。
C:QtQt5.12.65.12.6mingw73_32binqmake.exe -install qinstall libcmakeQt5SqlQt5Sql_QMYSQLDriverPlugin.cmake C:QtQt5.12.65.12.6mingw73_32libcmakeQt5SqlQt5Sql_QMYSQLDriverPlugin.cmake
mingw32-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 install
mingw32-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 pluginssqldriversqsqlmysqld.dll C:QtQt5.12.65.12.6mingw73_32pluginssqldriversqsqlmysqld.dll
已复制         1 个文件。
C:QtQt5.12.65.12.6mingw73_32binqmake.exe -install qinstall libcmakeQt5SqlQt5Sql_QMYSQLDriverPlugin.cmake C:QtQt5.12.65.12.6mingw73_32libcmakeQt5SqlQt5Sql_QMYSQLDriverPlugin.cmake
mingw32-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:QtQt5.12.65.12.6mingw73_32pluginssqldrivers

image.png

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

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

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

//打印Qt支持的数据库驱动
qDebug()

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论