Oracle图书管理系统.docx

上传人:b****6 文档编号:5383335 上传时间:2022-12-15 格式:DOCX 页数:13 大小:82.55KB
下载 相关 举报
Oracle图书管理系统.docx_第1页
第1页 / 共13页
Oracle图书管理系统.docx_第2页
第2页 / 共13页
Oracle图书管理系统.docx_第3页
第3页 / 共13页
Oracle图书管理系统.docx_第4页
第4页 / 共13页
Oracle图书管理系统.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Oracle图书管理系统.docx

《Oracle图书管理系统.docx》由会员分享,可在线阅读,更多相关《Oracle图书管理系统.docx(13页珍藏版)》请在冰豆网上搜索。

Oracle图书管理系统.docx

Oracle图书管理系统

 

图书管理系统

 

参与人员:

组长:

冀佳伟12111100220

组员:

梁恒宇12111100219

赵一兆12111100217

刘鼎12111100218

胡明池12111100232

 

项目分工:

冀佳伟负责总体设计与表的创建

梁恒宇负责绘图

赵一兆负责视图创建

刘鼎负责触发器创建

胡明池负责序列创建

 

总体设计

表设计

BOOK_CLASS表结构及其约束

字段名

数据类型

长度

约束

说明

classid

NUMBER

11

主码

学科类型编号

classname

VARCHAR2

20

NOTNULL

学科类型名称

demo

VARCHAR2

100

说明

 

BOOK_TYPE表结构及其约束

字段名

数据类型

长度

约束

说明

typeid

NUMBER

11

主码

图书类型编号

typename

VARCHAR2

20

NOTNULL

图书类型名称

demo

VARCHAR2

100

说明

BOOK表结构及其约束

字段名

数据类型

长度

约束

说明

bookid

NUMBER

11

主码

书籍编号

bookname

VARCHAR2

20

NOTNULL

书籍名称

author1

VARCHAR2

20

NOTNULL

书籍作者

author2

VARCHAR2

20

书籍作者

author3

VARCHAR2

20

书籍作者

pubdate

DATE

出版日期

publish

VARCHAR2

30

出版社

photo

VARCHAR2

100

图片地址

abstract

VARCHAR2

4000

内容简介

price

NUMBER

7,2

NOTNULL

价格

ISBN

VARCHAR2

17

NOTNULL

书籍ISBN码

bookclass

NUMBER

11

外码

学科类型

booktype

NUMBER

11

外码

藏书类型

READER_TYPE表结构及其约束

字段名

数据类型

长度

约束

说明

typeid

NUMBER

11

主码

图书类型编号

typename

VARCHAR2

20

NOTNULL

图书类型名称

demo

VARCHAR2

100

说明

READER表结构及其约束

字段名

数据类型

长度

约束

说明

readerid

NUMBER

11

主码

读者编号

name

VARCHAR2

10

NOTNULL

读者姓名

telephone

VARCHAR2

15

联系电话

email

VARCHAR2

30

邮箱地址

dept

VARCHAR2

20

所在院系

right

NUMBER

1

取值为0或1

借阅权限

readertype

NUMBER

11

外码

读者类型

demo

VARCHAR2

1000

说明

 

BORROW表结构及其约束

字段名

数据类型

长度

约束

说明

readerid

NUMBER

11

外码

联合

主码

读者编号

bookid

NUMBER

11

外码

图书编号

borrowdate

DATE

出借日期

due

DATE

应还日期

last_due

DATE

实际归还日期

RULE表结构及其约束

字段名

数据类型

长度

约束

说明

booktype

NUMBER

11

外码

联合

主码

藏书类型编号

readertype

NUMBER

11

外码

读者类型编号

days

NUMBER

5

NOTNULL

期限(天)

num

NUMBER

5

NOTNULL

册数(本)

renew

NUMBER

5

NOTNULL

续借次数(次)

overtime

NUMBER

5,2

NOTNULL

逾期处罚

(元/册/天)

ADMIN表结构及其约束

字段名

数据类型

长度

约束

说明

Id

NUMBER

11

主码

管理员编号

username

VARCHAR2

10

NOTNULL

管理员账号

password

VARCHAR2

11

NOTNULL

账号密码

PRECONCERT(预约表)表结构及其约束

字段名

数据类型

长度

约束

说明

readerid

NUMBER

11

主码

联合

主码

读者编号

bookid

NUMBER

11

主码

图书编号

predate

DATE

预约日期

创建admin表

