Qt软件开发之sqlite数据库操作
2018-04-07 10:48
417 查看
这段时间接触Qt开发,做了一个简单的数字图书管理系统,最后有一点功能不是很完善,在这里把已经完成的功能设计作品分享给大家,喜欢的朋友可以体验一下。(文章末尾附有此设计的下载链接,包括工程文件和打包后的应用程序文件。)
先看一下总体的功能设计框图,其中红色字体标出的模块是没有完善的。“是否为管理员”这个步骤是通过判别输入的账号是否是特定的字符开头来认定该使用者是管理员,之所以产生这个想法,是因为想到一个学校应该有一个包含教职工和学生等的工号数据库,如果在注册时提醒注册者使用工号注册,并和数据库中的特定人员工号进行比较从而认定管理员。这里只是简单使用了这种思路,登陆者的账号前5个字符如果是“admin”,则密码和账号匹配的情况下进入管理员界面;其他账号进入用户界面。
工程经过打包过后成为可执行应用程序,运行软件,首先进入登录界面。登录界面有登录、注册、找回密码等按钮,触发按钮可以执行相应功能。登录界面、注册界面、找回密码界面分别如下图:
登录按钮触发事件的响应函数代码如下,matchFlag为用户名是否匹配标志,在登录对话框初始化时在用户表(表存在)中查找该用户信息,确认该用户是否为已注册用户。void LoginDialog::on_LoginBtn_clicked()
{
if(matchFlag==false)
{
//用户名错误
qDebug()<<"name invalid";
//建立消息对话框,提示用户
QMessageBox msgBox(this);
msgBox.setWindowTitle("Tips");
msgBox.setText("无效的用户名!");
msgBox.exec();
}
else
{
if(usr_passwd!=ui->pwd_lineEdit->text())
{
//密码错误
qDebug()<<"passwd not match";
QMessageBox msgBox(this);
msgBox.setWindowTitle("Tips");
msgBox.setText("密码错误!");
msgBox.exec();
}
else
{
//用户名和密码均正确
//判断该user是否是管理员
if(ui->id_lineEdit->text().left(5)=="admin")
{
qDebug()<<QString("输出:yes");
AccFlag=1;
}
if(ui->id_lineEdit->text().isEmpty())
{
qDebug()<<"Signal Fail.";
}
else
{
if(vv==0)
{
emit namesender(ui->id_lineEdit->text());
QDialog::accept();
qDebug()<<QString(ui->id_lineEdit->text())<<" Signal Success.";
vv++;
}
}
}
}
} 接下来是用户界面,相比于管理员界面,用户界面设计的不是很好。用户主窗口主要是通过和多个对话框交互然后完成相应功能的。
以修改个人信息为例,代码如下:
void Style1Dialog::on_pushButton_clicked()
{
qDebug()<<"style1_linedit: "<<ui->style1_lineEdit->text();
QSqlQuery sql_query2;
//更新数据
sql_query2.prepare(update_sql100);
sql_query2.bindValue(":truename",ui->style1_lineEdit->text().trimmed());
sql_query2.bindValue(":address", ui->addr_lineEdit->text().trimmed());
sql_query2.bindValue(":telephone",ui->tele_lineEdit_2->text().trimmed());
sql_query2.bindValue(":email",ui->email_lineEdit_3->text().trimmed());
sql_query2.bindValue(":name",QString(nameusrIndex10));
if(!sql_query2.exec())
{
qDebug()<<sql_query2.lastError();
}
else
{
qDebug()<<"chacter updated!";
}
}管理员界面的设计相对完善,点击“图书管理”按钮可以展开具体的功能模块按钮,以执行相应操作。sqlite数据库的各种操作,如增加、删除、更新、导出数据(全部显示、筛选显示)等都在这里体现。
根据筛选条件对数据表中的数据进行筛选,并通过tableview工具进行显示。这里以图书编号(data8)和图书名(data9)为筛选条件进行显示数据为例,代码如下:void MainWindow2::receiveIndex8(int data8, QString data9)
{
QSqlTableModel *model = new QSqlTableModel;
model->setTable("books");
model->setHeaderData(1, Qt::Horizontal, "图书编号");
model->setHeaderData(2, Qt::Horizontal, "图书名");
model->setHeaderData(3, Qt::Horizontal, "图书类别");
model->setHeaderData(4, Qt::Horizontal, "馆藏总量");
model->setHeaderData(5, Qt::Horizontal, "馆藏余量");
model->setHeaderData(6,Qt::Horizontal,"借阅者1");
model->setHeaderData(7,Qt::Horizontal,"归还时间");
model->setHeaderData(8,Qt::Horizontal,"借阅者2");
model->setHeaderData(9,Qt::Horizontal,"归还时间");
model->setHeaderData(10,Qt::Horizontal,"借阅者3");
model->setHeaderData(11,Qt::Horizontal,"归还时间");
model->setFilter(QObject::tr("book_id=%1 and book_name='%2'").arg(data8).arg(data9));
model->select();
ui->sqltableView->setModel(model);
ui->sqltableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->sqltableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->sqltableView->resizeColumnsToContents();
ui->sqltableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->sqltableView->setColumnHidden(0,true);
QHeaderView *header = ui->sqltableView->horizontalHeader();
header->setStretchLastSection(true);
ui->stackedWidget_2->setCurrentWidget(ui->page_4);
ui->sqltableView->setEnabled(true);
}以下是工程源码和打包应用程序的下载链接,感兴趣的朋友可以看一看:
https://download.csdn.net/download/qq_38189484/10330257
先看一下总体的功能设计框图,其中红色字体标出的模块是没有完善的。“是否为管理员”这个步骤是通过判别输入的账号是否是特定的字符开头来认定该使用者是管理员,之所以产生这个想法,是因为想到一个学校应该有一个包含教职工和学生等的工号数据库,如果在注册时提醒注册者使用工号注册,并和数据库中的特定人员工号进行比较从而认定管理员。这里只是简单使用了这种思路,登陆者的账号前5个字符如果是“admin”,则密码和账号匹配的情况下进入管理员界面;其他账号进入用户界面。
工程经过打包过后成为可执行应用程序,运行软件,首先进入登录界面。登录界面有登录、注册、找回密码等按钮,触发按钮可以执行相应功能。登录界面、注册界面、找回密码界面分别如下图:
登录按钮触发事件的响应函数代码如下,matchFlag为用户名是否匹配标志,在登录对话框初始化时在用户表(表存在)中查找该用户信息,确认该用户是否为已注册用户。void LoginDialog::on_LoginBtn_clicked()
{
if(matchFlag==false)
{
//用户名错误
qDebug()<<"name invalid";
//建立消息对话框,提示用户
QMessageBox msgBox(this);
msgBox.setWindowTitle("Tips");
msgBox.setText("无效的用户名!");
msgBox.exec();
}
else
{
if(usr_passwd!=ui->pwd_lineEdit->text())
{
//密码错误
qDebug()<<"passwd not match";
QMessageBox msgBox(this);
msgBox.setWindowTitle("Tips");
msgBox.setText("密码错误!");
msgBox.exec();
}
else
{
//用户名和密码均正确
//判断该user是否是管理员
if(ui->id_lineEdit->text().left(5)=="admin")
{
qDebug()<<QString("输出:yes");
AccFlag=1;
}
if(ui->id_lineEdit->text().isEmpty())
{
qDebug()<<"Signal Fail.";
}
else
{
if(vv==0)
{
emit namesender(ui->id_lineEdit->text());
QDialog::accept();
qDebug()<<QString(ui->id_lineEdit->text())<<" Signal Success.";
vv++;
}
}
}
}
} 接下来是用户界面,相比于管理员界面,用户界面设计的不是很好。用户主窗口主要是通过和多个对话框交互然后完成相应功能的。
以修改个人信息为例,代码如下:
void Style1Dialog::on_pushButton_clicked()
{
qDebug()<<"style1_linedit: "<<ui->style1_lineEdit->text();
QSqlQuery sql_query2;
//更新数据
sql_query2.prepare(update_sql100);
sql_query2.bindValue(":truename",ui->style1_lineEdit->text().trimmed());
sql_query2.bindValue(":address", ui->addr_lineEdit->text().trimmed());
sql_query2.bindValue(":telephone",ui->tele_lineEdit_2->text().trimmed());
sql_query2.bindValue(":email",ui->email_lineEdit_3->text().trimmed());
sql_query2.bindValue(":name",QString(nameusrIndex10));
if(!sql_query2.exec())
{
qDebug()<<sql_query2.lastError();
}
else
{
qDebug()<<"chacter updated!";
}
}管理员界面的设计相对完善,点击“图书管理”按钮可以展开具体的功能模块按钮,以执行相应操作。sqlite数据库的各种操作,如增加、删除、更新、导出数据(全部显示、筛选显示)等都在这里体现。
根据筛选条件对数据表中的数据进行筛选,并通过tableview工具进行显示。这里以图书编号(data8)和图书名(data9)为筛选条件进行显示数据为例,代码如下:void MainWindow2::receiveIndex8(int data8, QString data9)
{
QSqlTableModel *model = new QSqlTableModel;
model->setTable("books");
model->setHeaderData(1, Qt::Horizontal, "图书编号");
model->setHeaderData(2, Qt::Horizontal, "图书名");
model->setHeaderData(3, Qt::Horizontal, "图书类别");
model->setHeaderData(4, Qt::Horizontal, "馆藏总量");
model->setHeaderData(5, Qt::Horizontal, "馆藏余量");
model->setHeaderData(6,Qt::Horizontal,"借阅者1");
model->setHeaderData(7,Qt::Horizontal,"归还时间");
model->setHeaderData(8,Qt::Horizontal,"借阅者2");
model->setHeaderData(9,Qt::Horizontal,"归还时间");
model->setHeaderData(10,Qt::Horizontal,"借阅者3");
model->setHeaderData(11,Qt::Horizontal,"归还时间");
model->setFilter(QObject::tr("book_id=%1 and book_name='%2'").arg(data8).arg(data9));
model->select();
ui->sqltableView->setModel(model);
ui->sqltableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->sqltableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->sqltableView->resizeColumnsToContents();
ui->sqltableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->sqltableView->setColumnHidden(0,true);
QHeaderView *header = ui->sqltableView->horizontalHeader();
header->setStretchLastSection(true);
ui->stackedWidget_2->setCurrentWidget(ui->page_4);
ui->sqltableView->setEnabled(true);
}以下是工程源码和打包应用程序的下载链接,感兴趣的朋友可以看一看:
https://download.csdn.net/download/qq_38189484/10330257
相关文章推荐
- Qt的LGPL协议是否意味着可以自由用QT开发商业软件?
- QT开发(二十三)——软件开发流程
- 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
- 嵌入式软件开发-----Qt setPen()画笔函数的初步了解
- 安卓SQLite数据库操作,半小时开发新闻管理系统,纯干货
- zynq开发软件操作整体流程
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- Qt嵌入式软件开发----------QPaintEvent事件的相关理解
- C++--Qt软件开发--自定义信号槽
- QT 操作 sqlite数据库(一)-----网络常规代码
- Qt软件开发文档16---软件更新:写入程序版本信息并读取程序的版本号
- 让你提前知道软件开发(22):shell脚本文件操作
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- Android学习开发笔记之SQLite数据库操作
- Qt开发环境安装与软件下载
- C#软件开发实例.私人订制自己的屏幕截图工具(八)添加键盘操作截图的功能
- jfreechart,pdf生成组件iText,jasper report报表组件及POI操作excel等在企业软件开发中常遇到的第三方应用
- Afinal开发框架中的FinalDb操作sqlite数据库
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- AutoIt3开发的操作SQlite数据库的源码