Sunteți pe pagina 1din 24

Colegiul National Ion Minulescu

Lucrare de atestat

Prof.Coord.:Catanoiu Camelia
Elev:Puiu Sorin
Administrarea unei biblioteci

Clasa: a-XII-a C

2
Administrarea unei biblioteci

CUPRINS

1
SCENARIU_________________________________________________________3
SCENARIU.........................................................................4
DEFINIREA BAZEI DE DATE....................................................5
ACTUALIZAREA DATELOR....................................................12
EXEMPLE DE INTEROGARI VARIATE......................................19
5CONCLUZII.......................................................................24

3
Administrarea unei biblioteci

SCENARIU

Orice institutie de invatamant are nevoie de o centralizare a informatiilor despre elevii sai si
despre activitatea lor didactica. De aceea, evidenta unui catalog virtual este necesara. Se
doreste crearea unei baze de date ce realizeaza gestiunea fondului de carti a unei biblioteci.

Prin intermediul tabelelor descrise se va tine evidenta elevilor, cartilor, domeniilor, a


imprumuturilor si a angajatilor care le acorda. Angajatii vor trebui sa identifice daca o carte este
sau nu este disponibila si totodata ei sunt responsabili pentru cartile care le imprumuta. Doar
elevii liceului au dreptul sa imprumute carti, pe care le vor returna dupa un termen limita. De
asemenea, trebuie incluse tabele care cuprind informatii despre competitiile la care au participat
elevii liceului.

4
Administrarea unei biblioteci

DEFINIREA BAZEI DE DATE


1.1 Descrierea bazei de date

Institutiile de invatamant au nevoie de o centralizare a informatiilor despre elevii inscrisi la


fiecare scoala si despre activitatea lor didactica. De aceea, am construit o baza de date pentru o
informatizarea activitatii intr-o biblioteca, tinand evidenta unui catalog virtual.

Baza de date pe care am creat-o va fi folosita atat de angajatii bibliotecii, cat si de elevi
pentru a verifica existenta unei carti si disponibilitatea acesteia la sala de imprumut sau de
lectura. De asemenea, se includ informatii despre domeniul de aplicabilitate al fiecarei carti din
biblioteca.

Sunt foarte importante informatiile despre situatia cartilor, a imprumuturilor realizate,


despre elevii care au facut imprumutul sa fie inregistrate. Aceste date vor ajuta angajatii sa
identifice daca o carte este sau nu disponibila.

Scopul bazei de date este sa fie sortate cartile, sa se gestioneze situatia imprumuturilor si sa
se aiba o legatura a angajatilorilor care au predat o anumita carte si elevii care au cerut-o. In
fiecare tabela din baza de date se tine evidenta acestor detalii, iar prin relatiile dintre ele se
poate usor depista traseul dorit.

Obiectivele lucrarii sunt :

Sa creeze o baza de date capabila sa inregistreze un flux mare de informatii si sa


gestioneze aceste informatii in timp util;

Sa tina o evident completa a unei biblioteci;

Sa minimizeze timpul alocat cautarii unor informatii despre carti, despre domeniile din
care fac parte si despre autorii lor, respectiv editura;

5
Administrarea unei biblioteci

In plus, se urmareste crearea unei baze de date puternice pentru:

Marirea eficientei de invatare;

Simplificare misiunii bibliotecarului la cautarea unei carti;

Stocarea informatiilor importante despre elevii si biblioteca unui liceu.

Baza de date tine evidenta unei biblioteci. De aceea, trebuie inregistrate cartile din gestiune
bibliotecii CARTI, elevii carora li s-au imprumutat, respectiv ELEVI , deoarece gestionarea
situatiei lor este obiectivul bazei de date. De asemenea, sunt incluse tabele care cuprind
informatii despre competitiile la care au participat elevii liceului - CONCURSURI.

O alta tabela importanta din schema este tabela ANGAJATI, deoarece ei sunt reprezentantii
bibliotecii, cei care le predau elevilor cartile si sunt responsabili de acestea. Baza de date mai
contine o tabela referitoare la activitatea bibliotecii, si anume : IMPRUMUTURI, care contine
detalii referitoare la data efectuarii imprumutului, la termenul limita de restituire si la
disponibilitatea unei carti restituita, nereturnata, in curs de inregistrare.

