oracle三级项目.docx

上传人:b****8 文档编号:10328520 上传时间:2023-02-10 格式:DOCX 页数:29 大小:263.42KB
下载 相关 举报
oracle三级项目.docx_第1页
第1页 / 共29页
oracle三级项目.docx_第2页
第2页 / 共29页
oracle三级项目.docx_第3页
第3页 / 共29页
oracle三级项目.docx_第4页
第4页 / 共29页
oracle三级项目.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

oracle三级项目.docx

《oracle三级项目.docx》由会员分享,可在线阅读,更多相关《oracle三级项目.docx(29页珍藏版)》请在冰豆网上搜索。

oracle三级项目.docx

oracle三级项目

 

项目名称:

图书管理系统的设计与实现

 

1.需求描述

1.1背景

图书馆在正常运营中面对大量书籍、读者信息以及两者间相互联系产生的借书信息、还书信息。

现有的人工记录方法既效率低又错误过多,大大影响了图书馆的正常管理工作。

因此需要对书籍资源、读者资源、借书信息、还书信息进行管理,及时了解各个环节中信息的变更,有利于管理效率的提高。

1.2功能分析图

1.3数据流程图

2.概念结构设计

2.1分E-R图

(管理员E-R图)

(学生E-R图)

(图书E-R图)

2.2总E-R图

(总E-R图)

设计说明:

上图是该图书管理系统总E-R图,该系统涉及的实体集有:

学生实体集:

具有属性用户名、密码、学号,姓名,性别,院系、班级、电话

图书实体集:

具有属性图书ISBN编号、图书书名、作者、出版社、定价、图书类别、库存

管理员实体集:

具有属性用户名、密码、姓名、加入时间

一个学生可以借阅和归还多本图书,所以学生和图书之间的联系为1:

n的联系。

一个管理员可以对多本图书进行管理,图书管理员可以有多个,所以管理员和图书之间的联系为m:

n的联系。

一个管理员可以对多个读者进行管理,图书管理员可以有多个,所以管理员和学生之间的联系为m:

n的联系。

3.逻辑结构设计

(1)表的设计

1.管理员体集可以转换为关系:

ADMINISTRATOR(ADMIN_ID,ADMIN_NAME,PASSWORD,TELEPHONE,EMAIL,ADDRESS)

ADMIN_ID表示管理员用户ID,ADMIN_NAME表示姓名,PASSWORD表示密码,TELEPHONE表示管理员电话,EMAIL表示管理员邮箱地址,ADDRESS表示联系地址

2.图书详细信息可以转换为关系

BOOK_DETAILS(BOOK_ID2,BOOK_NAME,KIND_ID,WRITER,PUBLISHER_ID,INTRODUCTION,PUBLISH_DATE,IN_DATE,ACCOUNT)

BOOK_ID2表示书号,BOOK_NAME表示书名,KIND_ID表示借阅量,WRITER表示最大借阅量,PUBLISHER_ID出版社号,INTRODUCTION表示读者名,PUBLISH_DATE表示借出日期,IN_DATE表示归还日期,ACCOUNT表示书的状态

3.图书管理记录可以转换为关系

BOOK_MANAGE_RECORDS(ADMIN_ID,BOOK_ID,ACTION,TIME)

ADMIN_ID表示管理员号,BOOK_ID表示图书号,ACTION表示开始状态,TIME表示借阅时间

4.图书分类可以转换为关系

BOOKKINDS(KIND_ID,KIND_NAME,FATHER_TYPE,)

KIND_ID表示索书号,KIND_NAME表示索书名,FATHER_TYPE表示上次借书记录

5.出版社实体可以转化的关系

PUBLISHER("PUBLISHER_ID","TELEPHONE","FAX","EMAIL","ADDRESS","PUBLISHER_NAME")"PUBLISHER_ID"出版社ID"TELEPHONE"电话"FAX"传真"EMAIL"邮箱"ADDRESS"地址"PUBLISHER_NAME"出版社名字

6.读者实体可以转化为

READERS("READER_ID","READER_NAME","PASSWORD","TELEPHONE","EMAIL","COMPANY","SEX","IN_DATE")

"READER_ID"读者号"READER_NAME"读者名称"PASSWORD"密码"TELEPHONE"电话"EMAIL"邮箱"COMPANY"公司"SEX"性别"IN_DATE"日期

7.图书预约转化表为

RESERVATIONS("READER_ID","BOOK_ID2","R_DATE")"READER_ID"读者ID"BOOK_ID2"书ID"R_DATE"日期

8.图书实体转化为

