图书管理系统项目文档

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

图书管理系统项目文档

实验人员:

08382047 网络工程黄忠

08382044 网络工程刘光林

数据库设计部分是应用系统中非常重要的一个环节,数据库设计的优劣将直接影响应用系统的运行的效率。所以图书管理系统数据库的设计师图书管理系统中首要完成的工作。

本系统开发平台Visual Studio 2010,Microsoft SQL Server 2008,Windows 7,编程语言为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表结构:

同理可得出其他表的表结构:

还书记录表(HLend)结构

三、图书管理系统的数据库及表的创键

通过以上讨论,现在可以创建图书管理系统所需的数据库及其表,T-SQL语句如下: 创建数据库

create database MBOOK

on

primary

(

NAME='MBOOK',

FILENAME='D:\data\MBOOK.mdf',

SIZE=5MB,

MAXSIZE=100MB,

FILEGROWTH=2MB

)

LOG ON

(

NAME='MBOOK_log',

FILENAME='D:\data\MBOOK_log.ldf',

SIZE=1MB,

FILEGROWTH=10%

);

?创建表

?创建TReader表

use MBOOK

go

create table TReader

(

借书证号 char(6) not null primary key,

密码 varchar(20)not null,

姓名 char(8) not null,

性别 bit not null,

出生时间 datetime not null,

专业 char(12) not null,

借书量 int not null default 0,

照片 varbinary(MAX) null,

备注 varchar(200) null,

联系方式 xml null

)

?创建TBook表

create table TBook

(

ISBN char(18) not null primary key,

书名 char(40) not null,

作译者 char(16) not null,

出版社 char(30) not null,

出版年月 char(10) null,

价格 float not null,

复本量 int not null,

库存量 int not null,

分类号 char(18) null,

内容提要 varchar(200) null,

封面照片 varbinary(MAX) null

)

?创建TLend表

create table TLend

(

借书证号 char(8) not null,

ISBN char(18) not null,

图书ID char(10) not null primary key,

借书时间 datetime not null,

应还时间 AS 借书时间+5

)

?创建HLend表

create table HLend

(

编号 int not null identity(1,1) primary key,

借书证号 char(6) not null,

ISBN char(18) not null,

图书ID char(10) not null,

借书时间 datetime not null,

还书时间 datetime not null

)

?创建TBLend表

create table TBlend

(

图书ID char(10) not null primary key,

ISBN char(18) not null,

是否借出 bit not null

)

?创建Administrator表

create table Administrator

(

角色名 char(20) not null primary key,

密码 varchar(20) not null,

备注 varchar(100) null

)

四、图书管理数据库表数据的完整性约束

1、图书管理数据库列的完整性

图书管理数据库列的完整性包括:列的数据类型需要与定义的一致,列的为空性,默认值,列的内容是否符合要求等。

解决列的内容是否符合要求使用CHECK约束。在TReader表中,“借书量”的值必须大于等于0小于等于10;TBook表中库存量必须小于等于复本量。如下:use MBOOK

go

alter table TReader

add check(借书量>=0 AND 借书量<=5)

alter table TBook

add constraint CK_TBook check(库存量<=复本量)

2、图书管理数据库行的完整性

图书管理数据库中的数据行也需要进行完整性约束,比如,借书证号应该是唯一的,数据库系统不允许存在两个或两个以上具有相同的借书证号的读者记录。图

书管理数据库行的完整性可以通过索引、主键、唯一键、或者IDENTITY属性来实

现。在设计表的时候已经定义过主键、索引和IDENTITY属性,为了使图书管理数

据库更完善,规定读者的密码在表中也必须是唯一的,所以需要在读者信息表的“密

码”列创建一个UNIQUE约束。如下:

USE MBOOK

GO

ALTER TABLE TReader

ADD UNIQUE NONCLUSTERED(密码)

3、图书管理数据库表的完整性

在图书管理数据库中,图书借阅表TLend通过“借书证号”与读者信息表TReader相关联,通过“ISBN”与图书信息表相关联。所以需要通过图书管理数据

库表的完整性实现的功能是:当向TLend插入借书记录时,借书证号在TReader表

中必须存在,ISBN在TBook中也必须存在。当删除Treader表中读者记录或者TBook

表中图书记录时,存在借阅记录的话,则不能删除该读者或图书记录。

通过定义TLend表和TReader、TBook表间的参照关系来实现图书管理数据库表的完整性。TReader表和TBook是主表,TLend是从表。如下:

use MBOOK

go

alter table TLend

add foreign key(借书证号)

references TReader(借书证号)

go

alter table TLend

add foreign key(ISBN)

references TBook(ISBN)

五、图书管理数据库的功能实现

1、生成图书在借情况的功能

当向图书信息表TBook添加一种新书时,需要在图书在借情况表中生成该图书的每本书的图书ID和在借情况。此功能用存储功能来实现,存储过程名称为

