图书管理系统项目文档.docx
- 文档编号:4745498
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:18
- 大小:3.82MB
图书管理系统项目文档.docx
《图书管理系统项目文档.docx》由会员分享,可在线阅读,更多相关《图书管理系统项目文档.docx(18页珍藏版)》请在冰豆网上搜索。
图书管理系统项目文档
图书管理系统项目文档
实验人员:
08382047网络工程黄忠
08382044网络工程刘光林
数据库设计部分是应用系统中非常重要的一个环节,数据库设计的优劣将直接影响应用系统的运行的效率。
所以图书管理系统数据库的设计师图书管理系统中首要完成的工作。
本系统开发平台VisualStudio2010,MicrosoftSQLServer2008,Windows7,编程语言为C#。
一、图书管理系统功能分析
图书管理系统可以供学校,书店等的管理员使用,用于日常的读者管理,图书管理,借书,还书等操作,另外还可以供读者查询图书信息及其借阅情况等。
本系统主要功能包括登录,图书查询、借阅查询、读者管理、图书管理、借阅管理等功能模块。
1、登录功能
图书管理系统可供读者和管理员使用,所以需要设置登录者的身份,并赋予不同身分的登录者以不同的权限,读者只能查看借阅情况和图书馆藏情况,管理员分三类:
读者管理员、图书管理员、超级管理员。
读者管理员只能进行读者管理操作,图书管理员只能进行图书管理操作,超级管理员可以进行图书查询、借书查询、读者管理、图书管理、借书管理、还书管理、数据备份等操作。
2、读者管理
读者主要有借书证号、密码、姓名、性别、出生日期、专业、借书量、照片、联系方式和备注属性。
借书证号是唯一的,借书量不能超过10。
只有读者管理员和超级管理员才能进行读者管理,包括添加,修改,删除。
在修改读者信息时,不能修改借书证号和借书量,删除读者信息时,如果该读者借过书尚未归还则不能删除读者。
3、图书管理
图书主要有ISBN、书名、作者、出版社、出版年月、价格、复本量、库存量、分类号、内容提要和封面等属性。
每一种图书的ISBN都是唯一的,库存量不能大于复本量。
只有图书管理员和超级管理员才能进行图书管理,其操作包括添加图书、修改图书、删除图书。
添加新书时,系统自动生成每本图书的ID及在借情况,再借情况默认为否。
删除图书时如果该图书已经借出则不允许删除图书记录。
4、图书查询
用户可以根据图书ISBN、书名、作者、出版社进行模糊查询,查询结果将分页显示。
5、借书管理
借书管理只有超级管理员才能进行。
用户可以输入读者的借书证号查看其借书记录,确认读者没有在借相同的ISBN的书,然后输入要借的图书的ISBN、图书ID,判断图书是否存在、是否再借等情况、如果可借则完成结束操作,借书时间登记为系统当前时间,规定还书期限为60天,同时系统自动将读者的借书量加1,图书库存量减1,图书的再借情况为再借。
6、借书查询
一读者身份登录系统时,用户点击借书查询模块可以查看自己的借书情况。
以管理员身份登录时,用户输入读者的借书证号也可以查看该读者的结束情况。
7、还书管理
还书操作只能由超级管理员来进行。
输入读者的借书证号即可查看读者的现有的借书记录。
用户输入图书ID后单击还书按钮即可进行还书操作,与此同时,系统自动将读者的借书量减1,图书库存量加1,图书在借情况为否,并根据删除的图书记录自动生成一条还书记录。
8、数据备份
超级管理员可以指定一个后缀名为.bak的备份文件,然后将图书管理数据库的所有数据备份为该文件。
二、图书管理系统数据库设计
通过以上的功能分析,现阶段可以进行图书管理数据库的设计。
1、图书管理数据库的E-R模型
通过理解图书管理系统所要实现的功能,可以得出图书管理数据库包括以下实体:
管理员、读者、图书、在借情况。
✧管理员的属性:
角色名、密码、备注;
✧读者的属性:
借书证号、密码、姓名、性别、出生日期、专业、借书量、照片、备注、联系方式;
✧图书的属性:
ISBN、书名、作者、出版社、出版年月、价格、复本量、库存量、分类号、内容提要、封面照片;
✧在借情况的属性:
图书ID、是否在借。
其E-R模型如下图:
2、图书管理数据库的逻辑结构设计
在图书管理的各个实体中,管理员命名为Administrator,主码为“角色名”,读者命名为TReader,主码为“借书证号”,图书命名为TBook,主码为“ISBN”,在借情况命名为TBLend,主码为“图书ID”。
实体集“读者”和“图书”之间通过联系“借阅(命名为TLend)”表示借阅关系,通过联系“归还(命名为HLend)”表示归还关系。
所以由以上E-R模型可得到如下关系模式:
Administrator(角色名,密码,备注)
TReader(借书证号、密码、姓名、性别、出生日期、专业、借书量、照片、备注、联系方式)
TBook(ISBN、书名、作者、出版社、出版年月、价格、复本量、库存量、分类号、内容提要、封面照片)
TBLend(图书ID,ISBN,是否借出)
TLend(借书证号,ISBN,图书ID,借出时间,应还时间)
HLend(编号,借书证号,ISBN,图书ID,借书时间,还书时间)
3、图书管理数据库的物理结构设计
从以上关于图书管理数据库的逻辑结构设计的讨论可知,可以在图书管理数据库中创建读者信息表TReader,其包含的字段有:
借书证号、密码、姓名、性别、出生日期、专业、借书量、照片、备注、联系方式。
其中,“借书证号”可以用学号表示,是8位定长字符型数据,使用char(8);“密码”记录读者的登录密码,可以是20位不定长字符型数据,吃用varchar(20);“姓名”一般不超过4个中文字符,所以可以是8位定长字符型数据,使用char(8);“性别”只有“男”、“女”两个值,所以可以使用bit类型,1表示“男”,0表示“女”;“出生日期”是日期时间类型数据,使用date;“专业”使用12位定长字符型数据,使用char(12);“借书量”是整形数据,使用int;“照片”存储读者的照片信息,使用varbinary(MAX);“备注”记录读者的额外信息,使用varchar(500);“联系方式”记录读者的E-mail、电话、住址等信息,使用XML片段的方式存储。
综上分析可得TReader表结构:
读者信息表(TReader)结构
字段名
类型与宽度
是否主键
是否允许为空
借书证号
Char(8)
是
否
密码
Varchar(20)
否
否
姓名
Char(8)
否
否
性别
Bit
否
否
出生日期
Datetime
否
否
专业
Char(12)
否
否
借书量
Int
否
否
照片
Varbinary(MAX)
否
是
备注
varchar(500)
否
是
联系方式
XML
否
是
同理可得出其他表的表结构:
图书信息表(TBook)结构
字段名
类型与宽度
是否主键
是否允许为空
ISBN
Char(18)
是
否
书名
Char(40)
否
否
作者
Char(16)
否
否
出版社
Char(30)
否
否
出版年月
Char(10)
否
是
价格
Float
否
否
复本量
Int
否
否
库存量
Int
否
否
分类号
Char(18)
否
是
内容提要
Varchar(200)
否
是
封面照片
Varbinary(MAX)
否
是
借阅表(TLend)结构
字段名
类型与宽度
是否主键
是否允许为空
借书证号
Char(8)
否
否
ISBN
Char(18)
否
否
图书ID
Char(10)
是
否
借书时间
Datetime
否
否
应还时间
Datetime
否
否
还书记录表(HLend)结构
字段名
类型与宽度
是否主键
是否允许为空
编号
Int
是
否
借书证号
Char(8)
否
否
ISBN
Char(18)
否
否
图书ID
Char(10)
否
否
借书时间
Datetime
否
否
还书时间
Datetime
否
否
图书在借表(TBLend)结构
字段名
类型与宽度
是否主键
是否允许为空
图书ID
Char(10)
是
否
ISBN
Char(18)
否
否
是否在借
Bit
否
否
三、图书管理系统的数据库及表的创键
通过以上讨论,现在可以创建图书管理系统所需的数据库及其表,T-SQL语句如下:
✧创建数据库
createdatabaseMBOOK
on
primary
(
NAME='MBOOK',
FILENAME='D:
\data\MBOOK.mdf',
SIZE=5MB,
MAXSIZE=100MB,
FILEGROWTH=2MB
)
LOGON
(
NAME='MBOOK_log',
FILENAME='D:
\data\MBOOK_log.ldf',
SIZE=1MB,
FILEGROWTH=10%
);
✧创建表
✓创建TReader表
useMBOOK
go
createtableTReader
(
借书证号char(6)notnullprimarykey,
密码varchar(20)notnull,
姓名char(8)notnull,
性别bitnotnull,
出生时间datetimenotnull,
专业char(12)notnull,
借书量intnotnulldefault0,
照片varbinary(MAX)null,
备注varchar(200)null,
联系方式xmlnull
)
✓创建TBook表
createtableTBook
(
ISBNchar(18)notnullprimarykey,
书名char(40)notnull,
作译者char(16)notnull,
出版社char(30)notnull,
出版年月char(10)null,
价格floatnotnull,
复本量intnotnull,
库存量intnotnull,
分类号char(18)null,
内容提要varchar(200)null,
封面照片varbinary(MAX)null
)
✓创建TLend表
createtableTLend
(
借书证号char(8)notnull,
ISBNchar(18)notnull,
图书IDchar(10)notnullprimarykey,
借书时间datetimenotnull,
应还时间AS借书时间+5
)
✓创建HLend表
createtableHLend
(
编号intnotnullidentity(1,1)primarykey,
借书证号char(6)notnull,
ISBNchar(18)notnull,
图书IDchar(10)notnull,
借书时间datetimenotnull,
还书时间datetimenotnull
)
✓创建TBLend表
createtableTBlend
(
图书IDchar(10)notnullprimarykey,
ISBNchar(18)notnull,
是否借出bitnotnull
)
✓创建Administrator表
createtableAdministrator
(
角色名char(20)notnullprimarykey,
密码varchar(20)notnull,
备注varchar(100)null
)
四、图书管理数据库表数据的完整性约束
1、图书管理数据库列的完整性
图书管理数据库列的完整性包括:
列的数据类型需要与定义的一致,列的为空性,默认值,列的内容是否符合要求等。
解决列的内容是否符合要求使用CHECK约束。
在TReader表中,“借书量”的值必须大于等于0小于等于10;TBook表中库存量必须小于等于复本量。
如下:
useMBOOK
go
altertableTReader
addcheck(借书量>=0AND借书量<=5)
go
altertableTBook
addconstraintCK_TBookcheck(库存量<=复本量)
2、图书管理数据库行的完整性
图书管理数据库中的数据行也需要进行完整性约束,比如,借书证号应该是唯一的,数据库系统不允许存在两个或两个以上具有相同的借书证号的读者记录。
图书管理数据库行的完整性可以通过索引、主键、唯一键、或者IDENTITY属性来实现。
在设计表的时候已经定义过主键、索引和IDENTITY属性,为了使图书管理数据库更完善,规定读者的密码在表中也必须是唯一的,所以需要在读者信息表的“密码”列创建一个UNIQUE约束。
如下:
USEMBOOK
GO
ALTERTABLETReader
ADDUNIQUENONCLUSTERED(密码)
3、图书管理数据库表的完整性
在图书管理数据库中,图书借阅表TLend通过“借书证号”与读者信息表TReader相关联,通过“ISBN”与图书信息表相关联。
所以需要通过图书管理数据库表的完整性实现的功能是:
当向TLend插入借书记录时,借书证号在TReader表中必须存在,ISBN在TBook中也必须存在。
当删除Treader表中读者记录或者TBook表中图书记录时,存在借阅记录的话,则不能删除该读者或图书记录。
通过定义TLend表和TReader、TBook表间的参照关系来实现图书管理数据库表的完整性。
TReader表和TBook是主表,TLend是从表。
如下:
useMBOOK
go
altertableTLend
addforeignkey(借书证号)
referencesTReader(借书证号)
go
altertableTLend
addforeignkey(ISBN)
referencesTBook(ISBN)
五、图书管理数据库的功能实现
1、生成图书在借情况的功能
当向图书信息表TBook添加一种新书时,需要在图书在借情况表中生成该图书的每本书的图书ID和在借情况。
此功能用存储功能来实现,存储过程名称为BookID_Generate,参数为ISBN,count(复本量)、firstID。
使用循环想TBLend中插入count条记录,图书ID的起始值为firstID,之后每增加一条记录图书ID值加1.如下:
useMBOOK
go
createprocedureBookID_Generate@in_ISBNchar(18),@countint,@firstIDchar(10)
as
begin
while@count>0
begin
insertintoTBlendvalues(@firstID,@in_ISBN,0)
set@firstID=@firstID+1
set@count=@count-1
end
end
2、图书借阅功能
根据读者的借书证号、图书的ISBN、图书ID,以及实际的图书管理情况向图书管理数据库的TLend添加借书记录,读者的借书量和图书的库存量要相应的变化。
思路如下图:
命令如下:
set@out_str='图书库存量为0'
return0
end
/*判断是否借过该书*/
if@in_ISBNin(selectISBNfromTLendwhere借书证号=@in_ReaderID)
begin
set@out_str='该读者已经借过该书'
return0
end
/*判断是否已经被借*/
ifexists(select*fromTLendwhere图书ID=@in_BookID)
begin
set@out_str='该图书ID存在'
return0
end
begintran/*开始一个事务*/
/*插入借书记录*/
INSERTINTOTLend(借书证号,ISBN,图书ID,借书时间)
values(@in_ReaderID,@in_ISBN,@in_BookID,GETDATE())
if@@ERROR>0
begin
rollbacktran
set@out_str='执行过程中遇到错误'
return0
end
/*修改借书量*/
updateTReaderset借书量=借书量+1where借书证号=@in_ReaderID
if@@ERROR>0
begin
rollbacktran
set@out_str='执行过程中遇到错误'
return0
end
/*修改库存量*/
updateTBookset库存量=库存量-1whereISBN=@in_ISBN
if@@ERROR>0
begin
rollbacktran
set@out_str='执行过程中遇到错误'
return0
end
/*修改图书借出情况*/
updateTBlendset是否借出=1where图书ID=@in_BookID
if@@ERROR=0
begin
committran
set@out_str='借书成功'
return0
end
else
if@@ERROR>0
begin
rollbacktran
set@out_str='执行过程中遇到错误'
return0
end
end
3、同步删除图书借出情况功能
在TBook表中删除一条图书记录时,同时删除TBLend表中与该书相关的记录。
该功能使用在TBook表中定义删除触发器的方法实现。
触发器名称为Book_delete,触发器类型为DML,在对TBook表进行了DELETE操作后激活。
如下:
useMBOOK
go
createtriggerTBook_deleteonTBook
afterdelete
as
deletefromTBlendwhereISBN=(selectISBNFROMdeleted)
4、图书归还功能
当读者归还图书时,即删除借阅表TLend中的一条记录时,读者信息表中该读者的借书量减1,图书信息表中该书的库存量加1,图书在借情况的是否借出为否,还书记录表添加一条该读者的还书记录。
该功能用在TLend表定义触发器的方法实现,触发器名称为TLend_delete,触发器类型为DML,在对TLend进行操作后激活。
如下:
createtriggerTLend_deleteonTLend
afterdelete
as
begin
declare@ReaderIDchar(6),@ISBNchar(18),@BookIDchar(10),@LTimedatetime
declarecur_returncursor
for
select借书证号,ISBN,图书ID,借书时间fromdeleted
opencur_return
fetchnextfromcur_returninto@ReaderId,@ISBN,@BookID,@LTime
while@@fetch_status=0
begin
updateTReaderset借书量=借书量-1where借书证号=@ReaderID
updateTBookset库存量=库存量+1whereISBN=@ISBN
updateTBlendset是否借出=0where图书ID=@BookID
insertintoHLend(借书证号,ISBN,图书ID,借书时间,还书时间)
values(@ReaderID,@ISBN,@BookID,@LTime,getdate())
fetchnextfromcur_returninto@ReaderID,@ISBN,@BookID,@LTime
end
closecur_return
deallocatecur_return
end
5、统计借书次数功能
图书管理员输入读者的借书证号,可以统计读者总共借过多少次书,包括借过归还和在借的。
使用用户自定义的函数实现,函数名为L_count。
使用借书证号作为参数,名称为ReaderID,通过查询借阅表TLend和还书记录表HLend得到借书次数总数。
如下:
useMBOOK
go
createfunctionL_count(@ReaderIDchar(6))
returnsint
as
begin
declare@count1int,@count2int,@sum_countint
select@count1=count(借书证号)
fromTLend
where借书证号=@ReaderID
select@count2=count(借书证号)
fromHLend
where借书证号=@ReaderID
set@sum_count=@count1+@count2
return@sum_count
end
六、界面截图:
登录界面:
图书查询:
借书查询:
借书管理:
还书管理:
读者管理:
图书管理:
数据备份:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统 项目 文档