图书馆管理系统ER图Word文档格式.docx
《图书馆管理系统ER图Word文档格式.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统ER图Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
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
图书编号
SH
作者
10
YZ
出版社
20
CBS
单价
数值型
8
DJ
借出日期
日期型
yy-mm-dd
JS
还书日期
HS
借书证号
JSZ
姓名
NAME
是否归还
YN
性别
2
SEX
单位
DW
发证日期
FZ
已借书册数
YNC
是否允许借书
YNS
是或否
类别
LB
进册数
JC
库存量
CZ
操作员编号
CB
操作员姓名
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).图书库的数据项定义:
名称
其他
普通索引
书号
主索引
译者
出版时间
CBSJ
表3图书库数据项定义
2).借、还书库的数据项定义:
XSXM
JSZH
借书日期
JSRQ
HSRQ
表4借、还书库数据项定义
3).借书证库的数据项定义:
JSXM
JSGH
6
XB
4
表5借书证库数据项定义
4).操作员库的数据项定义:
CZYYHH
操作员用户名
CZYYHM
口令
KL
表6操作员库数据项定义
数据表(库)描述
图书数据库=图书书名+图书编号+着者+出版社+单价+书号+出版时间
借书库=姓名+借书证号++教师姓名+图书名称+借书日期+还书日期
教师数据库=姓名+借书证号+单位
操作员库=操作员用户名+口令
系统功能模块图
软件功能结构图:
工商学院图书信息管理系统
系统管理
基本情况录入
借、还书管理
查询、统计
初始化
数据备份
操作员管理
一般用户登陆
新图书登记
新期刊登记
借书登记
还书登记
图书库藏查询
借书证库查询
图书查询
借书查询
还书查询
图2-7软件功能结构
系统流程图:
图书管理系统
读者查询系统
图书(期刊)库
查询
图2-8系统流程图
3逻辑结构设计
为了能够用计算机和SQLServer实现用户需求,可将概念结构转化为相应的数据模型,即是设计逻辑结构。
即由E-R图建立了适当的表,并按不同的范式的定义,对表进行规范化。
对规范化的表,更据用户需求建立数据库结构。
确定数据依赖
关系名
主要函数依赖
管理员
BCNF
管理员编号—→(管理员姓名,登陆密码)
库存信息
BCNF
图书编号—→书名等
借出信息
(图书编号)—→(借书日期,借书证号,归还日期)
2NF
借书证号—→(借书证号,姓名,性别,单位,发证日期,已借书册书,是否容许借书)
以后扩展:
身份证号—→(姓名,性别,照片)
图书编号—→(书号,书名,作者,出版单位,出版日期,版次,单价,内容提要,分类号,索书号,所在书库,入库日期)
入库清单
图书编号—→(管理员编号,书名,入库日期)
还书信息
借书证号—→(姓名,图书编号,书名,借出日期,还书日期)
数据依赖的优化与调整
3.2.1关系模式的优化
(1)借书证信息:
借书证(借书证号,姓名,性别,单位,发证日期,已借书册书,是否容许借书)满足BCNF范式
(2)管理员信息:
管理员信息(管理员编号,管理员姓名,登陆密码)满足BCNF范式
(3)库存信息:
库存信息(图书编号,书号)满足BCNF范式
(4)借书信息:
借书信息(图书编号,借书证号,姓名,书名,借书日期,是否归还)满足BCNF范式
(5)还书信息:
还书信息(姓名,图书编号,书名,借出日期,还书日期)满足BCNF范式
(6)图书信息:
图书档案(图书编号,书名,作者,图书类别,单价,出版社,进册书,库存量)均满足BCNF范式
(7)入库清单:
入库清单(图书编号,管理员编号,书名,入库日期)满足BCNF范式
3.2.2关系模式的调整
虽然在关系模式的优化中将各种关系满足了BCNF范式的要求,但是对某些数据库的操作却并没有简化,相反导致了数据库查询等数据库操作的效率低下。
于是对‘借书证信息’,和‘图书信息’作出了以下调整。
借书证(借书证号,姓名,性别,办证日期,单位,已借书册数,借书许可,)(3NF)
(2)图书信息:
图书档案(图书编号,书名,作者,出版单位,单价,图书类别,进册数,入库量)(2NF)
4代码设计
图书管理系统部分源代码
[图书外借情况查询代码]
tempstr="
%"
+tempstr+"
借书证号"
select*from借书登记表where借书登记表.借书证号liketempstrintocursortempcursor
endif
姓名"
select*from借书登记表where借书登记表.姓名liketempstrintocursortempcursor
endif
图书编号"
select*from借书登记表where借书登记表.图书编号liketempstrintocursortempcursor
书名"
select*from借书登记表where借书登记表.书名liketempstrintocursortempcursor
是否归还"
select*from借书登记表where借书登记表.是否归还liketempstrintocursortempcursor
[图书外借和归还情况查询代码]
select*from还书登记表where还书登记表.借书证号liketempstrintocursortempcursor
select*from还书登记表where还书登记表.姓名liketempstrintocursortempcursor
select*from还书登记表where还书登记表.图书编号liketempstrintocursortempcursor
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
unlockrecord(recno())
returnllretval
procedureriupdate
lparameterstcfieldname,tcnewvalue,tccascadeparent
ifisrlocked()or!
ifeval(tcfieldname)<
>
tcnewvalue
privatepccascadeparent
pccascadeparent=upper(iif(type("
tccascadeparent"
)<
"
c"
"
tccascadeparent))
replace(tcfieldname)withtcnewvalue
endifvaluesdon'
talreadymatch
endifit'
slockedalready,oriwasabletolockit
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
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
use(tctable)againalias("
ifpnerror=0
pcricursors=pcricursors+upper(tctable)+"
+str(select(),5)
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))
setorderto(tcorder)in(lcnewwkarea)
endifsentanorder
ifpnerror<
endifsomethingbadhappenedwhilesettingorder
return(lcnewwkarea)
procedureriend
parameterstlsuccess
locallnxx,lnspot,lcworkarea
iftlsuccess
endtransaction
setdeletedoff
rollback
setdeletedon
ifempty(pcriolderror)
onerror
onerror&
pcriolderror.
forlnxx=1tooccurs("
lnspot=atc("
pcricursors,lnxx)+1
usein(val(substr(pcricursors,lnspot,5)))
endfor
ifpcoldcompat="
on"
setcompatibleon
ifpcolddele="
off"
ifpcoldexact="
setexacton
ifpcoldtalk="
settalkon
docase
caseempty(pcolddbc)
setdatato
casepcolddbc<
dbc()
setdatato(pcolddbc)
endcas