Implementarea Sistemelor DE Gestiune A Bazelor DE Date ÎN Contextul Tehnologiilor Java

UNIVERSITATEA “TITU MAIORESCU” DIN BUCUREȘTI

FACULTATEA DE INFORMATICĂ

IMPLEMENTAREA SISTEMELOR DE GESTIUNE A BAZELOR DE DATE ÎN CONTEXTUL TEHNOLOGIILOR JAVA

COORDONATOR ȘTIINȚIFIC:

Conf.univ.dr.ing. Pîrnău Mironela

ABSOLVENT:

Emilia-Giulia Melinte

SESIUNEA IUNIE – IULIE

CAPITOLUL I

Introducere

Motivația alegerii temei

Fiind studentă în cadrul Facultății Titu Maiorescu secția de ,,Informatică’’ am constientizat nevoia cercetării și alegerii unui subiect pentru întocmirea lucrării de licență incă din primii ani de învătământ universitar.

In anul II am realizat un proiect care, intrecea cerințele inițiale de proiectare și implemenare a aplicației solicitate, o aplicație Java care să asigure gestiunea unei biblioteci universitare.

Aplicația trebuia să asigure gestiunea unei biblioteci universitare cu cărți din diferite domenii și anume: informatică, literatură, fizică, matematică, mecanică. Țin să menționez că aceasta avea o inerfață grafică Swing și trebuia să stocheze informațiile despre cărți și cititori într-o baza de date, având ca scop efectuarea unor operații: adăugarea/ștergea/insearea unei cărți; adăugarea/ștergerea/inserarea unui cititor; căutarea unei cărți după titlu sau autor; căutarea unui citior după CNP sau nume; împrumutarea/returnarea unei cărți unui cititor cât și afișarea unei liste care să conțină cărțile nereturnate la timp.

În urma acestei aplicații am realizat că în anul de studiu terminal trebuie să îmi folosesc chiar această dorința pentru a-mi realiza și proiectul de diplomă. Sub îndrumarea doamnei profesoare doctor inginer Mironela Pîrnău am constatat că trebuie să îmi folosesc cunoștințele dobândite pentru a realiza o nouă aplicație.

Prin această schimbare de direcție am avut motivația să realizez un proiect cu mult mai provocator din punct de vedere al proiectării și conceperea unei interfețe grafice mult mai atractivă pentru utilizator.

Scopul aplicației

Aplicația este realizată în limbajul de programare Java și voi urmări realizarea unei baze de date care să conțină datele personale ale pacienților dar și ale medicilor.

1.3 Scurtă trecere în revistă a capitolelor

În următorul capitol voi prezenta începutul limbajului de programare Java, principalele proprietăți ale acestuia, voi vorbi despre noutatea principală a acestui limbaj de programare Mașina Virtuală, iar la final voi dedica un subcapitol gestionarilor de poziționare a subcomponentelor unui container.

În capitolul III voi descrie librăria Swing, care pune la dispoziția programatorilor de aplicații Java componentele necesare pentru realizarea interfetelor grafice. Voi debuta cu o introducere în Java Foundation Classes și cu o descriere a componentelor Swing. De asemenea, voi prezența toate pachetele care alcătuiesc librăria Swing.

În final voi prezența detaliat sistemul de evenimete și ascultători, fire de execuție în Swing, iar capitolul îl voi încheia cu o clasificare a componentelor din Swing.

În capitolul IV voi prezenta fundamente legate de conectarea aplicațiilor Java la sisteme de gestiune a bazelor de date, clasificarea driverelor Java Database Conectivity cât și despre pașii de urmat in lucrul cu JDBC

Ultimul capitol îl voi dedica aplicației.

CAPITOLUL II

Fundamentele limbajului Java

2.1 Limbajul Java

Java este un limbaj de programare orientat obiect.

Începutul limbajului Java este în toamna anului 1991, când firma Sun Microsystems a finanțat un proiect cu numele Green condus de James Gosling. Scopul echipei era să plaseze firma pe piața produselor electronice comerciale. Inginerii și dezvoltatorii au căutat microprocesoare care să ruleze pe o multitudine de mașini, în particular pe sisteme distribuite care lucrează în timp real. Cheia succesului firmei a fost abilitatea lucrului pe platforme multiple. După patru ani de lucu, echipa Green finalizează specificațiile limbajului Java. Apoi compania Sun Microsystems vinde licența firmelor Microsoft, IBM, Silicon Graphics, Nescape și Adobe.

În continuare voi prezența principalele proprietăți ale limbajului Java:

– cea mai importantă proprietate a limbajului Java este orientarea obiect. Java pune în evidență toate aspectele legate de programarea orientată obiect: trimitere de parametri, încapsulare, obiecte, clase, biblioteci, moștenire și modificatori de acces.

– Java este un limbaj simplu pe programare și elimina câteva dintre trăsăturile acestuia: șirurile sunt încapsulate într-o structură clasă, posibilitatea moștenirii multiple este exclusă.În Java nu există pointeri, iar alocarea și dealocarea memoriei se fac automat.

– limbaj interpretat și compilat. Programele java sunt mai întâi compilate în fișiere intermediare asemănătoare codului de asamblare, apoi acestea sunt interpretate de mediul de execuție Java în instrucțiuni mașină asociate platformei sistem.

– Java este un limbaj independent de platformă. In monemtul când instalăm mediul de dezvoltare se va crea o mașină virtuală Java care are drept scop traducerea instrucțiunilor unui byte code Java în instrucțiuni mașină pentru platfoma curentă.

– programele Java nu pot accesa memoria stack, heap sau alte secțiuni protejate de memorie.

– Java elimină sursele frecvente de erori ce apar în programe prin eliminarea pointerilor , administrarea automată a memoriei cât și dealocarea automată a acesteia.

– Java este un limbaj distribuit doarece pemite utilizarea obiectelor locale și de la distanță. Limbajul Java oferă posibilitatea dezvoltării de aplicații pentru Internet, capabile să ruleze pe platforme distribuite și eterogene.

– datorită posibilității creării mai multor fire de execuție, un progarm Java poate să execute mai multe sarcini simultan, de exemplu animația unei imagini, transmiterea unei melodii spre placă de sunet, comunicarea cu un server, alocarea și eliberarea memoriei.

– interpretorul Java este capabil să execute un byte code aproape la fel de repede ca un cod compilat. Având posibilitatea să lucreze cu fire de execuție multiple, Java justifică faptul că este un limbaj performant.

2.2 Mașina virtuală Java

Mașina virtuală este noutatea principală a limbajului de programare Java față de toate celelalte limbaje de programare. Partea dificilă a creării codului binar Java este compilarea codului sursă pentru o mașină care nu există fizic. Această mașină este numită mașină virtuală Java, deoarece există doar în memorie. Apoi, interpretorul Java traduce instrucțiuni cod mașină Java în mulțimi de instrucțiuni care pot fi înțelese de mașina reală.

2.3 Gestionarii de poziționare

2.3.1 Gestionari de poziționare(Layout Managers)

Gestionarul de poziționare este un obiect care controlează dimensiunea și aranjarea componentelor unui container. Un Layout Manager reprezintă un obiect ajutător de care se folosește containerul pentru a determina modul în care vor fi aranjate componentele în interiorul său. Pentru a stabili layout manager-ului unui container mai întâi se realizează apelând metoda void setLayout(LayoutManager) a container-ului, pasandu-i ca argument una din meteodele:

– null: pentru a nu folosi un layout manager. În acest caz, plasarea componentelor se face manual, folosind metodele setSize() și setLocațion() sau setBounds() pentru fiecare componentă în parte;

-un obiect de tip LayoutManager.LayoutManager este o interfață, de aceea argumentele primite de metodă setLayout() sunt referințe către obiecte ale unor clase care implementează această interfață.

