图书管理系统
设计一个能够实现数据添加、删除、更新等操作的数据库,但是本文章主要涉及的内容是数据存储函数、存储过程的设计。至于简单的操作请各位按照自己的需求自行设计。
操作系统:Windows 10
操作环境:Oracle12c
安装包链接:https://pan.baidu.com/s/1D6vXcOY90ucnMdY_Z8ptfg
提取码:ro6v
安装过程:请去寻求大佬的详解!!!!
前言
随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理。因此,必须指定一套合理、有效,规范和使用的图书馆管理系统,对图书资料进行集中统一的管理。
提高图书管理工作效率,做到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。
一、需求分析
-
读者基本信息的输入,包括借书证编号、读者姓名、读者性别
-
读者基本信息的查询、删除,包括读者借书证编号、读者姓名、读者性别等
-
书籍库存信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称
-
书籍库存信息的查询,修改,包括书籍编号、书籍名称、书籍类别、作者姓名等
-
借阅信息的输入,包括借书证编号、书籍编号、借书时间、还书时间
-
管理员信息的输入,包括管理员编号,管理员姓名和管理的借书证号
二、E-R图设计
三、关系模型设计:
- 读者(借书证编号,读者姓名,读者性别,出生日期,联系方式)
- 书籍(书籍编号,书籍名称,书籍作者,出版社,库存量)
- 借阅(借书证编号,书籍编号,借书时间,还书时间)
- 管理员(管理员编号,管理员姓名,性别)
- 管理(管理编号,借书证编号)
四、数据库基础设计:
1、设计表结构
表(1).readers的表结构
字段名 | 数据类型 | 是否可空 | 默认值 | 说明 |
---|---|---|---|---|
借书证编号 | Varchar (10) | Х | 无 | 主键 |
读者姓名 | Varchar (10) | Х | 无 | |
读者性别 | Varchar (2) | Х | 无 | |
出生时间 | Date | X | 无 | |
联系方式 | Varchar (11) | √ | 无 |
表(2)books的表结构
字段名 | 数据类型 | 是否可空 | 默认值 | 说明 |
---|---|---|---|---|
书籍编号 | Varchar (10) | Х | 无 | 主键 |
书籍名称 | Varchar (32) | Х | 无 | |
书籍作者 | Varchar (32) | Х | 无 | |
出版社 | Varchar (32) | X | 无 | |
库存量 | Number (32) | √ | 无 |
表(3)records的表结构
字段名 | 数据类型 | 是否可空 | 默认值 | 说明 |
---|---|---|---|---|
书籍编号 | Varchar (10) | Х | 无 | 联合主键 |
借书证编号 | Varchar (10) | Х | 无 | 联合主键 |
借书时间 | Date | Х | 无 | |
还书时间 | Date | Х | 无 |
表(4)Manger的表结构
字段名 | 数据类型 | 是否可空 | 默认值 | 说明 |
---|---|---|---|---|
管理员编号 | Varchar (10) | Х | 无 | 主键 |
管理员姓名 | Varchar (10) | Х | 无 | 主键 |
性别 | Varchar (2) | Х | 无 |
表()Manage_reader表结构
字段名 | 数据类型 | 是否可空 | 默认值 | 说明 |
---|---|---|---|---|
管理员编号 | Varchar (10) | Х | 无 | 联合主键 |
借书证编号 | Varchar (10) | Х | 无 | 联合主键 |
2、设计表
a.创建readers表:
create table readers
(
借书证编号 varchar(10) not null primary key,
读者姓名 varchar(32) not null,
读者性别 varchar(2) not null check(读者性别=‘男’ or 读者性别=‘女’),
出生时间 date not null,
联系方式 varchar(11) unique
);
b.创建books表:
(
书籍编号 varchar(10) not null primary key,
书籍名称 varchar(32) not null,
书籍作者 varchar(32) not null,
出版社 varchar(32) not null,
库存量 number(4)
);
c.创建records表:
create table records
(
书籍编号 varchar(32) not null,
借书证编号 varchar(10) not null,
借书时间 date not null,
还书时间 date not null,
constraint manage_mess primary key(书籍编号,借书证编号)
);
d.创建manager表:
创建manager表:
create table manager
(
管理员编号 varchar(10) not null primary key,
管理员姓名 varchar(32) not null,
性别 varchar(2) not null
);
e.创建manage_reader表:
create table manager_reader
(
管理员编号 varchar(10) not null,
借书证编号 varchar(10) not null,
constraint manage_mess primary key(管理员编号,借书证编号)
);
3、添加表内容
Readers表内的数据:
insert into readers values('0002', '王丽', '女', to_date('1997-01-15', 'YYYY-MM-DD'),'15345248343');
insert into readers values('0003', '李红', '男', to_date('1999-03-23', 'YYYY-MM-DD'),'15123456793');
insert into readers values('0004', '王五', '男', to_date('2000-07-19', 'YYYY-MM-DD'),'13845324893');
insert into readers values('0005', '李楠', '女', to_date('1998-04-05', 'YYYY-MM-DD'),'14753573214');
insert into readers values('0006', '王鹏', '男', to_date('1996-06-25', 'YYYY-MM-DD'),'13145622486');
insert into readers values('0007', '王海', '男', to_date('1998-03-14', 'YYYY-MM-DD'),'13144324893');
insert into readers values('0008', '马玲玲', '女', to_date('1999-02-21', 'YYYY-MM-DD'),'13561345689');
insert into readers values('0009', '李强', '男', to_date('1996-07-11', 'YYYY-MM-DD'),'13145548312');
insert into readers values('0010', '孙小欣', '女', to_date('1999-09-25', 'YYYY-MM-DD'),'13234583256');
Books的数据:
insert into books values('B0002', '《水浒传》', '施耐庵', '人民文学出版社',43);
insert into books values('B0003', '《童年》', '高尔基', '人民文学出版社',10);
insert into books values('B0004', '《悲惨世界》', '雨果', '人民文学出版社',27);
insert into books values('B0005', '《计算机基础》', '刘锡轩', '清华大学出版社,7');
insert into books values('B0006', '《骆驼祥子》', '老舍', '人民文学出版社',12);
insert into books values('B0007', '《Android开发》', '李骏', '人民邮电出版社',9);
insert into books values('B0008', '《朝花夕拾》', '鲁迅', '人民文学出版社',237);
insert into books values('B0009', '《老人与海》', '海明威', '人民文学出版社',34);
insert into books values('B0010', '《C#深入详解》', '王寅永', '电子工业出版社',34);
Records表的数据:
insert into records values('B0002', '0003', to_date('2007-03-14 15:13', 'YYYY-MM-DD HH24:MI'), to_date('2007-03-27 14:10', 'YYYY-MM-DD HH24:MI'));
insert into records values('B0003', '0001', to_date('2007-06-25 14:59', 'YYYY-MM-DD HH24:MI'), to_date('2007-07-14 14:10', 'YYYY-MM-DD HH24:MI'));
insert into records values('B0004', '0004', to_date('2007-07-13 16:15', 'YYYY-MM-DD HH24:MI'), to_date('2007-08-01 14:10', 'YYYY-MM-DD HH24:MI'));
insert into records values('B0005', '0002', to_date('2007-03-10 15:10', 'YYYY-MM-DD HH24:MI'), to_date('2007-03-20 14:10', 'YYYY-MM-DD HH24:MI'));
insert into records values('B0006', '0002', to_date('2007-05-06 11:10', 'YYYY-MM-DD HH24:MI'), to_date('2007-05-20 14:10', 'YYYY-MM-DD HH24:MI'));
insert into records values('B0007', '0006', to_date('2007-08-08 13:10', 'YYYY-MM-DD HH24:MI'), to_date('2007-08-25 14:10', 'YYYY-MM-DD HH24:MI'));
insert into records values('B0007', '0006', to_date('2007-07-05 09:10', 'YYYY-MM-DD HH24:MI'), to_date('2007-07-23 14:10', 'YYYY-MM-DD HH24:MI'));
insert into records values('B0007', '0009', to_date('2007-09-06 10:10', 'YYYY-MM-DD HH24:MI'), to_date('2007-09-14 14:10', 'YYYY-MM-DD HH24:MI'));
insert into records values('B0008', '0009', to_date('2007-10-04 11:30', 'YYYY-MM-DD HH24:MI'), to_date('2007-10-19 14:10', 'YYYY-MM-DD HH24:MI'));
insert into records values('B0008', '0010', to_date('2007-11-09 11:46', 'YYYY-MM-DD HH24:MI'), to_date('2007-11-14 14:10', 'YYYY-MM-DD HH24:MI'));
insert into records values('B0009', '0010', to_date('2007-01-04 17:00', 'YYYY-MM-DD HH24:MI'), to_date('2007-01-14 14:10', 'YYYY-MM-DD HH24:MI'));
Manager表的数据
insert into manager values('M002', '李强','男');
insert into manager values('M003', '王琳琳','女');
insert into manager values('M004', '孙研','女');
insert into manager values('M005', '张薇','女');
insert into manager values('M006', '程明','男');
Manage_reader的表数据
insert into manager values('M001', '0002');
insert into manager values('M001', '0003');
insert into manager values('M002', '0008');
insert into manager values('M002', '0009');
insert into manager values('M003', '0003');
insert into manager values('M004', '0004');
五、设计触发器
(1)在数据库中创建一个触发器,当records表删除一条借阅信息,在books对应的书籍库存量加1,当records表添加一条借阅信息,在books对应的书籍库存量减1。
after insert or update or delete on RECORDS for each row
declare
begin
if inserting then
UPDATE books set "库存量"="库存量"-1 where "书籍编号"=:new."书籍编号";
elsif deleting then
UPDATE books set "库存量"="库存量"+1 where "书籍编号"=:old."书籍编号";
end if;
end;
(2)records表执行插入和删除操作后给出相应提示
after insert or update or delete on readers for each row
declare
infor char(10);
begin
if inserting then
infor:='插入';
elsif updating then
infor:='更新';
elsif deleting then
infor:='删除';
end if;
dbms_output.put_line(infor);
end;
六、存储过程设计
(1)增加指定书籍的库存量
create or replace procedure book_add(bname in varchar, num in number)
as
begin
if num <= 0 then
dbms_output.put_line('增加的库存量不能为负,请重新输入!!!');
else
update books set 库存量= 库存量+num where 书籍名称=bname;
dbms_output.put_line('添加成功');
end if;
end;
(2)创建一个存储过程用于添加图书信息
create or replace PROCEDURE books_add(bid in varchar,bname in varchar,author in VARCHAR2,press in VARCHAR2,inventory in number)
as
begin
INSERT into books VALUES(bid,bname,author,press,inventory);
end;
(3)创建一个存储过程用于添加借阅记录
create or replace PROCEDURE records_add(bid in varchar,rid in varchar,addtime in VARCHAR2,deltime in VARCHAR2)
as
begin
INSERT into records VALUES(bid,rid,TO_DATE(addtime,'yyyy-mm-dd hh24:mi'),TO_DATE(deltime,'yyyy-mm-dd hh24:mi'));
end;
(4)创建一个存储过程 用于删除记录
create or replace PROCEDURE del_record(table_name in VARCHAR2,reid in VARCHAR2)
as
begin
if table_name='BOOKS' then
DELETE FROM BOOKS where 书籍编号=reid;
DBMS_OUTPUT.PUT_LINE('删除成功');
ELSIF table_name='MANAGER' then
DELETE FROM MANAGER where 管理员编号=reid;
ELSIF table_name='READERS' then
DELETE FROM READERS where 借书证编号=reid;
else DBMS_OUTPUT.PUT_LINE('输入数据有误');
end if;
end;
七、存储函数设计
a、查询借书的男生或女生的数量
create or replace function count_num(sex in char)
return number
as
out_num number;
begin
if sex='男' then
select count(读者性别) into out_num
from readers
where 读者性别='男';
else
select count(读者性别) into out_num
from readers
where 读者性别='女';
end if;
return(out_num);
end;
b、创建函数查询某图书被借阅天数
create or replace function return_book(bnum in varchar, rnum in varchar)
return number
as
out_num number;
begin
select to_number(还书时间-借书时间) into out_num
from records
where 书籍编号=bnum and 借书证编号=rnum;
return(out_num);
end return_book;
总结
以上就是基于oracle12数据库设计的图书管理系统
可以实现对数据的基本操作,着重于数据的存储过程与存储函数(需要调用实现)而后期的添加数据以及删除数据可根据仔细地需求去设计。