CREATETABLEadmin(

idNUMBER(11)PRIMARYKEY,

usernameVARCHAR2(10)NOTNULL,

pASswordVARCHAR2(11)NOTNULL);

创建reader_type表

CREATETABLEreader_type(

typeidNUMBER(11)PRIMARYKEY,

typenameVARCHAR2(20)NOTNULL,

demoVARCHAR2(100));

创建reader表

CREATETABLEreader(

readeridNUMBER(11)PRIMARYKEY,

nameVARCHAR2(10)NOTNULL,

telephoneVARCHAR2(15),

emailVARCHAR2(30),deptVARCHAR2(20),

rightNUMBER

(1)CHECK(right=0orright=1),

readertypeNUMBER(11)REFERENCESreader_type(typeid),

demoVARCHAR2(1000));

创建book_type表

CREATETABLEbook_type(

typeidNUMBER(11)PRIMARYKEY,

typenameVARCHAR2(20)NOTNULL,

demoVARCHAR2(100));

创建book_class表

CREATETABLEbook_class(

clASsidNUMBER(11)PRIMARYKEY,

clASsnameVARCHAR2(20)NOTNULL,

demoVARCHAR2(100));

创建book表

CREATETABLEbook(

bookidNUMBER(11)PRIMARYKEY,

booknameVARCHAR2(20)NOTNULL,

author1VARCHAR2(20)NOTNULL,

author2VARCHAR2(20),

author3VARCHAR2(20),

pubDATEDATE,publishVARCHAR2(30),

photoVARCHAR2(100),

abstractVARCHAR2(4000),

priceNUMBER(7,2)NOTNULL,

isbnVARCHAR2(17)NOTNULL,

bookclASsNUMBER(11)REFERENCESbook_clASs(clASsid),

booktypeNUMBER(11)REFERENCESbook_type(typeid));

创建borrow表

CREATETABLEborrow(

readeridNUMBER(11)REFERENCESreader(readerid),

bookidNUMBER(11)REFERENCESbook(bookid),borrowdateDATE,

dueDATE,last_dueDATE,

PRIMARYKEY(readerid,bookid));

创建preconcert表

CREATETABLEpreconcert(

readeridNUMBER(11)REFERENCESreader(readerid),

bookidNUMBER(11)REFERENCESbook(bookid),

predateDATE,

PRIMARYKEY(readerid,bookid));

创建rule表

CREATETABLErule(

booktypeNUMBER(11)REFERENCESbook_type(typeid),

readertypeNUMBER(11)REFERENCESreader_type(typeid),

daysNUMBER(5)NOTNULL,

numNUMBER(5)NOTNULL,

renewNUMBER(5)NOTNULL,

overtimeNUMBER(5,2)NOTNULL,

PRIMARYKEY(booktype,readertype));

 

序列的创建

CREATESEQUENCEseq_readerSTARTWITH1INCREMENTBY10000;

CREATESEQUENCEseq_bookSTARTWITH1INCREMENTBY100;

 

创建视图reader_book_view

CREATEORREPLACEVIEWreader_book_view

AS

SELECTname,bookname,borrowdate,due,last_due

FROMreader,book,borrow

WHWERreader.readid=borrow.readidANDborrow.bookid=book.bookid;

创建视图book_type_stat_view

CREATEORREPLACEVIEWbook_type_stat_view

AS

SELECTbooktype,COUNT(booktype)

FROM(SELECTreaderid,borrow.booktype,

Booktype,borrowdate,due,last_due

FROMborrow,book

WHEREbook.bookid=borrow.bookid)

计算借阅超期天数的存储过程

CREATEORREPLACEPROCEDUREp_days_FROM_due(

v_readeridNUMBER,v_bookidNUMBER,v_daysoutNUMBER)

AS

BEGIN

SELECTdue–sysdateINTOv_daysFROMborrow

WHEREreaderid=v_readeridANDbookid=v_bookid;

IFv_days<=0THEN

v_day:

=0;

ENDIF;

END;

计算图书应归还日期的函数

CREATEORREPLACEFUNCTIONf_date_is_due(

v_readeridNUMBER,v_bookidNUMBER)

RETURNVARCHAR2

AS

v_booktypeNUMBER;

v_readertypeNUMBER;

v_dateVARCHAR2(10);

BEGIN

SELECTbooktypeINTOv_booktypeFROMbookWHEREbookid=v_bookid;

SELECTreadertypeINTOv_readertypeFROMreaderWHEREreaderid=v_readerid;

SELECTto_char(sysdate+days,'yyyy-mm-dd')INTOv_dateFROMrule

