Qt学生管理系统(付源码)
Qt学生管理系统
- 一、前言
- 1.1 项目介绍
- 1.2 项目目标
- 2、需求说明
- 2.1 功能性说明
- 2.2 非功能性说明
- 三、UX设计
- 3.1 登录界面
- 3.2 学生数据展示
- 3.3 信息插入和更新
- 三、架构说明
- 3.1 客户端结构如下
- 3.2 数据流程图
- 3.2.1 数据管理
- 3.2.2 管理员登录
- 四、 设计说明
- 3.1 数据库设计
- 3.2 结构设计
- 3.2.1 通用结构
- 3.2.1.1 student结构
- 3.2.1.2 usr 结构
- 3.2.1.3 audit_logs 结构
- 3.2 接口结构
- 3.2.1 StudentListRequest 学生信息列表请求
- 3.2.2 StudentListRequest 学生信息列表响应
- 3.2.3 LoginRequest 登录请求
- 3.2.4 LoginResponse 登录响应
- 3.2.5 AuditLogsRequest 审计请求
- 3.3 接口说明
- 3.3.1 学生相关接口
- 3.3.1 添加用学生信息
- 3.3.2 删除学生信息
- 3.3.3 更新学生信息
- 3.3.4 查询
- 3.3.2 登录相关
- 3.3.2.1 登录请求
- 3.3.3 审计相关
- 3.3.31 添加审计日志
- 四、部署
- 4.1 部署概述
- 4.2 部署步骤
- 五、源码地址:
一、前言
1.1 项目介绍
随着教育信息化的推进,学生管理系统成为学校管理的重要工具。传统的学生管理方式效率低、易出错,且难以满足现代化教育的需求。基于此,开发了一款基于 Qt 和 MySQL 的学生管理系统,以提高学校管理的效率和准确性。
1.2 项目目标
学生管理系统旨在为学校提供一个高效、可靠的学生信息管理平台,主要目标包括:
- 提高学生信息管理的效率
- 实现学生数据的安全存储和便捷访问
- 提供多样化的查询和统计功能
- 支持用户权限管理,确保数据安全
2、需求说明
2.1 功能性说明
-
1.1 管理员登陆
- 提供管理员登陆界面,登陆成功后才允许管理学生信息。
- 账号输入框:输入最大长度为16,,只能输入字母和数字。
- 密码输入框:密码长度小于6时提示错误,输入最大长度16。
-
1.2 学生添加
- 添加用学生信息,学生信息包括以下内容:
- 名字、性别、电话、身份证、地址、微信号、QQ号
-
1.3 学生展示
- 以列表形式展示学生信息,展示学生的学号,性别,名字电话。
- 支持翻页,每页展示10条数据,支持上一页/下一页,直接跳转指定页码,展示总页数和当前页。
-
1.4 学生查询
- 根据学生学号
- 根据学生名字模糊查询
- 根据学生性别查询
- 根据学生生日范围查询
- 根据学生电话号码查询
-
1.5 学生信息修改
- 可以修改除学号外的任何信息
-
1.6 删除学生信息
- 使用软删除
-
1.7 审计日志
- 记录添加用户信息,操作
2.2 非功能性说明
- 输入框:做sql过滤,防止SQL注入获取用户账号密码。
- 数据库存储密码时,使用安全存储,sha256(密码+安全码)
- 数据库信息通过文件配置方式,可以使得程序部署方便。
三、UX设计
3.1 登录界面

密码框在输入的使用应该隐藏数据输入内容。
3.2 学生数据展示

3.3 信息插入和更新

三、架构说明
3.1 客户端结构如下
- 客户端采用经典的MVC架构。
- M:数据模型层,用于访问Mysql数据库
- V:试图层,用于界面的展示。
- C:控制层,用于业务处理(这里是完整项目,项目比较简单其实这个层会体现不出来。)

