Sunteți pe pagina 1din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Sistemul de finantare al spitalelor pe grupe diagnostice implementat printr-o aplicatie

1. INTRODUCERE Aceast lucrare i propune s prezinte o soluie modern i mai eficient a aplicaiei DRG Naional, folosit de Guvernul Romniei pentru finanarea spitalelor. Noi propunem o aplicaie on-line bazat pe tehnologia JSP i baze de date MySql pentru a nlocui vechea aplicaie realizat n MS Access 2000. Cu o astfel de aplicaie , Biroul Naional DRG poate vedea, n orice moment, datele, i chiar s le trimit la organizaiile internationale. Aceast soluie pstreaz structura si multe meniuri din aplicaia veche, astfel ncat utilizatorii se pot acomoda uor cu noua aplicaie. Accentul este pus pe securitatea datelor deoarece utilizatorii au drepturi de acces diferite, setate de ctre administrator. 1.1 Sistemul DRG Guvernul Romniei folosete sistemul DRG de clasificare ca o metod de finanare a 185 spitale, i i propune ca pe viitor sa extinda acest numar. . Noul sistem ofera ocazia intelegerii si compararii tipurilor de pacienti tratati si costul lor relativ in cadrul spitalului, intre spitale, intre judete si intre tari, deoarece DRG-urile sunt folosite larg la nivel international DRG-urile sunt un sistem de clasificare a pacientilor pe baza diagnosticului, procedurilor si a altor informatii clinice despre pacient, care ofera posibilitatea de a lega tipul de pacienti pe care spitalul ii trateaza (adica indicele de complexitate a cazurilor sau casemix index) de costurile aferente ale spitalului. Elaborarea si dezvoltarea DRG-urilor a nceput la sfarsitul anilor '60 la Universitatea Yale din Statele Unite. Motivul initial pentru dezvoltarea DRG-urilor a fost acela de a crea un cadru eficient de monitorizare a utilizarii serviciilor intr-un spital. Prin urmare, DRG-urile trebuie sa fie considerate in primul rand si mai mult decat orice ca un sistem de clasificare si nu ca unul de finantare. Daca DRG-urile sunt folosite ca baza pentru un sistem de finantare atunci multe alte componente trebuie sa fie create si implementate. Prima aplicare la scara

Pagina 1 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

larga a DRG-urilor pentru finantare a fost la sfarsitul anilor 1970 in Statul New Jersey din Statele Unite. De atunci peste 30 de ri folosesc DRG-urile pentru msurarea activitatii clinice, mbunatatirea managementului clinic, alocarea resurselor/bugetelor pentru ngrijirea sntii, pregatirea ghidurilor de practica etc. Cu toate ca implementarea DRG-urilor in Romania ca baza pentru finantarea spitalelor este un fenomen nou, conceptul DRG nu este nou si de multi ani, in numeroase tari au fost inregistrate rezultate ale utilizarii sale. Printre acestea se numara cresterea eficientei si scaderea duratei de spitalizare cu mentinerea ingrijirilor de calitate, pentru a mentiona doar cateva aspecte. Datele necesare pentru gruparea pacientilor pe baza codurilor diagnosticelor si procedurilor, in categorii DRG sunt enumerate mai jos. Aceste date definesc sistemul de clasificare DRG. varsta sex durata de spitalizare diagnostic principal diagnostice secundare proceduri starea la externare greutatea la nastere (in cazul nou nascutilor) Prin sistemul grupelor de diagnostice (DRG) se analizeaza caracteristicile fiecarui pacient externat (varsta, gen, durata de spitalizare, diagnostice principale si secundare, proceduri, starea la externare si greutatea la nastere in cazul nou-nascutilor), iar in functie de acestea pacientii sunt trimisi intr-o categorie distincta. In acest mod, sistemul DRG realizeaza o "fotografie" a rezultatelor spitalului, incercand s standardizeze rezultatele activitatii acestuia. Grupele de diagnostice au doua caracteristici esentiale: (1) omogenitatea clinica, adica intr-un anume DRG cazurile (pacientii) sunt similare, din punct de vedere clinic, dar nu identice ; (2) omogenitatea costurilor, adica fiecare DRG contine cazuri ce necesita un consum asemanator de resurse. Grupele de diagnostice sunt medicale si chirurgicale in functie de prezenta sau absenta unei interventii chirurgicale si sunt concepute pentru a acoperii patologia asociata pacientilor acuti ce solicita spitalizarea. Ele sunt concepute in lumina standardizarii
Pagina 2 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

rezultatelor spitalului (exprimate in termenii pacientilor externati, "omogenizati" in interiorul acestor grupe) si merg intr-o directie opusa scolilor medicale ce sustin eterogenitatea bolnavilor exprimata prin sloganul "nu exista boli, ci bolnavi". Pentru a putea clasifica fiecare pacient externat intr-o grupa de diagnostice sunt necesare parcurgerea a patru mari etape: disponibilizarea datelor clinice despre pacientii externati. Clasificarea DRG necesita obligatoriu 7 variabile pentru fiecare pacient: varsta, gen, durata de spitalizare, diagnostice principale si secundare, interventii chirurgicale sau alte proceduri efectuate, starea la externare, si greutatea la nastere (numai pentru nou-nascuti); codificarea datelor necesare (pentru diagnostice si proceduri), in vederea utilizarii unui limbaj standardizat pentru acest variabile si pentru a putea fi folosite cu mai multa usurinta; colectarea sub forma electronica a ancestor date; trimiterea automata a fiecarui pacient intr-o grupa de diagnostice. In momentul de fata, pentru colectarea informatiilor despre pacienti este folosita aplicatia DRGNational v4.0 care este distribuita in teritoriu. Aplicatia trebuie instalata pe fiecare calculator folosit pentru colectarea datelor legate de pacienti. Inregistrarea electronica a pacientilor, pe toata perioada cat pacientul sta in spital, este in concordanta cu foaia de observatie introdusa de Ministerul Sanatatii si Familiei din Romnia . Odata colectate, datele sunt adaugate intr-o baza de date care trebuie trimisa lunar la Biroul Central DRG din Bucuresti. La ora actuala, plicatia DRGNational v4.0 este distribuita pe un CD, ca o aplicatie runtime implemtata in Microsoft Acces 2000, care culege informatiile despre pacient la nivel de sectie, le cripteaza si apoi le trimite catre Biroul National DRG folosind posta electronica. Este posibila, de asemenea, si centralizarea datelor de pe toate sectiile spitalului pe un singur calculator, pe care trebuie de asemnea instlata aplicatia, si trimiterea lor centralizata catre Biroul National DRG. Aplicatia are cerinte hardware minime, iar pentru statiile de unde se face trimiterea datelor catre Biroul National DRG mai este necesar o conexiune la Internet.

1.2 Descrierea unei noi soluii pentru aplicaie - prezentare general Propunem o nou soluie de implementare a aplicaiei DRGNaional, care elimin dificultile celei foloste astzi.

Pagina 3 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

nti de toate, MS Access 2000 este un sistem de administrare a bazelor de date i aministreaz eficient un numr redus de nregistrri : n jur de 20000-30000 nregistri, folosit n general in activitatea de management n companiile mici. Acesta este motivul pentru care, n loc s folosim MS Access 2000 noi propunem un sistem de adminitrarea a bazelor de date mult mai puternic, numit MySQL. n al doilea rand, propunem o aplicaie online care ofer mai multe avantaje: anuleaz faza de criptare a datelor i transmiterea lor prin e-mail, deoarece poate aduce o mulime de probleme; datele primite prin e-mail de ctre Biroul Naional DRG trebuie salvate ntr-un anumit format, eventual baz de date, pentru a putea fi folosite pentru vizualizate sau pentru elaborarea unor rapoarte, statistici sau grafice ; cnd se adaug n aceeai baz de date informaii de la diverse surse, pot aparea probleme(de exemplu, valoarea cheii primare poate fi identica in unele fise. n acest caz trebuie fcute procese suplimentare nainte de salvarae n baza de date ; toatea acestae necesita timp). datele vzute la Biroul Naional DRG sunt totdeauna actulaizate(up to date); nu este necesar s se atepte sfritul unei anumite perioade de timp pentru a primi aceste date ; oricand datele pot fi vizualizate ca rapoarte, statistici sau grafice, lucru care este foarte important pentru domeniul medical. Aplicaia, baza de date i serverul de baze de date trebuie instalate pe un singur computer(server) ; acesta va fi accesat de orice utilizator, n limita drepturilor sale, de pe propriul calculator, folosind un browser ; n acest fel nu este necesar ca aplicaia s fie instalat pe computerul fiecrui utilizator(client) ; bine inteles performanta serverului trebuie s fie foarte ridicat. Aplicaia descris in continuare este o aplicaie client-server i reprezint soluia ideal de implementare a unei baze de date competitive cu costuri minime. Este realizat folosind tehnologia JavaServer Page(JSP) , impreun cu baze de date MySQL.

2. NOIUNI TEORETICE 2.1 Caracteristici MySql JDBC(engl. Java DataBase Connectivity) reprezint API-ul(engl. Application Programming Interface) dezvoltat de Sun Microsystems n colaborare cu diveri parteneri pentru a oferi aplicaiilor Java acces spre bazele de date gestionate de diverse DBMS-uri (Sisteme de Gestiune a Bazelor de Date). ntr-o arhitectura client-server, bazele de date se pot afla pe aceeai main sau pe o alt main cu care clientul este conectatdintr-un intranet sau
Pagina 4 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