2.3.2 Gestionarul BorderLayout

Acest gestionar de poziționare împarte suprafața de afișare în cinci regiuni corespunzătoare celor patru puncte cardinale și centrului. O componentă poate fi plasată în oricare dintre aceste regiuni, dimensiunea componenței fiind calculată astfel încât să ocupe întreg spațiul de afișare oferit de regiunea respectivă.

Pentru a adăuga mai multe obiecte grafice într-una din cele cinci zone, ele trebuie grupate în prealabil într-un Panel, care va fi amplasat apoi în regiunea dorită.

Adăugarea unei componente pe o suprafață gestionată de BorderLayout, metoda add va mai primi pe lângă numele componentei și zona în care aceasta va fi amplasată, aceasta fiind specificată prin una din constantele clasei BorderLayout: NORTH, SOUTH, EAST, WEST, CENTER.

2.3.3 Gestionarul CardLayout

Gestionarul permite afișarea unei singure componente la un moment dat. De obicei, se adaugă panouri care conțin componentele dorite, iar pentru fiecare panou putem să stabilim gestionarul de pozitioare dorit. Gestionarul CardLayout posedă doi parametri: unul implicit și unul cu doi parametri de tip int care indică marginea care este lăsată la stânga și la dreapta, respectiv sus și jos.

Cele mai semnificative metode din clasa CardLayout sunt:

2.3.4 Gestionarul FlowLayout

Gestionarul FlowLayout afișează componentele pe suprafața de afișare în flux liniar, adică componentele sunt adăugate una după alta pe linii, în limita spațiului disponibil. În momentul când o componentă nu mai încape pe linia curentă se trece la următoarea linie, de sus în jos. Adagarea elementelor se face de la stânga la dreapta pe linie, iar alinierea obiectelor în cadrul unei linii poate fi de trei feluri și anume: stânga, dreapta, centrate. Componentele sunt centrate pe fiecare linie, iar distanța implicită între componente este de cinci unități pe verticală și cinci pe orizontală. Este gestionarul implicit al containerelor derivate din clasa Panel deci și al Appleturilor. Dimesiunile componentelor afișate sunt preluate automat de către gestionar prin intermediul metodei getPrefferedSize, implementată de toate componentele standard.

2.3.5 Gestionarul GridLayout

Gestionarul GridLayout conține o grilă de celule, toate cu aceleași dimensiuni. Fiecare componentă este adăugată într-o celulă de la stânga la dreapta și de sus în jos. Această ordine poate fi schimbată prin apelul metodei setComponentOrientation() din clasa Component. Dacă numărul de componente depășește dimensiunea grilei, această se va redimensionă corespunzător, pentru a putea încăpea toate elementele sale.

2.3.6 Gestionarul GridBagLayout

Gestionarul GridBigLayout este unul mai flexibil și permite alinierea verticală și orizontală a componentelor pe baza unor constrângeri. Gestionarul este asemănător cu GridLayout. Clasa care permite specificarea constrângerilor este GridBagContaints.

Cele mai importante atribute din clasa GridBagConstaints, utile pentru stabilirea poziției componenței în cadrul grilei, sunt următoarele:

CAPITOLUL III

Swing

3.1 Introducere

Librăria Swing este partea JFC care oferă componentele necesare programatorilor pentru crearea de interfețe grafice moderne si complexe. Îmbunătățirile aduse de Swing sunt: modul de prezentare și comportare pentru interfața independentă de platformă, posibilitatea de a avea componente cu forme nerectangulare, accesibilitate pentru persoanele cu deficiențe. Acest pachet a fost gândit pentru lucruri simple adică este nevoie de scrierea de cod puțin, iar pentru lucruri mai complexe, mărimea codului crește proporțional.

3.2 Interțete grafice

Interfața cu utilizatorul, UI înseamnă totalitatea mecanismelor care permit interacțiunea dintre-o aplicație și utilizatorii ei. O particularizare a interfeței cu utilizatorul o reprezintă interfața grafică care se referă strict la comunicarea vizuală dintre utilizator și aplicație.

Aplicațiile sunt percepute de către utilizatorii finali doar prin intermediul interfețelor acestora și de aceea o interfață prost realizată poate compromite întreaga aplicație chiar dacă funcțional ea este bine realizată. În acest sens, o problema în procesul de realizare a interfeței grafice o reprezintă posibilitatea ca utilizatorul să nu înțeleagă cum să o utilizeze după ce a fost creată. Acest lucru se întâmplă deoarece utilizatorii unei aplicații nu sunt și programatori având intenția de a crea interfața conform propriului model mental, diferit de cel al utilizatorului. De aceea, dezvoltatorii aplicației trebuie să intuiască modalitățile prin care utilizatorii modelează conceptual diferitele funcționalități sau, în general, aspecte ale aplicației, și să încorporeze aceste modele în viitoarea interfață grafică. Metoda folosită în acest proces, este analogia concretizată prin metaforă. Acolo unde analogiile sunt greu de realizat, sunt folosite idiomurile care reprezintă convenții între creatorii și utilizatorii interfeței, ușor de reținut de aceștia din urmă.

3.3 Java Foundation Classes

Java Foundation Classes reprezintă un grup de API-uri incluse în platforma Java 2 Standard Edition care permit dezvoltatorilor să creeze interfețe grafice aplicațiilor Java. Java Foundation Classes constă din cinci pachete: Abstract Window Toolkit, Swing, Accessibility, Java 2D și Drag and Drop.

În tabelul următor voi prezenta cele cinci componente ale Java Foundation Classes:

3.4 Componentele si pachetele librariei Swing

Componentele Swing sunt derivate dintr-o singură clasă de bază numită JComponent. Moștenirea clasei JComopnent dă componentelor posibilitatea de a avea bordere, tooltips. De asemenea, tot din JComponent se moștenesc și metodele prin care se pot seta dimensiunile și poziționarea componentelor.

O componentă grafică reprezintă un obiect care are o anumită reprezentare grafică ce poate fi atașată pe ecran și poate astfel interacționa cu utilizatorul. Reprezentările grafice au toate obiectele care sunt instanțe ale claselor derivate din java.awt.Component și, în particular, javax.swing.JComponent pentru componentele Swing.

Fiecare componentă grafică are asociate trei dimensiuni explicate în tabelul care urmează împreună cu metodele prin care acestea pot fi accesate:

Pentru a putea folosi componentele Swing trebuie să importăm mai întâi pachetele corespunzătoare.

În general este îndeajuns să includem următoarle pachete :

– java.swing pentru componente Swing simple;

– java.swing.event pentru a ascultă evenimente generate de componetele Swing;

– java.awt pentru diverse aspecte legate de AWT;

– java.awt.event pentru evenimente generale.

În tabelul de mai jos găsim lista completă a pacheletor Swing care trebuie incluse în aplicație în funcție de necesități:

3.5 Fundamentele Swing

3.5.1 Evenimente si ascultatori

Interfețele grafice în Swing sunt separate de implementare și reprezintă codul ce se dorește a fi executat în urma interacțiunii utilizatorului cu interfața. Din acest motiv Swing a fost conceput ca un sistem condus de evenimete. Evenimentele sunt generate de fiecare dată când apăsăm o tastă sau un buton al mouse-ului și sunt tratate corespunzător prin cod implementat de programator. Acest mod în care componentele aruncă evenimente și felul în care acestea sunt tratate a rămas neschimbat de la platforma JDK 1.1 în care a fost implementat pentru prima oară.

