数据库课程设计图书馆管理系统.docx
- 文档编号:26849683
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:28
- 大小:402.16KB
数据库课程设计图书馆管理系统.docx
《数据库课程设计图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计图书馆管理系统.docx(28页珍藏版)》请在冰豆网上搜索。
数据库课程设计图书馆管理系统
第一章绪论
§1.1设计背景
随着社会的开展,人类的生产、生活越来越离不开信息。
谁拥有了更多更有效的信息,谁就将在竞争中处于有利地位。
信息产业正在成为一个国家的支柱。
图书作为信息存储及传播的主要媒体之一,数量、规模、种类比以往任何时候都大得多,不管个人还是图书管理部门都需要使用方便而有效的方式来管理书籍。
目前的图书馆是单一的手工检索,出现了很多问题:
检索速度慢、效率低,图书统计工作难、藏书更新不能及时完成,而且最重要的是借书还书的工作量之大。
在计算机日益普及的今天,假设采用一套行之有效的图书管理系统,会方便许多。
对图书管理部门而言,以前单一的手工检索已不能满足人们的需求,为了便于图书资料的管理,需要有效的图书管理系统。
开发图书管理系统就是要采用现代化的信息管理方式代替手工管理方式,提高图书管理工作效率,做到标准管理、科学统计和快速查询,让图书馆更好的为学校、社会效劳。
§1.2系统描述
本次程序设计所设计的图书馆管理系统脱离了繁琐的人工管理,使读者借阅图书更方便,管理员管理图书和读者更快捷。
该图书管理系统不仅具有借书还书的根本功能,还增加了借阅管理、书籍管理、读者管理、查询等功能,并且附加了帮助的功能。
书籍管理模块:
该模块具有增加图书和流失〔删除〕图书的功能。
查询模块:
该模块具有查询图书、查询读者和查询用户借阅历史的功能。
其中,图书查询可以按图书编号、图书名称、出版时间和作者名称等方式查询;读者查询可以按读者XX和编号方式查询;用户借阅历史查询只需输入读者编号就可查询到图书编号、借书日期、还书日期和归还类型〔是否归还〕。
§1.3开发环境
WindowsXP
MicrosoftSQLServer2000
MicrosoftVisualC++6.0
第二章需求分析
§2.1可行性分析
进展数据库设计之前首先必须准确了解与分析用户需求(包括数据与处理)。
需求分析是整个设计过程的根底,是最困难、最消耗时间的一步。
作为“地基〞的需求分析是否做得充分与准确,决定了在其上构建数据库大厦的速度与质量。
需求分析做得不好,甚至会导致整个数据库设计返工重做。
一个系统被实施或者被设计之前必然要做可行性分析,满足可行性系统才能朝着设计和实施阶段开展。
可行性分析包括技术上的可行性和经济上的可行性。
该图书管理管理系统完全满足这两种可行性。
首先,技术上的可行性主要是分析技术条件能否顺利完成开发工作,软硬件能否满足需要。
该系统的开发是基于VisualC++6.0和SQLServer2000,这两种软件在前面的课程中已经被熟练掌握。
VisualC++不仅可以运行程序,也可以设计出完美的界面,读者、图书和管理员类就是在VisualC++中定义的,显示的界面也是在VisualC++中生成的。
数据库管理系统那么采用SQLServer,它能够处理大量数据,同时保证数据的完整性和平安性。
因此该系统的开发平台已成熟可行。
另一方面:
硬件,在科技飞速开展的今天,硬件更新速度越来越快,容量越来越大,可靠性越来越高,价格也越来越廉价,学生实验机房所用的硬件都是经过更新的,完全能满足该系统设计所需。
因此硬件平台也能够满足该系统所需。
其次,就是经济的可行性。
鉴于计算机开展异常迅速,在软硬件配置以及开发技术均已可行的情况下开发这样一个图书馆管理系统本钱不会很高,而其可以大大提高图书馆的工作效率,也是图书馆管理开展的必然趋势,其必将有比拟宽阔的市场,因此该系统满足经济可行性。
综上所述,该图书馆管理系统可行。
§2.2数据功能图
图书馆管理系统在被证明可行之后,根据图书馆管理需求设计出如下系统所需功能图。
该系统可以实现五大功能:
增加图书、删除〔流失〕图书、查询读者、查询图书、查询借阅历史。
根据这些功能设计出系统的功能模块,如图2.1所示。
其中增加图书和删除图书是管理员的权限,读者不享有。
查询读者、图书和借阅历史读者和管理员均享有。
图2.1功能图
2.3数据流程图
由系统描述和系统功能图可以得出系统的功能流图,如下列图2.2所示。
图2.2数据流程图
第三章数据库设计
§3.1概念构造设计
将需求分析得到的用户需求抽象为信息构造即概念模型的过程就是概念构造设计。
它是整个数据库设计的关键。
在需求分析阶段所得到的应用需求应该首先抽象为信息世界的构造,才能更好地、更准确地用在某一DBMS实现这些需求。
描述概念模型的有力工具是E-R图。
在这里使用了E-R图描述了图书馆管理系统的数据模型,将第二章的数据流图转换为了更好、更直观的模式。
这些E-R图描述了各实体及其属性、实体间的联系等。
图3.1图书及其属性图
图3.2读者及其属性图
图3.3管理员及其属性图
图书、读者、管理员各作为一个实体,图3.1、图3.2、图3.3分别表示各实体及其属性图。
图书和读者作为两个独立的实体,之间存在着‘借阅‘的联系,同样图书和管理员也存在着管理的联系。
此外,借阅也可以单独作为一个实体存在,有其自己的属性。
图3.4是借阅的实体及其联系图。
图3.4借阅〔联系〕及其属性
读者和图书之间存在着借阅的联系,读者和管理员之间存在着管理的联系,由这三个实体及其属性图和三者之间的联系,可以得到实体及其联系图,如图3.5和3.6所示。
读者和图书之间存在多对多的关系,管理员和图书之间也是多对多的关系。
图3.5读者、图书及其联系图
图3.6管理员、图书及其联系图
§3.2逻辑构造设计
概念构造是独立于任何一种数据模型的信息构造。
逻辑构造设计的任务就是把概念构造设计阶段设计好的根本E-R图转换为与选用的DBMS产品所支持的数据模型相符合的逻辑构造。
数据库逻辑构造设计是总体设计阶段非常重要的环节,好的逻辑构造可以简化开发过程,使系统功能更加清晰明确。
因为数据库逻辑构造的变化会造成编码的改动,所以必须认真地设计数据库逻辑构造后在进展编码,从而防止了无谓的重复工作。
目前DBMS产品一般支持关系、网状、层次三种模型中的一种,本次课程设计选用的是关系模型。
E-R图向关系模型转换要解决的问题是如何将实体型和实体间的联系转换为关系模式,如何确定这些关系模式的属性和码。
实体图书、读者、管理员之间的关系如图3.5和3.6所示,两两实体之间存在的是多对多的关系,所以在概念构造设计的根底上,将两图转换为如下关系模式,整个系统所包含的信息有图书信息、读者信息、管理员信息和借阅信息,这些关系模式如下所示:
图书〔书号,书名,作者,,价格,出版日期,分类,条形码,备注,ISBN,数量〕
Bookinfo〔ID,Name,Auther,Pubname,Price,PubDate,Sort,Barcode,Info,ISBN,Counts〕
读者〔借阅证号,XX,性别,密码,Email,可借数量〕
User〔ID,Name,Sex,Password,Email,Countable〕
管理员〔编号,XX,密码,性别〕
Manager〔ID,Name,Password,Sex〕
借阅〔图书号,借阅证号,借书日期,还书日期,还书状态,罚金〕
Lendinfo〔BookID,UserID,LendDate,ReturnDate,IsBack,Fee〕
注:
这些关系模式均为优化后的数据模型,带下划线表示主键。
§3.3物理构造设计
数据库在物理设备上的存储构造与存取方法成为数据库的物理构造,它依赖于选定的数据库管理系统。
为一个给定的逻辑数据模型选取一个最适合应用要求的物理构造的过程,就是数据库的物理设计。
以下就是在关系模式的根底上,由优化后的关系模型转化为合理的物理存储构造,根本信息表如下表所示。
数据库的物理设计通常分为两步:
〔1〕确定数据库的物理构造,在关系数据库中主要指存取方法和存储构造;
〔2〕对物理构造进展评价,评价的重点是时间和空间的效率。
评价结果满足原设计要求,可进入到物理实施阶段。
图书根本信息存放在BookInfo表中,位置是LIB;用户根本信息存放在Users表中,位置是LIB;管理员根本信息存放在Manager表中,位置LIB;借阅根本信息存放在LendInfo表中,位置是LIB。
在对时间效率、空间效率、维护代价和各种用户要求进展权衡之后,选择了一个较优的方案作为作为数据库的物理构造,该构造符合用户需求。
表3.1图书根本信息表
列名
数据类型
长度
是否允许空
ID
varchar
10
否
Name
varchar
100
是
Sort
varchar
100
是
Counts
int
4
是
Pubname
varchar
100
是
Author
varchar
50
是
ISBN
varchar
50
是
Pubdate
smalldatetime
4
是
Price
real
4
是
Barcode
varchar
50
是
Info
varchar
200
是
表3.2用户根本信息表
列名
数据类型
长度
是否允许空
ID
varchar
10
否
Name
varchar
20
是
Sex
char
2
是
Password
varchar
10
是
varchar
50
是
Countable
int
4
是
Forfeit
int
4
是
表3.3管理员根本信息表
列名
数据类型
长度
是否允许空
ID
varchar
10
否
Name
varchar
20
是
Sex
varchar
4
是
Password
varchar
10
是
表3.4借阅根本信息表
列名
数据类型
长度
是否允许空
BookID
varchar
10
否
UserID
varchar
10
否
LendDate
smalldatetime
4
是
ReturnDate
smalldatetime
4
是
IsBack
char
1
是
第四章数据库实施
完成数据库的物理设计之后,就要用RDBMS提供的数据定义语言和其它应用程序将数据库逻辑设计和物理设计结果严格描述出来,成为DBMS可以承受的源代码,再经过调试产生目标模式。
然后就可以组织数据入库了,这就是数据库实施阶段。
§4.1相关SQL语句
数据库实施有两项重要的工作,一项为哪一项数据的载入,另一项为哪一项应用程序的编码和调试。
本次课程设计采用SQL语句与C++编码连接的方式实现数据的载入以及程序的运行。
以下是局部相关SQL语句,相关的C++编码在4.2中有局部补充。
§创立数据库名为LIB的数据库
CREATEDATABASELIB--创立数据库名为LIB
§创立根本信息表
1创立BookInfo表:
CREATETABLEBookInfo
(
IDvarchar(10),
Namevarchar(100),
Sortvarchar(100),
Countsintcheck(counts>=0),--存书数量
PubNamevarchar(100),
Authorvarchar(50),
ISBNvarchar(50),
PubDatesmalldatetime,
Pricefloat(8),
Barcodevarchar(50),--条形码的值
Infovarchar(200),--书的信息或简要说明
primarykey(ID)
)
2创立Users表:
CREATETABLEUsers
(
IDvarchar(10),
Namevarchar(20)notnull,
Sexchar
(2)check(sexin('男','女','F','M')),
Passwordvarchar(10),
Emailvarchar(50),
Countableintcheck(countable<=20andcountable>=0)default5,--可借书的数量
Forfeitintcheck(Forfeitin(0,1))default0,
Primarykey(ID)
)
3创立Manager表:
CREATETableManager
(
IDvarchar(10),
Namevarchar(20)notnullunique,
Sexvarchar(4),
Passwordvarchar(10)notnull,
primarykey(ID)
)
§创立触发器
本系统创立了三个触发器,它们分别实现增加图书、删除图书、统计图书可借数量的功能。
其代码如下。
1创立增加图书的触发器
CREATETRIGGERBookidChange
ONBOOKINFO
AFTERUPDATE
AS
IFUPDATE(ID)
BEGIN
DECLARE@book_idasvarchar
DECLARE@old_book_idasvarchar
SELECT@book_id=(selectIdfrominserted)
SELECT@old_book_id=(selectidfromdeleted)
UpdateLENDINFO
SETLENDINFO.bookid=@book_id
WHERELENDINFO.bookid=@old_book_id
END
2创立删除图书的触发器
createtriggerdeletebook
onbookinfoinsteadofdelete
as
deletefromlendinfowhereuseridin(selectIDfromdeleted)
deletefrombookinfowhereidin(selectIDfromdeleted)
3创立统计图书可借数量的触发器
createtriggerusercountable
onlendinfoafterinsert
as
updateuserssetcountable=countable-1whereIDin(selectuseridfrominserted)
--借书后用户的可错数量减一
§4.2查询模块
§查询图书
1按图书编号查询
例如,查询编号100004的图书,界面如图4.1所示:
图4.1查询图书编号界面
源代码:
#include"SearchBID.h"
CSearchBID:
:
CSearchBID(CWnd*pParent/*=NULL*/)
:
CDialog(CSearchBID:
:
IDD,pParent)
{}/*建立图书编号查询类*/
voidCSearchBID:
:
Refresh_Data()
{
CStringcSource;
cSource="select*frombookinfowhereID='"+m_ID+"'";
}
voidCSearchBID:
:
OnOK()
{
Refresh_Data();
if(m_ID=="")
{
MessageBox("输入要查询的条件","提示",MB_OK);
return;
}
}
2按图书名称
例如,查询图书名称为数据构造的图书,界面如图4.2所示:
图4.2查询图书名称界面
3按作者名称
例如,查询作者为无名的图书,界面如图4.3所示:
图4.3查询图书作者界面
源代码:
#include"SearchBA.h"
CSearchBA:
:
CSearchBA(CWnd*pParent/*=NULL*/)
:
CDialog(CSearchBA:
:
IDD,pParent)
{}
voidCSearchBA:
:
Refresh_Data()
{
CStringcSource;
cSource="select*frombookinfowhereAuthor='"+m_Author+"'";
}
voidCSearchBA:
:
OnOK()
{
Refresh_Data();
if(m_Author=="")
{
MessageBox("输入要查询的条件","提示",MB_OK);
return;
}
}
4按出版日期
例如,查询20011-10-01出版的图书,界面如图4.4所示:
图4.4查询图书出版时间界面
#include"SearchBD.h"
CSearchBD:
:
CSearchBD(CWnd*pParent/*=NULL*/)
:
CDialog(CSearchBD:
:
IDD,pParent)
{}
voidCSearchBD:
:
Refresh_Data()
{
CStringcSource;
cSource="select*frombookinfowherePubDate='"+m_PubDate+"'";
}
voidCSearchBD:
:
OnOK()
{
if(m_PubDate=="")
{
MessageBox("输入要查询的条件","提示",MB_OK);
return;
}
}
5按名称
例如,查询清华大学出版的图书,界面如图4.5所示:
图4.5查询图书界面
§查询读者
1按读者编号
例如,查询编号为10003的读者,假面如图4.6所示:
图4.6查询读者编号界面
#include"SearchByID.h"
CSearchByID:
:
CSearchByID(CWnd*pParent/*=NULL*/)
:
CDialog(CSearchByID:
:
IDD,pParent)
{}
voidCSearchByID:
:
Refresh_Data()
{
CStringcSource;
cSource="select*fromUserswhereID='"+m_ID+"'";
}
voidCSearchByID:
:
OnOK()
{
Refresh_Data();
if(m_ID=="")
{
MessageBox("输入要查询的条件:
用户ID","提示",MB_OK);
return;
}
}
2按读者XX
例如,查询XX为刁姗姗的读者,界面如图4.7所示:
图4.7查询读者XX界面
§查询用户借阅历史
例如,查询编号为10005的读者,界面如图4.8所示:
图4.8查询读者编号界面
§4.3书籍管理模块
§增加图书
例如,图书馆里原本没有编号为100008的图书,界面如图4.9显示:
图4.9插入图书前界面
插入界面如图4.10所示:
图4.10插入图书界面
插入后再查询,图书馆存在编号为100008的图书,界面如图4.11所示:
图4.11插入图书后界面
源代码:
voidCBookInfoDlg:
:
OnOK()
{
UpdateData(TRUE);
if(m_ID=="")
{
MessageBox("请输入图书编号");
return;
}
if(m_Name=="")
{MessageBox("请输入图书名称");
return;}
CBookbook;
book.setID(m_ID);
book.setName(m_Name);
book.setSort(m_Sort);
book.setAuthor(m_Author);
book.setBarcode(m_Barcode);
book.setInfo(m_Info);
book.setISBN(m_ISBN);
book.setPubDate(m_PubDate);
book.setPubName(m_PubName);
book.setCounts(m_Counts);
book.setPrice(m_Price);
if(m_ID!
=""&&m_Name!
=""&&m_Counts>0&&m_Counts<20)
{
book.sql_insert();
MessageBox("插入成功",MB_OK);
CDialog:
:
OnOK();
}
}
§删除图书
建立在4.11的根底上,现在图书馆里存在100008号图书,下面将100008号图书删除,界面如图4.12所示:
图4.12删除〔挂失〕100008号图书
下面从书库里查询100008号图书,查询结果如图2所示,100008号图书已被删除:
图4.13查询无100008号图书
源代码:
voidCDeleteBookDlg:
:
OnOK()
{
CBookbook;
UpdateData(true);
if(m_BookID=="")
{
MessageBox("输入要删除的读者的编号");
return;
}
book.sql_delete(m_BookID);
MessageBox("挂失成功","提示");
CDialog:
:
OnOK();
}
第五章软件测试
在原有系统的数据有一小局部已输入数据库后,就可以开场对数据库系统进展联合调试,这又称为数据库的试运行。
这一阶段要实际运行数据库应用程序,执行对数据库的各种操作,测试应用程序的功能是否满足设计要求,如果不满足,对应用程序各局部那么要修改、调整,直到到达设计要求为止。
为了设计出有效地测试方案按照下面准那么进展测试:
所有测试都应追溯到用户需求;在完成了需求模型就要着手制定测试方案,在编码之前对所有测试工作进展方案和设计;从小模块开场逐步进展大模块测试,通常先重点测试单个程序模块再转向集合的模块;精心设计测试方案,尽可能充分覆盖程序逻辑使之到达要求的可靠性。
§5.1模块测试
书籍管理模块测试
表5.1书籍管理模块测试表
模块
用例
测试数据
结果
是否与预期相符
增加图书
存书数量〔价格〕输入varchar型
存书数量:
刁姗姗
入库失败
是
存书数量〔价格〕输入int型
存书数量:
10
插入成功
是
出版日期输入char型
出版日期:
20210909
入库失败
是
出版日期输入smalldatetime型
出版日期:
2009-09-09
入库成功
是
删除图书
输入空图书编号
图书编号:
删除失败
是
输入正确的图书编号
图书编号:
100001
删除成功
是
查询模块测试
表5.2查询模块测试表
模块
用例
测试数据
结果
是否与预期相符
查询图书
输入不存在的图书编号
图书编号:
10000000
查出空白
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课程设计 图书馆 管理 系统