班级图书管理系统数据库设计Word格式.docx
- 文档编号:7615621
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:14
- 大小:60.96KB
班级图书管理系统数据库设计Word格式.docx
《班级图书管理系统数据库设计Word格式.docx》由会员分享,可在线阅读,更多相关《班级图书管理系统数据库设计Word格式.docx(14页珍藏版)》请在冰点文库上搜索。
编号
管理员
欠款状态
实际归还时间
续借状态
借阅
联系电话
管理
捐赠
三、逻辑结构设计
学生(学号,姓名,电话,)
图书(编号,名称,类别,破损情况)
借书表(书号,借阅者学号,借阅时间,应还日期,是否续借,欠款状态,实际还书时间)
捐书表(捐书人学号,书编号,捐书时间)
注:
红色部分为修改部分
四、物理结构设计
数据库名:
BOOK
数据库物理文件初始大小:
20MB
是否允许自动增长:
是
自动增长方式:
每次增加10%
最大数据容量:
不受限
是否自动收缩:
是否是只读数据库:
否
事务日志文件位置:
e:
\data
事务日志文件初始大小:
2MB
事务日志文件最大数据容量:
30MB
创建如下数据表:
学生表结构
表名
Student
作用
记录学生信息
列名
数据类型
长度
是否允许为空
字段说明
SName
varchar
50
学生姓名
SNumber
11
主键,学号
SP
图书表结构
Book
记录书籍信息
BNumber
15
主键,书籍编号
BName
varchar
书名
BKind
100
书籍类别
Situation
200
SFKJ
Bit
1
是否可借(1为可借,0为不可借)
借书表
Borrow
储存书籍借阅信息
BNo
外键,引用Book表中的主键BNumber,BNo和SNo共同作为主键
SNo
外键,引用Student表中的主键SNumber
BTime
Datetime
8
借阅日期,
YHRQ
debt
float
4
逾期不还,以每天0.1元计费,欠款为1,不欠款为0欠款金额(欠款为1否则为0)
XJ
SJSJ
datetime
实际还书时间
捐书表
Juanshu
存储捐书信息
JSNo
外键,引用Student表中的主键s_number
JBNo
外键,引用Book表中的主键BNumber,JSNo和JBNo
共同作为主键
JTime
捐书时间,捐出的书自捐赠日起三个月内不准取回;
1.视图
a.视图名称:
借书信息;
显示:
书编号,书籍名,借书人学号,借书人姓名。
(选择字段,重命名列名,连接查询)
createview借书信息
as
selectBNumberas'
书编号'
BNameas'
书籍名'
SNoas'
借书人学号'
SNameas'
借书人姓名'
fromBorrowinnerjoinBook
onBNo=BNumberinnerjoinStudent
onSNo=SNumber
b.视图名称:
捐书信息;
书编号,书籍名,捐书人学号,捐书人姓名,捐赠天数
CREATEview捐书信息
selectJBNoas'
BNameas'
JSNoas'
捐书人学号'
SNameas'
捐书人姓名'
'
捐赠天数'
=Datediff(day,JTime,getdate())
fromJuanshuinnerjoinBook
onJBNo=BNumberinnerjoinStudent
onJSNo=SNumber
c.视图名称:
没有借出的书;
书编号,书籍名,未借出,即未借出的书列表(条件查询)
createview没有借出的书籍
BNameas'
SFKJas'
未借出'
fromBook
wherestate='
1'
d.视图名称:
已被借出的书;
书编号,书籍名,被借出,即已借出书籍列表(条件查询)
createview已被借出的书
BNameas'
SFKJas'
已借出'
whereSFKJ='
0'
e.视图名称:
捐书最多者;
显示:
学号,姓名,捐书总量(top关键字,分组,排序)
createview捐书最多者
selecttop1JSNoas'
学号'
SNameas'
姓名'
count(JSNo)as'
捐书总量'
fromJuanshuinnerjoinStudent
onJSNo=SNumber
groupbyJSNo,SName
orderbycount(JSNo)desc
f.视图名称:
是否更换新书;
书籍名,完好的书(模糊查询)
CREATEview是否更换新书
selectBNumberas'
BNameas'
Situationas'
破损情况'
whereSituationlike'
完好'
2.存储过程:
a.创建一个名为借阅情况的存储过程,实现输入书编号,查询该书籍的借阅情况。
(书名,是否可借,借书人姓名,借书时间,应归还时间,实际归还时间)
createproc借阅情况
@jyaschar(11)
begin
selectBNameas'
书名'
SFKJas'
是否可借'
SNameas'
BTimeas'
借书时间'
YHRQas'
应归还时间'
SJSJas'
实际归还时间'
onBno=BNumber
innerjoinStudent
onSNo=SNumber
where@jy=BNumber
end
GO
执行该存储过程:
execshujxinx'
19'
b.创建一个名为捐书人的存储过程,输入书编号,查询该书的捐书者,捐书时间。
createproc捐书人
@xsaschar(11)
selectJSNoas'
捐书人'
书籍名称'
Jtimeas'
捐书时间'
fromStudentinnerjoinJuanshu
onSNumber=JSNo
where@xs=JBNo
end
exec捐书人'
3'
执行结果:
c.创建一个名为xsjies的存储过程,输入学号,查询该学生的借阅信息。
createprocxsjies
@xhaschar(11)
selectjs_BIDas'
借书编号'
b_nameas'
js_timeas'
js_returntimeas'
js_xujieas'
是否续借'
js_qiankuanas'
欠款状态'
fromJieshuinnerjoinBook
onjs_BID=BIDinnerjoinStudent
onjs_num=s_number
where@xh=s_number
end
execxsjies'
20101101234'
3.触发器:
a.(级联删除)在Student上创建一个名为studelete的触发器,实现的功能,当在Student表中删除一条记录后,在Juanshu表和Jieshu表中删除与此学号对应的记录。
CREATEtriggerstudelete
onStudent
insteadofdelete
declare@xhaschar(11)
select@xh=s_numberfromdeleted
print'
开始查找并删除了Student表中的记录!
deletefromJuanshu
where@xh=jus_num
删除了Juanshu表中学号为:
+rtrim(@xh)+'
的记录'
deletefromJieshu
where@xh=js_num
删除了Jieshu表中学号为:
deletefromStudent
删除了Student表中学号为:
当执行删除语句:
deletefrom
wheres_number='
20101104056'
执行结果:
b.创建一个名为sjgx的触发器,实现的功能:
输入学号,书编号,对于续借的学生,js_returntime字段月份自动更新,即延长一个月的还书时间。
(成功执行了命令,但是执行插入语句后时间更新的结果不对,没有预期的效果)
CREATEtriggersjgx
onJieshu
forinsert,update
declare@xhaschar(11),@sbhasint
select@xh=js_num,@sbh=js_BIDfrominserted
updateJieshu
setjs_returntime=datediff(month,js_returntime,js_facttime)+1
wherejs_xujie='
执行插入语句:
insertinto
Jieshu
values('
20101104058'
'
20'
2011/5/2'
2011/6/2'
2011/6/5'
)
c.创建一个名为jiesxz的触发器,对于有欠费的学生,再次借书时,提示:
您已欠费,不允许再借。
对于没有欠费的学生,则提示:
借书成功。
(没有成功执行,存在问题)
createtriggerjiesxz
forinsert
declare@xhaschar(11),@sbhasint
select@xh=(
selectjs_numfrominserted)
select@sbh=js_BIDfrominserted
selectjs_qiankuanfromJieshu
ifexists(js_qiankuan='
print'
您已欠费,不允许再借!
else
借书成功!
错误信息:
d.在Jieshu表上创建一个名为bookcheck的触发器,检查插入的书籍编号是否在1-30之间。
(即检查所借的书必须为同学已捐献的书籍)
createtriggerbookcheck
declare@sbhasint
select@sbh=(
selectjs_BIDfrominserted)
if@sbh>
0and@sbh<
30
输入的书籍正确!
输入的书籍不存在!
insertintoJieshu
values('
5'
执行的结果:
Jieshu表中插入记录(‘20101104058’,’5’,’2011/5/2’,’20110/6/2’,’2011/6/5’,’1’,’0’)
若执行插入语句:
InsertintoJieshu
Values(‘20101104058’,’35’,’2011/6/5’,’2011/7/5’,’2011/6/20’,’0’,’0’)
事实上,这种情况不符合主外键约束,数据也同样插不进去。
e.创建一个insert触发器,功能是:
当在Jieshu表中插入js_num时,检测Student中是否存在相应值,不存在给出信息,否则操作成功。
CREATEtriggerins_Jies
begin
declare@s_numchar(11)
select@s_num=(selectjs_numfrominserted)
if@s_numin(selects_numberfromStudent)
print'
操作成功!
else
begin
print'
学生表中没有相关纪录!
end
4.函数:
a.输入学生的学号,查询该学生的借阅信息。
(借阅信息包括:
借书编号,借书书名,借书时间,应归还时间,实际归还时间,续借情况,欠费情况)
createfunctionjieyue(@xhaschar(11))
returnstable
return(selectjs_BID,b_name,js_time,js_returntime,js_facttime,js_xujie,js_qiankuan
fromBookinnerjoinJieshu
onBID=js_BIDinnerjoinStudent
where@xh=s_number)
调用函数:
select*
fromdbo.jieyue('
b.输入学生的学号,查询捐书编号,捐书书名,捐书时间。
createfunctionxsjs2(@xhaschar(11))
return(
selectBID,b_name,jus_time
fromBookinnerjoinJuanshu
onBID=jus_BIDinnerjoinStudent
onjus_num=s_number
Select*
Fromdbo.xsjs2(‘20101101235’)
c.输入编号,查询该书的书名,借书时间,实际还书时间。
createfunctionsjxinx(@IDaschar(11))
selectb_name,js_time,js_facttime
onBID=js_BID
where@ID=BID)
fromdbo.sjxinx('
2'
d.输入学号,书籍编号,查询该学生借某本书的的欠款金额。
CREATEfunctionqkxinx(@xhaschar(11),@sbhaschar(11))
returnsfloat
declare@qfjeasfloat
select@qfje=(selectDatediff(day,js_returntime,js_facttime)*0.1
fromJieshu
where@xh=js_numand@sbh=js_BID)
if(@qfje<
=0)
set@qfje=0
else
set@qfje=(selectDatediff(day,js_returntime,js_facttime)*0.1-------日期计算函数
return@qfje
declare@rasfloat
declare@aaschar(11)
declare@baschar(10)
set@a='
set@b='
set@r=dbo.qkxinx(@a,@b)
学号为'
+rtrim(cast(@aaschar(11)))+'
学生借编号为'
+rtrim(cast(@baschar(10)))+'
的书籍欠款金额为:
print@r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 班级 图书 管理 系统 数据库 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)