Reprezentand liceul prin rezultatele lor, tabela ELEVI ocupa un loc central in baza de date.
Din acest motiv, s-au dezvoltat alte tabele in relatie de 1:n cu tabela CONCURSURI, si anume :
LOCATII, TARI si REGIUNI, in relatii 1:n. Cele 3 tabele de mai sus ofera informatii
suplimentare despre locul de desfasurare a unui concurs interscolar, respectiv unde s-a efectuat
si unde s-a descoperit competitia.

Aceasta baza de date realizeaza gestiunea fondului de carti a unei biblioteci. Astfel prin
intermediul tabelelor descrise mai jos se tine evidenta elevilor, cartilor, domeniilor, a
imprumuturilor si a angajatilor care le acorda.

Tabela Carti contine informatii despre cartile aflate in inventarul bibliotecii: id carte,
denumire, autor, editura, an (aparitie), domeniu, valoare.

Tabela Elevi contine informatii despre elevii inregistrati care doresc sa imprumute
carti: CNP, nume, prenume, clasa, an, adresa, numar de telefon.

6
Administrarea unei biblioteci

Tabela Imprumuturi contine detalii despre fiecare imprumut efectuat: id imprumut, id


carte imprumutata, CNP-ul elevului care a imprumutat cartea, CNP-ul angajatului care a acordat
imprumutul, data imprumutului, data restituirii limita, starea imprumutului(in curs=mai este
timp pentru a fi returnata cartea, returnata, nereturnata=nu a fost returnata la timp).

Tabela Angajati contine date despre cei care acorda fiecare imprumut: CNP, nume,
prenume, adresa, numar de telefon.

Tabela Domenii contine id-ul fiecarui domeniu si denumirea acestuia.

1.2 Schema Conceptuala

ELEVI
CNP Nume Prenume Clasa An Adresa Nrtel

IMPRUMUTURI
Idimprumut Idcarte Idelev Idangajat Dataimp Datarest Stare

CARTI
Idcarte Denumire Autor Editura An Domeniu Valoare

DOMENII
Iddomeniu Denumire

ANGAJATI
CNP Nume Prenume Adresa Nrtel

7
Administrarea unei biblioteci

1.3 Descrierea Tabelelor