WHEREreadertype=v_readertypeANDbooktype=v_booktype;

RETURNv_date;

END;

计算超期罚款的存储过程

CREATEORREPLACEPROCEDUREp_timeover_money(

v_readeridNUMBER,v_bookidNUMBER,v_moneyOUTNUMBER)

AS

v_daysNUMBER;

v_readertypeNUMBER;

v_booktypeNUMBER;

BEGIN

p_days_from_due(v_readerid,v_bookid,v_days);

SELECTbooktypeINTOv_booktypeFROMbookWHEREbookid=v_bookid;

SELECTreadertypeINTOv_readertypeFROMreaderWHEREreaderid=v_readerid;

SELECTovertime*floor(abs(v_days))INTOv_moneyFROMrule

WHEREreadertype=v_readertypeANDbooktype=v_booktype;

END;

判断读者可否进行借阅的存储过程

CREATEORREPLACEPROCEDUREp_can_borrow(

v_readeridNUMBER,v_bookidNUMBER,v_numOUTNUMBER)

AS

v_rightNUMBER;

v_borrowed_numNUMBER;

v_rule_numNUMBER;

BEGIN

SELECTrightINTOv_rightFROMreaderWHEREreaderid=v_readerid;

v_borrowed_num:

=f_borrowed_num(v_readerid,v_bookid);

v_rule_num:

=f_rule_num(v_readerid,v_bookid);

IFv_right=1THEN

v_num:

=0;

ELSE

v_num:

=v_rule_num-v_borrowed_num;

ENDIF;

EXCEPTION

WHENOTHERSTHEN

v_num:

=0;

END;

 

为BOOK表创建一个触发器,当插入新书籍时显示新书籍的书籍编号、出版社和价格;当更新书籍价格时,显示修改前后书籍价格;当删除书籍时,显示被删除的书籍编号、出版社和价格。

CREATEORREPLACETRIGGERtrg_dml_row

BEFOREINSERTORUPDATEORDELETE

ONBOOK

FOREACHROW

BEGIN

IFINSERTINGTHEN

DBMS_OUTPUT.PUT_LINE(:

new.bookid||''||

:

new.publish||''||:

new.price);

ELSIFUPDATINGTHEN

DBMS_OUTPUT.PUT_LINE(:

old.price||''||:

new.price);

ELSEDBMS_OUTPUT.PUT_LINE(:

old.bookid||''||:

old.publish||''||:

old.price);

ENDIF;

ENDtrg_dml_row;

 

为BOOK表创建一个触发器,当修改书籍价格时,保证修改后的价格高于修改前的价格。

CREATEORREPLACETRIGGERtrg_update_row

BEFOREUPDATEOFprice

ONBOOK

FOREACHROW

WHEN(new.price<=old.price)

BEGIN

RAISE_APPLICATION_ERROR(-20001,'Thepriceislower!

');

ENDtrg_update_row;

 

包体创建

CREATEORREPLACEPACKAGEBODYpkg_eno

AS

PROCEDUREupdate_sal(p_noNUMBER,p_salNUMBER)

AS

BEGIN

SELECTmin(price),max(price)INTOminsal,maxsal

FROMBOOK;

IFp_salBETWEENminsalANDmaxsalTHEN

UPDATEBOOKSETprice=p_sal

WHEREbookid=p_no;

IFSQL%NOTFOUNDTHEN

RAISE_APPLICATION_ERROR(-20000,'TheBOOKdoesn''texist');

ENDIF;

ELSE

RAISEe_beyondbound;

ENDIF;

EXCEPTION

WHENe_beyondboundTHEN

DBMS_OUTPUT.PUT_LINE('Thepriceisbeyondbound!

');

ENDupdate_sal;

PROCEDUREadd_book(p_noNUMBER,p_salNUMBER)

AS

BEGIN

SELECTmin(price),max(price)INTOminsal,maxsal

FROMBOOK;

IFp_salBETWEENminsalANDmaxsalTHEN

INSERTINTOBOOK(bookid,bookname,author1,pubdate,publish,price)

VALUES(p_no,'JAVA教程',’king’,'2009-10-03','电子出版社',p_sal);

ELSE

RAISEe_beyondbound;

ENDIF;

EXCEPTION

WHENe_beyondboundTHEN

DBMS_OUTPUT.PUT_LINE('Thepriceisbeyondbound!

');

ENDadd_book;

ENDpkg_eno;

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

当前位置:首页 > 高等教育 > 其它

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

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