看了关于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的小白