. Sistem Integrat de Gestiune Didactica Utilizand Tehnologii Java
CUPRINS
PREFAȚĂ… …3
1.INTRODUCERE… .5
1.1 Bazele de date și utilitatea lor … …5
1.2 Ce face aplicația mea? … ..8
1.3 Aplicații similare… .10
2.STRUCTURĂ… .11
2.1 Tehnologii de dezvoltare … …11
2.1.1 Oracle / SQL … .11
2.1.2 Java … …13
2.1.3 .NET Framework 2.0 … …18
2.1 Medii de dezvoltare … …21
2.2.1 IntelliJ® IDEA 5.0 … ..21
2.2.2 Microsoft Visual Studio 2005 … ..22
2.2.3 Embarcadero ERStudio 6.0… …23
2.3 Schema generală a aplicației … ..25
2.4 Baza de date … ..26
2.4.1 Descriere generală a bazei de date … .26
2.5. Aplicația de administrare (JAVA)… …32
2.5.1 Nucleul… .32
2.5.2 Clase și metode pentru prelucrări de informații … ..36
2.5.3Funcții și proceduri stocate … .40
2.6 Aplicație web demonstrativă (.NET) … …41
3. DESCRIERE PRODUS FINAL ȘI FUNCȚIONARE … .43
4.CONCLUZII … ..46
5.BIBIOGRAFIE … .47
ANEXE… …48
Anexa 1 … …48
Anexa 2 … …49
Anexa 3 … …50
Anexa 4 … …52
~ 2 ~
SIUD
PREFAȚĂ
Suntem în secolul 21, populația planetei este in jur de 6,5 miliarde de indivizi, fiecare individ este caracterizat de atribute ce uneori este necesar a fi stocate, accesate și actualizate. Aceste informații este necesar a fi structurate într-un mod cât mai precis și cât mai accesibil. Aici intervin bazele de date.
O bază de date reprezintă o modalitate de stocare a unor informații (date) pe un
suport extern, cu posibilitatea regăsirii acestora. Uzual, o bază de date este memorata într-
unul sau mai multe fișiere. Modelul clasic de bază de date este cel relațional, în care
datele sunt memorate în tabele. Pe lângă tabele, o bază de date mai poate conține:
proceduri și funcții, utilizatori și grupuri de utilizatori, tipuri de date, obiecte, etc.
Dintre producătorii cei mai importanți de baze de date amintim Oracle, Sybase, IBM, Informix, Microsoft, etc.
Gândindu-ne la stadiul evolutiv al tehnologiei din ziua de astăzi este ușor de imaginat că bazele de date conțin o cantitate enorma de informație, care pentru a fi structurată, accesată și actualizată necesită oricum un efort imens. De aceea s-a trecut la pasul următor : dezvoltarea unor aplicații pentru dezvoltarea bazelor de date și cu rol de interfață între utilizator și baze de date. Aplicațiile pentru crearea bazelor de date sunt furnizate de producătorii tipului respectiv de bază de date, iar aplicațiile pentru prelucrările acestora sunt realizate de firme specializate sau de programatori independenți, în funcție de destinația aplicației.
Aplicațiile de tip interfața între utilizatori și baze de date pot fi aplicații desktop sau aplicații web. Ambele se conectează la baza de date prin intermediul unui driver specific tipului respectiv de bază de date. Acesta este responsabil cu accesul efectiv la datele stocate, fiind legătura între aplicație și baza de date.
Am denumit aplicația ce constituie punctual central al acestui proiect de diplomă
“SIUD” (Sistem Integrat pentru Utilizare Didactică) pentru a mă referi ulterior la ea mai
ușor în această lucrare de prezentare. SIUD reprezintă numai partea de administrare a
~ 3 ~
SIUD
bazei de date, este realizată în JAVA și este alcătuită dintr-o suită de module strâns corelate, fiecare având o anumită funcție bine definită în cadrul aplicației.
SIUD este constituie o interfață optimală pentru baza de date folosită permițând
actualizarea bazei de date într-un mod practic și rapid deoarece toate operațiile se fac prin intermediul procedurilor și funcțiilor stocate.
Accesul la baza de date este făcut prin interfața JDBC, prin obiecte de tip
OracleDataSource care reprezintă generatoare de obiecte de tip Connection (conexiune,
tradus în românește). Un obiect care implementează interfața OracleDataSource va fi
înregistrat cu serviciul JNDI (Java Naming and Directory Interface). Un driver JDBC
care este accesat prin API-ul DataSource nu se înregistrează automat cu DriverManager.
Lucrarea totală poate fi împărțită în 3 părți:
1. Baza de date;
2. Aplicația de administrare (SIUD);
3. Aplicația Web demonstrativă.
~ 4 ~
SIUD
1.INTRODUCERE
1.1 Bazele de date și utilitatea lor
O bază de date este o colecție organizată de date. Termenul își are originile în industria calculatoarelor, însă înțelesul său a fost generalizat prin folosirea sa la modul general și prin faptul că organizația European Database Directive (care deține patentul termenului de database) conține baze de date în format non-electronic.
O alta posibilă definiție pentru o baza de date este „o colecție de înregistrări,
stocate în mod sistematic într-un computer ce pot fi accesate de către o aplicație folosind
cereri”. Pentru a optimiza accesul la înregistrări, acestea sunt organizate ca seturi de
elemente. Datele obținute prin cereri devin informații ce pot fi folosite pentru a lua
decizii. Aplicația folosită pentru managementul și interogarea bazei de date este
cunoscută sub numele de Sistem de gestiune a bazelor de date (SGBD). Conceptul
central al unei baze de date este colecția de înregistrări. De obicei o bază de date conține
și o descriere a tipurilor și a seturilor de elemente, numită schemă. Schema descrie
obiectele reprezentate în baza de date și relațiile dintre ele. Există mai multe moduri de a
organiza o schemă, deci, de a structura o bază de date. Acestea sunt cunoscute sub
numele de modele de date. Modelul cel mai răspândit astăzi este modelul relațional. În
acest model, informațiile sunt reprezentate sub forma mai multor tabele formate din linii
și coloane. Relaționarea în acest model se face pe baza unor valori comune mai multor
tabele. Alte modele includ modelul ierarhic și modelul rețea, și folosesc reprezentări mai
explicite alte relațiilor.
Vorbind mai strict, termenul de baza de date se referă la o colecție de înregistrări relaționate, iar aplicația suport se numește Sistem de gestiune a bazelor de date (SGBD). Totuși, în cazul în care nu se creează ambiguități, în programare se poate folosi termenul de baza de date pentru ambele definiții.
Termenul de baza de date s-a folosit pentru prima data în Iunie 1963, când
compania System Development Corporation a sponsorizat un simpozion sub titlul
Dezvoltarea și gestionarea unei baze de date centralizată pe calculator. Primul sistem de
gestionare a bazelor de date a fost dezvoltat in anii 1960, unul dintre pionierii din acest
~ 5 ~
SIUD
câmp de activitate fiind Charles Bachman. Documentele arata ca ținta lui Bachman era să facă utilizarea dispozitivelor cu acces direct la date mai eficientă. Până în acel moment, procesarea datelor se făcea pe cartele perforate și bandă magnetică. Două modele de date apăruseră în acel moment: CODASYL a dezvoltat modelul de rețea bazat pe ideea lui Bachman, iar modelul ierarhic a fost dezvoltat de către compania nordamericană Rockwell, adoptat mai târziu de către IBM.
Modelul relațional a fost propus de către E. F. Codd în 1970. El a criticat
modelele deja existente pentru că acestea confundau descrierea abstractă a structurii
informaționale cu descrieri ale mecanismelor de acces fizic. Însă pentru o mare perioadă
de timp, modelul relațional a rămas doar ca proiect, și numai de interes academic. Printre
primele implementări ale acestui model au fost Ingress dezvoltat la Berkeley și System R
de la IBM. Ambele implementări au fost anunțate în anul 1976. Primele produse
comerciale au fost Oracle și DB2. Primul produs cu adevărat de succes in domeniul
bazelor de date a fost dBASE pentru sisteme CP/M și sistemul de operare MS-DOS.
În anii 1980, activitatea de cercetare s-a accentuat asupra sistemelor de baze de date distribuite , însă aceste cercetări au avut puțin efect asupra pieței.
În anii 1990 atenția s-a schimbat asupra bazelor de date orientate pe obiecte.
Acestea au avut succes în câmpurile de activitate unde era necesară mânuirea unor date mai complexe decât ar fi putut duce sistemele relaționale, cum ar fi baze de date spațiale sau date multimedia.
În ultima decadă, s-a dezvoltat un nou tip inovator: Bazele de date XML. Ca și bazele de date orientate pe obiect, aria de activitate este deocamdată restrânsă. Bazele de date XML urmăresc să șteargă bariera dintre documente și date, permițând organizarea datelor într-o singura entitate, fie ele structurate sau nu.
Modelul relațional a fost introdus ca un curs academic în 1970 de către E. F. Codd. Acesta urmărea să facă sistemul de gestionare a bazelor de date independent de o aplicație specifică. Este un model matematic definit in termeni de Logica predicatelor și Teoria seriilor.
Structurile de date în modelul relațional sunt tabelele, și nu relații. Diferența
majoră între cele două este că tabelele pot conține înregistrări duplicate și ca rândurile sau
coloanele pot fi tratate ca fiind ordonate. Interfața primară a acestui model este limbajul
SQL.
O bază de date relațională conține mai multe tabele simple. Relațiile dintre tabele
nu sunt definite explicit. În schimb, sunt utilizate chei pentru a lega înregistrări între
~ 6 ~
SIUD
tabele diferite. O cheie este o colecție de una sau mai multe coloane într-un tabel, ale
cărei valori corespund coloanelor din alte tabele. O cheie care este folosită pentru a
identifica în mod unic o înregistrare se numește cheie unică. In general, una dintre cheile
unice este folosită pentru a identifica o înregistrare; aceasta se numește cheia primară a
tabelului.
Relații operaționale
Utilizatorii (sau aplicațiile) solicită date dintr-o baza de date relațională prin
trimiterea unei interogări (query) scrise într-un limbaj special, de obicei derivat din SQL. Deși SQL a fost inițial făcut pentru utilizatori, este mai ușor pentru aceștia să folosească un soft care să ofere o interfață utilizator mai prietenoasă. Ca răspuns la o interogare, SGBD întoarce un set de rezultate, care este in general o lista de înregistrări conținând informația căutată. De multe ori, datele din tabele multiple sunt combinate printr-un join. Conceptual, acest lucru se realizează prin combinarea rândurilor, și apoi filtrarea rezultatelor necorespunzătoare.
Flexibilitatea bazelor de date relaționale le permite programatorilor sa scrie interogări complexe care nu au fost anticipate de către designerii bazei de date. Prin urmare, bazele de date relaționale pot fi folosite de aplicații în moduri neprevăzute inițial de către designeri, ceea ce este foarte important pentru SGBD ce vor fi folosite perioade îndelungate de timp.[1]
~ 7 ~
SIUD
1.2 Ce face aplicația mea?
Aplicația SIUD (Sistem Integrat pentru Utilizare Didactică) poate fi folosită pentru administrarea personalului unei facultăți. În SIUD personalul este considerat a fi format din 3 tipuri de persoane: profesori, studenți și administratorii aplicației. Aceștia apar doar în tabelul persoana.
În funcție de fiecare tip de persoana, in SIUD am permis anumite operații. De exemplu unui student i se pot atribui discipline, activități, i se pot modifica datele personale și i se pot calcula mediile parțiale și finale. Unui profesor i se pot atașa discipline, activități, calcula numărul de ore de curs și laborator, etc.
Aplicația este împărțită în trei parți :
1. Baza de date.
2. Aplicația desktop (SUD).
3. Aplicația web demonstrativă.
Ca funcționalitate, SIUD permite manipularea datelor din baza de date, adăugări,
modificări, ștergeri, calcul medii. Partea de web este utila pentru vizualizarea unor
rapoarte și statistici, privind numărul de studenți, profesori, rezultatele studenților, etc.
Am încercat să reduc cât de cât intervenția utilizatorului în aplicație, prin utilizarea funcțiilor și procedurilor stocate SQL pentru realizarea prelucrărilor. Dar inevitabil, nu am putut sa elimin dependența de factorul uman. Corectitudinea multora dintre operațiile efectuate depinde in mare parte de cre tip de persoana, in SIUD am permis anumite operații. De exemplu unui student i se pot atribui discipline, activități, i se pot modifica datele personale și i se pot calcula mediile parțiale și finale. Unui profesor i se pot atașa discipline, activități, calcula numărul de ore de curs și laborator, etc.
Aplicația este împărțită în trei parți :
1. Baza de date.
2. Aplicația desktop (SUD).
3. Aplicația web demonstrativă.
Ca funcționalitate, SIUD permite manipularea datelor din baza de date, adăugări,
modificări, ștergeri, calcul medii. Partea de web este utila pentru vizualizarea unor
rapoarte și statistici, privind numărul de studenți, profesori, rezultatele studenților, etc.
Am încercat să reduc cât de cât intervenția utilizatorului în aplicație, prin utilizarea funcțiilor și procedurilor stocate SQL pentru realizarea prelucrărilor. Dar inevitabil, nu am putut sa elimin dependența de factorul uman. Corectitudinea multora dintre operațiile efectuate depinde in mare parte de corectitudinea datelor introduse de utilizator. Verificări minimale sunt bineînțeles implementate în partea JAVA sau in procedurile stocate folosite pentru inserări și adăugări sau ștergeri, legaturile dintre înregistrări sunt implementate in baza de date, dar totuși corectitudinea rezultatelor este dependenta de operatorul uman.
Posibilitățile acestei aplicații sunt limitate și nu poate fi aplicată pentru o instituție reală, dar îndeplinește câteva din cerințele unei astfel de aplicații, cum ar fi :
Interfața prietenoasă cu utilizatorul.
Posibilitatea urmăririi evenimentelor de la distanță.(prin intermediul unei
aplicații web special dezvoltate pentru acest lucru.)
~ 8 ~
SIUD
Stabilitate.(Validarea stării obiectelor, înainte și după efectuarea unei
operații, nepermițându-se operația respectiva daca se dovedește ca va
afecta negativ funcționarea aplicației.)
Securitate. (Anumite informații cum ar fi parole și informații personale, nu
vor putea fi accesate decât de utilizatorii cu aceste drepturi.)
Acces rapid la date(Prin intermediul procedurilor stocate).
~ 9 ~
SIUD
1.3 Aplicații similare
Cea mai cunoscută aplicație la nivelul țarii noastre similara celei dezvoltate de mine, este GESCO.
GESCO este un sistem integrat de gestiune a școlarității robust, scalabil și extensibil. Dezvoltat în perioada 2000-2002, GESCO este în prezent un sistem matur și stabil care asigură instituțiilor de învățământ superior din România suportul pentru modernizarea și eficientizarea unui număr semnificativ de activități din domeniul gestiunii școlarității.
În cadrul grantului CNFIS nr. 36, contract nr. 44096 / 16.11.1998, finanțat de
Banca Mondială și Guvernul României, compania noastră a câștigat licitația pentru
implementarea sistemului de "Înregistrare și monitorizare a performanțelor studenților în
sistemul de credite transferabile". Începând cu anul 2000 echipa noastră a acumulat o
experiență valoroasă în domeniul gestiunii școlarității în mediul universitar românesc.
Combinată cu experiența de peste trei ani pe platforme Microsoft, experiența din domeniul gestiunii școlarității ne-a permis să dezvoltăm un sistem flexibil și eficient, lucru demonstrat și de lista universităților care implementează sistemul GESCO. Deocamdată în România este folosit de :
Universitatea "Alexandru Ioan Cuza" din Iași Universitatea de Vest din Timișoara
Universitatea din București
Universitatea "Transilvania" din Brașov
(în curs de implementare)
Universitatea de Medicină și Farmacie "Gr. T. Popa" din Iași
(în curs de implementare)
Deși GESCO începe să se impună pe piața de aplicații pentru „school
management”, el este încă în stadiul de proiect, având și el lipsurile lui. Compania
producătoare promite că până la sfârșitul anului 2006 aplicația lor va fi complet
funcțională.
Spre diferență de aplicația mea, GESCO este o aplicație de tip „school web
management”.[2]
~ 10 ~
SIUD
2.STRUCTURĂ
2.1 Tehnologii de dezvoltare
2.1.1 Oracle / SQL
SQL (Structural Query Language) este considerat a fi cel mai performant și popular limbaj pentru manipularea bazelor de date. Deși SQL este definit de ambele standarde, ANSI și ISO, există multe extensii și variații ale versiunii de limbaj definită de fiecare dintre aceste standarde. Multe dintre aceste extensii sunt de natura proprietară, cum sunt de exemplu PL/SQL sau Sybase de la Oracle Corporation ori SQL PL de la IBM sau Transact-SQL de la Microsoft. În general diferențele între variantele de SQL apar la tipurile de date suportate (de exemplu DATE și TIME). Din acest motiv în contrast cu ANSI C sau ANSI Fortran, care pot fi portate ușor pe alte platforme, codul SQL rareori poate fi portat de la un sistem de baze de date la altul fără a suferi schimbări majore. Câteva dinte motive sunt enumerate mai jos:
Complexitatea și dimensiunea standardului SQL fac implementarea
standard a limbajului inoportună pe multe sisteme de baze de date;
Standardul nu specifica explicit comportamentul unei baze de date în
multe cazuri (de exemplu indexuri), lăsând mână libera implementării
proprii de la un sistem la altul;
Standardul SQL specifica exact sintaxa pe care o baza de date trebuie să o
implementeze, însă semantica folosită de sisteme nu este foarte bine
definită, lăsând loc ambiguităților;
SQL a fost proiectat pentru un scop specific: să interogheze o bază de date relațională pentru a obține informații. Prin urmare, el este un limbaj declarativ, bazat pe seturi de date, spre deosebire de C de exemplu, care este un limbaj de programare imperativ și deci, are scopul de a rezolva o gamă mult mai largă de probleme.
Unele extensii cum ar fi PL/SQL sunt proiectate să depășească această limitare,
prin conversia lui SQL într-un limbaj de programare matur, menținând în același timp
~ 11 ~
SIUD
avantajele limbajului SQL. Altă modalitate de a trece peste această problemă este folosirea de cod străin direct în baza de date. De exemplu, Oracle a inclus suport Java în baza de date, în timp de PostgreSQL permite ca funcțiile să fie scrise într-o gamă largă de limbaje, cum ar fi Perl, TCL sau C.
SQL este in contrast puternic cu limbajele de programare ale bazelor de date de a patra generație, cum sunt Focus și SAS (Statistical Analysis System), ultimul fiind programabil și pe microcontrollere, prin faptul ca este extrem de simplu ca funcționalitate și sintaxă. Acest lucru reduce mult gradul de dificultate implicat în menținerea codului sursa SQL , dar de asemenea ridică întrebări de genul „Cine deține supremația totală?”, făcându-se referire la extensiile procedurale discutate mai sus.
Am ales Oracle ca suport pentru baza de date a aplicației a SIUD pentru că este singurul sistem de gestiune a bazelor considerat pur rațional și cel mai performant. Are un mediu propriu de dezvoltare SQL PLUS, are un limbaj de programare bazat pe PL/SQL. De asemenea portabilitatea și ușurința lucrului cu funcții și proceduri stocate este unul dintre avantajele pe care le-am urmărit.
Larry Ellison a fondat în 1977 „Software Development Laboratories”. În 1979, SDL și-a schimbat numele în „Relational Software, Inc.” (RSI) și a scos pe piață produsul Oracle V2 ca un sistem de baze de date relaționale comercial foarte fraged. Această versiune nu suporta tranzacții însă implementa funcționalitate de baza SQL pentru interogări și join-uri. (RSI nu a scos pe piață versiunea 1 a aplicației)
În 1983, RSI și-a schimbat iar numele, devenind „Oracle Corporation” pentru a se
apropia de produsul ei. Compania a scos pe piață varianta 3, care era rescrisă folosind
limbajul C, și care suporta instrucțiunile COMMIT și ROLLBACK pentru tranzacții.
Versiunea 3 de asemenea suporta și platformele UNIX. În 1984, varianta 4 a fost făcută
publică, iar in 1985, SGBD-ul Oracle a fost modificat pentru a suporta modelul client-
server, astfel creându-se varianta 5 a aplicației. Aceasta suporta de asemenea și interogări
distribuite. 3 ani mai târziu apărea varianta 6 cu suport PL/SQL și locking. In perioada
anilor ’90 apar versiunile 7h (1992), 8 (1997) și 8i (1999). Versiunea 8i era prima
destinată lucrului prin Internet (de unde și sufixul i), și de asemenea avea incorporat in
sistem o mașina virtuala JAVA (JVM). În anul 2001, Oracle lansează produsul Oracle 9i,
care vine cu peste 400 de noi caracteristici față de predecesorul sau, inclusiv capabilitatea
să lucreze cu fișiere XML. De asemenea, se implementează în motorul sistemului
opțiunea Real Application Clusters, care permitea construirea bazelor de date pe clustere.
~ 12 ~
SIUD
Cea mai recentă versiune a SGBD-ului este Oracle 10g, lansat in 2003. Sufixul g vine de la cuvântul grid, sugerând faptul ca acest SGBD este gata pentru procesare paralelă (computer-grid ready).
Oracle este un SGBD ce vine în mai multe versiuni, după necesitatea fiecărui utilizator și care rulează pe o gamă largă de arhitecturi și sisteme de operare. Ca ediții, putem aminti:
Standard Edition – vine cu funcționalitatea de bază;
Enterprise Edition – include numeroase îmbunătățiri peste versiunea
standard, mai ales în materie de performanță și securitate;
Express Edition – este o variantă gratuită pentru sistemele Windows/Linux
Vine cu limitarea la un singur procesor, 1 GB RAM și doar 4 GB de spațiu
utilizator;
Lite Edition – destinat dispozitivelor mobile.
În materie de sisteme de operare ce pot rula software Oracle amestecam:
Linux (x86/AMD64/Itanium/ZSeries);
Microsoft Windows (32bit/64bit); Solaris (x86/SPARC);
AIX5L;
HP-UX (RISC/Itanium);
MacOS X Server.[3]
2.1.2 Java
1. Ce este JAVA ?
Java este un limbaj de programare dezvoltat de JavaSoft, companie în cadrul firmei Sun Microsystems. Este complet orientat pe obiecte și oferă posibilitatea reală de refolosire a codului (care este de fapt promisiunea făcută la apariția programării orientate pe obiecte), este neutru din punct de vedere arhitectural, deci cu alte cuvinte Java este un limbaj independent de platforma de lucru, aceeași aplicație rulând, fără nici o modificare, pe sisteme diferite cum ar fi Windows, UNIX sau Macintosh, lucru care aduce economii substanțiale firmelor care dezvoltă aplicații pentru Internet.
~ 13 ~
SIUD
Limbajul Java este modelat după C și C++, trecerea de la C, C++ la Java
făcându-se foarte ușor. El elimină sursele frecvente de erori ce apar în programare prin
eliminarea pointerilor, administrarea automată a memoriei și eliminarea fisurilor de
memorie printr-o procedură de colectare a “gunoiului” care rulează în fundal. Este cel
mai sigur limbaj de programare disponibil în acest moment, asigurând mecanisme stricte
de securitate a programelor concretizate prin: verificarea dinamică a codului pentru
detectarea secvențelor periculoase, impunerea unor reguli stricte pentru rularea
programelor lansate pe calculatoare aflate la distanță (acestea nu au acces la rețeaua
locală, la fișierele stocate în sistemul local și nu pot lansa în execuție programe locale),
etc. Permite crearea unor documente Web îmbunătățite cu animație și multimedia, și a
fost proiectat pentru a fi folosit în medii distribuite și sisteme deschise.
2. Evoluția limbajului JAVA
In 1991, firma SUN, mergând pe direcția dezvoltării sistemelor deschise de lucru în rețea, a creat un proiect de lucru numit Green, care avea drept scop punerea la punct a unor procesoare care să poată rula pe diferite tipuri de aparate și punerea la punct a unui sistem care să poată rula pe platforme diferite. Planul inițial prevedea dezvoltarea proiectului în C++, dar au apărut foarte multe probleme în încercarea de dezvoltare a compilatorului de C++. Ca urmare, James Gosling, membru al grupului Green, a început să lucreze la dezvoltarea unui nou limbaj, numit Oak, care, mai târziu, avea să se numească Java. De asemenea grupul Green avea să-și schimbe numele întâi în FirstPerson, apoi în JavaSoft.
Abia după ce a fost înființată compania Netscape Communications
Corporation, cei de la JavaSoft s-au orientat către Internet și Web, mediul
multiplatformă distribuit al rețelei Internet fiind perfect pentru testarea proiectului.
In prezent licența pentru tehnologia Java a fost acordată unor firme precum IBM, Microsoft, Sillicon Graphics, Adobe și Netscape.
3. Java : un limbaj compilat și interpretat
In funcție de modul de execuție al programelor, limbajele de programare se împart în două categorii :
~ 14 ~
SIUD
• interpretate : instrucțiunile sunt citite linie cu linie de un program numit
interpretator și traduse în instrucțiuni mașină; avantaj : simplitate;
dezavantaje : viteză de execuție redusă
• compilate : codul sursă al programelor este transformat de compilator într-un
cod ce poate fi executat direct de procesor; avantaj : execuție rapidă;
dezavantaj : lipsa portabilității, codul compilat într-un format de nivel scăzut
nu poate fi rulat decât pe platforma pe care a fost compilat.
Programele Java pot fi atât interpretate cât și compilate. Cod sursă Java →(compilare)→ Cod de octeți
Codul de octeți este diferit de codul mașină. Codul mașină este reprezentat de o succesiune de 0 și 1; codurile de octeți sunt seturi de instrucțiuni care seamănă cu codul scris în limbaj de asamblare.
Codul mașină este executat direct de către procesor și poate fi folosit numai pe platforma pe care a fost creat; codul de octeți este interpretat de mediul Java și de aceea poate fi rulat pe orice platformă care folosește mediul de execuție Java → neutralitatea limbajului Java din punct de vedere arhitectural.
4. Java și conceptele programării orientate pe obiecte
Limbajul Java este următorul pas logic în domeniul limbajelor de programare și
se bazează pe cel mai popular limbaj de programare al momentului C++. In Java se pot
obține programe cu aspectul și comportarea programelor C++, dar beneficiind de
avantajele oferite de un limbaj proiectat special pentru POO. Java renunță complet la
programarea procedurală specifică C-ului și vă obligă să folosiți conceptele solide ale
POO.
Conceptele programării orientate pe obiecte cuprind :
• Obiectele
unitatea elementara a POO
starea obiectului este dată de variabile de instanță comportamentul obiectului este dat metode
ușor de refolosit, actualizat, întreținut
~ 15 ~
SIUD
• Încapsularea și transmiterea de mesaje
• Clasele
încapsulează obiecte
singură clasă poate fi folosită pentru instanțierea mai multor obiecte
• Bibliotecile (numite pachete, în Java)
• Moștenirea
permite extinderea funcționalității unor clase existente refolosirea codului
• Modificatorii de acces controlează accesul la metodele și variabilele obiectelor.
Acestea pot fi :
Private (accesibile doar obiectelor din aceeași clasă)
Protejate (accesibile obiectelor din aceeași clasă și din subclasele clasei
respective)
Prietene (accesibile tuturor claselor din pachetul curent)
Publice (accesibile tuturor claselor din orice pachet)
5. Conectarea la o bază de date
Java reprezintă in momentul de față nu numai un simplu limbaj de programare ci însumează o serie de tehnologii ce pot fi folosite pentru a crea aplicații complexe structurate pe mai multe nivele și care sa implice resurse variate. Una dintre aceste tehnologii oferite de JavaSoft (creatorul limbajului Java) este JDBC și oferă suportul pentru conectarea unei aplicații Java la o baza de date.
JDBC este o interfața de programare a aplicațiilor pentru execuția de interogări SQL și este compus dintr-o serie de clase și interfețe scrise 100% in Java. JDBC oferă un standard pentru dezvoltarea de aplicații ce folosesc baze de date. Folosind JDBC se pot trimite foarte ușor interogări SQL către un sistem de gestiune al bazelor de date virtual in sensul ca nu este necesara scrierea unui program Java care sa acceseze o baza de date MySQL și a unui alt program pentru a accesa o baza de date Oracle. Se poate scrie un singur program Java folosind JDBC care se poată trimite interogări SQL către un anumit sistem de gestiune al bazei de date (SGBD).
Ideea de baza este scrierea unui singur modul program care sa fie independent de
baza de date care se dorește a fi folosita și care sa permită accesarea oricărei baze de date.
~ 16 ~
SIUD
Microsoft a realizat acest lucru prin ODBC (Open Database Connectivity) ce oferă suportul pentru conectarea la orice baza de date ce rulează pe platforme Windows și nu numai. Java oferă suport pentru conectarea la o baza de date folosind ODBC insa aceasta nu este calea cea mai rapida și mai eficienta din mai multe motive:
ODBC este o interfața scrisa in C și apelurile Java către cod nativ scris in C nu
oferă securitate, robustețe și portabilitate
ODBC este greu de învățat având opțiuni complexe chiar și pentru execuția de
interogări simple. JDBC a fost creat pentru a păstra lucrurile simple oferind
capabilități complexe
Folosirea ODBC necesita ca driverele sa fie instalate manual pe fiecare
mașina client. Un driver JDBC scris 100% in Java este automat instalabil și portabil și sigur pe orice platforma.
JavaSoft oferă in cadrul JDK următoarele componente JDBC:
JDBC Driver Manager care este coloana vertebrala a arhitecturii JDBC. Este
foarte mic și simplu iar principala lui funcționalitate este conectarea aplicației
Java la driverul JDBC corect
JDBC driver test care testează driverul JDBC – doar cele care trec acest test
pot fi denumite drivere care respecta standardul JDBC
JDBC-ODBC Bridge – oferă accesul la bazele de date prin ODBC și a fost
implementat pentru a accesa un SGBD care nu are scris un driver specific in
Java.
Deci pentru a accesa o baza de date se poate folosi JDBC-ODBC Bridge sau de
recomandat, driverul specific scris in Java pentru acel sistem de gestiune de baze de date
care este disponibil ori pe site-ul oficial Java ori de pe site-ul oficial al acelui SGBD.
Un driver JDBC specific pentru o anumita baza de date este de fapt o serie de clase ce
implementează interfețele din pachetul java.sql lucru ce duce la standardizarea driverelor
JDBC.
După instalarea JDK și urmează instalarea driverului JDBC care in cele mai multe cazuri consta intr-o arhiva "jar" care trebuie doar copiata și setata variabila CLASSPATH prin adăugarea caii către acea arhiva "jar".[4],[5]
~ 17 ~
SIUD
2.1.3 .NET Framework 2.0
Microsoft .NET Framework este o componentă a sistemului de operare Microsoft
Windows. Aceasta oferă o gamă largă de soluții prelucrate pentru necesitățile obișnuite
ale aplicațiilor și administrează execuția programelor scrise special pentru această
platformă. Platforma .NET acoperă o mare parte a necesităților programatorilor în
materie de: interfață utilizator, acces la date, criptografie, algoritmi numerici și comunicare în rețea. Funcțiile din stoc sunt combinate de către programatori cu funcțiile lor proprii pentru a dezvolta aplicațiile dorite.
Programele scrise pentru platforma .NET se execută într-un mediu aparte numit
Common Language Runtime (CLR). CLR oferă o „mașină virtuală”, astfel încât
programatorii nu trebuie să ia în considerare procesorul sau sistemul pe care aplicația va rula, cât timp platforma .NET este prezentă pe acel sistem. De asemenea, CLR oferă multe alte servicii importante cum ar fi garanții de securitate, managementul memoriei și tratarea excepțiilor.
Motivul principal a apariției platformei .NET este faptul ca Microsoft și sistemul lor de operare erau puse în dificultate de către dezvoltarea vizibil plina de succes a platformei JAVA. Astfel, Microsoft a dezvoltat propria platformă care să rivalizeze caracteristicile cheie ale platformei JAVA, cum ar fi:
Management al memoriei optim, controlat de un colector de gunoi; Tratarea erorilor și a excepțiilor în mod eficient;
Pe lângă aceste caracteristici, platforma .NET mai aduce in plus:
Interoperabilitate: Datorită existenței unei multitudini de librării COM,
platforma .NET permite metodelor să interacționeze cu codul deja existent
pe piață;
Motor de execuție comun: Codul compilat în .NET rezulta într-un limbaj
intermediar, cunoscut sub numele de Common Intermediate Language
(CIL). Varianta Microsoft se numește Microsoft Intermediate Language
(MSIL). În implementarea Microsoft, acest cod nu este interpretat, ci mai
degrabă compilat într-o manieră „din zbor” în cod nativ. Acest lucru este
realizat de către CLR;
~ 18 ~
SIUD
Independență de limbaj: Platforma .NET aduce ca noutate și un sistem de
tipuri comune (Common Type System). CTS definește toate tipurile de date
posibile și din acest motiv platforma suportă dezvoltarea aplicațiilor în mai
multe limbaje de programare;
Redistribuire simplificată: Instalarea și redistribuirea aplicațiilor în .NET a
fost simplificată prin eliminarea setărilor din registre, redistribuirea
librăriilor și a așa-numitului „DLL Hell”.
Securitate : .NET permite rularea codului cu nivele diferite de securitate
fără a folosi un sandbox.
.NET vs Java
CLI, CIL și C# au foarte mari similarități cu JVM și Java. Ambele folosesc
propriile coduri intermediare. Codul intermediar din .NET (MSIL) este dezvoltat pentru Just-In-Time Compiling pe când codul Java este dezvoltat pentru a fi interpretat. .NET este deocamdată deplin funcțional doar pe sistemul Windows, în timp ce Java este
complet disponibil pe o multitudine de platforme. Deși Microsoft a făcut publice o parte din sursele C++ ale CLR-ului, acesta încă nu a fost portat ca o componentă stabilă. Însă există în dezvoltare multe proiecte pentru diferite platforme (Portable .NET, Mono) cum ar fi Linux, FreeBSD, MacOS X.
ASP.NET
ASP.NET este un set de tehnologii web de dezvoltare, scos pe piață de către
Microsoft. Programatorii pot folosi ASP.NET pentru a construi site-uri sau aplicații Web dinamice, sau chiar servicii web XML. Acesta face parte din platforma .NET și este succesorul tehnologiei Active Server Pages (ASP).
Deși numele este derivat din vechiul ASP, acesta diferă mult față de predecesorul
său. Microsoft a reconstruit complet ASP.NET pentru a se baza pe CLR, care este
împărtășit de toate aplicațiile .NET. Programatorii pot scrie aplicații ASP.NET folosind
oricare dintre limbajele de programare puse la dispoziție de către platforma .NET
(VB.NET, C#, JScript.NET) sau chiar limbaje open-source (Perl, Python). ASP.NET are
beneficii importante față de alte tehnologii bazate pe scripturi la categoria performanță
~ 19 ~
SIUD
deoarece codul de pe server este compilat în unul sau mai multe fișiere .DLL pe
respectivul server Web. De asemenea, ASP.NET încearcă să simplifice tranziția
programatorilor de la aplicații Windows la aplicații Web prin abilitatea de a oferi
controale similare cu cele din interfața utilizator Windows. Un control Web (cum ar fi o etichetă sau un buton) funcționează în mare parte în același mod ca și un control dintr-o fereastră Windows; codul poate să altereze proprietățile acelui control, și de asemenea acel control poate ridica anumite evenimente (events). ASP.NET încurajează
programatorul să dezvolte aplicații bazate pe event-uri, spre deosebire de mediile
convenționale de programare prin scripturi (ASP și PHP). [6]
~ 20 ~
SIUD
2.1 Medii de dezvoltare
2.2.1 IntelliJ® IDEA 5.0
IntelliJ® IDEA este considerat de către programatorii de pe toate continentele ca
fiind vârful ierarhiei de medii de dezvoltare de aplicații in Java. Versiunea 5.0 continuă
tradiția de a aduce cea mai productivă unealtă disponibilă dezvoltatorilor de cod Java.
Este foarte ușor de folosit, bine aerisit și foarte prietenos din punctul de vedere al
opțiunilor. Calitățile sale deosebite l-au făcut lider în domenii cheie gen asistență
inteligentă și automatizare a dezvoltării aplicațiilor, suport pentru dezvoltarea aplicațiilor
web și a proiectelor mari, analiză de cod static și neparalel, control de versiune și
integrare Ant / JUnit.
Acest mediu de dezvoltare este livrat cu suport complet pentru J2ME, un designer foarte automatizat și suport pentru plug-in-uri dezvoltate de către utilizatori. Peste 200 de plug-in-uri sunt disponibile.
Motorul inteligent al mediului de dezvoltare ajută programatorii în așa fel încât
aceștia să se concentreze asupra dezvoltării aplicației în mod rapid, și nu asupra tratării
erorilor prin oferirea de soluții rapide și automate la erorile banale sau foarte comune. De
asemenea, tratează foarte eficient ambiguitățile prin permiterea explorării claselor si a
definițiilor prin meniuri, evidențierea tipurilor de text și gruparea optimă a codului.
O alt punct forte al lui IntelliJ® IDEA este reprezentat de interoperabilitate cu alte medii de dezvoltare Java. IntelliJ® IDEA are capabilitatea de a importa proiecte dezvoltate în medii cum ar fi JBuilder sau Eclipse fără efort. Astfel, se ușurează mult munca în echipă și interacțiunea dintre coechipieri.
Problemele care apar in general la mediile de dezvoltare sunt consumul mare de resurse și viteza de mișcare a aplicației, mai ales în timpul operațiilor de Debug. IntelliJ® IDEA este unul dintre câștigători la această categorie, având un consum relativ mic de resurse pentru capacitatea sa de funcționare, spre deosebire de alte medii de dezvoltare care necesită cantități imense de resurse hardware, cum ar fi Eclipse. [7]
~ 21 ~
SIUD
2.2.2 Microsoft Visual Studio 2005
Microsoft Visual Studio 2005 este totuși un instrument profesional de dezvoltare, puternic și de bază. Este nepretențios, facil, intuitiv și ușor de învățat.
Cu Visual Studio 2005, dezvoltatorii pot :
Construi aplicații de afaceri utilizând Visual Basic, C#, C++ și J#;
Dezvolta aplicații Windows, Web și mobile din același mediu de
dezvoltare;
Crea aplicații client-server utilizând servicii Web și instrumente integrate
de design pentru accesarea datelor de la distanță;
Învăța să programeze utilizând un mediu de dezvoltare cursiv,
nepretențios, care include și un tutorial;
Evalua .NET Framework pentru dezvoltare Windows sau Web;
Crea aplicații interesante și amuzante pentru angajați sau pentru prieteni;
Spre deosebire de Visual Studio .NET 2003, Microsoft Visual Studio Professional
2005 combina toate limbajele de programare de la Microsoft intr-un singur mediu de dezvoltare. Rezultatul este un instrument de dezvoltare ușor de utilizat, păstrând din simplitatea edițiilor Express, dar de un real ajutor pentru dezvoltarea de aplicații comerciale cu complexități medii.
Microsoft Visual Studio Professional 2005 oferă dezvoltatorilor Web care creează
aplicații de afaceri un mediu dotat cu toate caracteristicile necesare construirii de aplicații
dinamice avansate, data-driven, păstrând totodată o funcționalitate simplă. Visual Studio
Standard Edition include caracteristici avansate de dezvoltare Web, cum ar fi pre-
compilarea site-urilor Web, instrumente full debugging, pentru data-access, Section 507,
WCAG accessibility checking și suport simplificat pentru localizarea site-ului. Edițiile
Professional ale Visual Studio 2005 reprezintă cea mai buna alegere in cazul dezvoltării
de aplicații mission-critical, multi-tier, smart client, Web, mobile sau bazate pe Microsoft
Office. Principalii beneficiari ai edițiilor Professional sunt consultanții IT si echipele mici
sau medii de dezvoltatori.
Funcționalități incluse: proiecte Windows Forms, proiecte Web, proiecte de mobilitate, suport pentru 64 de biți, Enterprise templates, class designer, server explorer, SQL Server Developer Edition. [8]
~ 22 ~
SIUD
2.2.3 Embarcadero ERStudio 6.0
O mare problemă a programatorilor și a designerilor de baze de date a fost că de
obicei aplicațiile client pentru SGBD-uri nu vin cu o interfață intuitivă și ușor
manevrabilă, sau uneori lipsesc cu desăvârșire. ERStudio este o aplicație recomandată de
către marile companii și de către designerii avansați în domeniul bazelor de date ca fiind
cea mai bună și cea mai performantă soluție pentru gestionarea bazelor de date. Prin
folosirea ERStudio, designerul este echipat cu un soft avansat pentru analiza,
documentarea și implementarea de baze de date la scară foarte mare. Produsul clarifică
problemele ce se ridică la designuri complexe ale unor baze de date prin schițe vizuale
foarte clare, documentări ale bazei de date, și prin suportul unei game largi de SGBD-uri.
ERStudio este o soluție bazată pe modele pentru designul bazelor de date și a arhitecturilor de date. Acest format vizual amplifică comunicarea între diferite funcții, de la analiști pana la dezvoltatori de aplicații.
Cu o bază clară a cunoștințelor de unde vin datele și unde vor fi folosite, designerii pot fi asigurați că în orice moment știu ce înseamnă de fapt datele lor și cum pot fi folosite cel mai eficient. De asemenea, ERStudio are capabilitatea de reverse engineering pentru a genera documentație și scheme din baze de date deja existente, cât si forward engineering pentru a genera cod sursă pentru crearea bazelor de date. Bazele de date pot fi modificate direct, aplicația generând automat cod inteligent pentru alterarea bazei de date și a componentelor ei. Alt punct forte este transformarea automatizată dintr-un model logic într-unul fizic și verificarea automată a normalizării pentru a fi în concordanță cu platforma și cerințele bazei de date țintă.
ERStudio este integrabil cu alte aplicații cum ar fi Microsoft Word, Excel, Access
pentru a putea oferi flexibilitate maximă în construirea documentației sau în culegerea
datelor sau chiar exportul lor. Generarea rapoartelor se poate face fie în alte aplicații, fie
direct în ERStudio, în format HTML, RTF, XML Schema sau DTD. Rapoartele pot fi sub
diferite forme: Tabele, diagrame, prezentări sau combinații specificate de utilizator.
Pe lângă designul bazelor de date, ERStudio poate de asemenea să administreze o bază de date. Administrarea cheilor pentru relaționarea tabelelor sau a validărilor constrângerilor se pot face cu ușurință în ERStudio.
Nici securitatea nu a fost uitată în ERStudio, acesta putând lucra la nivel de utilizatori, roluri și permisii.
~ 23 ~
SIUD
Despre suportul pentru SGBD-uri, ERStudio se poate lăuda cu o gamă foarte largă de formate suportate.
• Hitachi® HiRDB
• IBM® DB2® Universal Database® 5.x, 6.x, 7.x & 8.x for LUW, 5.x, 6.x, 7.x
for z/OS® & iSeries V4R5 and V5R2
• Informix® OnLine and SE
• Informix 9.x dynamic server
• InterBase™ 4
• Microsoft® Access 2.0, 95, 97 & 2000
• Microsoft SQL Server 6.5, 7, 2000 & 2005 • Microsoft Visual FoxPro® 3, 4, 5
• MySQL® 3.x, 4.x
• NCR Teradata V2R4, V2R5, V2R6 • Oracle® 7.3.x , 8.x, 9i, 10g
• Sybase® Adaptive Server Enterprise (ASE) 11.9.2, 12.x & 12.5 • Sybase Adaptive Server Anywhere (ASA) 5, 6, 7, 8, 9
• Sybase Watcom™ SQL
Singurul plan pe care ERStudio pierde teren este consumul de resurse. Acesta nu e deloc modest la acest capitol, însă așteptările sunt pe măsura consumului. [9]
~ 24 ~
SIUD
2.3 Schema generală a aplicației
SIUD
Maparea bazei de date
Clase echivalente:
Judet,…,ArhivaStudDisc
(ORACLE SQL)
(JAVA)
Administration
Modify Classes:
clase ce imple-
menteaza instru-
cțiuni de actualizare
Tabelele componente: Judet, Localitate, Orar, Aplicația web
Persoana, ProfDisc, Profesor, StudDisciplina, demonstrativă :
Student, TipActivitate, TipDisciplina, TipInvatamant, afișare rapoarte
ArhivaProfDisc, ArhivaStudDisc (ASP.NET)
Baza de date
Datele sunt manipulate doar prin intermediul aplicației Java SIUD, ea având rol de interfața intre utilizator și baza de date dar și se interfața intre aceasta și aplicația web demonstrativă.
~ 25 ~
SIUD
2.4 Baza de date
2.4.1 Descriere generală a bazei de date
Baza de date este implementată în Oracle 10g și este structurată pe mai multe
tabele relaționate. Modelul logic a fost dezvoltat în Embarcadero 6.1, cu structura afișată
în Anexa 1. Lista tabelelor ce intră în componența bazei de date este prezentată în Tabelul
2.1.
Nume Tabel Tip Tabel Cheie Primara Nr. Coloane
Disciplina Independent DisciplinaID, 8
Judet Independent JudetID, 5
Localitate Independent LocalitateID, 4
Orar Independent OrarID, 6
Persoana Independent PersoanaID, 16
ProfDisc Independent ProfDiscID, 6
Profesor Independent ProfesorID, 4
StudDisciplina Independent StudDisciplinaID, 6
[anonimizat]ID, 11
TipActivitate Independent TipActivitateID, 2
TipDisciplina Independent TipDisciplinaID, 2
TipInvatamant Independent TipInvatamantID, 2
Tabel 2.1 – Lista Tabelelor Componente
Tabelul central al aplicației poate fi considerat cel ce conține informațiile
personale ale fiecărei persoane ce este sub administrarea aplicației („Persoana”).
Structura acestui tabel și proprietățile lui sunt prezentate in Tabelul 2.2
~ 26 ~
SIUD
Nume Coloană Tip Dată Coloană Se permite Null
PersoanaID NUMERIC(5, 0) Nu
nume VARCHAR(20) Nu
prenume VARCHAR(30) Nu
poza VARCHAR(255) Da
SnBuletin VARCHAR(8) Nu
cnp VARCHAR(13) Nu
cont VARCHAR(20) Nu
parola VARCHAR(60) Nu
strada VARCHAR(40) Nu
număr NUMERIC(0, 0) Da
bloc VARCHAR(5) Da
apartament VARCHAR(4) Nu
telefon VARCHAR(10) Da
codPostal VARCHAR(6) Da
LocalitateID NUMERIC(6, 0) Nu
tipPersoana VARCHAR(30) Nu
Tabel 2.2 – Descrierea tabelei ”Persoana”
Tabela „Persoană” relaționează cu tabelele „Student” și „Profesor”, și de asemenea cu succesiunea de tabele „Localitate” și „Judet”, care constituie două nomenclatoare de uz general. Legătura între aceste tabele și „Persoana” se face cu ajutorul cheii primare „PersoanaID”.
Structurile celor doua tabele, în care se împart înregistrările din tabela „Persoana” sunt prezentate în Tabelele 2.3 și respectiv 2.4.
~ 27 ~
SIUD
Nume Coloană Tip Dată Coloană Se permite Null
StudentID NUMERIC(4, 0) Nu
matricol VARCHAR(18) Nu
specializare VARCHAR(50) Nu
nrGrupa NUMERIC(5, 0) Nu
medieSem1 NUMERIC(4, 2) Nu
crediteSem1 NUMERIC(2, 0) Nu
medie NUMERIC(4, 2) Nu
credite NUMERIC(2, 0) Nu
anStudii NUMERIC(3, 0) Nu
TipInvatamantID NUMERIC(2, 0) Nu
PersoanaID NUMERIC(5, 0) Nu
Tabelul 2.3 – Structura tabelei „Student”
Nume Coloană Tip Dată Coloană Se permite Null
ProfesorID NUMERIC(4, 0) Nu
titlu VARCHAR(40) Nu
site VARCHAR(70) Da
PersoanaID NUMERIC(5, 0) Nu
Tabelul 2.4 – Structura tabelei „Profesor”
Cele 2 tabele, „Student” și respectiv „Profesor” sunt legate de tabelul „Disciplina”
prin tabelele „StudDisciplina” și respectiv „ProfDisc”. „StudDisciplina” conține toate
disciplinele corespunzătoare studenților din tabela „Student” și rezultatul obținut de
fiecare dintre aceștia la examenele programate. În mod similar se comportă și tabelele
„ProfDisc” și „Profesor”; astfel, „ProfDisc” conține toate activitățile profesorilor înscriși
în tabela „Profesor” (cursuri, laboratoare, seminarii). Structurile celor 2 tabele sunt
prezentate mai jos, în Tabelele 2.5 și 2.6.
~ 28 ~
SIUD
Nume Coloană Tip Dată Coloană Se permite Null
ProfDiscID NUMERIC(4, 0) Nu
DisciplinaID VARCHAR(6) Nu
ProfesorID NUMERIC(4, 0) Nu
anUniv VARCHAR(10) Nu
TipActivitateID NUMERICN(2, 0) Nu
durata NUMERIC(2, 0) Nu
Tabelul 2.5 – Structura tabelei „ProfDisc”
Tabelul „ProfDisc” conține toate activitățile tuturor profesorilor și durata lor fără a fi legate de timpul și locul unde au loc, acest lucru este făcut in tabela „Orar”, a cărei structură se poate observa în Tabelul 2.7
Nume Coloană Tip Dată Coloană Se permite Null
StudDisciplinaID NUMERIC(4, 0) Nu
StudentID NUMERIC(4, 0) Nu
DisciplinaID VARCHAR(6) Nu
nota NUMERIC(2, 0) Nu
dataEvaluare DATETIME Nu
sala VARCHAR(6) Nu
Tabelul 2.6 – Structura tabelei „StudDisciplina”
În tabela „StudDisciplina” se stochează disciplinele contractuale ale studenților ,
rezultatele obținute de aceștia și data pe care au fost obținute.
Nume Coloană Tip Dată Coloană Se permite Null
OrarID NUMERIC(4, 0) Nu
nrGrupa NUMERIC(5, 0) Nu
sala VARCHAR(7) Nu
ziua VARCHAR(10) Nu
ora NUMERIC(2, 0) Nu
ProfDiscID NUMERIC(4, 0) Nu
Tabelul 2.7 – Structura tabelei „Orar”
~ 29 ~
SIUD
Se observă ca în tabelul „Orar” apare câmpul „nrGrupa”. Acest câmp mai este întâlnit și în tabelul „Student” desemnând grupa fiecărui student. S-a preferat această redundanță pentru că o tabela de legătură între tabelele „Student” și „Orar” care să conțină doar atributele cheie „StudentID” și „OrarID” ar fi dus la o structură circulară a aplicației și la schimbarea tipului de formă normală a bazei de date, din FN3 în FN4, ceea ce ar fi îngreunat operațiile de actualizare datorită fragmentării informației. În practică se folosește cel mult FN3 și la ea m-am oprit și eu.
Tabelul „Disciplina” conține înregistrările de tip disciplină împreună cu id-ul profesorului de care sunt predate, se refera numai la obiecte in sine și la titularii de curs. Structura lui este prezentată mai jos in Tabelul 2.8.
Nume Coloană Tip Dată Coloană Se permite Null
DisciplinaID VARCHAR(6) Nu
denumire VARCHAR(100) Nu
semestru NUMERIC(2, 0) Nu
credite NUMERIC(2, 0) Nu
evaluare VARCHAR(10) Nu
anStudii NUMERIC(2, 0) Nu
TipDisciplinaID NUMERIC(2, 0) Nu
specializare VARCHAR(50) Da
Tabelul 2.8 – Structura tabelei „Disciplina”
Nomenclatoare
Nomenclatoarele bazei de date sunt în număr de 4. Două dintre ele sunt legate, ele conținând informații în legătură cu județul și localitatea de proveniență a persoanei. Structura lor este prezentata in Tabelele 2.9 și 2.10.
Nume Coloană Tip Dată Coloană Se permite Null
JudetID NUMERIC(4, 0) Nu
nume VARCHAR(50) Nu
inițiale VARCHAR(3) Nu
prefix VARCHAR(20) Nu
tara VARCHAR(60) Da
Tabelul 2.9 – Structura tabelei „Judet”
~ 30 ~
SIUD
Nume Coloană Tip Dată Coloană Se permite Null
LocalitateID NUMERIC(6, 0) Nu
nume VARCHAR(40) Nu
urban TINYINT Nu
JudetID NUMERIC(4, 0) Nu
Tabelul 2.10 – Structura tabelei „Localitate”
Celelalte trei sunt tabele cu numai două coloane reprezentând nomenclatoare cu
tipuri de obiecte. S-a preferat acest tip de implementare, cu tabele mici pentru ușurința
actualizărilor tipurilor. (Schimbarea denumirii unui tip de obiect se face numai in tabelul
respectiv, el fiind legat de un tabel cu mai multe informații prin cheia lui, nefiind
necesară nici o modificare în tabelul mare).Structura celor trei tabele este prezentată în
Tabelele 2.11, 2.12 și 2.13.
Nume Coloană Tip Dată Coloană Se permite Null
TipActivitateID NUMERICN(2, 0) Nu
denumire VARCHAR(10) Nu
Tabelul 2.11 – Structura tabelei „TipActivitate”
Tabelul „TipActivitate” conține tipurile posibile de activități in cadrul facultății
(exemplu : curs, seminar, laborator, lucrare practica, lucrare opțională etc)
Nume Coloană Tip Dată Coloană Se permite Null
TipDisciplinaID NUMERIC(2, 0) Nu
Denumire VARCHAR(30) Nu
Tabelul 2.12 – Structura tabelei „TipDisciplina”
Nume Coloană Tip Dată Coloană Se permite Null
TipInvatamantID NUMERIC(2, 0) Nu
denumire VARCHAR(30) Nu
Tabelul 2.13 – Structura tabelei „TipInvatamant”
~ 31 ~
SIUD
2.5. Aplicația de administrare (JAVA)
2.5.1 Nucleul
Aplicația de administrare dezvoltată in java, pe care am numit-o mai pe scurt
SIUD, este partea principală a acestui proiect, ea jucând rolul de interfața intre
administrator și baza de date descrisă mai sus. Ea se dezvolta ierarhic pornind de la clasa
principala „Main”(Anexa 2.) care implementează firul de execuție principal al aplicației.
Se observă ca unele clase au atașat un fișier cu același nume dar cu extensia „.form”. Aceste fișiere sunt fișiere XML, generate de GUI Developerul Intelij IDEA și reprezintă partea grafică a fiecărei clase. Clasa Main nu are parte grafica. In general nu au parte grafică clasele care sunt utilizate pentru prelucrări interioare.
Clasa „Administration” constituie nucleul central al SIUD.
O reprezentare a legăturii ei cu celelalte clase amintite este prezentată în Figura
2.1.
Clasa „Logs” : are declarați doi membri statici , bf și br, de tip FileWriter și
FileReader, ambele fiind clase derivate ale clasei de stream-uri din Java. Primul este folosit pentru scrierea într-un fișier, celalalt pentru citire. În SIUD în fișierul
„adminLog.txt” se scriu toate operațiile desfășurate între o logare și o delogare.
Metoda „writeLog” scrie în fișier data la care se execută o operația și operația
executata, iar „getLog” citește din el în vederea afișării conținutului lui în tabul
„<<Admin Logs>>”.
Clasa „MyMessBox” : este clasa care se ocupă cu afișarea mesajelor de eroare sau
confirmare. Am considerat că este nevoie de ea deoarece, clasa implicită JDialog nu
poate fi modificată pentru a corespunde look&feel-ului aplicației.
Clasa „Login”(Anexa 3.) : este clasa care se conectează la baza de date și testează
dacă valorile introduse corespund unei persoane de tip administrator.(identificate în
baza de date prin câmpul tipPersoana care are valoarea „admin”). Testarea se face
printr-o funcție stocata din pachetul „util_pack ” . Dacă este găsit un administrator cu
datele corespunzătoare se apelează metoda „startAdm” din clasa Main închide
fereastra Login și apelează constructorul clasei „Administration”.
~ 32 ~
SIUD
Figura 2.1 – Clasa nucleu a aplicației SIUD și legăturile ei
Clasa „Administration”(Anexa 4.): reprezentarea schematică este cea din Figura
2.2. Aceasta clasa este derivata din clasa JFrame, componentele sale fiind de tip Swing.
~ 33 ~
SIUD
Structura ferestrei grafice este următoarea (Figura 2.2):
AdmPane = JPanel;
JSplitPane
Butoane corespun.
zătoare tabelelor
din baza de date
Etc
JTabbedPane – suportul
pentru panelurile Modify și
JScrollPane
cu JButtons
afișarea înregistrărilor din fiecare tabel.
JPanel cu JButton(pentru iesire din aplicație)
Figura 2.2 – Structura ferestrei „Administration”
Funcționare : apăsarea unui buton din stânga se efectuează următoarele operații : Se pune în variabila defaultKey valoarea „null”.
Se încarcă în primul tab al JTabbedPane tabelul corespunzător butonului. (Acest lucru se face prin apelarea metodei funcției getTable implementata în clasa DBMethods –
numele clasei vine de la „DataBase Methods”).
Clasa Administration implementează interfața MouseListener, adică daca se
supraîncarcă metodele clasei abstracte MouseListener poare reacționa la evenimentele mouse-lui intr-un anumit fel.
Daca s-a dat dublu click pe un element al tabelei variabila amApasat primește ca valoare un număr în funcție de butonul apăsat. În funcție de valoarea aceste variabile și de valoarea variabilei defaultKey se decide conținutul tabului Modifica. Dacă tabul
defaultKey este „null” tabul se inițializează fără nici o valoare selectată implicit. Dacă defaultKey diferă de „null” tabul modifica se va inițializa cu componentele încărcate cu valorile corespunzătoare valorii stocate în defaultKey.
~ 34 ~
SIUD
Figura 2.3 – Clasa „Administration” și clasele apelate
Tabul info se va inițializa cu informațiile despre tabelul corespunzător butonului apăsat.
Singura diferența apare în momentul apăsării butonului „Alte Opțiuni” când se încarcă în JTabbedPane taburi diferite.
o Un tab („Opțiuni Studenți”) cu butoane pentru efectuarea anumitor operații(calculare medii, afișare statistici și afișare rapoarte etc.) care se crează prin apelarea constructorului clasei Operations;
~ 35 ~
SIUD
o Un tab („Baza de Date”) în care se afla poza bazei de date, în caz că administratorul ar avea nevoie.
o Un tab („AdminLogs”) în care se afla o zonă de text în care se afișează conținutul fișierului „adminlogs.txt” în timp real.
o Și bineînțeles un tab informativ („Info”) în care se vor afișa
informații despre opțiunile permise.
2.5.2 Clase și metode pentru prelucrări de informații
Maparea bazei de date
Când spun maparea bazei de date mă refer la declararea unor clase care să „copie”
structura unui tabel. Astfel am declarat pachetul „database” care conține clase cu
numele tabelelor din baza mea de date, plus câteva al căror scop de existență îl voi
descrie mai târziu. Structura pachetului se poate observa în Figura 2.4.
O clasă care mapează un tabel SQL are ca membri privați variabile purtând același nume
cu câmpurile tabelului și având același tip și metode publice care le setează valoarea sau o
returnează. Acest stil de implementare ușurează munca programatorului, mai ales in momentul in
care este necesară selectarea unui număr mare de înregistrări dintr-un tabel SQL și prelucrarea
lor. Astfel stocarea lor se va face într-un vector cu elemente de același tip cu al clasei
corespunzătoare tabelului.
~ 36 ~
SIUD
Clasele echivalente tabelelor SQL
Nomenclatoarele :
Clase de lucru cu JTable
Figura 2.4 -Structura pachetului „database”
~ 37 ~
SIUD
Modele de tabele implementate
În Figura 2.4 se observa ca in pachetul „database” pe lângă clasele
corespunzătoare tabelelor se află definite și câteva clase derivate din clasa
AbstractTableModel. Acestea folosesc la desenarea tabelelor din primele taburi ale JTabbedPane-ul referit anterior.
Constructorilor claselor respective li se da ca parametri, o variabilă de tip
conexiune la baza de date și un nume de tabel. Folosind o variabila de tipul interfeței DatabaseMetaData se culeg toate datele despre tabelul SQL respectiv și se folosesc
pentru generarea unui model de tabel ce va fi folosit pentru generarea unui JTable
echivalent.
Diferențe între operațiile claselor respective:
MyTableModel se folosește pentru obținerea unui model de tabel ce poate
fi folosit pentru orice tabel in baza de date.
ConditionedTableModel se folosește pentru obținerea unui model de
tabel în funcție de o condiție respectata , aceasta condiție este reprezentata de o anumita valoare ce o poate avea o coloana din tabel.
ConditionedTableModelString se folosește în același scop precum clasa
de mai sus, doar ca este folosita în mod pentru tabelul „Disciplina”,
singurul care are cheie de tip VARCHAR.
EvaluariTableModel se folosește pentru obținerea unui model
corespunzător unui tabel temporar(View).
Alte doua clase care sunt derivate din clasa AbstractTableModel sunt
MyTableMap și MyTableSorter. Prima mapează un tabel după liniile și coloanele lui,
implementând și interfața TableModelListener. A doua, derivata din prima se folosește de posibilitățile primei și adăugând și un MouseListener la headerul tabelei, face posibilă sortarea liniilor după o coloană pe care s-a dat click.
Cum se folosește MyTableSorter? Foarte simplu, în loc să declaram o variabilă de tip JTable cu modelul respectiv, declarăm o variabilă de tip MyTableSorter.
Legaturile celor doua clase se pot observa ușor în Figura 2.5.
~ 38 ~
SIUD
Figura 2.5 – Clasa MyTableSorter
~ 39 ~
SIUD
2.5.3Funcții și proceduri stocate
SIUD interacționează cu baza de date prin intermediul funcțiilor și procedurilor
stocate. Majoritatea procesărilor se fac prin intermediul acestora. Toate funcțiile și
procedurile stocate au și ele corespunzătoare în aplicație funcții care le apelează și care
pentru lizibilitatea codului au fost denumite aproape identic ținând cont și de operația
realizată.
Exemplu de apelare a unei proceduri stocate de către o funcție java:
// funcția java de salvare a modificărilor făcute asupra unei înregistrări de tip Judet.
public static void JudetUpdate(Judet aux,Connection conn) throws
SQLException {
CallableStatement cs = conn.prepareCall("{call JUDET_PACK.JUDET_UPD(?,?,?,?,?)}");
cs.setInt(1,aux.getJudetID());
cs.setString(2,aux.getNume());
cs.setString(3,aux.getInitiale());
cs.setString(4,aux.getPrefix());
cs.setString(5,aux.getTara());
cs.executeUpdate();
}
// procedura stocata care realizează operația de udate in baza de date
PROCEDURE judet_upd(v_id IN judet.judetid%TYPE,
v_nume IN judet.nume%TYPE,
v_initiale IN judet.initiale%TYPE,
v_prefix IN judet.prefix%TYPE,
v_tara IN judet.tara%TYPE)
IS
BEGIN
UPDATE judet
SET nume = v_nume,
initiale = v_initiale,
prefix = v_prefix,
tara = v_tara
WHERE judetid = v_id; END judet_upd;
Cum se observă de mai sus procedura face din pachetul judet_pack. Fiecare tabel are un pachet corespunzător în baza de date.
~ 40 ~
SIUD
2.6 Aplicație web demonstrativă (.NET)
Aplicația Web este folosită pentru accesarea publică a datelor din baza de date. Aceasta este folositoare mai ales studenților ce doresc să afle informații cu privire la notare, medii, examene, seminarii, etc.
Accesarea se face pe baza unui browser web, aplicația fiind de fapt o pagina
ASP.NET. Platforma de dezvoltare a aplicației este .NET Framework 2.0, limbajul de
programare folosit fiind C#.
Elementele demne de notat folosite în aplicația de față sunt:
Conectorul .NET Oracle folosit pentru a comunica cu baza de date
DataSet-urile pentru extragerea datelor, care fac apel la funcțiile interne
ale conectorului .NET Oracle
GridView-urile care afișează datele pe pagină
Conectorul .NET Oracle este o implementare proprie Microsoft pentru a oferi
acces aplicațiilor .NET la bazele de date Oracle. Pe lângă faptul că este complet
automatizat în materie de conectare și extragere, acesta este nativ CLR-ului, fiind o parte integră a platformei .NET 2.0.
De remarcat ar fi faptul ca deși scopul principal al unui conector .NET Oracle și al unui conector în general, este de a extrage sau de a modifica datele dintr-o bază de date, acesta dispune și de posibilitatea de a executa instrucțiuni care nu întorc seturi de date. În acest fel se pot crea de exemplu View-uri în baza de date sau altera tabelele, fără a mai apela la un soft extern.
OracleConnection dbCon = new OracleConnection("Data
Source=GLDATA;User ID=licenta;Password=licenta;Unicode=True");
OracleCommand comm = new OracleCommand();
comm.Connection = dbCon;
comm.CommandText = "create or replace view StudView as " +
"select s.nrGrupa, s.matricol, s.StudentID, p.nume||' '||p.prenume as “ + “Nume, s.anstudii, s.specializare from persoana p, student s where” + “p.persoanaid = s.persoanaid order by nrGrupa";
dbCon.Open();
comm.ExecuteNonQuery();
~ 41 ~
SIUD
Legătura între GridView-uri și datele întoarse de conector se face prin DataSet-
uri. DataSet-urile reprezintă colecții de înregistrări și metadata, ce pot constitui surse de
date pentru o multitudine de controale în .NET, cum ar fi GridView, DataTable,
DataGrid, ComboBox, ListBox, etc. DataSet-urile obțin datele conectându-se la baza de date specificată printr-un ConnectionString și extragând datele cu ajutorul unui SelectCommand. Acestea folosesc modelul closed-connection, pentru a minimiza consumul de resurse, cât și pentru a nu risipi banda disponibila a serverului.
Odată aduse datele în DataSet, acesta este asociat unui GridView. Un GridView reprezintă un tabel de date, creat dinamic, cu proprietăți dinamice și personalizabile. Un GridView are antetul generat pe baza informațiilor metadata din DataSet, iar datele din tabel sunt asociate datelor din DataSet, eventual aplicându-se și un filtru (fie el de restricție sau sortare). De asemenea, event-handle-urile unui GridView sunt asociate DataSet-ului, pentru a putea specifica metodele de sortare/filtrare corespunzătoare tipului de date pentru care se face operațiunea.
~ 42 ~
SIUD
3. DESCRIERE PRODUS FINAL ȘI
FUNCȚIONARE
Aplicația SIUD nu este o aplicație de tip „school web management”, singurele
date vizibile de la distanță fiind rapoartele prezentate în aplicația realizată în ASP.NET
2.0 atașată ei.
SIUD este o aplicație cu o interfață prietenoasă, ușor de utilizat chiar și pentru
necunoscători în domeniu. Tot ceea ce este necesar pentru rularea ei este baza de date
implementată în Oracle SQL, jdk1.5.0 și opțional pentru partea de web, .net Framework
2.0.
Funcționarea aplicației :
Pas1 : logare
Posibilități :
1) Utilizator sau parola eronata :
2) Utilizator și parola corecte, aplicația pornește :
~ 43 ~
SIUD
Implicit aplicația se deschide cu fereastra de operații posibile asupra studenților.
~ 44 ~
SIUD
Prin apăsarea butoanelor din stânga se pot afișa înregistrările din tabele sau chiar
modifica conținutul lor.
În cazul în care se da dublu click pe o înregistrare, tabul vizibil devine cel etichetat „<<Modifica>>” iar, componentele lui vor fi încărcate cu valorile liniei respective.
În cazul în care se dă click pe headerul tabelei, se va observa ca liniile tabele se rearanjează în ordine crescătoare a valorilor coloanei respective. Deci valorile din tabelele pot fi vizualizate și într-o anumită ordine.
Alte opțiuni sunt cele de calculare a mediilor sau vizualizare rapoarte, parte la
care aplicația java interacționează cu un micuț web site realizat în ASP.NET . Aplicația
web permite vizualizarea unor înregistrări din mai multe tabele, rezultatele unor join-uri
și intersecții de tabele, scopul lor este pur demonstrativ pentru interacțiunea Java – .NET.
~ 45 ~
SIUD
4.Concluzii
Aplicația SIUD într-o formă finală, adică definitivată și completată cu un modul
de introducere a datelor din fișier, sau de conversie dintr-o bază de date în alta,
posibilități de listare a conținutului și implementată pe o mașină care să îi ofere memoria
și spațiul necesar, este destul de potrivită ca Sistem Integrat pentru Uz Didactic. Aplicația
este una de administrare, ea poate fi instalată pe orice calculator, ea va funcționa corect
cat timp este specificat serverul Oracle pe care se afla baza de date manipulată.
Importanța acestei aplicații constă în modul ei de dezvoltare, aici mă refer desigur la interfața realizată in Swing, în modul cum se face prelucrarea datelor(prin funcții și proceduri stocate PL\SQL ceea ce sporește viteza de prelucrare a datelor și portabilitatea aplicației ) și în alăturarea componentelor Java și ASP.NET.
~ 46 ~
SIUD
5.Bibiografie
[1] C. Botez, „Curs de baze de date”
[2] ***, http://www.gesco.ro/
[3] ***, http://www.oracle.com/
[4] Peter Norton, A Guide to Java Programming
[6] Microsoft Developer Network Documentation 2005,
http://msdn.microsoft.com/
[7] ***, http://www.jetbrains.com/
[8] ***, http://microsoft.com/vs2005/
[9] ***, http://www.embarcadero.com/
~ 47 ~
ANEXE
Anexa 1
Anexa 2
{Main.java}
import database.ODS;
import com.oyoaha.swing.plaf.oyoaha.OyoahaLookAndFeel; import javax.swing.*;
import java.io.*;
import java.lang.Thread;
public class Main implements Runnable{
ODS dbCon = new ODS();
private Login login;
private Administration adm;
public Thread myThread = new Thread(this);
public Main(){
dbCon.InitOds();
login = new Login(this);
Logs.writeLog("Incercare de logare… ");
}
public void startAdm(){
//System.out.println("aici");
login.dispose();
adm = new Administration(this);
myThread.start();
}
public void closeAdm(){
myThread.stop();
System.exit(22);
}
public static void main(String [] args){
try {
OyoahaLookAndFeel lnf = new OyoahaLookAndFeel(); File fileTheam = new File("lookandfeel\\slushy10.zotm"); if (fileTheam.exists()) {
lnf.setOyoahaTheme(fileTheam);
}
UIManager.setLookAndFeel(lnf);
} catch (Exception e) {
}
new Main();
}
public void run() {
try{
System.out.println("run");
} catch (Exception e){
MyMessBox err = new MyMessBox("Thread Eroare!!", e.getMessage(),0);
}
}
}
SIUD
Anexa 3
{Login.java}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Login extends JFrame implements ActionListener {
private JPanel contentPane;
private JButton buttonOK;
private JButton buttonCancel;
private JTextField textFieldAdmin;
private JPasswordField textFieldPass;
private MyMessBox mess;
Main adm;
public Login(Main adm) {
super("Log In");
setContentPane(contentPane);
this.adm =adm;
getRootPane().setDefaultButton(buttonOK); setUndecorated(true);
getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
setResizable(false);
Dimension preferredDimension = new Dimension(320, 160); setPreferredSize(preferredDimension);
Dimension screenDimension = getToolkit().getScreenSize();
setLocation((screenDimension.width – preferredDimension.width) >> 1,
(screenDimension.height – preferredDimension.height) >> 1);
buttonOK.addActionListener(this);
buttonCancel.addActionListener(this);
// cand se inchide aplicatia intentionat se apeleaza metoda onCancel
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
onCancel();
}
});
//apasarea tastei ESCAPE
contentPane.registerKeyboardAction(new ActionListener() {
public void actionPerformed(ActionEvent e) {
onCancel();
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
//apasarea tastei ENTER
contentPane.registerKeyboardAction(new ActionListener() {
public void actionPerformed(ActionEvent e) {
onOK();
}
},KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),JComponent.WHEN_ANCESTOR_OF_FOC USED_COMPONENT );
pack();
~ 50 ~
SIUD
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JButton) {
JButton button = (JButton) e.getSource();
if (button == buttonCancel) {
onCancel();
}
if (button == buttonOK) onOK();
}
}
private void onOK() {
//aici se face testarea numelui si parolei
System.out.println("ok");
String admin = textFieldAdmin.getText();
String pass = new String (textFieldPass.getPassword());
//parte de connectare
adm.dbCon.InitOds();
try{
Connection conn = adm.dbCon.ods.getConnection(); int val = DBMethods.getAdmin(conn,admin,pass);
if(val == 1) {
adm.startAdm();
mess = new MyMessBox("Connected!","Administrator logged…",1);
Logs.writeLog(" Logare reusita.Administrator logat : " + admin +".");
}
else{
mess = new MyMessBox("Not Connected!","Login Error…",0);
Logs.writeLog("Logare nereusita.Administrator logat : " + admin +".");
}
conn.close();
adm.dbCon.ods.close();
} catch (SQLException sqe){
mess = new MyMessBox("Conexiune Eronata",sqe.getMessage(),0); System.out.println(4);
dispose();
}
}
private void onCancel() {
System.out.println("cancel");
Logs.writeLog("S-a renuntat la logare.");
adm.closeAdm();
}
public void main(String[] args) {
System.out.println("LogIn main…");
}
}
~ 51 ~
SIUD
Anexa 4
{Administration.java}
import javax.swing.*;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
public class Administration extends JFrame implements ActionListener, MouseListener {
Main adm;
java.net.URL imgURL = ImageIcon.class.getResource("/images/default.gif"); ImageIcon icon = new ImageIcon(imgURL);
private JButton buttonArhProfi;
private JButton buttonArhStuds;
//metoda ce plaseaza imaginile respective pe butoane
public void initButton(JButton btn,String path,String name){
java.net.URL imgURL = ImageIcon.class.getResource(path); ImageIcon icon = new ImageIcon(imgURL);
btn.setIcon(icon);
btn = new JButton(name, icon);
}
//secțiune de declarații componente SWING
private JButton buttonQuit;
private JTabbedPane jtb;
private MyMessBox mess;
private String defaultKey;
private boolean amApasat;
private int butonCurent;
//Declaratia constructorului clasei Administration
public Administration(Main adm){
this.adm = adm;
adm.dbCon.InitOds();
setContentPane(admPane);
// getRootPane().setDefaultButton(buttonAlteOptiuni);
setTitle("Administration Application");
setUndecorated(true);
getRootPane().setWindowDecorationStyle(JRootPane.FRAME); setResizable(true);
Dimension preferredDimension = new Dimension(1000, 800); setPreferredSize(preferredDimension);
Dimension screenDimension = getToolkit().getScreenSize();
setLocation((screenDimension.width – preferredDimension.width) >> 1,
(screenDimension.height – preferredDimension.height) >> 1);
setDefaultCloseOperation(EXIT_ON_CLOSE);
jtb.addMouseListener(this);
//sectiune de inițializare butoane cu pictograme
buttonQuit.addActionListener(this);
initButton(buttonDisciplina,"/images/disc.gif","Disciplina"); buttonDisciplina.addActionListener(this);
initButton(buttonArhStuds,"/images/arh.gif","Alte Optiuni"); buttonArhStuds.addActionListener(this);
//jtb initial value
onAlteOptiuni();
~ 52 ~
//la apasarea tastei escape se apeleaza metoda coresp butonului onQuit
admPane.registerKeyboardAction(new ActionListener() {
public void actionPerformed(ActionEvent e) {
onQuit();
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JButton) {
JButton button = (JButton) e.getSource();
//secțiune de specificare acțiuni
if (button == buttonDisciplina) {
Logs.writeLog("Se acceseaza tabelul DISCIPLINA. "); butonCurent = 0;
onDisciplina();
}
if(button == buttonAlteOptiuni) {
Logs.writeLog("Se acceseaza sectiunea de Optiuni Speciale a aplicatiei. "); onAlteOptiuni();
}
}
}
private void onAlteOptiuni() {
jPanelOptions.removeAll();
jtb = new JTabbedPane();
//Tabul Optiuni Studenti
try{
Operations op = new Operations(adm.dbCon.ods.getConnection()) ; jsp = op.getOptionPane();
jtb.addTab(" << Optiuni Studenti : >> ",jsp); }catch(SQLException sqe){
mess = new MyMessBox("Error processing data!",sqe.getMessage(),0);
}
// Tabul "Baza de date"
java.net.URL imgURL = ImageIcon.class.getResource("/images/baza_de_date.jpg"); ImageIcon icon = new ImageIcon(imgURL);
jsp = new JScrollPane(new JLabel(icon));
jtb.addTab(" << Baza de Date >> ",jsp);
//tabul "Admin Logs"
String log = Logs.getLog();
TextArea ta = new TextArea();
ta.setEditable(false);
ta.setText(log);
jsp = new JScrollPane(ta);
jtb.addTab(" << Admin Logs >> ",jsp);
//tabul Info
ta = new TextArea();
ta.setEditable(false);
jsp = new JScrollPane(ta);
jtb.addTab(" << Info >> ",jsp);
jPanelOptions.setLayout(new BorderLayout());
jPanelOptions.add(BorderLayout.CENTER,jtb);
~ 53 ~
SIUD
setVisible(true);
}
private void onTipInvatamant() {
defaultKey = "null";
amApasat = false;
jPanelOptions.removeAll();
jtb = new JTabbedPane();
try{
jsp = DBMethods.getTable(adm.dbCon.ods.getConnection(), "TIPINVATAMANT"); JViewport jv = (JViewport)jsp.getComponent(0);
JTable jt = (JTable)jv.getComponent(0); jt.addMouseListener(this);
jtb.addTab(" Vizualizare << Tipuri Invatamant >> ",jsp);
//tabul modify
ModifyTipInv mc = new ModifyTipInv(adm.dbCon.ods.getConnection(),defaultKey); modifyPanel = mc.getModifyPanel();
jtb.addTab(" << Modifica >> ",modifyPanel); } catch (SQLException sqe){
mess = new MyMessBox("Eroare! extracting data!",sqe.getMessage(),0);
}
//tabul info
TextArea ta = new TextArea();
ta.setEditable(false);
jsp = new JScrollPane(ta);
jtb.addTab(" << Info >> ",jsp);
jPanelOptions.setLayout(new BorderLayout()); jPanelOptions.add(BorderLayout.CENTER,jtb); setVisible(true);
}
private void onQuit() {
try {
ExitDialog ed = new ExitDialog(adm.dbCon.ods.getConnection()); }catch(SQLException sqe){
mess = new MyMessBox("Eroare la Inchiderea Conexiunii!",sqe.getMessage(),0);
};
}
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() == 2) {
// System.out.println("sursa:" + e.getComponent().getClass());
if(e.getComponent().getClass() == JTable.class){
JTable auxjt = (JTable)e.getSource();
defaultKey = auxjt.getValueAt(auxjt.getSelectedRow(), 0).toString();
//defaultKey = (auxjt.getValueAt(e.getX(),e.getY())).toString(); //System.out.println("default key : " + defaultKey);
try{
switch(butonCurent){
case 0:
jtb.removeTabAt(1);
ModifyDisciplina mc = new
ModifyDisciplina(adm.dbCon.ods.getConnection(),defaultKey);
modifyPanel = mc.getModifyPanel();
modifyPanel.repaint();
jtb.insertTab(" << Modifica >> ",null,modifyPanel,null,1); jtb.setSelectedIndex(1);
jtb.repaint();
break;
~ 54 ~
SIUD
case 6:
jtb.removeTabAt(1);
ModifyProfesor mpr = new
ModifyProfesor(adm.dbCon.ods.getConnection(),defaultKey);
modifyPanel = mpr.getModifyPanel();
modifyPanel.repaint();
jtb.insertTab(" << Modifica >> ",null,modifyPanel,null,1); jtb.setSelectedIndex(1);
jtb.repaint();
break;
case 7:
jtb.removeTabAt(1);
ModifyStudDisciplina msd = new
ModifyStudDisciplina(adm.dbCon.ods.getConnection(),defaultKey);
modifyPanel = msd.getModifyPanel();
modifyPanel.repaint();
jtb.insertTab(" << Modifica >> ",null,modifyPanel,null,1); jtb.setSelectedIndex(1);
jtb.repaint();
break;
case 8:
jtb.removeTabAt(1);
ModifyStudent ms = new
ModifyStudent(adm.dbCon.ods.getConnection(),defaultKey);
modifyPanel = ms.getModifyPanel();
modifyPanel.repaint();
jtb.insertTab(" << Modifica >> ",null,modifyPanel,null,1); jtb.setSelectedIndex(1);
jtb.repaint();
break;
case 9:
jtb.removeTabAt(1);
ModifyTipActivitate mta = new
ModifyTipActivitate(adm.dbCon.ods.getConnection(),defaultKey);
modifyPanel = mta.getModifyPanel();
modifyPanel.repaint();
jtb.insertTab(" << Modifica >> ",null,modifyPanel,null,1); jtb.setSelectedIndex(1);
jtb.repaint();
break;
case 10:
jtb.removeTabAt(1);
ModifyTipDisc mtd = new
ModifyTipDisc(adm.dbCon.ods.getConnection(),defaultKey);
modifyPanel = mtd.getModifyPanel();
modifyPanel.repaint();
jtb.insertTab(" << Modifica >> ",null,modifyPanel,null,1); jtb.setSelectedIndex(1);
jtb.repaint();
break;
case 11:
jtb.removeTabAt(1);
ModifyTipInv mti = new
ModifyTipInv(adm.dbCon.ods.getConnection(),defaultKey);
modifyPanel = mti.getModifyPanel();
modifyPanel.repaint();
jtb.insertTab(" << Modifica >> ",null,modifyPanel,null,1); jtb.setSelectedIndex(1);
~ 55 ~
SIUD
jtb.repaint();
break;
}
}catch(SQLException sqe)
{
mess = new MyMessBox("Eroare la extragerea datelor!",sqe.getMessage(),0);
}
}
}
}
public void mousePressed(MouseEvent e) {
System.out.println("\n Am dat click pe :" + e.getComponent().getName() + "\n");
//System.out.println("S-a apasat butonul mouse-lui!\n");
}
public void mouseReleased(MouseEvent e) {
//System.out.println("S-a eliberat mouse-ul!\n");
}
public void mouseEntered(MouseEvent e) {
//System.out.println("S-a intrat in fereastra!\n");
}
public void mouseExited(MouseEvent e) {
//System.out.println("S-a iesit din fereastra!\n");
}
}
~ 56 ~
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: . Sistem Integrat de Gestiune Didactica Utilizand Tehnologii Java (ID: 149012)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
