1、学生管理系统V1.0

开发软件环境:QT CREATOR V6.4.0

使用的系统:windows10

使用的第三方软件:MySQL8.0

还有使用的其他软件:navicat premium 12 方便查询mysql数据库,可有可没有

为了方便大家下载软件,放衔接方便大家安装和下载

QT CREATOR V6.4.0 是在官网下载安装的,当时下载的是最新的版本 0.0 找不到安装的视频了,可能是自己在网上找的教程

MySQL8.0 的安装和下载 相关的视频:【2022MySQL—— 最新版安装保姆级超详细教程(附安装包)】 https://www.bilibili.com/video/BV1Fv4y1S7DN/?share_source=copy_web&vd_source=7ac9647c13280594efe55b833110ae35

navicat premium 12 安装和破解:【无毒Navicat Navicat15 Navicat12 安装破解 跳激活处理】 https://www.bilibili.com/video/BV1iv411q7Gj/?share_source=copy_web&vd_source=7ac9647c13280594efe55b833110ae35

如何才能使qt能够使用mysql数据库呢

1、需要下载好的mysql里的两个文件复制到qt中

2、需要mysql的驱动,第二点很简单又很麻烦,我的另一篇文章就展示了怎么解决(28条消息) 关于qt v6.4.0连接不上数据库mysql的问题-CSDN博客

做到这里应该解决了安装问题,接下来就可以直接学生管理系统的需求设计和代码编写了。

本文档将介绍如何使用C++编写一个学生管理系统,包括系统需求、设计、实现和测试。

2、需求与设计

2.1 系统结构设计:

结构可以采用经典的三层架构模式,即:表示层、业务逻辑层和数据层。

表示层:采用Qt的界面框架,设计登录页面、选课主页面等UI界面。

业务逻辑层:处理业务逻辑,包括学生信息表的展示,学生信息的增加、删除、修改、查询等。

数据层:采用mysql数据库存储学生信息表。

2.1.1 表示层UI界面的使用

我做的学生管理系统有三个界面:

1、登录界面

2、学生信息表显示界面

3、学生信息的增加、删除、修改界面

以下是图片展示:

登录界面:

学生信息表显示界面:

增加、修改、删除界面

2.1.2 使用的类和相关功能说明

登录界面:

  1. QWidget和QMainWindow类:用于创建主窗口和各种子窗口。

  1. QLabel:用于显示文本消息。

  1. QLineEdit类:用于输入文本消息。

  1. QPushButton类:按钮类,用于点击实现某种功能

由于qt有设计界面,无需写代码,直接在设计页面拖动实现。

两个QLabel,用于用户名以及密码的文本显示

两个QLineEdit,用于用户名和密码的输入框

两个按钮QPushButton,点击登录跳转到下一个界面,点击退出,退出程序。

以及相关命名

(只有命名一致,相关代码才不会报错,需要查看一下你的代码与你的命名是否符合)

以下是代码展示:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
//这里才是你需要添加的代码
private slots:void on_btn_login_clicked();void on_btn_exit_clicked();
//这里才是你需要添加的代码,private:Ui::Widget *ui;
};
#endif // WIDGET_H

界面的窗口集成的是QWidget的类,这里只定义了两个函数,分别是登录功能函数以及退出功能的函数

以上的代码很多都是qt自带的,你需要增加的代码:

``

private slots:void on_btn_login_clicked();void on_btn_exit_clicked();

登录界面的功能:

1、点击登录可以跳转到下一个页面

2、点击退出,退出程序

