数据库专周报告Word文档格式.docx
《数据库专周报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据库专周报告Word文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
为了存放图书、读者档案的全部数据,本系统将每一本图书和每位读者的信息进行管理。
系统维护包括对各种表记录的修改、删除、添加等操作。
系统查询及统计:
可以对所有购进图书的分类查询和分类统计,能够按书名、作者等分类查询现有图书的数量。
系统管理:
进行人员管理、数据输入。
报表统计:
包括统计图书信息、读者信息、借阅信息,管理人员信息等。
其它操作:
包括修改密码、添加用户等。
2、数据流图
。
三、系统设计
1、概念结构设计
画出系统E-R图。
2、逻辑结构设计
将E-R图(或其他概念设计图)转换为具体的DBMS对应的关系模式。
基本表:
借阅者(借阅者编号,姓名,性别,登陆密码,类型,出生日期,系别,图书借阅次数,总罚金)
借阅者类型(类型编号,类型名称,可借总数,借阅天数)
管理者(管理者编号,姓名,性别,登陆密码,出生日期)
图书类型(类型编号,类型名称,库存总量)
图书(图书编号,索引号,书名,类型,作者,出版社,价格,借出次数,购买日期)
图书量(索引号,现存量,库存总量)
借阅信息(借阅者编号,图书编号,借阅日期,应还日期,归还日期,续借次数,状态,罚金,罚金状态)
视图:
Tushu(索引号,书名,类型,作者,出版社,价格,现存量,库存总量,借出次数,购买日期,类型编号)
关系:
借阅者.类型(来自)借阅者类型
图书.类型(来自)图书类型
借阅信息.借阅者编号(来自)借阅者.借阅者编号
借阅信息.图书编号(来自)图书.图书编号
图书量.索引号(来自)图书.索引号
3、系统功能模块图
功能流程图:
系统流程图
四、详细设计
登陆界面:
登陆,退出
借阅者界面:
个人信息,借阅查询,图书检索
管理者界面:
借阅者管理(借阅者档案管理,借阅者类型管理),图书管理(图书类型管理,图书档案管理),管理员档案管理,退出界面
借阅者档案界面:
借阅者增加,借阅者删除,借阅者删除,借阅者退出界面
借阅者类型管理界面:
查看,更改,增加,删除,关闭
图书类型管理界面:
查看,更改,删除,查找,增加,关闭
图书档案管理界面:
查看,删除,修改,增加,关闭
图书其他界面:
类别查找,统计
管理者档案界面:
增加管理者,删除管理者,修改管理者密码,查找,退出界面
五、系统实现与测试
1、开发平台和工具选择
说明选择原因、环境要求等。
2、系统测试
在执行图书档案时候出现这样的错误
发现是存储过程的原因,所以把存储过程改了。
Sql代码:
use图书管理系统
--创建借阅表
CREATETABLE借阅者(
借阅者编号char(5)PRIMARYKEY,
姓名varchar(8)NOTNULL,
性别char
(2)CHECK(性别IN('
男'
'
女'
)),
登陆密码varchar(10)NOTNULL,
类型varchar(8),
出生日期datetime,
系别varchar(40),
图书借阅次数int,
总罚金int
);
--创建借阅者类型表
CREATETABLE借阅者类型(
类型编号char(3)PRIMARYKEY,
类型名称varchar(8)UNIQUENOTNULL,
可借总量smallint,
借阅天数smallint);
--创建管理者表
CREATETABLE管理者(
管理者编号char(5)PRIMARYKEY,
姓名varchar(8)NOTNULL,
性别char
(2)CHECK(性别IN('
)),
登陆密码varchar(10)NOTNULL,
出生日期datetime);
--创建图书类型表
CREATETABLE图书类型(
类型名称varchar(40)UNIQUENOTNULL,
库存总量bigint);
--创建图书表
CREATETABLE图书(
图书编号char(5)PRIMARYKEY,
索引号char(5)NOTNULL,
书名varchar(40)NOTNULL,
类型varchar(40),
作者varchar(8),
出版社varchar(40),
价格int,
借出次数int,
购买日期datetime,
foreignkey(索引号)references图书量(索引号));
--创建图书量
CREATETABLE图书量(
索引号char(5)PRIMARYKEY,
现存量smallint,
库存总量smallint);
--创建借阅信息表
CREATETABLE借阅信息(
借阅者编号char(5),
图书编号char(5),
借阅日期datetime,
应还日期datetime,
归还日期datetime,
续借次数smallint,
状态char(4)CHECK(状态IN('
未还'
已还'
罚金int,
罚金状态char(4)CHECK(罚金状态IN('
未结'
已结'
FOREIGNKEY(借阅者编号)REFERENCES借阅者(借阅者编号),
FOREIGNKEY(图书编号)REFERENCES图书(图书编号),
PRIMARYKEY(借阅者编号,图书编号,借阅日期));
--创建图书检索视图
CREATEVIEWtushu
AS
SELECTDISTINCT图书.索引号,书名,类型,作者,出版社,价格,现存量,图书量.库存总量,借出次数,购买日期,类型编号
FROM图书,图书量,图书类型
WHERE图书.索引号=图书量.索引号and图书.类型=图书类型.类型名称
--创建增加图书的触发器
CREATETRIGGERtushu_add
ON图书
FORINSERT
DECLARE@索引号char(5),@类型varchar(40)
SELECT@索引号=索引号FROMinserted
SELECT@类型=类型FROMinserted
IF@索引号IN(SELECT索引号FROM图书量)
UPDATE图书量SET库存总量=库存总量+1,现存量=现存量+1WHERE索引号=@索引号
ELSE
INSERTINTO图书量VALUES(@索引号,1,1)
UPDATE图书类型SET库存总量=库存总量+1WHERE类型名称IN(SELECT类型FROM图书WHERE索引号=@索引号)
GO
--创建删除图书的触发器
CREATETRIGGERtushu_del
FORDELETE
SELECT@索引号=索引号FROMdeleted
SELECT@类型=类型FROMdeleted
UPDATE图书类型SET库存总量=库存总量-1WHERE类型名称IN(SELECT类型FROM图书WHERE索引号=@索引号)
UPDATE图书量SET库存总量=库存总量-1,现存量=现存量-1WHERE索引号=@索引号
IF0=(SELECT库存总量FROM图书量WHERE索引号=@索引号)
DELETEFROM图书量WHERE索引号=@索引号
--创建求借阅者总罚金的存储过程
CREATEPROCzongfajin
@achar(5),@bchar(5),@cintoutput
SELECT@c=SUM(ABS(DATEDIFF(DAY,GETDATE(),应还日期)))
FROM借阅信息
WHERE借阅者编号=@aand状态='
and图书编号<
>
@bandDATEDIFF(DAY,GETDATE(),应还日期)<
--创建图书借阅的触发器
CREATETRIGGERjieyue_add
ON借阅信息
DECLARE@借阅者编号char(5),@图书编号char(5),@索引号char(5),@借阅天数smallint,@状态char(4),@总罚金int
SELECT@借阅者编号=借阅者编号FROMinserted
SELECT@图书编号=图书编号FROMinserted
SELECT@状态=状态FROMinserted
SELECT@索引号=(SELECT索引号FROM图书WHERE图书编号=@图书编号)
SELECT@借阅天数=(SELECT借阅天数FROM借阅者类型WHERE类型名称IN(SELECT类型FROM借阅者WHERE借阅者编号=@借阅者编号))
BEGIN
EXECzongfajin@借阅者编号,@图书编号,@总罚金output
IF(@总罚金<
NULL)
BEGIN
PRINT'
该用户欠款,不能借阅!
'
ROLLBACKTRANSACTION
END
ELSE
IF1>
(SELECT现存量FROM图书量WHERE索引号=@索引号)
BEGIN
PRINT'
该图书不存在,借阅失败!
ROLLBACKTRANSACTION
END
ELSE
UPDATE借阅者SET图书借阅次数=图书借阅次数+1WHERE借阅者编号=@借阅者编号
UPDATE图书SET借出次数=借出次数+1WHERE图书编号=@图书编号
UPDATE图书量SET现存量=现存量-1WHERE索引号=@索引号
借阅成功!
END
--创建借阅信息删除的触发器
CREATETRIGGERjieyue_del
DECLARE@借阅者编号char(5),@图书编号char(5),@借阅日期datetime,@应还日期datetime,@归还日期datetime,@续借次数smallint,@罚金int
SELECT@借阅者编号=借阅者编号FROMdeleted
SELECT@图书编号=图书编号FROMdeleted
SELECT@借阅日期=借阅日期FROMdeleted
SELECT@应还日期=应还日期FROMdeleted
SELECT@归还日期=归还日期FROMdeleted
SELECT@续借次数=续借次数FROMdeleted
SELECT@罚金=罚金FROMdeleted
INSERTINTO历史借阅信息
VALUES(@借阅者编号,@图书编号,@借阅日期,@应还日期,@归还日期,@续借次数,@罚金)
--创建更改借阅信息的触发器
CREATETRIGGERjieyue_update
FORUPDATE
DECLARE@借阅者编号char(5),@图书编号char(5),@借阅日期datetime,@索引号char(5),@借阅天数smallint,@总罚金int,@状态char(4),@状态char(4),@续借smallint,@续借smallint
SELECT@借阅日期=借阅日期FROMinserted
SELECT@状态=状态FROMdeleted
SELECT@续借=续借次数FROMdeleted
SELECT@续借=续借次数FROMinserted
IF(@续借=1and@续借=2)
该图书已续借过,不能再次续借!
IF(@续借=0and@续借=1)
IF0<
(SELECTDATEDIFF(DAY,GETDATE(),应还日期)FROM借阅信息WHERE借阅者编号=@借阅者编号and图书编号=@图书编号and借阅日期=@借阅日期)
BEGIN
UPDATE借阅信息SET应还日期=应还日期+@借阅天数FROM借阅信息WHERE借阅者编号=@借阅者编号and图书编号=@图书编号and借阅日期=@借阅日期
PRINT'
续借成功!
END
ELSE
图书超期,请先结账!
结账成功!
UPDATE借阅信息SET罚金=(SELECTABS(DATEDIFF(DAY,GETDATE(),应还日期))FROM借阅信息WHERE借阅者编号=@借阅者编号and图书编号=@图书编号and借阅日期=@借阅日期)
END
IF(@状态='
and@状态='
)
IF0<
BEGIN
UPDATE借阅信息SET罚金状态='
FROM借阅信息WHERE借阅者编号=@借阅者编号and图书编号=@图书编号and借阅日期=@借阅日期
UPDATE图书量SET现存量=现存量+1WHERE索引号=@索引号
PRINT'
归还成功!
END
ELSE
管理者:
借阅者管理:
--借阅者类型管理
--借阅者类型查找的存储过程
createprocjieyuezheleixing_chazhao
@achar(3),@bvarchar(8)
as
select*
from借阅者类型
where类型编号=@aor类型名称=@b
go
--删除借阅者类型的存储过程
createprocjieyuezheleixing_del
deletefrom借阅者类型
where类型编号=@aor类型名称=@a
select*from借阅者类型
--更改借阅者类型的存储过程
createprocjieyuezheleixing_genggai
@achar(3),@bvarchar(8),@csmallint,@dsmallint
update借阅者类型
set类型名称=@b,可借总量=@c,借阅天数=@d
where类型编号=@a
select*from借阅者类型where类型编号=@a
--增加借阅者类型的存储过程
createprocjieyuezheleixing_add
insertinto借阅者类型
values(@a,@b,@c,@d)
--借阅者档案管理
--查找借阅者的存储过程
createprocjieyuezhe_chazhao
@achar(5)
from借阅者
where借阅者编号=@a
--删除借阅者的存储过程
createprocjieyuezhe_del
deletefrom借阅者
--更改借阅者的存储过程
createprocjieyuezhe_genggai
@achar(5),@bvarchar(8),@cchar
(2),@dvarchar(10),@evarchar(8),@fdatetime,@gvarchar(40),@hint,@iint
update借阅者
set姓名=@b,性别=@c,登陆密码=@d,类型=@e,出生日期=@f,系别=@g,图书借阅次数=@h,总罚金=@i
select*from借阅者where借阅者编号=@a
--增加借阅者的存储过程
createprocjieyuezhe_add
@achar(5),@bvarchar(8),@cchar
(2),@dvarchar(10),@evarchar(8),@fdatetime,@gvarchar(40)--,@hint,@iint
insertinto借阅者
values(@a,@b,@c,@d,@e,@f,@g,0,0)
select*from借阅者
图书管理:
--图书类型管理
--图书类型查找的存储过程
createproctushuleixing_chazhao
@achar(3),@bvarchar(40)
from图书类型
--删除图书类型的存储过程
createproctushuleixing_del
deletefrom图书类型
select*from图书类型
--更改图书类型的存储过程
createproctushuleixing_genggai
@achar(3),@bvarchar(40),@cbigint
update图书类型
set类型名称=@b,库存总量=@c
select*from图书类型where类型编号=@a
--增加图书类型的存储过程
createproctushuleixing_add
@achar(3),@bvarchar(40)--,@cbigint
insertinto图书类型
values(@a,@b,0)
--图书档案管理
--查找图书的存储过程
createproctushu_chazhao
@achar(5),@bchar(5),@cvarchar(40)
from图书
where图书编号=@aor索引号=@bor书名=@c
--删除图书的存储过程
createproctushu_shanchu
deletefrom图书
where图书编号=@a
select*from图书
--更改图书的存储过程
createproctushu_genggai
@achar(5),@bchar(5),@cvarchar(40),@dvarchar(40),@evarchar(8),@fvarchar(40),@gint,@kint,@jdatetime
update图书
set索引号=@b,书名=@c,类型=@d,作者=@e,出版社=@f,价格=@g,借出次数=@k,购买日期=@j
select*from图书where图书编号=@a
--增加图书的存储过程
createproctushu_zengjia
@achar(5),@bchar(5),@cvarchar(40),@dvarchar(40),@evarchar(