Oracle设计简单的图书管理

图书管理系统

设计一个能够实现数据添加、删除、更新等操作的数据库,但是本文章主要涉及的内容是数据存储函数、存储过程的设计。至于简单的操作请各位按照自己的需求自行设计。
操作系统:Windows 10
操作环境:Oracle12c
安装包链接:https://pan.baidu.com/s/1D6vXcOY90ucnMdY_Z8ptfg
提取码:ro6v
安装过程:请去寻求大佬的详解!!!!


前言

随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理。因此,必须指定一套合理、有效,规范和使用的图书馆管理系统,对图书资料进行集中统一的管理。
提高图书管理工作效率,做到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。


一、需求分析

  1. 读者基本信息的输入,包括借书证编号、读者姓名、读者性别

  2. 读者基本信息的查询、删除,包括读者借书证编号、读者姓名、读者性别等

  3. 书籍库存信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称

  4. 书籍库存信息的查询,修改,包括书籍编号、书籍名称、书籍类别、作者姓名等

  5. 借阅信息的输入,包括借书证编号、书籍编号、借书时间、还书时间

  6. 管理员信息的输入,包括管理员编号,管理员姓名和管理的借书证号

二、E-R图设计

在这里插入图片描述

三、关系模型设计:

  • 读者(借书证编号,读者姓名,读者性别,出生日期,联系方式)
  • 书籍(书籍编号,书籍名称,书籍作者,出版社,库存量)
  • 借阅(借书证编号,书籍编号,借书时间,还书时间)
  • 管理员(管理员编号,管理员姓名,性别)
  • 管理(管理编号,借书证编号)

四、数据库基础设计:

1、设计表结构

表(1).readers的表结构

字段名数据类型是否可空默认值说明
借书证编号Varchar (10)Х主键
读者姓名Varchar (10)Х
读者性别Varchar (2)Х
出生时间DateX
联系方式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数据库设计的图书管理系统
可以实现对数据的基本操作,着重于数据的存储过程与存储函数(需要调用实现)而后期的添加数据以及删除数据可根据仔细地需求去设计。

  • 18
    点赞
  • 193
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值