使用Qt数据库,实现简单的学生成绩管理系统

        通过使用Qt中的数据库,实现对学生成绩的管理,包括成绩的增删改查以及排序等操作。

1、项目框架

2、UI界面设计

3、相关运行代码

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","排序成功!" ) ;

}

4、运行结果

        对学生成绩进行查询 、添加、删除、修改以及排序等。有兴趣的还可以添加其他的功能。

未完待续


有疑问或者有更好的项目,小伙伴们可以留言一起交流讨论!!!

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值