一、功能设计
1.添加学生信息:
用户通过输入框输入学生的学号、姓名、成绩。
点击“添加”按钮,系统会检查输入是否完整,不允许任何字段为空。
完整的学生信息将被添加到系统中,并显示在表格中以供查看。
2.删除学生信息:
用户输入需要删除的学生的学号。
点击“删除”按钮,系统将查找该学生的信息。
如果找到,学生信息将被从系统中删除,并更新表格显示。
3.修改学生信息:
用户首先需要输入学生的学号作为搜索关键词。
查询到学生信息后回显输入框,在其他输入框中输入需要修改的新信息。
点击“修改”按钮后,如果找到该学生,其信息将根据输入更新。
表格将刷新以显示更新后的信息。
4.查询学生信息:
用户可以选择姓名或者学号任一项作为查询条件,然后输入查询信息。
点击“查询”按钮后,系统将显示所有匹配的学生信息。
查询结果将在表格中显示,不匹配的信息不会显示。
5.浏览所有学生信息:
点击“浏览”按钮,系统将展示所有已存储的学生信息。
无论之前进行了何种查询或操作,显示结果都包括所有学生信息。
二、功能展示
1.添加学生信息:
2.删除学生信息:
3.修改学生信息:
4.查询学生信息:
5.浏览所有学生信息:
三、代码分析
1.目录结构
2.数据库表
3.关键代码实现
#include "widget.h"
#include "ui_widget.h"
//构造函数
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//连接数据库
db=QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("test");
db.setHostName("127.0.0.1");
db.setUserName("root");
db.setPassword("12345678");
db.setConnectOptions("MYSQL_OPT_RECONNECT=TRUE;MYSQL_OPT_USE_RESULT=FALSE;CHARSET=utf8");
if(db.open())
{
this->on_queryBtn_clicked();
}
else
{
QMessageBox::information(this,"提示","连接失败");
}
}
//析构
Widget::~Widget()
{
delete ui;
}
//刷新数据
void Widget::refreshData()
{
this->on_queryBtn_clicked();
}
void Widget::refreshQueryData(QStandardItemModel *model)
{
ui->tableView->setModel(model);
}
//添加数据
void Widget::on_addBtn_clicked()
{
Add* addInfo=new Add();
addInfo->show();
connect(addInfo,&Add::addSuccess,this,&Widget::refreshData);
}
//浏览数据
void Widget::on_queryBtn_clicked()
{
// 创建模型
QStandardItemModel *model = new QStandardItemModel(0, 3);
model->setHeaderData(0, Qt::Horizontal, "学号");
model->setHeaderData(1, Qt::Horizontal, "姓名");
model->setHeaderData(2, Qt::Horizontal, "成绩");
// 执行查询
QSqlQuery query(db);
QString sql="SELECT id, name, score FROM score";
if (query.exec(sql))
{
while (query.next())
{
int id = query.value(0).toInt();
QString name = query.value(1).toString();
float score = query.value(2).toFloat();
// 创建项并添加到模型
QStandardItem *idItem = new QStandardItem(QString::number(id));
QStandardItem *nameItem = new QStandardItem(name);
QStandardItem *scoreItem = new QStandardItem(QString::number(score));
// 将项添加到行中
QList<QStandardItem*> row;
row << idItem << nameItem << scoreItem;
model->appendRow(row);
}
} else {
QMessageBox::information(this, "错误", "查询失败");
}
// 设置模型到QTableView
ui->tableView->setModel(model);
}
//删除数据
void Widget::on_deleteBtn_clicked()
{
Delete* deleteInfo=new Delete();
deleteInfo->show();
connect(deleteInfo, &Delete::dataDeletedSuccessfully, this, &Widget::refreshData);
}
//修改数据
void Widget::on_updateBtn_clicked()
{
Update* updateInfo=new Update();
updateInfo->show();
connect(updateInfo,&Update::updateSuccess,this,&Widget::refreshData);
}
//查询数据
void Widget::on_selectBtn_clicked()
{
Select* selectInfo=new Select();
selectInfo->show();
connect(selectInfo,&Select::selectSuccess,this,&Widget::refreshQueryData);
}