ORACLE大型数据库技术图书管理系统.docx
《ORACLE大型数据库技术图书管理系统.docx》由会员分享,可在线阅读,更多相关《ORACLE大型数据库技术图书管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
ORACLE大型数据库技术图书管理系统
《ORACLE大型数据库技术》
题目:
图书管理系统
学生姓名:
雷丰悦
学号:
专业班级:
计科14101
同组姓名:
指导教师:
设计时间:
指导老师意见:
评定成绩:
签名:
日期:
一、需求分析
读者到图书馆电子查询处查询图书,查找读者需要的图书。
如果有满足读者要求的图书,查看该图书是否存在馆藏,如存在,读者凭借索书号进入馆藏室取书交给管理员,管理员在系统记录读者信息并记录借出图书信息,如果不在馆,则无法提供图书。
1.系统功能实现:
实现图书的查询、借出、归还、交罚款功能。
1)流程图
根据系统功能的需求分析,经过模块化的分析得到如下所示系统功能模块结构图。
读者借阅图书,系统查询图书是否在馆。
图书已借出,显示已借出;未借出显示下一步,图书管理员管理图书,登记读者信息,借出图书。
图1-1借阅图书模块流程图
二、数据库设计
1.概念结构设计:
1)局部ER图
读者—借阅—图书
借阅关系E-R图
2)全局ER图
全局完整E-R图
2.逻辑结构设计:
数据库的逻辑设计过程就是把ER图转化为关系模式的过程。
1)将E-R图转化为关系模式
✧读者(借书证号,姓名,性别,联系电话,系别,违章状况)
✧图书(ISBN,索书号,书名,作者,出版社,出版日期,简介,数量)
✧管理员(工作编号,姓名,性别,电话,工资)
✧借阅(读者编号,ISBN,工作编号,是否续借,借书日期,还书日期)
✧管理员_书籍(工作编号,ISBN,添加时间,是否在馆)
2)设计数据表
读者信息表READER
字段名
数据类型
长度
约束
属性
姓名
VARCHAR
30
NOTNULL
非主属性
性别
CHAR
4
NOTNULL
非主属性
系别
VARCHAR
30
NOTNULL
非主属性
借书证号
VARCHAR
20
NOTNULL
主码
联系电话
CHAR
11
非主属性
违章状况
CHAR
4
非主属性
图书信息表BOOK
字段名
数据类型
长度
约束
属性
ISBN
VARCHAR
30
NOTNULL
主码
索书号
VARCHAR
30
NOTNULL
非主属性
书名
VARCHAR
50
NOTNULL
非主属性
作者
VARCHAR
30
NOTNULL
非主属性
出版社
VARCHAR
50
非主属性
出版日期
DATE
非主属性
简介
VARCHAR
50
非主属性
数量
INT
非主属性
管理员信息表MASTER
字段名
数据类型
长度
约束
属性
工作编号
VARCHAR
20
NOTNULL
主码
姓名
VARCHAR
30
NOTNULL
非主属性
性别
VARCHAR
2
NOTNULL
非主属性
电话
CHAR
11
非主属性
借阅关系表R-B
字段名
数据类型
长度
约束
属性
ISBN
VARCHAR
30
NOTNULL
外码
借书证号
VARCHAR
20
NOTNULL
外码
工作编号
VARCHAR
20
NOTNULL
外码
借书日期
DATE
NOTNULL
非主属性
还书日期
DATE
NOTNULL
非主属性
是否续借
CAHR
4
NOTNULL
非主属性
确认归还
CHAR
4
NOTNULL
非主属性
管理员_书籍表M-B
字段名
数据类型
长度
约束
属性
工作编号
VARCHAR
20
NOTNULL
外码
ISBN
VARCHAR
30
NOTNULL
外码
添加时间
DATE
非主属性
是否在馆
CHAR
4
非主属性
三、创建表空间和用户
CREATETABLESPACETESTDATAFILE'D:
\TEST.ORA'SIZE100M;//创建表空间
DROPTABLESPACETEST;//删除表空间
CREATEUSERTESTIDENTIFIEDBY123456DEFAULTTABLESPACETESTQUOTA100MONUSERS;
//创建用户赋予密码及分配表空间
GRANTALLPRIVILEGESTOTEST;//赋予用户全部权限
四、在表空间中创建表且插入数据
1.创建表
创建读者-READER表:
CREATETABLEREADER
(借书证号VARCHAR(20)PRIMARYKEYNOTNULL,
姓名VARCHAR(30)NOTNULL,
性别CHAR(4)NOTNULL,
系别VARCHAR(30)NOTNULL,
联系电话CHAR(11),
违章状况CHAR(4)
);
杰伦','男','计算机科学与技术否');
张华','男','地理科学否');
蔡依林','女','音乐与艺术否');
李明','男','数学与应用数学否');
那英','女','土木工程否');
哈伦','男','酒店管理否');
罗志祥','男','旅游管理否');
黄渤','男','生物科学否');
唐颖','女','国际经济与贸易否');
雷龙','男','汉语言文学否');
创建管理员-MASTER表:
CREATETABLEMASTER
(工作编号VARCHAR(20)PRIMARYKEYNOTNULL,
姓名VARCHAR(30)NOTNULL,
性别CHAR(4)NOTNULL,
电话CHAR(11)
);
韩东','男
王晓丽','女
杨自鸣','男
冯冰','女
杜南珍','女
蒋华','男
刘翔','男
童诗珊','女
陈诗诗','女
夏蓉','男
创建图书-BOOK表:
CREATETABLEBOOK
(ISBNVARCHAR(30)PRIMARYKEYNOTNULL,
索书号VARCHAR(30)NOTNULL,
书名VARCHAR(50)NOTNULL,
作者VARCHAR(30)NOTNULL,
出版社VARCHAR(50),
出版日期DATE,
简介VARCHAR(50),
数量INT
);
INSERTINTO"TEST"."BOOK"VALUES('978-7-111-21382-6','TP3122626','JAVA编程思想','BRUCEECKEL','机械工业出版社',TO_DATE('2007-08-2100:
00:
00','YYYY-MM-DDHH24:
MI:
SS'),'最好的JAVA学习丛书','5');
INSERTINTO"TEST"."BOOK"VALUES('978-7-121-05414-3','TP3127581','PHP5项目开发实战详解','PHPCHINA','电子工业出版社',TO_DATE('2008-08-0800:
00:
00','YYYY-MM-DDHH24:
MI:
SS'),'PHP项目实战丛书','4');
INSERTINTO"TEST"."BOOK"VALUES('978-7-115-21678-6','TP311426','PHP基础教程','LARRYULLMAN','电子工业出版社',TO_DATE('2010-10-0100:
00:
00','YYYY-MM-DDHH24:
MI:
SS'),'PHP丛书','7');
INSERTINTO"TEST"."BOOK"VALUES('978-7-122-05978-9','TP3137781','PHP从入门到精通','陈超','化学工业出版社',TO_DATE('2009-09-2200:
00:
00','YYYY-MM-DDHH24:
MI:
SS'),'PHP丛书','10');
INSERTINTO"TEST"."BOOK"VALUES('978-7-121-06490-6','TP3137564','C#程序设计教程','刘甫迎,刘光会,王蓉','电子工业出版社',TO_DATE('2008-08-1400:
00:
00','YYYY-MM-DDHH24:
MI:
SS'),'C#丛书','2');
INSERTINTO"TEST"."BOOK"VALUES('978-7-302-17882-8','TP3124567','C#从入门到精通','王小科,吕双','清华大学出版社',TO_DATE('2008-10-0900:
00:
00','YYYY-MM-DDHH24:
MI:
SS'),'C#丛书','3');
INSERTINTO"TEST"."BOOK"VALUES('7-121-03179-5','TN911.73','数字图像处理','胡学龙,许开宇','电子工业出版社',TO_DATE('2006-07-1800:
00:
00','YYYY-MM-DDHH24:
MI:
SS'),'图像处理丛书','5');
INSERTINTO"TEST"."BOOK"VALUES('978-7-300-10800-1','TP3113448','大学音乐鉴赏','李迎春','中国人民大学出版社',TO_DATE('2009-08-1100:
00:
00','YYYY-MM-DDHH24:
MI:
SS'),'音乐丛书','5');
INSERTINTO"TEST"."BOOK"VALUES('7-03-016064-9','F590.7','旅游环境学','颜文洪,张朝枝','科学出版社',TO_DATE('2005-09-2100:
00:
00','YYYY-MM-DDHH24:
MI:
SS'),'旅游丛书','9');
INSERTINTO"TEST"."BOOK"VALUES('7-5338-4487-4','D920.0','法律教程','孙笑侠','浙江教育出版社',TO_DATE('2004-07-2300:
00:
00','YYYY-MM-DDHH24:
MI:
SS'),'法律---中国---高等学校---教材','8');
创建管理员_书籍表M-B表:
CREATETABLEMB
(ISBNVARCHAR(30)NOTNULL,
工作编号VARCHAR(20)NOTNULL,
添加时间DATE,
是否在馆CHAR(4),
PRIMARYKEY(工作编号,ISBN),
FOREIGNKEY(工作编号)REFERENCESMASTER(工作编号),
FOREIGNKEY(ISBN)REFERENCESBOOK(ISBN)
);
韩东','男
王晓丽','女
杨自鸣','男
冯冰','女
杜南珍','女
蒋华','男
刘翔','男
童诗珊','女
陈诗诗','女
夏蓉','男
创建借阅关系表R-B表:
CREATETABLERB
(ISBNVARCHAR(30)NOTNULL,
借书证号VARCHAR(20)NOTNULL,
工作编号VARCHAR(20)NOTNULL,
借书日期DATENOTNULL,
还书日期DATENOTNULL,
是否续借CHAR(4)NOTNULL,
确认归还CHAR(4)NOTNULL,
PRIMARYKEY(ISBN,借书证号,工作编号),
FOREIGNKEY(ISBN)REFERENCESBOOK(ISBN),
FOREIGNKEY(借书证号)REFERENCESREADER(借书证号),
FOREIGNKEY(工作编号)REFERENCESMASTER(工作编号)
);
五、索引
1.建立索引:
CREATEINDEXREADER_NAMEONREADER(姓名);
SELECT*FROMREADERRWHERER."姓名"='杰伦'
六、数据查询和视图
1.数据查询:
1.SELECT*FROMREADER//查询读者信息表
2.SELECT*FROMRBWHERE"工作编号
3.SELECT*FROMRBWHERE借书证号
//查询借书证号为所借的书名
4.SELECTBOOK."书名"FROMRB,BOOKWHERERB."借书证号
5.SELECT*FROMRBWHERE"是否续借"='N'ANDSYSDATE-"借书日期">'30'AND"确认归还"='N';
6.SELECT"出版社",SUM("数量")总本数FROMBOOKGROUPBY"出版社"
//查询图书馆内各出版社各有多少本书
7.SELECT*FROMREADERWHEREREADER."借书证号"IN(SELECT"借书证号"FROMRBWHERE"是否续借"='N'ANDSYSDATE-"借书日期">'30'AND"确认归还"='N')
2.视图:
1.CREATEORREPLACEVIEW欠费学生信息AS
SELECTREADER."借书证号",READER."姓名",READER."性别",READER."系别",
READER."联系电话",TO_CHAR(0.2*TO_NUMBER(SYSDATE-RB."借书日期"),'999.0')欠费
FROMREADER,RB
WHERE"是否续借"='N'ANDSYSDATE-"借书日期">'30'AND"确认归还"='N'
ANDREADER."借书证号"=RB."借书证号"
SELECT*FROM欠费学生信息;
//创建视图查询未按期归还图书的学生信息及欠费情况。
七、存储过程的使用
学生借阅信息删除存储过程
CREATEORREPLACEPROCEDUREP_DELETE(V_IDVARCHAR2)--定义变量ID
IS
BEGIN
DELETEFROMRBWHERE"借书证号"=V_ID;--执行删除操作
COMMIT;
END;
--执行
BEGIN
END;
学生续借书籍存储过程实现续借日期加一个月续借值改为Y
CREATEORREPLACEPROCEDUREP_XJ(V_IDVARCHAR2,XUJIECHAR)--定义变量ID
IS
BEGIN
--DELETEFROMRBWHERE"借书证号"=V_ID;--执行删除操作
UPDATERBSET"是否续借"=XUJIE,"还书日期"="ADD_MONTHS"("还书日期",1)WHERE"借书证号"=V_ID;--执行修改操作
COMMIT;
END;
--执行
BEGIN
P_XJ
END;
--执行完上边后执行
SELECT*FROMRB;
创建函数统计各出版社图书的库存量
--函数
CREATEORREPLACEFUNCTIONGETSCOUNT(IN1INVARCHAR2)RETURNNUMBER
AS
COUNTBOOKNUMNUMBER;
BEGIN
SELECT"数量"INTOCOUNTBOOKNUMFROMBOOKWHERE"出版社"=IN1;
RETURN(COUNTBOOKNUM);
END;
--调用函数
DECLARE
COUNTNUMNUMBER:
=0;
BEGIN
COUNTNUM:
=GETSCOUNT('科学出版社');
DBMS_OUTPUT.PUT('图书馆有“科学版社”书籍总数为:
');
DBMS_OUTPUT.PUT(COUNTNUM);
DBMS_OUTPUT.PUT_LINE('本');
END;
触发器:
对READER表添加触发器实现插入修改数据时输出插入或修改后的记录信息
CREATEORREPLACETRIGGERREADER_ONLOAD
AFTERINSERTORUPDATEONREADER
FOREACHROW
DECLARE
BEGIN
DBMS_OUTPUT.PUT_LINE('借书证号:
'||:
NEW.借书证号);
DBMS_OUTPUT.PUT_LINE('姓名:
'||:
NEW.姓名);
DBMS_OUTPUT.PUT_LINE('性别:
'||:
NEW.性别);
DBMS_OUTPUT.PUT_LINE('系别:
'||:
NEW.系别);
DBMS_OUTPUT.PUT_LINE('联系电话:
'||:
NEW.联系电话);
DBMS_OUTPUT.PUT_LINE('触发器已被执行');
END;
雷丰悦','男','计算机科学与技术否');
八、用户、角色
1.普通将图书信息表的查询权限授给普通读者R1
GRANTSELECTONTABLEBOOKTOR1
2.将借阅关系表RB,管理员_书籍表MB的查询和修改的权限给管理员M1
GRANTUPDATE,SELECTONTABLER-B,M-B,M-STOM1
九、实验心得
本图书管理系统的数据库分析与设计是由我们小组分工合作利用一周的课余时间完成。
实验环境:
Windows7+Navicat11+Oracle11g
通过这本次实验,我们掌握了系统开发的数据库设计的各个步骤以及文档的书写,例如E—R图的绘制,物理结构设计等,并且结合实例提高了数据库代码的编写能力。
此次实验中还有不足之处在触发器的应用还待提高。
总的来说动手实践后的更加深入了解到Oracle数据库的强大和美丽。