BOOKS("BOOK_ID","BOOK_ID2","STATE",)"BOOK_ID",书号"BOOK_ID2",检索书号"STATE",书的状态

9.借阅记录

BORROW_RECORDS("BOOK_ID",,"READER_ID","BORROW_DATE","RETURN_DATE","STATE","RENEWABLE",)

"BOOK_ID",书号"READER_ID",读者号"BORROW_DATE",借书日期"RETURN_DATE",还书日期"STATE",书的状态"RENEWABLE",续订

10.图书荐购

BUY_RECOMMENDATION("RECOMMENDATION_ID","READER_ID","BOOK_NAME","WRITER","PUBLISHER_NAME","SUMMARY",)"RECOMMENDATION_ID",荐购号"READER_ID",读者号"BOOK_NAME",书名"WRITER",作者"PUBLISHER_NAME",出版社名"SUMMARY",总价

(2)序列的设计

创建一个名为“TUSER_SEQ”的序列,用于产生读者学号,起始值为307,步长为1,不缓存,不循环。

创建一个名为“TBOOK_SEQ”的序列,用于产生部门编号,起始值为380,步长为10,最大值为9990,不缓存,不循环.

创建一个seq_Borrow,用于产生读者编号,起始值为1,步长为1,不缓存,不循环。

(3)视图的设计

读者当前借阅

新进书目

图书推荐

图书视图

(4)索引的设计

在图书表上创建唯一性索引

在读者表表上的sex列上创建一个位图索引

4.数据库实施

(1)创建用户,并给用户授权

insertinto"WIN2008"."ADMINISTRATOR"

values('070411','admin','admin','123456789','121212@com',’大连’);

(2)创建表

1.管理员表

ADMINISTRATOR