Țin sa menționz ca sunt multe tipuri de evenimente pe care componentele Swing le pot genera. Fiecare eveniment este înfășurat într-un obiect derivat din clasa java.util.EventObject prin intermediul căruia programatorul mânuiește evenimetul, putând determina sursa evenimentului și, uneori, informații despre tipul evenimetului, starea sursei înainte și după ce evenimetul a fost generat. Sursele evenimetelor sunt în general componente sau modele, dar există și alte tipuri de obiecte care generează evenimete. În cazul evenimentelor derivate din clasa Event Object, sursa se determină efectiv folosind metodă public Object getSource(). Informațiile despre tipul evenimetului se obțin printr-un apel al metodei public String toSting(). Aceste evenimetele sunt grupate în două pachete: clasicul java.awt.event, care se referă la evenimete generale, respectiv java.swing.event, care se referă la evenimetele specifice componentelor grafice Swing.

În continuare prezint lista evenimetelor de bază din Swing, a ascultătorilor, a metodelor de adăugare, ștergere, respectiv componentele pentru care se aplică:

Voi prezenta o lista a evenimentelor și a metodelor corespunzătoare ce trebuie suprascrise:

Este foarte important ca metodele ascultătorilor să se execute rapid, deoarece mânuirea evenimentelor și desenarea componentelor sunt executate în același fir de execuție care poartă numele de event despathing thread.

3.5.2 Fire de execuție

Evenimentele sunt procesate de ascultători care le primesc în interiorul unui singur fir de execuție. Firul de execuție trebuie sa aibă grijă ca evenimentele sa ajungă la ascultători. De asemenea, toate desenările de componente, precum și schimbările dimensiunilor lor se vor petrece în acest fir de execuție. Event-despatching thread joacă un rol extrem de important în Swing și AWT și asigură controlul asupra schimbării stării și modului de vizualizare a componentelor într-un mod secvențial, nepermițând astfel efecte neașteptate.

Event-despatching thread are asociată o coadă de evenimente care reprezintă coada de evenimente a sistemului. Orice eveniment care apare determină execuția codului care tratează evenimentul respectiv, generând modificarea proprietăților componenței, a vizualizării sau redesenarea ei. Evenimentele adunate în coda de evenimente sunt procesate serial pentru a evita situații de genul modificării stării componenței în mijlocul redesenării, ceea ce determina efecte neastepate.

Pentru un container de baza cum ar fi JFrame, JDialog, a fi realizat înseamnă că le-a fost apelată metodă setVisible(true), show() sau pack(). Când o componentă este realizată, toate componentele pe care le conține se realizează. O altă metodă de a reliza o componentă este adăugarea ei într-un container deja realizat. În general, pentru cele mai multe aplicații nu trebuie să purtăm grijă firelor de execuție.

Trebuie doar să respectăm următorul șablon care asigura realizarea corectă a interfeței:

