图书管理系统项目文档Word格式文档下载.docx
《图书管理系统项目文档Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《图书管理系统项目文档Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
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)
姓名
性别
Bit
出生日期
Datetime
专业
Char(12)
借书量
Int
照片
Varbinary(MAX)
备注
varchar(500)
联系方式
XML
同理可得出其他表的表结构:
图书信息表(TBook)结构
ISBN
Char(18)
书名
Char(40)
作者
Char(16)
出版社
Char(30)
出版年月
Char(10)
价格
Float
复本量
库存量
Int
分类号
内容提要
Varchar(200)
封面照片
借阅表(TLend)结构
图书ID
借书时间
应还时间
还书记录表(HLend)结构
编号
还书时间
图书在借表(TBLend)结构
是否在借
三、图书管理系统的数据库及表的创键
通过以上讨论,现在可以创建图书管理系统所需的数据库及其表,T-SQL语句如下:
✧创建数据库
createdatabaseMBOOK
on
primary
(
NAME='
MBOOK'
FILENAME='
D:
\data\MBOOK.mdf'
SIZE=5MB,
MAXSIZE=100MB,
FILEGROWTH=2MB
)
LOGON
MBOOK_log'
\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,
图书IDchar(10)notnull,
还书时间datetimenotnull
✓创建TBLend表
createtableTBlend
是否借出bitnotnull
✓创建Administrator表
createtableAdministrator
角色名char(20)notnullprimarykey,
密码varchar(20)notnull,
备注varchar(100)null
四、图书管理数据库表数据的完整性约束
1、图书管理数据库列的完整性
图书管理数据库列的完整性包括:
列的数据类型需要与定义的一致,列的为空性,默认值,列的内容是否符合要求等。
解决列的内容是否符合要求使用CHECK约束。
在TReader表中,“借书量”的值必须大于等于0小于等于10;
TBook表中库存量必须小于等于复本量。
如下:
altertableTReader
addcheck(借书量>
=0AND借书量<
=5)
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是从表。
altertableTLend
addforeignkey(借书证号)
referencesTReader(借书证号)
addforeignkey(ISBN)
referencesTBook(ISBN)
五、图书管理数据库的功能实现
1、生成图书在借情况的功能
当向图书信息表TBook添加一种新书时,需要在图书在借情况表中生成该图书的每本书的图书ID和在借情况。
此功能用存储功能来实现,存储过程名称为BookID_Generate,参数为ISBN,count(复本量)、firstID。
使用循环想TBLend中插入count条记录,图书ID的起始值为firstID,之后每增加一条记录图书ID值加1.如下:
createprocedureBookID_Generate@in_ISBNchar(18),@countint,@firstIDchar(10)
as
begin
while@count>
begin
insertintoTBlendvalues(@firstID,@in_ISBN,0)
set@firstID=@firstID+1
set@count=@count-1
end
2、图书借阅功能
根据读者的借书证号、图书的ISBN、图书ID,以及实际的图书管理情况向图书管理数据库的TLend添加借书记录,读者的借书量和图书的库存量要相应的变化。
思路如下图:
命令如下:
set@out_str='
图书库存量为0'
return0
/*判断是否借过该书*/
if@in_ISBNin(selectISBNfromTLendwhere借书证号=@in_ReaderID)
该读者已经借过该书'
/*判断是否已经被借*/
ifexists(select*fromTLendwhere图书ID=@in_BookID)
该图书ID存在'
begintran/*开始一个事务*/
/*插入借书记录*/
INSERTINTOTLend(借书证号,ISBN,图书ID,借书时间)
values(@in_ReaderID,@in_ISBN,@in_BookID,GETDATE())
if@@ERROR>
rollbacktran
执行过程中遇到错误'
/*修改借书量*/
updateTReaderset借书量=借书量+1where借书证号=@in_ReaderID
/*修改库存量*/
updateTBookset库存量=库存量-1whereISBN=@in_ISBN
/*修改图书借出情况*/
updateTBlendset是否借出=1where图书ID=@in_BookID
if@@ERROR=0
committran
借书成功'
else
3、同步删除图书借出情况功能
在TBook表中删除一条图书记录时,同时删除TBLend表中与该书相关的记录。
该功能使用在TBook表中定义删除触发器的方法实现。
触发器名称为Book_delete,触发器类型为DML,在对TBook表进行了DELETE操作后激活。
createtriggerTBook_deleteonTBook
afterdelete
deletefromTBlendwhereISBN=(selectISBNFROMdeleted)
4、图书归还功能
当读者归还图书时,即删除借阅表TLend中的一条记录时,读者信息表中该读者的借书量减1,图书信息表中该书的库存量加1,图书在借情况的是否借出为否,还书记录表添加一条该读者的还书记录。
该功能用在TLend表定义触发器的方法实现,触发器名称为TLend_delete,触发器类型为DML,在对TLend进行操作后激活。
createtriggerTLend_deleteonTLend
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
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
closecur_return
deallocatecur_return
5、统计借书次数功能
图书管理员输入读者的借书证号,可以统计读者总共借过多少次书,包括借过归还和在借的。
使用用户自定义的函数实现,函数名为L_count。
使用借书证号作为参数,名称为ReaderID,通过查询借阅表TLend和还书记录表HLend得到借书次数总数。
createfunctionL_count(@ReaderIDchar(6))
returnsint
declare@count1int,@count2int,@sum_countint
select@count1=count(借书证号)
fromTLend
where借书证号=@ReaderID
select@count2=count(借书证号)
fromHLend
set@sum_count=@count1+@count2
return@sum_count
六、界面截图:
登录界面:
图书查询:
借书查询:
借书管理:
还书管理:
读者管理:
图书管理:
数据备份: