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

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_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文件都复制过来

  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值