资源描述
南昌航空大学实验报告
二016 年 3 月 28 日
课程名称: 数据库原理 实验名称: 图书馆借阅系统
班级: 14207218 姓名: 胡合达 同组人:
指导教师评定: 签名:
一、实验环境
1. Windows2000或以上版本;
2. SQLServer 2005.
二、实验目得
了解并掌握数据库设计基本方法
三. 系统需求分析
1、设计本系统模拟学生在图书馆借阅图书得内容,能够实现以下功能:
借阅信息得查询功能;
图书信息得多关键字检索查询;
图书得出借、返还及超期罚款;
2.能够提供一定得安全机制,提供数据信息授权访问,防止随意删改、查询.
3。对查询、统计得结果能够列表显示。
4、处理对象:学生,馆藏图书信息,借阅信息,罚款信息,借阅历史
5、安全性要求
系统安全性要求体现在数据库安全性、信息安全性与系统平台得安全性等方面。安全性先通过视图机制,不同得用户只能访问系统授权得视图,这样可提供系统数据一定程度上得安全性,再通过分配权限、设置权限级别来区别对待不同操作者对数据库得操作来提高数据库得安全性;系统平台得安全性体现在操作系统得安全性、计算机系统得安全性与网络体系得安全性等方面。
6、完整性要求
系统完整性要求系统中数据得正确性以及相容性。可通过建立主、外键,使用check约束,或者通过使用触发器与级联更新。
四. 概念结构设计
系统开发得总体目标就是实现图书馆管理得系统化与自动化,缩短借阅者得等待时间,减轻工作人员得工作量,方便工作人员对它得操作,提高管理得质量与水平,做到高效、智能化管理,从而达到提高图书管理效率得目得。
概念设计阶段主要就是将需求分析阶段得到得用户需求抽象为信息结构(概念模型)得过程,它就是整个数据库设计得关键。
图书借阅系统得E-R图
管理员
罚款
读者 n m
管理
m 1
馆室
借阅
1 m
1 n m n
归还
属于
读者
图书
n n m
E-R图各实体得属性如下所示:
图书:Book(BookID, BookNo, BookName, BookWriter, BookPublish,, BookDate,BookClass,BookState,
BookRNo)
读者:Reader(ReaID,ReaName,ReaSex,ReaNo,ReaLBID, ReaDep, ReaGrade, ReaPref, ReaDate,Reasx)
管理员: Maneger (MID,MName,MSex)
馆室: Room(RoomNo,RoomMID,RoomNum,RoomAddre)
借阅信息:Borrow(BookID,ReaderID,BookName,BookWriter, Outdate,YHdate)
借阅历史:History(BookID,ReaderID,BookName,BookWriter, Outdate,
Indate,YHdate)
罚款信息:Fine (BookID,ReaderID,BookName,Outdate,Indate,Fine, CLState,MID)
五. 逻辑结构设计
以上得概念设计阶段就是独立于任何一种数据模型得,但就是逻辑设计阶段就与选用得DBMS产品发生关系了,系统逻辑设计得任务就就是将概念设计阶段设计好得基本E-R图转换为选用DBMS产品所支持得数据模型相符合得逻辑结构。具体内容包括数据组织(将E-R图转换成关系模型、模型优化、数据库模式定义、用户子模式设计)、数据处理(画出系统功能模块图)两大任务。
将图书借阅E—R图转换为关系模型
图书
列名
数据类型
可否为空
说明
BookID
Char
not null
图书编号
BookNo
Char
not null
图书得索书号
BookName
Char
not null
图书得书名
BookWriter
Char
not null
图书作者
BookPulish
Char
not null
图书出版社
Booknum
Smallint
Not null
图书数量
BookDate
Date
出版日期
BookClass
Char
图书得分类
Booknums
smallint
Not null
图书可借数量
BookState
Char
not null
图书就是否可借
BookRNo
Char
not null
图书所在馆室号
读者
列名
数据类型
可否为空
说明
ReaID
Char
not null
读者编号
ReaName
Char
not null
读者姓名
ReaSex
Char
not null
读者性别
ReaNo
Char
not null
读者学号
ReaDep
Char
读者所在学院
ReaPref
Char
读者所属专业
ReaGrade
Char
读者得年级
ReaDate
Date
not null
办证日期
ReaBs
Smallint
Not null
已借本数
Reastate
Char
Not nnll
借书状态
Reasx
Smallint
Not null
借书上限
管理员
列名
数据类型
可否为空
说明
MID主键
Char
not null
管理员编号
MName
Char
not null
管理员姓名
MSex
Char
管理员性别
馆室
列名
数据类型
可否为空
说明
RoomNo
Char
not null
馆室号
RoomMID
Char
not null
馆室管理员编号
Roomnum
Char
not null
馆室拥有图书数目
RoomAddre
Char
馆室地址
RoomType,
Char
馆室类型
借阅信息
列名
数据类型
可否为空
说明
ReaID
Char
not null
读者编号
BookID
Char
not null
图书编号
BookName
Char
not null
图书名
BookWriter
Char
作者
Outdate
Date
not null
借阅时间
Indate
Date
归还时间
YHdate
Date
not null
应还时间
Fine
Char
Not null
罚款金额
CLState
Char
处理状态
MID
Char
not null
管理员编号
六. 数据库得实施
创建数据库及表格
管理员基本信息表得建立:
create table Maneger(
MID char(10) primary key,
MName char(10) not null,
MSex char(2),
check(MSex ='男' or MSex ='女’)
)
图书馆室基本信息表得建立:
create table Room(
RoomNo char(5) primary key,
RoomMID char(10) not null,
Roomnum char(5) not null ,
RoomAddre char(20),
RoomType char (10),
foreign key(RoomMID) references Maneger(MID)on delete cascade on update cascade ,
)
馆藏图书基本信息表得建立:
create table Book(
BookID char(9) primary key,
BookNo char(20) not null,
BookName char(50) not null,
BookWriter char(30) not null,
BookPublish char(20) not null,
Booknum smallint check (Booknum>=0),
BookDate datetime,
BookClass char(20),
Booknums smallint check (Booknum>=0),
BookState char(10) default ‘可借' not null,
BookRNo char(5) not null,
check (Booknum〉Booknums ),
foreign key(BookRNo) references Room(RoomNo)on delete cascade on update cascade ,
)
读者基本信息表得建立:
create table Reader(
ReaID char(9) primary key,
ReaName char(10) not null,
ReaSex char(2) not null,
ReaNo char(9) not null,
Reasx smallint not null,
ReaBs smallint not null,
ReaDep char(20),
ReaGrade char(5),
ReaPref char(20),
ReaDate Datetime,
Reastate char (5) not null default ‘可借’ ,
foreign key(ReaLBID) references ReaderType(LBID)on delete cascade on update cascade ,
check(ReaSex =’男' or ReaSex ='女’)
)
(6)借阅基本信息表得建立:
create table Borrow(
BookID char(9),
ReaID char(9),
Outdate Datetime not null,
YHdate Datetime not null,
Indate Datetime,
Fine char(5) not null default ‘0',
CLState char(8),
MID char(10) not null,
primary key(BookID,ReaID),
foreign key(MID) references Maneger(MID)on delete cascade on update cascade
)
建立视图
(1)用于查询图书基本信息得视图定义如下:
ﻩ create view Bookview (索书号, 书名, 作者, 出版社, 图书状态)
as
select BookNo,BookName,BookWriter,BookPublish,BookState
from Book
(2)用于读者基本信息查询得视图定义如下:
ﻩﻩcreate view Readerview (读者姓名,类型,学院,专业,办证日期)
as
select ReaName,ReaType,ReaDep,ReaPref,ReaDate
from Reader
(3)用于显示当前借阅基本信息得视图定义如下:
create view Borrowview (读者编号,书名,作者,借阅日期,到期日期)
as
select ReaID,BookName,BookWriter,Outdate,YHdate
from Borrow,Book
where Borrow、BookID=Book、BookID and Borrow、Indate is null
ﻩ(4)用于借阅历史信息查询得视图定义如下:
ﻩ create view Historyview (读者编号,书名,借阅日期,归还日期)
as
select ReaID,BookName,Outdate,Indate
from Borrow,Book
where Borrow、BookID=Book、BookID and Borrow、Indate is not null
(5)用于查询罚款信息得视图定义如下:
ﻩ create view Fineview (读者编号,书名,借阅日期,归还日期,罚款,处理状态)
as
select ReaID,BookName,Outdate,Indate,Fine,CLState
from Borrow,Book
where Borrow、BookID=Book、BookID and Fine is not null
建立索引
create clustered index BookPublish on Book(BookPublish);
create clustered index ReaDep on Reader(ReaDep);
建立触发器
当在中增加一条借阅记录时,书得可借数量减少一本,修改读者,并检查读者状态
create trigger Borrow_insert1
on Borrow
for insert
as
declare BookID char(9)
declare ReaID char(9)
select ReaID=ReaID
from inserted
select BookID=BookID
from inserted
Select Reastate =Reastate
From Reader
Where ReaID =ReaId
If(Reastate =’不可借’)
Begin
Raiserror (‘该学生状态不可借书’,16,1)
Rollback transaction
End
update Book
set Booknums=Booknums-1
where BookID=BookID
update Reader
set ReaBs=ReaBs+1
where ReaID =ReaID
当读者达到借书上限,设置借书状态为‘不可借’
create trigger Reader _update
on Reader
for update
as
declare ReaBs smallint
select ReaBs =ReaBs
from inserted
declare ReaID char(9)
select ReaID=ReaID
from inserted
Select Reasx =Reasx
From Reader
where BookID=BookID
If(Reasx =ReaBs )
Begin
update Reader
set Reastate =’不可借’
where ReaID =ReaID
End
还书得时候,书得可借数量增加一本,修改读者状态
create trigger Borrow_insert
on Borrow
for insert
as
declare BookID char(9)
declare ReaID char(9)
select ReaID=ReaID
from inserted
select BookID=BookID
from inserted
Select Reastate =Reastate
From Reader
Where ReaID =ReaId
If(Reastate =’超期’)
Begin
Raiserror (‘该学生状态借书超期’,16,1)
Rollback transaction
End
update Book
set Booknums=Booknums+1
where BookID=BookID
update Reader
set ReaBs=ReaBs-1
where ReaID =ReaID
存储过程
1、Book_Insert得定义:
CREATE PROCEDURE Book_Insert
BookID char(9) ,
BookNo char(20),
BookName char(50),
BookWriter char(30),
BookPublish char(20),
BookDate datetime,
BookClass char(20),
Booknums smallint,
Booknum smallint,
BookState char(10),
BookRNo char(5)
asﻩ
insert into Book
values(BookID ,BookNo,BookName,BookWriter ,BookPublish ,BookDate,Bo okClass ,BookState ,BookRNo,Booknums,Booknum);
2、Reader_Insert得定义:
CREATE PROCEDURE Reader_Insert
ReaID char(9),
ReaName char(10),
ReaSex char(2),
ReaNo char(9),
ReaDep char(20),
ReaGrade char(5),
ReaPref char(20),
ReaDate Datetime
ReaBs smallint,
Reastate char(5),
Reasx smallint,
asﻩ
insert into Reader
values( ReaID , ReaName, ReaSex,ReaNo ,ReaDep ,
ReaGrade ,ReaPref ,ReaDate,ReaBs,Reastate,Reasx ;
3、Maneger_Insert得定义:
CREATE PROCEDURE Maneger_Insert
MID char(10) ,
MName char(10),
MSex char(2),
as
insert into Maneger
alues(MID , MName ,MSex );
4、Borrow_Insert得定义:
CREATE PROCEDURE Borrow_Insert
BookID char(9),
ReaID char(9),
Outdate Datetime ,
YHdate Datetime ,
Indate Datetime,
Fine char(5),
CLState char(8),
MID char(10)
asﻩ
insert into Borrow
values(BookID ,ReaID ,Outdate ,YHdate ,Indate ,Fine ,CLState ,MID );
5、Query_Reader_R得定义:
create procedure Query_Reader_R
ﻩﻩReaID char(9)
ﻩ as
ﻩﻩselect *
ﻩ from Readerview
ﻩﻩwhere 编号 = ltrim(ReaID);
6、 Query_Reader_M得定义:
create procedure Query_Reader_M
as
select *
from Readerview
7、 Query_Book_Writer得定义:
create procedure Query_Book_Writer
ﻩ BookWriter char(50)
ﻩ as
ﻩﻩselect *
ﻩﻩfrom Bookview
where 作者 like '%'+ltrim(BookWriter)+’%’;
8、 Query_Book_Name_Publish得定义:
create procedure Query_Book_Name_Publish
BookName char(50),
BookPublish char(20)
as
select *
from Bookview
where 书名=ltrim(BookName) and 出版社=ltrim(BookPublish);
9、 Delete_Reader得定义:
create procedure Delete_Reader
ReaNo char(9)
as
ﻩ delete
ﻩfrom Reader
ﻩwhere ReaNo = ltrim(ReaNo);
10、 Delete_Book得定义:
create procedure Delete_Book
ﻩ BookID char(9)
ﻩ as
delete
ﻩfrom Book
ﻩ where BookID= ltrim(BookID);
七.实验小结
这次实验使我熟悉了如何独立得建立一个系统,通过自己所学得知识,综合运用,并了解自己得不足之处。
展开阅读全文