赞
踩
通过使用Qt中的数据库,实现对学生成绩的管理,包括成绩的增删改查以及排序等操作。
StudentSystem.pro
QT += sql // 与数据库相关的模块
studentSystem.h 头文件
- #ifndef STUDENTDIALOG_H
- #define STUDENTDIALOG_H
-
- #include <QDialog>
- #include <QSqlDatabase> // 管理数据库连接的类
- #include <QSqlQuery> // 执行SQL查询的类
- #include <QSqlQueryModel> // 在Qt模型/视图框架中显示SQL查询结果的类
- #include <QSqlError> // 于处理SQL相关错误的类
- #include <QDebug>
- #include <QMessageBox>
- #include <QFile> // 提供了对文件的读取和写入操作
-
-
- namespace Ui {a
- class StudentDialog;
- }
-
- class StudentDialog : public QDialog
- {
- Q_OBJECT
-
- public:
- explicit StudentDialog(QWidget *parent = 0);
- ~StudentDialog();
-
- private:
- // 创建数据库
- void createDB();
-
- // 创建数据表
- void createTable();
-
- // 查询
- void queryTable();
-
- private slots:
- // 插入按钮对应的槽函数
- void on_insertButton_clicked();
- // 删除按钮对应的槽函数
- void on_deleteButton_clicked();
- // 修改按钮对应的槽函数
- void on_updateButton_clicked();
- // 排序按钮对应的槽函数
- void on_sortButton_clicked();
-
-
- private:
- Ui::StudentDialog *ui;
-
- QSqlDatabase db; // 建立Qt和数据库链接
- QSqlQueryModel model ; // 保存查询结果集
- };
-
- #endif // STUDENTDIALOG_H
studentSystem.h 源文件
- #include "studentdialog.h"
- #include "ui_studentdialog.h"
-
- StudentDialog::StudentDialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::StudentDialog)
- {
- ui->setupUi(this);
-
- createDB();
-
- createTable();
-
- queryTable();
-
- }
-
- StudentDialog::~StudentDialog()
- {
- delete ui;
- }
-
- // 创建数据库
- void StudentDialog::createDB()
- {
- // 检查数据库文件是否已经存在
- if (QFile::exists("student.db"))
- {
- // 数据库文件已经存在,直接打开
- db = QSqlDatabase::addDatabase("QSQLITE"); // 添加数据库驱动库
- db.setDatabaseName("student.db"); // 设置数据库名字(文件名)
- if (db.open())
- {
- qDebug() << "打开数据库成功!";
- }
- else
- {
- qDebug() << "打开数据库失败!";
- }
- }
- else
- {
- // 数据库文件不存在,创建并打开
- db = QSqlDatabase::addDatabase("QSQLITE"); // 添加数据库驱动库
- db.setDatabaseName("student.db"); // 设置数据库名字(文件名)
- if (db.open())
- {
- qDebug() << "创建/打开数据库成功!";
- }
- else
- {
- qDebug() << "创建/打开数据库失败!";
- }
- }
-
- }
-
-
- // 创建数据表
- void StudentDialog::createTable()
- {
- QSqlQuery query;
- QString selectsql = QString("select * from sqlite_master where name='student'"); //是否已经存在表
- query.exec(selectsql);
- if(query.next())
- {
- qDebug() << "数据表已经存在!";
- }
- else
- {
- QString str = QString("CREATE TABLE student ("
- "id INT PRIMARY KEY NOT NULL,"
- "name TEXT NOT NULL,"
- "score REAL NOT NULL)");
-
- // 判断表是否创建成功
- if(query.exec(str) == false)
- {
- qDebug() << str ;
- }
- else
- {
- qDebug() << "创建数据表成功!";
- }
- }
-
- }
-
-
- // 查询
- void StudentDialog::queryTable()
- {
- QString str = QString("SELECT * FROM student;");
- if(str == "")
- {
- qDebug() << "表中没有任何的数据";
- }
- else
- {
- model.setQuery(str);
- ui->tableView->setModel(&model);
- }
- }
-
-
- // 插入按钮对应的槽函数
- void StudentDialog::on_insertButton_clicked()
- {
- QSqlQuery query;
- int id = ui->idEdit->text().toInt();
- if(id <= 0)
- {
- QMessageBox::critical(this,"Error","ID输入错误!(id > 0)");
- return;
- }
-
- QString name = ui->nameEdit->text();
- if(name == "")
- {
- QMessageBox::critical(this,"Error","姓名输入错误!");
- return;
- }
-
- double score = ui->scoreEdit->text().toDouble();
- if(score < 0 || score > 100)
- {
- QMessageBox::critical(this,"Error","成绩输入错误!(0-100)");
- return;
- }
- QString sql = QString("SELECT * from student WHERE id=%1;").arg(id);
- query.prepare(sql);
- query.bindValue(":id", id);
- if (query.exec() && query.next())
- {
- QMessageBox::critical(this, "Error", "该用户id已经存在");
- return ; // 存在该记录
- }
- QString str = QString("INSERT INTO student VALUES(%1,'%2', %3);"
- ).arg(id).arg(name).arg(score);
-
- if(query.exec(str) == false)
- {
- qDebug() << str ;
- }
- else
- {
- queryTable();
- QMessageBox::information(this, "success","插入操作成功!" ) ;
- // qDebug() << "插入数据成功!";
-
- }
- }
-
- // 删除按钮对应的槽函数: 根据ID删除一条数据
- void StudentDialog::on_deleteButton_clicked()
- {
- QSqlQuery query;
- int id = ui->idEdit->text().toInt();
- if(id <= 0)
- {
- QMessageBox::critical(this, "error","请输入正确的id!" ) ;
- return;
- }
-
- QString sql = QString("SELECT * from student WHERE id=%1;").arg(id);
- query.prepare(sql);
- query.bindValue(":id", id);
- if (query.exec() && query.next())
- {
- QString str = QString("DELETE FROM student WHERE id = %1;").arg(id);
- if(QMessageBox::question(this,"删除","确定要删除?",
- QMessageBox::Yes|QMessageBox::No) == QMessageBox::No)
- {
- return;
- }
-
- if(query.exec(str) == false)
- {
- qDebug() << str ;
- QMessageBox::critical(this, "Error", "删除失败");
- }
- else
- {
- queryTable();
- QMessageBox::information(this, "success","删除操作成功!" ) ;
- // qDebug() << "删除操作成功";
-
- }
-
- }
- else
- {
- QMessageBox::critical(this, "Error", "该用户id不存在");
- return ; // 不存在该记录
- }
- }
-
- // 修改按钮对应的槽函数 : 根据ID修改成绩
- void StudentDialog::on_updateButton_clicked()
- {
- QSqlQuery query;
- int id = ui->idEdit->text().toInt();
- if(id == 0)
- {
- QMessageBox::critical(this, "error","请输入正确的id!" ) ;
- return;
- // qDebug() << "请输入正确的id";
- }
- double score = ui->scoreEdit->text().toDouble();
- if(score < 0 || score > 100)
- {
- QMessageBox::critical(this, "error","修改的成绩有误!(0-100)" ) ;
- return;
- // qDebug() << "修改的成绩有误!";
- }
-
- QString sql = QString("SELECT * from student WHERE id=%1;").arg(id);
- query.prepare(sql);
- query.bindValue(":id", id);
- if (query.exec() && query.next())
- {
-
- QString str = QString("UPDATE student SET score=%1 WHERE id=%2;"
- ).arg(score).arg(id);
- if(query.exec(str)==false)
- {
- qDebug() << str;
- QMessageBox::critical(this, "Error", "修改失败");
- }
- else
- {
- queryTable();
- QMessageBox::information(this, "success","修改操作成功!" ) ;
- // qDebug() << "修改操作成功!";
-
- }
- }
- else
- {
- QMessageBox::critical(this, "Error", "该用户id不存在");
- return ; // 不存在该记录
- }
- }
-
- // 排序按钮对应的槽函数
- void StudentDialog::on_sortButton_clicked()
- {
- // 获取排序列名
- QString value = ui->valueComboBox->currentText();
-
- // 获取排序方式
- QString condition;
- if(ui->condComboBox->currentIndex() == 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);
-
- QMessageBox::information(this, "success","排序成功!" ) ;
-
- }
对学生成绩进行查询 、添加、删除、修改以及排序等。有兴趣的还可以添加其他的功能。
有疑问或者有更好的项目,小伙伴们可以留言一起交流讨论!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。