("ADMIN_ID"CHAR(10)NOTNULLENABLE,

"ADMIN_NAME"CHAR(50)NOTNULLENABLE,

"PASSWORD"VARCHAR2(20)NOTNULLENABLE,

"TELEPHONE"NUMBER,

"EMAIL"VARCHAR2(50),

"ADDRESS"VARCHAR2(100),

CONSTRAINT"PRIMARY_ADMIN_ID"PRIMARYKEY("ADMIN_ID")

2.读者表

READERS

("READER_ID"CHAR(10)NOTNULLENABLE,

"READER_NAME"VARCHAR2(50)NOTNULLENABLE,

"PASSWORD"VARCHAR2(20)NOTNULLENABLE,

"TELEPHONE"CHAR(13),

"EMAIL"VARCHAR2(50),

"COMPANY"VARCHAR2(50),

"SEX"CHAR(3)NOTNULLENABLE,

"IN_DATE"DATE,

CONSTRAINT"PRIMARY_READER_ID"PRIMARYKEY("READER_ID")

3.借阅记录表

BORROW_RECORDS

("BOOK_ID"CHAR(10)DEFAULT1NOTNULLENABLE,

"READER_ID"CHAR(10)NOTNULLENABLE,

"BORROW_DATE"DATENOTNULLENABLE,

"RETURN_DATE"DATENOTNULLENABLE,

"STATE"CHAR

(1)DEFAULT1NOTNULLENABLE,

"RENEWABLE"CHAR

(1)DEFAULT1NOTNULLENABLE,

CONSTRAINT"PRIMARY_RECORD_ID"PRIMARYKEY("BOOK_ID","READER_ID","BORROW_DATE")

4.图书预约表

RESERVATIONS

("READER_ID"CHAR(10)NOTNULLENABLE,

"BOOK_ID2"CHAR(10)NOTNULLENABLE,

"R_DATE"DATENOTNULLENABLE,

CONSTRAINT"PRIMARY_KEY_1"PRIMARYKEY("READER_ID","BOOK_ID2","R_DATE")

5.图书荐购表

BUY_RECOMMENDATION

("RECOMMENDATION_ID"CHAR(10)NOTNULLENABLE,

"READER_ID"CHAR(10)NOTNULLENABLE,

"BOOK_NAME"VARCHAR2(50)NOTNULLENABLE,

"WRITER"VARCHAR2(50),

"PUBLISHER_NAME"VARCHAR2(100),

"SUMMARY"VARCHAR2(1000),

CONSTRAINT"PRIMARY_REC_ID"PRIMARYKEY("RECOMMENDATION_ID")

6.图书表

BOOKS

("BOOK_ID"CHAR(10)NOTNULLENABLE,

"BOOK_ID2"CHAR(10)NOTNULLENABLE,

"STATE"CHAR

(1)NOTNULLENABLE,

CONSTRAINT"PRIMARY_KEY"PRIMARYKEY("BOOK_ID")

7.图书管理记录表

BOOK_MANAGE_RECORDS

("ADMIN_ID"CHAR(10)NOTNULLENABLE,

"BOOK_ID"CHAR(10)NOTNULLENABLE,

"ACTION"VARCHAR2(50)NOTNULLENABLE,

"TIME"DATENOTNULLENABLE,

CONSTRAINT"PRIMARY_BOOK_MANAGE_RECORDS"PRIMARYKEY("ADMIN_ID","BOOK_ID","TIME")

8.图书详细信息表

BOOK_DETAILS

("BOOK_ID2"CHAR(10)NOTNULLENABLE,

"BOOK_NAME"VARCHAR2(50)NOTNULLENABLE,

"KIND_ID"CHAR(10)NOTNULLENABLE,

"WRITER"VARCHAR2(50)NOTNULLENABLE,

"PUBLISHER_ID"CHAR(10)NOTNULLENABLE,

"INTRODUCTION"VARCHAR2(1000),

"PUBLISH_DATE"DATENOTNULLENABLE,

"IN_DATE"TIMESTAMP(6)NOTNULLENABLE,

"ACCOUNT"NUMBER,

CONSTRAINT"PRIMARY_BOOK_ID2"PRIMARYKEY("BOOK_ID2")

9.图书分类表

BOOKKINDS

("KIND_ID"CHAR(10)NOTNULLENABLE,

"KIND_NAME"VARCHAR2(50)NOTNULLENABLE,

"FATHER_TYPE"VARCHAR2(50)NOTNULLENABLE,

CONSTRAINT"PRIMARY_KIND_ID"PRIMARYKEY("KIND_ID")

10.出版社表

PUBLISHER

("PUBLISHER_ID"CHAR(10)NOTNULLENABLE,

"TELEPHONE"CHAR(13)NOTNULLENABLE,

"FAX"CHAR(13),

"EMAIL"VARCHAR2(20),

"ADDRESS"VARCHAR2(100)NOTNULLENABLE,

"PUBLISHER_NAME"VARCHAR2(100)NOTNULLENABLE,

CONSTRAINT"PRIMARY_PUBLISHER_ID"PRIMARYKEY("PUBLISHER_ID")

(3)创建序列

创建一个名为“TUSER_SEQ”的序列,用于产生读者学号,起始值为307,步长为1,不缓存,不循环。

CREATESEQUENCETUSER_SEQSTARTWITH307INCREMENTBY1NOCACHENOCYCLE;

创建一个名为“TBOOK_SEQ”的序列,用于产生部门编号,起始值为380,步长为10,最大值为9990,不缓存,不循环.

CREATESEQUENCETBOOK_SEQSTARTWITH380INCREMENTBY10MAXVALUE9990NOCACHENOCYCLE;

创建一个seq_Borrow,用于产生读者编号,起始值为1,步长为1

Createsequenceseq_Borrowstartwith1incrementby1nocycle

(4)创建索引

在图书表上创建唯一性索引

CreateuniqueindexBook_cBooksTypeonBOOKS(BOOK_ID)tablespaceusers;

在读者表表上的sex列上创建一个位图索引

CreatebitmapindexREADERS_sexonREADERS(sex)tablespaceusers;

(5)创建视图

读者当前借阅

createorreplaceviewcurrent_borrow_viewas

select"BOOK_ID","READER_ID","BORROW_DATE","RETURN_DATE","STATE","RENEWABLE"

fromborrow_records

wherestate='1'

新进书目

createorreplaceviewnew_coming_booksas

selectbook_id2,book_name,writer,publisher_name

frombook_details,publisher

wherebook_details.publisher_id=publisher.publisher_idandbook_details.in_date>add_Months(sysdate,-1)

图书推荐

createorreplaceviewgb_recas

selectid,book_name,publisher_name,writer,b_numfrom

(selectbooks.book_id2id,count(*)b_num

fromborrow_records,books

whereborrow_records.book_id=books.book_id

groupbybooks.book_id2

),books_view

wherebooks_view.BOOK_ID2=id

orderbyb_numdesc

图书视图

CREATEORREPLACEFORCEVIEW"WIN2008"."BOOKS_VIEW"("BOOK_ID2","BOOK_NAME","WRITER","PUBLISHER_NAME","ACCOUNT","AVAILABLE_ACCOUNT","INTRODUCTION")AS

selectdistinctbook_details.BOOK_ID2,BOOK_NAME,WRITER,PUBLISHER_NAME,ACCOUNT,(selectcount(*)frombookswherebooks.book_id2=book_details.book_id2andbooks.state='1'groupbybooks.book_id2)AVAILABLE_ACCOUNT,INTRODUCTION

frombooks,book_details,publisher

wherebooks.book_id2=book_details.book_id2andbook_details.publisher_id=publisher.publisher_id

;

5.PL/SQL程序设计

(1)存储过程的设计

创建一个名为proc_Due的存储过程,实现还书操作

创建一个名为trg_BorrowBook的存储过程,返回某个学生当前没有归还的所有图书

创建名为“Pro_secure_dml”的存储过程,检查当前用户操作时间是否为工作时间,即非周六周日,时间为08:

00~18:

00

(2)函数的设计

创建一个名为func_dept_book的函数,以读者号为参数,查看借阅的书号:

创建一个名为fun_DEPT_RECORDS的函数,以图书号为参数,查看还书的日期:

(3)触发器的设计

创建名为check_borrow_book的触发器,实现读者借书时更新书的可借与不可借状态。

创建名为check_BORROW_RECORDS的触发器,当插入、删除或修改借阅信息时,统计人数,并输出

创建名为check_BORROW_number的触发器,当插入一条借书记录,保证单个人不超过10本书。

(4)包的设计

创建book_manage包,用于存储图书入库,借书,还书,时间等信息,实现获取图书,插入图书,借书,还书,续借书,更新借书记录的功能。

创建reader_manage包,用于存储读者信息,读者的借书信息,实现查询借阅信息,查询历史借阅信息,插入新读者,更新读者信息的功能。

6.PL/SQL程序开发

(1)存储过程的实现

创建一个名为proc_Due的存储过程,实现还书操作

CREATEORREPLACEPROCEDUREproc_due(

P_borrowCardIdVARCHAR2,p_ISBNVARCHAR2,p_dueDateDATEDEFAULTSYSDATE)

AS

V_numberNUMBER;

BEGIN

SELECTcount(*)INTOv_numberFROMborrow_records

WHEREREADER_ID=p_borrowCardIdANDBOOK_ID=p_isbn;

IFv_number=0THEN

RAISE_APPLICATION_ERROR(-20000,'对不去,没有相应借书记录!

');

ENDIF;

UPDATEborrow_recordsSETRETURN_DATE=p_dueDateWHEREREADER_ID=p_borrowCardIdANDBOOK_ID=p_isbn;

END;

创建一个名为trg_BorrowBook的存储过程,返回某个学生当前没有归还的所有图书

CREATEORREPLACEPROCEDUREproc_BorrowBook(

P_borrowCardIdVARCHAR2,p_bookCurssorOUTsys_refcursor)

AS

BEGIN

OPENp_bookCurssorFORSELECTbooks.book_id,BORROW_DATE,RETURN_DATEFROMbooks,borrow_records

WHEREbooks.book_id=borrow_records.book_idANDREADER_ID=p_borrowCardIdANDRETURN_DATEISNULL;

END;

创建名为“Pro_secure_dml”的存储过程,检查当前用户操作时间是否为工作时间,即非周六周日,时间为08:

00~18:

00

createorreplaceprocedurePro_secure_dml

is

begin

ifto_char(sysdate,'HH24:

MI')notbetween'08:

00'and'18:

00'orto_char(sysdate,'DY','NLS_DATE_LANGUAGE=AMERICAN')

In('SAT','SUN')thenraise_application_error(-20205,'只能在正常的工作时间内改变。

');

endif;

endPro_secure_dml;

(2)函数的实现

创建一个名为func_dept_book的函数,以读者号为参数,查看借阅的书号:

CREATEORREPLACEFUNCTIONfunc_dept_book(

p_deptnoreaders.reader_id%type)

returnborrow_records.book_id%type

as

v_maxsalborrow_records.book_id%type;

begin

selectbook_idintov_maxsalfromborrow_recordswhereborrow_records.reader_id=p_deptno;

returnv_maxsal;

exception

whenno_data_foundthen

dbms_output.put_line('nodata');

endfunc_dept_book;

创建一个名为fun_DEPT_RECORDS的函数,以图书号为参数,查看还书的日期:

CREATEORREPLACEFUNCTIONfun_DEPT_RECORDS(

p_bookidBORROW_RECORDS.BOOK_ID%type)

returnborrow_records.return_date%type

as

v_dateborrow_records.return_date%type;

begin

selectreturn_dateintov_datefromborrow_recordswhereborrow_records.book_id=p_bookid;

returnv_date;

exception

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

当前位置:首页 > 解决方案 > 学习计划

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

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