3.2 数据流程图
3.2.1 数据管理
以下图数据流程图,通过这个图我们可以知道数据从界面到数据库,以及数据库数据到界面的整体流程
3.2.2 管理员登录
管理员的登录流程,也是上面2.3.1中的流程的具体使用,整体框架都是对标2.3.1
四、 设计说明
3.1 数据库设计
表名:student
| 字段 | 类型 | 是否必填 | 备注 |
|---|---|---|---|
| id | int | 是 | 学生学生号,主键 |
| name | varchar(255) | 是 | 学生名字 |
| sex | varchar(10) | 是 | 性别,男OR女 |
| sfz | varchar(20) | 是 | 身份证,唯一值 |
| tel | varchar(20) | 是 | 电话号码 |
| address | varchar(255) | 是 | 学生地址 |
| weixin | varchar(255) | 否 | 微信号 |
| varchar(255) | 否 | qq号 | |
| status | varchar(100) | 是 | 默认状态为active, active |
| create_time | TIMESTAMP | 是 | 创建时间,使用时间戳记录 |
| create_by | varchar(100) | 是 | 创建用户 |
| update_time | TIMESTAMP | 否 | 更新时间,使用时间戳记录 |
| update_by | varchar(100) | 否 | 更新学生信息的用户 |
CREATE TABLE IF NOT EXISTS student(id INT NOT NULl PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) NOT NULL COMMENT "学生名字",sex VARCHAR(10) NOT NULL COMMENT "学生性别",sfz VARCHAR(20) NOT NULL UNIQUE COMMENT "身份证",tel VARCHAR(20) NOT NULL COMMENT "电话号码",address VARCHAR(20) NOT NULl COMMENT "学生地址",weixin VARCHAR(255) COMMENT "微信号",QQ VARCHAR(255) COMMENT "qq号",status VARCHAR(100) NOT NULl COMMENT "qq号",create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT "创建时间",create_by VARCHAR(100) NOT NULL COMMENT "创建用户",update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "创建时间",update_by VARCHAR(100) NOT NULL COMMENT "创建用户"
) ENGINE=InnoDB;
表名:manager
| 字段 | 类型 | 是否必填 | 备注 |
|---|---|---|---|
| id | int | 是 | 管理员ID,主键 |
| user | varchar(100) | 是 | 登陆账户 |
| pw | varchar(100) | 是 | 密码 |
| safety_code | varchar(10) | 是 | 安全码 |
CREATE TABLE IF NOT EXISTS manager(id INT NOT NULl PRIMARY KEY AUTO_INCREMENT,user VARCHAR(100) NOT NULL COMMENT "登陆账户",pw VARCHAR(100) NOT NULL COMMENT "密码",safety_code VARCHAR(10) NOT NULL COMMENT "安全码"
)ENGINE=InnoDB;
表名:audit_logs 审计记录
| 字段 | 类型 | 是否必填 | 备注 |
|---|---|---|---|
| id | int | 是 | 管理员ID,主键 |
| option | varchar(100) | 是 | 操作类型,update,delete,insert |
| detail | varchar(1024) | 是 | 操作日志 |
| create_by | varchar(100) | 是 | 操作管理员名称 |
| create_time | TIMESTAMP | 是 | 创建时间 |
CREATE TABLE IF NOT EXISTS audit_logs(id INT NOT NULl PRIMARY KEY AUTO_INCREMENT,option VARCHAR(100) NOT NULL COMMENT "操作类型",detail VARCHAR(1024) NOT NULL COMMENT "操作管理员名称",create_by VARCHAR(100) NOT NULL COMMENT "登陆账户",create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT "创建时间"
)ENGINE=InnoDB;
3.2 结构设计
3.2.1 通用结构
3.2.1.1 student结构
stuct Student{int id,QString name,QString sex,QString sfz,QString tel,QStrnig address,QString weixin,QString qq,QString status,QString create_time,QString create_by,QString update_time,QString update_by
};
3.2.1.2 usr 结构
stuct User{int id,QString user,QString pw;QString safety_code
} ;
3.2.1.3 audit_logs 结构
struct AuditLogs{int id , QString option, QString detail,QString create_by,QString create_time
};
3.2 接口结构
3.2.1 StudentListRequest 学生信息列表请求
struct StudentListRequest{int page, // 当前页码 必填int size, // 每一页的数量 必填QString id, // 查询请求的id 非必填QString name, // 查询请求用户名 非必填QString sex, // 查询请求用户性别 非必填QString sfz, // 查询请求身份证 非必填QString weixin, // 查询请求微信号 非必填QString qq // 查询请求QQ号 非必填
};
3.2.2 StudentListRequest 学生信息列表响应
struct StudentListResponse{int msg_code, // 请求状态,0表示成功,其他表示错误QString msg, // 请求错误信息int current, // 当前页int total, // 请求数据的总数vector<Student> vecStudent // 学生数据
};
3.2.3 LoginRequest 登录请求
struct LoginRequest{QString user; // 用户账号 必填QString pw; // 用户名称
};
3.2.4 LoginResponse 登录响应
struct LoginResponse{int msg_code,QString msg,QString user,QString loginTime
};
3.2.5 AuditLogsRequest 审计请求
struct AuditLogsRequest{QString option,QString detail,QString createBy
};
3.3 接口说明
接口表示view层与controller层的对接接口,view层只需要通过controller层的接口调用获取数据,剩下展示的内容有view层进行展示。
3.3.1 学生相关接口
view和controller对接的接口
3.3.1 添加用学生信息
bool addStudentInfo(Student info);
QString sql = QString("insert into student (name,sex,sfz,tel,address,weixin,qq,status,create_by) ""values ('%0','%1','%2','%3','%4','%5','%6','%7','%8');").arg(info.name).arg(info.sex).arg(info.tel).arg(info.address).arg(info.weixin).arg(info.qq).arg(QString::number(1)).arg("test");QSqlQuery query;if(!query.exec(sql)){qInfo()<<"init db data failed!"<<query.lastError()<< ":" << query.lastQuery();return Result(0,"");}return Result(0,"");
3.3.2 删除学生信息
bool deleteStudentInfo(int id);
3.3.3 更新学生信息
bool updateStudentInfo(int id,Student newInfo);
3.3.4 查询
StudentListResponse selectStudentList(StudentListRequest studentListRequest);
StudentListResponse res;QString where = getStudentListRequestWhere(studentListRequest);// 获取数据总数res.total = getCountSelectStudentList(studentListRequest);res.current = studentListRequest.page;res.msg_code = 0;QSqlQuery query;QString currentOffset = QString::number(studentListRequest.page * studentListRequest.size);QString strSize = QString::number(studentListRequest.size);QString sql = "select * from student " +where +"limit "+ currentOffset +","+ strSize;if(!query.exec(sql)){res.msg_code = -1;res.msg = query.lastError().text();return res;}qInfo()<<"last:" << query.lastQuery();// 处理查询结果while (query.next()) {Student stu;stu.id = query.value(0).toString();stu.name = query.value(1).toString();stu.sex = query.value(2).toString();stu.sfz = query.value(3).toString();stu.tel = query.value(4).toString();stu.address = query.value(5).toString();stu.weixin = query.value(6).toString();stu.qq = query.value(7).toString();res.vecStudent.push_back(stu);}return res;
3.3.2 登录相关
3.3.2.1 登录请求
LoginResponse userLogin(LoginResponse loginResponse);
if(pw.isNull() || pw.isEmpty()){return Result(LOGIN_ERROR_PASSWORD_EMPTY,LOGIN_ERROR_PASSWORD_EMPTY_MSG);}Result res(0,"");QSqlQuery query;query.clear();QString sql = QString("SELECT * FROM manager WHERE user = '%1'").arg(user);query.prepare(sql);qInfo() << query.lastQuery();if (!query.exec()) {qDebug() << "Error: Failed to insert student." << query.lastError();return res;}QString spw;while (query.next()) {int id = query.value("id").toInt();spw = query.value("pw").toString();}if(pw == spw){return Result(LOGIN_OK,LOGIN_OK_MSG);}return Result(LOGIN_ERROR_PASSWORD,LOGIN_ERROR_PASSWORD_MSG);
3.3.3 审计相关
3.3.31 添加审计日志
void addAuditLogs(AuditLogsRequest auditLogsRequest);
四、部署
4.1 部署概述
该学生管理系统由 Qt 前端应用程序和 MySQL 数据库组成。Qt 应用程序通过读取配置文件 my.xml 连接到位于服务器上的 MySQL 数据库。
4.2 部署步骤
-
- 安装mysql数据库
-
- 导入初始化表init.sql
-
- 配置my.xml,配置文件需要和程序放在同一个目录中
五、源码地址:
https://gitcode.net/arv002/database/-/tree/master/StudentManagementSystem/StudentManagementSystem
相关文章:
Qt学生管理系统(付源码)
Qt学生管理系统 一、前言1.1 项目介绍1.2 项目目标 2、需求说明2.1 功能性说明2.2 非功能性说明 三、UX设计3.1 登录界面3.2 学生数据展示3.3 信息插入和更新 三、架构说明3.1 客户端结构如下3.2 数据流程图3.2.1 数据管理3.2.2 管理员登录 四、 设计说明3.1 数据库设计3.2 结构…...
重磅!新公司法正式实施,这些变化你必须知道! ️
新公司法来了!企业设立和经营必知的关键变动 🏛️🚀 大家好,我是猫头虎,科技自媒体博主。今天我们来聊聊一件大事——新公司法的实施,这对企业设立和经营带来了哪些重大影响?跟着我,…...
[Flask笔记]一个完整的Flask程序
前面讲过Flask是一个轻量级Web开发框架,为什么说是轻量级的呢,因为它用短短几行代码就能运行起来,我们一起来看看最简单的flask框架。 安装Flask 在看Flask框架之前我们需要先安装flask模块,学过python的肯定都知道,…...
企业专利布局怎么弄
企业专利布局策略与实施 在当今竞争激烈的商业环境中,企业的专利布局已成为保护创新成果、提升市场竞争力的重要手段。专利布局不仅是技术创新的体现,更是企业战略布局的重要一环。 一、企业专利布局的策略 多维度布局 企业专利布局应结合市场、技术、…...
ArduPilot开源飞控之AP_Mount_Topotek
ArduPilot开源飞控之AP_Mount_Topotek 1. 源由2. 框架设计3. 重要函数3.1 动态过程3.1.1 AP_Mount_Topotek::update3.1.2 AP_Mount_Backend::calculate_poi 3.2 基础能力3.2.1 AP_Mount_Topotek::healthy3.2.2 AP_Mount_Topotek::has_pan_control 3.3 设备功能3.3.1 AP_Mount_T…...
React组件间通信的几种方式
一、Props向下传递(Top-Down Propagation) 父组件通过props将其状态或数据传递给子组件。 父组件: class ParentComponent extends React.Component {state { message: Hello World };render() {return <ChildComponent message{this.…...
2024最新国际版抖音TikTok安装教程,免root免拔卡安卓+iOS,附全套安装工具!
我是阿星,今天给大家带来是2024年最新TikTok国际版抖音的下载和安装教程,而且还是免root免拔卡的那种,安卓和iOS都能用哦!由于某些原因,国内用户并不能使用TikTok。今天阿星就教一下大家怎么安装TikTok。 TikTok在全球…...
kafka与zookeeper的SSL认证教程
作者 乐维社区(forum.lwops.cn)许远 在构建现代的分布式系统时,确保数据传输的安全性至关重要。Apache Kafka 和 Zookeeper 作为流行的分布式消息队列和协调服务,提供了SSL(Secure Sockets Layer)认证机制&…...
为何数字化转型项目会夭折?深入分析失败的关键因素
数字化转型是一个复杂的过程,涉及企业运营的各个方面。根据麦肯锡的报告,尽管数字化转型对企业至关重要,但根据数据显示70%的数字化转型尝试未能成功。本文总结了六大常见失败原因:转型准备不足、组织文化障碍、技术实施问题、人才…...
数据结构(其二)--线性表
目录 1. 基本概念 2.线性表的基本操作 3.顺序表 (1).静态分配 (2).动态分配 (3).顺序表的插入与删除(以静态分配为例)(示例代码中包含了一下必要的基本函数…...
软链接node_modules
公司项目很多微应用的子项目公用同一套模板,也就会使用同一个node_modules 1.先创建3个同样的项目,并安装一个其中的一个node_modules给他丢到外边 2.win r -------> cmd --------> ctrlshift enter(已管理员身份打开cmd) 3.在窗口分别执行以下代码…...
Apache中使用SSI设置
先停服务在修改httpd.conf,备份下 Apache\Apache24\conf 设置httpd.conf LoadModule ssl_module modules/mod_ssl.so 取消该命令前的注释符# AddType text/html .shtml AddOutputFilter INCLUDES .shtml 取消该命令前的注释符# 加入html AddType text/html .s…...
Java Stream API详解:高效处理集合数据的利器
引言 Java 8引入了许多新特性,其中最为显著的莫过于Lambda表达式和Stream API。Stream API提供了一种高效、简洁的方法来处理集合数据,使代码更加简洁明了,且具有较高的可读性和可维护性。本文将深入探讨Java Stream API的使用,包…...
Python使用策略模式和openpyxl库创建Excel文件并追加内容
from openpyxl import load_workbook# 数据数组 data [[1, 2, 3],[4, 5, 6],[7, 8, 9] ]# 打开现有的 Excel 文件 excel_file sheetApend_example.xlsx wb load_workbook(excel_file)# 选择要追加数据的工作表 sheet_name test_Sheet2 # 指定要追加数据的工作表名称 sheet…...
libcoap3对接华为云平台
文章目录 前言一、平台注册二、引入源码库1.libcoap仓库编译2.分析网络报文3.案例代码4.编译&运行 总结 前言 通过libcoap3开源代码库对接华为云平台,本文章将讨论加密与不加密的方式对接华为云平台。 一、平台注册 首先,你需要在华为云平台上创建…...
【鸿蒙学习笔记】关系型数据库概述
目录标题 关系型数据库的运行机制样例代码共通方法 DBUtilsIndex 代码效果 关系型数据库的运行机制 1、 关系型数据库对应用提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite具有的数据库特性,包括但不限于事务、索引、视图…...
Find My网球拍|苹果Find My技术与网球拍结合,智能防丢,全球定位
网球是球类运动项目之一,网球拍作为这项运动的必备工具,有木质球拍、铝合金球拍、钢质球拍和复合物(尼龙、碳素)球拍,任何材质的球拍均可用于比赛。网球拍由拍头、拍喉、拍柄组成,在使用时还需要配合网球线…...
windows环境下部署多个端口Tomcat服务和开机自启动设置保姆级教程
前言 本文主要介绍了 windows环境下,配置多个Tomcat设置不同端口启动服务。其实在思路上Linux上也是适用的,只是 Linux 上没有可视化客户端,会麻烦些,但总体的思路上是一样的。 注:文章中涉及些文字和图片是搬运了其他…...
科普文:一文搞懂jvm实战(四)深入理解逃逸分析Escape Analysis
概叙 Java 中的对象是否都分配在堆内存中? 好了太抽象了,那具体一点,看看下面这个对象是在哪里分配内存? public void test() { Object object new Object(); }这个方法中的object对象,是在堆中分配内存么࿱…...
中文大模型发展到哪一个阶段了?
中文大模型发展到哪一个阶段了? 近日,中文大模型综合性测评基准SuperCLUE,发布了上半年大模型中文综合评测报告。“百模大战”中,OpenAI的GPT-4o是表现最优秀的大模型,但国内大模型已将差缩小至4.8%。国内大模型崛起迅…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
标注工具核心架构分析——主窗口的图像显示
🏗️ 标注工具核心架构分析 📋 系统概述 主要有两个核心类,采用经典的 Scene-View 架构模式: 🎯 核心类结构 1. AnnotationScene (QGraphicsScene子类) 主要负责标注场景的管理和交互 🔧 关键函数&…...
c++算法学习3——深度优先搜索
一、深度优先搜索的核心概念 DFS算法是一种通过递归或栈实现的"一条路走到底"的搜索策略,其核心思想是: 深度优先:从起点出发,选择一个方向探索到底,直到无路可走 回溯机制:遇到死路时返回最近…...
MySQL 数据库深度剖析:事务、SQL 优化、索引与 Buffer Pool
在当今数据驱动的时代,数据库作为数据存储与管理的核心,其性能与可靠性至关重要。MySQL 作为一款广泛使用的开源数据库,在众多应用场景中发挥着关键作用。在这篇博客中,我将围绕 MySQL 数据库的核心知识展开,涵盖事务及…...
【RabbitMQ】- Channel和Delivery Tag机制
在 RabbitMQ 的消费者代码中,Channel 和 tag 参数的存在是为了实现消息确认机制(Acknowledgment)和精细化的消息控制。 Channel 参数 作用 Channel 是 AMQP 协议的核心操作接口,通过它可以直接与 RabbitMQ 交互: 手…...
Fractal Generative Models论文阅读笔记与代码分析
何恺明分型模型这篇文章在二月底上传到arXiv预出版网站到现在已经过了三个月,当时我也听说这篇文章时感觉是大有可为,但是几个月不知道忙啥了,可能错过很多机会,但是亡羊补牢嘛,而且截至目前,该文章应该也还…...
