-
Universitatea Politehnica din Bucureti Facultatea de tiine
Aplicate
Specializarea Matematic i Informatic Aplicat
Aprobat, Decan:
Prof. Univ. Dr. Vasile Iftode
Proiect de diplom
Gestionarea resurselor umane i de timp folosind programarea
orientat
obiect i un SGBD
Coordonator tiinific:
Lect. Dr. Tiberiu Vasilache Absolvent:
Olteanu A. Alexandru
Bucureti 2014
-
Olteanu Alexandru 2
Cuprins
Introducere . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 5
1. Baze de date 6
1.1 Scurt istoric despre bazele de date. . . . . . . . . . . . .
. . . . . . . . . . . . . 6
1.2 Teoria bazelor de date de tip relaional. . . . . . . . . . .
. . . . . . . . . . . . . 7
1.2.1 Elemente de baz ale modelului relaional. . . . . . . . . .
. . . . . . . . . 8
1.2.2 Restricii ale modelului relaional. . . . . . . . . . . . .
. . . . . . . . . . 11
1.2.3 Procedeul de normalizare al relaiilor . . . . . . . . . .
. . . . . . . . . . . 12
1.2.3.1 Prima form normal (NF1) . . . . . . . . . . . . . . . .
. . . . . . . 12
1.2.3.2 A doua form normal (NF2) . . . . . . . . . . . . . . . .
. . . . . . 13
1.2.3.3 A treia form normal (NF3) . . . . . . . . . . . . . . .
. . . . . . . 13
1.2.3.4 Form normal Boyce-Codd(BCNF). . . . . . . . . . . . . .
. . . . . 14
1.2.3.5 A patra form normal (NF4) . . . . . . . . . . . . . . .
. . . . . . 14
1.2.3.6 A cincea form normal (NF5) . . . . . . . . . . . . . . .
. . . . . . 14
1.3 Sistem de gestiune al bazelor de date:PostgreSQL . . . . . .
. . . . . . . . . . . . . 15
1.3.1 Manipularea bazelor de date. Limbajul SQL . . . . . . . .
. . . . . . . . . . 15
1.3.1.1 Construirea i crearea relaiilor . . . . . . . . . . . .
. . . . . . . . . . 17
1.3.1.2 Interogarea bazei de date . . . . . . . . . . . . . . .
. . . . . . . . . . 19
1.3.1.3 Popularea bazei de date . . . . . . . . . . . . . . . .
. . . . . . . . . . 20
1.3.1.4 tergerea valorilor din baza de date . . . . . . . . . .
. . . . . . . . . 21
1.3.1.5 Actualizarea valorilor din baza de date . . . . . . . .
. . . . . . . . . . 22
1.3.1.6 Subinterogri ale relaiilor . . . . . . . . . . . . . . .
. . . . . . . . . . 22
-
Olteanu Alexandru 3
2. Programare orientat obiect. JAVA 24
2.1 Java noiuni indroductive. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 24
2.2 Structura limbajului Java . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 25
2.2.1 Operatori i literali n Java. . . . . . . . . . . . . . . .
. . . . . . . . . . 25
2.2.2 Declararea i iniializarea variabilelor. . . . . . . . . .
. . . . . . . . . . . 27
2.2.3 Vectori . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 28
2.2 Programare orientat obiect . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 29
2.3.1 Obiecte . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 29
2.3.2 Clase . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 30
2.3.2.1 Clasa Object . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 31
2.3.3 Excepii . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 32
2.3.4 Pachete standard n Java . . . . . . . . . . . . . . . . .
. . . . . . . . . 33
2.3.5 Gestionarea i generarea interfeei grafice cu utilizatorul
. . . . . . . . . 34
2.3.5.1 JPanel . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 34
2.3.5.2 JLabel . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 35
2.3.5.2 JButton . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 35
2.3.5.3 JComboBox . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 35
2.3.5.4 JTable . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 36
2.3.6 Conexiunea la o baz de date (JDBC) . . . . . . . . . . . .
. . . . . . . . 37
2.3.6.1 DAO (Data acces objet) . . . . . . . . . . . . . . . . .
. . . . . . . 38
2.3.6.2 Interfee SQL n Java . . . . . . . . . . . . . . . . . .
. . . . . . . 38
2.3.6.2.1 Interfaa Statement . . . . . . . . . . . . . . . . . .
. . . . . . . 38
2.3.6.2.2 Interfaa PreparedStatement . . . . . . . . . . . . . .
. . . 39
-
Olteanu Alexandru 4
2.3.6.2.3 Interfaa ResultSet . . . . . . . . . . . . . . . . . .
. . . . 40
3 Aplicaia de asistena de ntocmire a orarului 41
3.1 Descrierea aplicaiei . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 41
3.2 Structura bazei de date . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 42
3.2.1 Prezentarea tabelelor . . . . . . . . . . . . . . . . . .
. . . . . . . . 43
3.3 Programare Java. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 48
3.3.1 Pachetul DB. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 48
3.3.2 Pachetul OrarDAO. . . . . . . . . . . . . . . . . . . . .
. . . . . . 50
3.3.3 Pachetul UserInterface(UI) . . . . . . . . . . . . . . . .
. . . . . . 53
3.4 Anexe. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 58
3.4.1 Structura scriptului bazei de date. . . . . . . . . . . .
. . . . . . . 58
3.4.2 Codul Java pentru pachetul DB. . . . . . . . . . . . . . .
. . . . . 63
3.4.3 Codul Java pentru pachetul OrarDAO . . . . . . . . . . . .
. . . . 65
3.4.3 Codul Java pentru UI . . . . . . . . . . . . . . . . . . .
. . . . . . 70
Bibliografie 76
-
Olteanu Alexandru 5
Introducere
Bazele de date au devenit n ultimii ani o parte indispensabil
din viaa noastr de zi cu zi i asta datorit dezvoltrii uriae a
tehnologiei informaionale. n urma cu civa ani datele de orice fel
erau stocate fizic, n dosare i rafturi greu de gestionat. n prezent
tehnologia ieftin i cu o putere de calcul remarcabil, a condus la
implementarea bazelor de date pentru foarte multe activiti
cotidiene i nu numai. Sigurana datelor i uurina cu care sunt
manipulate ntr-un sistem de gestiune sunt principalele atuuri ale
unei baze de date.
Nevoia de aplicaii care s prelucreze un volum mare de date,
sigur i rapid este n cretere. Astzi, aplicaiile de acest gen le
putem ntlni la tot pasul, fie c vorbim de o gestiune a resurselor
umane pe diferite criterii ntr-o organizaie, fie de gestiunea
sistemelor bancare i a plilor online, fie de organizarea
caledarului personal pentru urmatorul an.
Scopul lucrrii este de a crea o aplicaie cu ajutorul programrii
orientate pe obiect i a unui sistem de gestiune al bazelor de date,
care sa ofere asisten n generarea i ntocmirea orarului. Publicul
int este bine definit, acesta fiind format din secretariatele
facultailor care, pe baza planului de nvamnt, trebuie sa programeze
ore pentru fiecare formaiune de studiu, s aloce un interval orar i
un loc de desfaurare al cursurilor.
-
Olteanu Alexandru 6
Capitolul 1
Baze de date
1.1 Scurt istoric despre bazele de date
Conform unor afirmaii de la nceputul anilor 1960 prima oar un
sistem de baze de date a fost introdus n cadrul misiunilor de
aselenizare Appolo gestionate de
Agenia Spaial American (N.A.S.A).
Nevoia de organizare a datelor, precum i de actualizare sau
gsire a acestora n timp real au condus ctre crearea unui sistem de
gestiune. Aproximativ 20 de ani mai trziu Edgar Frank Codd, un
informatician de origine englez, a introdus noiunea de model
relaional al bazelor de date, fapt ce a stat la baza crerii bazelor
de date relaionale.
Baza de date reprezint o colecie de informaii partajate, aflate
n dependen reciproc logic, structurate ntr-un mod clar pentru a
facilita operaiuni de manipulare, cum ar fi tergerea, inserarea,
actualizarea datelor sau generarea de rapoarte cu privire la
ntreaga baz de date. Sistemul de gestiune al bazelor de date (SGBD)
este un sistem software care permite utilizatorilor, pe de o parte
crearea bazei de date i ntreinerea acesteia, i pe de alt parte
rspunde la cererile utilizatorilor legate de controlul i
monitorizarea bazei de date.
Bazele de date se clasific n funcie de:
Orientare: - specializate;
- generalizate;
Distribuia biografic: - locale;
- distribuite;
Modelul de date: - ierarhice;
- relaionale; - orientate pe obiect;
- relaie;
-
Olteanu Alexandru 7
Sistemul de gestiune al bazelor de date este format:
dintr-un limbaj ce faciliteaz definirea datelor n care
utilizatorul sau administratorul bazei denumete i descrie relaiile
i entitile dintre acestea;
dintr-un limbaj structurat de interogare, numit Limbaj
Structurat de Interogare (SQL), specific pentru manipularea
datelor, care are ca scop actualizarea, tergerea, inserarea,
modificarea i interogarea bazei de date.
1.2 Teoria bazelor de date de tip relaional
Conform informaticianului Codd, orice model de date este necesar
s se bazeze pe structurile, operatorii de manipulare i
constrngerile de integritate.
Structurile de date: n modelul relaional datele sunt structurate
n relaii de tip bidimensional, iar elementele principale ale unei
structuri relaionale sunt tuplurile, atributele, domeniile,
tabelele, chei primare sau de legatur.
Operatori de manipulare: Operatorii relaionali se bazeaz pe
conceptul algebrei relaionale, iar manipularea acestora se poate
realiza utiliznd un limbaj de manipulare (data manipulation
language).
Constrngerile de integritate: Prin constrngerile de integritate
nelegem msuri luate pentru sigurana, stabilitatea i corectitudinea
datelor, msuri interne care nu sunt cunoscute de ctre
utilizator.
Modelul relaional al bazei de date este unul simplu, fundamentat
pe logica matematic i teoria seturilor. Acest model a luat amploare
n ultimii ani datorit unor serii de avantaje.
- ofer oportunitatea utilizatorului printr-un sistem de gestiune
sa apeleze ce date dorete i nu cum anume poate ajunge la
rezultat.
- informaiile sunt stocate ca valori.
- poate fi utilizat pentru manipularea de date complexe.
-
Olteanu Alexandru 8
1.2.1. Elemente de baz ale modelului relaional
Elementele de baz pentru definirea structurii de date sunt:
a) Domeniul: este o mulime de valori descris printr-un nume.
Domeniul poate fi definit prin natura caracteristicilor definitorii
ale elementelor componente.
Exemplu:
Forme de nvamnt = {An, Grup, Subgrup}
Calificativ = {1,2,3,4,5,6,7,8,9,10}
Zilele sptmnii = {Luni, Mari, Miercuri, Joi, Vineri}
Fie domeniile D1, D2, D3, ... ,Dn. Definim produsul cartezian ca
fiind
dar exist i posibilitatea ca n irul de domenii al produsului
cartezian s regsim un element de mai multe ori.
b) Relaie/Tabel: este subansamblul unui produs cartezian al unor
domenii, avnd asociat un nume, care caracterizeaz atributele ce
aparin unei clase de entiti.
Un exemplu de tabel ar fi situaia carierei fotilor studeni ai
unei faculti:
Tabela 1.2.1
-
Olteanu Alexandru 9
c) Atribut: este coloana unei relaii caracterizat printr-un
nume.
Pentru tabela 1.1 putem da exemplu urmatoarele atribute:
Id_student: este codul cu care identificm un student. Acest cod
este unic i nu poate exista ntr-o tabel de dou ori;
NumeS: este numele studentului;
Anul_absolvirii;
Domeniu_Job: domeniul n care lucreaz n momentul ntocmirii
tabelei;
Funcia_ocupat;
d) Tuplul: Elementele unei relaii sunt numite tupluri i sunt
caracterizate ca fiind liniile dintr-o tabel, dar fr s fie
caracterizate printr-un nume. Numrul tuplurilor i al atributelor
dintr-o tabel nu are importan.
n tabela 1.1 identificm 3 tupluri, adic 3 elemente ale
produsului cartezian.
Studeni = { ( 1, Mocanu Daniel, 2008, IT, manager), ( 2, Cornea
Geanina, 2007, Economie, consultant),( 3, tefnescu Drago, 2013,
Inginerie Electric, asistent) }
e) Cheia unei relaii: este o mulime minimal de atribute care
ndeplinesc rolul de indentificare a unui tuplu n mod unic. Cheile
unei relaii pot fi de mai multe tipuri:
Supercheie: este o coloan sau o mulime de coloane care identific
n mod unic un tuplu. Desigur c se prefer la o mulime ct mai mic de
coloane care s alctuiasc o supercheie.
De exemplu tabela Formaiuni_studiu, are coloanele Id, Denumire i
Id_parinte.
Formatiuni_studiu = {(1, I A, 0), (2, grupa 1311,1),(3,grupa
1312,1), (4,subgrupa 1311a,2) , (5,subgrupa 1311b,2) , (6,subgrupa
1312a,3) , (7,sungrupa 1312b,3)};
Combinaia de id si id_parinte poate fi supercheie deoarece
determin n mod unic tuplu. Desigur, n acest caz cel mai indicat ar
fi s alegem doar id ca supercheie deoarece este unic, incrementat
consecutiv, pentru fiecare tuplu.
Cheie candidat: este o supercheie format dintr-o singur coloan
care determin n mod unic un tuplu. Aceast cheie mai poart i numele
de cheie minimal.
Tabela Sli este format din Id i Denumire. Sali = {(1,CB
106),(2,BN 113),(3,AN 2006)};
-
Olteanu Alexandru 10
Cheia candidat n acest caz este Id, deoarece determin n mod unic
tuplu. De acea poart numele i de cheie minimal.
Cheie primar: este o cheie candidat definit de cel care
proiecteaz tabela, cu scopul de a identifica i accesa cu uurin
tuplurile. Domeniul cheii primare este considerat i el ca fiind un
domeniu primar.
Tabela 1.2.2
n cazul acesta, cheia primar este id-ul deoarece operaile de
manipulare se pot face mult mai accesibil apelnd id-ul. Fiind unic
pentru fiecare tuplu nu exist riscul de identificare gresit a unui
profesor.
O cheie primar poate fi reprezentat dintr-o singur coloan i
atunci ea se numete cheie simpl. n cazul n care este alcatuit din
mai multe coloane, poart numele de cheie compus.
Un exemplu de cheie compus este tabela de Defalcare_ore:
Id Id_formaiune Id_profesor Tip_or Disciplin
1 2 25 C Analiz numeric
Tabela Defalcare_ore
n tabela Defalcare_ore o cheie candidat dar nu cheie primar este
format din Id_formaiune, Tip_or i Disciplin, deoarece de exemplu
anul 1 are doar 1 curs de analiz numeric sau doar un seminar de
analiz numeric pe smestru. Rezult c aceast combinaie de coloane
determin n mod unic un tuplu.
Cheie strin: este o cheie canditat care nu a fost definit de
proiectant cu scopul de a identifica i accesa tuplurile. Cheile
strine accept valoarea nul cu condiia ca proprietatea de unicitate
s rmn viabil.
Id Nume Profesor Prenume Profesor Departament
1. Tudorache Cristina Matematic 1
2. Dumitru Ioana Matematic 2
3. Cazac Iulia Fizic
-
Olteanu Alexandru 11
Tabela 1.2.3
De exemplu, n tabela 1.2.1 putem indentifica cinci atribute, dar
doar id-ul determin n mod unic un tuplu, fiind cheie, pentru c:
- NumeS: mulimea de atribute n care identificm numele
studentului nu poate fi cheie ntr-o tabel, deoarece este posibil ca
n tabela 1.1 s regsim n tupluri diferite acelai nume.
- Anul_absolvirii: acest atribut nu este unic pentru c, n mod
evident, ntr-o tabel de acest tip, anul absolvirii coincide pentru
toi studenii care au terminat n aceeai promoie. Din acest motiv
nici un alt atribut nu este cheie n tabela 1.1 fiindc nu identific
n mod unic tabela.
1.2.2 Restricii ale modelului relaional Restriciile de
integritate sunt msuri luate pentru sigurana, stabilitatea i
corectitudinea datelor, msuri interne care nu sunt cunoscute de
ctre utilizator i care verific coerena n raport cu lumea real.
Acestea se pot clasifica n dou categorii:
1) Restricii de integritate structurale:
-restricia de unicitate a cheii: reprezint restricia care
constrnge ca o relaie s nu permit egalitatea valorii atributului
cheie pentru diferite tupluri.
-
Olteanu Alexandru 12
-restricia referenial: prevede c ntr-o relaie R care se refer la
relaia P, asocierea cheii externe trebuie s fie o cheie primar sau
s i se atribuie valoarea nul, adic neprecizat.
-restricia entitii: reprezint restricia care prevede c ntr-o
relaie R cheia primar a tuplurilor nu trebuie s aib valoarea
null.
2) Restricii de integritate comportamentale: sunt restricii
impuse facultativ de utilizatorul sau administratorul bazei de
date, i ele pot fi:
-restricii cu privire la domeniu: poate fi stabilit un interval
de valori ntre care atributele dintr-o relaie s se regseasc avnd
atribuite valori din acesta.
-restricii temporale;
1.2.3 Procedeul de normalizare al relaiilor
Procedeul de normalizare al unor tabele presupune spargerea
acestora n doua
sau mai multe tabele pentru a satisface anumite restricii, forma
finala a tabelei purtnd numele de forma normal(NF- normal form). n
funcie de complexitatea seturilor de reguli pe care le respect
tabela poate fi ncadrat la o anumit form. O form superioar verific
setul de reguli ale tutror celor precedente ei.
Formele normale se refer n principiu la relaii, dar, putem spune
ca o baz de date este ntr-o NFi daca toate relaile care alctuiesc
baza sunt n forma NFi.
1.2.3.1 Prima form normal (NF1) O relaie este n forma normal unu
dac: - nu admite ca n componena ei sa existe 2 tupluri identice. -
nu admite valori multiple, fiecare cmp trebuie s fie atomic. - nu
admite valori nule ale cmpurilor.
-
Olteanu Alexandru 13
Tabela. 1.2.4 n tabela 1.2.4 exemplific anomaliile care ar
trebui evitate pentru a putea
ajunge la NF1.
O reprezentare corect a acestei tabele, presupunnd ca fiecare
student este nscris la o singur facultate este:
1.2.3.2 A doua form normal (NF2) Pentru ca o relaie sa fie in
forma normal doi, trebuie sa respecte forma normal unu i sa admita:
- ca orice atribut ne-prim (non-cheie) din relaie s fie dependent
funcional de atributul cheie.
O relaie R care are atributul cheie x i atributul ne-prim y al
aceleiai relaie, este NF2 dac orice valoare a atributului y in
corespunde o valoare unica a atributului x.
1.2.3.3 A treia form normal (NF3) O relaie este in forma normal
trei, daca respect condiiile impuse de NF2 i NF1 i n plus: - Orice
atribut ne-prim al unei relaii trebuie s depind
direct(ne-tranzitiv) de atributul cheie al relaiei respective.
-
Olteanu Alexandru 14
Daca n relaia A are atribute cu numele efilor de promoie al
fiecarei facultai, n anul 2014 i oraul din care fac parte, atunci
atributul ora depinde n mod tranzitiv de atributele supercheii,
numele i facultatea.
1.2.3.4 Form normal Boyce-Codd(BCNF)
Forma normal BCNF impune orice atribut x de care sunt dependente
alte atribute trebuie sa fie o cheie candidat.
1.2.3.5 A patra form normal (NF4) O relaie este n a patra forma
normal dac respect forma normal 3 i conine cel mult o dependena
multivaloare.
ntr-o relaie de tip Orar cu atribute ca sala, ora, profesor,
locaie, student i anul de studiu putem exemplifica dependena
multivaloare.
- Cursul este inut de un profesor.
- La o anumit or i locaie un profesorul se poate afla doar n
acea sal de curs.
- Studentul urmeaz cursul destinat anului su de studiu.
- Studentul se poate afla la o anumit or i locaie doar la un
curs.
Rezult ca exist o dependena multivaloare a cursului cu ora i
locaia, adic unui curs i se asociaz o sal i un interval orar care
nu depind de alte informaii din tabel.
1.2.3.6 A cincea form normal (NF5)
O relaie se afl in forma normal cinci dac respect toate formele
normale inferioare i n plus: - candidaii cheie al relaiei trebuie
sa genereze fiecare dependena jonciune.
A patra, a cincea i respectiv a asea form normal enun noiuni mai
generale, dar datorit seturilor complexe de reguli ce trebuiesc
ndeplinite simultan de o relaie, n practic sunt destul de greu de
ntalnit.
-
Olteanu Alexandru 15
1.3 Sistem de gestiune al bazelor de date: PostgreSQL
PostgreSQL este un sistem open-source de gestionare a bazelor de
date
compatibile cu limbajul standardizat de interogare SQL.Sistemul
este disponibil n mod
gratuit, beneficiind de suport financiar i tehnic din partea mai
multor companii, acestea sponsoriznd dezvoltatorii sau oferind
soluii hardware. Termenul open-source descrie dezvoltarea sub licen
liber permind, astfel, ca orice utilizator s poat accesa codul
surs.
Sesiunea Postgres folosete modelul server-client, fiind alcatuit
din:
proces de supervizare de tip daemon (postmaster);
aplicaie pe care utilizatorul o folosete pentru utilizarea
serviciilor SQL;
procesul postgres, format din unul sau mai multe servere
backend.
1.3.1 Manipularea bazelor de date. Limbajul SQL
Tabelele stocate ntr-un sistem de gestiune cum este PostgreSQL,
sunt entiti logice asemntoare cu relaile reprezentate la Tabela
1.2.1 i Tabela 1.2.2.Grafic se pstreaza i reprezentarea sub form de
tabel, iar coloanele tabelului sunt cmpurile relaiei iar linile
corespund nregistrrilor. Primul pas pentru crearea unei baze de
date este definirea tabelelor i a tipurilor de date utilizate n
aceasta. n PostgreSQL se pot o list ntreaga de date, cum ar fi:
- bytea: este un tip de dat ce stocheaz o valoare binar
- int8: stocheaz un numr ntreg ce se poate scrie pe 8 octei de
memorie (un numar ntreg ntre 0 i 255)
Sintax:
-
Olteanu Alexandru 16
- boolean: este o nregistrare logica, avnd doua posibilitai
(true/ false);
- character[(n)]: un ir de caractere cu un numar fix de
caractere n
- character varying [(m)]: un ir de caractere cu finit de
caractere n;
- real: real cu precizie simpla;
- double precision: este un numar real cu precizie dubl, pana la
15 octei;
- integer: un numar ntreg, care are i semn;
- serial: autoincrementare cu valori stocate pe 4 octei;
Sintax:
- bigserial: autoincrementare cu valori stocate pe 8 octei;
- text: este un ir de caractere cu lungime variabil;
Relaiile dintr-un sistem de baze de date respect aceleai reguli
de normalizare. n proiectarea acestora, administratorul, de regula
ine cont de regulile de normalizare descrise la NF3.
-
Olteanu Alexandru 17
1.3.1.1 Construirea i crearea relaiilor
Relaiile sunt obiecte componente ale unei baze de date, astfel,
pentru a costrui tabele trebuie, n prealabil, s crem o baz de date.
De regul orice sistem de gestiune ofer doua modalitai de construire
a unei noi baze de date:
- fie printr-o interfa grafic prin care selectm Create
Databases, i introducem numele ce l va purta baza de date
- fie prin programare efectiva, cu ajutorul unui SQL de creare a
bazei.
Exemplu: drop database if exists db_name
create database db_name ;
Prima linie verific dac n sistemul de gestiune exist baza de
date cu numele db_nume i daca exist o va sterge. Apoi creaz baza de
date cu numele db_name.
Pentru a crea i relaii n baza de date avem tot doua posibilitai.
Prin tabul din meniu care, prin apasarea lui, genereaz o nou
relaie, noi fiind nevoii sa inserm numele tabelei i numrul de
atribute sau prin SQL. Un exemplu pentru SQL-ul de creare al unei
relaii este:
-
Olteanu Alexandru 18
Unde numele tabelei relaiei care va fi creat este scris n
ghilimele i este Programare_ore. Scriptul scris creaz i atributele
relaiei, i stabilete totodat i tipul datelor.
Tot n acest exemplu putem identifica i constrngeri ale
sistemului de gestiune. Atributul Id este declarat ca fiind primary
key, adic nu permite nregistrri cu valorea nula sau nregistrri
duplicat i este declarat de ctre utilizator cu numele pk_loc_timp.
Atributele Id_loc_timp i Id_defalcare au constrngeri de tip foreign
key. Id_loc_timp este o referin la cheia primar din relaia
Loc_timp, iar atributul Id_defalcare este referin a cheii primare
din relaia Defalcare_ore. Duplicarea id-ului este asigurat de
instruciunea SERIAL. Atributele declarate ca integer sunt numere
ntregi i nu admint valoarea nul.
Alte constrngarei n PostgreSQL sunt:
NOT NULL: nu admit valori nule in relaii.
UNIQUE: aceast constrngere nu permite duplicarea tuplurilor n
relaie.
FOREING KEY: costrngerea presupune ca atributul astfel definit s
aib o valoare identic n tabela de legtur, valoare ce trebuie sa fie
unic sau cheie primar.
Sintax:
-
Olteanu Alexandru 19
n aceast relaie atributul Id_loc_timp este o cheie strina,
definit astfel de utilizator cu numele fk_loc_timp (FOREIGN KEY). n
script este precizat i relaia la care face referire cheia, ca fiind
atributul Id din relaia Loc_timp.
CHECK: aceast costrngere elimin valorile ce nu satisfac unele
condiii logice.
1.3.1.2 Interogarea bazei de date.
Interogarea bazei de date se efectueaz prin apelarea
instruciunii SQL SELECT. PostgreSQL este case sensitive n ceea ce
privete numele relailor, dar n ceea ce privete instruciunile, ele
se pot scrie att cu litere mici sau cu litere mari, dar de preferat
este s pastrm sistemul de scriere pe tot parcursul codului.
Instruciune se pot scrie pe mai multe rnduri. Se recomand folosirea
majusculelor i scrierea pe mai multe rnduri pentru o vizibilitate
mai bun.
Instruciunea selecteaz valoarea cmpului Denumire din tabela Ore
unde Id-ul tuplului este egal cu 1. Daca id-ul nu exist
instruciunea va intoarce o eroare. Aceast instruciune poate ntoarce
un rezultat ordonat dupa valoarea unui anumit atribut.
Instruciunea SELECT * ntoarce valoarea tuturor atributelor din
tabel, iar instruciunea ORDER BY ordoneaz n mod crescator
rezultatul interogri dupa valoarea atributului Id.
Rezultatul interogrii se poate grupa n funcie de valoarea unui
atribut. Daca valoarea unui atribut este aceeai pentru mai multe
tupluri, atunci instruciunea grupeaz valorile rezultatului,
valorile identice ale atributului fiind succesive.
-
Olteanu Alexandru 20
Instruciunea anterioar selecteaz din tabela Profesori numele
profesorilor i ii grupeaz dupa denumirea departamentului
1.3.1.3 Popularea bazei de date.
Dupa crearea bazei de date i a tuturor relaiilor putem manipula
efectiv valorile din tabele cu ajutorul unor instruciuni SQL care
ne permit inserarea, modificarea sau tergerea de date.
Popularea efectiv a bazei de date se poate realiza prin dou
moduri: - fie cu instruciunea INSERT; - fie cu instruciunea
COPY
a) Inserarea unei nregistrri n baza de date cu instruciunea
INSERT se realizeaz astfel:
Tabela Faculti este populat cu 16 tupluri, formate din 2
coloane. Id-ul este primary key si este de tip integer, iar
Denumirea facultai este de tip character. Desigur se poate popula
tabela i fara ca id sa fie preciat, acesta fiind setat sa se
autoincrementeze, dar utilizatorul a preferat sa il defineasca
pentru a putea controla
valoarea fiecrui id n parte.
-
Olteanu Alexandru 21
Dac n scriptul de inserare nu declarm toate coloanele i cele
omise nu sunt setate s se autoincrementeze sau s poat lua valoarea
NULL atunci sistemul de gestiune va da eroare.
b) Instuciunea COPY prevede ca n scriptul de populare s scrie
calea ctre un fisier de preferat de tip .csv (Comma-separated
values), adic un fiier n care coloanele sunt separate prin
virgul.
COPY Profesori FROM C:\Documents and Settings\User\Profesori.csv
with csv ;
Tot n scriptul de copiere se mai specific i:
- NULL: specific faptul c irul poate avea i valoarea null, adic
intre doi delimitatori te tip virgul nu exist nimic.
- CSV: specific tipul fiierului din care se adaug datele.
- HEADER: anuna sitemul de gestiune ca primul ir de caractere
denumete numele coloanei.
- DELIMITER: specific dac se folosete un alt delimitator fat de
cel implicit, virgula.
1.3.1.4 tergerea valorilor din relaii.
Instruciunea de tergere a unei relaii este DELETE. Se poate
terge toat tabela, sau doar un tuplu.
Daca nu se sepecific o condiie de tergere, atunci sitaxa DELETE
FROM name, va terge toate valorile din tabel.
Pentru a putea distruge o tabel sau o coloan din tabel exist
instruciunea DROP. Aceast instruciune nu doar sterge ci distruge
coloana, tabela sau baza de date.
-
Olteanu Alexandru 22
1.3.1.5 Actualizarea valorilor din relaii.
Pentru a putea actualiza o relaie, trebuie ca acea relaie sa
existe i sa fie populat. Instruciunea de actualizare este
UPDATE.
Sintaxa de actualizare este format din: - UPDATE: care definete
ce procedur urmeaz s fie desfurat urmat de numele relaiei n care se
va produce actualizarea.
- SET:stabilete n ce coloan se va face actualizarea.
- WHERE: este condiia care mpreuna cu coloana selectat precedent
localizeaz exact ce valoare urmeaz sa fie actualizat. De regul
condiia apeleaz cheia primar pentru a putea localiza tuplu din care
face partea valoarea ce trebuie actualizat.
1.3.1.6 Subinterogri ale relaiilor.
n urmatoarea sintax utilizatorul a folosit dou subinterogri, in
i not in
Daca interpretm codul, acesta ar nsemna: - selecteaz denumirea
orei din tabela Ore unde id orei se afla i n tabela Loc_timp dar id
de or nu se afl in tabela Programare_ore. Rezultatul va ntoarce o
list a orelor ce nu au fost programate.
-
Olteanu Alexandru 23
Alte subinterogri:
EXISTS: aceasta este o instruciune binar, care ntoarce ca
rezultat true dac interogarea are cel puin o nregistrarea ca
rezultat, altfel intoarce false.
ALL: verific daca interogarea expresia satisface condiiile
pentru fiecare nregistrare
-
Olteanu Alexandru 24
Capitolul 2
Programare orientat obiect. Java 2.1 Java noiuni
introductive
n anul 1995 compania Sun Microsystems a lansat o tehnologie
remarcabil i inovatoare denumit iniial OAK, ulterior Java, care s-a
impus pe piaa dezvoltatorilor de software datorit calitilor sale
,printre care :
Portabilitatea: Java este un limbaj de programare independent,
aplicaiile dezvoltate putnd fi rulate pe multe sisteme de operare,
cum ar fi Windows,
Ubuntu, Mac OS, i chiar pe sitemele mobile de operare cum ar fi
Android, iOS, far a fi nevoie de o recompilare.
Orientatrea pe obiect: procedeul de programare elimina
programarea clasica, procedural.
Motenirea C: este proiectat dup modelul C i C++, de aceea
utilizatorii care sunt familiarizai cu C++ vor programa uor n
Java.
Securitatea: Java verific dinamic codul introdus pentru
detectarea eventualelor probleme i are un set de reguli stricte
pentru rularea proceselor la distan.
Dezvoltatorii Java au creat mai multe platforme de lucru pentru
rezolvarea
problemelor aparute n diverse domenii printre care:
J2SE Standard Edition, aceasta este platforma standard Java
dedicat creri de aplicaii independente.
J2ME Micro Edition, este platforma folosit pentru programarea
dispozitivelor mobile.
J2EE Enterprise Edition, este platforma cea mai complex propus
de cei de la Java.
Aplicaile Java au un mediu de execuie numit maina Java virtual
(JVM).
-
Olteanu Alexandru 25
2.2 Structura limbajului Java
Limbajul Java a fost proiectat sa lucreze cu setul de caractere
binar Unicode,
un motenitor al cosacratului ASCII , care, fiind programat s
lucreze pe un singur octet putea s reprezinte maxim 256 de
caractere. Unicod poate reprezenta pn la 65536 de semne.
Ca orice limbaj de programare i Java are o serie de cuvinte
cheie, majortatea motenite de la C++. Asta nseamn c n aplicai nu se
pot folosi aceste cuvinte deoarece ele definesc metode, clase,
interfee. Cateva din aceste cuvinte cheie sunt enumerate in tabelul
2.1
Tabelul 2.1
2.2.1 Operatori i literali n Java Constantele n Java poart
numele de literali. Acetia pot fi de mai multe tipuri:
Intregi(integer): literali ntregi se pot scrie n trei baze: baza
8, baza 10 i baza 16 i pot fi de doua tipuri. - normali: se
reprezint pe maxim 4 octei
- lungi: se reprezint pe maxim 8 octei.
abstract boolean break byte
case catch char class
do default continue const
else double extends final
goto for float finally
if implements import instanceof
int interface long native
protected private package new
public return short static
synchronized while void strictfp
this throw throws try
-
Olteanu Alexandru 26
Flotani(Floating Point): sunt constante care au cel puin o
zecimal sau f, F ca sufix pentru reprezentarea valorilor normale
sau d,D ca sufix pentru reprezentarea valorilor duble.
Reprezentarea se face pe 32 octei pentru valorile normale i 64
octei pentru cele duble. Alaturarea literei e la o cifra reprezinta
notaie exponenial.
Exemplu: 9.5, 9e8, 3d, 4F
Literali logici(Boolean): este o nregistrare logica, avnd dou
posibilitai (true/ false);
n exemplul de mai sus constanta logic este isInserted i are
valoarea false la nceputul proceduri iar daca instruciunea merge,
valoarea devine true. Spre deosebire de limbajul C++, literali 0 i
1 nu sunt logici n Java
Caracter(Character): Literali de tip caracter sunt utilizai
pentru a exprima valorile din codul Unicode. Reprezentarea acestora
se face printr-o liter sau o secven trecut ntre apostrofi, cum ar
fi:
- \b: secven pentru tab orizontal;
- \r: secven pentru nceput de rnd;
- \n : secven pentru linie nou;
- \f : secven pentru pagin nou;
- \ : secven pentru ghilimele;
- \ \ : secven pentru backlash
-
Olteanu Alexandru 27
iruri de caractere(String): Un ir de caractere este format fie
din irul vid, declarat cu ghilimele i nimic ntre ele, sau din mai
multe caractere sau secvene de caractere.
Operatorii Java sunt asemntori celor din C++, cu cateva
deosebiri:
Operatorul de atribuire:atribuirea n java se realizeaz cu semnul
=.
Operatori matematici: sunt operatori matematici clasici, cum ar
fi +, -, *, /, dar i operatori de auto-increment i auto-decrement,
i++ respectiv i--; Operatorul matematic + are rol i de concatenare
a irurilor.
Exemplu: String h1 = Orarul; String h2 = este;
String h3= provizoriu; System.out.println(h1 + h2 + h3 );
Sintaxa System.out.ln(); afiaz n consol rezultatul
concatenri.
Operatori organizai la nivel de octet: &(and), ||(or),
!(not);
Operatorul if-else: este expresia logic dac condiia este
ndeplinit returneaz de exemplu true, altfel false.
Comentarile n Java dau posibilitatea utilizatorilor s poat nota
direct n cod o observaie sau o indicaie cu privire la cod. n funcie
de marimea paragrafului comentat se pot nota astfel:
La nivel de rnd comentariile ncep cu //. Cele dou caractere
transform tot ce se afl pe acelai rnd n secven de comentariu, asta
nseamn c n momentul compilri programul nu ine cont de aceste
secvene.
Secvenele care sunt mai mari de un rnd se pun ntre /* la
nceputul paragrafului i */ la sfritul paragrafului comentat.
Exemplu:
-
Olteanu Alexandru 28
2.2.2 Declararea i iniializarea variabilelor
Variabilele sunt mrimile care pot lua diferite valori n timp. n
Java variabilele trebuie declarate i iniializate pentru a putea
lucra cu ele. Declararea implic specificarea tipului variabilei i a
numelui pe care l are. Iniializarea presupune atribuirea unei
valori i se realizeaz cu ajutorul operatorului matematic de
atribuire = .O valoare poate fi constant dac declararea se face
stipulnd sintaxa final naintea tipului de variabil.
Exemplu: - declararea unui ir de caractere: String a;
- iniializarea unui ntreg: int b = 0;
-declararea unui ntreg constant: final C = 12;
Convenional sa stabilit ca variabilele finale constante sa fie
declarate cu majuscule, iar restul cu litere mici. Dac variabilele
conin mai multe cuvinte n numele lor, primul atom lexical se scrie
cu liter mic iar urmatorii atomi cu prima liter mare.
Exemplu: string numeProfesor ;
Declararea variabilelor se poate face n mai multe locuri din
cod, astfel
variabilele sunt de mai multe tipuri:
variabile declarate la nivel de clas, sunt vizibile pentru toate
metodele clasei.
variabile locale declarate la nivelul metodelor i parametri
metodelor sunt vizibile doar la nivelul metodelor.
se pot declara variabile i doar la nivelul unui bloc cod, iar
acea variabil este cunoscut de program doar la nivelul acelui
bloc.
Exemplu de variabil declarat la nivel de cod:
-
Olteanu Alexandru 29
2.2.3 Vectori
Vectorii ca i varibilele, pentru a putea opera cu ei trebuie
declarai i iniializai. Declararea vectorilor seamana cum cea a
variabilelor, doar c dupa ce alegem tipul vectorului trebuie adugat
sintaxa [] i apoi numele vectorului.
Exemplu: String[ ] numeVector;
Iniializarea vectorului se realizeaz prin alocarea memoriei prin
intermediul sitaxei new.
Exemplu: numeStudenti = new String[numrul de elemente],
unde numrul de elemente reprezint maximul de elemente ce le
poate avea vectorul. Pentru a afla numrul de elemente se poate
folosi sintaxa length
Exemplu: int[ ] c = new int[20];
a.length ntoarce valoarea 20;
2.3 Programare orietat-obiect
2.3.1 Obiecte
Programarea orientat-obiect, nseamn lucrul cu obiecte create n
limbajul de programare. Crearea obiectelor realizeaz prin
declararea, instanierea i iniializarea obiectului.
a) Declararea obiectului: se realizeaz prin specificarea clasei
acestuia.
b) Instanierea: presupune alocarea de memorie pentru crearea
efectiv a obiectului cu sintaxa new.
c) Iniializarea: se realizeaz cu ajutorul constructorilor din
clas.
Odat creat obiectul se pot afla informai despre el, se pot
schimba strile obiectului sau se pot executa aciuni. Accesul la
valorile variabilelor unui obiect depind de drepturile oferite de
clasa din care face parte obiectul. Apelarea metodelor unui
obiect se realizeaz prin aplicarea unui punct dupa numele
obiectului.
-
Olteanu Alexandru 30
Exemplu: Rectangle dreptunghi = new Rectangle(0,0,50,70);
dreptunghi.setLocation(15,15);
dreptunghi.setSize(100,150);
System.out.println(dreptunghi.height);
Unde: - prima linie de cod atribuie obiectului dreptunghi o
metoda clasa Rectangle cu
originea n 0 iar dimensiunile iniiale sunt 50 laimea i 70
nalimea.
-sintaxa setLocation schimb originea obiectului dreptunghi n
locaia (15,15)
-setSize schimb dimensiunile dreptunghiului de la (50,70) la
(100,150).
-sintaxa System.out.println(dreptunghi.height) tiprete n consola
programului dimensiunea nalimi dreptunghiului.
2.3.2 Clase
Modalitatea de a introduce tipuri noi de date ntr-o aplicaie
Java este fie prin intermediul claselor, fie prin intermediul
interfeelor. Pentru a declara o clas trebuie pentru nceput sa
specificm modificatori clasei i anume:
O clas declarata public va putea fi folosit de clase indiferent
de pachetul n care se afl.
O clas declarat final nu va putea avea subclase, iar din acest
punct de vedere o astfel de clas este considerat perfect pentru
programarea orientata-obiect deoarece unele metode ateapt un obiect
ca parametru aflat ntr-o anumit clas i nu aflat n subclasa.
Clasele definite n Java pot avea, daca nu sunt declarate ca
fiind clase final, o
mulime de sublcase dar numai o singur clas pe care o motenete,
cu alte cuvinte o clas nu poate avea mai mult de o clas parinte.
Singura clas din java care nu are nici un parinte este clasa
Object.
-
Olteanu Alexandru 31
P1.
Exemplu de declararea al unei clase:
// Corpul clasei
Corpul unei clase conine:
a) variabile de clas declarate i iniializate
b) declararea constructorilor
c) declararea, daca e cazul, al unor clase interne.
d) metodele clasei.
Constructorii poart acelai nume ca i clasa din care fac
parte,acetia sunt metode specifice pentru acea clas cu rol de
iniializare a obiectelor.
2.3.2.1 Clasa Object
Toate clasele din Java motenesc clasa Object, orice obiect fiind
descedent al acestei clase direct sau indirect.
Fiind clasa fr nici un printe punem spune c definete standardul
de comportament comun al subclaselor ei, cum ar fi:
posibilitatea de a testa egalitatea valorilor obiectelor.
returneaz clasa din care un obiect face parte.
specific reprezentarea sub form de ir a obiectului;
-
Olteanu Alexandru 32
Subclasele lui Object pot folosi metodele acestuia, i le pot
nbunti deoarece nu sunt declarate ca finale. De exemplu metoda
toString returneaz reprezentarea ca un ir de caractere a
obiectului. Metoda este necesar n cazul n care este nevoie s se
afieze un ir de obiecte.
2.3.3 Excepii
Excepiile sunt evenimente ce produc ntreruperea unui program n
timpul execuiei. Ele pot sa apar din varii motive, fie elementele
unui ir declarat sunt mai multe decat numrul cu care a fost iniiat,
fie erori sql n cazul n care lucram cu o baza de date, fie erori de
cod.
Mesajul din parantez indic numele clasei din care a aparut
eroarea i pe ce linie de cod. n acest caz eroarea provine de la
declararea incompleta a unei metode.
Tratarea erorilor n Java este obligatorie i de aceea exista
pisibilitatea ca programatorul s izoleze eroarea ntr-un bloc de cod
cu sintaxele try i catch care au urmatoarea forma:
Acest try ncearca sa pregteasc inserarea unor valori ntr-o
relaie dintr-o baz de date. Daca conexiunea e realizat atunci codul
nu va ntoarce eroare, altfel va genera o eroare SQL.
-
Olteanu Alexandru 33
2.3.4 Pachetele standard n Java
Pachetele sunt o colecie de interfee i clase apropiate ca
utilitate. Clasele sunt organizate n pachete pentru a eficientiza
gsirea i utilizarea lor, pentru a nu aprea conflicte cu privire la
numele claselor.
Pachetele standard cele mai importante n Java sunt:
- java.lang: este pachetul ce conine clasele de baz;
- java.io: pachetul ce conine clasele responsabile de
intrri/ieiri i lucrul cu fiiere;
-java.awt: pachetul cu clase folosite pentru crearea interfeei
grafice cu utilizatorul;
-java.awt.event: tratarea evenimentelor produse de
utilizator;
-java.applet: pachetul ce conine clase de dezvoltare a
appleturilor;
-java.sql: clasele ca lucreaz cu baze de date;
-java.net: clasele de programare n reea;
-java.math: pachetul ce lucreaz cu operaii matematice complexe
;
-javax.swing: pachetul cu clase mbogite folosite pentru crearea
unei interfee grafice, cu utilizatorul.
Pentru a putea folosi un pachet ntr-un cod, acesta trebuie
importat.Importul se
realizeaz prin scrierea sintaxei import i numele pachetului
naintea declarrii clasei, la nceputul fiierului surs.
Exemplu
-
Olteanu Alexandru 34
2.3.5 Gestionarea i generarea interfeei grafice cu
utilizatorul
Crearea intefeei grafice se realizeaz cu ajutorul pachetului
javax.swing. Acest pachet este mult mbogit estetic i funcional faa
de predecesorul su java.awt. Pachetul pune la dispoziie sute de
interfee i clase.Setul componentelor GUI puse la dispoziie de
tehnologia Swing, a fost unul din marile schimbri faa de tehnologia
predecesoare, swing punnd la dispoziie 17 pachete:
Componentele pachetului swing pentru crearea interfeelor poti fi
grupate astfel:
-Componente atomice: JLabel, JCheckBox, JRadioButton, JButton,
JScrollBar.
-Componente de editare text: JTextPane, JTextField,
JPasswordField,
JFormattedTextField;
-Meniuri: JMenu, JPopupMenu, JMenuBar, JRadioButtonMenuItem,
JMenuItem;
-Componente complexe: JTree, JTable, JList, JComboBox;
-Containere intermediare: JPanel, JSplitPanel, JScrollPane,
JTabbedPane, JTollBar,
JDesktopPane;
-Containere complexe: JFrame, JApplet, JDialog ,JWindow.
2.3.5.1 JPanel
JPanel reprezint containerul intermediar pentru interfaa grafic.
n el se pot organiza i grupa componentele ale unui alt
container.
-
Olteanu Alexandru 35
Constructorul unui panou are forma JPanel (). Un panou care sa
aib i gestionarul de poziionare lm se declar JPanel(LayoutManager
lm).
2.3.5.2 JLabel
JLabel reprezint etichetele din Java, etichete ce nu pot fi
suprascrise sau selectate n momentul rulri programului. Acestea au
rol informativ pentru utilizator, deoarece n etichete se pot insera
atat cmpuri text cu descrierea aciuni ce trebuie urmat sau
imagini.
2.3.5.2 JButton
JButton face parte din clasa AbstractButton, i funcionalitatea
lui este c prin simpla lui apasare genereaz aruncarea unui
eveniment pe care programatorul trebuie s l trateze. La apasarea
lui, butonul i schimb aspectul. Pe un buton se pot insera atat
cmpuri text cu descrierea aciuni pe care o genereaz la apasare, dar
i imagini, care pot aprea n diferite momente ale butonului, cand
acesta este apsat sau eliberat.
2.3.5.3 JComboBox
JFrame este containrul de nivel nalt cel mai des folosit pentru
aplicaile bazate pe tehniologia Swing. Componentele pachetului
Swing se poziioneaz n interiorul containrului.
Componenta JComboBox este o combinaie ntre un buton i o list din
care utilizatorul poate alege doar un element, fiind singurul
disponibil la un moment dat.
JComboBox poate fi creat dintr-un obiect, sau iniializat
dintr-un vector, sau folosind un model dat explicit de tip
ComboBoxModel.
Exemplu JComboBox:
JComboBoxSala este programat s listeze toate slile din baza de
date. Componenta JComboBox este declarat automat de programul
NetBeans, utilizatorul fiind nevoit doar s iniializeze
componenta.
-
Olteanu Alexandru 36
2.3.5.4 JTable
JTable este componenta care este capabil s opereze cu tabele.
JTable poate fi creat cu ajutorul unor modele.
JTable folosete la listarea unor obiecte dintr-o baz de date i
are posibilitatea selectri unui astfel de obiect cu ajutorul
metodei jTable1MouseClicked din clasa motenita
java.awt.event.MouseEvent
Exemplu
2.3.6 Conexiunea la o baz de date (JDBC)
JDBC(Java DataBase Conectivity) este interfa de programare
dezvoltat pentru accesul la o baz de date, care ofer posibilitatea
dezvoltatorilor s lucreze direct cu instruciuni SQL.Codul surs
scris pentru a manipula o baz de date n Java este portabil
indiferent de SGBD, fiind nevoie doar de driverele potrivite pentru
fiecare
sistem n parte.
Pe scurt JDBC este capabil s realizeze conexiunea cu baza de
date, s manipuleze baza cu secvene sql standard i este capabil s
efectueze i prelucrarea datelor ce se ntorc din baza de date.
Pentru ca o aplicaie s se poat conecta la o baz de date, primul
pas este nregistrarea unui driver. Acest lucru se face prin
ncarcarea unor clase, cum ar fi:
-Class.forName:aceast clas apeleaz funcia ClassLoader
Class.forName(sun.jdbc.odbc.JdvcOdbcDriver);
- DriverManager
-
Olteanu Alexandru 37
import java.sql.DriverManager;
Nu exist o restricie al numrului de drivere importate n maina
virtual Java, de aceea specificarea cii URL JDBC unui sistem de
gestiune este necesar. Sintaxa general de specificare a cii este
jdbc.:. De exemplu, pentru folosirea unui sistem de gestiune
PostgreSQL calea arat astfel:
Dup nregistrarea driverului, conexiunea cu baza de date se
realizeaz prin metoda GetConnection din clasa DriverManager.
Stabilirea conexiuni folosind un driver PostgreSQL.
Unde: - numele driverului folosit este declarat pe a doua linie
de cod;
- userul i parola pentru conectarea la baza de date din
PostgreSQL sunt iniializate sub stringul user i password;
-
Olteanu Alexandru 38
- n url sunt trecute calea catre serverul local i numele bazei
de date la care trebuie aplicaia sa se conecteze.
2.3.6.1 DAO (Data acces objet)
DAO este un obiect ce are o interfa de programare pentru a acesa
datele stocate n diverse sisteme de gestiune al bazelor de date. Ca
urmare, DAO nu depinde de
sistemul de gestiune, codul odat scris putnd fi folosit pentru a
accesa datele din diverse siteme.
DAO folosete secvene SQL pentru a interaciona cu baza de
date.Tuplurile i atributele din baza de date sunt create n Java sub
forma unor obiecte, fiecare tuplu i atribut fiind privit ca un
array de obiecte. De aceea DAO manipuleaz datele din tabele cu
ajutorul metodelor definite n Java, cum ar fi getA sau setA.
2.3.6.2 Interfee SQL n Java. 2.3.6.2.1 Interfaa Statement
Metodele interfeei Statement transmit secvene SQL ctre baza de
date i astfel ofer suport pentru dou subinterfee PreparedStatement
i CallableStatement. Metodele interfeei Statement sunt:
executeQuery: aceast metod realizeaz interogri ale bazei de date
prin secvena SQL SELECT. Rezultatul inrerogri este de tip tabel i
conine 1 sau mai valori ale coloanelor n funcie de sintaxa SQL.
Exemplu:
-
Olteanu Alexandru 39
unde, n acest exemplu instuciunea SQL ntoarce toate valorile din
tabela Formaiuni_studiu pentru care Id_parinte este egal cu 0.
executeUpdate: metoda realizeaz actualizri ale datelor (INSERT,
DELETE, UPDATE) sau asupra structurii bazei de date(CREATE,
ALTER,DROP).
Exemplu:
execute: este o metod care ntoarce un rezultat format din mai
multe obiecte.
2.3.6.2.2 Interfaa PreparedStatement
Metoda PreparedStatement pregtete secvenele sql ce vor trebui
executate. n aceast metod se pot seta mai muli parametri de
intrare, fiecare fiind nlocuit n secvena SQL cu un semn al
ntrebari, ulterior fiind nevoie s se specifice o valoare pentru
fiecare parametru.
Obiectului de tip PreparedStatement se creaz cu sintaxa
preparedStatement i se specific o secvena SQL. Execuia unui obiect
de acest tip se face prin aceleai metode ca la obiectele de tip
Statement.
Exemplu:
n acest exemplu, prepareStatement pregatete conexiunea la baza
de date.
-
Olteanu Alexandru 40
2.3.6.2.3 Interfaa ResultSet
Orice interogare executat corect SQL a unei baze de date,
ntoarce un rezultat reprezentat cu ajutorul unui obiect de tip
ResultSet. Obiectul conine rezultatul interogri sub forma unui
tabel cu un numr de linii i coloane diferit n funcie de secvena SQL
i consistena bazei de date.
n exemplul de sus, obiectul de tip ResultSet poarta numele de
results, i afieaz valorile selectate din tabela Profesori.
Extragerea efectiv din tabel a valorilor se realizeaz parcurgnd
linie cu linie tabela folosind metode de tipul getB, unde b este
tipul de dat din tabel. Numerele din parantez semnific coloan n
care se afl tipul de dat n tabel. Un exemplu de valori din tabela
Profesori dup execuia secvenei SQL este:
Id Nume Id_dep
1 Popescu Marian 42
-
Olteanu Alexandru 41
Capitolul 3
Aplicaia de asistena de ntocmire a orarului
3.1 Descrierea aplicaiei
Aplicaia este un ajutor de ntocmire al orarului i a fost
dezvoltat n mediul de programare NetBeans IDE 7.4, un soft
disponibil n mod gratuit pe internet. Pentru
crearea unei baze de date am folosit softul PgAdmin III iar
sistemul de gestiune ales este
PostgreSQL deasemenea disponibilie pe internet.
Pentru a putea opera secvene sql n Netbeans, a fost necesar
folosirea unui driver JDBC numit postgresql-9.1-901.jdbc4.
Baza de date a fost conceput plecnd de la ideea c publicul int
al aplicaiei sunt secretariatele facultilor, care la nceputul
fiecrui an universitare trebuie s ntocmneasc pe baza planului de
nvamnt notele de comand i orarul. Pentru ca ntocmirea orarului sa
fie corect trebuie avut n vedere eventualele probleme ce pot aprea
n momentul programrii pe sli i zile att formaiunile de studiu cat i
profesori.
Setul de reguli de care o aplicaie de asistare a ntocmiri
orarului trebuie sa in cont n momentul n care utilizatorul ncearc
sa programeze un cmp din orar este:
- formaiunile de studiu pot fi programate o singur dat pe un
interval orar. Daca exist formaiuni ce au sub-formaiuni de care
depind, cum ar fi anul, grup, semigrupa, atunci nu se pot programa
pe acelai interval orar i formaiuni i subformaiuni.
- profesori nu pot fi programai s in doua discipline n acelai
timp.
- daca o sal a fost programat pentru o formaiune la un anumit
interval orar, atunci acea sal nu este disponibil pentru nici o alt
formaiune n acelai interval.
Interfaa grafic creat a fost proiectat pentru a fi n primul rnd
intuitiv, partea estetic fiind pus pe locul 2.
-
Olteanu Alexandru 42
3.2 Structura bazei de date
Baza de date este format din 14 tabele distincte, fiecare fiind
proiectat pentru a asigura integritatea i optimizarea informaiei.
Scriptul de crearea al bazei de date este redat n totalitate n
subcapitolul Anexe, la punctul 3.4.1
Tabelele au urmtoarele roluri:
- Profesori: este tabela de gestiune pentru profesori.
- Ore: gestiunea intervalelor orare
-Zile: gestiunea zilelor saptmni - Sali: gestiunea salilor
alocate pentru o anumit facultate. -Mod: gestiunea paritii
-Formatiuni_studiu: gestiunea anilor, grupelor, subgrupelor.
-Planuri_scolarizare: Planurile de scolarizare pentru fiecare
an.
-Loc_timp: tabel de legtur ntre ore, zile i sli. - Departamente:
gestionarea departamentelor.
- Facultai: gestionarea facultailor; -Detalii_plan_scolarizare:
gestionarea tuturor informaiilor dintr-un plan de scolarizare
-Defalcare_ore: tabel de legtura ntre profesor, disciplin, tipul
orei, numrul de ore. -Asociere_an_plan: tabel de legtur ntre,
tabela de formaiuni i tabela de planuri. -Programare_ore: tabela de
gestiune a programarilor orarului.
-
Olteanu Alexandru 43
3.2.1 Prezentarea tabelelor:
Caracteristici generale ale tabelelor:
toate coloanele Id ale tabelelor sunt chei primare i sunt
declarat ca serial, adic au proprietatea de autoincrement.
Sirurile de caractere sunt declarate ca fiind charachter varying
de diferite lungimi n funcie de ce rol are acel ir n aplicaie.
a) Tabela Profesori:
Tabela Profesori este format din 3 coloane:
-Nume: coloana n care se regsesc numele i prenumele
profesorilor..
-Id_dep: este o cheie strin (foreign key), adic, este cheia de
legtur cu cheia primar din tabela Departamente.
b) Tabela Ore:
Tabela Ore este format din 2 coloane:
-
Olteanu Alexandru 44
-Denumire: este coloana declarat ca ir de caractere cu lungimea
10 i n ea se vor stoca intervalele orare, de exemplu 13-14;
c) Tabela Zile:
Tabela Zile este format din 2 coloane:
-Denumire: este coloana declarat ca ir de caractere cu lungimea
10 i n ea se vor stoca intervalele denumirea zilelor, de exemplu
Luni, Mari;
d) Tabela Formatiuni_studiu:
Tabela Formaiuni de studiu este format din 3 coloane:
-Denumire: este coloana declarat ca ir de caractere cu lungimea
10 i n ea se vor stoca denumirea fiecrei formaiuni de studiu, de
exemplu Anul I,Grupa 1331;
-Id_parinte: Grupele sunt copii anilor, iar subgrupele sunt
copii grupelor, deci
fiecare formaiune de studiu are un id parinte n funcie de
parintele lor, numai anii nu au nici un parinte.
-
Olteanu Alexandru 45
e) Tabela Facultati:
Tabela Facultai este format din 2 coloane:
-Denumire_facultate: este coloana declarat ca ir de caractere cu
lungimea 80 i n ea se vor stoca denumirea facultailor din UPB, de
exemplu Stiine Aplicate;
e) Tabela Departamente:
Tabela Formaiuni de studiu este format din 3 coloane:
-Denumire_departament: este coloana declarat ca ir de caractere
cu lungimea 80 i n ea se vor stoca denumirea tuturor
departamentelor UPB.
-
Olteanu Alexandru 46
-Id_facultate: este o cheie strin (foreign key), adic, este
cheia de legtur cu cheia primar din tabela Facultai.
f) Tabela Sali:
Tabela Formaiuni de studiu este format din 2 coloane:
-Denumire: este coloana declarat ca ir de caractere cu lungimea
20 i n ea se vor stoca denumirea fiecrei sli din UPB sau, pentru a
nu ncarca foarte mult baza de date, se vor stoca doar slile alocate
facultii care ntocmete orarul, de exemplu BN 113;
g) Tabela Loc_timp:
-
Olteanu Alexandru 47
Tabela Loc_timp este format din 5 coloane:
-Id_sala: este o cheie strin (foreign key), adic, este cheia de
legtur cu cheia primar din tabela Sli.
-Id_zi: este o cheie strin (foreign key), adic, este cheia de
legtur cu cheia primar din tabela Zile
. -Id_ora: este o cheie strin (foreign key), adic, este cheia de
legtur cu cheia primar din tabela Ore
-Id_mod: este o cheie strin (foreign key), adic, este cheia de
legtur cu cheia primar din tabela Mod.
g) Tabela Defalcare_ore:
Tabela Defalcare_ore este format din 6 coloane:
-Id_formatiune: este o cheie strin (foreign key), adic, este
cheia de legtur cu cheia primar din tabela Formatiuni_studiu.
-Id_profesor: este o cheie strin (foreign key), adic, este cheia
de legtur cu cheia primar din tabela Profesori.
. -Tip_ora: este coloana ce precizeaz ce tip de or este. Curs,
Seminar, Laborator i este declarat ca un ir de caractere de lungime
5.
-Disciplina: aceast coloan stocheaz denumirile materiilor.
-
Olteanu Alexandru 48
-Nr_ore: este coloana ce stocheaz numrul de ore al unui curs,
seminar sau laborator. Variabila este declarat ca intreg.
h) Tabela Programare_ore:
Tabela Programare_ore este format din 3 coloane:
-Id_loc_timp: este o cheie strin (foreign key), adic, este cheia
de legtur cu cheia primar din tabela Loc_timp.
-Id_defalcare ore: este o cheie strin (foreign key), adic, este
cheia de legtur cu cheia primar din tabela Defalcare_ore.
mbinarea celor dou chiei strine din tabelele Defalcare_ore i
Loc_timp creaz o programare efectic n orar.
3.3 Programare Java.
Programarea n Java a aplicaiei este structurat n 3 pachete.
Orar.DAO, DB i UI. Fiecare pachet din Netbeans este proiectat avnd
sarcini clare cu privire la dezvoltarea, rularea i funcionarea
corect a aplicaiei.
3.3.1 Pachetul DB.
n pachetul DB s-au definit constructori pentru tabelele din baza
de date.
Fiecare tabel cu care se lucreaz direct trebuie s aib un
constructor definit n DB.
-
Olteanu Alexandru 49
Pentru crearea unui constructor al unei tabele este necesar s
definim clasa public cu acelai nume, i s iniializm n aceasta
variabile pentru fiecare coloan din tabel
n interiorul clasei se declar variabile la nivel de clas pentru
fiecare coloan din tabela Loc_timp i referirea la variabile se face
cu instriciunea this. pentru a putea fi folosite.
Constructorul gol , public Loc_timp (), se declar pentru c
apelul uneori ntr-o metod se face i catre constructorul gol, iar
dac acesta nu este declarat, aplicaia va da eraore.
Constructorul are definite n interiorul lui i niste metode de
setare a valorilor n baza de date sau de recuperare a acestora.
Aceste metode sunt getA i setA, unde A este numele coloanei din
baza de date.
Exemplu
-
Olteanu Alexandru 50
Astfel de clase constructor se creaz pentru toate tabelele cu
care vrem sa lucrm n nterfaa grafic i pentru care trebuie sa
recuperm un id sau sa setm o nou valoare n baza de date.
3.3.2 Pachetul OrarDAO.
n pachetul OrarDAO se realizeaz conexiunea la baza de date
folosind diferite metode i cu ajutorul unui driver special pentru
fiecare sistem de gestiune n parte. n acest caz, sistemul de
gestiune este PostgreSQL i astfel driverul necesar pentru
stabilirea conexiuni este postgresql-9.1-901.jdbc4.
-
Olteanu Alexandru 51
Pentru a realiza conexiunea la o baz de date trebuie s specificm
calea ctre baza de date, n acest caz calea fiindu-i atribuitr unui
ir de caractere care este denumit generic DB_CONNECTION_URL. n
finalul cii, dupa ultimul backslesh este specificat numele bazei de
date n care vrem s lucrm. A doua linie de cod reprezint driverul cu
care se realizeaz conexiunea. n a treia i respectiv a patra linie
din cod sunt stipulate userul i parola cu care aplicaia se va loga
automat astfel la baza de date.
n continuare se declar nul conexiunea i deschiderea unei noi
sesiuni se prinde ntr-un bloc try-catch pentru a testa driverul,
respectiv conexiunea i datele de logare n urmatorul bloc
try-catch.
Tot n OrarDAO, sunt iniializate clase, care cu ajutorul
constructorilor declarai n pachetul DB se ncearc manipularea bazei
de date. Acest procedeu de creare unor obiecte care s conin secvene
SQL uureaz munca programatorului deoarece pentru a iniializa
proceduri de interogare sau actualizare a bazei de date este
suficient apelarea acestor metode. Programarea orientat-obiect se
bazeaz pe acest procedeu de dezvoltare al aplicaiilor.
Pentru selectarea unor valori dintr-o tabel se scrie o metod n
OrarDAO, numit selectNumeleTabelei, i n funcie de complexitatea
tabelei sau de ce anume vrem sa ne ntoarc, secvena SQL difer. De
exemplu:
-
Olteanu Alexandru 52
Mai sus am exemplificat o metod complet de selectare a tuturor
valorilor din tabela Formatiuni_studiu. Metoda, este declarat ca o
list de obiecte. Rezultatul ntors de instruciunea sql este afiat
sub form de tabel. Metoda este foarte folositoare n momentul n care
dorim sa operm secvene de actualizare a bazei de date deoarece pune
la dispoziie utilizatorului lista iar acesta poate selecta cu o
metod din java printr-un simplu click tuplu asupra caruia vrea s
fac actualizri.
i pentru actualizarea datelor se pot crea metode de acest tip,
indiferent ca e vorba de secvene de stergere, actualizare sau
inserare n baza de date, de exemplu:
Metoda insereaz n tabela denumirea unor sli, id fiind setat ca
auto-increment se va insera automat. Interfaa PreparedStatement
pregtete conexiunea pentru introducerea unor valori de la interfaa
grafic a utilizatorului n tabela. Aceast pregatire poart numele n
metoda prezentat insertStatement.
Sintaxa de obinere a unei denumiri pentru sal este descris la a
aptea linie de cod i anume: insertStatement.setString(1,
s.getDenumire()), unde numrul 1 precizeaz a cta valoare declarat in
sintaxa sql este denumirea, iar metoda getDenumire preia valoarea
denumiri introduse de utilizator i o pregtete pentru inserare.
-
Olteanu Alexandru 53
3.3.3 Pachetul UserInterface(UI).
n acest pachet se genereaz cu ajutorul metodelor grafice
predefinite, care aparin claselor swing sau awt, interfaa prin care
utilizatorul va programa orarul. n acest scop am creat 7 ferestre
grafice de tip JFrame. Voi descrie pe rnd fiecare fereastr cu toate
componentele ei, codul surs anexndul la subcabitolul 3.4.4.
a) JFrameMenu.java
Frame-ul Meniu a fost creat pentru a facilita navigarea ctre
toate ferestrele aplicaiei. Acesta este format dintr-un JMenuBar cu
dou meniuri.
Meniul UPB listeaz doi itemi, unul care conduce la un
JFrameSali, iar al doilea conduce ctre JFrameProfesori.
Al doilea meniu, Programare Orar conduce catre
JFrameIntocmireOrar,
fereastra n care se programeaz efectiv orarul i catre 3
JFrameRaport care creaz rapoarte cu privire la orar pe diferite
criteri.
-
Olteanu Alexandru 54
b) JFrameSali.java
Acest fereastr da posibilitatea utilizatorului sa gestioneze
tabela Sali. Tabelul din josul ferestrei listeaz automat toate
slile din tabel acest lucru fiind posibil datorit metodei
selectSali din pachetul
OrarDAO
.
Butoanele Adaug Sala, Modific Sala i Sterge Sala realizeaz
secvene de actualizare a tabelei.
Dupa introducerea unei
denumiri n campul text prin
apsarea butonului Adaug Sala se realizeaz secvena de insert.
Pentru a modifica i sterge o sal este necesar selectarea din
tabelul din josul ferestrei a unei
sli. Listarea se face automat n momentul rulri ferestrei iar
reiniializarea listei de sli se produce la apsarea oricrui buton
din fereastr.
Cmpul text de aceai culoare cu fundalul este destinat pentu
afiarea erorilor n cazul n care secvena sql nu funcioneaz.
-
Olteanu Alexandru 55
c) JFrameProfesori.java
JFrameProfesori este fereastra de gestiune a profesorilor
singura diferen fat de gestiunea pe sli este ca aici trebuie s
selectm dintr-o list departamentul din care face parte profesorul.
Lista, la fel ca i tabelul se ncarc automat la rularea aplicaiei.
Procedurile de actualizare i selectare a datelor sunt delcarate n
OrarDAO.
-
Olteanu Alexandru 56
d) JFrameIntocmireOrar.java
n aceast fereastr se realizeaz efectiv programarea orelor. n
partea de sus a ferestrei avem 6 ComboBox-uri care listeaz datele
care nu au fost nca programate. Prima oar se va alege un loc i un
timp pentru care va trebui s selectm formaiunea de studiu ce vrem
sa o programm, disciplina ce urmeaz sa o studieze n acel nterval i
tipul disciplinei, daca este Curs, Seminar sau Laborator. Odat
selectate aceste valori nu trebuie sa apar listate n continuare. Se
poate observa ca pentru Sala CB 106 luni dimineaa, pana la ora 12
nu se mai pot programa ore deoarece sala este ocupat.
n momentul apasri butonului de adugare programare, se introduc n
tabela Programare_ore valorile id-urilor pentru loc_timp i
defalcare_ore. n urma unei metode de select din programare_ore
ComboBox-urile se elibereaz de datele care au fost deja
programate.
Gridul din partea de jos a ferestrei afiseaz n timp real
programarile efectuate. Butonul de Generare raport afiseaz un
raport cu privire la situaia programrii pe ore.
-
Olteanu Alexandru 57
d) JFrameRapoarteX.java
Ferestrere de Rapoarte sunt create pentru a genera rapoarte
despre orar din prisma
diferitelor criterii, cum ar fi profesori, sali sau an
studiu.
Listele ncarca datele din tabele iar n momentul n care se apas
butonul de generare raport, acesta va afia ntr-o fereastr
programarea respectivei categori pentru toat saptamana.
Sursele cod pentru toate ferestrele de tip JFrame vor fi anexate
n subcapitolul 3.4.4
-
Olteanu Alexandru 58
3.4 Anexe
3.4.1 Structura scriptului bazei de date.
DROP TABLE IF EXISTS "Zile";
DROP TABLE IF EXISTS "Sali";
DROP TABLE IF EXISTS "Ore";
DROP TABLE IF EXISTS "Mod";
DROP TABLE IF EXISTS "Programare_ore";
DROP TABLE IF EXISTS "Loc_timp";
DROP TABLE IF EXISTS "Defalcare_ore";
DROP TABLE IF EXISTS "Asociere_an_plan";
DROP TABLE IF EXISTS "Detalii_plan_scolarizare";
DROP TABLE IF EXISTS "Planuri_scolarizare";
DROP TABLE IF EXISTS "Profesori";
DROP TABLE IF EXISTS "Formatiuni_studiu";
DROP TABLE IF EXISTS "Departamente";
DROP TABLE IF EXISTS "Facultati";
-- Table: "Facultati"
--DROP TABLE IF EXISTS "Facultati";
CREATE TABLE "Facultati"
(
"Id" SERIAL,
"Denumire_facultate" character varying(80),
CONSTRAINT pk_facultati PRIMARY KEY ("Id")
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Facultati"
OWNER TO postgres;
-- Table: "Departamente"
--DROP TABLE IF EXISTS "Departamente";
CREATE TABLE "Departamente"
(
"Id" SERIAL,
"Denumire_departament" character varying(80),
"Id_facultate" integer NOT NULL,
CONSTRAINT pk_departamente PRIMARY KEY ("Id"),
CONSTRAINT fk_departamente FOREIGN KEY ("Id_facultate")
REFERENCES "Facultati" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Departamente"
OWNER TO postgres;
CREATE TABLE "Formatiuni_studiu"
(
"Id" SERIAL,
"Denumire" character varying(10) NOT NULL,
-
Olteanu Alexandru 59
"Id_parinte" integer,
CONSTRAINT pk_formatiuni PRIMARY KEY ("Id")
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Formatiuni_studiu"
OWNER TO postgres;
-- Table: "Profesori"
-- DROP TABLE "Profesori";
CREATE TABLE "Profesori"
(
"Id" SERIAL,
"Nume" character varying(50) NOT NULL,
"Id_dep" integer NOT NULL,
CONSTRAINT pk_profesori PRIMARY KEY ("Id"),
CONSTRAINT fk_profesori FOREIGN KEY ("Id_dep")
REFERENCES "Departamente" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Profesori"
OWNER TO postgres;
-- Table: "Planuri_scolarizare"
--DROP TABLE IF EXISTS "Planuri_scolarizare";
CREATE TABLE "Planuri_scolarizare"
(
"Id" SERIAL,
"Denumire_plan" character varying(20) NOT NULL,
CONSTRAINT pk_planuri PRIMARY KEY ("Id")
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Planuri_scolarizare"
OWNER TO postgres;
-- Table: "Detalii_plan_scolarizare"
--DROP TABLE IF EXISTS "Detalii_plan_scolarizare";
CREATE TABLE "Detalii_plan_scolarizare"
(
"Id" SERIAL,
"Disciplina" character varying(50) NOT NULL,
"Cod_disciplina" character varying(15) NOT NULL,
"C" integer NOT NULL,
"S" integer NOT NULL,
"L" integer NOT NULL,
"P" integer NOT NULL,
"PC" integer NOT NULL,
"Forma_evaluare" character varying(1) NOT NULL,
"Id_plan" integer NOT NULL,
"Semestru" character varying(5) NOT NULL,
"Tip_O_A_L" character(1),
"Id_departament" integer NOT NULL,
CONSTRAINT pk_detalii PRIMARY KEY ("Id"),
-
Olteanu Alexandru 60
CONSTRAINT fk_departament FOREIGN KEY ("Id_departament")
REFERENCES "Departamente" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_plan FOREIGN KEY ("Id_plan")
REFERENCES "Planuri_scolarizare" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Detalii_plan_scolarizare"
OWNER TO postgres;
-- Table: "Asociere_an_plan"
--DROP TABLE IF EXISTS "Asociere_an_plan";
CREATE TABLE "Asociere_an_plan"
(
"Id" SERIAL,
"Id_an" integer NOT NULL,
"Id_plan" integer NOT NULL,
CONSTRAINT pk_asocieri PRIMARY KEY ("Id"),
CONSTRAINT fk_an FOREIGN KEY ("Id_an")
REFERENCES "Formatiuni_studiu" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_plan FOREIGN KEY ("Id_plan")
REFERENCES "Planuri_scolarizare" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Asociere_an_plan"
OWNER TO postgres;
-- Table: "Defalcare_ore"
-- DROP TABLE IF EXISTS "Defalcare_ore";
CREATE TABLE "Defalcare_ore"
(
"Id" SERIAL,
"Id_formatiune" integer NOT NULL,
"Id_profesor" integer NOT NULL,
"Tip_ora" character(5) NOT NULL,
"Disciplina" character varying(50) NOT NULL,
"Nr_ore" integer NOT NULL,
CONSTRAINT pk_defalcare_ore PRIMARY KEY ("Id"),
CONSTRAINT fk_defalcare_p FOREIGN KEY ("Id_profesor")
REFERENCES "Profesori" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_defalcare_f FOREIGN KEY ("Id_formatiune")
REFERENCES "Formatiuni_studiu" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Defalcare_ore"
OWNER TO postgres;
-- Table: "Loc_timp"
-
Olteanu Alexandru 61
-- DROP TABLE IF EXISTS "Loc_timp" ;
CREATE TABLE "Loc_timp"
(
"Id" SERIAL,
"Id_sala" integer NOT NULL,
"Id_zi" integer NOT NULL,
"Id_ora" integer NOT NULL,
"Id_mod" integer NOT NULL,
CONSTRAINT pk_loc_timp PRIMARY KEY("Id")
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Loc_timp"
OWNER TO postgres;
-- Table: "Programare_ore"
-- DROP TABLE IF EXISTS "Programare_ore";
CREATE TABLE "Programare_ore"
(
"Id" SERIAL,
"Id_loc_timp" integer NOT NULL,
"Id_defalcare" integer NOT NULL,
CONSTRAINT pk_programare PRIMARY KEY ("Id"),
CONSTRAINT fk_loc_timp FOREIGN KEY ("Id_loc_timp")
REFERENCES "Loc_timp" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_defalcare FOREIGN KEY ("Id_defalcare")
REFERENCES "Defalcare_ore" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Programare_ore"
OWNER TO postgres;
-- Table: "Mod"
-- DROP TABLE IF EXISTS "Mod";
CREATE TABLE "Mod"
(
"Id" SERIAL,
"Denumire" character varying(10) NOT NULL,
CONSTRAINT pk_mod PRIMARY KEY ("Id")
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Mod"
OWNER TO postgres;
-
Olteanu Alexandru 62
-- Table: "Ore"
-- DROP TABLE IF EXISTS "Ore";
CREATE TABLE "Ore"
(
"Id" SERIAL,
"Denumire" character varying(10) NOT NULL,
CONSTRAINT pk_ore PRIMARY KEY ("Id")
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Ore"
OWNER TO postgres;
-- Table: "Sali"
-- DROP TABLE IF EXISTS "Sali";
CREATE TABLE "Sali"
(
"Id" SERIAL,
"Denumire" character varying(10) NOT NULL,
CONSTRAINT pk_sali PRIMARY KEY ("Id")
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Sali"
OWNER TO postgres;
-- Table: "Zile"
-- DROP TABLE IF EXISTS "Zile";
CREATE TABLE "Zile"
(
"Id" SERIAL,
"Denumire" character varying(10) NOT NULL,
CONSTRAINT pk_zile PRIMARY KEY ("Id")
)
WITH (
OIDS=FALSE
);
ALTER TABLE "Zile"
OWNER TO postgres;
3.4.2 Codul Java pentru pachetul DB.
Codul pentru constructorul Formatiuni
package DB;
public class Formatiuni {
private int id;
-
Olteanu Alexandru 63
private String denumire;
private int id_parinte;
public Formatiuni(int id, String denumire, int id_parinte) {
this.id = id;
this.denumire = denumire;
this.id_parinte = id_parinte;
}
public Formatiuni() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDenumire() {
return denumire;
}
public void setDenumire(String denumire) {
this.denumire = denumire;
}
public int getId_parinte() {
return id_parinte;
}
public void setId_parinte(int id_parinte) {
this.id_parinte = id_parinte;
}
}
Constructorul Loc_timp. Ceilali constructori sunt asemntori i se
construiesc analog. package DB;
public class Loc_timp {
private int id;
private int id_sala;
private int id_zi;
private int id_ora;
private int id_mod;
private String disponibilitate;
public Loc_timp(int id, int id_sala, int id_zi, int id_ora, int
id_mod, String disponibilitate) {
this.id = id;
this.id_sala = id_sala;
this.id_zi = id_zi;
this.id_ora = id_ora;
this.id_mod = id_mod;
this.disponibilitate = disponibilitate;
}
public Loc_timp() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
-
Olteanu Alexandru 64
}
public int getId_sala() {
return id_sala;
}
public void setId_sala(int id_sala) {
this.id_sala = id_sala;
}
public int getId_zi() {
return id_zi;
}
public void setId_zi(int id_zi) {
this.id_zi = id_zi;
}
public int getId_ora() {
return id_ora;
}
public void setId_ora(int id_ora) {
this.id_ora = id_ora;
}
public int getId_mod() {
return id_mod;
}
public void setId_mod(int id_mod) {
this.id_mod = id_mod;
}
public String getDisponibilitate() {
return disponibilitate;
}
public void setDisponibilitate(String disponibilitate) {
this.disponibilitate = disponibilitate;
}
}
3.4.3 Codul Java pentru pachetul OrarDAO
. package DAO;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import DB.*;
public class OrarDAO {
private final static String DB_CONNECTION_URL =
"jdbc:postgresql://127.0.0.1:5432/TestOrar";
private final static String DRIVER_CLASS_NAME =
"org.postgresql.Driver";
private final static String USER =