用QT+MySQL编写图书管理系统(二)——QT显示数据库数据+图书/用户的增删改查

6 篇文章 2 订阅

图书管理系统(二)QT显示数据库数据+图书/用户的增删改查

本项目以及配套数据库已经上传到CSDN,大家可根据需要下载:

  1. 项目
    https://download.csdn.net/download/qq_41544842/14934412
  2. 数据库
    https://download.csdn.net/download/qq_41544842/14934435

界面参考

界面中用到了Tab Widget 和Group Box(方便将查询那一坨作为整体一起移动),Tab Widget中放入TableView组件。

!!!注意,界面上的“确认添加”,“提交修改”按钮并非必需,只有将model的保存策略(下文代码中将提到)设置为手动提交时,才需要添加这些按钮。

显示数据库表格

通过使用QSqlTableModel类,可以省略一些SQL语言,十分简便地操作数据库。在下面的增删改查中,以books表为例子讲解,users表的操作同理。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle(QStringLiteral("多功能书籍管理系统"));
    
    model = new QSqlTableModel(this);//这里记得在对应的头文件中进行声明
    model->setTable("books");//显示数据库中的books表
    //model->setEditStrategy(QSqlTableModel::OnManualSubmit);//设置保存策略为手动提交
    model->select();
    
    model2 = new QSqlTableModel(this);
    model2->setTable("users");
    //model2->setEditStrategy(QSqlTableModel::OnManualSubmit);//设置保存策略为手动提交
    model2->select();
    setTitle();
}

void MainWindow::setTitle()
{//添加表格的标题
    model->setHeaderData(0,Qt::Horizontal, "序号");
    model->setHeaderData(1,Qt::Horizontal, "书籍名称");
    model->setHeaderData(2,Qt::Horizontal, "书籍作者");
    model->setHeaderData(3,Qt::Horizontal, "书籍类别");
    model->setHeaderData(4,Qt::Horizontal, "书籍出版时间");
    model->setHeaderData(5,Qt::Horizontal, "书籍出版社");
    model->setHeaderData(6,Qt::Horizontal, "书籍摘要");
    model->setHeaderData(7,Qt::Horizontal, "书籍借还状态");
    
    model2->setHeaderData(0,Qt::Horizontal, "序号");
    model2->setHeaderData(1,Qt::Horizontal, "用户证号");
    model2->setHeaderData(2,Qt::Horizontal, "用户密码");
    model2->setHeaderData(3,Qt::Horizontal, "用户姓名");
    model2->setHeaderData(4,Qt::Horizontal, "用户性别");
    model2->setHeaderData(5,Qt::Horizontal, "用户学院");
    model2->setHeaderData(6,Qt::Horizontal, "用户年级");
    model2->setHeaderData(7,Qt::Horizontal, "用户警告状态");
}

void MainWindow::on_addButton_clicked()//对应按钮“添加记录”
{
//在界面表格中添加了一条空行
//当没有设置保存策略为手动提交时,在表格中直接输入数据后打回车即可完成“增”,这时候查看数据库,发现已经新增了一条数据
    int rowNum = model->rowCount();
    model->insertRows(rowNum,1);
}

void MainWindow::on_checkaddButton_clicked()//对应按钮“确认添加”
{//设置保存策略为手动提交后,需要再添加这个按钮,进行下面的操作,才能将改变提交到数据库,否则,数据库不会做出任何改变
    int rowNum = model->rowCount();
    model->setData(model->index(rowNum,0),rowNum+1);
    if(model->submitAll()){
        model->database().commit();
        QMessageBox::information(NULL,"添加成功","添加成功!");
    }
    else{
        model->database().rollback();
        QMessageBox::warning(this, tr("数据库错误"),
                             tr("数据库错误!"));
    }
}

