Qt学生管理系统-- 数据库课程设计(付源码)

news2024/9/21 0:31:47

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 数据管理

以下图数据流程图,通过这个图我们可以知道数据从界面到数据库,以及数据库数据到界面的整体流程

view层 contoller层 model层 DB 请求数据 参数判断,基本逻辑错里 参数错误 界面显示参数错误 数据请求 数据业务管理 数据库请求 返回数据 返回结果 业务处理 数据返回 展示数据 view层 contoller层 model层 DB

3.2.2 管理员登录

管理员的登录流程,也是上面2.3.1中的流程的具体使用,整体框架都是对标2.3.1

登录界面(view) 管理员控制器(controller) 管理员数据模型(model) 提交用户账户密码 根据用户名称查询用户的信息 返回查询结果 对比用户输入密码和数据查询密码是否一致 返回查询结果 登录界面(view) 管理员控制器(controller) 管理员数据模型(model)

四、 设计说明

3.1 数据库设计

表名:student

字段类型是否必填备注
idint学生学生号,主键
namevarchar(255)学生名字
sexvarchar(10)性别,男OR女
sfzvarchar(20)身份证,唯一值
telvarchar(20)电话号码
addressvarchar(255)学生地址
weixinvarchar(255)微信号
QQvarchar(255)qq号
statusvarchar(100)默认状态为active, active
create_timeTIMESTAMP创建时间,使用时间戳记录
create_byvarchar(100)创建用户
update_timeTIMESTAMP更新时间,使用时间戳记录
update_byvarchar(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

字段类型是否必填备注
idint管理员ID,主键
uservarchar(100)登陆账户
pwvarchar(100)密码
safety_codevarchar(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 审计记录

字段类型是否必填备注
idint管理员ID,主键
optionvarchar(100)操作类型,update,delete,insert
detailvarchar(1024)操作日志
create_byvarchar(100)操作管理员名称
create_timeTIMESTAMP创建时间
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(QString id);

3.3.3 更新学生信息

bool updateStudentInfo(QString 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 部署步骤

    1. 安装mysql数据库
    1. 导入初始化表init.sql
    1. 配置my.xml,配置文件需要和程序放在同一个目录中

五、编译环境说明

操作系统:win10
QT:版本
在这里插入图片描述
编译环境配置:
在这里插入图片描述

五、源码地址:

https://gitcode.net/arv002/database/-/tree/master/StudentManagementSystem/StudentManagementSystem

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1928955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis 配置文件参数详解

1、redis.conf 通用类 Redis的配置文件是一个文本文件&#xff0c;通常名为redis.conf。以下是一些常见配置项的解释和示例&#xff1a; 1、bind 127.0.0.1&#xff1a;绑定的主机地址 2、 protected-mode ,默认是开启状态&#xff0c;一般不需要修改&#xff0c;可以保证服务…

vue router 切换路由的时候,页面的动画效果,使页面切换好看,以及控制有的页面使用切换路由特效,有的页面不用

一、使用切换效果 在router文件中 useTransition: true代表需要动画 meta: { title: “新开卡预填表单”, keepAlive: true, useTransition: true }, [{path: "/",name: "Home",meta: {title: "首页",keepAlive: true,useTransition: false},c…

随机变量线弹性材料蒙特卡洛模拟

随机变量线弹性材料蒙特卡洛模拟 建模步骤参数与随机变量参数几何材料边界约束网格剖分计算研究模拟结果模型文件下载 建模步骤 新建——模型向导——二维选择物理场——固体力学——稳态——完成 参数与随机变量参数 输入参数如下&#xff1a; 全局定义——右键函数——…

探索未来视界:LC201小尺寸红外热成像机芯引领行业新变革

在当今科技飞速发展的时代&#xff0c;红外热成像技术正以前所未有的方式革新着诸多行业&#xff0c;而灵卡技术推出的LC201小尺寸红外热成像机芯&#xff0c;正是这一变革的先锋。专为体积和功耗敏感领域设计&#xff0c;LC201以超紧凑的22x22mm尺寸、轻量化设计&#xff0c;及…

实验三:图像的平滑滤波

目录 一、实验目的 二、实验原理 1. 空域平滑滤波 2. 椒盐噪声的处理 三、实验内容 四、源程序和结果 (1) 主程序&#xff08;matlab&#xff09; (2) 函数GrayscaleFilter (3) 函数MeanKernel (4) 函数MedFilter 五、结果分析 1. 空域平滑滤波 2. 椒盐噪声的处理…

手撕Vue中的RouterLink和RouterView,深入理解其底层原理(二)

前言 在之前我们已经讲过了如何手撕本文RouterLink&#xff0c;深入讲解了RouterLink的基本原理 手撕Vue中的RouterLink和RouterView&#xff0c;深入理解其底层原理&#xff08;一&#xff09; - 掘金 (juejin.cn) 接下来我们就继续手撕RouterView吧&#xff01;&#xff0…

搭建个人智能家居 7 - 空气颗粒物检测

搭建个人智能家居 7 - 空气颗粒物检测 前言说明PMS5003ESPHomeHomeAssistant结束 前言 到目前为止&#xff0c;我们这个只能家居系统添加了4个外设&#xff0c;分别是&#xff1a;LED灯、RGB灯、DHT11温度传感器和SGP30。今天继续添加环境测量类传感器“PMS5003空气颗粒物检测…

【数据集处理工具】根据COCO数据集的json标注文件实现训练与图像的文件划分

根据COCO数据集的json标注文件实现训练与图像的文件划分 一、适用场景&#xff1a;二、COCO数据集简介&#xff1a;三、场景细化&#xff1a;四、代码优势&#xff1a;五、代码 一、适用场景&#xff1a; 适用于一个常见的计算机视觉项目应用场景&#xff0c;特别是当涉及到使…

python数据可视化(6)——绘制散点图

课程学习来源&#xff1a;b站up&#xff1a;【蚂蚁学python】 【课程链接&#xff1a;【【数据可视化】Python数据图表可视化入门到实战】】 【课程资料链接&#xff1a;【链接】】 Python绘制散点图查看BMI与保险费的关系 散点图: 用两组数据构成多个坐标点&#xff0c;考察…

PXE、Kickstart和cobbler

一.系统装机 1.1 三种引导方式 启动操作系统 1.硬盘 2.光驱(u盘) 3.网络启动 pxe 1.2 系统安装过程 1.加载boot loader: Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设 备、建立内存空间的映射图,从而将系统的软硬…

详解曼达拉升级:如何用网络拓扑结构扩容BSV区块链

​​发表时间&#xff1a;2024年5月24日 BSV曼达拉升级是对BSV基础设施的战略性重塑&#xff0c;意在显著增强其性能&#xff0c;运行效率和可扩容。该概念于2018年提出&#xff0c;其战略落地将使BSV区块链顺利过渡&#xff0c;从现有的基于单一集成功能组件的网络拓扑结构&am…

使用Elasticsearch Python SDK 查询Easysearch

随着数据分析需求的不断增长&#xff0c;能够高效地查询和分析大数据集变得越来越重要。Elasticsearch作为一种强大的分布式搜索和分析引擎&#xff0c;被广泛应用于各种场景。Easyearch 支持原生 Elasticsearch 的 DSL 查询语法&#xff0c;确保原业务代码无需调整即可无缝迁移…

【数据结构与算法 经典例题】判断二叉树是否对称

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法 经典例题》C语言 期待您的关注 目录 一、问题描述 二、解题思路 三、C语言实现代码 一、问题描述 给你一个二…

MySQL NaviCat 安装及配置教程(Windows)【安装】

文章目录 一、 MySQL 下载1. 官网下载2. 其它渠道 二、 MySQL 安装三、 MySQL 验证及配置四、 NaviCat 下载1. 官网下载2. 其它渠道 五、 NaviCat 安装六、 NaviCat 激活 软件 / 环境安装及配置目录 一、 MySQL 下载 1. 官网下载 安装地址&#xff1a;https://www.mysql.com/…

Python | Leetcode Python题解之第237题删除链表中的节点

题目&#xff1a; 题解&#xff1a; class Solution:def deleteNode(self, node):node.val node.next.valnode.next node.next.next

OrangePi Aipro Ai计算测试

开发板配置 http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.html CPU4核64位处理器 AI处理器GPU集成图形处理器AI算力8-12TOPS算力内存LPDDR4X&#xff1a;8GB/16GB&#xff08;可选&#xff09;&#xff0c;速率&#xff1a;3200…

让AI语言模型自由飞翔:LangChain框架的奇妙世界

今天&#xff0c;我将为大家揭开一项令人激动的技术——LangChain。想象一下&#xff0c;如果能将人工智能的强大能力与我们日常使用的数据和工具无缝连接&#xff0c;那将开启怎样崭新且无限的可能&#xff01; LangChain&#xff0c;一个专为大型语言模型设计的框架&#xf…

Linux FFmpeg安装教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Windows安装Pycharm及汉化教程

在安装好了Python之后呢&#xff0c;我们需要更方便的进行编写代码&#xff0c;使用Python自带的IDLE和命令行是不太友好的。 那么有没有一款免费好用的写代码工具呢&#xff1f;答案是有的&#xff01; PyCharm 是由 JetBrains 打造的一款 Python IDE&#xff0c;提供代码分析…

【Django】网上蛋糕项目商城-注册,登录,修改用户信息,退出功能

概念 通过以上多篇文章的讲解&#xff0c;对该项目的功能已经实现了很多&#xff0c;本文将对该项目的用户注册&#xff0c;登录&#xff0c;修改用户信息&#xff0c;以及退出等功能的实现。 注册功能实现 点击head.html头部页面的注册按钮&#xff0c;触发超链接跳转至use…