图书管理系统项目文档.docx

上传人:b****3 文档编号:4745498 上传时间:2022-12-08 格式:DOCX 页数:18 大小:3.82MB
下载 相关 举报
图书管理系统项目文档.docx_第1页
第1页 / 共18页
图书管理系统项目文档.docx_第2页
第2页 / 共18页
图书管理系统项目文档.docx_第3页
第3页 / 共18页
图书管理系统项目文档.docx_第4页
第4页 / 共18页
图书管理系统项目文档.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

图书管理系统项目文档.docx

《图书管理系统项目文档.docx》由会员分享,可在线阅读,更多相关《图书管理系统项目文档.docx(18页珍藏版)》请在冰豆网上搜索。

图书管理系统项目文档.docx

图书管理系统项目文档

图书管理系统项目文档

实验人员:

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

六、界面截图:

登录界面:

图书查询:

借书查询:

借书管理:

还书管理:

读者管理:

图书管理:

数据备份:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1