asistenta intocmire orar

76
Universitatea Politehnica din Bucureşti Facultatea de Ştiinţe 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 ştiinţific: Lect. Dr. Tiberiu Vasilache Absolvent: Olteanu A. Alexandru Bucureşti 2014

Upload: alexandru

Post on 16-Dec-2015

90 views

Category:

Documents


0 download

DESCRIPTION

Proiect de licenta ce prezinta o aplicatie de asistenta la intocmirea orarului pentru facultate.

TRANSCRIPT

  • 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 =