chiar Internet. Cea mai important funcie a JDBC-ului este posibilitatea lucrului cu instruciuni SQL i procesarea eventualelor rezultate obinute n urma interogrilor ntr-o manier independent i consistent. Putem privi API-ul JDBC ca o interfa standard ntre aplicaii i diverse DBMS-uri, creatorii aplicaiilor programnd conform acestui API ntr-un mod uniform i independent de DBMS. Urmeaz ca apelurile SQL s fie preluate, traduse i trimise mai departe de diverse drivere scrise n parte pentru fiecare DBMS. Pentru nceput putem spune c JDBC furnizeaz acces orientat pe obiecte(OOP) la bazele de date prin definirea de clase i interfee care nfoar diverse concepte abstracte, cum ar fi cele prezentate n tabelul urmtor:

Concepte nfurate Conexiuni la baze de date Interogri SQL Mulimi rezultat Obiecte mari binare sau caracter

Clasa/clasele sau interfeele corespunztoare Connection Statement, PreparedStatement, CallableStatement ResultSet Blob(engl. Binary Large Objects)

Clob(engl. Character Large Objects) Drivere Driver Gestionari de drivere DriverManager Ceea ce trebuie remarcat este faptul c aplicaiile care folosesc bazele de date trebuie s includ pachetul java.sql, i nu pachetul care conine implementarea driver-ului particular folosit. Totui, calea spre pachetul coninnd driverul trebuie s fie prezent n CLASSPATH. Unul dintre cele mai simple i cunoscute servere de baze de date este MySQL, care ia dovedit n timp stabilitatea i fiabilitatea, fiind deseori soluia aleas pentru gestionarea bazelor de date. Serverul MySQL este oferit gratuit pentru sistemele UNIX, Windows i MacOS, sub licen GNU General Public License(GPL), de ctre firma suedez MySQL AB. Site-ul oficial MySQL este http://www.mysql.com , care poate fi consultat pentru a descrca ultimele distribuii MySQL, deja stabile, sau nc n prob, mpreun cu documentaia aferent. Dup instalare, bazele de date pe care serverul le va deservi clienilor vor fi poziionate n directorul /data al distribuiei. n subdirectorul /bin al distribuiei MySQL se va gsi executabilul mysqld, care permite startarea serverului de baze de date. n acelai director se afl i alte faciliti, cum ar fi WinMySQLAdmin pentru sistemul de operare Windows, care permite administrarea serverului MySQL dontr-o interfa grafic prietenoas.

Pagina 5 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Datorit faptului c serverul MySQL este open source, deci are surse accesibile i bien documentate, exist mai multe implementri i drivere JDBC libere, disponibile pentru MySQL i realizate de diferii dezvoltatori independeni. O list a driverelor existente o prezentm n continuare:

Nume driver Connector/J

Tip licen LGPL

Versiuni JDBC 1.x i 2.x

Pagina de referin http://www.m ysql.com/ Downloads/C onnectorJ/mzsqlconnectorjava2.0.14.zip http://mm mysql. source forge.net/ http://www.v oicenet. com/zellert/tj FM

Calea completa Com.mysql. jdbc.Driver

Mm(GNU)

LGPL

1.x i 2.x

Org.gjt.mm. mysql.Driver Twy1.jdbc.mysql. jdbcMysqlDriver

Twz

None

1.x

Caucho

QPL

2.x

http://www.ca ucho. com/

Com.caucho. jdbc.mysql. Driver

projects/jdbcDintre acestea, mmMySQL(mm- provine de la Mark Matthews, autorul lui) este driverul recomandat n manualul MySQL, fiind considerat cel mai performant driver gratuit pn la apariia lui Connector/J, care nu este altceva dect o mbuntire a acestuia. Driverul este mpachetat ntr-un fiier .jar care trebuie adugat n CLASSPATH. Numele complet al driverului este org.gjt.mm.mysql.Driver, sub protocolul mysql i formatul URL-ului JDBC este: Jdbc:mysql// [numegazd][:port]/numebazdate[?param1=val1][&param2=val2]

Pagina 6 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

O dat cu numele mainii, al portului i al bazei de date, driverul mai permite setarea unor proprieti interne cu diverse valori date de utilizatori prezentate n tabela urmtoare: Nume proprietate User Password autoReconnect maxReconnects initialTimeout maxRows useUnicode characterEncoding Mod de folosire Utilizatorul care se conecteaz Parola folosit pentru conectare Va incerca s se reconecteze driverul n cazul n care conexiunea moare?(true/false) Dac autoReconnect este setat, de cte ori va ncerca driverul s se autoconecteze? Dac autoReconnect este setat, timpul iniial de ateptare ntre reconectri(n secunde) Numrul maxim de linii care va fi returnat (0 nseamn c se vor returna toate liniile) Va folosi driverul setul de caractere Unicode atunci cnd va mnui iruri de caractere? (true/false) Dac useUnicode este true, ce tip de codare de caractere va folosi driverul? Valorile proprietilor pot fi transmise n momentul realizrii conexiunii, folosind diferitele suprascrieri ale metodei getConnection() pe care clasa DriverManager o pune la dispoziie. Pentru obinerea de informaii dintr-o baz de date folosind JBC implic n principiu cinci pai: nregistrarea driverului JDBC folosind gestionarul de drivere DriverManager; stabilirea unei conexiuni ctre baza de date; execuia unei instruciuni SQL; procesarea rezultatelor; nchiderea conexiunii cu baza de date. Funcionalitatea managerului de drivere este aceea de a menine o referin ctre toate obiectele driver disponibile n aplicaia curent. Un driver JDBC ste nregistrat automat de mangerul de drivere atunci cnd clasa driver este ncrcat dinamic. Pentru ncrcarea dinamic a unui driver JDBC, se folosesc metodele Class.forName(). Valoare implicit Nici una Nici una False 3 2 0 False Nici unul

Pagina 7 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Ex: - ncrcarea driverului MySQL Connector/J, care permite conectarea la serverul de baze de date MySQL: Class.forName(com.mysql.jdbc.Driver) Class.forName() este o metod static ce permite mainii virtuale Java s aloce dinamic, s ncarce i s fac o legtur la clasa specificat ca argument printr-un ir de caractere. n cazul n care clasa nu este gsit se arunc o excepie ClassNotFoundException. Driverele pot fi nregistrate i folosind metoda DriverManager.registerDriver(). Odat ce s-a ncrcat un driver, putem s-l folosim pentru stabilirea unei conexiuni ctre baza de date. Pentru stabilirea unei conexiuni la o baz de date,se folosete metoda static getConnection() din clasa DriverManager. Ex.: Connection conn = DriverManager.getConnection(jdbc:mysql:// localhost/numebazadate) Pentru baze de date care necesit autentificare, se utilizeaz o form a acestei metode cu trei argumente. Ex.:Connection conn = DriverManager.getConnection(jdbc:mysql:// localhost/ numebazadate, nume_utilizator, parola); Dup ce s-a stabilit conexiunea, se pot trimite instruciuni SQL ctre baza de date. API-ul JDBC nu verific corectitudinea instruciunii i nici apartenena ei al un anumit standard SQL, permindu-se astfel trimiterea chiar ed instruciuni non-SQL. Programatorul este cel care tie dac DBMS-ul interogta suport interogrile pe care le trimite i, dac nu, el este cel care va tarta excepiile primite drept rspuns. Dac instruciunea este SQL, atunci aceasta poate face anumite operaii asupra bazei de date, cum ar fi cutare, inserare, actualizare sau tergere. Pentru execuia unei instruciuni SQL neparametrizate, se folosete metoda createStatement(), aplicat unui obiect Connection. Aceast metod ntoarce un obiect din clasa Statement Ex.: Statement instructiune = conn.createStatement() ; Putem aplica apoi una dintre metodele executeQuery(), executeUpdate() sau execute() obiectuluide tip Statement pentru a trimite DBMS-ului instruciunile SQL. Metoda executeQuery() este folosit n cazul interogrilor care returneaz mulimi rezultat (instane ale clasei ResultSet), aa cum este cazul instruciunilor SELECT. Pentru operaiile de actulaizare sau tergere, cum ar fi INSERT, UPDATE sau DELETE, se folosete metoda
Pagina 8 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

executeUpdate() aplicat obiectului de tip Statement, rezultnd un ntreg care reprezint numrul nregistrrilor afectate. Aceeai metod este folosit pentru interogrile SQL DDL, cum ar fi CREATE TABLE, DROP TABLE i ALTER TABLE, n acest caz returnnd ntotdeauna zero. Metoda execute() este folosit n cazul n care se obin mai mult de o mulime rezultat sau un numr de linie. Pentru parcurgerea simpl a nregistrrilor unui obiect din clasa resultSet, putem folosi metoda next(). Ex.: while (rs.next()) // implicit cursor poziionat inainte de prima linie { System.out.println(rs.getString(nume) + , + rs.getString(prenume)); } Atunci cnd este vorba despre resurse exterioare, aa cum este cazul accesului spre DBMS-uri via JDBC, colectorul de gunoaie nu tie nimic despre starea acestor resurse, dac este sau nu cazul s le elibereze. De aceea, este recomandat ca, dup ce procesarea datelor s-a ncheiat, programatorii s nchid explicit conexiunile ctre baza de date. Pentru aceasta se folosete metoda close() aplicat obiectului Connection. n plus trebuie nchise, nainte conexiunii, i obiectele Statement i ResultSet folosind metodele lor close(). Ex.: try { //. rs.close(); instructiune.close(); } catch(SQLException e) { System.out.println(Eroare la inchidere interogare: + e.toString()); } finally { try{ if(conexiuneBazaDate!= null) { conexiuneBazaDate.close(); } } catch (SQLException ex) { System.out.println(Eroare la nchidere onexiune:+ ex.toString());
Pagina 9 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

} } Cu MySQL ca server de baze de date se ctig vitez n accesarea informaiilor, compatibilitate cu majoritatea sistemelor de gestiune a datelor, siguran i fiabilitate in manipularea unor cantiti mari de date.

