虚拟智慧图书馆项目.docx
《虚拟智慧图书馆项目.docx》由会员分享,可在线阅读,更多相关《虚拟智慧图书馆项目.docx(21页珍藏版)》请在冰豆网上搜索。
虚拟智慧图书馆项目
《数据结构与算法基础》课程项目
实施报告
题目:
虚拟智慧图书馆
1
虚拟智慧图书馆
一、题目要求
模拟现有图书馆的借阅、续借、归还;图书入库、出库;查询、排序等功能,实现电
子图书馆的智慧综合管理。
要求:
(1)掌握数据结构的输入/输出、查找、排序、数据库建立;
(2)实现图书信息的数据库建立;
(3)图书信息的模糊查找与精确查找,并显示所查找条目的摘要内容;
(4)图书信息的有序排列(如读者兴趣度排序、书评度排序、出版时间排序等);
(5)图书信息不少于 50 条。
二、预期指标
在一台 PC 机上模拟图书馆管理系统各终端及数据库间的连接,模拟实现借阅、续借、
还书,图书入库、出库,查询、排序,个人信息状态查询,增添/删除/维护用户信息等功
能
1.预期数据库中图书数据达到 100 条以上,具有数个用户,并有管理员及普通用户
权限区分;
2.在查询界面,通过点选属性,即可进行对以返回内容进行本地排序;
3.对历史借阅信息进行统计,排序得出最受欢迎书籍
三、名词解释
ISBN:
国际标准书号,是国际通用的图书或独立的出版物(除定期出版的期刊)代码。
一
个国际标准书号只有一个或一份相应的出版物与之对应。
数据采集:
人机交互界面中,系统从用户输入中收集各类数据的过程
数据发送:
将收集到的数据发送至服务器端的过程
数据接收:
将 Server 处理完返回的数据接收的过程,用以进行显示,反馈给用户
四、项目背景
4.1 项目背景
诸多大学及社会上的图书馆具有借阅、续借、归还;图书入库、出库;查询、排序等
功能,为了实现电子图书馆的智慧综合管理,提高管理效率,方便读者,需要一套基于计
算机系统及数据库的图书管理系统。
图书馆本身包含大量的信息,包括书目,电子资源等,在实现上述功能时,若以传统
方法实行,将耗费较大的人力及物力。
利用信息电子化的优势,可以明显优化各项步骤。
读者在查询图书时,是通过分类号查询,原需一个个书架依次查找,虚拟智慧图书馆
系统应具备让读者在电子设备上接入数据库,并针对不同关键字进行模糊或精确搜索的能
力。
另外,虚拟智慧图书馆系统计划实现图书排序推荐功能,其应具备对图书进行兴趣度、
出版时间、书评度等排序能力。
图书馆管理者和读者利用此系统应能清楚明晰书目的归还
时间,借阅情况。
结合安全门,RFID 识别技术,ID card 验证,此系统应能完成在数据库中
标记图书借阅归还的能力,并实现数据库情况与书库情况一致的目的。
基于之上预期,虚拟智慧图书馆项目主要目的在于对图书信息及读者信息的数据处理,
通过对系统数据结构与算法的优化,达到最佳的使用目的,包括对数据结构的输入/输出、
查找、排序的应用,及数据库建立。
2
数据名
数据含义
备注说明
Id
条目号
主键
ISBN
国际标准书号
ISBN-13 标准,例如:
978-7-301-04815-3
Name
图书名
Author
图书作者
Pub_date
出版时间(月/日/年)
Date
Publisher
出版社
Available
图书是否可借阅
enum ('available','forbidden')
Total
图书总数
Store
库存数量
数据名
数据含义
备注说明
Id
用户 ID
主键
Pwd
用户密码
暂时用明文
Loaned
已借阅数量
Max
最大可借阅数量
Class
用户类别
管理员或用户
备注:
每个用户匹配一张借阅图书的详细情况表
4.2 项目原理
任何用户使用虚拟智慧图书馆都将通过已经注册在数据库中的信息访问。
任何图书馆
书库中的图书及电子资源都通过事先的预输入,与数据库中的信息相匹配。
当 Client 请求时,Server 根据请求检索、排序、增添数据并返回给 Client 显示。
Server
应根据不同的操作对数据库里的图书信息、用户信息、借阅记录进行更新。
当 Client 请求
时,将连接 Serve 数据库,返回需求信息后,断开与 Serve 数据库的连接,这样可以避免占
用有限的数据库接口资源。
当用户输入操作要求时,Client 进行数据接收,并将请求发送至 Server 并进行数据操
作,之后将需求信息返回 Client。
五、数据结构设计
图书信息包含的数据项如下:
用户信息包含的数据项如下:
3
数据名
数据含义
备注说明
Id
条目号
主键
User_id
所属用户
外键关联
Book_id
图书条目号
外键关联
Loan_date
借阅日期
Date
Back_date
归还日期
为 NULL 表示没有归还
借阅图书的详细情况表:
六、 实现方式
我们组经过讨论,数据库选用了 mysql。
该数据库使用简单方便,功能强大,对于多
线程处理器支持优秀,对列项可设置缺省,且能在多平台上兼容应用,同时其全面支持各
类 SQL 语句,对该项目完成完全可以胜任。
对于图形界面设计,由于 Windows API 设计过程繁琐,故我们使用操作较为方便,界
面友好的 QT Creator 进行交互式界面设计,并和 mysql 数据库进行连接。
系统所有功能的实现皆从用户登录开始,根据不同的用户类型,在系统中给予不同的
操作权限。
这样管理员和普通读者共用一套系统,无需另外设计,同时,管理员也可以借
阅书籍。
七、功能概述
客户端
Client
数据交互
服务器端(数据库)
Server
整个图书馆系统分为 Server 和 Client 两部分。
在客户端 login 界面输入账户和口令,只
有账户和口令都正确,才被允许连接 Serve,链接数据库。
其中账户权限等级区分为管理员
账户和普通账户。
管理员账户可以实现图书入库/出库/更新图书等功能。
7.1 Server
Server 拥有借阅、归还、模糊或精确查询、排序、入库/出库/更新图书信息六大功能,
通过对 SQL 语句对数据库的数据查询,增删实现。
6.1.1 入库/出库/更新图书
仅管理员用户享有此权利。
增删数据库中 books 表的内容,可实现图书信息的录入、
删除,可对已在数据库中的图书信息进行更新。
6.1.2 借阅
可借阅图书。
借阅完成后,将此图书的库存数量减一,并在 book_record 表中增加借
阅历史,记录借阅时间,供用户查询。
4
6.1.3 还书
可归还图书。
图书归还后,将此图书的库存数量加一,并在 book_record 表中相应条
目内增加归还时间,供用户查询。
6.1.4 模糊或精确查询
可迅速查询所需图书信息。
可输入多类关键字,也可输入单个。
可输入完全匹配关键
字,也可输入不完全匹配的关键字检索。
6.1.5 排序
可选定排序方式,将按关键字查找的结果按一定方式排列(如出版时间)。
6.2Client
6.2.1 数据采集
读取用户的搜索关键词、操作请求等。
6.2.2 数据发送
将用户的操作请求发送至 Server。
6.2.3 数据接收
Server 根据用户请求对数据进行处理,将处理好的结果返回给 Client,Client 接收相应
数据。
6.2.4 界面交互
提供可视化界面,提高数据可读性,有效采集用户请求
八、系统用例
7.1 用例图
用户 Client
登录
管理员 Client
7.2 用例描述
5
Server
借阅
还书
模糊/精确查询
续借
排序
个人信息状态
查询
入库/出库/更
新图书
增添/删除/维
护用户信息
用例名称
借阅
功能简述
用户在“借阅”界面输入图书 ISBN 号,可使得图书状态转为“已借阅”,
并生成借阅日期
前置条件
Client 成功登陆系统,与 Server 数据库连接通路正常
基本流
1. 进入借阅模式窗口
2. 输入欲借阅图书的 ISBN 号
3. 将此次借阅详情添加入“借阅/归还日志”中
4. 添加成功后,记录借阅日期,并更新库存图书书目
5. 用户的借书记录中增加该书条目,并添加于借阅历史中
分支与异常
第 2 步,若用户状态为”forbidden”,则拒绝借阅,并报告“您已被暂时停止
借书权限”
第 2 步,若用户可借阅数量不足,则拒绝借阅,并报告“超过允许借书数
额”
第 2 步,若图书库存数量为 0,则拒绝借阅,并报告”请联系管理员”
第 3 步,若无“借阅/归还日志”,则自动建立
第 3 步,若无法建立日志或无法写入日志,则报告异常,显示“借阅失败”
。
中止借阅过程
后置条件
无
备注
无
用例名称
登录
功能简述
输入用户名与密码通过验证,方可进入系统。
前置条件
虚拟智慧图书馆系统 Client 正确安装并部署,Server 数据库正常运行
基本流
1. 图书管理系统管理员或读者启动 Client 程序
2. 用户输入 ID 及口令登录,登录信息将被记录到登录日志中
3. Client 将数据采集并发送至 Server,等待 Server 返回验证信息
4. Client 接收 Server 返回的验证信息,登录虚拟智慧图书馆系统,Client 记
录登录日志
分支与异常
第 1 步,若启动系统程序失败,则报告异常
第 2 步,若登录日志不存在,Client 则于指定位置重新创建日志文件
第 2 步,若 Client 创建或写入日志失败,则报告异常
第 3 步,若输入的登录 ID 于数据库中不存在,Server 返回验证信息,
Client 则要求用户重新输入 ID
第 3 步,若输入的口令与 ID 并不匹配,Server 返回验证信息,Client 要求
用户重新输入口令
后置条件
无
备注
无
7.2.1 登录
7.2.2 借阅
6
用例名称
还书
功能简述
用户在“还书“界面输入图书 ISBN 号,
前置条件
Client 登陆成功,和 Server 数据库连接通路正常,该用户有借书记录
基本流
1. 进入还书模式窗口
2. 输入欲还图书的 ISBN 号
3. 将此次还书详情添加入“借阅/归还日志”中
4. 添加成功后,比较还书日期与借阅日期,判断是否超期
5. 更新图书数据库库存信息
6. 用户的借书记录中,该书本借阅记录删除
分支与异常
第 3 步,若无“借阅/归还日志”,则自动建立。
第 3 步,若无法建立日志或无法写入日志,则报告异常,显示“借阅失败”
。
中止借阅过程。
第 4 步,记录还书日期,并与借阅日期及续借情况比较,若超期,则将用
户状态改为”status“,暂停其借阅
第 6 步,若借阅记录删除失败,则报告错误
后置条件
无
备注
无
用例名称
模糊/精确查询
功能简述
帮助管理员和用户迅速搜寻所需的书本信息。
前置条件
Client 登陆成功,和 Server 数据库连接通路正常
基本流
1.进入查询界面
2.输入查询关键词(出版社,作者,ISBN,书名,出版日期等)
3.按照关键词在数据库中进行搜索,与 Client 界面上给出查询结果
4.用户可依据需求就某个类别进行排序
分支与异常
第 4 步,若排序失败,则报告错误
后置条件
无
备注
无
用例名称
续借
功能简述
帮助用户或管理员续借图书,延长时间限制。
前置条件
Client 登陆成功,与 Server 数据库连接通路正常,用户有借阅记录且未逾
期
基本流
1.进入续借界面
2.输入需要续借的书本 ISBN,进行续借
3.将续借的情况写入“借阅/归还日志”中
4.根据借阅策略增加该用户此图书借阅信息的 list_date_back 归还日期
分支与异常
第 1 步,若进入续借界面失败,则报告错误
7.2.3 还书
7.2.4 模糊/精确查询
7.2.5 续借
7
用例名称
入库/出库/更新图书
功能简述
管理员用户可对图书数据库资料进行更新。
前置条件
Client 登陆成功,且为管理员账户,与 Server 数据库连接通路正常
基本流
1.进入入库/出库/更新图书界面
2.选择相应功能
3.添加/删除/更新确认后,完成数据库更新
4.将相应操作情况添加入数据库管理操作日志
分支与异常
第 2 步,若选择“入库”,则要求输入入库书籍所有信息,确认后添加到
数据库中
第 2 步,若选择“出库”,则要求输入书籍的 ISBN 号,返回图书信息,经
过二次确认后,从数据库中剔除。
“出库”书籍状态若为“已借阅”,则禁
止操作
第 2 步,若选择“更新”,则可以通过对数据库数据检索,选择需要更新
的书籍进行修改信息操作。
书籍状态若为“已借阅”,则禁止操作
第 3 步,若操作失败,则报告异常
第 4 步,若相关日志不存在,则重新创建日志文件
第 4 步,若创建或写入日志失败,则报告异常
后置条件
无
备注
无
用例名称
个人信息状态查询
功能简述
帮助用户查询自己借书记录及相关情况
前置条件
Client 登陆系统成功,与 Server 数据库连接通路正常
基本流
1.进入个人信息状态查询界面
2.和 Server 数据库通信,请求返回数据库中关于登陆用户的可查看状态信
息,显示于 Client 端界面
分支与异常
第 1 步,若进入个人信息状态查询界面失败,则报告错误
第 2 步,若 Server 未成功返回用户信息,则报告错误
后置条件
无
备注
无
第 2 步,若书本已逾期,则不得提供续借的服务,报告”无法续借”
第 3 步,若相关日志不存在,则重新创建日志文件
第 3 步,若创建或写入日志失败,则报告异常。
中止续借过程,续借失败
第 4 步,若修改归还日期失败,则报告错误
后置条件
无
备注
无
7.2.6 个人信息状态查询
7.2.7 入库/出库/更新图书
8
用例名称
增添/删除/维护用户信息
功能简述
管理员用户可对用户数据库资料进行更新或修改。
前置条件
Client 登陆成功,且为管理员账户,与 Server 数据库连接通路正常
基本流
1.进入增添/删除/维护用户信息界面
2.选择相应功能
3.添加/删除/更新确认后,完成数据库更新
4.将相应操作情况添加入数据库管理操作日志
分支与异常
第 2 步,若选择“增添”,则要求输入欲增添的所有用户信息,确认后添
加到数据库中
第 2 步,若选择“删除”,则要求输入用户 ID,返回用户信息进行二次确
认后,从数据库中剔除,若“删除”用户借阅记录中还有书籍,则在确认
时进行提醒
第 2 步,若选择“更新”,则可以通过对数据库数据检索,在数据库中选
择需要更新的用户进行更新修改信息操作
第 3 步,若操作失败,则报告错误
第 4 步,若相关日志不存在,则重新创建日志文件
第 4 步,若创建或写入日志失败,则报告异常
后置条件
无
备注
无
7.2.8 增添/删除/维护用户信息
九、代码分析
/*********************
*dataacc.h
*********************/
#ifndef DATAACC_H
#define DATAACC_H
#include "dbconnect.h"
#include
#include
#include
extern int usr_id;
/*数据库交互类*/
class DataAcc
{
public:
DataAcc();
~DataAcc();
/*************************************************************************
9
*loginCheck 检查帐户名和口令是否和数据库中的信息匹配,以决定是否连接数据库
*只能输入由数字、26 个英文字母或下划线组成的字符串,账户口令出错时将返回提示
*形参表中为 QString&类型的 usr 和 pwd,分别对应帐户名和口令
*************************************************************************/
bool loginCheck(const QString &usr, const QString &pwd);
/*************************************************************************
*serch 用于执行精确/模糊搜索
*显示书目结果包括 isbn 号,书名 name,作者 author,出版商 publisher,
*出版日期 pub_date,借阅状态 available,总量 total,库存 store
*形参表中为 QSqlQueryModel*类型的结果显示表及 QString&类型的
书名 name,作者 author 及 pub 出版日期
*QSqlQueryModel 为 Qt 提供,用于存放 SQL 查询结果的类
************************************************************************/
bool search(QSqlQueryModel *model,
const QString &name,
const QString &author,
const QString &pub);
/*************************************************************************
*sortByPubDate 将现有查询结果按出版日期从早到晚排序
*形参表中为 QSqlQueryModel*类型的结果显示表
*origin 保存之前已有的 SQL 语句,后加 SQL 语句中的 order 语句
**************************************************************************/
void sortByPubDate(QSqlQueryModel *model,const QString &origin);
/*************************************************************************
*getUserInfo 用于处理用户信息查询
*将返回用户信息,当前借阅情况,历史节约情况
*形参表中的 Qtring*类型 info 用于保存显示的用户信息,内容在函数中定义
*而 QSqlQueryModel*类型的结果显示表,接受传入 present 和 history 表的地址,
分别代表当前借阅和历史借阅
**************************************************************************/
void getUserInfo(QString *info,QSqlQueryModel *present,QSqlQueryModel *history);
/*************************************************************************
*loanBook 完成借书过程
*若书名在数据库中是不存在,或库存为 0,则借阅失败,返回提示
*若借阅成功,将增加相应读者的借书记录,记录借阅时间,并且该图书的库存减 1
*形参表中的 Qstring 类型接受书名 bookName 的传入
**************************************************************************/
bool loanBook(QString bookName);
/*************************************************************************
*backBook 完成借书过程
*若书名在该用户历史中是不存在,则还书失败,返回提示
*若还书成功,在该读者的借书记录中加入还书时间,并且该图书的库存加 1
*形参表中的 Qstring 类型接受书名 bookName 的传入
**************************************************************************/
bool backBook(QString bookName);
private:
10
//指向数据库连接类对象的指针 dbc
DBConnect *dbc;
};
#endif // DATAACC_H
11