您的位置:首页 > 编程语言 > Qt开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sqlite数据库
相关文章推荐