Dou exemple concludente vin s susin alegerea acestei soluii: a.) Site-ul Yahoo Finance care folosete soluii MySQL pe Server Linux rspunznd prompt la miile de utilizatori. b.) NASA care are o reea de Servere interconectnd 12 locaii proprii folosete MySQL ca SGBDR. Tehnologia anterior folosit a fost ORACLE iar optarea pentru MySQL a fost determinat printre altele de urmtoarele caracteristici: costul limitat doar la suport tehnic; compatibilitate: MySQL poate comunica uor cu mai toate motoarele de DB prin ODBC. Echipa NASA considera MySQL cel mai robust motor de Baze de Date disponibil pe pia la ora actual.

2.2 Java Server Pages(JSP) Java Server Pages(JSP) este una dintre cele mai puternice tehnologii Web i este uor de utilizat. JSP combin HTML i XML cu servleturile i tehnologia JavaBeans pentru a crea un mediu productiv pentru dezvoltarea de site-uri Web independente de platform i de o nalt performan. Tehnologia JSP faciliteaz crearea coninutului dinamic pe partea de server a paginilor Web. Este asemntoare cu ASP (Active Server Pages) de ep platforma Microsoft Windows i cu PHP, care este independent de platform. JSP este o soluie Java pentru programarea pe partea de server, fiind o alternativ la CGI-urile clasice(Common Gateway Interface). JSP integreaz numeroase tehnologii Java cum ar fi servleturile, JavaBeans i JDBC.

Pagina 10 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

JSP extinde limbajul HTML oferind posibilitatea inserrii de secvene de cod Java prin intermediul unor taguri speciale. Programatorul ar posibilitatea de a crea noi taguri i componente JavaBeans cu semnificaiile indicate de acesta. Astefel, se pot crea noi faciliti pentru cei care se ocup de partea de Web design. n avelai timp, JSP este o extensie a servletilor. n loc s scriem cod Java care s genereze pagini Web, vom crea pagini Web care vor conine elemente dinamice. Atunci cnd se primete o cerere de pagin JSP, se creeaz un servlet din respectiva pagin i acesta este executat, iar rezultatul este trimis ca rspuns la cererea primit. Un avantaj important al JSP-urilor fa de servleti este faptul c se seapar coninutul HTML static de cel dinamic. n cazul servletilor, orice modificare minor referitoare la designul paginii Web implic recompilarea respectivului servlet. La JSP-uri, partea de generare a coninutului dinamic este pstrat separat de cea static prin utilizarea componentelor JavaBeans externe. Orice modificare a prii statice va fi vizibil celor ce acceseaz respectivul JSP, ntruct la primirea cererii se recompileaz automat i foarte repede pagina JSP, apoi se sexecut i rezultatul este trimis. O dat scris, o pagin JSP poate fi stocat pe orice sever Web(care are suport pentru JSP), oricare ar fi platforma pe care se afla acesta, fr a suferi modificri. Nu exist limitri referitoare la tipul coninutului generat de prile dinamice ale JSPurilor. Acestea pot fi text obinuit, HTML/DHTML, XML, WML, VRML etc. Jsp-urile sunt mai uor e creat i pot extinde funcionalitatea serverului Web (servicii de autentificare, validarea bazelor de date etc.) i pentru comunicarea cu appleturi sau alte aplicaii Web.

Crearea paginilor JSP Deoarece paginile JSP sunt executate pe partea de server, avem nevoie de un server Web. Pentru testarea exemplelor vom utiliza serverul TOMCAT. Paginile JSP vor fi stocate n directorul tomcat_dir/webapps/root. Paginile JSP au extensia .jsp. Orice pagin HTML poate fi pagin JSP. In cadrul paginilor JSP se pot utiliza trei tipuri de comentarii : comentarii HTML ncep cu simbolurile <!i se termin cu --> Aceste comentarii pot fi vazute att de programator ct i de utilizatori. Utilizatorii pot vedea comentariile HTML n momentul vizualizrii sursei paginii HTML. Comentariile

Pagina 11 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

HTML pot conine taguri specifice JSP care vor fi nlocuite la momentul execuiei de ctre server. comentarii JSP apar nte delimitatorii <%-- i --%> Aceste comentarii sunt eliminate n momentul transformrii paginii JSP n servlet. Orice comentariu JSP va fi ignorat la transformarea paginii JSP n servlet i nu va fi vizibil utilizatorului. Din acest motiv se mai numesc i comentarii ascunse. comentariile Java (/* comentariu java */)pot fi utilizate atunci cnd apar secvene de cod Java. Acestea nu vor aprea n paginile Web trimies de ctre serverul Web, deoarece sunt eliminate la transformarea paginii JSP n servlet. Directivele ofer posibilitatea de adugare de informaii adiionale i pentru descrierea atributelor paginii. De exemplu, directivele sunt utilizate pentru importarea pachetelor Java, includerea fiierelor i pentru accesarea librriilor de taguri definite de utilizator. Sintaxa general pentru directive este: <%@ directiv [.] %> sau utiliznd spaiul de nume jsp: < jsp: directive.directiva [.] /> Directiva page poate fi utilizat pentru a importa pachete i clase Java, la fel ca instruciunea import. Acesat directiv poate poseda urmtoarele atribute: language specific limbajul de programare extends indic superclasa pentru clasa servletului care se va genera import import lista de pachete i/sau clase specificate session (true/false) indic dac se stabilete o sesiune buffer stabilete dimensiunea bufferului(n kilo-octei) autoFlush (true/false) indic dac se golete automat bufferul info specific informaii despre pagina JSP errorPage indic URL-ul paginii care av fi transmis utilizatorului n caz de eroare isErrorPage (true/false) - indic dac este pagina pentru erori contentType specific tipul documentului returnat. Se poate observa c directiva page stabilete informaiile privitoare la pagina JSP. Directiva include conduce la includerea unui alt fiier n pagina JSP. Acest lucru este util atunci cnd dorim s crem un site unitar n care fiecare pagin acelai meniu de navigare. Respectivul meniu se va include ntr-un fiier separat(se va scrie seciunea de cod HTML/JSP corespunztoare meniului), iar acesta va fi inclus prin intermediul directivei

Pagina 12 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

include n cadrul tuturor paginilor. Dac respectivul fiier conine elemente JSP, acestea vor fi i ele considerate n momentul transformrii paginii JSP n servlet. Aceast directiv are un singur atribut (file) care indic numele i locul unde se gsete respectivul fiier. Crearea librriilor de taguri proprii este una dintre importantele faciliti ale tehnologiei JSP. Noi capabiliti ale paginilor JSP se pot ncapsula prin intermediul tagurilor particularizate. Acestea pot fi utilizate de ctre persoanele care nu posed cunotine de programare. Astfel se separ partea de interfa de partea de funcionalitate. Directiva taglib inclde o librrie de taguri definite de programtori. Aceasta conine dou atribute: uri stabilete fiierul care conine definiia tagurilor prefix fixeaz un prefix unic pentru respectiva librrie de taguri, pentru a nu aprea conflicte la utilizarea unui acelai tag care este definit n dou librrii distincte. n partea de declaraii se pot declara date i funcii membre pentru utilizarea n interiorul paginilor JSP. Acestea vor face parte din servletul generat din pagina JSP. Declaraiile se pot insera astfel: <%! declaraii %> sau prin: < jsp: declaration> declaraii < /jsp: declaration> Exist numeroase obiecte implicite definite de arhitectura JSP. Acestea furnizeaz accesul la mediul din momentul execuiei. Se poate ntmpla de multe ori s nu avem nevoie n mod direct de obiectele prefedinite. Lista obiectelor predefinite, precum i o scurt descriere a acestora se poate vedea n tabela urmtoare:

Nume obiect out Request Response Session

Clasa obiectului Javax.servlet.jsp.JspWriter Javax.servlet.ServletRequest Javax.servlet.ServletResponse Javax.servlet.http.HttpSession

Descriere Este utilizat n scriplet-uri sau trimis ca parametru altor metode Ofer toate informaiile privitoare la cererea primit sau la navigator Ofer acces la fluxul de ieire a servletului Este utilizat atunci cnd se dorete o pseudo-conexiune ntre client i

Pagina 13 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

pageContext Config Page Application Exception

Javax.servlet.jsp.PageContext Javax.servlet.ServletConfig Java.lang.Object Javax.servlet.ServletContext Java.lang.Throwable

serverul Web Este util pentru accesarea meniului JSP i a componentelor JavaBeans Ofer informaii despre proprietile servletului Conine o referin la pagian JSP Reprezint aplicaia Web utilizat pentru jurnalizarea paginii JSP Este coninut doar de paginile de eroare i conine informaii privind

eroarea aprut O expresie JSP este o expresie Java care este evaluat la momentul execuiei, rezultatul fiind convertit al tipul String i scris n fluxul de ieire. Sintaxa general a expresiilor este: <%= expresie_Java %> sau prin: < jsp: expression> expresie_Java < /jsp: expression> Avnd la baza tehnologia servleturilor, JSP-urile permit crearea de pagini Web dinamice. Sunt mult mai uor de implementat dect servleturile i ofer posibilitatea de a crea aplicaii Web complexe, putndu-se utiliza componentele JavaBeans, documente text sau binare, conexiuni la baze de date sau la diverse servere din reea etc. Asemenea servleturilor, se bucur de ntregul suport oferit de limbajul Java.

