Oracle图书管理系统文档格式.docx
- 文档编号:18365175
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:13
- 大小:82.55KB
Oracle图书管理系统文档格式.docx
《Oracle图书管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《Oracle图书管理系统文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
VARCHAR2
20
NOTNULL
学科类型名称
demo
100
BOOK_TYPE表结构及其约束
typeid
图书类型编号
typename
图书类型名称
BOOK表结构及其约束
bookid
书籍编号
bookname
书籍名称
author1
书籍作者
author2
author3
pubdate
DATE
出版日期
publish
30
出版社
photo
图片地址
abstract
4000
内容简介
price
7,2
价格
ISBN
17
书籍ISBN码
bookclass
外码
学科类型
booktype
藏书类型
READER_TYPE表结构及其约束
READER表结构及其约束
readerid
读者编号
name
10
读者姓名
telephone
15
联系电话
邮箱地址
dept
所在院系
right
1
取值为0或1
借阅权限
readertype
读者类型
1000
BORROW表结构及其约束
联合
图书编号
borrowdate
出借日期
due
应还日期
last_due
实际归还日期
RULE表结构及其约束
藏书类型编号
读者类型编号
days
5
期限(天)
num
册数(本)
renew
续借次数(次)
overtime
5,2
逾期处罚
(元/册/天)
ADMIN表结构及其约束
Id
管理员编号
username
管理员账号
password
账号密码
PRECONCERT(预约表)表结构及其约束
predate
预约日期
创建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,
创建book_class表
CREATETABLEbook_class(
clASsidNUMBER(11)PRIMARYKEY,
clASsnameVARCHAR2(20)NOTNULL,
创建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(
bookidNUMBER(11)REFERENCESbook(bookid),
predateDATE,
创建rule表
CREATETABLErule(
booktypeNUMBER(11)REFERENCESbook_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
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)
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
v_booktypeNUMBER;
v_readertypeNUMBER;
v_dateVARCHAR2(10);
SELECTbooktypeINTOv_booktypeFROMbookWHEREbookid=v_bookid;
SELECTreadertypeINTOv_readertypeFROMreaderWHEREreaderid=v_readerid;
SELECTto_char(sysdate+days,'
yyyy-mm-dd'
)INTOv_dateFROMrule
WHEREreadertype=v_readertypeANDbooktype=v_booktype;
RETURNv_date;
计算超期罚款的存储过程
CREATEORREPLACEPROCEDUREp_timeover_money(
v_readeridNUMBER,v_bookidNUMBER,v_moneyOUTNUMBER)
v_daysNUMBER;
p_days_from_due(v_readerid,v_bookid,v_days);
SELECTovertime*floor(abs(v_days))INTOv_moneyFROMrule
判断读者可否进行借阅的存储过程
CREATEORREPLACEPROCEDUREp_can_borrow(
v_readeridNUMBER,v_bookidNUMBER,v_numOUTNUMBER)
v_rightNUMBER;
v_borrowed_numNUMBER;
v_rule_numNUMBER;
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:
ELSE
=v_rule_num-v_borrowed_num;
EXCEPTION
WHENOTHERSTHEN
v_num:
为BOOK表创建一个触发器,当插入新书籍时显示新书籍的书籍编号、出版社和价格;
当更新书籍价格时,显示修改前后书籍价格;
当删除书籍时,显示被删除的书籍编号、出版社和价格。
CREATEORREPLACETRIGGERtrg_dml_row
BEFOREINSERTORUPDATEORDELETE
ONBOOK
FOREACHROW
IFINSERTINGTHEN
DBMS_OUTPUT.PUT_LINE(:
new.bookid||'
'
||
:
new.publish||'
||:
new.price);
ELSIFUPDATINGTHEN
old.price||'
ELSEDBMS_OUTPUT.PUT_LINE(:
old.bookid||'
'
old.publish||'
old.price);
ENDtrg_dml_row;
为BOOK表创建一个触发器,当修改书籍价格时,保证修改后的价格高于修改前的价格。
CREATEORREPLACETRIGGERtrg_update_row
BEFOREUPDATEOFprice
WHEN(new.price<
=old.price)
RAISE_APPLICATION_ERROR(-20001,'
Thepriceislower!
);
ENDtrg_update_row;
包体创建
CREATEORREPLACEPACKAGEBODYpkg_eno
PROCEDUREupdate_sal(p_noNUMBER,p_salNUMBER)
SELECTmin(price),max(price)INTOminsal,maxsal
FROMBOOK;
IFp_salBETWEENminsalANDmaxsalTHEN
UPDATEBOOKSETprice=p_sal
WHEREbookid=p_no;
IFSQL%NOTFOUNDTHEN
RAISE_APPLICATION_ERROR(-20000,'
TheBOOKdoesn'
texist'
RAISEe_beyondbound;
WHENe_beyondboundTHEN
DBMS_OUTPUT.PUT_LINE('
Thepriceisbeyondbound!
ENDupdate_sal;
PROCEDUREadd_book(p_noNUMBER,p_salNUMBER)
INSERTINTOBOOK(bookid,bookname,author1,pubdate,publish,price)
VALUES(p_no,'
JAVA教程'
’king’,'
2009-10-03'
'
电子出版社'
p_sal);
ENDadd_book;
ENDpkg_eno;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 图书 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)