图书管理系统数据库设计MYSQL实现文档格式.docx

上传人:wj 文档编号:4037578 上传时间:2023-05-02 格式:DOCX 页数:21 大小:524.40KB
下载 相关 举报
图书管理系统数据库设计MYSQL实现文档格式.docx_第1页
第1页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第2页
第2页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第3页
第3页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第4页
第4页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第5页
第5页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第6页
第6页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第7页
第7页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第8页
第8页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第9页
第9页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第10页
第10页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第11页
第11页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第12页
第12页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第13页
第13页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第14页
第14页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第15页
第15页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第16页
第16页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第17页
第17页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第18页
第18页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第19页
第19页 / 共21页
图书管理系统数据库设计MYSQL实现文档格式.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

图书管理系统数据库设计MYSQL实现文档格式.docx

《图书管理系统数据库设计MYSQL实现文档格式.docx》由会员分享,可在线阅读,更多相关《图书管理系统数据库设计MYSQL实现文档格式.docx(21页珍藏版)》请在冰点文库上搜索。

图书管理系统数据库设计MYSQL实现文档格式.docx

数据类型

是否为空/性质

说明

stu_id

int

notnull/PK

标明学生唯一学号

stu_name

varchar

notnull

学生姓名

stu_sex

学生性别

stu_age

学生年龄

stu_pro

学生专业

stu_grade

学生年级

stu_integrity

notnull/default=1

学生诚信级

book:

book_id

notnull/PK

唯一书籍序号

book_name

书籍名称

book_author

书籍作者

book_pub

书籍出版社

book_num

int

notnull

书籍是否在架上

book_sort

书籍分类

book_record

datatime

null

书籍登记日期

book_sort:

sort_id

类型编号

sort_name

类型名称

borrow:

存储学生的借书信息

student_id

学生编号

varchar

书籍编号

borrow_date

借书时间

expect_return_date

datetime

预期归还时间

return_table:

存储学生的归还信息

return_date

实际还书时间

ticket:

存储学生的罚单信息

over_date

超期天数

ticket_fee

float

处罚金额

manager:

manager_id

管理员编号

manager_name

管理员姓名

manager_age

管理员年龄

manager_phone

管理员电话

3、设计索引

给出在各表上建立的索引以及使用的语句。

1.为stu_id创建索引,升序排序

sql:

createindexindex_idonstudent(stu_idasc);

2.为stu_name创建索引,并且降序排序

altertablestudentaddindexindex_name(stu_name,desc);

插入索引操作和结果如下所示:

mysql>

createindexindex_idonstudent(stu_idasc);

QueryOK,0rowsaffected

Records:

0Duplicates:

0Warnings:

0

altertablestudentaddindexindex_name(stu_namedesc);

1.为book_id创建索引,升序排列

createindexindex_bidonbook(book_id);

2.为book_record创建索引,以便方便查询图书的登记日期信息,升序:

createindexindex_brecordonbook(book_record);

插入索引的操作和结果如下所示:

createindexindex_bidonbook(book_id);

createindexindex_brecordonbook(book_record);

1.为stu_id和book_id创建多列索引:

createindexindex_sid_bidonborrow(stu_idasc,book_idasc);

createindexindex_sid_bidonborrow(stu_idasc,book_idasc);

createindexindex_sid_bidonreturn_table(stu_idasc,book_idasc);

createindexindex_sid_bid_ronreturn_table(stu_idasc,book_idasc);

1.为stu_id和book_id创建多列索引:

createindexindex_sid_bidonticket(stu_idasc,book_idasc);

createindexindex_sid_bidonticket(stu_idasc,book_idasc);

1.为manager_id创建索引:

createindexindex_midonmanager(manager_id);

createindexindex_midonmanager(manager_id);

4、设计视图

给出在各表上建立的视图以及使用的语句。

1.在表student上创建计算机专业(cs)学生的视图stu_cs:

createviewstu_csas

select*

fromstudent

wherepro=‘cs’;

操作和结果:

createviewstu_csas

wherestu_pro='

cs'

;

2.在表student,borrow和book上创建借书者的全面信息视图stu_borrow:

createviewstu_borrowas

selectstudent.stu_id,book.book_id,student.stu_name,book.book_name,borrow_date,adddate(borrow_date,30)expect_return_date

fromstudent,book,borrow

wherestudent.stu_id=borrow.stu_idandbook.book_id=borrow.book_id;

3.创建类别1的所有图书的视图cs_book:

createviewcs_bookas

frombook

wherebook.book_sortin

(selectbook_sort.sort.name

frombook_sort

wheresort_id=1);

操作和结果显示:

createviewcs_bookas