DESCRIEREA APLICAIEI 3.1 Structura bazei de date Exista o serie de tabele care contin coduri. Fiecare dintre aceste tabele contin un camp Id, care identifica in mod unic o inregistrare si un nume. Tabela tblStatus permite inregistrarea statutului unui pacient, si este alcatuita din doua capmuri: IdStatut (cheie primara) si TipStatut. Statutul unui pacient(tipStatut) poate fi : asigurat neasigurat strain

Pagina 14 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Pentru codificarea diagnosticelor exista trei tabele tblClasa, tblSubclasa si tblDiagnostic conectate intr-o relatie de tip 1 :m, deoarece intr-o clasa sunt mai multe subclase, iar intr-o subclasa exista mai multe diagnostice. Tabela Diagnostic este alctuit din urmtoarele cmpuri: IdDiagnostic de tip Integer, cu autoincrementare, reprezint cheia primar a tabelei tblDiagnostic; DenumireDiag de tip varchar(20), este folosit pentru introducerea numelui diagnosticului; CodDiag de tip varchar(20), este utilizat pentru introducerea codului unui diagnostic, cod ce este regasit in lista de diagnostice pe care sistemul DRG o pune la dispoziia spitalelor; PozaDiag de tip varchar(255), n cadrul cruia se va specifica calea de unde se va ncrca poza aferent diagnosticului introdus. Pentru codificarea investigatiilor RX si a investigatiilor functionale, exista tabelele tblInvestigRx, respectiv tblExplFct. Tabela tblInvestigRx este alctuit din urmtoarele cmpuri: IdInvestigRx - de tip Integer, cu autoincrementare, care este cheia primara a acestei tabele; DataInvestigRx - de tip data calendaristica, ca memora data la care s-a efectuat investigatia RX; Rezultat de tip varchar(20), este folosit pentru memorarea rezultatului investigatiei radilogice Tabela tblExplFct este format din urmtoarele cmpuri : IdExplFct de tip Integer, cu autoincrementare, reprezint cehia primar a tabelei ; DataExpl de tip data calendaristica, reprezint data la care a fost fcut explorarea funcional ; Rezultat de tip varchar(20) va conine rezultatul explorarii funcionale Exista de asemenea o tabela care permite codificarea interventiilor chirurgicale, numit tblIntervCh. Aceast tabel este alctuit din urmtoarele cmpuri: IdIntervCh de tip Integer, cu autoincrementare, reprezint cheia primar a tabelei tblIntervCh; Data de tip data calendaristic, reprezint data la care s-a efectuat intervenia chirurgical;
Pagina 15 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Rezultat de tip varchar(20), va conine reyultatul interveniei chirurgicale Alte tabele in baza de date sunt: In tabela tblSpital sunt inregistrari legate de spital ; Structura acestei tabele este urmtoarea: IdSpital de tip Integer, autoincrement, reprezint cheia primar a tabelei; NumeSpital de tip varchar(20), va conine numele spitalului; Jude de tip varchar(20), conine judetul in care se gsete spitalul ; Localitate reprezint localitatea corespunztoare spitalului. In tabela tblSecie sunt stocate datele despre seciile din cadrul fiecarui spital: IdSectie de tip Integer , cu autoincrementare, reprezint cheia primara a tabelei NumeSecie de tip varchar(2)- conine numele seciei ; NumarSecie de tip integer, va contine numrul seciei (n cazul n care acesta exist) NrPaturi va conine numrul de paturi din cadrul sectiei ; IDSpital reprezint cheia extern care face legtura ntre tabela tblSectie i tabela tblSpital, pentru implementarea relatiei 1:m intre cele dou tabele In fiecare sectie lucreaza un numar de doctori despre care avem informatii in tabela tblMedic. Structura acestei tabele este urmtoarea: IdMedic de tip Integer, reprezint cheia primar a tabelei ; NumeMedic de tip varchar(20), conine numele medicului ; SpecialitateMedic va indica specializarea medicului ; IdSectie chie externa folosit a implementa relatia 1:m intre tabelele tblSectie si tblMedic. Pentru fiecare sectie si un anumit doctor sunt inregistrati pacienti care au o noua foaie la fiecare inregistrarea in spital. Pentru datele acestora exista tabela tblPacient care are urmatoarea structura : IdPacient cheia primara a tebelei, de tip integer ; NumePacient de tip varchar(20) PrenumePacient Data NasterePacient de tip dat calendaristic ; SexPacient CNP reprezint codul numeric personal al pacinetului ;

Pagina 16 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

DataInternare de tip data calendaristic, reprezint data la care pacientul a fost internat DataExternare data la care pacientul a fost externat ; IdMedic cheie externa, utilizat pentru a putea cunoate doctorul care s-a cupat de pacient ; IdStatut cheie extern utilizat pentru specificarea statutului unui pacinet ; IdDiagpr1,IdDiagsec1 chei externe la tabela tblDiagnostic . Baza de date mai contine de asemenea o serie de tabele ca rezultata al implemetarii unor relaii de tipul m:m ntre tabelele mentionate anterior. Tabela tblCodInvestigRx retine pentru fiecare foaie de observatie, identificata prin IdPacient codurile investigatiilor RX efectuate. Aceast tabel este alctuit din urmtoarele cmpuri : IdCodInvestigRx cheie primara a tabelei ; Denumire - de tip varchar(20), indica numele investigatiei Rx ; IdInvestigRx cheie extern la tabela tblInvestigRx ; Tabela tblCodExplFct retine pentru fiecarea foaie de observatie, identificata prin IdPacient codul investigatilor functionale efectuate. Tabela tblCodInvestigCh retine pentru fiecarea foaie de observatie, identificata prin IdPacient codul interventiilor chirurgicale efectuate pe timpul spitalizarii. Structura bazei de date

Pagina 17 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

3.2 Administratori, useri i drepturi Pentru protejarea aplicatiei avem definite cateva nivele definite, pe care le vom descrie mai tarziu. Nivelul cel mai inalt este nivelul 0, nivelul administratorului bazei de date, care are drepturi depline asupra acesteia. Pentru identificare este folosit un username si o parola. Unul

Pagina 18 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

dintre rolurile sale este sa introduca in tabela tblSpital o inregistrare noua pentru fiecare spital care este adaugat in sistemul DRG. Pentru fiecare spital vom crea un administrator nou, care va avea drepturi asupra informatiilor din cadrul spitalului sau. Acesta reprezinta ceea ce numim nivelul 1 . Administratorul de la nivelul 1 este cel care are posibilitatea sa vada toate datele sharate de ceilalti useri(ca de exemplu: tabel de diagnostice, tabela de investigatii) Adimistratorul de spital (de nivel 1) are dreptul de a adauga o noua inregistrare pentru fiecare sectie din cadrul spitalului in tabela tblSectie. El de asemenea trebuie sa creeze pentru fiecare sectie unul sau mai multi useri, care pot modifica inregistrarile din cadrul unei sectii. Acesta este nivelul 2. Un user(nivel 2) va avaea acces doar la informaiile din cadrul sectiei sale(sectie asupra careia i s-a dat acces). Aceste trei nivele sunt prezentate in figura urmatoare:
Administrator nivel 0

Administrator nivel 1

Spital 1

Spital 2

....

Spital n

Useri nivel 2

Sectia 11

Sectia 12

....

Sectia 1m

....

Figura Nivele de securitate Se poate observa ca fiecare persoana care interactioneaza cu baza de date are acces limitat: are anumite drepturi pe o parte din baza de date. Administatorul de nivel 0 are acces la toata baza de date, administratorul de nivel 1 are acces la informatiiile din cadrul spitalului sau, si userii de nivel 2 au drepturi numai la informatiile din cadrul sectiilor lor. In acest fel, un user din sectie 11 nu are drepturi asupra datelor din sectia 12. Operatiile din baza de dtae care se executa in mod uzual sunt: inserare inregistrare noua, update, stergere si cautarea a unor inregistrari.

Pagina 19 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

De exemplu, unii useri nu au dreptul sa vada toate inregistrari deoarece nu le este permis sa vada date care nu el apartin, ptotejndu-se in acest fel accesul al date si informaii. Alti useri nu au dreptul sa introduca datele, ci doar sa le vada. Aspectele prezentate mai sus, garanteaza o securitate buna pentru baza de date care are o importanta nationala.

Interfaa grafic In momentul pornirii aplicaiei se va deschide o fereastra in care utilizatorul trebuie sa introduc userul i parola pentru a putea avea acces mai departe la meniuriel aplicatiei. Fereastar principala (de logare) a aplicaiei este prezentat n figura urmtoare:

n funcie de user, parol i gradul specificat utilizatorul va acces la diferite module ale aplicatiei (in funcie de nivelul de administrarea la care se afl). In funcie de tipul de utilizator aplicaia va deschide unmeniu personalizat, specific fiecrui tip de utilizator. Pentru a realiza acest lucru s-a realizat un meniu care va fi la toti utilizatorii, la care se vor adauga optiuni specifice fiecrui utilizator.