public static void main (Strîng args[]) {

Fereastră fereastră = new Fereastră();

//….

//aici vom adauga componente ferestrei dacă nu am făcut-o deja în constructor

fereastră.pack(); //aducem componentele la dimesiunea lor preferată

fereastră.setVisible(true);

//nu se mai fac operații asupra interfeței

Metoda main() este executată într-un fir de execuție a unei aplicații care poartă numele de main thread. Prin apelarea unor metode de genul setVisible(true), show() sau pack(), controlul asupra interfeței trece din main thread spre event-despatching thread, unde este executat în siguranată.

3.5.3 Clasificarea componentelor

Componentele Swing sunt împărtițe in trei categorii si anume: containere de bază, containere intermediare si componente atomice.

3.6 Containere de baza

Containerele de bază implementează interfața RootPaneContainer. Diferența dintre aceste containere și celelalte componente Swing este faptul că acestea moștenesc direct clasele corespondente lor din AWT. Toate celelalte componente moștenesc clasa JComponent. Ele sunt singurele componente dificile din Swing fiind indirect dependente de componentele per native ale sistemului de operare peste care este instalată platforma Java. Swing oferă independența față de sistemul de operare de pe mașina gazdă, tocmai prin modul în care aceste containere sunt construite, conținutul lor fiind gestionat de o componentă panou ,,ușoară'' , și anume o instanța JRootPane.

3.6.1 JFrame

Containerul de bază din Swing este JFrame. Modul în care această componentă este construită este mult mai complicat. Orice fereastră JFrame conține un câmp protected având numele RootPane, care este o instanță a clasei JRootPane, servind drept container pentru alte câteva componente panou. Nu putem adăuga componente direct unei ferestre JFrame ci unuia dintre panourile conținute în rootPane.

Mai jos putem observa ierarhia implicita bazată pe relația a part of pentru o fereastra JFrame.

Obiectul de tip RootPane conține un câmp numit glassPane care este implicit un JPanel și un câmp layeredPane care este o instanță a clasei JLayeredPane. Aceasta din urmă conține, la rândul lui, un câmp content Pane, implicit instanța a clasei JPanel, și câmpul menuBar de tip JMenuBar, care implicit este null. Pentru a adauga o componentă unei ferestre JFrame trebuie să adăugăm acea componentă panoului contentPane și acest lucru se realizează prin apeluri de genul: fereastraMea. getontentPane(). add(componentaMea), obținând astfel panoul conținut, căruia putem să-i adagam componnente folosind apeluri de genul add();

Dacă vom încerca să foloim metode de tip add() sau setLayout() direct pentru fereastră JFrame vom obține eroare. Componentă glassPane este implicit un panou JPanel neopac care stă deasupra tuturor componentelor din JRootPane, acționează c un ecran de protecție pentru fereastră. Acest lucru permite desenarea deasupra tuturor componentelor din fereastră curentă, precum și interceptarea sau întreruperea evenimentelor generate de mouse. Pentru a schimba glassPane din JPanel în oricare altă componentă folosim metoda public void setGlassPane(component glassPane). LayeredPane este una dintre cele mai puternice si mai robuste componente din pachetul Swing. Este un container care oferă o a treia dimensiune pentru a poziționa component, si anume adancimea.

3.6.2 Clase și interfețe legte de ferestre

Interfața WindowConstants este folosită pentru a specifica modul in care o fereastră JFame sau JDialog reactionează la închidere folosind metoda satDefaultCloseOpertion.

Această interfață defineste patru constante întregi a căror descriere o avem in tabelul de mai jos:

Interfața WindowListener trebuie implementată de toți ascultatorii care tratează evenimentele produse de fereastră careia i-au fost atașati folosind metoda public void addWindowListener (WindowListener l). Această interfață are șapte metode, fiecare tratand un anumit tip de eveniment.

Le voi prezenta in continuare:

void windowActivatted(WindowEvent e)

void windowClosed()

void windowClosing()

void windowDeactivated()

void windowDeiconified()

void windowIconfied()

void windowOpened().

Clasa WindowAdapter este o implementare abstracta a interfeței WindowListener ce permite prin extindere suprascrierea unui număr limitat de metode ale interfeței WindowListener. Clasa WindowEvent reprezintă evenimentul generat in momentul schimbării stării ferestrei (inchidere, minimizare). Este captat si tratat de orice WindowListener sau WindowAdapter atașat ferestrei tocmai in acest scop. Există șapte tipuri de evenimente, fiecare fiind tratat de metoda corespunzatoare din ascultator: WINDOW_ACTIVATED, WINDOW_CLOSED, WINDOW_CLOSING, WNDOW_DEACTIVATED, WINDOW_DEICONIFIED, WINDOW_ICONIFIED, WINDOW_OPENED.

Clasa Toolkit permite obținerea rezoluției ecranului printr-un apel de forma:

Dimension dim = getToolkit().getScreenSize().

3.6.3 JWindow

JWindow este asemănatoare cu JFrame, dar aceasta nu are bară de titlu, nu i se pot modifica dimensiunile, nu se pot minimiza, maximiza si nu poate fi inchisă. Este folosită pentru a vizualiza un mesaj temporal sau logurile de la inceputul utilizarii aplicației. Deoarece implementează interfața RootPaneContainer și necesită acelasi comportament din partea dezvoltatorului pentru a-i accesa conținutul.

3.6.4 JDialog

Ferestrele de dialog sunt ferestre utilizate pentru obținerea de input de la utilizator sau pentru simpla afișare de mesaje informative sau de eroare. Putem crea o fereastră JDialog modală sau nemodala, dependentă sau nu de un alt container. Dacă este dependentă de un părinte dialogul se va activa doar în strânga legătura cu el, altfel aplicația poate să aibă drept interfață grafică un simplu dialog și nimic altceva.

3.6.5 JApplet

Această componentă permite realizarea de appleturi. Datorită faptului că pentru o componentă JApplet conținutul este gestionat de un panou JRootPane, apare posibilitatea de a-i adăuga acesteia bară de meniu. Evident ca se va schimba si gestionarul de pozițoanare.

3.7 Containere intermediare

Containerele intermediare sunt următoaarele și anume: JPanel, JScrollPane, JSplitPane, JTabbedPane. Un container intermediar reprezintă modalitatea standard de a aduna mai multe componente ușoare la un loc și de a le gestiona poziționarea și dimensiunile folosind managerii de poziționare. Gestionarul de poziționare pentru un container intermediar este FlowLayout. De aceea, atunci când adăugăm componente și nu am setat alt gestionar de poziționare, acestea se vor poziționa pe aceeași linie, una după alta, cu dimensiunile lor preferate. Atunci când o componentă nu mai încape pe rândul curent din cauza dimensiunilor ei, se așează următoarea linie. Implicit, panourile nu desenează nimic altceva decât culoarea fundalului lor. Permit adăugarea de borduri și li se poate personaliza desenarea.

3.7.1 JPanel

Acesta componenta reprezintă containerul intermediar de bază pentru orice interfață grafică, folosit de cele mai multe ori pentru a organiza un grup de componente ale unui alt container care le conține. Conținutul unei ferestre este ținut tot intr-un panou implicit JPanel, numit contentPane, care este gestionat implicit de gestionarul BorderLayout.

In tabelul alaturat avem constructorii clasei JPanel cat si explicația fiecaruia:

3.7.2 JScrollPane

Scopul acestei componente este acela de a da posibilitatea derulării celorlalte componente în cazul în care ele nu încap într-o zonă cu dimensiuni fixe. Poziționarea pentru această componentă este gestionată de un manager special numit ScrollPaneLayout și nu se pot seta gestionării de poziționare obișnuiți.

JScrollPane oferă o perspectiva asupra unei surse de date care poate fi, de exemplu, o imagine, un document text, o tabela. Această sursă date reprezintă componentă din a cărei suprafață se va vizualiza doar o anumită regiune la un moment dat, cu posibilitatea de derulare. JScrollPane pune la dispoziție două bare de derulare JScrollPane, respectiv un container JViewport care reprezintă zona prin care se vizualizează componentă conținut, care poartă denimirea de priveliște și care poate fi obținută printr-un apel getViewport().Pentru a obține o referință sau pentru a seta această componentă din care doar o porțiune este vizualizată la un moment dat, folosim metodele getView() respectiv setView().Pe lângă aceste elemente indispensabile, compoenta JScrollPane mi pune la dispoziție un Viewport care are rol de cap de rând și un Viewport care are rol de cap de coloana. Aceste componente se vor mișcă în mod sincronizat cu conținutul care se derulează.

De asemenea, patru componente vor stă în colțurile rămase libere și pe care utilzatorul le poate suplini după preferință. Aceste colțuri vor fi vizibile dacă barele de derulare și capetele care le înconjoară sunt vizibile. Folosind metodă setCorner() pe care componentă JScrolPane o pune la dispoziție, putem să asociem o componentă colțului. Această metodă primește o componentă care va fi asignată și un șir de caractere care specifică colțul unde se va face acest lucru.

3.7.3 JSplitPane

Componenta JSplitPane încapsulează două panouri alăturate separate printr-un marcaj despărțitor, ce permite vizualizarea simultană a două componente una lângă altă. Zona despărțitoare poate fi mutată folosind mouse-ul, mărindu-se astfel spațiul pentru unul sau altul dintre panouri, fără a modifica suprafața totală de vizualizare.

3.7.4. JTabbedPane

JTabbedPane inseamnă o stivă de componente fiind așezate pe mai multe straturi suprapuse, unul dintre ele putând fi selectat la un momet dat, determinând componenta continută sa devina vizibila. Straturile au cate o prelungire care are proprietațile unei etichete.

3.8 Componente atomice simple

3.8.1 JLabel

Etichetele permit afișarea de informații care nu pot fi selectate sau suprascrie. Spre exemplu, se pot afișa text sau imagini, separat sau împreună, fără a se aștepta acțiuni dn partea utilizatorului, deoarece o eticheta nu poate deține comunicarea cu tastatură. Pentru interacțiune se vor folosi butoane, etichetele putând, eventual, fi folosite pentru a descrie butoane sau alte compnente. Pentru a adauga și poziționa conținutul unei etichete se poate folosi unul dintre constructorii puși la dispoziție sau metodă setText() pentru adaugă text, respectiv setIcon() pentru a adaugă imagini. Aliniamentul conținutului unei etichete se poate seta cu una dintre metodele setHorizontalAlignment(int aliniament) sau setVerticalAlignment(int aliniament).

3.8.2 Butoane

Toate componentele reprezintă butoane in Swing si extind clasa AbstractButton. De remarcat că și clasele JMenuItem, JCheckBoxMenuItem si JRadioButtonMenuItem care desemneaza optiuni intr-un meniu extind AbstractButton.

Butoanele folosesc un model pentru a gestiona stările in care se pot afla la un moment dat. Acesta poartă numele de ButtonModel și reprezintă baza pentru realizarea de modele pentru butoane. Putem sa avem acces la acest model folosind metodele getModel(), setModel(), prima pentru a obține modelul, iar a doua pentru a seta un nou model pentru butonul curent. Dacă nu precizăm niciun model, implicit se va asocia DefaultButtonModel.

3.8.2.1 JButton

Un buton poate prezintă atât text, cât și imagini. O imagine poate fi atașată unui buton folosind constructorul care are că parametru o instanța a clasei Icon sau după desenare, folosind metodă setIcon. Putem adaugă iconuri care să apară în diferite stări ale butonului, când este selectat, apăsat, dezactivat.

Tratarea evenimentelor generate de butoane se face în funcție de tipul de buton. În general, se adaugă ascultători ActionListener care tratează evenimentul aruncat de apăsarea butonului.

În cazul JCheckBos și JRadioButton se folosește un ascultător ItemListener pentru a testa dacă butonul este sau nu selectat. Un buton poate fi dezactivat folosind metodă setEnabled(boolean stare).

3.8.2.2 JToggleButton, JCheckButton, JRadioButton

Componentele JToggleButton, JCheckButton si JRadioButton au aceeasi functionalitate, permițând simularea unui comutator cu două stări. Singura diferență dintre toate aceste componente o reprezinta delegatii-UI care le dau vizualizarea si care sunt diferiti. JCheckButton si JRadioButton mostenesc clasa JToggleButon, care oferă pentru acestea mecanismul de comutare între cele două stări posibile. Putem verifica daca un buton este selectat folosind metoda isSelected() si il putem selecta efectiv folosind metoda setSelected(boolean stare).

Folosind clasa ButtonGroup putem grupa mai multe butoane impreună pentru a garanta că numai unul poate fi selectat la un moment dat. Gruparea se poate face numai pentru butoanele care mostenesc JToggleButton, deoarece numai acestea sunt selectabile.

3.8.3 Borduri

Rolul bordurilor este important in realizarea unei interfețe grafice. Prin intermediul acestora putem crea butoane care să se distingă de context, umbre pentru zonele de text, putem separa intre ele componentele. Bordurile nu sunt componente astfel incat nu le putem asocia ascultatori, tooltips. Clasa din care sunt derivate toate bordurile, si anume AbstractBorder, este derivata direct din clasa Object. Clasele reprezintă diverse borduri și se afla localizate în pachetul javax.borders care trebuie importat pentru a le putea folosi.

3.8.1 JList

Această componentă ne permite să alegem un element dintr-o lista de obiecte. Conținutul liste este gestionat printr-un model care este o instanța a clasei ListModel.

Putem preciza că JList oferă acces la conținutul listei doar prin intermediul modelului de date asociat. Constructorii acestei componente permit crearea de liste direct dintr-un tablou având drept elemente instanțe de clase derivate din clasa Object s-au dintr-un vector Vector. Ceea ce va fi afișat ca text în listă, ținând cont că elementele listei sunt instanțe Object, va fi șirul rezultat din apelul toString() al obiectelor (numai în cazul instanțelor clasei Icon se va face tipărirea lor că iconuri în etichete). În cazul în care nu asociem un model de date explicit, conținutul este gestionat tot prin intermediul unui model ListModel implicit, și anume o instanța a DefaultListModel, care este alocat componenței.

3.8.2 JComboBox

Componenta JComboBox combină un buton cu o listă expandabilă la cerere din care utilizatorul poate să selecteze o singură opțiune la un moment dat. Componenta este construită dintr-un buton si un meniu JPopupMenu care conține o listă JList asezată mai întâi într-un panou JScrollPane pentru a se putea derula. Componenta permite folosirea mai multor constructori asemanatori componentei JList. Se poate construi un JComboBox folosind un model dat explicit care este o instanta a clasei ComboBoxModel si, in acest caz, vom avea acces maxim asupra proprietatilor si comportamentului componentei.

3.8.3 JSpinner

JSpinner ne permite selecția sau editarea unei valori dintr-un domniu de valori posibile. Tin sa menționez că nu mai există posibilitea afișării unei lise derulabile; componenta afișează numai valoarea curentă, utilizatoul putându-se deplasa înainte/înapoi prin lista de valori. Din acest motiv JSpinner trebuie folosit atunci când succesiunea valorilor este una evidență (numere, date calendaristice).

Un JSpinner este alcătuit din două butoane, folosite pentru trecerea la valarea următoare/anterioară; un editor ce afișează valoarea curentă, componentă implicită fiind un JFormatedTextField, pentru a evita pe cât posibil valorile invalide la introducerea manula. Nu mai există renderer-valoarea curentă este afișată de către componentă de tip editor. Datele sunt memorate în modelul atașat componenței, a cărui clasa trebuie să implementeze interfață SpinnerModel.

3.9 Componente atomice complexe

3.9.1 Componente text

Clasa abstractă JTextComponent stă la baza tuturor componentelor text din Swing și se găsește în pachetul javax.swing.text. Toate aceste componentele text se regăsesc în pachetul javax.swing și sunt enumerate în continuare: JTextField, JPasswordField, JTextArea, JEditorPane, JTextPane, JTextComponent moștenesc direct clasa JComponent.

Componentele text dețin informații despre zonele de text selectate la momentul curent. Putem obține textul selectat că String folosind getSelectedText() și putem obține sau seta culoarea de fundal pentru zona selectată folosind metodele getSelectionBackGround(), setSelectionBackGround().

3.9.2 JTable

JTable este una dintre cele mai complexe componente Swing. JTable face parte din pachetul javax.swing și extinde direct clasa JComponent, implementând interfetele TableModelListener, TableColumnModelListener, ListSelectionListener, CellEditorListener și Scrollable. JTable are asocitae, de asemenea, trei modele: TableModel, TableColumnModel și ListSelectionModel, fiecare gestionând o anumită caracteristică a acestei componente. De asemenea, datorită complexității acestei componente, JTable are un întreg pachet dedicat, și anume javax..swing.table. Componentă JTable este construită pe același principiu clasic în Swing, numit model-delegat, care reprezintă în fapt o despărțire a datelor de modul lor de vizualizare.

Datele tabelei vor fi întotdeauna ținute într-o matrice sau într-o lista de vectori, sau o lista de liste, de fapt orice structura de date tabelară.

Reprezentarea grafică a datelor este încapsulată împreună cu modul în care componentă reacționează la acțiunile utilizatorilor într-un obiect, care poartă denumirea delegate, asociat fiecărei componente grafice. Pentru JTable obiectul delegate implicit are numele TableUI și se găsește în pachetul javax.swing.plaf și poate fi schimbat prin adăugarea unui plug-în nou pentru schimbarea vizualizării și comportării la acțiunile utilizatorilor . Datele ce se doresc vizualizate sunt la rândul lor înfășurate într-un model care prin sistemul de ascultători actualizează automat vizualizarea în urmă modificărilor făcute în structura de date. Spre exemplu atunci, când vrem să ștergem o înregistrare dintr-o tabela, o ștergem din structura care ține datele și atentionam componentă JTable care o înfășoară să se reactualizeze.

3.10 Meniuri si bare de unelte

3.10.1 Meniuri

Meniurile reprezintă modalitatea folosită în interțetele grafice pentru a permite utilizatorului aplicației alegerea unei opțiuni care generează o acțiune din mai multe posibile. Într-o aplicație, meniurile apar fie grupate într-o bară de meniu, fie că meniuri pop-up care se vizualizează doar în momentul apăsării unui buton al mouse-ului. Un meniu poate avea drept opțiuni alte câmpuri.

JMenuBar reprezintă un container pentru mai multe elemente JMenu așezate într-o bară orizontală în partea superioară a unei ferestre:

JPopupMenu este o fereastră care prezintă o coloana de elemente care sunt opțiuni din care se așteaptă că utilizatorul să aleagă una. Adăugarea sau ștergerea de elemente se realizează folosind metodele add() și remove().

JMenuItem reprezintă o opțiune dintr-un meniu si este elementul de bază din compoziția meniurilor. Acestui element, pe langa text, i se pot adauga drept continut iconuri. De asemenea, fiecarei opțiuni i se poate asocia o tastă folosind metoda setMnemonic(). Daca in interiorul unei optiuni litera care da tasta asociata se regaseste, atunci va fi subliniata prima aparitie a ei.

Unei optiuni meniu îi putem atașarea un accelerator folosind un apel de genul: setAccelerator(KeyStroke.getKeyStroke KeyEvent.VK_A, KeyEvent.CTRL_MASK, false), ceea ce va determina ca optiunea sa se activeze prin apasarea combinatiei de taste Ctrl+A.

Clasa JRadioButtonMenuItem este folosita pentru adaugarea de butoane radio drept optiuni in meniuri. Butoanele pot fi selectate folosind metoda setSelected() si li se pot atasa ascultatori de tipul ActionListener sau ChangeListener.

Pentru a aduga casute selectabile folosim clasa JCheckBoxMenuItem. Pentru ai intercepta setarea de catre utilizator a unei optiuni dintr-un meniu, de obicei atasam acestia un ascultator ActionListener.

3.10.2 JToolBar

JToolBar reprezintă o bară de unelte cu o colecție de iconuri grupate într-o bară situată sub bară de meniuri. Aceste iconuri sunt acceleratori pentru anumite opțiuni din meniul de baza al aplicației, această deoarece este mai ușor să apăsăm un icon aflat deja pe suprafață de lucru decât să derulăm meniul. Bară de unelte poate fi folosită că un mijloc de a oferi utilizatorilor diverse unelte cu care aceștia să lucreze pe parcusul rulării aplicației. În aplicațiile grafice, sunt puse la dispoziția utilizatorilor diverse unelte pentru desenare, alegerea iconurilor cu un design corespunzător determinând schimbarea cursorului mouse-ului și a funcționalității.

3.11 Dialoguri

3.11.1 JOptionPane

Această clasă realizează dialoguri utile pentru a prezența un mesaj, pentru a prezența o întrebare utilizatorului și a aștepta introducerea răspunsului. Fiecare dialog JOptionPane este modul ceea ce înseamnă că firul de execuție al aplicației va fi blocat atât timp cât fereastra dialog este vizualizată. JOptionPane extinde clasa JComponent având rol de container intermediar, așa cum îi spune și numele, care poate fi așezat într-o fereastră JFrame, JDialog sau într-o fereastră interioară JInternalFrame.

Codul Java de mai jos evidențiază utilizarea clasei JOptionPane cât și a metodei showMessaheDialog care afișează un mesaj de tip text simplu:

3.11.2 JFileChooser

Swing introduce un mod pentru navigarea în structura de directoare și selecția de fișiere, nemaifiind nevoiți să realizăm propriile ferestre de dialog pentru aceste operațiuni des întâlnite.

3.11.3 JColorChooser

JColorChooser este o componentă standard pusă la dispoziția dezvoltatorilor și este folosită pentru selectarea unei culori. Permite modalități de alegere a culorilor și anume: Swatches, HSV, HSL, RGB, CMYK, AWR Palette, Swing Palette și System Palette. Putem vedea și alege din culorile deja selectate.

3.12 Componente pentru progres si derulare

JSlider, JScrollBar și JProfressBar sunt componente care arată un domeniu interval și o valoare care evoluează între o valoare minimă și o valoare maximă reprezentând cele două capete ale intervalului. Interfață BoundedRangeModel reprezintă un model de date care definește o valoare întreagă ce reprezintă un indicator care evoluează între o valoare minimă și una maximă. Valoare are asociată o altă care reprezintă mărimea indicatorului. Valoarea nu poate fi niciodată mai mică decât valoarea minimă și mai mare decât valoarea maximă.

3.12.1 JSlider

JSlider reprezintă o metodă care ne ajută la alegerea unei valori numerice prin mutarea unui indicator pe suprafața unei rigle marcate. Componenta ne este foarte folositoare în cazul în care se cunoaște domeniul de valori pe care trebuie să le introducem și ne permite alegerea facială a uneia din valorile posibile. Valorile sunt evidențiate pe rigla folosind marcaje mici sau mari și cresc de la stânga spre dreapta și de jos în sus. Dacă poziția marcajelor mari corespund cu a celor mici, acestea din urmă nu vor fi afișate . Marcajele mari pot fi întotdeauna etichetate folosind componente, iar implicit acestea sunt etichete JLabel care le prezintă valoarea.

3.12.2 JScrollBar

Reprezintă implementarea unei bare de derulare. Această componentă este folosită ca parte integranta a componentei JScrollPane în procesul de derulare a conținutului, dar poate fi folosită și separat. Utilizatorul plimbă un indicator între doua limite, una inferioara și una superioară. Pentru acest lucru putem folosi și butoanele care se află la cele două extreme ale compontei. Zona componenței ScrollBar, care se află în exterioul indicatorului și al butoanelor, poartă numele de zona de paginare și poate fi folosta la rândul ei pentru a muta indicatorul prin poziționarea cursoruli mouse-ului.

3.12.3 JProgressBar

Componenta JProgresBar este folosită pentru a indica progresul unei operații consumatoare de timp, arătând utilizatorului că operația monitorizată este activă și în desfășurare. Aceasta este reprezentată printr-o bară orizontală sau verticală care crește dinspre stânga spre dreapta (sau de jos în sus) de la o valoare minimă spre una maximă. Prin intermediul acesteia poate fi vizualizat procentul din acțiune care a fost deja consumat.

3.13 Ferestre interioare

Interfețele pentru documente multiple reprezintă modul standard de a gestiona și folosi mai multe documente pe aceeași suprafață de lucru, documente care sunt reprezentate de ferestre interioare. Motivul pentru care se abordează această soluție a unui desktop pe care se află fișiere este faptul că dacă am avea o ferestra JFrame de bază care ar ocupa tot ecranul, în cazul în care ea deține focusul, va ascunde toate celelalte ferestre și dialoguri. În acest caz ar trebui să comutăm între ea și aceste ferestre, ceea ce este incomod.

Voi prezența în continuare cele două clase care sunt folosite în procesul de realizare a interfetelor pentru documente multiple.

3.13.1 JDesktopPane

JDesktopPane este clasa care stă la baza realizării de interfețe pentru documente multiple. Putem gândi JDesktopPane ca un container specializat pentru ferestre interioare. Fiecare JDesktopPane are asociata o implementare a interfetei DesktopManager, care gestionează toate operațiile efectuate de ferestrele JInternalFrame.

De asemenea dacă nu se specifică un astfel de gestionar, atunci se va asocia o instanță a clasei. DesktopPane nu suporta borderele.

3.13.2 JInternalFrame

Ferestrele interioare se aseamănă cu ferestrele obișnuite și, chiar dacă conținutul le este gestionat asemănător prin intermediul unui panou JRootPane, ferestrele interioare nu sunt considerte containere de nivel înalt. Nu au componente peer corespunzătoare, și din acest motiv sunt implementate independent de platforma. Acestea sunt construite pentru a fi folosite în interiorul unei suprafețe de lucru reprezente de clasele JDeskopPane din secțiunea anterioară. Ele se pot minimiza și maximiza și se pot specifica, de asemenea, iconul unei ferestre. Se poat specifică dacă fereastră va fi decorată cu butoane pentru a suportă redimenionarea, transformarea în icon, închiderea și mximizarea.

O fereastră interioară poate fi creată folosind un constructor de formă:

public InternalFrame(String ttlu, //titlul ferestrei

boolean redim,

boolean închid,

boolean mxim,

boolean icon);

Dacă dorim să adăugăm o componentă unei ferestre interioare, aceasta se adaugă panoului ce gestionează conținutul care se obține printr-un apel getContentPane(). O fereastră JInternalFrame poate avea asociat unul sau mai mulți ascultători InternalFrameListener care tratează evenimentele InternalFameEvent aruncate de fereastră interioară.

CAPITOLUL IV

Baze de date

4.1 Introducere

Java Database Connectivity este o infrastructură de clase gândită să ofere acces la baze de date SQL și nu numai. API-ul Java Database Connectivity poate fi folosit pentru accesarea oricărui fel de informații tabulare, indiferent de modul în care acestea sunt stocate. Clasele Java Database Connectivity se găsesc în pachetele java.sql, javax.sql și subpachetele acestora.

In tabelul de mai jos gasim interfețele pe care standardul JDBC le pune la dispoziția noastră:

4.2 Clasificarea driverelor Java Database Connectivity

1. Puntea Java Database Connectivity-Object DataBase Connectivity acționează că o legătură dintre Java DataBase Connectivity și alt mecanism de conectivitate a bazelor de date numite Object DataBase Connectivity.

2. Java-Application Programming Interface nativ folosește interfața nativă Java pentru a realiza apeluri direct la API-ul bazei de date locale.

3. Java-protocol de rețea-aceste drivere folosesc un protocol de rețea, de obicei TCP/IP, folosite pentru a comunica cu aplicația Java DataBase Connectivity middleware.

4. Java-protocol baza de date. Aceste drivere implenteaza un protocol de baza de date, cum ar fi Oracle SQL Net pentru a comunica direct cu baza de date.

4.3 Pași de urmat în lucrul cu JDBC

4.3.1 Instalarea și încarcarea driverului

Programatorul lucrează cu Java DataBase Connectivity folosind un API standard; Driverele pot fi scrise integral în Java sau doar parțial, însă în acest al doilea caz nu mai avem independent de platforma. Procedura de instalare a diverului poate diferi de la un driver la altul.

Încărcarea driverului se poate realiza astfel:

4.3.2 Deschiderea unei conexiuni cu JDBC

4.3.3 Crearea unui obiect Statement

Pentru a interoga o bază de date se foloseste un obiect de tip Statement.

Java DataBase Connectivity suporta trei tipri de statement, sub forma a 3 interfete si anume:

Statement – aceasta interfata descrie capabilitatile generale ale oricarui obiect statement. Reprezinta interfata parinte.

PreparatedStatement – descrie capabilitatile obiectelor de tip interogare precompilata. Astfel de obiecte sunt folosite pentru a eficientiza lucrul cu interogari respective prin compilarea lor o singura data urmata de executie multipla.

CallableStatement – interfata este implementata de catre obiectele utilizate pentru executia rutinelor stocate in baza de date si produc unul sau mai multe seturi de rezultate.

4.3.4 Interogarea bazei de date

Clasa Statement ofera metode precum:

ResultSet executeQuery(String sql)-aceasta metoda este folosita pentru executarea unei instructiuni SQL si produce un set de rezultate(SELECT).

Int executeUpdate(String sql)-metoda gandita pentru interogari SQL de tipul UPDATE, INSERT, DELETE, sau pentru cele care nu produc rezultate.

CAPITOLUL V

Proiectarea aplicației

5.1 Structura aplicației

Cerința de bază a lucrării este proiectarea unei interfețe grafice simple și prietenoasă folosind tehnologia Java Swing și conectarea către baza de date (JDBC). Aplicația conține elemente fundamentale ale graficii în Java și anume: sistemul de evenimente și ascultători, fire de execuție în Swing, interfețe de tip Lister și clase interne pentru gestionarea evenimentelor. Țin să menționez ca interfața principală DESIGN deține 8 meniuri și anume. Am folosit componente grafice din librăria Swing precum containerul de bază JFrame, am folosit butoane JButton, JToggleButton, am utilizat bordurile JList, JComboBox și JSpinner, folosirea JPanel-ui, JScrollPane, JSlider, etc. Accesul utilizatorului s-a realizat pe bază de utilizator și parolă permițând accesul la interfața principală. Aplicația stochează datele personale ale doctorilor, pacientilor căt în baza de date pe care am creat-o. Aceasta are ca scop efectuarea unor operații de adăugare, actualizează, ștergere.

Pentru a utiliza aplicația utilizatorul trebuie să cunoască un username și o parolă pentru a se loga la meniul pricipal. Într-o primă fază utilizatorului i se prezintă pagina de înregistrare (LOGIN).

Această interfață are rolul de a identifica utilizatorul și de a-i permite să ajungă la interfața pricipală. Menționez ca numele de utilizator și parola ce trebuie introduse sunt ,,case-sensitive”, adică utilizatorul trebuie sa fie atent atunci când introduce datele în câmpurile respective deoarece se ține cont dacă anumite litere sunt scrise cu litere mari sau mici.

După completarea câmpurilor se apasă butonul ,,LOGIN”, dacă datele introduse au fost corecte, utilizatorul este introdus în programul principal unde poate să folosească meniul pentru diferite acțiuni.

Meniul principal al aplicației are următoarele câmpuri: DESPRE SPITAL, PERSONAL 1, PERSONAL 2, MATERNITATI, PEDIATRIE, SETARI, UTIL, EXIT, CALL CENTER acestea având la rândul lor meniuri secundare dupa cum urmează: meniul ,,SPITAL’’ are ca submeniu campurile: Contact, Programări online, Exit. Meniul ,,PERSONAL 1” are ca submeniu câmpurile: Fișa de intrare a pacientului si Conectare utilizator. Meniul ,,PERSONAL 2” are ca submeniuri câmpurile: Pacient, Bilet de trimitere, Bilet de externare, Scrisoare medicală, Programări, Formular donează sânge. Meniul ,,MATERNITĂȚI” are ca submeniuri urmatoarele câmpuri: Neonatologie, Medici, Totul despre sarcină, Prețuri, Meniul ,,PEDIATRIE” are ca submeniuri urmatoarele câmpuri: Medici, Specialiști, Investigații, Prețuri și Abonamente. Meniurile SETĂRI, UTIL și EXIT.

Prin apăsarea opțiunii ,,Personal 1” din interfața pricipală se va deschide interfața ,,DOCTOR”:

Observăm că interfața este foarte prietenoasă cu utilizatorul și ușor de utilizat. Interfața conține componente grafice si anume: JLabel, JTextField, JButton, JComboBox, JRadioButton și JTable. Pe lânga componentele grafice, interfața mai conține și datele personale ale doctorului elemete de tip ,,JLabel” si anume: nume, prenume, data_nașterii, sex, vârstă, cnp, cetățenie, loc_naștere, domiciliu, telefon, e-mail, specializarea cat si departamentul.

Această interfață are ca scop efectuarea unor operații și anume: adăugarea datelor personale unui doctor în baza de date, actualizarea datelor unui doctor in baza de date, ștergerea datelor unui doctor, reactualizarea datelor din baza de date, căutarea unui doctor după nume cat si căutarea unui doctor după specializare.

După ce am prezentat toate detaliile legate despre interfață, in continuare voi adăuga datele personale ale unui doctor în baza de date. După ce am scris toate datele personale ale doctorului si anume: nume, prenume, data_nașterii, sex, varsta, cnp, cetățenie, loc_naștere, domiciliu, telefon, e-mail, specializarea, deprtamentul am apasat butonul de tip JButton ,,ADAUGA”, iar datele de contact ale doctorului au fost adăgate si salvate în baza de date.

Datele doctorilor au fost adăugate in baza de date. Conecțiunea a fost realizată prin sintaxa: ,,jdbc:derby://localhost:1527/SpitalData[Giulia on GIULIA]

Etapa de mai sus pentru componenta ,,ADAUGĂ” se repetă, folosind pasii pe care i-am prezentat.

Baza de date.

În figura de mai sus am realizat conectarea la BAZA DE DATE ,,GIULIA” .

,,jdbc:derby://localhost:1527/SpitalData[Giulia on GIULIA]”.

Avem tabelele ,,DOCTOR”, ,,DONEAZA”, ,,EXTERNARE”, ,,PACIENT”, ,,PROGRAMARI”, ,,SCRISOARE”, ,,TRIMITERE”.

Tabelele ,,DOCTOR”, și ,,PACIENT” au următoarele campuri:

Tabela ,,DOCTOR” conține urmatoarele câmpuri: ID, NUME, PRENUME, DATA_N, SEX, VÂRSTA, CNP, CETAȚENIE, LOC_N, DOMICILIU, TELEFON, MAIL, SPECIALITATE, DEPARTAMENT.

Tabela ,,PACIENT” are urmatoarele câmpuri: ID, NUME, PRENUME, DATA_N, VÂRSTA, CNP, GREUTATE, TELEFON, MAIL, JUDET, SECTOR, STRADA, NR, BLOC, SEX, NAȚIONALITATE, GRUPĂ, COD.

Clasa ,,db” conține importurile, funcțiile cât și conexiunea la BAZA DE DATE:

Codul sursă al componentei atomice ,,ADAUGĂ” este:

Butonul ,,ACTUALIZEAZĂ” are rolul de a actualiza datele personale ale unui anumit doctor:

În această captură putem observa că la utilizarea butonului ,,ACUALIZEAZĂ,, datele doctorului au fost actualizate, în mod special în coloana Departamentului, tecând de la ,,Departament AA” la ,,Departament CC”.

Butonul ,,ȘTERGE” indeplinește funcția de șterge a unui doctor din baza de date:

Dorim sa ștergem doctorul cu numele ,,Popa Ion” având ID-ul ,,118” din baza de date:

Doctorul a fost șterg cu succes din baza de date.

Butonul ,,REFRESH”

Putem căuta un doctor dupa nume apasanând butonul ,,CĂUTARE DOCTOR DUPĂ NUME”

De asemenea putem ,,CAUTA DOCTOR DUPĂ SPECIALIZARE”:

Prin apăsarea opțiunii ,,Personal 2” se deschide interfața ,,Pacient”:

Observăm o largă listă de informații cu caracter personal al pacienților:

Codul sursă al componentei atomice ,,ADAUGĂ” este:

Butonul ,,ACTUALIZEAZĂ” are rolul de a actualiza datele personale ale unui anumit pacient.

Dorim sa actualizăm datele pacientul cu ID-ul 1, ,,Aldeaa Anghel” actualizându-I coloana ,,JUDEȚ” din Buc

Butonul ,,ȘTERGE” inteplinește funcția de șterge a unui pacient din baza de date:

Putem căuta un pacient după nume apasanând butonul ,,CAUTĂ PACIENT DUPĂ NUME”:

Codul sursă al componentei ,,CAUTA PACIENT DUPĂ NUME”:

De asemenea putem ,,CAUTA PACIENT DUPĂ CNP”

Cod sursă:

După efectuarea acestor pași aplicația este gata pentru executare.

CONCLUZII

În primul rând, în urma proiectului pe care l-am rezalizat mi-am dezvoltat foarte mult cunoștințele legate despre limbajul de dezvoltare Java cât și despre baze de date.

BIBLIOGRAFIE

Ștefan Tanasă, Cristian Olaru, Ștefan Andrei. Java de la 0 la expert. POLIROM(2003)

Ken Arnold, James Gosling, David Holmes. THE Java Programming Language, Fourth Edition

Thinking in Java (Paperback) by Bruce Eckel

https://www.oracle.com/ro/index.html

https://www.oracle.com/sun/index.html

ANEXE

JFC = Java Foundation Classes

UI = User Interface

JDBC = Java DataBase Connectivity

API = Application Programming Interface

ODBC = Object DataBase Connectivity

Cod sursă buton ,,ȘTERGE” doctor:

Cod sursă buton ,,ADAUGĂ:

Cod sursă buton ,,REFRESH” :

Cod sursă buton ,,CAUTĂ DOCTOR DUPĂ NUME”:

Cod sursă ,,CAUTĂ DOCTOR DUPĂ SPECIALIZARE”:

Cod sursă buton ,,REFRESH” pacient:

Cod sursă buton ,,ADAUGĂ” pacient:

Cod sursă buton ,,ACTUALIZEZĂ”:

Cod sursă buton ,,ȘTERGE” pacient:

Cod sursă ,,CAUTĂ PACIENT DUPĂ NUME”:

Cod sursă ,,CAUTĂ PACIENT DUPĂ CNP”:

Similar Posts

  • Ultraj Contra Bunelor Moravuri Art 375 Cp

    === 74b52e419ba26c04a3353d3ed2215316fa663c4b_54137_1 === Ϲuрrіnѕ Іntrοduϲеrе ϹΑΡІΤΟLUL І ЅСURTЕ СΟΝЅІDЕRАȚІІ ІΝTRΟDUСTІVЕ Ѕесțіunеɑ І. Οrdіnеɑ șі lіnіștеɑ рublісă – vɑlοrі ѕοсіɑlе рrοtеjɑtе dе lеgеɑ реnɑlă Ѕесțіunеɑ ɑ ІІ-ɑ. Іѕtοrіϲul іnсrіmіnărіі САРІTΟLUL ІІ АΝАLІΖА ІΝFRАСȚІUΝІІ DЕ ULTRАJ СΟΝTRА ΒUΝЕLΟR ΜΟRАVURІ Ѕесțіunеɑ І. Сοnсерt șі сοndіțіі рrееxіѕtеntе Ѕесțіunеɑ ɑ ІІ-ɑ. Сοnțіnutul сοnѕtіtutіv Ѕесțіunеɑ ɑ ІІІ-ɑ. Fοrmе. Μοdɑlіtățі. Ѕɑnсțіunі СΑPІTΟLUL…

  • Strategii DE Imbunatatire A Calitatii Aplicate In Cadrul Unei Firme

    === 9a0067a42ab28d0eebfd26aac5cd0d9770d98b30_540006_1 === FACULTATEA DE ȘTIINȚE ECONOMICE SPECIALIZAREA MANAGEMENT LUCRARE DE LICENȚĂ COORDONATOR, ABSOLVENT, 2018 FACULTATEA DE ȘTIINȚE ECONOMICE SPECIALIZAREA MANAGEMENT STATEGII DE ÎMBUNĂTĂȚIRE A CALITĂȚII APLICATE ÎN CADRUL UNEI FIRME COORDONATOR ABSOLVENT 2018 CUPRINS INTRODUCERE 4 СAΡΙΤОLUL Ι – СОNЅΙDΕRAȚΙΙ ΤΕОRΕΤΙСΕ ΡRΙVΙND MANAGΕMΕNΤUL СALΙΤĂȚΙΙ 7 1.1 СALΙΤAΤΕA ΡRОDUЅΕLОR ȘΙ ЅΕRVΙСΙΙLОR 7 1.2 СОNСΕΡΤUL DΕ…

  • Aspecte Economice Privind Pacientii cu Afectiuni Cardiace

    INTRODUCERE În partea generală a lucrării mi-am propus să fac o prezentare a modalităților de finanțare a sistemului de sănătate din România. În partea generală am prezentat principalele afecțiuni cardiace, mari consumatoare de resurse financiare din clinica de cardiologie a Spitalului Clinic de Urgență ”Sf Ioan”. În cadrul cercetării am dorit să evidențiez situația actuală…

  • Generatia Millennials

    UNIVERSITATEA ,,LUCIAN BLAGA“ DIN SIBIU FACULTATEA DE ȘTIINȚE ECONOMICE SPECIALIZAREA ECONOMIA COMERȚULUI, TURISMULUI ȘI SERVICIILOR LUCRARE DE LICENȚĂ Coordonator științific: Conf. univ.dr. Virgil Nicula Absolvent: Ciorgodi Rareș-Andrei Sibiu 2016 UNIVERSITATEA ,,LUCIAN BLAGA“ DIN SIBIU FACULTATEA DE ȘTIINȚE ECONOMICE SPECIALIZAREA ECONOMIA COMERȚULUI, TURISMULUI ȘI SERVICIILOR Generația Millennials Coordonator științific: Conf. univ.dr. Virgil Nicula Absolvent: Ciorgodi Rareș-Andrei…

  • Discriminarea Muncii In Romania

    UNIVERSITATEA “BABEȘ BOLYAI” FACULTATEA DE SOCIOLOGIE ȘI ASISTENȚĂ SOCIALĂ Descriminarea muncii în România NUME ȘI PRENUME: Mădărășan Adina-Camelia SPECIALIZAREA: Resurse Umane AN: III Atitudini discriminatorii pe piața muncii, în domeniul relațiilor de muncă Discriminarea este o problemă actuală cu care oamenii se confruntă foarte des în ziua de azi, aceasta fiind acțiunea prin care unele…

  • Internet Ul Lucrurilor

    INTERNET OF THINGS Internetul Lucrurilor) Rusu Liviu Dumitru¹ Voi prezenta pe scurt in rezumat stadiul cunoasterii in cee ce privește tehnologia “Internet of Things” sau cum este tradusă aproximativ Internetul lucrurilor.Primi pași în dezvoltarea acestei tehnologii,Istoric,Trend-uri,senzori si microcontrollere utilizate , impactul asupra mediului precum și pătrunderea și evoluția acestei tehnologii în România .Părerile și viziunea…