(selectbook_sort.sort_name

4.创建个人所有借书归还纪录视图stu_borrow_return:

createviewstu_borrow_returnas

selectstudent.stu_id,student.stu_name,book.book_id,book.book_name,return_table.borrow_date,return_table.return_date

fromstudent,book,return_table

wherestudent.stu_id=return_table.stu_idandbook.book_id=return_table.book_id;

5、设计触发器

给出在各表上建立的触发器以及使用的语句。

1.设计触发器borrow,当某学生借书成功后,图书表相应的图书不在架上,变为0:

createtriggerborrow

afterinsertonborrow

foreachrow

begin

updatebooksetbook_num=book_num–1

wherebook_id=new.book_id;

end

操作与结果显示:

delimiter$$

createtriggertrigger_borrow

->

afterinsertonborrow

foreachrow

begin

updatebooksetbook_num=book_num-1

wherebook_id=new.book_id;

end

$$

在插入表borrow之前,book_id=1的图书还在架上,为1:

学生1借了这本书后,在borrow中插入了一条记录:

在borrow中插入这条记录后,book_id=1的图书,不在架上,为0:

2.设计触发器trigger_return,还书成功后,对应的书籍book_num变为1:

createtriggertrigger_return

afterinsertonreturn_table

updatebooksetbook_num=book_num+1

还书时在return_table插入表项:

此时图书归还架上:

3.定义定时器(事件)eventJob,每天自动触发一次,扫描视图stu_borrow,若发现当前有预期归还时间小于当前时间,则判断为超期,生成处罚记录,这个定时器将每天定时触发存储过程proc_gen_ticket:

createeventifnotexistseventJob

onscheduleevery1DAY/*每天触发*/

oncompletionPRESERVE

docallproc_gen_ticket(getdate());

/*调用存储过程*/

setglobalevent_scheduler=1;

altereventeventJoboncompletionpreserveenable;

/*开启定时器*/

1).学生1借了图书1,生成借书记录stu_borrow视图,如下:

2).当他在1月27日前还书时,没有生成罚单:

3).当他在1月27日后还书时,生成罚单:

4.设计触发器trigger_credit,若处罚记录超过30条,则将这个学生的诚信级设置为0,下次不允许借书:

createtriggertrigger_credit

afterinsertonticket

foreachrow

if(selectcount(*)fromticketwherestu_id=new.stu_id)>

30then

updatestudentsetstu_integrity=0wherestu_id=new.stu_id;

endif;

操作和结果显示,测试时选择插入ticket项大于3,因为30太大了,不容易测试:

学生1超过3次超期归还图书后,产生了4条罚单:

此时触动触发器trigger_credit,将学生1的诚信级设置为0:

四、应用程序设计与编码实现

1、系统实现中存储函数和存储过程的设计

要求给出功能描述和代码。

1.设计存储过程,产生罚单proc_gen_ticket:

当日期超过预定归还日期时,产生罚单,并将记录写入表ticket中,这个存储过程在定时器eventJob中调用:

sql:

createprocedureproc_gen_ticket(incurrentdatedatetime)

BEGIN

declarecur_datedatetime;

setcur_date=currentdate;

replaceintoticket(stu_id,book_id,over_date,ticket_fee)

selectstu_id,book_id,datediff(cur_date,stu_borrow.expect_return_date),0.1*datediff(cur_date,stu_borrow.expect_return_date)

fromstu_borrow

wherecur_date>

stu_borrow.expect_return_date;

end

2.设计学生注册信息存储过程:

学生注册信息stu_register

createprocedurestu_register(instu_idint,instu_namevarchar(20),instu_sexvarchar(20),instu_ageint,instu_provarchar(20),instu_gradevarchar(20))

insertintostudent(stu_id,stu_name,stu_sex,stu_age,stu_pro,stu_grade)

values(stu_id,stu_name,stu_sex,stu_age,stu_pro,stu_grade);

3.设计管理员注册信息存储过程:

ma_register

createprocedurema_register(inma_idint,inma_namevarchar(20),inma_ageint,inma_phoneint)

BEGIN

insertintomanager

values(ma_id,ma_name,ma_age,ma_phone);

END

4.借书过程的实现:

1)设计存储函数,func_get_credit,返回学生的诚信级:

createfunctionfunc_get_credit(stu_idint)returnsint

begin

return(selectstu_integrityfromstudentwherestudent.stu_id=stu_id);

2)设计存储函数,func_get_booknum,返回书籍是否在架上:

createfunctionfunc_get_booknum(book_idint)returnsint

return(selectbook_numfrombookwherebook.book_id=book_id);

3)设计存储过程proc_borrow,调用func_get_credit和func_get_booknum,判断这个学生诚信度和书籍是否在架上,若为真,则借书成功,在borrrow表中插入纪录;

否则提示失败:

createprocedureproc_borrow(instu_idint,inbook_idint,inborrow_datedatetime)

iffunc_get_credit(stu_id)=1andfunc_get_booknum(book_id)=1then

insertintoborrow

values(stu_id,book_id,borrow_date);

else

select'

failedtoborrow'

endif;

实验操作与结果显示:

borrow纪录为空:

执行函数,学生1借图书2:

callproc_borrow(1,2,now());

学生1的诚信级为0:

借书失败:

修改学生1诚信级为1:

此时借书成功:

5.还书存储过程proc_return:

当还书时,查看是否书是否超期,即查询ticket表项,当发现超期,提示交罚单后再次还书,如没有超期,则纪录归还项目到return_table中,并且删除借书纪录(以免还书后定时器仍然扫描这个纪录):

createprocedureproc_return(instu_idint,inbook_idint,inreturn_datedatetime)

DECLAREborrowdatedatetime;

if(selectpayofffromticketwhereticket.stu_id=stu_idandticket.book_id=book_id)=1then/*判断是否交了罚单,1表示没有交*/

select'

pleasepayofftheticket'

else/*纪录归还项目到return_table中,并且删除借书纪录*/

setborrowdate=(selectborrow_datefromborrowwhereborrow.stu_id=stu_idandborrow.book_id=book_id);

insertinto

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2