STUDENTI
Nume
CNP Nume Prenume Clasa An Adresa Nrtel
coloana
Check
( upper
(clasa) in ( Check (an
Tip Primary
'A', 'B', between 1
restrictie key
'C', 'D', and 4)
'E', 'F', 'G',
'K', 'I' )
Tip data Number Varchar2 Varchar2 Varchar2 Number Varchar2 Varchar2
Lungime 13 20 20 10 1 100 10

CARTI
Nume
Idcarte Denumire Autor Editura An Domeniu Valoare
coloana
Tip Primary
restrictie key
Tip data Number Varchar2 Varchar2 Varchar2 Number Number Number
Lungime 5 50 50 20 4 5 4

IMPRUMUTURI
Nume
Idimprumut Idcarte Idelev Idangajat Dataimp Datarest Stare
coloana
Foreign Foreign Foreign Check
Key Key Key (stare in
Tip Primary
References References References ( 'in curs',
restrictie key
Carti Elevi Angajati 'returnat',
(Idcarte) (CNP) (CNP) 'nereturnat)
Tip data Number Number Number Number Date Date Varchar2
Lungime 5 5 5 5 10

ANGAJATI
Nume
CNP Nume Prenume Adresa Nrtel
coloana
Check (nrtel
Tip restrictie Primary key
like '0%')
Tip data Number Varchar2 Varchar2 Varchar2 Varchar2
Lungime 13 20 20 100 10

DOMENII
Nume coloana Iddomeniu Denumire
Tip restrictie Primary key Not Null
Tip data Number Varchar2
Lungime 5 20

8
Administrarea unei biblioteci

1.4 Crearea Tabelelor

drop table elevi cascade constraints;


drop table domenii cascade constraints;
drop table carti cascade constraints;
drop table angajati cascade constraints;
drop table imprumuturi cascade constraints;

create table elevi


(cnp varchar2(13) constraint pk_elevi primary key,
nume varchar2(20),
prenume varchar2(20),
clasa varchar2(10),
an number(1),
adresa varchar2(100),
nrtel varchar2(10)
);

create table domenii


(iddomeniu number(5) constraint pk_domenii primary key,
denumire varchar2(20) not null
);

create table carti


(idcarte number(5) constraint pk_carti primary key,
denumire varchar2(50),
autor varchar2(50),
editura varchar2(20),
an number(4),
domeniu number(5) references domenii(iddomeniu),
valoare number(4)
);

9
Administrarea unei biblioteci

create table angajati


(cnp varchar2(13) constraint pk_angajati primary key,
nume varchar2(20),
prenume varchar2(20),
adresa varchar2(100),
nrtel varchar2(10) constraint ck_nrtel check(nrtel like '0%')
);

create table imprumuturi


(idimprumut number(5) constraint pk_imprumuturi primary key,
idcarte number(5) references carti(idcarte),
idelev varchar2(13) references elevi(cnp),
idangajat varchar2(13) references angajati(cnp),
dataimp date default sysdate,
datarest date,
stare varchar2(10)
);

1.5 Actualizarea Structurii Tabelelor

Sa se modifice numele tabelei ANGAJATI in PERSONAL si apoi din nou in


ANGAJATI.

alter table angajati rename to personal;

rename personal to angajati;

Sa se adauge o noua coloana la tabela ELEVI, si anume email de tipul


VARCHAR2(30).

10
Administrarea unei biblioteci

alter table elevi add (email varchar2(30));

Sa se modifice proprietatile campului imprumut din tabela


IMPRUMUTURI astfel incat lungimea acestuia sa fie de 10 caractere.

alter table imprumuturi modify(idimprumut number(10));

Sa se stearga coloana nou creata din tabela ELEVI.

alter table elevi drop column email;

Sa se adauge restrictia pentru tabela ELEVI, astfel incat sa nu se introduca


elevi apartinand unor clase care de fapt nu exista (in liceu exista clase de la A la I).

alter table elevi add (constraint ck_clasa check(upper(clasa) in


('A','B','C','D','E','F','G','K','I')));

Sa se adauge restrictia pentru tabela IMPRUMUTURI, astfel incat sa se


introduca doar anumite tipuri de sate in campul stare.

11
Administrarea unei biblioteci

alter table imprumuturi add(constraint ck_stare check(stare in ('in


curs','returnat','nereturnat')));

Sa se stearga restrictia validarii numarului de telefon din tabela


ANGAJATI.

alter table angajati drop constraint ck_nrtel;

Sa se adauge restrictia ca anul elevilor sa fie valid.

alter table elevi add(constraint ck_an check(an between 1 and 4));

ACTUALIZAREA DATELOR
1.6 Inserarea Datelor

Inserarea datelor in tabela ELEVI

insert into elevi


values('1880304839238','Popescu','Andrei','B',2,'Str Nufarului, Nr 34,
Bucuresti','0789364830');
insert into elevi
values('1870101123212','Marinescu','Alexandru','A',3,'Str Lacului, Nr 354,
Bucuresti','0762827392');
insert into elevi

12
Administrarea unei biblioteci

values('1890307827323','Marcu','Alin','I',1,'Str Cristian Pascal, Nr 23,


Bucuresti','0745738298');
insert into elevi
values('2890505837483','Jinga','Elena','B',1,'Aleea Lalelelor, Nr 234,
Buzau','0721734632');
insert into elevi
values('2880709827382','Popovici','Alina','A',2,'Aleea Unirii, Nr 98,
Brasov','0723829380');
insert into elevi
values('2870402829384','Valasan','Arina','B',3,'Str Focului, Nr 45,
Oradea','0766562762');
insert into elevi
values('2860808890293','Dorotea','Cristina','E',4,'Str Marin Ionescu, Nr 78,
Timisoara','0734673832');
insert into elevi
values('1850802839283','Marin','Iulian','F',5,'Str Marianelor, Nr 74,
Arad','0723782738');

insert into elevi


values('1880102829302','Dobre','Andrei','I',2,'Aleea Furnicilor, Nr 53,
Brasov','0766348324');
insert into elevi
values('1890909829382','Iordache','Manuel','C',1,'Str Razboieni, Nr 1,
Iasi','0765782673');
insert into elevi
values('2870904873823','Ionescu','Maria','C',3,'Str Ciocarliilor, Nr 345, Iasi','0745783473');

Inserarea datelor in tabela DOMENII

insert into domenii values(10001,'Stiinte');

13
Administrarea unei biblioteci

insert into domenii values(10002,'Analiza');


insert into domenii values(10003,'Algebra');
insert into domenii values(10004,'Economie');
insert into domenii values(10005,'Limba romana');
insert into domenii values(10006,'Informatica');
insert into domenii values(10007,'Engleza');
insert into domenii values(10008,'Geografie');
insert into domenii values(10009,'Fizica');
insert into domenii values(10010,'Istorie');
insert into domenii values(10011,'Filosofie');
insert into domenii values(10012,'Chimie');
insert into domenii values(10013,'Biologie');
insert into domenii values(10014,'Sociologie');
insert into domenii values(10015,'Limba germana');

Inserarea datelor in tabela CARTI

insert into carti


values(10001,'Astronomie','Dobre Raluca','ASE',1999,10012,34);
insert into carti
values(10002, 'Matematici aplicate', 'Ande Adela', 'ECONOMICA', 2001, 10004, 56);
insert into carti
values(10003,'Culegere de probleme', 'Dobre Ionela','RAO',2001,10006,100);
insert into carti
values (10004, ' Economie', 'Radu Constantinescu', 'Stiintifica', 2005, 10006,110);
insert into carti
values(10005,'Cel mai iubit dintre pamanteni','Marin Preda','Stiintifica',2003,10006,65);
insert into carti

14
Administrarea unei biblioteci

values( 10006, 'Sisteme de calcul si operare', 'Sacalescu Ion', 'ECONOMICA', 2002,


10001, 75);
insert into carti
values(10007,'Business Communication','Marcu Ioana','Paralela45',2000,10004,90);
insert into carti
values(10008,'Atlasul lumii in imagini','Stan Andreea','RAO',2005,10005,93);
insert into carti
values(10009,'Mecanica si eletronica','Anghelache Daniel', 'ASE', 2002, 10011,35);
insert into carti
values(10010,'Istoria Romaniei','Anghel Adriana','ASE',2007,10009,76);
insert into carti
values(10011,'Kant','Chirita Ioana','ECONOMICA',2003,10009,53);
insert into carti
values(10012,'Tabelul periodic al elementelor','Apostol
Georgiana','RAO',2002,10004,234);
insert into carti
values(10013,'Evolutia plantelor','Sandulescu Alin','ASE',2001,10001,120);
insert into carti

values (10014, 'Fundamentele organizatiei', 'Inulescu Adelin', 'Business',


2006,10010,240);
insert into carti
values(10015,'Deutsch','Alexe Octavian','ECONOMICA',2007,10010,230);
insert into carti
values(10016,'Un veac de singuratate','Gabriel Garcia Marquez','ASE',2008,10010,500);

Inserarea datelor in tabela ANGAJATI

insert into angajati


values ('1770303829382','Aden','Ion','Str Garofitei, Nr 34, Bucuresti', '0754562526');
insert into angajati
values ('2780908273821', 'Esten','Daniela', 'Str Ion Lunca, Nr 124, Bucuresti',
'0789232093');

15
Administrarea unei biblioteci

insert into angajati


values ('2680301738293','Dudu','Elena','Str Calarasilor, Nr 221, Bucuresti',
'0723723637');
insert into angajati
values ('2710709762982','Doroftei','Elisabeta','Str Inginerilor, Nr 23, Bucuresti',
'0765563728');
insert into angajati
values ('1800101928392','Dorohoi','Alin','Str Constructorilor, Nr 23, Bucuresti',
'0787632637');
insert into angajati
values ('1780303938482','Dante','Gheorghe','Str Nuferilor, Nr 56, Bucuresti',
'0754238412');
insert into angajati
values ('1760908736273','Haralambie','Ionica','Str Luncii, Nr 54, Bucuresti',
'0765736473');
insert into angajati
values ('1740205873238','Vente','Dan','Str Lorzilor, Nr 98, Bucuresti', '0721837432');

insert into angajati


values ('2780504839283','Pop','Marieta','Str Nucilor, Nr 67, Bucuresti', '0723984903');
insert into angajati
values ('2790508837283', 'Popa', 'Alina', 'Str Nucilor, Nr 69, Bucuresti', '0734983743');

Inserarea datelor in tabela IMPRUMUTURI

insert into imprumuturi


values (1000000001, 10001,'1880304839238', '1770303829382', to_date
('11.12.2008','dd.mm.yyyy'), to_date('11.01.2009','dd.mm.yyyy'),'in curs');
insert into imprumuturi
values(1000000002,10002,'1870101123212','2680301738293',to_date
('10.10.2008','dd.mm.yyyy'),to_date('15.10.2008','dd.mm.yyyy'),'returnat');
insert into imprumuturi

16
Administrarea unei biblioteci

values(1000000003,10005,'1890307827323','2790508837283',to_date
('21.11.2008','dd.mm.yyyy'),to_date('28.11.2008','dd.mm.yyyy'),'returnat');
insert into imprumuturi
values(1000000004,10004,'2890505837483','1770303829382',to_date
('16.12.2008','dd.mm.yyyy'),to_date('20.12.2008','dd.mm.yyyy'),'nereturnat');
insert into imprumuturi
values(1000000005,10007,'2890505837483','1780303938482',to_date
('12.10.2008','dd.mm.yyyy'),to_date('19.10.2008','dd.mm.yyyy'),'returnat');
insert into imprumuturi
values(1000000006,10006,'2870402829384','1800101928392',to_date
('20.12.2008','dd.mm.yyyy'),to_date('20.01.2009','dd.mm.yyyy'),'in curs');
insert into imprumuturi
values(1000000007,10005,'1850802839283','1770303829382',to_date
('19.12.2008','dd.mm.yyyy'),to_date('19.01.2009','dd.mm.yyyy'),'in curs');
insert into imprumuturi
values(1000000008,10009,'1890909829382','1740205873238',to_date
('18.12.2008','dd.mm.yyyy'),to_date('18.01.2009','dd.mm.yyyy'),'in curs');

insert into imprumuturi


values(1000000009,10003,'1850802839283','1780303938482',to_date
('12.12.2008','dd.mm.yyyy'),to_date('15.12.2008','dd.mm.yyyy'),'nereturnat');
insert into imprumuturi
values(1000000010,10005,'2870904873823','1740205873238',to_date
('02.12.2008','dd.mm.yyyy'),to_date('09.12.2008','dd.mm.yyyy'),'returnat');

1.7 Actualizarea Datelor

Sa se modifice valoarea cartii cu id-ul 10015 cu 30%;

update carti
set valoare=1.3*valoare
where idcarte=10015;
17
Administrarea unei biblioteci

INAINTE

DUPA

Angajatul Popa Alina (CNP 2790508837283) s-a mutat la adresa Str Nicolae
Balcescu, Nr 52, Bucuresti. Operati modificarea.

update angajati
set adresa='Str Nicolae Balcescu, Nr 52, Bucuresti'
where cnp='2790508837283';

Valoarea cartilor din inventarul bibliotecii s-a modificat in functie de


editura, astfel: ASE +20%, ECONOMICA -30%, RAO +15%. Sa se efectueze
modificarile.

update carti
set valoare=valoare*(case lower(editura) when 'ase' then 1.2 when 'economica' then 0.7 when
'rao' then 1.15 else 1 end);

Editura ASE a decis inlocuirea tuturor cartilor din biblioteca cu carti din
anul 2008. Sa se efectueze modificarile corespunzatoare.

update carti

18
Administrarea unei biblioteci

set an=2008
where upper(editura)='ASE';

Sa se treaca toate imprumuturile acordate de angajatul Aden Ion (CNP


1770303829382) pe numele angajatului Vente Dan (CNP 1740205873238).

update imprumuturi
set idangajat='1740205873238'
where idangajat='1770303829382';

Au fost scoase din inventar cartile mai vechi de anul 2001. Sa se efectueze
modificarile.

delete from carti


where an<2001;

EXEMPLE DE INTEROGARI VARIATE

Sa se afiseze numarul de imprumuturi care sunt in curs (pot fi inca


returnate).

select count(stare) nr_imprumuturi_de_returnat


from imprumuturi
where datarest>sysdate;
DUPA

19
Administrarea unei biblioteci

Sa se afiseze numele, prenumele si clasa elevilor care nu au returnat la timp


imprumuturile efectuate.

select e.nume,e.prenume,e.clasa
from elevi e, imprumuturi i

where i.idelev= e.cnp and i.stare in ('nereturnat');

Sa se afiseze editurile existente in biblioteca(o singura data).

select distinct editura


from carti;

Sa se afiseze numarul de carti din biblioteca pentru fiecare editura.

select editura,count(editura) nr_carti


from carti
group by editura;

20
Administrarea unei biblioteci

Sa se afiseze numele, prenumele si cartea din imprumuturile acordate de


angajatul cu CNP-ul 1770303829382, in care au fost luate carti din domeniul
Informatica.

select e.nume,e.prenume,c.denumire
from elevi e, carti c, imprumuturi i
where i.idelev= e.cnp and i.idcarte=c.idcarte and i.idangajat='1770303829382'
intersect
select e.nume,e.prenume,c.denumire
from elevi e, carti c, imprumuturi i
where i.idelev=e.cnp and i.idcarte=c.idcarte and c.domeniu=(select d.iddomeniu from domenii
d where upper(d.denumire)='INFORMATICA');

Sa se afiseze toate cartile din domeniul Informatica si toate cartile care


apartin de editura ASE.

select c.denumire,c.autor,c.editura,d.denumire
from carti c, domenii d
where c.domeniu=(select d.iddomeniu from domenii d where
upper(d.denumire)='INFORMATICA') and d.iddomeniu=c.domeniu

UNION
select c.denumire,c.autor,c.editura,d.denumire
from carti c, domenii d
where upper(c.editura)='ASE' and d.iddomeniu=c.domeniu;

Sa se selecteze toate cartile mai scumpe de 100 ron, dar care sa fi fost
publicate inainte de anul 2003.

select denumire,valoare,an
from carti
where valoare>100
minus
select denumire,valoare,an

21
Administrarea unei biblioteci

from carti
where an<2003;

Elevul Popescu Andrei (CNP 1880304839238) s-a transferat la aceeasi clasa


cu elevul Marcu Alin (CNP 1890307827323) . Sa se opereze modificarile necesare.

update elevi
set clasa=(select clasa from elevi where cnp='1890307827323')
where cnp='1880304839238';

Sa se afiseze o modificare a valorii preturilor cu 50% pentru editura ASE,


100% pentru editura RAO, 150% pentru editura ECONOMICA si 0% pentru
celelalte.

select denumire,editura,valoare*decode(editura,'ASE',1.5,'RAO',2,'ECONOMICA',2.5,1)
from carti;

Sa se creeze o tabela cu cartile de la editura ASE.

create table ASE


as
select denumire,autor,an,valoare
from carti
where editura='ASE';

Sa se afiseze toti angajatii care au aprobat minim 2 imprumuturi.

select a.nume,a.prenume, count(i.idangajat) nr_impr_acordate


from angajati a, imprumuturi i
where a.cnp= i.idangajat
group by a.nume, a.prenume
having count(i.idangajat)>1;

Afisati domeniul si numarul de carti existente(si domeniile care nu au carti).

22
Administrarea unei biblioteci

select d.denumire, count(c.domeniu) nr_carti


from domenii d, carti c
where c.domeniu(+)= d.iddomeniu
group by d.denumire;

Sa se afiseze cea mai valoroasa carte din biblioteca.

select denumire,editura,valoare
from carti
where valoare=(select max(valoare) from carti);

Sa se afiseze toate imprumuturile efectuate in luna decembrie.

select i.idimprumut, e.nume, e.prenume, i.stare


from imprumuturi i, elevi e
where extract(MONTH from dataimp)=12 and i.idelev= e.cnp;

Sa se afiseze valoarea medie a cartilor in functie de editura.

select editura, round(avg(valoare),2)


from carti
group by editura;

23
Administrarea unei biblioteci

5 CONCLUZII

Pornind de la o idee simpla, am dezvoltat o solutie complexa insa de succes pentru publicul
tinta.
Avand in vedere nevoile viitoare, baza de date creata este suficient de flexibila pentru:
A descoperi evolutia cartilor;
A monitoriza datele despre imprumuturi.

24