图书馆管理系统ER图.docx
《图书馆管理系统ER图.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统ER图.docx(37页珍藏版)》请在冰豆网上搜索。
图书馆管理系统ER图
^
长沙理工大学
《程序设计实践》课程设计报告
图书馆管理系统数据库分析与设计
,
邹松林
学院计通学院专业计算机科学与技术
班级计算机03-05学号27
】
学生姓名邹松林指导教师卢曼莎
课程成绩完成日期2006年9月20号
《
图书馆管理系统数据库分析与设计
学生姓名:
邹松林指导老师:
卢曼莎
摘要:
图书信息管理系统主要由读者信息管理模块,图书信息管理模块,借阅信息管理模块,系统信息管理模块等组成。
其中又各自分成读者注册,证件修改,用户注销,图书查询,操作记录等子模块。
在设计本系统过程中,我们第一步由自顶而下的需求分析概括设计出系统总模块的数据流图,再设计个子模块的相应数据流图,列出数据流信息及数据字典;第二步概念设计在需求分析基础上用E-R图表示出数据及相互间联系,采用先作子图,再合并成初步E-R图,进行修改和重构后得到基本E-R图;第三步逻辑设计,在SQLServer的设计环境下把图书馆管理系统E-R图转化为成逻辑数据模型表示的逻辑模式,同时实现数据模型的优化和数据模式的规范化;第四步进行物理设计设计数据的内模式,确定数据的存储结构,存取路径,存储空间分配等等,具体形式为表,视图,索引的建立。
关键字:
数据库,SQL语言,MSSQLServer,图书管理
~
1需求分析
用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输入和输出。
收集基本数据,数据结构以及数据处理的流程,为后面的具体设计打下基础。
在仔细分析调查有关图书馆管理信息需求的基础上,我们主要考虑以下几个方面的需求:
1)用户需求:
图书用户要求计算机系统和SQLServer所工作的范围;
2)应用资源:
数据库应用的平台包括物理平台和图书等;
3)应用质量和可靠性要求:
包括操作人员素质和系统的纠错能力等
|
项目名称:
图书馆信息管理系统
项目背景和内容概要
对图书馆管理信息系统进行详细地分析后,我们将系统分为以下几个模块:
借阅管理模块、借书证信息管理模块、图书信息管理模块、系统管理模块。
其主要功能如下:
借阅管理模块主要功能如下:
1).可以为读者办理,修改,注销借书证,输入读者借书证基本信息等,定制读者的借阅权限。
2).可以通过借书证查询图书信息、借出图书信息,借阅图书。
3).通过借书证还书,管理员可以通过对借阅信息的管理对到期还未还的书,通过查询读者的借书证信息查询读者联系方式发出催还通知。
借书证信息管理模块主要功能如下:
~
1).读者基本信息的输入,如:
读者姓名、性别、单位等。
2).读者信息的修改、注销等功能。
3).添加新的读者及其信息等。
图书信息管理模块主要功能如下:
1).定制书籍的各种信息管理,如:
书名、作者、出版信息等。
2).书籍信息的修改,新图书的入库管理和图书的注销等。
系统管理模块主要功能如下:
1).用户登录。
'
2).修改密码。
3).添加用户。
系统备份和数据传输模块主要功能如下:
1).备份数据库数据
2).恢复数据库数据
3).网络数据传输
1.3数据流图
@
数据流总体图示
图1-1数据流总体图
办理借书证
图1-2输借书证流图
借书证修改
$
图1-3借书证修改流图
借书证注销
图1-4借书证注销流图
借书系统
不能借书的原因
图1-5借书系统流图
】
检索系统
图1-6检索系统流图
还书系统
图1-7还书系统流图
<
图书档案管理系统
图1-8档案管理流图
数据字典
参数名
类型
、
长度
取值范围
别名
意义
图书书名
字符型
11
SM
图书编号
字符型
11
BB00
SH
*
作者
字符型
10
YZ
出版社
字符型
%
20
CBS
单价
数值型
8
:
DJ
借出日期
日期型
yy-mm-dd
JS
{
还书日期
日期型
yy-mm-dd
HS
借书证号
字符型
、
10
05000000
JSZ
姓名
字符型
20
…
NAME
是否归还
字符型
20
YN
。
性别
字符型
2
SEX
单位
字符型
[
20
DW
发证日期
日期型
yy-mm-dd
|
FZ
已借书册数
字符型
2
YNC
^
是否允许借书
字符型
2
YNS
是或否
类别
字符型
》
20
LB
进册数
数值型
10
$
JC
库存量
数值型
10
CZ
。
操作员编号
数值型
10
CB
操作员姓名
字符型
—
10
CNAME
操作员密码
字符型
15
—
MM
表1数据字典
2概念结构设计
~
这一阶段我们将客户的应用需求抽象为信息世界的结构,即对系统的人、物、事和概念进行人为处理,抽取人们所关心的共同特性,同时把这些特性用概念精确的描述。
我们首先根据需求分析的结果(数据流图、数据字典等)对现实世界的数据进行抽象,设计各个局部E-R图,然后合并成初步E-R图,再进行修改与重构。
局部E-R图
图书信息管理系统主要分为以下几个局部E-R图:
1).借书证处理系统ER图:
…
图2-1借书证处理系统ER图
图中各实体属性如下:
读者档案:
学号,读者姓名,性别,出生日期,借书证号,职业,单位,通讯地址,邮政编码,联系电话
借书证:
借书证号,姓名,性别,办证日期,借阅范围,最大借书量,照片,身份证号
管理员:
管理员编号,管理员姓名,登陆密码
2).借书系统ER图:
图2-2借书系统ER图
}
图中各实体属性如下:
读者:
身份证号,读者姓名,借书证号
借书证:
借书证号,姓名,性别,办证日期(借阅范围,最大借书量,照片,身份证号)
库存信息:
书号,图书编号
借出信息:
图书编号,借书证号,借书日期,归还日期
3).索书系统ER图:
图2-3索书系统ER图
:
图中各实体属性如下:
读者:
读者姓名,借书证号
图书档案:
图书编号,书号,书名,作者,出版单位,出版日期,单价,藏书册书,类别,入库日期
4).还书系统ER图:
图2-4还书系统ER图
图中各实体属性如下:
读者:
学号,读者姓名,借书证号
借书证:
借书证号,姓名,性别,办证日期
库存信息:
书号,图书编号
'
借出信息:
图书编号,借书证号,借书日期,归还日期
管理员:
操作员编号,管理员姓名,登陆密码
5).图书档案管理系统ER图:
图2-5档案管理系统ER图
图中各实体属性如下:
管理员:
操作员编号,管理员姓名,登陆密码
库存信息:
书号,图书编号
图书档案:
图书编号,书号,书名,作者,出版单位,出版日期,单价,类别,入库日期
入库清单:
入库日期,图书编号,管理员编号,书名
\
6).整体E-R图
图2-6整体ER图
图中各实体属性如下:
<
读者档案:
学号,读者姓名,性别,借书证号,单位
借书证:
借书证号,姓名,性别,办证日期
管理员:
操作员编号,管理员姓名,登陆密码
库存信息:
书号,图书编号
借出信息:
图书编号,借书证号,借书日期,归还日期
图书档案:
书号,书名,作者,出版单位,出版日期,单价,类别,藏书册书,图书编号入库日期
实体描述
【
说明:
1、由于读者的信息可以在借书证办理档案中查到所以合并为借书证办理档案
2.将借出书库和入库清单分别合并到了借书登记表和图书信息表中
实体名称
借书证
数据库表
借书证信息表
实体说明
读者和借书证信息
>
实体属性列表
借书证号,姓名,性别,办证日期,最大借书量,学号
实体名称
管理员
!
数据库表
tz_passwd
实体说明
管理员的信息
实体属性列表
管理员编号,管理员姓名,登陆密码
\
实体名称
读者
数据库表
借书登记表
实体说明
图书馆未被借出的图书信息
实体属性列表
【
书号,图书编号
实体名称
读者
数据库表
还书登记表
、
实体说明
图书馆未被借出的图书信息
实体属性列表
书号,图书编号
实体名称
)
图书档案
数据库表
图书信息表
实体说明
馆藏图书信息
实体属性列表
书号,书名,作者,出版单位,出版日期,版次,单价,类别,图书编号,入库日期
。
表2实体描述
关系描述(已包含在E-R图中)
实体--关系调整(实体描述表中已消除冗余实体和关系)
数据项定义
!
1).图书库的数据项定义:
名称
别名
类型
长度
其他
图书书名
SM
-
字符型
20
普通索引
书号
SH
数值型
20
主索引
)
译者
YZ
字符型
10
出版社
CBS
字符型
…
20
单价
DJ
数值型
8
出版时间
|
CBSJ
日期型
8
表3图书库数据项定义
2).借、还书库的数据项定义:
名称
别名
]
类型
长度
其他
姓名
XSXM
字符型
10
普通索引
&
借书证号
JSZH
数值型
8
主索引
图书书名
SM
字符型
…
20
图书编号
SH
字符型
20
借书日期
<
JSRQ
日期型
8
还书日期
HSRQ
日期型
8
—
表4借、还书库数据项定义
3).借书证库的数据项定义:
名称
别名
类型
长度
其他
|
姓名
JSXM
字符型
10
普通索引
借书证号
JSGH
字符型
)
6
主索引
性别
XB
字符型
4
单位
#
DW
字符型
8
表5借书证库数据项定义
4).操作员库的数据项定义:
名称
别名
:
类型
长度
其他
操作员编号
CZYYHH
字符型
10
#
操作员用户名
CZYYHM
字符型
10
口令
KL
字符型
…
10
表6操作员库数据项定义
数据表(库)描述
图书数据库=图书书名+图书编号+著者+出版社+单价+书号+出版时间
借书库=姓名+借书证号++教师姓名+图书名称+借书日期+还书日期
教师数据库=姓名+借书证号+单位
操作员库=操作员用户名+口令
…
系统功能模块图
软件功能结构图:
工商学院图书信息管理系统
系统管理
基本情况录入
^
借、还书管理
查询、统计
初始化
数据备份
操作员管理
一般用户登陆
-
新图书登记
新期刊登记
借书登记
还书登记
图书库藏查询
】
借书证库查询
图书查询
借书查询
还书查询
图2-7软件功能结构
系统流程图:
图书管理系统
[
读者查询系统
图书(期刊)库
查询
图2-8系统流程图
3逻辑结构设计
)
为了能够用计算机和SQLServer实现用户需求,可将概念结构转化为相应的数据模型,即是设计逻辑结构。
即由E-R图建立了适当的表,并按不同的范式的定义,对表进行规范化。
对规范化的表,更据用户需求建立数据库结构。
确定数据依赖
关系名
主要函数依赖
管理员
BCNF
\
管理员编号—→(管理员姓名,登陆密码)
库存信息
BCNF
图书编号—→书名等
借出信息
BCNF
(图书编号)—→(借书日期,借书证号,归还日期)
借书证
/
2NF
借书证号—→(借书证号,姓名,性别,单位,发证日期,已借书册书,是否容许借书)
以后扩展:
身份证号—→(姓名,性别,照片)
图书档案
2NF
图书编号—→(书号,书名,作者,出版单位,出版日期,版次,单价,内容提要,分类号,索书号,所在书库,入库日期)
入库清单
BCNF
】
图书编号—→(管理员编号,书名,入库日期)
还书信息
BCNF
借书证号—→(姓名,图书编号,书名,借出日期,还书日期)
数据依赖的优化与调整
3.2.1关系模式的优化
·
(1)借书证信息:
借书证(借书证号,姓名,性别,单位,发证日期,已借书册书,是否容许借书)满足BCNF范式
(2)管理员信息:
管理员信息(管理员编号,管理员姓名,登陆密码)满足BCNF范式
(3)库存信息:
库存信息(图书编号,书号)满足BCNF范式
(4)借书信息:
借书信息(图书编号,借书证号,姓名,书名,借书日期,是否归还)满足BCNF范式
(5)还书信息:
还书信息(姓名,图书编号,书名,借出日期,还书日期)满足BCNF范式
(6)图书信息:
图书档案(图书编号,书名,作者,图书类别,单价,出版社,进册书,库存量)均满足BCNF范式
(7)入库清单:
入库清单(图书编号,管理员编号,书名,入库日期)满足BCNF范式
}
3.2.2关系模式的调整
虽然在关系模式的优化中将各种关系满足了BCNF范式的要求,但是对某些数据库的操作却并没有简化,相反导致了数据库查询等数据库操作的效率低下。
于是对‘借书证信息’,和‘图书信息’作出了以下调整。
(1)借书证信息:
借书证(借书证号,姓名,性别,办证日期,单位,已借书册数,借书许可,)(3NF)
(2)图书信息:
图书档案(图书编号,书名,作者,出版单位,单价,图书类别,进册数,入库量)(2NF)
4代码设计
图书管理系统部分源代码
、
[图书外借情况查询代码]
tempstr=allt"%"+tempstr+"%"
if"借书证号"
select*from借书登记表where借书登记表.借书证号liketempstrintocursortempcursor
if"姓名"
—
select*from借书登记表where借书登记表.姓名liketempstrintocursortempcursor
if"图书编号"
select*from借书登记表where借书登记表.图书编号liketempstrintocursortempcursor
if"书名"
|
select*from借书登记表where借书登记表.书名liketempstrintocursortempcursor
if"是否归还"
select*from借书登记表where借书登记表.是否归还liketempstrintocursortempcursor
""
-
[图书外借和归还情况查询代码]
tempstr=allt"%"+tempstr+"%"
if"借书证号"
select*from还书登记表where还书登记表.借书证号liketempstrintocursortempcursor
if"姓名"
#
select*from还书登记表where还书登记表.姓名liketempstrintocursortempcursor
if"图书编号"
select*from还书登记表where还书登记表.图书编号liketempstrintocursortempcursor
if"书名"
select*from还书登记表where还书登记表.书名liketempstrintocursortempcursor
)
""
[存储过程代码]
procedureridelete
localllretval
llretval=.t.
?
if(isrlocked()and!
deleted())or!
rlock()
llretval=.f.
else
if!
deleted()
delete
ifcursorgetprop('buffering')>1
=tableupdate()
endif
^
llretval=pnerror=0
endifnotalreadydeleted
endif
unlockrecord(recno())
returnllretval
procedureriupdate
lparameterstcfieldname,tcnewvalue,tccascadeparent
)
localllretval
llretval=.t.
ifisrlocked()or!
rlock()
llretval=.f.
else
ifeval(tcfieldname)<>tcnewvalue
privatepccascadeparent
pccascadeparent=upper(iif(type("tccascadeparent")<>"c","",tccascadeparent))
《
replace(tcfieldname)withtcnewvalue
ifcursorgetprop('buffering')>1
=tableupdate()
endif
llretval=pnerror=0
endifvaluesdon'talreadymatch
endifit'slockedalready,oriwasabletolockit
unlockrecord(recno())
&
returnllretval
procedurerierror
parameterstnerrno,tcmessage,tccode,tcprogram
locallnerrorrows,lnxx
lnerrorrows=alen(gaerrors,1)
iftype('gaerrors[lnerrorrows,1]')<>"l"
dimensiongaerrors[lnerrorrows+1,alen(gaerrors,2)]
"
lnerrorrows=lnerrorrows+1
endif
gaerrors[lnerrorrows,1]=tnerrno
gaerrors[lnerrorrows,2]=tcmessage
gaerrors[lnerrorrows,3]=tccode
gaerrors[lnerrorrows,4]=""
lnxx=1
dowhile!
empty(program(lnxx))
~
gaerrors[lnerrorrows,4]=gaerrors[lnerrorrows,4]+","+;
program(lnxx)
lnxx=lnxx+1
enddo
gaerrors[lnerrorrows,5]=pcparentdbf
gaerrors[lnerrorrows,6]=pnparentrec
gaerrors[lnerrorrows,7]=pcparentid
gaerrors[lnerrorrows,8]=pcparentexpr
·
gaerrors[lnerrorrows,9]=pcchilddbf
gaerrors[lnerrorrows,10]=pnchildrec
gaerrors[lnerrorrows,11]=pcchildid
gaerrors[lnerrorrows,12]=pcchildexpr
returntnerrno
procedureriopen
!
parameterstctable,tcorder
locallccurwkarea,lcnewwkarea,lninusespot
lninusespot=atc(tctable+"*",pcricursors)
iflninusespot=0
lccurwkarea=select()
select0
lcnewwkarea=select()
ifnotempty(tcorder)
。
use(tctable)againorder(tcorder);
alias("__ri"+ltrim(str(select())))share
else
use(tctable)againalias("__ri"+ltrim(str(select())))share
endif
ifpnerror=0
pcricursors=pcricursors+upper(tctable)+""+str(select(),5)
else
—
lcnewwkarea=0
endifsomethingbadhappenedwhileattemptingtoopenthefile
else
lcnewwkarea=val(substr(pcricursors,lninusespot+len(tctable)+1,5))
pcricursors=strtran(pcricursors,upper(tctable)+"*"+str(lcnewwkarea,5),;
upper(tctable)+""+str(lcnewwkarea,5))
ifnotempty(tcorder)
setorderto(tcorder)in(lcnewwkarea)
@
endifsentanorder
ifpnerror<>0
lcnewwkarea=0
endifsomethingbadhappenedwhilesettingorder
endif
return(lcnewwkarea)
procedureriend
parameterstlsuccess
)
locallnxx,lnspot,lcworkarea
iftlsuccess
endtransaction
else
setdeletedoff
rollback
setdeletedon
endif
$
ifempty(pcriolderror)
onerror
else
onerror&pcriolderror.
endif
forlnxx=1tooccurs("*",pcricursors)
lnspot=atc("*",pcricursors,lnxx)+1