没有设置用户名和密码,可以直接使用这个程序,为什么不写用户名和密码设置呢,因为我V2.0版本做了,这里就懒得写了- -

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include"Form01.h"  //这个头文件是我的下一个界面
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);}Widget::~Widget()
{delete ui;
}void Widget::on_btn_login_clicked()
{Form01 *f01 = new Form01; //点击登录跳转到下一个界面f01->show();              //当前页面影藏this->hide();//数据库查找用户名和密码//如果失败就提示//成功进入主界面}void Widget::on_btn_exit_clicked()
{//退出//exit(0);           //点出退出 退出程序this->close();
}

(记得在ui界面,转到信号与槽,这里直接使用ui界面的信号与槽的功能)

数据表界面

使用的类

1、QTreeWidget类:树类,就是展示用,还没有任何功能

2、tablewidget:用于展示数据表

其他的就是输入框以及按钮啥的

不想写了,手累了,直接放代码:

form01.h

#ifndef FORM01_H
#define FORM01_H#include <QWidget>namespace Ui {
class Form01;
}class Form01 : public QWidget
{Q_OBJECTpublic:explicit Form01(QWidget *parent = nullptr);~Form01();private slots:void on_btn_exit1_clicked();void on_btn_addchick_clicked();void on_btn_look_clicked();void on_btn_modify_clicked();void on_btn_formdelete_clicked();void on_btn_search_clicked();private:Ui::Form01 *ui;};#endif // FORM01_H

from01.cpp

``

