二、学生成绩管理系统(简版)
简介:将SQLite数据库和QT界面结合,完成学生成绩的增删改已经排序功能
步骤:
-
绘制界面
主要功能:插入、删除、修改、以及排序(根据不同要求进行排序); -
完成相应的构件命名,在编辑代码阶段不至于太混乱
-
数据库的建立
-
创建数据库:
db = QSqlDatabase::addDatabase(“QSQLITE”);
db.setDatabaseName(“menu.db”);
if(db.open() == false){
qDebug() << db.lastError();
} -
创建表格
void SqliteDialog::createTable(void)
{
QSqlQuery query;
QString str = QString(
“CREATE TABLE student(”
“id INT PRIMARY KEY,”
“name TEXT NOT NULL,”
“score REAL NOT NULL)”);
query.exec(str);
} -
显示表格内容
void SqliteDialog::queryTable(void)
{
QString str = QString(
“SELECT * FROM student”);
model.setQuery(str);
ui->tableView->setModel(&model);
}
-
-
编写相应的槽函数:
- insertButton:(完成对数据的插入,利用QT的类,对SQL语句进行翻译,然后执行)
void SqliteDialog::on_insertButton_clicked()
{
QSqlQuery query;
int id = ui->idEdit->text().toInt();
QString name = ui->nameEdit->text();
double score = ui->scoreEdit->text().toDouble();
QString str = QString (
“INSERT INTO student VALUES(%1, ‘%2’, %3)”).arg(id).arg(name).arg(score);
query.exec(str);
queryTable();
} - deleteButton:(完成对数据的删除)
void SqliteDialog::on_deleteButton_clicked()
{
QSqlQuery query;
int id = ui->idEdit->text().toInt();
QString str = QString (
“DELETE FROM student WHERE id = %1”).arg(id);
query.exec(str);
queryTable();
} - updateButton:(完成对数据的修改)
void SqliteDialog::on_updateButton_clicked()
{
QSqlQuery query;
int id = ui->idEdit->text().toInt();
double score = ui->scoreEdit->text().toDouble();
QString str = QString (
“UPDATE student SET score = %1 WHERE id = %2”).arg(score).arg(id);
query.exec(str);
queryTable();
} - sortButton:(完成对数据的排序)
void SqliteDialog::on_sortButton_clicked()
{
QString value = ui->valueCombox->currentText();
QString condition;
if(ui->condCombox->currentText() == 0){
condition = “ASC”;
}
else{
condition = “DESC”;
}
QString str = QString (
"SELECT * FROM student "
“ORDER BY %1 %2”).arg(value).arg(condition);
model.setQuery(str);
ui->tableView->setModel(&model);
}
- insertButton:(完成对数据的插入,利用QT的类,对SQL语句进行翻译,然后执行)
-
总结:
①在QT中,由于不能直接使用SQL语句对数据库进行操作,所以需要QT封装的类,讲SQL语句转换成能够执行的语句,QSqlQuery。
②在每次对数据进行操作之后,要将操作后的界面重现显示,这个不能忘记。