图书共享的设计解析.docx

上传人:b****3 文档编号:4130046 上传时间:2022-11-28 格式:DOCX 页数:18 大小:516.28KB
下载 相关 举报
图书共享的设计解析.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

图书共享的设计解析

图书共享的设计

一.需求分析

为了能够使学生通过书本了解更多的知识,丰富自己的知识储备,我们班建立一个图书角供学生们互相交换图书进行阅览。

图书角的书籍来源是学生的捐赠,捐赠的书籍需要根据内容进行分类,借阅书籍需要进行相关的记录,借阅的同学必须按时归还书籍,安排图书角管理员,保证图书角能够正常开放。

该数据库的主要是实现图书捐赠,图书管理,图书借阅信息的功能。

1.班级图书共享的图书为班级同学的捐赠,捐赠时管理员记录捐赠人的姓名,学号,性别,联系方式,捐书时间,捐书姓名,捐书数量,书的好坏程度的情况。

2.每位同学每次只能借一本书,借阅时间为一个月,到期允许续借,期限也为一个月,每本书只有一次可以续借的机会。

如果超过借书期限,每天收费0.1元,如有破损则借书者按照损坏程度进行赔偿。

3.管理员需要记录下借阅学生的姓名,学号,性别,联系方式,借书时间和借阅书籍的名字。

还要负责将同学们捐来的书籍进行分类,防止同名书的混淆,并给书目编号。

4.统计出捐书数目最多的人,奖励一本书籍。

二,概念结构设计

1.书籍

2.学生

3.整体结构

 

三、逻辑结构设计

学生(姓名,学号,性别,联系方式)

图书(书名,图书编号,作者,数量,类别,污损情况)

捐赠表(捐书者的学号,捐赠图书的编号,捐书的时间)

书籍借阅(图书编号,借阅者的学号,借阅时间,归还时间,续借情况,罚款记录)

四、物理结构设计

数据库名:

classbookcorner

数据库物理文件初始大小:

10MB

是否允许自动增长:

自动增长方式:

每次增加5MB

最大数据容量:

不受限

是否自动收缩:

是否是只读数据库:

事务日志文件位置:

f:

\classbookcorner

事务日志文件初始大小:

1MB

事务日志文件最大数据容量:

20MB

创建如下数据表:

学生表

表名

student

作用

学生信息

列名

数据类型

长度

是否允许为空

字段说明

sno

varchar

20

主键,学号

sname

varchar

50

学生姓名

ssex

char

10

性别

spnum

varchar

20

联系电话

图书表

表名

book

作用

图书信息

列名

数据类型

长度

是否允许为空

字段说明

bno

varchar

20

主键,图书标号

bname

varchar

50

书名

bauthor

varchar

50

作者

bsl

Int

4

数量

btype

varchar

50

图书类型

bsituation

varchar

100

污损情况

brenew

bit

1

续借情况,1(可续借),0(不可续借)

借阅表

 

表名

borrow

作用

借阅信息

列名

数据类型

长度

是否允许为空

字段说明

bnumber

varchar

20

外键,引用book表中的主键bno

Bnumber与snumber共同为主键

snumber

varchar

20

外键,引用student表中主键sno

btime

datetime

8

借阅时间

brtime

datetime

8

归还时间

bqk

float

8

超过归还时间,每天0.1元,欠款为1,

不欠款为0

bxj

int

4

续借次数

bkj

bit

1

是否可借(1为可借。

0为不可借)

捐书表

表名

donate

作用

捐书信息

列名

数据类型

长度

是否允许为空

字段说明

dsno

varchar

20

外键,引用student表中的主键sno

dbno

varchar

20

外键,引用book表中主键bno

dsno和dbno共同为主键

dtime

datetime

8

捐书时间

查询

1.查询学号为’20130105’的学生姓名和联系电话。

Selectsname,spnum

Fromstudent

Wheresno=’20130105’

2.查询捐了书的编号为’007’学生姓名

selectsname

fromstudent,donate

wherestudent.sno=donate.dsno

3.查询孙菲捐书的书的编号

Selectdbno

Fromdonate

Wheredno=(selectsno

Fromstudent

Wheresname=’孙菲’)

4.查询孙菲借书的书名

Selectbname

Frombook

Wherebno=(selectbnumber

Fromborrow

Wheresnumber=(selectsno

Fromstudent

Wheresname=’孙菲’))

5.查询捐了三本书的学生的姓名

Selectsname

Fromstudent

Wheresno=(selectdsno

Fromdonate

Groupby

Havingcount(‘20130101’)=3)

创建视图

(1)视图名称:

借书信息;显示:

图书编号,图书名,借书者学号,借书者姓名。

