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 使用的类和相关功能说明
登录界面:
QWidget和QMainWindow类:用于创建主窗口和各种子窗口。
QLabel:用于显示文本消息。
QLineEdit类:用于输入文本消息。
QPushButton类:按钮类,用于点击实现某种功能
由于qt有设计界面,无需写代码,直接在设计页面拖动实现。
两个QLabel,用于用户名以及密码的文本显示
两个QLineEdit,用于用户名和密码的输入框
两个按钮QPushButton,点击登录跳转到下一个界面,点击退出,退出程序。
以及相关命名
(只有命名一致,相关代码才不会报错,需要查看一下你的代码与你的命名是否符合)
以下是代码展示:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
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_OBJECT
public:
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_OBJECT
public:
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文件都复制过来