首页 星座学科 基于Qt和SQLite的图书管理系统

基于Qt和SQLite的图书管理系统

  面对图书馆中越来越多的书籍和文献,管理员需要进行更严格的分类整理,借阅者也需要快速找到自己能够利用的资料。利用Qt和SQLite设计图书管理系统,系统主要分为图书管理和用户管理两部分,图书管理部分主要有增添和下架图书,查看和修改图书信息,对于用户管理部分有用户的登录密码和个人信息的设置与修改。该系统减少了人工操作,便于管理员提高工作效率更好的管理图书,也提高了图书馆资源的利用率。

  1.1使用人员

  图书管理系统主要为管理员和普通用户提供使用权限,普通用户可以浏览书籍的信息和借阅书籍。管理员权限分为两个方面,一方面对于图书馆中的书籍可以进行增添、删除和修改等操作,也可以进行书籍的借阅,另一个方面对于图书馆中的普通用户可以增加、删除和修改信息等操作。

  1.2系统功能

  图书管理系统是在Windows操作系统下,使用Qt开发平台和嵌入式数据库SQLite开发出来的系统,能完成基本的书籍的查询、增添、删除和展示功能。还对使用人员的权限进行区分。增添了对普通用户的增加、删除和修改功能。同时也增添了书籍借阅、超期提醒和历史记录展示的功能。系统也会对书籍的借阅情况展示。

  1.3开发环境

  图书馆管理系统是基于Qt和SQLite嵌入式数据库共同开发出来的。Qt支持PC和服务器的平台,包括Windows、Linux、macOS等,还支持移动和嵌入式操作系统,如iOS、Embedded、Linux、Android、WinRT等[1]。无需更改动或少许改动后在编译,就可以在不同平台上运行,而且支持传统C++中提供的所有功能。Qt提供了信号与槽机制,可以很好的降低耦合,提高代码的复用性[2]。

  SQLite是一个开源的嵌入式关系数据库,无需服务器和进行任何配置,所有的数据表、索引等数据库元素全部存储在单一的磁盘文件[3]。数据库文件可以在不同字节顺序的机器间自由地共享,支持多种开发语言,支持事件,不需要安装。SQLite无数据类型,任何类型的数据都可以保存到数据库中,依靠应用程序的控制确定输入和输出数据的类型[4]。

  2.系统模块划分

  根据现实中的实际需求和系统应该具有的功能进行分析,将图书馆管理系统主要划分为五大模块,第一个是登录界面,第二个是主界面,第三个是图书管理模块,第四个是图书借阅模块,第五个是用户管理模块。通过实现五个主要模块来达到用图书管理系统管理图书馆的目标。如图1所示。

  图1模块总体布局图

  2.1系统登录模块

  进入系统之前需要认证个人信息,用户需输入用户名和密码,两者不能为空,若输入错误系统会自动提醒,验证通过后,才可以进入系统。

  2.2系统主界面模块

  系统主界面分为两种,第一种是管理员界面,第二种是普通用户界面。两者的不同之处在于,管理员界面可以操作图书管理模块和用户管理模块,而普通用户界面只可以操作图书借阅模块。两者的共同之处为,界面会显示超过借阅期限30天的名单和借阅书籍统计的情况,管理员和普通用户都可以看到。如图2所示。

  图2系统主界面布局图

  2.3图书管理模块

  对于图书的管理只有管理员有权限进行操作,主要操作有:书籍的增加删除和书籍信息的修改。书籍的添加对新的书籍的基本信息进行入库登记包括书名、作者、出版社和出版日期等、书籍信息的修改书对书库中错误的书籍信息进行修改和书籍的删除对旧书的淘汰。如图3所示。

  图3图书管理模块布局图

  2.4图书借阅模块

  图书借阅模块主要分为三部分:书籍借阅、书籍归还和信息查询。书籍借阅界面用户可以根据书名、书号和作者任意一个进行查询,若查询成功界面会显示图书的基本信息、状态和被借次数,用户需要输入书号、书名和作者才可以来借阅。书籍归还界面会显示当前用户的借阅信息包括:书号、书名、借书人、借阅时间和归还时间,用户需要输入书号来进行还书操作。信息查询界面主要显示当前用户所借阅的书籍信息和本人信息主要包括书号、书名、借书人、借书时间、归还时间、是否超期和本人电话。在信息查询界面中系统会自动根据用户名进行查询,完整的显示当前用户的借阅历史纪录。如图4所示。

  图4图书借阅模块布局图

  2.5用户管理模块

  用户管理界面为管理员可以操作的界面,该界面主要有三大部分组成:用户注册、用户删除和信息修改。普通用户不具有注册账户的权限,只能向管理员提供个人的名字、密码、电话和专业信息等信息,由管理员完成用户注册期间需要注意用户名不能重复并且密码要符合要求。对于长期不使用的账户或者普通用户申请注销的账户,管理员可以将账户的信息进行删除,以便新的用户可以使用。在账户使用过程中如果信息发生的变动,用户可以要求管理员进行账户信息的修改,避免账户使用的过程中发生未知的错误。在完成用户的注册、删除和信息的修改,需要用户提供完整的信息。如图5所示。

  图5用户管理模块布局图

  3.系统模块功能设计

  3.1图书管理模块

  3.1.1图书管理模块的设计

  书籍管理是图书管理工作的主要内容之一,但是对于书籍的管理工作,普通用户是不能进行的,因此系统在进行书籍的增添、修改和删除的操作之前,需要检测当前用户是否为管理员。接下来管理员需要输入书名、作者、出版社和出版日期等信息,系统会自动检测输入的信息是否完整,若完整则可以进行增添、删除和修改操作。在完成书籍删除操作的过程中,系统会查询书籍是否在馆,若在馆则可以删除,反之不可以。在完成书籍信息修改的过程中,系统会在数据库中查找是否存在所输入的书籍,如果数据库中存在所查找的图书,则书籍信息修改成功,同样在书籍增添的过程中,如果数据库中不存在所查找的图书,则书籍可以成功增添。如图6所示。

  图6信息修改流程

  3.1.2图书管理模块的实现

  首先通过设计模式,对书号、书名和作者等信息进行合理编排,然后添加三个槽函数分别是入库on_add_clicked()、修改on_modify_clicked()和下架on_out_clicked()[5]。通过对QSqlQuery类进行实例化,然后通过prepare执行的SQL查询并通过bindValue进行数据绑定[6]。在这里我们只展示添加操作,部分代码如下:

  void Stack::on_add_clicked()

  {

  QString name,author,press,da;

  int Id;

  if(ui->bookid->text().isEmpty()||ui->bookname->text().isEmpty()||ui->author->

  text().isEmpty()||ui->press->text().isEmpty()||ui->date->text().isEmpty()){

  QMessageBox::warning(this,”Failed”,”请将信息填完整!”);

  }else{

  Id=ui->bookid->text().toInt();

  name=ui->bookname->text();

  author=ui->author->text();

  press=ui->press->text();

  date=ui->date->text();

  ui->author->clear();

  ui->bookid->clear();

  ui->bookname->clear();

  ui->press->clear();

  ui->date->clear();

  QSqlQuery query,querys;

  querys.prepare(“select*from book where id=?”);

  querys.bindValue(0,Id);

  querys.exec();

  if(querys.first()){

  QMessageBox::warning(this,”Error”,”失败,编号冲突!”);

  }

  else{

  query.prepare(“insert into book(id,name,author,press,date,

  state,time)values(?,?,?,?,?,?,?)”);

  query.bindValue(0,Id);

  query.bindValue(1,name);

  query.bindValue(2,author);

  query.bindValue(3,press);

  query.bindValue(4,date);

  query.bindValue(5,”在馆”);

  query.bindValue(6,0);

  if(query.exec()){

  QMessageBox::information(this,”Success”,”添加成功”);

  }

  else{

  qDebug()<<query.lastError();

  QMessageBox::warning(this,”Error”,”失败,添加失败!”);

  }

  }}}

  3.2图书借阅模块

  3.2.1图书借阅模块的设计

  在书籍借阅中系统中用户可以根据自己的需要选择系统提供的书名、书号和作者三个条件进行查询。系统允许用户输入不完整的信息来查找书籍,若查找成功则显示书籍的信息,反之则失败。

  在借阅操作中,用户根据所显示的搜索信息查看书籍是否还在馆中,如果所查找书籍在书库中且未被借阅,用户需要输入书号、书名和作者名称进行借阅,在输入完成后系统会检测用户输入的信息是否完整,若信息完整则书籍借阅成功,同时系统会记录书籍被借阅的时间并自动计算出归还的时间,用户可以在自己的借阅历史记录中查看,也可以在系统的主界面上查看。若信息输入有缺失或者错误则会借阅失败。如图7所示。

  图7图书借阅流程图

  3.2.2图书借阅模块的实现

  图书借阅模块有三个不同的索引,每个索引对应不同的界面,所以使用currentIndex:int来保存索引的位置,达到不同界面的切换[7]。以借阅界面为例,系统通过用户选择的搜索条件开始查询数据库,若at()不等于-2,则使用next()检索结果中的下一条记录,并利用setItem()将结果展示一一出来[8]。部分代码如下:

  void Bookborrow::doBorrowInfo()

  {

  ui->stackedWidget->setCurrentIndex(0);

  }

  if(query.at()!=-2)

  {

  while(query.next())

基于Qt和SQLite的图书管理系统

  {

  ui->searchtableWidget->insertRow(index);

  ui->searchtableWidget->setItem(index,0,new QTableWidgetItem(query.value(0).toString()));

  ui->searchtableWidget->setItem(index,1,new QTableWidgetItem(query.value(1).toString()));

  ui->searchtableWidget->setItem(index,2,new QTableWidgetItem(query.value(2).toString()));

  ui->searchtableWidget->setItem(index,3,new QTableWidgetItem(query.value(3).toString()));

  ui->searchtableWidget->setItem(index,4,new QTableWidgetItem(query.value(4).toString()));

  ui->searchtableWidget->setItem(index,5,new QTableWidgetItem(query.value(5).toString()));

  ui->searchtableWidget->setItem(index,6,new QTableWidgetItem(query.value(6).toString()));

  index++;}

  }

  else{

  QMessageBox::warning(this,”Failed”,”未找到相关书籍”,QMessageBox::Ok);

  }

  3.3用户管理模块

  3.3.1用户管理模块的设计

  在用户的注册,删除和信息修改等操作中首先判断当前用户是否为管理员,若是则在用户注册的操作中系统会根据输入的用户名查询是否已存在于数据库之中并检测输入的信息是否完整,若用户名不存在且输入的信息完整则注册成功,在删除和信息修改的操作上若检测到输入的用户名存在且输入的信息完整则删除和信息修改操作成功,反之失败。上述所有的操作都需要管理员权限。如图8所示。

  图8用户管理模块流程图

  3.3.2用户管理模块的实现

  通过设计模式完成整体的布局,利用isEmpty()函数,判断输入内容是否为空,如果不为空则利用size()函数判断输入内容是否超过规定字符,如果超过则使用clear()函数清空用户所填写的内容[9]。部分代码如下所示。

  if(ui->passwdEdit->text().isEmpty())

  {

  QMessageBox::warning(this,”Wrong”,”密码不能为空!”);

  ui->passwdEdit->setFocus();

  ui->repasswdEdit->clear();

  }

  else if(ui->passwdEdit->text().size()>20)

  {

  QMessageBox::warning(this,”Wrong”,”密码不能超过20个字符!”);

  ui->passwdEdit->clear();

  ui->repasswdEdit->clear();}

  3.4数据库设计

  3.4.1数据库的内容

  根据在设计图书管理系统中所需要的数据,进行规划整理该系统需要包含四张表分别是:书籍信息表(book)主要用于存储书籍的图书编号、书名、作者、出版社、出版日期、借阅次数和是否在馆等基本信息。其中,书号为表的主键。具体的书籍的信息表见表1所示。

  表1书籍信息表

  字段名称字段说明字段类型备注

  id图书编号int Primary key/not null

  bkname书名varchar Not null

  author作者vchar Not null

  press出版社vchar Not null

  date出版日期vchar Not null

  state在馆状态vchar Not null

  time借阅次数int Not null

  用户信息表(user)主要用于存储用户的学号、姓名、密码、电话号码、专业等基本信息。其中,学号为表的主键,并且用户名不允许重复使用。具体的用户信息表见表2所示。

  表2用户信息表

  字段名称字段说明字段类型备注

  id学号int Primary key/not null

  name姓名vchar Unique/not null

  password密码vchar Not null

  phone电话号码vchar Not null

  major专业vchar Not null

  信息记录表(record)主要用于保存用户的借阅信息包括书号、书名、借阅人、借书时间和归还时间等历史信息。以便用户可以随时随地查看自己所借阅的书籍和归还书籍的时间,使用户可以及时归还书籍或者延长借阅时间。具体的信息记录表见表3所示。

  表3信息记录表

  字段名称字段说明字段类型备注

  id编号int Not null

  username用户名vchar Not null

  borrow借书时间vhar Not null

  return归还时间vchar Not null

  status在馆状态vchar Not null

  overtime超期时间vchar Not null

  历史纪录表(history)用于保存借阅历史包括专业、书名和借阅次数等信息。同时给用户借阅书籍提供参考,以便用户可以选择更加合适的书籍。具体的历史记录表见表4所示。

  表4历史记录表

  字段名称字段说明字段类型备注

  major专业vcahr Not null

  bookname书名vchar Not null

  time借阅次数Int Not null

  3.4.2数据库的建立

  本系统采用SQLite数据库,首先通过QSqlDatabase来连接和建立一个数据库,在这里我建立了一个library.db的数据库,最后使用QSqlQuery来执行数据库中相应的语句来完成操作[10]。部分代码如下:

  QSqlDatabase db=QSqlDatabase::addDatabase(“QSQLITE”);

  db.setDatabaseName(“library.db”);

  QSqlQuery query;

  在完成数据库建立之后,接下来需要根据需求创建相应的表格,如书籍信息表(book)、用户信息表(user)、信息记录表(record)和历史纪录表(history)[11]。部分代码如下

  query.exec(QObject::tr(“create table book(id int primary key,bkname varchar(20),author vchar,press vchar,date vchar,state vchar,time int)”));

  query.exec(QObject::tr(“create table history(major vchar,bookname vchar,time int)”));

  通过上述操作,就可以实现数据库和表的建立。

  4.系统测试

  在制定了系统的各个模块和数据库的设计[12],并实现了各个模块的功能。因为在设计系统的过程中难免会出现一些思维漏洞,在运行系统的过程中会出现未知的漏洞,所以在上述操作完成之后,对系统进行测试,以便改成系统存在的漏洞,这一操作是必不可少的。

  4.1登录模块测试

  当用户未输入用户名或者密码时,系统会自动弹出对话框提示用户输入的内容为空。并且当用户输入错误的用户名或者密码时,系统也会做出相应的提示。在此我们只列举输入错误的密码的情况。如图9所示。

  图9用户名或密码错误图

  4.2图书管理模块测试

  当管理员对书籍进行添加操作时,如果书籍的信息输入不完整,系统会弹出提示框提醒管理员输入信息不完整。如图10所示。

  图10信息输入不完整

  4.3图书借阅模块测试

  当用户选定书名作为搜索条件,并输入要查询内容时,若查询内容不存在,则会弹出警示框提醒用户,反之界面会显示查询结果。如图11所示。

  图11搜索书籍结果

  4.4用户管理模块测试

  当用户输入密码和确定密码不一致且都超过规定字符时,系统会弹出对话框并自动清空内容。如图12所示。

关于作者: guimow

热门文章