void MainWindow::on_deleteButton_clicked()
{
    int curRow = ui->tableView->currentIndex().row();
    QString status=model->data(model->index(curRow,7)).toString();//直接获取表格选中行中的status(第7列)
    if(status=="未借出"){//注意在删除书籍时还需要判断书籍是否借出,只有未借出的书籍才能在数据库中进行删除
        model->removeRow(curRow);//删除选中行
        int ok = QMessageBox::warning(this,tr("删除当前行!"),
                                      tr("你确定删除当前行吗? "),QMessageBox::Yes, QMessageBox::No);
        if(ok == QMessageBox::No)
        {
            model->revertAll();//回滚操作,不会删除数据
        } else {
            if(model->submitAll()){//保存所有更改
                QMessageBox::information(this, "删除成功","删除成功");
            }
            else{
                QMessageBox::warning(this, tr("数据库错误"),tr("数据库错误!"));
            }
        }
    }
    else{
        QMessageBox::warning(NULL,"删除失败","该书籍已被借出,不能删除!");
    }
}

void MainWindow::on_updateButton_clicked()
{//当没有设置保存策略为手动提交时,在表格中直接修改数据后打回车即可完成“改”,这时候查看数据库,发现数据已经被修改,这一坨代码根本不用写。
//设置保存策略为手动提交后,需要再添加“提交修改”按钮,进行下面的操作,才能将改变提交到数据库,否则,数据库不会做出任何改变
    model->database().transaction();
    if(model->submitAll()){
        model->database().commit();
        QMessageBox::information(NULL,"修改成功","修改成功!");
    }
    else{
        model->database().rollback();
        QMessageBox::warning(this, tr("数据库错误"),
                             tr("数据库错误!"));
    }
}

void MainWindow::on_searshButton_clicked()
{
    QString name = ui->lineEdit_7->text();
    QString author=ui->lineEdit_8->text();
    QSqlQuery query;//复习:一个操作数据库的工具
    int count=0,count2=0;
    //判断输入情况,是否为空
    if(name.length()!=0&&author.length()==0){
    //采用的模糊查询,只要结果包含输入,就会被查出来
        model->setFilter(QString("name like '%%1%'").arg(name));//一个舍去了“select”关键词的筛选函数
        model->select();
        QString sql=QString("select * from books where name like '%%1%'").arg(name);//复习:写出SQL语句
        query.exec(sql);//复习:执行这条SQL语句
        while(query.next())//复习:循环查询结果集,进行一系列操作
        {
            count++;//对查询结果计数
            if(query.value(7).toString()=="未借出"){
                count2++;//对在馆数量计数
            }

        }
        //这里要进行类型的转换,把int转化为QString,因为label\lineEdit这种都默认显示QString类型的数据
        QString str_count=QString::number(count);
        QString str_count2=QString::number(count2);
        ui->label_4->setText(str_count);
        ui->label_5->setText(str_count2);
    }else if(author.length()!=0&&name.length()==0){
    //以下同理
        model->setFilter(QString("author like '%%2%'").arg(author));
        model->select();
        QString str_count=QString::number(count);
        QString str_count2=QString::number(count2);
        ui->label_4->setText(str_count);
        ui->label_5->setText(str_count2);
    }else if(name.length()!=0&&author.length()!=0){
        model->setFilter(QString("name like '%%1%' && author like '%%2%'").arg(name).arg(author));
        model->select();
        QString sql=QString("select * from books where name like '%%1%'&& author like '%%2%'").arg(name).arg(author);
        query.exec(sql);
        while(query.next())
        {
            count++;
            if(query.value(7).toString()=="未借出"){
                count2++;
            }

        }
        QString str_count=QString::number(count);
        QString str_count2=QString::number(count2);
        ui->label_4->setText(str_count);
        ui->label_5->setText(str_count2);
    }
    else{
        QMessageBox::warning(this, tr("Warning"),tr("不能两者都为空") );
    }
}

刷新

void MainWindow::on_showallButton_clicked()
{//刷新就是把表格重新显示一遍
    model->setTable("books");
    setTitle();
    model->select();
}

至此,我们就实现了使用QT+MySQL对数据库的数据进行增删改查。下一章介绍用户借书与还书。有任何问题欢迎评论~ 如果这篇文章有帮你的话不妨点个赞~

  • 15
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值