Qt C/C++编程小案例(1)Sqlite数据库操作之学生选课管理系统

Qt C/C++编程小案例(1)Sqlite数据库操作之学生选课管理系统

提示:若积分太高,就私聊或者评论,我去降低,谢谢大家支持

ps:在这篇你能学到:
01.Qt操作Sqlite数据库
02.点击获取每行View里面的数据
03.view里面的数据转Excel表格
04.了解窗口之间的函数传递

1.视频演示地址:

Qt C++界面化 sqlite数据库的学生选课系统

2.案例需求:
2.1 基本要求:
课程信息包括:课程编号、课程名称、任课教师、学分、课程性质、开课院系等。
2.2 功能要求:
1)能够对课程信息进行输入、修改、删除操作;
2)按给定的条件(编号、名称、任课教师、开课院系等)查询课程信息;
3)以文件形式保存相关信息,可以读取默认文件中的信息进行查询等操作。

3.需求分析:
3.1根据需求我们可以选择3个方案,分别是使用SQL数据库、Sqlite数据库以及Excel表格。
1)可以使用电脑安装的SQL Server 2008 进行数据的存储,可以直接使用Qt直接操作sql的各类功能。
2)使用Qt平台自带的Sqlite直接进行编程,操作简单。
3)利用Qt使用Excel进行数据的存储。
在以上选择中我使用了Sqlite数据库编程,因为是Qt平台支持的Sqlite相对于其他两种较为简单,在测试数据库时,可使用Navicat Premium 15来进行本地数据库正确性的测试,如图:
Navicat Premium 15测试数据库
剩下的就是对数据库进行增、删、查、改操作。

4.功能源代码解析:

//需要用到的头文件
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlQueryModel>
//变量声明
QSqlDatabase db;//建立和qt和数据库连接
QSqlQueryModel model;//保存和遍历select结果
QString tableName = "qTableInfo";//添加表格名称

//1.建立数据库
//建立和SQlite QSQLITE数据库连接
db = QSqlDatabase::addDatabase("QSQLITE");
//设置数据库文件的名称
db.setDatabaseName("schoolTestDB.db");
//打开数据库
if(db.open() == false){

    QMessageBox::critical(this,"DataError",
                          db.lastError().text());
}
else {
}

//2.构建数据表
//构建创建表的SQL语句
QString createSql =
            QString("CREATE TABLE %1(\
                '课程编号' INT PRIMARY KEY NOT NULL,\
                '课程名称' TEXT NOT NULL,\
                '任课教师' TEXT NOT NULL,\
                '学分' REAL NOT NULL,\
                '课程性质' TEXT NOT NULL,\
                '开课院系' TEXT NOT NULL)").arg(tableName);
     QSqlQuery query;
     query.exec(createSql);//用来提交数据给数据库创建表


//3.数据库查询 全局 查
//查询表
QString str = QString("SELECT * FROM %1").arg(tableName);
    model.setQuery(str);
    ui->sqlite_View->setModel(&model);//用来在ui界面显示数据库查询到的所有数据

//4.数据库增加数据 增
//添加数据
QSqlQuery query;
    //获取课程编号
    int cNum = ui->cNum_Edit->text().toInt();
    //获取课程名
    QString cName = ui->cName_Edit->text();
    //获取老师姓名
    QString tName = ui->tName_Edit->text();
    //获取学分
    double score = ui->scoreEdit->text().toDouble();

    //课程性质
    QString cNature = ui -> cb_cNature -> currentText();

    //获取开课院系
    QString schoolName = ui->school_cmb->currentText();

    //构造sql语句
    QString insertSql = QString(
        "INSERT INTO %1 VALUES(%2,'%3','%4',%5,'%6','%7');"
                ).arg(tableName).arg(cNum).arg(cName).arg(tName).arg(score).arg(cNature).arg(schoolName);
    //执行sql语句
    query.exec(insertSql);
//    commit 提交交事务 添加数据库数据必须使用commit 否则会出现添失效
    query.exec("commit");

//5.数据库删除语句 删
//数据库删除数据
QSqlQuery query;
    //    注意数据库操作时符号很重要,例如双引号变单引号就不行
    //这里疑问keyId怎么获取,赋予view点击事件,当点击对应表格数据时就可以得到该行的全部数据
        QString dropRowId = QString("delete from qTableInfo where 课程编号 = %1").arg(keyId);
        //执行sql语句
        query.exec(dropRowId);


//数据库模糊查询 模糊 查
//数据库模糊查询
QString selectInfo = QString("SELECT * FROM %1 WHERE %2 LIKE '%%3%'")
            .arg(tableName).arg(columnName).arg(serachKey);
            //%  % 模糊查询
    model.setQuery(selectInfo);
    ui->cQueryView->setModel(&model);//回显到view页面

//6.数据库改数据 改
//修改数据库信息 主键 根据主键来修改
QSqlQuery query;
//    任课老师
    QString tName = ui->tName_Edit->text();
//    学分
    double score = ui->scoreEdit->text().toDouble();
//    课程名称
    QString cName = ui->cName_Edit->text();
//    课程性质
    QString cNature = ui->cb_cNature->currentText();
//    学校
    QString scholl = ui->school_cmb->currentText();

    //构造sql语句
    QString updatatSql = QString(
        "UPDATE %1 SET 课程名称 = '%2', 任课教师 = '%3', 学分 = %4, 课程性质 = '%5', 开课院系 = '%6' WHERE 课程编号 = %7"
                ).arg(tableName).arg(cName).arg(tName).arg(score).arg(cNature).arg(scholl).arg(sqlIdInfo);
    //执行sql语句
    query.exec(updatatSql);
    //疑问 怎么点击后把一个窗口的数据带到另一个窗口
    //解答 可以使用信号与槽来实现也可以通过全局变量来传递,这里选择全局变量

5.view数据怎么保存为Excel表格:
这里需要exportexcelobject.c和exportexcelobject.h文件加入工程才可以操作。
源码解析(这段代码为网上修改 不能保存第一行数据原因不知 有小伙伴知道的记得私聊或者评论):

//    获取弹出框输入文件名
    QString fileName = QFileDialog::getSaveFileName(this, tr("Excel file"), qApp->applicationDirPath (),
                                                    tr("Excel Files (*.xls)"));
    if (fileName.isEmpty())
        return;
//                            文件名,创建后的名字,数据源
    ExportExcelObject obj(fileName, "infoData", ui->InfoView);

//这里有疑问,不能保存第一行数据原因不知 有小伙伴知道的记得私聊或者评论
//    obj.addField(0, "课程编号", "char(20)");
    obj.addField(1, "课程名称", "char(20)");
    obj.addField(2, "任课老师", "char(20)");

    obj.addField(3, "学分", "char(20)");
    obj.addField(4, "课程性质", "char(20)");
    obj.addField(5, "开课院系", "char(20)");

//    设置进度条
    ui->progressBar->setValue(0);
    ui->progressBar->setMaximum(ui->InfoView->model()->rowCount());

//    监听进度条变化
    connect(&obj, SIGNAL(exportedRowCount(int)), ui->progressBar, SLOT(setValue(int)));
//    获取写入数据条数
    int retVal = obj.export2Excel();
    if( retVal > 0)
    {
        QMessageBox::information(this, tr("Done"),
                                 QString(tr("%1 records exported!")).arg(retVal)
                                 );
    }

以上便是Qt对数据库Sqlite 增、删、查、改的基本操作以及对数据存储Excel的转换操作,有疑问的可以下载源码来进行查看。
源码地址:https://download.youkuaiyun.com/download/qq_43122582/21064541

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别打落了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值