#include "Form01.h"
#include"ui_Form01.h"
#include "widget.h"
#include"add.h"
#include"ui_add.h"
#include<QSqlQuery>
#include<QTableWidget>
Form01::Form01(QWidget *parent) :QWidget(parent),ui(new Ui::Form01)
{ui->setupUi(this);QStringList header_list;    //创建树结构   表头header_list<<"管理系统";ui->treeWidget->setHeaderLabels(header_list);//隐藏表头//ui->treeWidget->setHeaderHidden(true);//设置展开//ui->treeWidget->expandAll();QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<<"学生管理");  //创建节点QTreeWidgetItem * miItem = new QTreeWidgetItem(QStringList()<<"管理员管理");ui->treeWidget->addTopLevelItem(liItem);    //添加节点ui->treeWidget->addTopLevelItem(miItem);QStringList student; //添加子节点student<<"学生";QTreeWidgetItem * li = new QTreeWidgetItem(student);liItem->addChild(li);QStringList teacher;teacher<<"老师";QTreeWidgetItem * mi = new QTreeWidgetItem(teacher);miItem->addChild(mi);QStringList teacher1;teacher1<<"主任";QTreeWidgetItem * mi1 = new QTreeWidgetItem(teacher1);miItem->addChild(mi1);ui->tableWidget->setColumnCount(4);//设置列数ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"id"<<"name"<<"age"<<"score");//ui->tableWidget->setRowCount(10); //设置行数
}Form01::~Form01()
{delete ui;
}void Form01::on_btn_exit1_clicked()    //退出返回,换账号登录
{this->close();Widget *wight1 = new Widget;wight1->show();
}void Form01::on_btn_addchick_clicked()
{add *add01 = new add;add01->show();
}void Form01::on_btn_look_clicked()
{QString sqlstr="select id,name,age,score from Student01;";//使用MYSQL查询语句获取表的数据 ,写入tableWidget中QSqlQuery query;query.prepare(sqlstr);//准备int i=0;if(query.exec()){while(query.next()){ui->tableWidget->setRowCount(i+1);//设置表格行数,每一次加一行ui->tableWidget->setItem(i,0,new QTableWidgetItem(query.value(0).toString())); //将从数据库中表获取的数据写入到tableWidget 表中ui->tableWidget->item(i,0)->setTextAlignment(Qt::AlignVCenter|Qt::AlignHCenter);ui->tableWidget->setItem(i,1,new QTableWidgetItem(query.value(1).toString()));ui->tableWidget->item(i,1)->setTextAlignment(Qt::AlignVCenter|Qt::AlignHCenter);ui->tableWidget->setItem(i,2,new QTableWidgetItem(query.value(2).toString()));ui->tableWidget->item(i,2)->setTextAlignment(Qt::AlignVCenter|Qt::AlignHCenter);ui->tableWidget->setItem(i,3,new QTableWidgetItem(query.value(3).toString()));ui->tableWidget->item(i,3)->setTextAlignment(Qt::AlignVCenter|Qt::AlignHCenter);i++;}}}void Form01::on_btn_modify_clicked()
{add *add02 = new add;add02->show();}void Form01::on_btn_formdelete_clicked()
{add *add03 = new add;add03->show();
}void Form01::on_btn_search_clicked()  //通过id查询学生信息
{int id = ui->line_id->text().toInt();QString sql = QString("select *from Student01 where id = '%1'").arg(id);QSqlQuery query;query.prepare(sql);int i=0;if(query.exec()){while(query.next()){ui->tableWidget->setRowCount(i+1);//设置表格行数,每一次加一行ui->tableWidget->setItem(i,0,new QTableWidgetItem(query.value(0).toString())); //将从数据库中表获取的数据写入到tableWidget 表中ui->tableWidget->item(i,0)->setTextAlignment(Qt::AlignVCenter|Qt::AlignHCenter);ui->tableWidget->setItem(i,1,new QTableWidgetItem(query.value(1).toString()));ui->tableWidget->item(i,1)->setTextAlignment(Qt::AlignVCenter|Qt::AlignHCenter);ui->tableWidget->setItem(i,2,new QTableWidgetItem(query.value(2).toString()));ui->tableWidget->item(i,2)->setTextAlignment(Qt::AlignVCenter|Qt::AlignHCenter);ui->tableWidget->setItem(i,3,new QTableWidgetItem(query.value(3).toString()));ui->tableWidget->item(i,3)->setTextAlignment(Qt::AlignVCenter|Qt::AlignHCenter);i++;}}}

第三个界面:

代码:

add.h

ifndef ADD_H
#define ADD_H#include <QWidget>namespace Ui {
class add;
}class add : public QWidget
{Q_OBJECTpublic:explicit add(QWidget *parent = nullptr);~add();private slots:void on_btn_add_clicked();void on_add_btn_modify_clicked();void on_add_btn_delete_clicked();//void on_btn_add_search_clicked();private:Ui::add *ui;
};#endif // ADD_H

add.cpp

``

#include "add.h"
#include "ui_add.h"
#include<QSqlQuery>
add::add(QWidget *parent) :QWidget(parent),ui(new Ui::add)
{ui->setupUi(this);
}add::~add()
{delete ui;
}void add::on_btn_add_clicked()  //添加数据库成员
{int id = ui->lineid->text().toInt();QString name = ui->linename->text();int age = ui->lineage->text().toInt();int score = ui->linescore->text().toInt();QString sql = QString("insert into Student01(id,name,age,score) values('%1','%2','%3','%4')").arg(id).arg(name).arg(age).arg(score);QSqlQuery query;query.exec(sql);}void add::on_add_btn_modify_clicked()   //修改
{int id = ui->lineid->text().toInt();QString name = ui->linename->text();int age = ui->lineage->text().toInt();int score = ui->linescore->text().toInt();QString sql = QString("update Student01 set id='%1',name='%2',age='%3',score='%4' where id='%5'").arg(id).arg(name).arg(age).arg(score).arg(id);QSqlQuery query;query.exec(sql);}void add::on_add_btn_delete_clicked()   //删除
{int id = ui->lineid->text().toInt();QString sql = QString("delete from Student01 where id = '%1'").arg(id);QSqlQuery query;query.exec(sql);
}

以及最最重要的数据库连接的代码:

stusql.h

``

#ifndef STUSQL_H
#define STUSQL_H#include <QWidget>
#include<QSqlDatabase>class stusql : public QWidget
{Q_OBJECT
public:explicit stusql(QWidget *parent = nullptr);//定义接口void init();   //数据库初始化private:QSqlDatabase  m_db;
};#endif // STUSQL_H

stusql.cpp

``

#include "stusql.h"
#include<QSqlQuery>
#include<QCoreApplication>
stusql::stusql(QWidget *parent): QWidget{parent}
{init();}void stusql::init()
{m_db = QSqlDatabase::addDatabase("QMYSQL");m_db.setHostName("127.0.0.1");m_db.setUserName("root");m_db.setPassword("你的数据库密码");m_db.setDatabaseName("demo");//建立数据库 你需要先在mysql建立好if (m_db.open() == false)    //测试数据库是否连接成功{qDebug()<<"no dataabse drivers found";return;}else{qDebug()<<"connect success";//auto str = QCoreApplication::applicationDirPath()+"demo.sql";// qDebug()<<str;QSqlQuery query;QString sql1 = "create table Student01(id int primary key auto_increment,name varchar(255),age int,score int);";query.exec(sql1); //创建空表}}

main.cpp的代码

``

#include "widget.h"
#include "stusql.h"
#include <QApplication>
#include<QSqlDatabase>#include <QFile>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();stusql sql;/*QStringList  drivers = QSqlDatabase::drivers();   //测试有没有mysql驱动foreach (QString  driver,drivers){qDebug()<<driver;}*/QFile styleFile(":\\css\\qt1.css");if(styleFile.open(QIODevice::ReadOnly)){qDebug("open success");QString setStyleSheet(styleFile.readAll());a.setStyleSheet(setStyleSheet);styleFile.close();}else{qDebug("Open failed");}return a.exec();
}

3、界面美化

我界面美化,是放在css文件中(qss,css文件没什么差别,刷墙功能)

包括了输入框、按钮以及树结构的美化

代码:


```c++
QFile styleFile(":\\css\\qt1.css");if(styleFile.open(QIODevice::ReadOnly)){qDebug("open success");QString setStyleSheet(styleFile.readAll());a.setStyleSheet(setStyleSheet);styleFile.close();}else{qDebug("Open failed");}
```可以看到我程序中这段代码,就是读取css文件中的代码。qt1.css中的代码内容:`代码``````css
QPushButton {``background-color: #4CAF50; /* 背景颜色*/``font-size: 15px;   /*字体大小,一旦超过按钮大小就会显示不完全*/``border-radius: 8px;  /*边框四角的圆润程度*/``border: 2px solid #030f03; /* 按钮边框的颜色 */``box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19);``}``QTreeWidget{background-color: #5B677A;``font-size:17px;``color: white;}``QTreeWidget::Item:: liItem:hover{``background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1);``border: 1px solid #bfcde4;}``QTreeWidget::Item:: liItem:hover{background: rgb(69, 187, 217);}``QTreeWidget::Item:: liItem:selected:active{background: rgb(63, 147, 168);}
`````

4、打包说明

4、打包说明

这是我项目的命名

这是相关资源文件的命名:

最后关于如何生成exe文件,能让其他人在电脑上使用这个程序:

这个从别人哪里复制过来这两张图,我实现了没保存图片,

需要这个文件,以及

最后你还需要将mysql中需要转到qt的那两个文件夹复制过来,才能运行。

一个dll文件和一个lib文件。

最后点它才能显示数据库的。

记得把css文件以及sql文件都复制过来

全网最全的qt连接mysql的应用,学生信息管理系统(展示全部代码)相关推荐

  1. 【Python + Mysql + UI】学生信息管理系统(附代码)

    ...........做了一个学生信息管理的简单数据库程序,写了一点简单的UI界面,功能不是很强大,代码组织也很不科学,洋洋洒洒竟然写了700多行.......分享出来,一起学习 /********* ...

  2. c#养老院老人信息管理系统源码 论文_[源码和文档分享]基于JSP和MYSQL实现的学生信息管理系统...

    摘 要 进行学生信息管理是学校的重要工作之一.传统的学生信息管理由于是手工操作,工作量大且容易出错.随着计算机和网络技术的迅速发展,越来越多的院校都拥有了自己的学生信息管理系统,而采用B/S架构的学生 ...

  3. Java实现模板写作系统,java+servlet+mysql实现的学生信息管理系统的毕设模板及指导思路...

    <p style="font-family:" font-size:16px;text-indent:2em;color:#666666;background-color:# ...

  4. 利用java和mysql数据库创建学生信息管理系统

    相关介绍 管理系统的使用可以大大提高我们的工作效率,给我们的生活带来极大的便利,因此我们在学习编程语言的时候大多是要学习和实现一个管理系统的创建的. 学生信息管理系统是进一步推进学生学籍管理规范化.电 ...

  5. 利用mysql做信息管理_利用MySql实现学生信息管理系统的后台数据管理

    Vol.28No.4 Apr.2012 赤峰学院学报(自然科学版)Journal of Chifeng University (Natural Science Edition )第28卷第4期(下) ...

  6. Qt开发学生信息管理系统

    在本项目中,我们将使用Qt开发一个简单的学生信息管理系统,实现以下功能: 添加学生信息(姓名.学号.性别.年龄.班级): 显示学生信息列表: 根据学号或姓名搜索学生信息: 修改学生信息: 删除学生信息 ...

  7. 【全教程】qt连接mysql——从qt编译mysql驱动到qt连接mysql数据库(二、编译连接)

    本篇教程分为三个部分: [全教程]qt连接mysql--从qt编译mysql驱动到qt连接mysql数据库(一.编译连接前准备) [全教程]qt连接mysql--从qt编译mysql驱动到qt连接my ...

  8. 【全教程】qt连接mysql——从qt编译mysql驱动到qt连接mysql数据库(一、编译连接前准备)

    一.说明 电脑系统:win10 qt版本:5.13.2和5.14.1(测试均成功) mysql版本:MySQL-5.5 本篇教程分为三个部分: [全教程]qt连接mysql--从qt编译mysql驱动 ...

  9. QT连接MySQL记录

    QT连接MySQL花费了不少时间,现在理一下头绪: 重点参考了http://www.linuxso.com/architecture/37897.html 这个帖子参考了http://www.sepp ...

最新文章

  1. pytorch之卷积模块、池化、激活函数(可视化)
  2. Python对比两个txt文件的不同
  3. 为什么整数在python中表示d_python 数据类型和变量
  4. execl用宏查询mysql_关于EXCEL能否用宏直接连到oracle数据库然后取数据
  5. iOS沙盒路径的查看和使用
  6. { parser: babylon } is deprecated; we now treat it as { parser: babel }.
  7. 前后端分离工程实现 (VUE、JAVA)、附全部源码
  8. 微信获取token -1000
  9. 实现路由器无线接收另一个路由器无线信号搭建网络
  10. matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件间的数据传递...
  11. Custom Corporate Background for NetBeans Platform Applications
  12. Mysql 查询列名
  13. 女生学java软件开发怎么样?就业前景如何?
  14. 常见的负载均衡器(一)
  15. 【Python】基于Python计算长时间遥感栅格图像的像元值变化度(斜率)和变异系数
  16. C++ 语法篇之 static 用法
  17. 世界各国2015-2020GDP排名
  18. 以太网交换机的功能与特点
  19. SAP 发票凭证反向冲销
  20. 3dmax2014【3dsmax2014】官方简体中文(64位)安装图文教程、破解注册方法

热门文章

  1. 新基建下的自动驾驶:车路协同和智慧交通为何成了急先锋?
  2. Google工具包Guava——聊聊代码校验Preconditions
  3. day07【Collection、泛型、数据结构】
  4. 一个古老故事--线程和线程池的故事
  5. NOI / 1.13编程基础之综合应用 21:最大质因子序列
  6. JVM中类加载的时机
  7. 追风筝的人 第十二章
  8. 【强化学习】Sarsa算法求解悬崖行走问题 + Python代码实战
  9. Mit6.S081学习记录
  10. 【优秀的下载工具】Leech for Mac 3.1.4