BookID_Generate,参数为ISBN,count(复本量)、firstID。使用循环想TBLend

中插入count条记录,图书ID的起始值为firstID,之后每增加一条记录图书ID

值加1.如下:

use MBOOK

go

create procedure BookID_Generate @in_ISBN char(18),@count int,@firstID char(10)

begin

while @count>0

begin

insert into TBlend values(@firstID,@in_ISBN,0)

set @firstID=@firstID+1

set @count=@count-1

end

end

2、图书借阅功能

根据读者的借书证号、图书的ISBN、图书ID,以及实际的图书管理情况向图书管理数据库的TLend添加借书记录,读者的借书量和图书的库存量要相应的变化。

思路如下图:

命令如下:

set @out_str='图书库存量为0'

return 0

end

/* 判断是否借过该书 */

if @in_ISBN in(select ISBN from TLend where 借书证号=@in_ReaderID)

begin

set @out_str='该读者已经借过该书'

return 0

end

/* 判断是否已经被借 */

if exists(select* from TLend where 图书ID=@in_BookID)

begin

set @out_str='该图书ID存在'

return 0

end

begin tran /*开始一个事务*/

/*插入借书记录*/

INSERT INTO TLend (借书证号,ISBN,图书ID,借书时间)

values(@in_ReaderID,@in_ISBN,@in_BookID,GETDATE())

if @@ERROR>0

begin

rollback tran

set @out_str='执行过程中遇到错误'

return 0

end

/*修改借书量*/

update TReader set 借书量=借书量+1 where 借书证号=@in_ReaderID if @@ERROR>0

begin

rollback tran

set @out_str='执行过程中遇到错误'

return 0

end

/*修改库存量*/

update TBook set 库存量=库存量-1 where ISBN=@in_ISBN

if @@ERROR>0

begin

rollback tran

set @out_str='执行过程中遇到错误'

return 0

end

/*修改图书借出情况*/

update TBlend set 是否借出=1 where 图书ID=@in_BookID

if @@ERROR=0

begin

commit tran

set @out_str='借书成功'

return 0

end

else

if @@ERROR>0

begin

rollback tran

set @out_str='执行过程中遇到错误'

return 0

end

end

3、同步删除图书借出情况功能

在TBook表中删除一条图书记录时,同时删除TBLend表中与该书相关的记录。

该功能使用在TBook表中定义删除触发器的方法实现。触发器名称为Book_delete,触发器类型为DML,在对TBook表进行了DELETE操作后激活。如下:

use MBOOK

go

create trigger TBook_delete on TBook

after delete

as

delete from TBlend where ISBN=(select ISBN FROM deleted)

4、图书归还功能

当读者归还图书时,即删除借阅表TLend中的一条记录时,读者信息表中该读者的借书量减1,图书信息表中该书的库存量加1,图书在借情况的是否借出为否,还书记录表添加一条该读者的还书记录。该功能用在TLend表定义触发器的方法实现,触发器名称为TLend_delete,触发器类型为DML,在对TLend进行操作后激活。

如下:

create trigger TLend_delete on TLend

after delete

as

begin

declare @ReaderID char(6),@ISBN char(18),@BookID char(10),@LTime datetime

declare cur_return cursor

for

select 借书证号,ISBN,图书ID,借书时间 from deleted

open cur_return

fetch next from cur_return into @ReaderId,@ISBN,@BookID,@LTime

while @@fetch_status=0

begin

update TReader set 借书量=借书量-1 where 借书证号=@ReaderID

update TBook set 库存量=库存量+1 where ISBN=@ISBN

update TBlend set 是否借出=0 where 图书ID=@BookID

insert into HLend(借书证号,ISBN,图书ID,借书时间,还书时间)

values (@ReaderID,@ISBN,@BookID,@LTime,getdate())

fetch next from cur_return into @ReaderID,@ISBN,@BookID,@LTime

end

close cur_return

deallocate cur_return

end

5、统计借书次数功能

图书管理员输入读者的借书证号,可以统计读者总共借过多少次书,包括借过归还和在借的。使用用户自定义的函数实现,函数名为L_count。使用借书证号作为参数,名称为ReaderID,通过查询借阅表TLend和还书记录表HLend得到借书次数总数。如下:

use MBOOK

go

create function L_count(@ReaderID char(6))

returns int

as

begin

declare @count1 int,@count2 int,@sum_count int

select @count1=count(借书证号)

from TLend

where 借书证号=@ReaderID

select @count2=count(借书证号)

from HLend

where 借书证号=@ReaderID

set @sum_count=@count1+@count2

return @sum_count

end

六、界面截图:

登录界面:

图书查询:

借书查询:

借书管理:

还书管理:

读者管理:

图书管理:

数据备份:

相关主题
相关文档
最新文档