Createview借书信息

As

Selectbnoas'图书编号',bnameas'图书名称',snoas'借书人学号',snameas'借书人姓名'

Fromborrowinnerjoinbookonbno=bnumberinnerjoinstudentonsno=snumber

(2)视图名称:

捐书信息,显示:

图书编号,图书名,捐书人学号,捐书人姓名和捐书时间

createview捐书信息

as

selectdsnoas'捐书人学号',dbnoas'捐书的编号',dtimeas'捐书时间',snameas'捐书人姓名',bnameas'书籍名称'

fromdonateinnerjoinstudentondsno=snoinnerjoinbookondbno=bno

(3)视图名称:

图书污损情况,显示:

损坏书籍的编号,书名,捐献者和书籍类型

createview图书污损情况

as

selectbnoas'图书编号',bnameas'图书名称',btypeas'书籍类型'

frombook

wherebsituation='污损'

(4)视图名称:

每个学生捐书的数量显示;学生姓名,捐书总数

createview每个学生捐书的数量

as

selectdsnoas'学生学号',count(*)as'捐书总数'

fromdonate

groupbydsno

存储过程

(1)创建存储过程‘借阅情况’,输入学号可以查询该学生借书的书名,借书时间,归还时间,是否可借。

createproc借阅情况(@numberchar(50))

as

begin

selectbnameas'书名',btimeas'借书时间',brtimeas'还书时间',bkjas'是否可借'

fromborrowinnerjoinbookonbnumber=bnoinnerjoinstudentonsnumber=sno

where@number=snumber

end

go

Exec借阅情况‘20130101’

(2)创建一个存储过程’jsxx’,输入书的名称可以查询出该书的编号,捐书人的姓名和捐书时间。

createprocjsxx(@bnumberchar(50))

as

begin

selectbnoas'图书编号',snameas'捐书人的姓名',dtime'捐书时间'

fromdonateinnerjoinbookondbno=bnoinnerjoinstudentondsno=sno

where@bnumber=bno

end

Execjsxx’0001’

触发器

(1)创建一个触发器‘借书学生欠费通知’,若学生欠费则提示你已欠费,没有欠费则提示借书成功

createtrigger借书学生欠费通知onborrow

forinsert

as

begin

declare@qffloat(8)

select@qf=(selectbqkfrominserted)

if@qf='1'

print'你已经欠款!

'

else

print'借书成功!

'

end

insert

intoborrow

values('0004','20130102','2013-6-26','2013-7-26','1','0','0')

(2)在student表上创建一个删除类型的触发器studelete,当在student表中删除某一条记录后,在borrow和donate表中删除与此学号对应的记录。

createtriggerstudeleteonstudent

fordelete

as

begin

print'studelete触发器开始执行……'

declare@stunumchar(10)

print'把在student中删除记录的学号赋值给@stunum'

select@stunum=sno

fromdeleted

print'开始查找并删除borrow中的相关记录……'

deletefromborrow

wheresnumber=@stunum

print'删除了borrow中学号为'+rtrim(@stunum)+'的记录'

print'studelete触发器开始执行……'

declare@stunum1char(10)

print'把在student中删除记录的学号赋值给@stunum'

select@stunum1=sno

fromdeleted

print'开始查找并删除donate中的相关记录……'

deletefromdonate

wheredsno=@stunum1

print'删除了donate中学号为'+rtrim(@stunum1)+'的记录'

end

deletestudent

wheresno='20130101'

(3)创建一个触发器,实现捐赠一本书,剩余库存加1

createtriggertsslondonate

forinsert

as

begin

declare@numberaschar(20)

select@number=(selectdbnofrominserted)

updatebooksetbxl=bxl+1

wherebno=@number

end

insert

intodonate

values('20130102','0006','2013-6-26')

函数

(1)查询学生的读书时间

createfunctionsturetime(@bnochar(20),@snochar(20))

returnsint

as

begin

declare@timeasint

declare@brtimeaschar(20)

declare@btimeaschar(20)

select@brtime=brtime,@btime=btime

fromborrow

wherebnumber=@bnoandsnumber=@sno

ifmonth(@brtime)=month(@btime)

set@time=(day(@brtime)-day(@btime))

else

set@time=(day(@brtime)+30-day(@btime))

return@time

end

print'该学生的读书时间为'+cast(dbo.sturetime('0001','20130101')aschar(20))

(2)输入图书编号,查询该书的书名,借书时间

createfunctionsj(@bnochar(10))

returnstable

return(selectbname,btime

frombookinnerjoinborrowonbno=bnumber

wherebno=@bno)

select*

fromdbo.sj('0003')

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

当前位置:首页 > 小学教育 > 语文

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

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