Pagina 20 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Meniul care se va incrca la toi useri este realizat in cadrul fisierului meniu.js. In funcie de tipul userilor (user0, user1, user2) la acest meniu vom mai adauga optiuni, dup cum se poate observa in cadrul codului urmtor: <script language="JavaScript" type="text/JavaScript" src="meniu.js"></script> <% if (request.getParameter("user").equals("user0A")){ %> <script language="JavaScript" type="text/JavaScript" src="optiuni0.js"></script> <% } %> <% if (request.getParameter("user").equals("user0C")){ %> <script language="JavaScript" type="text/JavaScript" src="optiuni01.js"></script> <% } %> <% if (request.getParameter("user").equals("user1")){ %> <script language="JavaScript" type="text/JavaScript" src="optiuni1.js"></script> <% } %> <% if (request.getParameter("user").equals("user2")){ %> <script language="JavaScript" type="text/JavaScript" src="optiuni2.js"></script> Meniul corespunzator unui user de tipul user0 (adic administrator )nu are nevoie de opiunea FiaPacienti, utilizat de useri de tip user2 pentru a introduce pacieni n baza de date, deoarece el nu realizeaz aceast operatie. El(user de tip user0) va avea nevoie in schimb de un meniu de setup prin care s poat crea userii de spital precum si pentru a putea aduga un nou spital in lista de spitale existente.

Pagina 21 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Atunci cnd un user de grad 0 dorete s introduc un nou administrator de spital(user grad1) se av deschide o forma ca cea din figura urmtoare:

Pagina 22 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Pentru introducerea unui user nou este nevoie de un user i o parola, iar spitalul pe care se dorete s se defineasc userul va fi selectat dintr-o list derulant, n care vor fi afiate toate spitalele introduse in baza de date. n cazul n care dorim s introducem un user , iar spitalul nu se regsete n lista derulant a spitalelor existente n baza de date, va trebui n prealabil s crem spitalul respectiv. Pentru useri de grad 1(administratori de spital) exist n cadrul meniului opiunea de setup, dar aceast opiune este diferit de cea pe care am prezentat-o anterior pentru userii de grad0. Un administrator de spital ca putea s creeze o secie nou n cadrul spitalului su, va putea introduce un user la nivel de secie, i totodata el este cel care va trebui s introduc lista de medici care lucreaz n cadrul spitalului administrat de el.

Pagina 23 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Userul de grad 2, adic utilizatorul de la nivel de secie nu va avea acces la opiunea setup din cadrul meniului, deoarece lui nu-i sunt permise operaii de crearea useri sau secii. El ins va avea n cadrul meniului o opiune numit FiaPacient, n cadrul creia va putea s introduc pacienti din cadrul seciei sale. El nu va avea acces dect la secia sa, n cadrul creia poate aduga pacienti.

Pagina 24 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Dup cum se poate observa forma pentru introducerea unui pacient n baza de date este alctuit din dou prti. Partea din stnga este folosit pentru introducerea datelor de baza ale pacientului. Se poate observa c aplicaia afieaz implicit secia i spitalul carora aparine userul evitandu-se n acest fel situaiile n care un user ar ncerac s intre ntr-o alt secie. n partea dreapt a formei se introduc datele specifice pacientului, de la date generale, diagnostice, investigatii etc. Valorile cmpurilor din aceasta form se salveaz n nite variabile de sesiune, variabile care la apsarea butonului de salvare(Save) vor fi salvate n baza de date. n afara opiunilor prezentate mai sus, meniu onine si opiunea de vizualizare a datelor, opiune prin care se pot vizualiza date din cadrul unei secii sau din cadrul unui spital, n funcie de tipul de acces pe care utilizatorul il are la baza de date. De exemplu, un user de grad1 va putea sa vizualizeze datele din cadrul spitalului su, pe diferite secii, n timp ce un user de grad 0 va putea s vizualizeze datele de la nivelul tuturor spitalelor, iar un user de grad2 va vedea doar datele din cadrul secie n cadrul creia el are acces. n cadrul opiunii de vizualizare se pot vedea pacienii, diagnosticele, interveniile chirurgicale si explorrile funcionale.

Pagina 25 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Pentru a face operaie de vizualizare mai uoar s-au creat i dou butoane care permit afiarea informaiilor cerute ordonate dupa diferie criterii. De exemplu in cadrul vizualizarii diagnosticelor, se poate face o ordonarea a acestora dup cod, sau dup denumire, pentr a fi mai uor de identificat.

Opiunea de cutare permite cautarea unui anumit reper (diagnostic, interventie chirurgicala, explorri funcionale) n baza de date. Cutarea se face dup cod sau dup denumire, iar rezultatul av fi afiat pe ecran la apsarea butonului Afieaz.

Pagina 26 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Opiunea Rapoarte permite editarea unor rapoarte diverse, fie la nivel de sectie sau de spital, fie la nivel global. Ca i pn cum , accesul la aceste rapoarte este determinat de gradul fiecrui utilizator. De exemplu un user de grad2, adica user la nivel de secie nu va avea acees dect la rapoartele din cadrul seciei sale. Raportul poate fi realizat i intr-o anumit perioad, caz n care trebuie specificat o dat de nceput i o dat de sfrit.

Pagina 27 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Ultima opiune a meniului aplicaiei este Exit care va duce utilizatorul n faza de logare, n care i se va cere un user i o parol pentru a avea acces la aplicaie.

Conexiunea la baza de date Conexiunea la baza de date se realizeaz prin specificarea numelui i parolei bazei de date, cu ajutorul unui driver de conectare. Procesul prin care se obin informaii dintr-o baz de date implic n principiu 5 pai: nregistrarea driverului JDBC, folosind gestionarul ed drivere DriverManager; stabilirea unei conexiuni ctre baza de date; execuia unei instruciuni SQL; procesarea rezultatelor; nchiderea conexiunii cu baza de date. Funcionalitatea managerului de drivere este aceea de a menine o referin ctre toate obiectele driver disponibile n aplicaia curent. Un driver JDBC este nregistrat automat de managerul de drivere atunci cnd clasa driver este ncrcat dinamic. Pentru ncrcarea dinamic a unui driver JDBC s-a folosit metoda Class.forName(). Class.forName() este o metoda static ce permite mainii virtuale Java s aloce dinamic, s ncarce i s fac legtura la clasa specificat ca argument printr-un ir de

Pagina 28 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

caractere . n cazul n care clasa nu este gsit se arunc o excepie ClassNotFoundException. O dat ce s-a ncrcat driverul, putem s-l folosim pentru stabilirea unei conexiuni ctre baza de date. O conexiune JDBC este identificat printr-un URL specific. Conexiunea la baza de date s-a realizat in modul urmtor: String dataBaseUrl = ""; String username = ""; String password=""; Connection conn = null; try{ //load the jdbc driver String driverName = "org.gjt.mm.mysql.Driver"; //mySql MM JDBC Driver Class.forName(driverName).newInstance(); //create a connection to the database dataBaseUrl = this.getServletContext(). getInitParameter("dataBaseUrl"); username = this.getServletContext(). getInitParameter("databaseUserName"); password = this.getServletContext(). getInitParameter("databaseUserPassword"); String url = "jdbc:mysql://" + dataBaseUrl; // a JDBC url conn =DriverManager.getConnection(url, username,password); } catch (ClassNotFoundException e){ //could not find the database driver System.out.println(e.getMessage()); } catch (SQLException e){ //could not connect to the database System.out.println(e.getMessage()); }

Operaii asupra bazei de date


Pagina 29 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Pentru execuia unei instruciuni Sql, prin intremediul creia se fac operatii asupra bazei ed date, se folosete metoda createStatement(). Statement stmt = conn.createStatement(); Aceast metod este aplicat unui obiect Connection, i ntoarce un obiect din clasa Statement. Ea se folosete pentru instruciuni SQL simple, fr parametrii. n continuare s-a aplicat metoda executeQuery(), care se folosete n cazul interogrilor care returneaz mulimi rezultat(ResultSet), aa cum este cazul instruciunilor SELECT. Ex. String sSql = "SELECT * from tblsectie where (tblsectie.Idsectie='"+IdSectie+"')"; ResultSet rs = stmt.executeQuery(sSql); n cazul operaiilor de inserare n baza de date(INSERT) se folosete metoda executeUpdate(), care se aplic obiectului de tip Statement, i va rezulta un ntreg care reprezint numrul nregistrrii afectate. Ex. String sSql = "INSERT INTO tblsectie values("Medicala",1, 20)"; Int raspuns = stmt.executeUpdate(sSql); n acest moment, pentru parcurgerea simpl a nregistrrilor din clasa ResultSet, s-a folosit metoda next(), dup cum se poate observa n secvena de cod urmtoare: <% while (rs.next()){ %> <td><b><%=rs.getString("NumeSectie")%> %></b></td> n mod implicit cursorul se poziioneaz nainte de prima linie, de aceea condiia din while este rs.next(). Cursorul poate fi mutat doar nainte folosind metoda next(). Pentru determinarea liniei curente se poate folosi metoda getRows(). De asemenea exist metodele first() i beforeFirst() pentru poziionarea pe ultima, respectiv nainte de prima linie, last() i afterLast() pentru poziionarea pe ultima, respectiv dup ultima linie. Dup ce datele au fost procesate, se inchide conexiunea catre baza de date folosind metoda close(). n plus nainte de a se inchide conexiunea trebuie nchise i obiectele Statement i ResultSet folosind metodele lor close(). Se mai pot realiza i operaii de updatare a informaiilor din baza de date, folosind instruciunea UPDATE, precum i operatii de tergere din baza de date utiliznd DELETE. Aceste ultimedou instruciuni vor fi implmentate pe parcurs. <%=rs.getString("NumarSectie")

Pagina 30 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Cutare Operaia de cutare a fost implementat pentru a putea gsi diferite informaii legate de diagnostice, intervenii chirurgicale i explorri funcionale. In viitor aplicaiei i se va aduga i un modul pentru cutarea unui pacient, fie dup nume, fie dup CNP, fie dup numrul foii de observaie. Forma care se deschide la opiunea cautare din cadrul meniului este prezentat n figura urmtoare:

La apsarea butonului Afiseaz, se execut un SELECT n baza de date avand ca i condiii de cutare datele introduse n forma. Datele obinute n urma select+ului din baza de date se vor afia n cadrul unei tabele, aa cum se poate observa in cadrul codului respectiv: <% if (request.getParameter("Afiseaza")!=null){ out.println("S-a gasit urmatorul rezultat:"); try{ Statement stmt = conn.createStatement(); String checkifdiag = "SELECT * from tblDiagnostic where (tblDiagnostic.Cod='"+sCod+"')OR (tblDiagnostic.DenumireDiag='"+sDenDiag+"')"; ResultSet rs = stmt.executeQuery(checkifdiag); %> <table bordercolor="#666666" border="3" align="center"> <tr>
Pagina 31 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<td><b>Cod Diagnostic</b></td> <td><b>Denumire Diagnostic</b></td> </tr> <% while(rs.next()){ %><tr> <td><%=rs.getString("Cod")%></td> <td><%=rs.getString("DenumireDiag")%></td> </tr> <%} %> </table> <% stmt.close(); } catch (SQLException e){out.println(e.getMessage());} } %>

Operaiunea de cutare va fi aceeai la toi utilizatorii indiferent de gradul de acces. Acest lucru se ntmpl datorit faptului c se face o cutare n baza de date a unor informaii care sunt puse la dispoziia spitalelor de ctre Biroul Central din Bucureti, i reprezint informaii standardizate, care sunt aceleai indiferent de loc sau de persoana care le cere. Diferit de operaia de cutarea este operaia de vizualizare, care depinde foarte mult de gradul de acces pe care utilizatorul il are. n funcie de acesta, se pot vizualiza numai anumite date din baza de date. Acest lucru a fost realizat prin adugarea unei condiii suplimentare n cadrul instruciunii SELECT, prin care se cere ca informaiile s aparin numai unei anumite categorii De exemplu un user de grad 0 va putea vizualiza doar date legate de secia sa, iar pentru acest lucru condiia din SELECT va arta astfel: String checkifuser = "SELECT IdPacient,NumePacient, SpecialitateMedic, PrenumePacient,DataInternare,NumeMedic, NumeSectie,NumeSpital,Localitate

Pagina 32 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

from tblpacient,tblMedic,tblsectie,tblspital where (tblsectie.IdSpital=tblspital.Idspital)AND (tblmedic.IdSectie=tblsectie.IdSectie)"; Id-ul de secie se va transmite impreuna cu informaiile despre user pin intermediul unor variabile de sesiune. String IdSectie = (String) session.getAttribute("IdSectie"); (tblSectie.IdSectie='"+IdSectie+"')AND (tblPacient.IdMedic=tblmedic.IdMedic)AND

n cazul userilor de grad1 (administratorii de spital) forma de vizualizare va avea in plus un cmp din care s se poat selecta secia de unde se doresc a se vizualiza date, iar cea pentru useri ed grad 0 va avea i cmpseparat pentru selectarea spital. n funcie de spitalul selectat, n cmpul corespunzator sectiilor se vor afia seciile corespunzatoare spitalului anterior selectat.

Rapoarte Rapoartele pe care aplicaia le genereaz sunt al nivel de secie, la nivel de spital sau la nivel global. Ca i celelalte opiuni, accesul la aceste rapoarte este determinat de gradul de acces al utilizatorului la baza de date.

Pagina 33 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Userul de secie va avea acces la rapoartele care cuprind secia sa, alte rapoarte ne fiindu-i necesare. Dup cum se poate observa n forma de mai jos, spitalu i secie careia userul aparine sunt completate automat de ctre aplicaie, utilizatorul trebuind s selecteze perioada de timp n care vrea sa vad raportul. Aplicaia realizeaz un raport cu persoanele internate intr-o anumit perioad, iar pe viitor vor fi realizate i alte rapoarte(ca de ex. numrul de persoane decedate intr-o seciespital-nivel naional, diagnosticele cele mai des ntlnite etc.).

La userii de grad 1(administratorii de spital) n cadrul formei de rapoarte va fi afiat un buton din care utilizatorul va trebui s aleag secia pentru care dorete s vad raportul. Lista de secii care se va deschide va reprezenta seciile din cadrul spitalului caruia userul ii este administrator. La userii de grad 0 (administratorul general) va apare n plus i un buton pentru selecia spitalului, i ca i la cutare, n momentul selectrii unui spital, n lista de sectii se vor afia doar seciile din cadrul spitalului selectat anterior.

CONCLUZII In aceasta lucrarea am prezentat o nou soluie de implementare a aplicaiei DRGNaional, care elimin dificultile celei foloste astzi. In prezent este folosita o aplicatie bazata de MS Access 2000. nti de toate, MS Access 2000 este un sistem de administrare a bazelor de date i aministreaz eficient un numr redus de nregistrri : n jur de 20000-30000 nregistri, folosit n general in activitatea de management n companiile mici. Acesta este motivul pentru care, n loc s folosim MS

Pagina 34 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Access 2000 noi propunem un sistem de adminitrarea a bazelor de date mult mai puternic, numit MySQL. Aplicaie propusa ofer mai multe avantaje: anuleaz faza de criptare a datelor i transmiterea lor prin e-mail, deoarece poate aduce o mulime de probleme; datele primite prin e-mail de ctre Biroul Naional DRG trebuie salvate ntr-un anumit format, eventual baz de date, pentru a putea fi folosite pentru vizualizate sau pentru elaborarea unor rapoarte, statistici sau grafice ; cnd se adaug n aceeai baz de date informaii de la diverse surse, pot aparea probleme(de exemplu, valoarea cheii primare poate fi identica in unele fise. n acest caz trebuie fcute procese suplimentare nainte de salvarae n baza de date ; toatea acestae necesita timp). datele vzute la Biroul Naional DRG sunt totdeauna actulaizate(up to date); nu este necesar s se atepte sfritul unei anumite perioade de timp pentru a primi aceste date ; oricand datele pot fi vizualizate ca rapoarte, statistici sau grafice, lucru care este foarte important pentru domeniul medical. aplicaia, baza de date i serverul de baze de date trebuie instalate pe un singur computer(server) ; acesta va fi accesat de orice utilizator, n limita drepturilor sale, de pe propriul calculator, folosind un browser ; n acest fel nu este necesar ca aplicaia s fie instalat pe computerul fiecrui utilizator(client) ; bine inteles performanta serverului trebuie s fie foarte ridicat. In final am vrea sa specificam ca aplicatia este in stadiu de dezvoltare LISTING <Fisierul de logare: login1.jsp> <%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> <%@include file= "conexiune.jsp" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Login</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script language="javascript" <!-Pagina 35 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

function checkform(){ var mesaj=""; if ( (document.userform.nume.value.length==0) || (document.userform.parola.value.length==0) || (document.userform.grad.value.length==0) ) { mesaj=mesaj+"NU ati completat toate campurile .\n"; } if ( document.userform.nume.value.length<3 ) { mesaj=mesaj+"Numele trebuie sa aiba minim 3 caractere.\n"; } if ( document.userform.parola.value.length<5 ) { mesaj=mesaj+"Parola trebuie sa aiba minim 5 caractere.\n"; } if (!mesaj.equals("")) { mesaj="Corectati erorile!"+mesaj; return false; } else { return true; } } --> </script> </head> <body bgcolor='#EFFFFF'> <%! String sNume; String sParola; String sGrad; %> <% if (request.getParameter("nume")==null){ %>
Pagina 36 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<form method="post"> <center><fieldset> <font face="Times New Roman" size="5"> <legend>Autentificare Utilizator </legend> <img src="poze/doctor2.jpg" width="750" height="350" border="0" alt=""> <table> <tr> <td><table border="0" align="center" > <tr> <td align="right">Nume: </td> <td align="left"><INPUT name="nume" type="text" tabindex="1" size=20 maxlength=20>&nbsp;<br></td> <td align="right">Parola: </td> <td </tr> <tr> <td align="right">Grad:</td> <td align="left"><SELECT NAME="grad" > <OPTION SELECTED VALUE="">Select...</OPTION> <OPTION>0</OPTION> <OPTION>1</OPTION> <OPTION>2</OPTION> </SELECT><br> </td> </tr> </table ></td> </tr> <tr><table border="0" align="center"> <tr><td align="center"><input type="submit" value="Submit"><input type="reset" value="Reset"></td></tr> </table> </tr> </table> </fieldset></center>
Pagina 37 din 56

align="left"><INPUT

name="parola"

type="text"

tabindex="1"

size=20

maxlength=20>&nbsp;<br></td>

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

</form> <%} else{ //out.println(dataBaseUrl+" "+username+" "+password); sNume = request.getParameter("nume"); sParola = request.getParameter("parola"); sGrad = request.getParameter("grad"); if (sGrad.equals("0")){ //verific daca exista userul try{ Statement stmt = conn.createStatement(); String checkifuser = "SELECT * from tblusergrad0 WHERE Nume='"+sNume+"' && Parola ='"+sParola+"'"; ResultSet rs = stmt.executeQuery(checkifuser); if (! rs.next()){ response.sendRedirect("eroare.jsp"); } else{ String sFlag = rs.getString("Flag"); out.println(sFlag); if (sFlag.equals("A")){ session.setAttribute("drepturi",new String("1")); response.sendRedirect(response.encodeURL("user0A.jsp")); } if (sFlag.equals("C")){ session.setAttribute("drepturi",new String("2")); response.sendRedirect(response.encodeURL("user0C.jsp")); } } stmt.close(); } catch (SQLException e){out.println(e.getMessage());} } if (sGrad.equals("1")){
Pagina 38 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

try{ Statement stmt = conn.createStatement(); String checkifuser = "SELECT * from tblusergrad1 WHERE Nume='"+sNume+"' && Parola ='"+sParola+"'"; ResultSet rs = stmt.executeQuery(checkifuser); if (! rs.next()){ response.sendRedirect("eroare.jsp"); } else{ session.setAttribute("drepturi",new String("3")); response.sendRedirect(response.encodeURL("user1.jsp")); } stmt.close(); } catch (SQLException e){out.println(e.getMessage());} } if (sGrad.equals("2")){ try{ Statement stmt = conn.createStatement(); String checkifuser = "SELECT * from tblusergrad2 WHERE Nume='"+sNume+"' && Parola ='"+sParola+"'"; ResultSet rs = stmt.executeQuery(checkifuser); if (! rs.next()){ response.sendRedirect("eroare.jsp"); } else{ session.setAttribute("drepturi",new String("4")); session.setAttribute("IdSectie",rs.getString("IdSectie")); response.sendRedirect(response.encodeURL("user2.jsp")); } stmt.close(); } catch (SQLException e){out.println(e.getMessage());}
Pagina 39 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

} } %> </body> </html> <Fisierul user0A.jsp> <%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <!-- *** IMPORTANT STYLESHEET SECTION - Change the border classes and text colours *** --> <style> <!-itemBorder { border: 1px solid black } itemText { text-decoration: none; color: #FFFFFF; font: 12px Arial, Helvetica } crazyBorder { border: 2px outset #663399 } crazyText { text-decoration: none; color: #FFCC99; font: Bold 12px Arial, Helvetica } --> </style> </head> <frameset rows="18%,*">
Pagina 40 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<frame

src="<%=response.encodeURL("meniu.jsp?user=user0A")%>"

noresize

name="frame1" frameborder="no" > <frame src="<%=response.encodeURL("forma.jsp")%>" noresize name="frame2" frameborder="no" > </frameset><noframes></noframes> <BODY > user 0A </BODY> </html> <Fisierul optiuni0.jsp> var menu = new Array(); // Default colours passed to most menu constructors (just passed to functions, not // a global variable - makes things easier to change later in bulk). var defOver = '#336699', defBack = '#003366'; // Default 'length' of menu items - item height if menu is vertical, width if horizontal. var defLength = 22; // Menu 0 is the special, 'root' menu from which everything else arises. menu[0] = new Array(); menu[0][0] = new Menu(false, '', 265, 15, 17, '#669999', '#006666', '', 'itemText'); // Notice how the targets are all set to nonzero values... // The 'length' of each of these items is 40, and there is spacing of 10 to the next item. // Most of the links are set to '#' hashes, make sure you change them to actual files.

menu[0][1] = new Item(' Cautare', 'cautare.jsp', 'frame2', 80, 10, 1); menu[0][2] = new Item(' Vizualizare', 'vizualizare.jsp', 'frame2',100, 10, 2); menu[0][3] = new Item(' Rapoarte', 'rap.jsp', 'frame2', 80, 10, 3); menu[0][4] = new Item(' Setup', 'setup.jsp', 'frame2', 80, 10, 4);
Pagina 41 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

menu[0][5] = new Item(' Exit', 'login1.jsp', 'frame2', 80, 10, 5);

// Cautare menu. menu[1] = new Array(); menu[1][0] = new Menu(true, '>', 0, 22, 140, defOver, defBack, 'itemBorder', 'itemText'); menu[1][1] = new Item(' Diagnostic', 'diag0.jsp', 'frame2', defLength, 0, 0); menu[1][2] = new Item(' Interventii Chirurgicale', 'intch0.jsp', 'frame2', defLength, 0, 0); menu[1][3] = new Item(' Explorari Functionale', 'explfct0.jsp', 'frame2', defLength, 0, 0); //Vizualizare menu menu[2] = new Array(); menu[2][0] = new Menu(true, '<', 0, 22, 160, defOver, defBack, 'itemBorder', 'itemText'); menu[2][1] = new Item('Pacienti', 'pac0.jsp', 'frame2', 20, 0, 0); menu[2][2] = new Item('Diagnostice secundare ', 'diagn0.jsp', 'frame2', 20, 0, 0); menu[2][3] = new Item('interventii Chirurgicale', 'interv0.jsp', 'frame2',20, 0, 0); menu[2][4] = new Item('Explorari Functionale', 'expl0.jsp', 'frame2', 20, 0, 0); // Rapoarte menu menu[3] = new Array(); menu[3][0] = new Menu(true, '>', 0, 22, 130, defOver, defBack, 'itemBorder', 'itemText'); //Setup menu menu[4] = new Array(); menu[4][0] = new Menu(true, '>', 0, 22, 120, defOver, defBack, 'itemBorder', 'itemText'); menu[4][1] = new Item('Lista Spitale', 'setup.jsp', 'frame2', 20, 0, 6); //Iesire menu.
Pagina 42 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

menu[5] = new Array(); menu[5][0] = new Menu(true, '<', 0, 22, 90, defOver, defBack, 'itemBorder', 'itemText'); // Lista Spital popout menu[6] = new Array(); // Leftwards popout with a negative x and y relative to its trigger. menu[6][0] = new Menu(true, '>', 110, 18, 90, defOver, defBack, 'itemBorder', 'itemText'); menu[6][1] = new Item('Spital Nou', 'lspital.jsp', 'frame2', 20, 0, 0); menu[6][2] = new Item('User NOU', 'lusersp.jsp', 'frame2', 20, 0, 0); <Fisierul luserspital.jsp> <%@ page contentType="text/html; charset=iso-8859-1" language="java"

import="java.sql.*" errorPage="" %> <%@include file= "conexiune.jsp" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Proiect Licenta</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <% %> drept:<%=drepturi%> <%! String sNume; String sParola; %>
Pagina 43 din 56

String drepturi = (String) session.getAttribute("drepturi");

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<% if (request.getParameter("nume")==null){ %> <form method="post"> <center><fieldset> <font face="Times New Roman" size="5"> <legend>Creare user spital </legend> <img src="poze/doctor2.jpg" width="600" height="280" border="0" alt=""> <table> <tr> <td><table border="0" align="center" > <tr> <td align="right">Nume: </td> <td align="left"><INPUT name="nume" type="text" tabindex="1" size=20 maxlength=20>&nbsp;<br></td> <td align="right">Parola: </td> <td </tr> <tr> <td align="right">Spitalul:</td> <td align="left"><SELECT NAME="Spital" > <OPTION SELECTED VALUE="">Select...</OPTION> <% align="left"><INPUT name="parola" type="text" tabindex="1" size=20 maxlength=20>&nbsp;<br></td>

try{ Statement stmt = conn.createStatement(); String sSql = "SELECT * from tblspital"; ResultSet rs = stmt.executeQuery(sSql); while (rs.next()){ %> <option value="<%=rs.getString("IdSpital")%>"> <%=rs.getString("NumeSpital")%></option>
Pagina 44 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<% } stmt.close(); } catch (SQLException e){out.println(e.getMessage());} %> </SELECT><br> </td> </tr> </table ></td> </tr> <tr><table border="0" align="center"> <tr><td align="center"><input type="submit" value="Submit"><input type="reset" value="Reset"></td></tr> </table> </tr> </table> </fieldset></center> </form> <%} else{ //out.println(dataBaseUrl+" "+username+" "+password); sNume = request.getParameter("Nume"); sParola = request.getParameter("parola"); out.println(sNume+" "+sParola);

} %> </body> </html> <Fisierul pac1. jsp>


Pagina 45 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<%@

page

contentType="text/html;

charset=iso-8859-1"

language="java"

import="java.sql.*" errorPage="" %> <%@include file= "conexiune.jsp" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Proiect Licenta</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body background="poze/stetoscop2.jpg" > <% %> drept:<%=drepturi%> spital:<%=IdSpital%> <% String sNumeSec=""; %> <center><FIELDSET> <LEGEND><b> vizualizare </b> </LEGEND> <table align="center"> <form method="post" > <table border="0" align="center"> <td> <td align="right"><B>Nume Sectie:</B></td> <td align="left"><INPUT name="numesec" type="text" size=12 maxlength=20 value="<%=sNumeSec=request.getParameter("numesec")%>"><br></td> <%sNumeSec=request.getParameter("numesec");%> </td> <td>
Pagina 46 din 56

String drepturi = (String) session.getAttribute("drepturi");

String IdSpital = (String) session.getAttribute("IdSpital");

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<table border="0" align="right"> <tr><td align="center"><input name="Afiseaza" type="submit" value="Afiseaza" ></td></tr> <tr><td align="center"><input type="reset" value="Reset"></td></tr> </table></td> </table></center> <% if (request.getParameter("Afiseaza")!=null){ out.println("S-a gasit urmatorul rezultat:"); try{ Statement stmt = conn.createStatement(); String checkifuser = "SELECT from where IdPacient,NumePacient,PrenumePacient,DataInternare,NumeMedic, SpecialitateMedic,NumeSectie,NumeSpital,Localitate tblpacient,tblMedic,tblsectie,tblspital nt.IdMedic=tblmedic.IdMedic)AND (tblmedic.IdSectie=tblsectie.IdSectie)"; ResultSet rs = stmt.executeQuery(checkifuser); %> <table bordercolor="#666666" border="3" align="center"> <tr> <td><b>IdPacient</b></td> <td><b>NumePacient</b></td> <td><b>PrenumePacient</b></td> <td><b>Data Internare</b></td> <td><b>Nume Medic</b></td> <td><b>Specialitatea</b></td> <td><b>Nume Sectie</b></td> <td><b>Nume Spital</b></td> <td><b>Localitate</b></td> </tr> <% while(rs.next()){ //out.println(rs.getString("NumePacient"));
Pagina 47 din 56

(tblSectie.IdSectie='"+sNumeSec+"')AND(tblsectie.IdSpital=tblspital.Idspital)AND(tblPacie

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

%> <tr> <td><%=rs.getString("IdPacient")%></td> <td><%=rs.getString("NumePacient")%></td> <td><%=rs.getString("PrenumePacient")%></td> <td><%=rs.getString("DataInternare")%></td> <td><%=rs.getString("NumeMedic")%></td> <td><%=rs.getString("SpecialitateMedic")%></td> <td><%=rs.getString("NumeSectie")%></td> <td><%=rs.getString("NumeSpital")%></td> <td><%=rs.getString("Localitate")%></td> </tr> <%} %> </table> <% stmt.close(); } catch (SQLException e){out.println(e.getMessage());} } %> </body> </html> <Fisierul rapp1.jsp> <%@ page contentType="text/html; charset=iso-8859-1" language="java"

import="java.sql.*" errorPage="" %> <%@include file= "conexiune.jsp" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html>
Pagina 48 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<head> <title>Proiect Licenta</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>

<body background="poze/doctor11.jpg"> <% String drepturi = (String) session.getAttribute("drepturi"); String IdSectie = (String) session.getAttribute("IdSectie"); String IdSpital = (String) session.getAttribute("IdSpital"); %> drept:<%=drepturi%><br> <% String sNume; String sParola; String sSpital=""; String sSectie=""; String sDataI=""; String sDataF=""; %> <center><FIELDSET> <LEGEND><b> Raport Sectie </b> </LEGEND> <table align="center"> <form method="post" > <td><table border="0" align="center"> <tr> <td align="right">Spitalul:</td> <td align="left"><SELECT NAME="Spital" > <OPTION SELECTED VALUE="">Select...</OPTION> <% try{ Statement stmt = conn.createStatement(); String sSql = "SELECT * from tblspital"; ResultSet rs = stmt.executeQuery(sSql);
Pagina 49 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

while (rs.next()){ %> <option value="<%=rs.getString("IdSpital")%>"> <%=rs.getString("NumeSpital") %></option> <% sSpital=(String)rs.getString("NumeSpital"); out.println(sSpital); } stmt.close(); } catch (SQLException e){out.println(e.getMessage());} %> </SELECT><br> </td> <td align="right">Sectia:</td> <td align="left"><SELECT NAME="Sectia" > <OPTION SELECTED VALUE="">Select...</OPTION> <% try{ Statement stmt = conn.createStatement(); String sSql = "SELECT * from tblSectie where (tblSectie.IdSpital='"+sSpital+"')"; ResultSet rs = stmt.executeQuery(sSql); while (rs.next()){ %> <option value="<%=rs.getString("IdSectie")%>"> <%=rs.getString("NumeSectie") %><%=rs.getString("NumarSectie")%></option> <% } stmt.close(); } catch (SQLException e){out.println(e.getMessage());} %> </SELECT><br> </td>

Pagina 50 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

</tr> <tr> <td align="right">Data inceput:</td> <td align="left"><INPUT name="data_inc" type="text" size=12 maxlength=20 value="<%=sDataI=request.getParameter("data_inc")%>"><br></td> <%sDataI = request.getParameter("data_inc");%> <td align="right">Data sfarsit:</td> <td align="left"><INPUT name="data_sf" type="text" size=12 maxlength=20 value="<%=sDataF=request.getParameter("data_sf")%>"><br></td> <%sDataF = request.getParameter("data_sf");%> </tr> </table> </td> <td><table border="0" align="center"> <tr><td align="center"><input name="Afiseaza" type="submit" value="Afiseaza"> <tr><td align="center"><input type="reset" value="Reset"></td></tr> </table> </td> </table></center> <% if (request.getParameter("Afiseaza")!=null){ out.println("Perioada:"); out.println(sSpital);out.println("-->");out.println(sDataF); try{ Statement stmt = conn.createStatement(); String checkifuser where = SpecialitateMedic "SELECT from NumePacient,PrenumePacient,DataInternare,NumeMedic, tblpacient,tblMedic,tblsectie,tblspital (tblPacient.DataInternare>='"+sDataI+"')AND (tblPacient.DataInternare<='"+sDataF+"')AND (tblmedic.IdSectie='"+IdSectie+"')AND(tblPacient.IdMedic=tblmedic.IdMedic)AND(tblsecti e.IdSpital=tblSpital.IdSpital)"; ResultSet rs = stmt.executeQuery(checkifuser); %>
Pagina 51 din 56

(tblsectie.IdSectie='"+IdSectie+"')AND

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<table bordercolor="#666666" border="3" align="center"> <tr> <td><b>NumePacient</b></td> <td><b>PrenumePacient</b></td> <td><b>Data Internare</b></td> <td><b>Nume Medic</b></td> <td><b>Specialitatea</b></td> </tr> <% while(rs.next()){ //out.println(rs.getString("NumePacient"));%> <tr> <td><%=rs.getString("NumePacient")%></td> <td><%=rs.getString("PrenumePacient")%></td> <td><%=rs.getString("DataInternare")%></td> <td><%=rs.getString("NumeMedic")%></td> <td><%=rs.getString("SpecialitateMedic")%></td> </tr> <%} %> </table> <% } catch (SQLException e){out.println(e.getMessage());} } %> </body> </html> <Fisierul diagn0.jsp> <%@ page contentType="text/html; charset=iso-8859-1" language="java" stmt.close();

import="java.sql.*" errorPage="" %> <%@include file= "conexiune.jsp" %>


Pagina 52 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<%@ page import="java.util.*"%> <%@ page import="java.text.*"%> <%@ page import="java.io.*"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Proiect Licenta</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <% %> drept:<%=drepturi%><br> <b>Diagnostice</b> <center><FIELDSET> <LEGEND><b> Vizualizare Diagnostice </b> </LEGEND> <table align="center"> <form method="post" > <td><table border="0" align="center"> <tr><td <tr><td </table> </TD> </table> <% try{ Statement stmt = conn.createStatement(); String checkifuser = "SELECT IdDiag,DenumireDiag,Cod from tbldiagnostic "; ResultSet rs = stmt.executeQuery(checkifuser);
Pagina 53 din 56

String drepturi = (String) session.getAttribute("drepturi");

String IdSectie = (String) session.getAttribute("IdSectie");

align="center"><input align="center"><input

name="OrdonareCod" name="OrdonareDen"

type="submit" type="submit"

value="Ordonare dupa Cod"> value="Ordonare dupa Denumire"></td></tr>

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

%> <table bordercolor="#666666" border="3" align="center"> <tr> <td><b>IdDiagnostic</b></td> <td><b>Denumire Diagnostic</b></td> <td><b>Cod Diagnostic</b></td> </tr> <% while(rs.next()){ //out.println(rs.getString("NumePacient")); %> <tr> <td><%=rs.getString("IdDiag")%></td> <td><%=rs.getString("DenumiredIag")%></td> <td><%=rs.getString("Cod")%></td> </tr> <%} %> </table> <% stmt.close(); } catch (SQLException e){out.println(e.getMessage());} if (request.getParameter("OrdonareCod")!=null){ out.println("Lista diagnostice ordonate dupa cod:"); try{ Statement stmt = conn.createStatement(); String checkifuser = "SELECT IdDiag,DenumireDiag,Cod from tbldiagnostic Order by Cod"; ResultSet rs = stmt.executeQuery(checkifuser); %> <table bordercolor="#666666" border="3" align="center"> <tr>
Pagina 54 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<td><b>IdDiagnostic</b></td> <td><b>Denumire Diagnostic</b></td> <td><b>Cod Diagnostic</b></td> </tr> <% while(rs.next()){ //out.println(rs.getString("NumePacient")); %> <tr> <td><%=rs.getString("IdDiag")%></td> <td><%=rs.getString("DenumiredIag")%></td> <td><%=rs.getString("Cod")%></td> </tr> <%} %> </table> <% stmt.close(); } catch (SQLException e){out.println(e.getMessage());} } if (request.getParameter("OrdonareDen")!=null){ out.println("Lista diagnostice ordonate dupa denumire:"); try{ Statement stmt = conn.createStatement(); String checkifuser = "SELECT IdDiag,DenumireDiag,Cod from tbldiagnostic Order by DenumireDiag"; ResultSet rs = stmt.executeQuery(checkifuser); %> <table bordercolor="#666666" border="3" align="center"> <tr> <td><b>IdDiagnostic</b></td> <td><b>Denumire Diagnostic</b></td>
Pagina 55 din 56

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<td><b>Cod Diagnostic</b></td> </tr> <% while(rs.next()){ //out.println(rs.getString("NumePacient")); %> <tr> <td><%=rs.getString("IdDiag")%></td> <td><%=rs.getString("DenumiredIag")%></td> <td><%=rs.getString("Cod")%></td> </tr> <%} %> </table> <% stmt.close(); } catch (SQLException e){out.println(e.getMessage());} } %> </body> </html>

Pagina 56 din 56

S-ar putea să vă placă și