2、QT学习(1)---学生管理系统的增删改查

看了关于QT的学习教程,但是教程仅仅只有一个查询功能,其余的要付费报课,所以今天来实现一下学生管理系统的增删改查。

1、建立带UI界面的工程文件

这是视频中所教的部分,建立UI文件之后对整个UI界面进行布局,其布局之后如下图所示:
在这里插入图片描述
直接拖拽之后再进行布局即可。
修改对应的键值名称,保证子函数名的工整。
在这里插入图片描述

2、创建数据库

建立sql的数据库,用以存放数据。

void StudentDlg::CreateDatabaseFunc()  //创建SQLite数据库
{
    //1.添加数据库驱动
    sqldb = QSqlDatabase::addDatabase("QSQLITE");

    //2.设置数据库名称
    sqldb.setDatabaseName("studentmis.db");

    //3.打开此数据库是否成功
    if(sqldb.open()==true)
    {
        QMessageBox::information(0,"正确","恭喜你,数据库打开成功!",QMessageBox::Ok);
    }
    else
    {
        QMessageBox::critical(0,"正确","数据库打开失败!",QMessageBox::Ok);
    }

}

使用弹窗验证数据库打开是否成功
在这里插入图片描述

3、实现插入数据

插入数据代码如下:

void StudentDlg::on_insert_Button_clicked()
{
    QSqlQuery sqlquery;
    int id=ui->number_lineEdit->text().toInt();
    if(id==0)
    {
        QMessageBox::critical(this,"失败","学生学号不能为0",QMessageBox::Ok);
        return ;
    }

    QString name=ui->name_lineEdit->text();
    if(name=="")
    {
        QMessageBox::critical(this,"失败","输入错误,姓名不能为空",QMessageBox::Ok);
        return ;
    }

    double score = ui->score_lineEdit->text().toDouble();
    if(score<0 || score>100)
    {
        QMessageBox::critical(this,"失败","输入错误,分数范围在0~100中间",QMessageBox::Ok);
        return ;
    }
    QString strs = QString("insert into student "
                           "values(%1,'%2',%3)").arg(id).arg(name).arg(score);


    if(sqlquery.exec(strs)==false)
    {
        QMessageBox::critical(0,"失败","向数据表插入数据失败,请重新检查!",QMessageBox::Ok);
    }
    else
    {
        QMessageBox::information(0,"失败","向数据表插入数据成功!",QMessageBox::Ok);
    }
    on_inquire_Button_clicked();//最后执行一下查询操作
}

在这里插入图片描述
到这里,视频讲解就已经结束,下面就要自己面向百度的编程了。

4、实现查询数据

查询作为最基础的模块,首先就需要实现这一块。

void StudentDlg::on_inquire_Button_clicked()
{
    if(!(ui->number_lineEdit->text().isEmpty()))//ID不为空,按照ID查询
    {

        int id=ui->number_lineEdit->text().toInt();
        QSqlTableModel *model;    //数据库模型
        model=new QSqlTableModel; //负责提取数据
        model->setTable("student");//选择要输出的表名称
        model->setFilter(QString("id = '%1'").arg(id));
        model->select();
        ui->tableView->setModel(model);

        return ;
    }
    if(!(ui->name_lineEdit->text().isEmpty()))
    {

        QString name=ui->name_lineEdit->text();
        QSqlTableModel *model;    //数据库模型  参考:https://blog.csdn.net/hw5230/article/details/128244349
        model=new QSqlTableModel; //负责提取数据
        model->setTable("student");//选择要输出的表名称
        model->setFilter(QString("name = '%1'").arg(name));
        model->select();
        ui->tableView->setModel(model);

        return ;
    }
    if(!(ui->score_lineEdit->text().isEmpty()))
    {

        int score=ui->score_lineEdit->text().toInt();
        QSqlTableModel *model;    //数据库模型
        model=new QSqlTableModel; //负责提取数据
        model->setTable("student");//选择要输出的表名称
        model->setFilter(QString("score = '%1'").arg(score));
        model->select();
        ui->tableView->setModel(model);

        return ;
    }

    QSqlTableModel *model_;    //数据库模型
    model_=new QSqlTableModel; //负责提取数据
    model_->setTable("student");//选择要输出的表名称


    if(model_->select())
    {
           qDebug()<<"model设置成功";
    }
    else
    {
           qDebug()<<"model设置失败";
    }
    ui->tableView->setModel(model_);
    //参考:https://blog.csdn.net/weixin_49223760/article/details/125633490

}

