Qt数据库使用之学生管理系统

    xiaoxiao2021-04-12  41

         数据库的使用主要是实现增,删,查,改,下面通过设计一个学生信息管理系统,来实现了这些操作。

    1.新建工程,选择应用程序,Qt WidgetsApplication ,类名可不更改Widget,基类为Widget。

    2.在UI中拖入控件,4个label,1个combox,4个lineedit,5个pushbutton以及一个tableView,命名如下:

    姓名输入框

    name_lineEdit

    性别选择框

    sex_comboBox

    学号输入框

    number_lineEdit

    保存按钮

    save_pushButton

    修改按钮

    change_pushButton

    查找输入框

    find_lineEdit

    查找按钮

    find_pushButton

    删除输入框

    delete_lineEdit

    删除按钮

    delete_pushButton

    创建/打开数据库按钮

    creat_sql_Button

    表格显示按钮

    tableView

    添加完成后,进行适当的布局,UI如下:

    3.首先进行创建数据库的编写

     选中创建打开数据库按钮,转到槽函数,如下:

    void Widget::on_creat_sql_Button_clicked() { db=QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("student.db"); bool ok=db.open(); if(ok) QMessageBox::information(this,"Information","open sucessfully"); else QMessageBox::information(this,"Information","open fail"); query=new QSqlQuery; //创建表 bool k=query->exec("create table student(name vchar primary key,sex vchar ,number vchar)"); show_view(); } 需要在头文件中先声明QSqlDatabase db; QSqlQuery *query; 第一句是添加QSQLITE数据库,第二句是命名该数据库名为student.db。接下来判断数据库是否打开,如果打开,则显示打开成功,否则打开失败。 接下来是创建一张表,表的名字也设置成了student,同时这张表中有namesexnumber,数据类型都为vchar    数据库跟表格都创建好了后,需要显示在UItableView上,调用show_view()函数。其中这个函数的定义如下: void Widget::show_view() { model->setQuery("select * from student"); model->setHeaderData(0,Qt::Horizontal,tr("Name")); model->setHeaderData(1,Qt::Horizontal,tr("Sex")); model->setHeaderData(2,Qt::Horizontal,tr("Number")); ui->tableView->setModel(model); }

    首先全局声明QSqlQueryModel*model,然后在构造函数中申请内存。第一句是选中需要的表格,也就是student表格,然后将表格分为三列,分别插入到model中,将model显示在tableView上。

    4.保存输入的数据

     选中UI界面上的保存按钮,转到槽函数,代码如下:

    void Widget::on_save_pushButton_clicked() { name=ui->name_lineEdit->text(); sex=ui->sex_comboBox->currentText(); number=ui->number_lineEdit->text(); if(name.isEmpty() || sex.isEmpty() || number.isEmpty()) { QMessageBox::warning(this,"Incomplete information","error"); return; } QString insert_buf; insert_buf=QObject::tr("insert into student values('%1','%2','%3')").arg(name,sex,number); bool ok=query->exec(insert_buf); show_view(); clear_focus(); }

    声明全局变量QStringname,sex,number,先通过这三个变量来获取输入框中的数据,再检测这三个输入框中的数据是否为空,如果为空,则报错信息不完整,请重新填写。如果正确,则执行保存操作。

    通过insertinto student来实现将数据插入到表格中去,再通过query-〉exec()来实现执行操作。数据写入数据库的表格之后,需要显示在UI的信息框内,调用show_View()再来显示整张表。

    函数clear_focus()是来实现将姓名,性别,学号输入框中的数据清空的操作,代码如下:

    void Widget::clear_focus() { ui->name_lineEdit->clear(); ui->number_lineEdit->clear(); ui->name_lineEdit->setFocus(); }

    5.查找需要的数据

     选中查找按钮,转到槽函数,代码如下:

    void Widget::on_find_pushButton_clicked() { find_buf=ui->find_lineEdit->text(); query->exec("select * from student"); bool ok=query->isActive(); while(query->next()) { QString ele0=query->value(0).toString(); QString ele1=query->value(1).toString(); QString ele2=query->value(2).toString(); if((ele0==find_buf) || (ele1==find_buf) || (ele2==find_buf)) { ui->name_lineEdit->setText(ele0); ui->sex_comboBox->setCurrentText(ele1); ui->number_lineEdit->setText(ele2); return; } } QMessageBox::information(this,"Not Find","No this record",QMessageBox::Ok); }

    首先定义一个变量来获取查找输入框内的数据,然后执行query->exec("select* from student")来选中需要操作的表格。通过while循环,来操作表格中的每一行数据。对每一行的数据进行如下的操作:读出该行的三个数据,并转换成字符串类型,将需要查找的字符与这三个字符进行比较,若与其中一个是相同的,则将该行数据显示在输入框内。如果查找完都没找到需要的数据,则报错没有找到。

    6.删除选中的数据。

     选中删除按钮,转到槽函数,代码如下:

    void Widget::on_delete_pushButton_clicked() { QString delete_buf; delete_buf=ui->delete_lineEdit->text(); query->exec("select * from student"); bool k=query->isActive(); QString insert_buf; while(query->next()) { QString ele0=query->value(0).toString(); QString ele1=query->value(1).toString(); QString ele2=query->value(2).toString(); if((ele0==delete_buf) || (ele1==delete_buf) || (ele2==delete_buf)) { if(ele0==delete_buf) { insert_buf=QObject::tr("delete from student where name='%1'").arg(delete_buf); } else if(ele0==delete_buf) { insert_buf=QObject::tr("delete from student where sex='%1'").arg(delete_buf); } else if(ele0==delete_buf) { insert_buf=QObject::tr("delete from student where number='%1'").arg(delete_buf); } bool ok=query->exec(insert_buf); if(ok) QMessageBox::information(this,"delete successfully","Ok",QMessageBox::Ok); else QMessageBox::information(this,"delete fail","Error",QMessageBox::Ok); show_view(); return; } } QMessageBox::information(this,"Delete Error","No this record",QMessageBox::Ok); }

    首先定义一个字符转变量,来接收删除编辑框内的数据。然后选中要操作的表格,原理基本同查找类似。找到需要删除的数据后,对其进行删除操作,

    insert_buf=QObject::tr("delete fromstudent where name='%1'").arg(delete_buf);删除完成后,调用show_view()函数,刷新显示。

    7.修改数据

       选中修改按钮,转到槽函数,代码如下:

    void Widget::on_change_pushButton_clicked() { ui->delete_lineEdit->setText(find_buf); on_delete_pushButton_clicked(); on_save_pushButton_clicked(); ui->delete_lineEdit->clear(); }

        修改操作可以分解为,先进行查找操作,即直接使用全局变量find_buf,即为要修改的关键字,对其进行查找后,信息会显示在姓名性别学号输入框内,可以对其进行编辑,同时调用删除函数,对之前的数据进行删除,再调用保存函数,对修改后的数据进行保存。

       完成上述后,编译,界面如下:

    转载请注明原文地址: https://ju.6miu.com/read-668142.html

    最新回复(0)