查询这一部分主要就是有一个按照学号查询的功能,需要进行过滤操作,通过学习其他博客,实现了这一功能,也可以按需添加不同的功能。博客的链接都在注释当中。
在这里插入图片描述

5、实现删除数据

删除数据也是参照了查询数据的相关源码。

void StudentDlg::on_delete_Button_clicked()
{

    QSqlTableModel *model;    //数据库模型
    model=new QSqlTableModel; //负责提取数据
    model->setTable("student");//选择要输出的表名称
    model->select();
    if(ui->number_lineEdit->text().isEmpty())
    {
        int curRow = ui->tableView->currentIndex().row();
        model->removeRow(curRow);
    }
    else
    {
        int id=ui->number_lineEdit->text().toInt();
        model->removeRow(id);
    }

    int ok=QMessageBox::warning(this,tr("删除当前行!"),tr("你确定删除当前行吗?"),
                                QMessageBox::Yes,QMessageBox::No);
    if(ok==QMessageBox::No)
    {
        model->revertAll();
    }
    else model->submitAll();
    on_inquire_Button_clicked();
}

目前的删除是需要选中数据所在的行,点击删除进行删除操作。

6、实现更新数据

void StudentDlg::on_update_Button_clicked()
{
    QSqlQuery sqlquery;
    int id=ui->number_lineEdit->text().toInt();
    if(id==0)
    {
        QMessageBox::critical(this,"失败","学生学号不能为0",QMessageBox::Ok);
        return ;
    }

    QString name=ui->name_lineEdit->text();
    if(name=="")
    {
        QMessageBox::critical(this,"失败","输入错误,姓名不能为空",QMessageBox::Ok);
        return ;
    }

    double score = ui->score_lineEdit->text().toDouble();
    if(score<0 || score>100)
    {
        QMessageBox::critical(this,"失败","输入错误,分数范围在0~100中间",QMessageBox::Ok);
        return ;
    }
    QString strs = QString("update student "
                           "set name='%1',score=%2 where id=%3").arg(name).arg(score).arg(id);

    if(sqlquery.exec(strs)==false)
    {
        QMessageBox::critical(0,"失败","更新数据失败,请重新检查!",QMessageBox::Ok);
    }
    else
    {
        QMessageBox::information(0,"失败","更新数据成功!",QMessageBox::Ok);
    }
    on_inquire_Button_clicked();


}

更新数据从插入数据修改而来,主要是数据库的语句,修改之后就可以进行更新操作。
在这里插入图片描述

7、实现数据排序

在UI界面添加选项,在代码中直接调用即可。

void StudentDlg::on_sort_Button_clicked()
{
    QSqlTableModel *model;    //数据库模型
    model=new QSqlTableModel; //负责提取数据
    model->setTable("student");//选择要输出的表名称
    int index = ui->comboBox_sort->currentIndex();//获得升序降序索引
    int index1 = ui->comboBoxValue->currentIndex();//获得id成绩索引
    //QString StrIntN=QString::number(index);
    //QMessageBox::information(this, "comboBox", StrIntN, QMessageBox::Ok);
    //qDebug()<<StrIntN;
    if(index == 0)
    {
        if(index1 == 0)  model->setSort(0, Qt::AscendingOrder);
        else model->setSort(2, Qt::AscendingOrder);
    }
    else
    {
        if(index1 == 0)  model->setSort(0, Qt::DescendingOrder);
        else model->setSort(2, Qt::DescendingOrder);
    }

    model->select();
    ui->tableView->setModel(model);

    //参考:https://blog.csdn.net/qq_37529913/article/details/109766009
    //参考:https://blog.csdn.net/qq_29406323/article/details/81355149
}

本文在Win11英文版系统下,汉子显示不是太好,在中文版系统下会好很多,关于分辨率缩放这些,会在其他文章中进一步阐述。
面向百度的编程,形式上可能有些散乱,希望能有大佬指导一下,源码完全免费提供。

一个自学QT的小白

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值