SISTEM DE LOCALIZARE A MEDICILOR ÎN FUNCȚIE DE [620867]
FACULTATEA DE AUTOMATICĂ ȘI CALCULATOARE
DEPARTAMENTUL DE AUTOMATICĂ
SISTEM DE LOCALIZARE A MEDICILOR ÎN FUNCȚIE DE
DIAGNOSTIC
PROIECT DE DIPLOM Ă
Autor: Mădălina -Florina SPANU
Coordonator: Prof. dr. ing. Honoriu VĂLEAN
2015
FACULTATEA DE AUTOMATICĂ ȘI CALCULATOARE
DEPARTAMENTUL DE AUTOMATICĂ
VIZAT,
DECAN, Director
DEPARTAMENT ,
Prof. dr. ing. Liviu MICLEA Prof. dr. ing. Honoriu VĂLEAN
Autor Mădălina – Florina SPANU
SISTEM DE LOCALIZARE A MEDICILOR ÎN FUNCȚIE DE DIAGNOSTIC
1. Enunțul temei: Lucrarea are ca temă ”Sistem de localizare a medicilor din județul
Cluj în funcție de diagnostic”. Prin aplicație se dorește îmbunătățirea eficienței
operaționale și flexibili tate în căutarea informației solicitate .
2. Conținutul proiectului: Proiectul este structurat în șapte mari capitole: Introducere,
Obiective generale și specifice, Studiu Bibliografic, Analiză și proiectare,
Implementarea, Testare ș i Validare, Concluzii. T otodată, sunt incluse secțiunile
Bibliografie, Anexe.
3. Locul documentației: Universitatea Tehnică din Cluj – Napoca, Facultatea de
Automatică și Calculatoare, Departamentul de Automatică, Specializarea Informatică
Aplicată.
4. Consultanți: –
5. Data emiterii teme i: 4 Noiembrie 2014
6. Data predării: 17 Iunie 2015
Semnătura autorului _____________________
Semnătura coordonatorului _______________
FACULTATEA DE AUTOMATICĂ ȘI CALCULATOARE
DEPARTAMENTUL DE AUTOMATICĂ
Declarația autorului,
Subsemnata Mădălina – Florina SPANU , student ă a Facultății de Automatică și
Calculatoare, Universitatea Tehnică din Cluj -Napoca, declar că ideile, analiza, proiectarea,
implementarea, rezultatele și concluziile cuprinse în acest proiect de diplomă constituie
efortul meu propriu, mai puțin acele elemente ce nu îmi aparțin, pe care le indic și recunosc ca
atare.
Declar de asemenea că, după știința mea, lucrarea în această formă este originală și nu
a mai fost niciodată prezentată sau depusă în alte locuri sau alte instituții decât cele indicate în
mod expres de mine.
Data: 17.06.2015 Autor: Mădălina -Florina SPANU
Număr matricol: 21020899
Semnătura:____________
FACULTATEA DE AUTOMATICĂ ȘI CALCULATOARE
DEPARTAMENTUL DE AUTOMATICĂ
SINTEZA
proiectului de diplomă cu titlul:
SISTEM DE LOCALIZARE A MEDICILOR ÎN FUNCȚIE DE DIAGNOSTIC
Autor: Mădălina – Florina SPANU
Coordonator: Prof. dr. ing. Honoriu VĂLEAN
1. Cerințele temei: realizarea unui sistem de localizare pe hartă a medicilor specialiști din
județul Cl uj, în funcție de diagnosticul pacientului prin studierea unor date medicale,
definirea și implementarea unui algoritm capabil să analizeze informațiile primite, urmând
să fie realizată localizarea propriu -zisă pe harta celor de la Google.
2. Soluții alese: se realizează o aplicație web urmărind câțiva pași intermediari: căutarea
de informații medicale, realizarea bazei de date cu toate datele necesare, realizarea design –
ului, realizarea unei interfețe pentru autentificarea și înregistrarea utilizatorilor, int egrarea
unei hărți oferite de cei de la Google (Google Maps A PI).
3. Rezultate obținute: s-au realizat toate cerințele necesare funcționalității aplicației.
Programul a fost scris utilizând mai multe limbaje de programare: HTML, CSS, JavaScript,
PHP.
4. Testări și verificări: produsul software a fost testat și verificat. Secvențele de testare
sunt prezentate în capitolul ”Testare și Validare”, cu câteva menționări și în ”Analiză și
Proiectare”, ”Implementarea” .
5. Contribuții personale: realizarea părții de front -end și back -end a aplicației web de
localizare a medicilor specializați din județul Cluj, s tocarea informațiilor găsite într -o bază
de date solidă.
6. Surse de documentare: Biblioteca UTCN, Internet, Articole .
Data:_ 17.06.2015 _ Semnătura autorului_________ __ _
Semnătura coordonatorului____________
Cuprins
Cuprins
Capitolul 1. Introducere ………………………….. ………………………….. ………………………….. ……….. 1
1.1 Istoric ………………………….. ………………………….. ………………………….. ……………………… 1
1.2 Context ………………………….. ………………………….. ………………………….. ……………………. 3
1.3 Domeniu ………………………….. ………………………….. ………………………….. ………………….. 3
1.4 Conținut ………………………….. ………………………….. ………………………….. ………………….. 3
Capitolul 2. Obiective generale și specifice ………………………….. ………………………….. …………. 5
2.1 Motivația ………………………….. ………………………….. ………………………….. …………………. 5
2.2 Tema ………………………….. ………………………….. ………………………….. ………………………. 5
2.3 Scopul ………………………….. ………………………….. ………………………….. …………………….. 6
2.4 Obiective ………………………….. ………………………….. ………………………….. …………………. 6
2.5 Specificații ………………………….. ………………………….. ………………………….. ………………. 7
2.5.1 Cerințe funcționale ………………………….. ………………………….. …………………………. 7
2.5.2 Cerințe nefuncționale ………………………….. ………………………….. ………………………. 8
Capitolul 3. Studiu bibliografic ………………………….. ………………………….. ………………………….. 9
3.1 Front -End și Back -End ………………………….. ………………………….. ………………………….. 9
3.1.1 Dezvoltare software ………………………….. ………………………….. ………………………… 9
3.1.2 HTML & CSS ………………………….. ………………………….. ………………………….. ….. 10
3.1.3 JavaScript ………………………….. ………………………….. ………………………….. ……….. 12
3.1.3.1 Parte introductivă ………………………….. ………………………….. ………………………. 12
3.1.3.2 Variabile, func ții și clase în JavaScript ………………………….. ……………………… 14
3.1.3.3 JQuery ………………………….. ………………………….. ………………………….. …………. 15
3.1.4 XAMPP ………………………….. ………………………….. ………………………….. ………….. 16
3.1.5 PHP ………………………….. ………………………….. ………………………….. ………………… 17
Capitolul 4. Analiză și proiectare ………………………….. ………………………….. ……………………… 21
4.1 Interacțiunea utilizatorului cu Aplicația Web ………………………….. ………………………. 21
4.2 Arhitectura sistemului ………………………….. ………………………….. ………………………….. 21
4.3 Flux de evenimente în realizarea obiectivelor aplicației ………………………….. ………… 22
Cuprins
4.3.1 Diagrame de secvență ………………………….. ………………………….. ……………………. 23
4.3.2 Diagrame de utilizare ………………………….. ………………………….. …………………….. 23
4.3.3 Digrama mașinilor de stare ………………………….. ………………………….. …………….. 31
4.3.4 Proiectarea interfeței ………………………….. ………………………….. ……………………… 31
Capitolul 5. Implementarea ………………………….. ………………………….. ………………………….. …. 34
5.1 Prelucrarea și stocarea informațiilor ………………………….. ………………………….. ………….. 34
5.2 Implementare soluție ………………………….. ………………………….. ………………………….. …… 38
5.2.1. Înregistrare ………………………….. ………………………….. ………………………….. ………. 38
5.2.2. Autentificare ………………………….. ………………………….. ………………………….. ……. 40
5.2.3. Trimiterea cererilor la administrator ………………………….. ………………………….. … 40
5.2.4. Afișarea poziției curente a utilizatorului p e hartă ………………………….. …………… 41
5.2.5. Poziționarea medicului pe harta Google ………………………….. ……………………….. 43
5.2.6. Calculul distanței utilizator -medic ………………………….. ………………………….. …… 45
Capitolul 6. Testare și validare ………………………….. ………………………….. ………………………… 47
6.1 Testare ………………………….. ………………………….. ………………………….. …………………… 47
6.1.1 Înregistrare ………………………….. ………………………….. ………………………….. ………. 47
6.1.2 Identificare ………………………….. ………………………….. ………………………….. ………. 48
6.1.3 Baze de Date ………………………….. ………………………….. ………………………….. ……. 49
6.1.4 Localizare ………………………….. ………………………….. ………………………….. ……….. 50
6.2 Validare ………………………….. ………………………….. ………………………….. …………………. 51
Capitolul 7. Concluzii ………………………….. ………………………….. ………………………….. …………. 53
7.1 Cerințe de interfață ………………………….. ………………………….. ………………………….. ….. 53
7.2 Dezvoltări ulterioare ………………………….. ………………………….. ………………………….. .. 53
7.3 Contribuții ………………………….. ………………………….. ………………………….. ……………… 54
Bibliografie ……………………………………. ………………………………………………………………………… 55
Anexe …………………………………….. …………………………………………………………………………… ….. 56
Capitolul 1
1
Capitolul 1. Introducere
1.1 Istoric
În zilele noastre atât tehnologia cât și internetul au devenit o parte esențială a vieții
cotidiene , dând amploare dezvoltării unor noi forme de activități și interacțiuni sociale.
Internetul, după cum precizează și sursa, este un sistem global de rețele computerizate,
interconectate care folosesc protocolul standard de comunicare ”Transmission Control
Protocol” și ”Internet Protocol” (TCP/IP) cu scopul legării între ele a miliardelor de dispozitive
din întreaga lume. [1]
Odată ce o persoană se conectează la internet, o nouă lume este pe c ale să ia viață prin
intermediul calculatorului. Avantajul cel mai mare pe care îl are este că poate fi folosit de orice
generație, de la cei tineri până la cei vârstnici, fiind o sursă nelimitată de informație. Așadar,
poate fi folosit atât în scop educaț ional de către elevi, studenți și profesori, social prin reducerea
substanțială a timpului necesar comunicării între persoane aflate în diferite părți ale globului, la
distanțe mai mici sau mai mari – prin intermediul rețelelor de socializare sau pentru re creare a,
amuzament ul și hobby -urile fiecăruia. Mai mult decât atât, studiile bazate pe internet și
utilizarea acestuia de către cei de vârstă medie și înaintată aduc rezultate pozitive, printre care și
acela că navigarea zilnică pe internet poate ajuta la îmbunătățirea unor funcții ale creierului,
stimulând nevoia de cunoaștere.
Se poate spune, totuși, că internetul nu poate exista fără tehnologia din spate care îl
utilizează. Un exemplu poate fi motorul de căutare al unui browser web, un program care caută
pe web informația care se bazează pe termenii de căutare, cunoscuți sub numele de cuvinte
cheie. Astfel utilizatorul primește informația solicitată și poate interacționa cu paginile web
conținute într -un site.
Datorită numărului mare de informație care ne cesită reutilizarea periodică, a aplicațiilor
foarte avansate cu funcționalități din ce în ce mai complexe s -a ajuns la stocarea datelor în baze
de date. În acest fel, majoritatea aplicațiilor web din ziua de astăzi necesită înregistrare și
identificare. Mai mult decât atât, aplicațiile mai complexe ca, de exemplu, magazinele online
conțin foarte multe produse având posibilitatea de le vizualiza împreună cu toate specificațiile
necesare, de a comanda direct online sau de a lăsa comentarii refer itoare la ca litatea produselor.
Pe de altă parte, r ețelele de socializare au devenit cele mai utilizate în ultimul deceniu, datorită
ușurinței cu care pot fi manevrate și a sumedeniei de aplicații care vin în cadrul lor.
Având în vedere faptul că lucrarea în cauză va avea în centru crearea, testarea și
funcționarea unei Aplicații Web, cu optimizările aduse și beneficiile aferente, în paragrafele
următoare se va introduce o scurtă prezentare a aplicațiilor web.
O scurtă definiție ar putea fi aceea că Aplicațiile Web sunt programe stocate pe un
server, apoi trimise peste tot pe internet prin intermediul unui browser web care suportă limbaje
de programare, fiind generat dinamic (de exemplu combinația dintre HTML, CSS, JavaScript)
și care permite utilizatorilor preluarea și interacționarea cu datele conținute de paginile web din
cadrul unui site. [2]
Pentru a înțelege mai bine cum funcționează aplic ațiile web în figura de mai jos (Figura
1.1.1 ) este prezenta t detaliat modelul aplicației web în trei straturi. Primul strat repr ezintă
browserul web sau, mai precis , interfața cu utilizatorul . Cel de-al doilea strat se poate defini ca
Capitolul 1
2
fiind instrumentul de generare a unui conținut dinamic, iar ultimul, dar nu cel din urmă,
reprezintă baza de date cu toate informațiile și datele cl ientului (de exemplu , nume de utilizatori
și parole, detalii despre cardurile de credit etc.).
Figura1. 1 Modelul unei Aplicații Web în trei straturi
Din perspectiva utilizatorilor, putem vorbi doar despre tipurile de aplicații web care se
bazează pe:
site-uri de rețele de socializare
site-uri pentru afișarea și editarea imaginilor
calendare online
site-uri de tip chat
site-uri de cumpărături online
servicii de mail
blog-uri
editor de șiri online
motoare de căutare pe internet
severe de hărți
dicționare online
aplicații software de tip desktop
Dezvoltarea aplicațiilor web se referă la domeniul programării calculatoarelor
specializate în aplicații care sunt folosite pe internet, având anumite avantaje printre care putem
enumera:
creșterea gradului de conștientizare a disponibilității servicii lor, industriei sau
persoanelor
crearea unui sistem care se poate extinde atât local cât și global, astfel, oamenii
din locații diferite pe glob nu trebuie să își mai facă griji pentru fusul or ar
standardizarea pr oiectării interfeței
posibilitatea accesării de către utilizatori 24 de ore din 24
descărcarea, instalarea sau actualizarea nu vor fi necesare, deoarece totul se
realizează pe site, aplicațiile fiind mereu la zi
flexibilitate în utiliza rea aplicațiilor pe diferite platforme, din moment ce se află
pe internet fiind necesar un simplu browser pentru conectare
Capitolul 1
3
datele, operațiile, bazele de date sunt gestionate de administrator; ele nu vor
exista niciodată în calculatorul utilizatorilor, iar aceștia nu vor putea avea acces
la ele
Dar ca orice alt produs pe parte de web întâmpină și dezavantaje, ca de exemplu:
problema securității : orice slăbiciune permite ”hacker -ilor” să acceseze informațiile
direct din baza de date
aplicațiile web trebuie să fie disponibile non -stop ceea ce poate fi un punct critic pentru
suportul din partea serverelor
în momentul în care datele (imagini, informații) sunt introduse în aplicație ele pot fi
copiate , fiind accesibile tuturor pe web
1.2 Context
Funcționarea întregul ui proiect se bazează pe prelucrarea mai multor date cu ajutorul
unui utilizator care după momentul autentificării are acces la toate informațiile medicale care
sunt conținute în aplicație.
Funcționalitatea proiectului va fi asemenea aplicațiilor de naviga re generală, la care se
vor aduce îmbunătățiri. Utilizatorii vor avea permisiunea de a vizualiza întreaga biblioteca
medicală, având posibilitatea de a filtra informația după anumite criterii de sortare în funcție de
necesitatea fiecăruia . De asemenea, pe lângă datele despre medicii speci aliști vor avea
permisiunea de a accesa harta de localizare, permițând astfel calcularea distanței dintre client
(posibilul pacient) și medic (cabinetul medical) .
În acest mod, se urmărește satisfacerea nevoilor paciențilo r care nu vor mai fi nevoiți să
piardă timp prețios în căutarea medicului specialist , de care au nevoie , prin solicitări de
informații de la rude, prieteni sau alți medici, toate informațiile necesare fiind doar la ”un click”
distanță.
1.3 Domeniu
Problema pr opusă spre rezolvare se încadrează în domeniul medical și are ca scop
minimizarea timpului în care clientul, în general pacientul, caută informații pentru alegerea
unui medic specialist in funcție de diagnosticul primit, oferirea unor servicii care răspun d
cerințelor medicale, siguranță și confort.
Prin realizarea aplicației web se urmărește eficientizarea modului de informare a
clienților, fiind necesar să se poată oferi informația în orice moment. Pentru a împiedica
efectuarea de înscrieri fictive care p ot conduce la pierderi importante de timp se vor folosi
conturi cu câteva date personale și parole de autentificare. Pentru fiecare utilizator în parte se va
impune realizarea unui modul independent asigurând suport total satisfacerii necesităților.
1.4 Conțin ut
Documentul de față este structurat în șapte mari capitole care descriu pe larg etapele în
vederea realizării cerințelor de implementare ale aplicației, fiecare capitol fiind prezentat pe
scurt în următoarele paragrafe.
Primul capitol va acoperi partea de introducere. Își propune să aducă la cunoștință un
scurt istoric despre internet și tehnologia din zilele noastre, urmat de contextul și domeniul
Capitolul 1
4
proiectului cu scopul de a realiza o idee generală despre funcționalitățile aplicației web.
Totodată, are s tructurat toate informațiile regăsite în document pe fiecare capitol în parte.
Capitolul al doilea cuprinde motivul care a dus la luarea deciziei de a crea această
aplicație și detaliază scopul și obiectivele care au ca rezultat realizarea proiectului. Tot în acest
capitol întâlnim o prezentare a temei propriu -zise cu specificații riguroase referitoare la
cerințele funcționale și nefuncționale, definindu -se atât funcțiile pe care trebuie sa le
îndeplinească, cât și necesitățile minimale necesare soluției pr opuse pentru o funcțion are
optimă.
Cel de -al treilea capitol va conține studiul despre documentarea bibliografică necesare
proiectării sistemului informatic cu informații despre limbajele utilizate pentru crearea
conceptului.
Capitolele patru și cinci sunt dependente unul față de celălalt. Pot fi considerate cele mai
importante, deoarece aici se prezintă în detaliu aplicația implementată, principalele
funcționalități și soluția propusă din punct de vedere teoretic cu explicațiile și demonstrațiile
aferente. Se detaliază baza de date cu fiecare tabelă existentă și modul de funcționare a fiecărei
componente folosite. Cu acuratețe, se exemplifică cele precedent specificate prin intermediul
diagramelor.
Capitolul șase se dedică testării și validării funcționării aplicației web cu explicațiile și
rezultatele obținute în urma acestora.
În ultimul capitol sunt prezentate concluziile finale obținute în urma implementării,
proiectării și testării aplicației și posibilitățile de dezvoltare ulterioară existente care pot fi
aplicate.
La finalul lucrării se vor pune la dispoziție anexa cu informații relevante și bibliografia
menționată pe parcursul celor șa pte capitole.
Capitolul 2
5
Capitolul 2. Obiective generale și specifice
2.1 Motivația
În ultimul deceniu, numărul oamenilor care au decedat din cauza incorectitudinilor făcute de
medici în diagnosticare, tratament sau pe masa de operații a crescut în continuu. ”The Journal
of Patient Safety”, un jurnal renumit în Statele Unite ale Americii, dedicat publicării inovațiilor
din toate domeniile ce u rmăresc siguranța pacienților, a publicat recent u n studiu cu care s -a
ajuns la concluzia că mai mult de 440000 de oameni mor în fiecare an datorită erori lor
medicale care pot fi prevenite în spitale . Zeci de mii mor de asemenea în afara spitalelor
datori tă unor greșeli care ar fi putut fi prevenite, cum ar fi decese datorate diagnostice lor
eronate sau din cauza medicamentației greșite. [3]
Când vine vorba de alegerea cu exactitate a medicului specialist care te poate ajuta în
vindecarea bolii cu care ai fo st diagnosticat este necesar să cunoști anumiți termeni care te ajută
în înțelegerea capacității, pregătirii și acreditării acestuia . Majoritatea medicilor au o instruire
de bază care constă în învățământul premedical, apoi școala medicală, urmând în cele din urmă
învățământul medical universitar . Ei sunt nevoiți să treacă un examen pentru a deveni licențiați
în practicarea meseriei. În cele din urmă, orice persoană care are nevoie de servicii medicale ar
trebui, mai întâi, să își răspundă la următoarele în trebări:
Medicul în cauză este sau nu licențiat pentru a practica medicina în statul
dumneavoastră?
Ce tip de pregătire medicală are (școala medicală, rezidenție, internship -uri)?
Este certificat în specializarea de care ai nevoie?
Acceptă asigurarea medic ală sub formă de plată?
Răspunzând la întrebările de mai sus poți deduce nivelul minim de competență al unui
medic și, totodată, rezultatele pe care ajungi să le ai în cazul în care alegi să începi un tratament
sub supravegherea sa.
În cazul în care ai dej a un diagnostic și un plan de tratament, dar dorești o a doua opinie înainte
de începerea tratamentului poți începe prin a cere sfatul unui alt specialist. Pentru unele
probleme de sănătate este necesar, de exemplu, dacă doctorul recomandă operația chirurg icală,
o părere din partea unui chirurg specialist.
Oricare ar fi motivele pentru care te poți afla în căutarea unui medic este foarte important să îl
gasești pe unul dintre cei mai buni, deoarece în joc este sănătatea ta. O modalitate de a găsi un
medic s pecializat este de a cere o trimitere de la medicul de familie. Altfel, există posibilitatea
de a cunoaște dumneavoastră un specialist prin experiența proprie sau a unui membru al
familiei, coleg sau prieten. Următoarele resurse: unități medicale, societăț i locale medicale,
biblioteci medicale publice și nu în ultimul rând aplicații web realizate special pentru astfel de
solicitări, pot de asemenea oferi informații cu date despre medicii care se specializează în
tratarea bolilor sau condițiilor specifice.
2.2 Tema
Lucrarea realizată de mine are ca temă ”Sistem de localizare a medicilor în funcție de
diagnostic”. Prin aplicație se dorește îmbunătățirea eficienței operaționale și flexibilitate în
căutarea informației solicitate prin:
Capitolul 2
6
Achiziționarea și gestionarea unui volum ridicat de date medicale despre
medicul specialist și specializarea în care se încadrează .
Punerea la dispoziție de informații despre bolile cu care poate fi
diagnosticat pacientul .
Flexibilitate în căutarea simptomelor care reprezintă un punc t de interes
pentru utilizator .
Asigurarea unei securități sporite în ceea ce privește informația obținută .
Consider necesară realizarea unei astfel de aplicați i web pentru a ajuta un număr cât mai mare
de utilizatori care necesită informații legate de lo calizarea unui medic specialist sau doar
informații medicale, deoarece este la îndemâna oricui are în posesia sa un calculator și acces la
internet , este ușor de navigat , oferind utilizatorului o i nterfață unică de utilizare și accesul la un
set centralizat de date.
2.3 Scopul
În prezentul document este furnizată o descriere completă referitoare la soluția raportată
gestionării datelor medicilor specializați și localizarea acestora pe hartă. Prin aceasta, servește
drept referință pentru dezvoltarea aplicației w eb, conținând descrierea generală a aplicației,
cerințe funcționale și nefuncționale pentru aceasta, restricții, cerințe de securitate, precum și
informații necesare pentru a avea o idee cât mai completă asupra conceptului, cum este realizată
și cum poate fi pusă în aplicare.
Scopul acestui proiect este de a dezvolta o aplicație web – M.D. Locate, care oferă
clienților facilitatea de a căuta și obține informații referitoare unei biblioteci medicale. Sistemul
aduce și un pachet de securitate pentru utilizat ori atunci când se realizează autentificarea,
inclusiv informații despre cont, precum și a medicilor încadrați într -o anumită specializare , cu
privilegiul de localizare . Totodată, prezintă un sistem de înregistrare online pentru utilizatorii
noi ușor de ut ilizat .
Administratorul va avea abilitatea de a efectua diverse operații ca introducerea de date
noi în baza de date referitoare atât la informațiile transmise vizitatorilor, a utilizatorilor precum
și informațiile legate de securitate, date despre utiliza tori. De asemenea, administratorul are
capacitatea de a închide contul la cererea clientului printr -un simplu query în tabelul
corespunzător din baza de date. Utilizatorul, la rândul lui, va putea dispun e de toate informațiile
puse la dispoziția acestuia p rin identificarea corectă din orice locație .
Avantaje ale aplicației web:
poate fi ușor personalizată
poate fi folosită atât pe internet, cât și pe rețeaua locală a unei companii
este dependentă de platformă datorită utilizării tehnologilor precum PHP, SQL Server
poate fi încărcată (upload) atât pe servere care au ca sistem de operare Linux, cât și pe
cele cu Windows
2.4 Obiective
Obiectivul principal al acestui proiect constă în studierea unor date medicale, definirea
și implementarea unui algoritm capabil să analizeze informațiile primite urmând să fie realizată
localizarea propriu -zisă. Produsul software va avea ca și caracteristică principală localizarea
medicului specialist și a utilizatorului autentificat, calculându -se distanța traseului.
Capitolul 2
7
Pentru atingere a obiectivului principal este necesară îndeplinirea unor obiective
secundare. Acestea sunt enumerate mai jos:
căutarea de informații medicale și organizarea lor după un anumit criteriu de sortare
realizarea unei baze de date solide care va conține toate da tele necesare
realizarea design -ului, urmat de afișarea datelor din baza de date în funcție de
necesitatea fiecărei componente
realizarea unei interfețe pentru autentificarea și înregistrarea utilizatorilor
realizarea unor interogări SQL cu ajutorul cărora motoarele de căutare vor putea fi
funcționabile
integrarea unei hărți oferite de cei de la Google (Google Maps API )
Toate aceste obiective secundare sunt dependente unul față de celălalt, fără ele atingerea
obiectivului principal neputând fi posibilă. Un exemplu ar fi că utilizat orul trebuie să se
înregistreze, deoarece obiectivul principal poate fi realizabil doar pentru clienții cu cont creat în
aplicație. Logarea cu succes duce la acesarea informațiilor despre medici precum și vizualizarea
unei hărți pe care se pot vedea atât poziția medicului solicitat precum și locația utilizatorului
care va fi în funcție de informațiile pe care le oferă la momentul înregistrării. După aceasta se
va calcula distanța dintre cele două locații, fiind foarte importantă rea lizarea cu succes a
algoritmilor de sortare și căutare.
2.5 Specificații
Acest subcapitol cuprinde principalele specificații ale aplicației cu cerințele funcționale
și nefuncționale aferente. Așadar, aceste specificații sunt un punct de pornire, rolul lor fii nd de a
reduce semnificativ procentajul în vederea modificării cerințelor după ce aplicația web propriu –
zisă a fost pornită. Pentru ca dezvoltarea produsului software să fie un succes aceste specificații
reprezintă un factor important.
2.5.1 Cerințe funcționale
Cerințele funcționale reprezintă descrierea unor funcții pe care trebuie să le realizeze
produsul software, modificările realizate asupra intrărilor și a ieșirilor obținute după fiecare
intrare. Principalele cerințe pe care trebuie să le satisfacă proiectu l sunt următoarele:
Aplicația Web trebuie să ofere vizitatorilor doar informații referitoare la bolile
cu care poate fi diagnosticată o persoană și simptomele care duc la descoperirea diagnosticului .
Aplicația Web trebuie să ofere posibilitatea de autentif icare și/sau înregistrare
vizitatorilor pentru a avea acces deplin la informațiile prevăzute de ea.
Aplicația Web trebuie sa fie capabilă să găsească medici prin mai multe criterii
de căutare, de exemplu, după specializare.
Aplicația Web trebuie să prezint e un sistem de localizare al medicilor specialiști
pe hartă , precum și localizarea utilizatorului în funcție de informațiile oferite.
Aplicația Web trebuie să conțină un sistem de suport, facilitând astfel
comunicarea dintre client și administrator aplicaț ie.
Aplicația Web trebuie să ofere utilizatorilor posibilitatea de a șterge definitiv
contul, urmând ca apoi să își piardă toate privilegiile care sunt oferite de această funcție.
Aplicația Web trebuie să pună la dispoziție o interfață pentru vizitatori și
utilizatori pentru a putea fi testată si aplicată.
Capitolul 2
8
2.5.2 Cerințe nefuncționale
Cerințele nefuncționale reprezintă anumite proprietăți care necesită îndepliniri, în caz
contrar , ducând la cauzarea unor factori de risc care în cele din urmă sunt necesari a fi tra tați și
soluționați. Spre deosebire de cerințele funcționale care definesc ce trebuie să facă produsul
software, cele nefuncționale descriu constrângeri ale sistemului.
Cerințe de interfață: aplicația web propusă poate să funcționeze pe mai multe sisteme de
operare, de la versiuni mai vechi până la cele mai noi apărute , și anume, Linux, Windows XP,
Windows Vista (Ultimate), Windows 7, Windows 8 . Pentru a putea rula proiectul este necesară
posesia unui laptop sau calculator cu conexiune la internet. Trebuie realizată într -o manieră
asemăntoare site -urilor standar cu interfață user -friendly, intuitivă pentru clienți.
Cerințe de performanță: aplicația web nu necesită instalare, în schimb este nevoie ca
serverul să fie funcționabil și conexiunea la internet să fie cât mai bună. E poate rula automat
accesând link -ul corespunzător dacă calculatorul sau laptopul are în cadrul său instalat un
browser de internet, de preferabil Chrome sau Safari, deoarece există anumite funcționalități
care sunt recunoscute doar de v ersiunile lor.
Cerințe de securitate: sistemul necesită măsurile de securitate recomandate de sistemul
de operare folosit, fiecare client fiind nevoit să se autentifice pentru a pute a avea acces deplin la
date.
Capitolul 3
9
Capitolul 3. Studiu bibliografic
3.1 Front -End și Back -End
3.1.1 Dezvoltare software
În ingineria software termenii de ”front -end” și ”back -end” se referă la prezentarea
datelor și accesul la datele respective. În articolul [7] este precizat fiecare termen în parte,
precum și diferența dintre ei.
Când discutăm despre fr ont-end trebuie să ne gândim la o aplicație care interacționează
direct cu oamenii sau alte programe. După cum spune și numele, ”front” reprezintă partea de
cod care se află în fața aplicației.
Obiectivul principal este de a interacționa cu utilizatorul și , de asemenea, de a prezenta
informațiile într -un stil bine definit și plăcut. De altfel, tot ce poate vedea ochiul uman pe o
pagină web este combinația inedită dintre câteva limbaje cunoscute pretutindeni, anume
HTML, CSS și JavaS cript care formează un în treg, acesta fiind controlat de browserul folosit.
Mai amănunțit despre cele trei limbaje vă voi povesti în subcapitolele următoare. Pe
moment, tot ce trebuie să știm este că:
HTML – fundația oricărui proces de dezvoltare al unui site web care oferă un cad ru
general despre cum va arăta produsul final
CSS – controlul aspectului prin care fiecare site web se diferențiază în mod unic
JavaScript – instrumentul care transform ă paginil e HTML statice în interfețe dinamice
Pentru a introduce și gestion a informați ile vizibile în interfață este nevoie de o consolă
de administrare. De aici apare termenul de ”back -end” pe care îl putem numi și ”creierul”
aplicațiilor fără de care partea de front -end a unui site web nu ar putea fi posibilă . După cum
spune și numele, ”b ack” reprezintă acea parte din aplicație care nu este niciodată vizibilă
utilizatorilor.
Dezvoltarea back -end este formată din trei părți: serverul, aplicația de interfață și baza
de date. Pentru ca aceste părți să comunice una cu cealaltă este nevoie de tehnologii de back –
end de obicei sunt:
PHP, Python, Java, .Net, Ruby pentru a construi o aplicație, cu framework -urile
aferente care ajută la o dezvoltare mai rapidă .
MySQL, Oracle, SQL Server pentru a căuta, salva sau modifica datele din baza de date
și a le retrimite înapoi la utilizator prin codul de front -end.
Este esențial să fim conștienți de faptul că front -end și back -end sunt două concepte
dependente una față de cealaltă când vine vorba despre crearea unui site sau a unei aplicații.
Scopul acest ui proiect nu este studiul amănunțit al dezvoltării software , de aceea în
următoarele subcapitole voi prezenta, nu foarte amănunțit, limbajele cu ajutorul cărora s -a
dezvoltat aplicația web, folosind și mici exemple comentate pentru înțelegerea mai rapidă a lor.
Capitolul 3
10
3.1.2 HTML & CSS
3.1.2.1 Conceptul Hypertext
Noțiunea de ”hypertext” a fost inventată de Ted Nelson în 1956. În articolul [4] autorul
îl definește ca fiind ”un material grafic sau scris, interconectat, într -o manieră complexă, care
nu pote fi reprezentat pe hârt ie”. Printr -o definire mai convențională, se poate spune că
hypertext reprezintă metoda prin care informațiile sunt organizate și datele sunt memorate,
urmate apoi să poată fi accesate prin programe de navigare pe web.
Conceptul care stă la baza hypertext -ului este legătura (link) către alt document sau din
cadrul aceluiași obiect, permițând astfel o organizare neliniară a informațiilor. Ca și principală
aplicație rămâne WWW (World Wide Web) alături de noțiunile asociate : HTTP, HTML.
3.1.2.2 HTML standard
Noțiune a de ”site web” reprezintă un grup de pagini web, accesibile oricui, conectate
între ele prin așa numitele ”hyperlink” -uri. Pentru crearea acestor pagini web se impune
limbajul HyperText Markup Language, mai bine cunoscut după acronimul HTML. Ne putem
gând i, așadar, că HTML reprezintă un ”schelet” care oferă fiecărei pagini web o structură.
Pentru interpretarea și vizualizarea fișierelor HTML clientul este nevoit să dețină un calculator
pe care are instalat un browser. În consecință, toate cererile efectuat e de browser și răspunsul de
la server se fac prin respectarea unui anumit protocol, și anume, HyperText Transfer Protocol
(HTTP).
HTML este proiectat în așa fel încât poate fi citit și editat de oricine are câteva
cunoștințe de bază, utilizând un simplu e ditor de text (Notepad ++). Totuși, pentru realizarea
unor pagini web mai complexe, consumatoare de resurse, este de preferabil a se folosi editoare
grafice (Adobe Dreamweaver, Microsoft FrontPage) care asigură flexibilitate în realizarea lor,
deoarece pa ginile web pot fi tratate asemănător cu documentele Word. În schimb, este necesar a
avea cunoștințe solide de HTML datorită codului generat care de multe ori este de prostă
calitate. HTML poate fi generat direct, utilizând tehnologii de codare pe partea de server,
anume ASP, JSP sau PHP.
Înainte de a trece mai departe vă prezint un exemplu simplu de cod HTML realizat în
editorul de text Notepad++ și rezultatul aferent în browserul de web – Chrome.
! De reținut : toate fișierele HTML se salvează cu extensia ” .html”.
În continure vă voi prezenta un exemplu compus din mai multe ”tag -uri” (elemente)
printre care:
<!DOCTYPE html></html> – orice fișier HTML va începe și se va încheia cu aceste
elemente , !DOTYPE fiind o declarare care ajută browserul să afișeze o p agin web corect
<head></head> – cunoscut sub numele de antet, reprezintă un recipient pentru meta date
(date despre date), mai precis, furnizează informații despre document care nu vor fi afișate în
pagina web; exemple de meta date: <title>, <style>, <meta >, <link>, <script> și <base>.
<body></body> – corpul propriu -zis descrie vizibil conținutul paginilor web
Textul dintre tagurile <p></p> a fost generat cu ajutorul unui site de generare text. [6]
În Figura 3.1.2.2.1 este prezentat și rezultatul exemplului .
Capitolul 3
11
<!DOCTYPE html>
<head>
<!–Acesta este un comentariu care nu va
fi afișat în browser –>
<!–Acesta este titlul paginii. –>
<title>Pagina Lorem Ipsum </title>
</head>
<body>
<!–Acesta este un ”heading”. –>
<h1>Lorem Ipsum </h1>
<!–Acesta este un paragra f.–>
<p>Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Vestibulum
augue tellus, volutpat non fringilla a,
vulputate ut dui. In hac habitasse platea
dictumst. </p>
<!–Acesta este un alt paragraf. –>
<p>Etiam aliquam pulvinar sem. Fusce quam
libero, euismod in dolor lacinia, mollis
tempor magna. Sed dolor tellus, aliquet
ut ultrices eu, tincidunt sit amet
tellus.</p>
</body>
</html>
Figura 3. 1 Afișarea în browserul Chrome a fișierului
HTML
3.1.2.3 Introducerea în CSS
Limbajul HTML a fost conceput în așa fel încât să marcheze elementele unei pagini
web. Odată cu apariția de noi versiuni HTML, au fost introduse și tag -uri de personalizare
(”color”, ”fon t”, ”margin” etc.) care au îngreunat situația pentru dezvoltatorii de web, fiecare
pagină din site -ul web fiind nevoită să fie luată separat pentru a i se modifica proprietățile
elementelor principale. Pe de altă parte, au apărut noi unelte recunoscute de browsere prin care
redactarea de documente hypertext devine și mai atractivă, un exemplu fiind Cascading Style
Sheets (CSS) care ajută, totodată, în soluționarea problemei anterior discutate. Vor exista, prin
urmare, o mulțime de atribute care ajută la ”în frumusețarea” paginilor web prin stabilirea
formei și poziției elementelor, a font -urilor și textului în funcție de aliniere, a culorilor de fond
ș.a.m.d.
Noțiunea de CSS reprezintă ”un standard pentru formatarea elementelor unui document
HTML” [1], strâns a legătură dintre cele două limbaje, HTML și CSS, fiind realizată prin
intermediul tag -ului <style></style> care trebuie așezat în antet.
Exemplul de mai jos reprezintă un fișier HTML care include personalizarea elemetelor
prin ut ilizarea CSS în interiorul lui <style> . Figura 3.1.2.3.1 reprezintă rezultatul raportat, iar
pentru înțelegerea codului voi adăuga mici precizări. În corpul fișierului (body) avem un tag
<center > care este folosit pentru centralizarea elementelor în pagină, în interiorul căruia ave m
toată informația care va fi afișată în browser. Tag -urile noi apărute sunt <hr /> folosit pentru
separarea conținutului printr -o linie și <style> în interiorul căruia avem CSS pur. Aici
elementele <p> și <hr> primesc propriile formatări, de exemplu:
background – folosit pentru colorarea fundalului unui element
width – dimensiunea elementului
height – înalțimea elementului
font – toate proprietățile ce țin de text de la familie, mărime, culoare etc.
Capitolul 3
12
<html>
<head>
<meta charset = "UTF-8">
<!–Acesta este t itlul paginii. –>
<title>Utilizarea tag -ului style
in head</title>
<style>
p {
background: turquoise;
width: 50%;
color: white;
font-family: Times New Roman,
Times;
font-size: 16pt;
}
hr {
text-align: center;
width: 50%;
height 5px;
color red;
}
</style>
</head>
<body>
<center>
<!–Acesta este un paragraf. –>
<p>Paragraf 1 formatat cu CSS </p>
<hr>
<!–Text delimitat de niște linii
realizate cu tag -ul <hr />. –>
Text care nu se află în tag -ul <p>
<hr>
<!–Acesta este un alt paragraf. –
>
<p>Paragraf 2 formatat cu CSS </p>
</center>
</body>
</html>
Figura 3. 2 Afișarea în browserul Chrome a
exemplului HTML cu CSS
! De reținut: nu este obligatoriu ca fișierele CSS să fie în interiorul fișierului HTML
pentru a putea fi utilizate. Se pot salva extern cu extensia ”.css” urmând ca în fișierul HTML să
fie precizate prin: <link rel="stylesheet" type="text/css" href="css/exemplu.css"> ,unde
”href="css/exemplu.css"” reprezintă calea unde se află fișierul .
3.1.3 JavaScript
3.1.3.1 Parte introductivă
JavaScript, sau scurtat JS, este un limbaj interpretat, orientat pe obiecte, bine cunoscut
pentr u ”scriptarea” paginilor web. Chiar dacă este similar cu Java, în anumite situații, cele două
limbaje nu au nici o legătur ă unul cu celălalt, fiind doar o coincidență de nume.
Capitolul 3
13
După cum spune și sursa [8] JavaScript suportă un sistem bazat pe rularea unui n umăr
mic de tipuri de date reprezentate numeric și a unor funcții (proprietăți ale unor obiecte).
Limbaj liber și extrem de flexibil , în comparație cu Java, el nu se necesită declararea tuturor
variabilelor, claselor și metodelor . În tabelul următor observăm o scurtă comparație între
limbajele JavaScript și Java .
Tabel 3. 1
JavaScript Java
orientat pe obiecte, bazat pe conceptul
prototipurilor
fără distincție între tipurile de obiecte
nu există moștenire
proprietățile și meto dele sunt adăugate
oricărui obiect dinamic orientat pe obiecte, bazat pe clase
obiectele sunt împărțite în clase și
instanțe
există moștenire
clasele și instanțele nu pot avea
proprietăți sau metode adăugate dinamic
tipurile de date a variabilelor nu se
declară tipurile de date a variabilelor trebuie
declarate
nu pot scrie în mod automat pe hard disk pot scrie în mod automat pe hard disk
JavaScript este unul din cele trei limbaje (celelalte două fiind HTML și CSS) pe care
orice dezvoltator web ar trebui să le învețe. Avân d în vedere că am folosit în aplicație
JavaScript dependent de HTML și CSS, în continuare vă voi prezenta câteva exemple pentru
înțelege mai bine conceptul și cum lucreză cu celelalte două limbaje.
În HTML pot fi înglobate script -uri (<script> </script> ) în partea de antet (head) pentru
diverse activități, cum ar fi verificarea datelor introduse de utilizatori, crearea de meniuri sau
alte efecte animate.
Exemplu 1:
se definește în corpul paginii un buton cu id -ul ”demo” capabil să modific e textul din
elementul de paragraf ; este folosit atributul onlclick care preia id -ul butonului , iar la apăsarea lui
schimbă textul în ”Hello JavaScript!” .
<!DOCTYPE html >
<html>
<head>
<meta charset = "UTF-8">
</head>
<body>
<h1>Ce poate face JavaScript? </h1>
<p id="demo">JavaScript poate schimba conținutul unui HTML. </p>
<button type="button"
onclick="document.getElementById('demo').innerHTML = 'Hello
JavaScript!'" >
Apasă!
</button>
</body>
</html>
Capitolul 3
14
Figura 3. 3 Afișarea în bro wser a rezultatului de la exemplul 1
3.1.3.2 Variabile , funcții și clase în JavaScript
În JavaScript obiectele sunt foarte importante. Aproape totul poate fi un obiect: funcții le,
vectori i, date le mereu sunt obiecte, iar numerele, string -urile, valorile boolene (true, false, null,
undefined) sunt date primitive tratate ca niște obiecte.
Variabilele pot conține o singură valoare . Ele se declară cu ajutorul atributului ”var”
astfel: var limbaj = "JavaScript"; . Obiectele sunt și ele variabile, dar care conțin mai mu lte
valori. Ele se declară în felul următor: var limbaj = {limbaj1: "JavaScript", limbaj2: "CSS",
limbaj3: "HTML"};
Funcțiile se poate spune că sunt centrul JS -ului, deoarece aproape orice script folosește
cel puțin o funcție. Ele sunt subprograme care pot fi apelate de un cod intern sau extern sau, mai
exact, obiecte de primă clasă care pot fi manipulate ca oricare alt obiect. La fel ca un
subprogram, funcțiile sunt compuse din secvențe de declarații numite corpuri de funcții (eng.
function body). Valorile pot fi atribuite unei funcții, iar acestea la rândul lor pot returna valori.
Funcțiile mereu vor returna valori . Pentru returnarea unei valori specific e se folosește
atributul ”return”. Altfel, prin lipsa acestui atribut, funcți a va returna o valoare impl icită (eng.
default). În cazul unui constr uctor apelat cu atributul ” new”, valoarea implicită va fi valoarea
curentă a parametrului (eng. this). This reprezintă obiectul care ”deține” codul JavaScript, iar
valoarea sa funcția sau obiectul în care este fol osită.
Exemplu 2 :
se definește un constructor ”person” cu doi parametri name și age;
function person(name, age) {
this.name = name;
this.age = age;
}
se cre ează noi obiecte de același tip:
var boy = new person("Ion", 15);
var girl = new person("Ana", 22);
Exemplu 3:
se definește în antetul paginii o funcție JavaScript ” calcul ()”, capabilă să calculeze suma
numerelor de la 1 la 10 într -o variabilă și apoi să afișeze valoarea obținută prin intermediul unei
ferestre de dialog; f uncția este apelată auto mat la încărcarea paginii prin atributul onload .
Capitolul 3
15
Clasele sunt asemenea funcțiilor, sintaxa fiind compusă din două componente: expresii
și declarații. Definirea unei clase se face prin declalarea ei. Pentru asta este nevoie de atributul
class și numele dat clasei. De exemplu:
clas s Dreptunghi {
constructor (culoare, mărime{
this.culoare = color;
this.mărime = size;
}
}
Diferența dintre clase și funcții este aceea că la clase este necesar declararea lor înainte
de a fi accesate, altfel va returna o excepție ReferenceError .
! De reținu t: nu este obligatoriu ca fișierele JavaScript să fie în interiorul documentului
HTML pentru a putea fi utilizate. Se pot salva extern cu extensia ”.js” urmând ca în HTML să
fie precizate prin: <script src = "//JS Files/javascript_extern.js"></script>
Știați că …? [6]
JavaScript are versiuni de tip obiect a tipurilor de date primitive String, Number și
Boolean
nu există motiv pentru a crea obiecte complexe când valorile primitive se execută mult
mai rapid
nu există motiv în a folosi new Array(), new RegExp( ), new Function(), new Object();
se folosește, în schimb; [], /()/, function() {}, {}
3.1.3.3 JQuery
JQuery este o librărie JS, care are scopul de a face utilizarea JavaScript -ului în aplicații
mult mai simpl ă și mai ușoară. Această librărie preia sarcinile comun e, care în Javascript ar
necesita multe linii de cod pentru a fi îndeplinite și le introduce în metode care pot fi apelate
printr -o singură linie de cod, simplificând lucrurile complexe și dificile ale JavaScript -ului. <script language ="JavaScript" >
function calcul(){
s=0;
for(i=1;i<=10;i++)
s+=i;
alert("Suma nr. de la
1 la 10 este: " +s);
}
</script>
<body onload="calcul();" >
<center>
<!–Acesta este un paragraf. –>
<p>Într-o căsuță de dialog
se va afișa suma numerelor de
la 1 la 10 </p> Figura 3.4 Afișarea în browser a rezultatului de la
<hr /> exemp lul 3
</center>
</body>
Capitolul 3
16
Librăria JQuery conține următoarele c aracteristici (eng. features ): manipulare
HTML/DOM, manipulare CSS, metode de evenimente HTML, efecte și animații, AJAX.
Pentru a adăuga JQuery într -o pagină web, mai intâi se va descărca librăria de pe site -ul oficial –
jQuery.com . O altă modalitate ar fi să fie inclusă într -o rețea de distribuție de conținuturi (CDN
– Content Distribution Network ). Avantajul celei de -a doua ar fi că mulți utilizatori descarcă
jQuery de pe Google sau Microsoft când viziteză alte site -uri, iar în momentul în care site -ul
dumneavoastră este vizitat librăria se va înc ărca din memoria cache, având ca rezultat un timp
de încărcare mult mai rapid. Pentru a se face referire la ea în HTML trebuie inclus un element
<script> in interiorul cărui calea potrivită.
<head>
//librăria se descarcă de obicei în același folder cu aplicația
<script src="jquery -1.11.3.min.js"></script>
</head>
Pentru a folosi librăria prin CDN de la Google sau Microsoft se vor folosi următoarele :
src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.mi n.js">
src="http://ajax.aspnetcdn.com/ajax/ jQuery/jquery -1.11.3.min.js">
Sintaxa de baxă : $(selector ).action (), unde $ – definește jQuery, selector –interoghează /
caută elementele HTML, action() – acțiune efectuată pe elemente. Este de preferabil a se fol osi
evenimentul $(document).ready(function(){}); sau varinta mai scurtă $(function(){}); pentru a
preveni încărcarea codurilor jQuery înainte ca documentul să se fi terminat de încărcat.
Evenimentele reprezintă acele momente precise când ceva se întâmplă, de exemplu
diferitele acțiuni ale vizitatorilor care primesc răspuns de la paginile web: deplasarea mouse –
ului peste un element, selectarea acestuia printr -un click, alegerea unui element dintr -o listă de
butoane radio (eng. radio button ). În Tabel 3.2 sunt prezentate câteva evenimente mai des
utilizate.
Tabel 3. 1
Evenimente
pentru mouse Evenimente
pentru tastatură Evenimente
pentru form -uri Evenimente
pentru fereastră Evenimente
pentru browser
.click() .keypress () .submit () .load() .resize()
.dblclick () .keydown () .change () .unload () .scroll()
.toggle() .keyup () .focus () .error()
.mouseleave () .blur()
.mousedown() .select()
.mouseenter ()
3.1.4 XAMPP
XAMPP este un pachet gratuit de pachete software care constă , după c um spune și
acronimul în:
X – independent de platformă
A – Appache HTTP Server
M – baza de date MySQL
PP – interpretoare pentru limbajele de programare PHP și Perl.
Pe lângă acestea conține și module precum: FileZilla, phpMyAdmin, ApacheTomcat,
OpenSSL. Se instalează cu ușurință oricare dintre versiuni, de exemplu cea de tip ”Installer” ,
fiind accesibil ă pentru descărcare la http://www.apachefriends.org/en/xampp -windows.html .
Capitolul 3
17
Inițial, a fo st conceput ca utilitar de dezvoltare cu scopul de a permite programatorilor web să
testeze aplicații direct pe calculatoarele proprii, nefiind necesară conexiunea la internet, dar a
ajuns să fie utilizat pentru a servi paginilor web. [1]
Figura 3. 5 Interfața XAMPP Control Panel
În Figura 3.5 este prezentată interfața grafică a panoului de control XAMPP. După cum
observați prezintă o serie de butoane care au rolul de a porni/ opri manual serviciile, de
administrare, configurare sau de afișare a informați ilor referitoare la pachetele softwre incluse.
Ce trebuie reținut este că prin rularea acestor servicii pot apărea ”conflicte” cu alte aplicații sau
servere care utilizează aceleași porturi. De aceea, este nevoie să se închidă celelalte aplicații sau
să se configureze serviciile pe alte porturi.
3.1.5 PHP
3.1.5.1 Introducere în PHP
Hypertext Preprocessor, bine cunoscutul PHP, reprezintă un limbaj pentru scriptare, cu
cod-sursă deschis (eng. open source ) și la nivel de server (eng. server -side) potrivit pentru
dezvoltare a aplicațiilor web. Este un limbaj de programare destinat în primul rând Internetului
și oferă dinamică unei pagini web. Este un program gratuit care aduce un plus de flexibilitate
utilizatorilor când vine vorba de procesul de dezvoltare. [9]
Rolul de bază al unui script PHP constă în preluarea datelor trimise de către pagina web
de la un client (de exemplu formularele) și executarea unor secvențe de program în urma căr ora
va rezulta un cod HTML care va fi trimis clientului sub forma unei pagini web.
Capitolul 3
18
Ce îl face diferit față de JavaScript pe parte de client este că, codul său este executat pe
server, generează cod HTML și numai apoi este trimis clientului. Astfel, deci, aplicațiile nu
rulează pe calculatorul utilizatorului ci pe un server web, fapt pentru ca re clienții nu vor avea
niciodata acces la codul efectiv, ci doar la anumite informații care sunt trimise prin acesta.
Un avantaj foarte mare al PHP -ului poate fi simplitatea pentru un începător și, totodată,
existența multor facilități avansate pentru un programator profesionist. În următorul tabel sunt
prezentate principalele domenii în care script -urile PHP sunt utilizate:
Tabel 3. 2
Nume domeniu Descriere domeniu
scriptare pe parte de
server pentru funcționare este nevoie de analizatorul PHP,
server web și navigator web
accesarea ieșirilor programului se realizează cu
ajutorul navigatorului web, iar vizualizrea paginii prin server
rularea se poate face pe calculatorul de acasă
scriptare în linia de
comandă pentru funcționare este nevoie de analizatorul PHP
rularea unui script PHP fără un serve r și navigator
web se realizează cu ajutorul analizatorului PHP
mod de utilizare ideal pentru sisteme de operare ca
Linux sau Windows folosind Task Scheduler
scrierea aplicațiilor ce
rulează pe partea de client grafic
(aplicații de birou) pentru scrierea acestor aplicații este nevoie de PHP –
GTK
este nevoie de cunoștințe avansate de PHP
3.1.5.2 Informații de referință despre PHP
Sintaxa de bază: pentru executarea codului toate comenzile trebuie incluse între <?php
?> sau <script language="php"> și </script>. Există și alte două modalități care nu sunt în
general recomandate. Ele nu sunt întotdeauna disponibile, fiind pornite sau oprite cu ajutorul
fișierului de configurare php.ini .
Tot ce este înafara <?php ?> va fi ignorat de către limbajul PHP, astfel pot fi incluse
secvențe de cod HTML, de exemplu, pentru crearea șabloanelor (eng. template ).
Exemplu 1 :
<p>Acest paragraf va fi ignorat de limbajul PHP </p>
<?php echo 'Acest mesaj este recunoscu t de PHP.' ; ?>
<p>Acest paragraf va fi și el ignorat de limbajul PHP </p>
În exemplul anterior avem cod HTML constituit din două paragrafe. Pe lângă acestea
avem și o linie de cod PHP inclusă între <?php ?> recunoscută de limbaj. Instrucțiunea echo
este fol osită pentru afișarea mesajelor. În cazul în care fișierul conține cod pur PHP închiderea
tag-ului ?> devine opțională, deoarece când se folosește include sau require pot apărea spații
libere la final. Cei doi termeni amintiți înainte se folosesc la înglob area definițiilor funcțiilor
într-un singur fișier pentru a nu încărca foarte mult un document .
Variabilele de bază în PHP sunt reprezentate prin semnul $ urmat de numele variabilei.
Pentru ca v ariabila să fie validă numele trebuie să începă neaparat cu o literă sau _ , urmate de
Capitolul 3
19
alte litere cifre sau _ (eng. underscore ). Variabilele pot fi atribuite atât prin valori cât și prin
referință. La cele prin referință se adaugă ampersand ( &).
Exemplu 2 :
<?php
// variabile definite corect prin valori
$Var = 'PHP';
$var = 'PHP';
// variabilă definită corect prin referință
$var1 = &$var;
// variabile definite incorect
$8var = 'PHP';
$_1var = 'PHP';
?>
PHP asigură o serie de variabile predefinite, printre care cele mai des folosite sunt:
$_GET, $_POST, $_ SESSION, $_SERVER, $_REQUEST. Pe langă acestea sunt și variabilele
superglobale care sunt mereu accesibile și așa numitul scop al unei variabile (eng. variable
scope ) care reprezintă contextul în care variabila este definită.
Constantele reprezintă niște i dentificatori pentru valori. Aceste valori nu pot fi
modificate în timpul execuției unui script, cu excepția unor constante mai speciale (eng. magic
constants ). Prin convenție constantele se scriu mereu cu majuscule. Ele pot fi definite utilizând
funcția define() . Dacă se dorește obținerea numelui constantei valoarea poate fi citită utilizând
funcția constant() . Pentru obținerea unei liste cu toate constantele definite se folosește
get_defined_constants() .[9]
Constantele ”magice”, mai sus amintite, sunt ace le constante predefinite pe care PHP le
asigură oricărui script care rulează. Majoritatea sunt create prin extensii fără de care nu pot fi
disponibile. Exemple de acest tip de constante: __LINE__, __FILE__, __DIR__,
__FUNCTION__, __CLASS__, __METHOD__ etc.
Funcțiile în PHP se pot scrie similar limbajelor de programare C/C++. Pentru
întoarcerea rezultatelor din corpul funcțiilor se folosește instrucțiunea return . Transmiterea
parametrilor se face prin valoare și prin referință astfel:
a) prin valoare: parametr ii sunt specificați în mod direct, folosind doar numele variabilei,
iar dacă valoarea unui astfel de parametru se schimbă în cadrul funcției, după executarea
acesteia va rămâne neschimbată
b) prin referință: parametrii precedați de caracterul & la care valoar ea modificată în cadrul
funcției rămâne modificată și după executarea acesteia
!De reținut: comentariile în PHP se realizează prin // sau /* conținut */ . Spre
deosebire de fișierele .html care odată create pot fi deschise imediat direct în browser -ul de
Internet , pentru rularea codul ui PHP este necesar ca fișierele să fie puse în același director în
care se află documentele serverului web, iar vizualizarea lor să fie făcută prin intermediul
acestuia. În mod imp licit, un fișier care conține cod sursă PHP trebuie salvat cu extensia .php.
3.1.5.3 Exploat area bazelor de date prin intermediul PHP
În zilele nostre, utilizarea bazelor de date pe Internet a luat o amploare deosebită, fiind
componentele esențiale în orice aplicație web. Pentru crearea și utilizarea bazelo r de date
relaționale este nevoie de un limbaj standard care să permită efectuarea acestor operații. Mai
mult decât atât pentru a trimite sau a primi orice informație este necesară conectarea la baza de
Capitolul 3
20
date. De aici a apărut SQL – Structured Query Langua ge, un limbaj implementat de o mulțime
de SGBD -uri consacrate, cum ar fi Microsoft Access, Oracle, Microsoft SQL Server și,
bineînțeles, MySQL.
PHP are la dispoziția sa niște extensii de lucru cu baze de date specifice anumitor
productori: CUBRID, DB++, dB ase, IBM DB2, Mongo, Mssql, MySQL, OCI8, SQL SRV etc.
Primul pas într -o aplicație este crearea unei baze de date. Pentru crearea bazei de date a
proiectului meu am folosit SQL Server. Mai multe detalii despre utilizarea pachetului SQLSRV
și despre baza de d ate creată pentru realizarea proiectului vă voi povesti mai pe larg în
următoarele capitole.
În încheierea acestui capitol vă prezint prin Figura 3. O schemă prin care serverul web,
în cazul nostru Apache trimite codul interpretorului PHP care verifică scr ipt-ul și în funcție de
interpretare trimite înapoi la server rezultatul ca fișier HTML .
Figura 3.6 Legătura dintre SQL Server, PHP și serverul Apache
Capitolul 4
21
Capitolul 4. Analiză și proiectare
4.1 Interacțiunea utilizatorului cu Aplicația Web
Proiectul meu reprezintă o a plicație web prin care clienții beneficiază de anumite
servicii în scop medical . Astfel, putem spune că, pentru a funcționa corect și optim în aplicație
este necesară existența următoarelor componente:
1) Utilizatorul – cel care trimite cereri către server și primește informațiile necesare
2) Calculatorul sau dispozitivul mobil – componenta care suportă aplicația
3) Internetul – aplicația nu poate funcționa fără această componentă
4) Servicii Web – aplicația comunică cu servicii de stocare și furnizare de informații,
precum și cele furnizate de Google ( de exe mplu Google Maps)
În Figura 4.1 putem urmări legătura dintre componentele menționate anterior .
Figura 4. 1 Legătura dintre componentele necesare pentru funcționarea Aplicaiei Web
4.2 Arhite ctura sistemului
Soluția software a fost proiectată după modelul arhitectural client – server. Clientul
reprezintă utilizatorul care prin identificare (eng Log In ) trimite cereri către server și primește
răspunsul în cel mai scurt timp. Serverul web reprez intă un program software cu o funcție bine
stabilită, aceea de a servi cererilor de pe paginile de internet solicitate de către utilizator.
În proiect am utilizat Apache Web Server, unul dintre modulele pachetului XAMPP,
menționat în capitolul trei. Compo nenta server oferă servicii de exploatare a conținutului
documentelor medicale și înglobează în cadrul său baza de date asigurând o platormă de
stocare. Serverul comunică pe rețea cu aplicațiile client, astfel clientul transmite cererile
Capitolul 4
22
referitoare la anu mite informații medicale, urmând să primească un feedback după ce solicitarea
a fost procesată și prelucrată.
Aplicația client oferă clienților posibilitatea de a vizualiza în detaliu datele medicale, de
a organiza datele prin anumite filtre sau de a local iza medicul specialist pe hartă, totul în
funcție de drepturi . În Figura 4.2 sunt descrise componentele arhitecturale ale aplicației web și
relațiile de interacțiune dintre acestea.
Figura 4. 2 Diagrama de arhitectură
Restricț ii de implementare:
Modulul Baze de Date va fi dezvoltat pentru server -ul de baze de date SQL Server
Modelul Procesare XML va fi dezvoltat pentru a suporta tehnologii precum XML,
HTML, CSS, JavaScript
Modelul de Raportare va fi dezvoltat pentru generarea i nformațiilor în urma
interogărilor din baza de date utilizând PHP
4.3 Flux de evenimente în realizarea obiectivelor aplicației
Realizarea fluxului de evenimente constă în modelarea circuitului mesajelor între
obiecte și a interacțiunilor dintre acestea. Înain te de toate, am analizat câteva scenarii pentru o
bună funcționalitate și implementare optimă, rapidă și ușoară a produsului software. În
continuare vă voi prezenta câteva dintr acele scenarii utilizând anumite diagrame UML.
Capitolul 4
23
4.3.1 Diagrame de secvență
Diagramel e de secvență descriu, în mod cronologic, interacțiunea dintre obiecte ,
identific ându -se mesajele schimbate între ele. Cu ajutorul acestor diagrme voi încerca să
realizez o vizualizare a comunicării dintre obiecte (clase). Scopul este înțelegerea ordinii
evenimentelor.
Figura 4. 3 Diagrama secvențială
4.3.2 Diagrame de utilizare
Actori
Actorii sunt acei utilizatori care interacționează direct cu interfața grafică. În cazul
nostru aceștia sunt vizitatorii, ut iizatorii și administrator ul (admin).
Capitolul 4
24
În momentul în care vizitatorul accesează aplicația web pentru prima dată este nevoit să
se înregistreze, în caz contrar privilegiile lui scad substanțial raportat posibilelor cereri către
server. Vizitatorul are următoarele drepturi:
– de a vizu aliza informații medicale ( boli, simptome, unități medicale, medici )
– de a se înregistra
Odată înregistrat, acesta devine utilizator cu privilegii depline asupra datelor din
aplicație. Utilizatorul are următoarele drepturi:
– de a se autentifica
– de a vizualiz a informații medicale
– de a folosi filtre de sortarea pentru o căutare mai facilă a informațiilor
– de a vizualiza detalii despre medicii specializați
– de a-și obține coordonatele și de a vizualiza locația actuală pe hartă
– de a vizualiza pe hartă locația medic ului ales
– de a primi date referitoarea la distanța dintre cele două puncte de localizare
– de a contacta adminul pentru solicitări precum schimbare parolă, ștergere cont sau alte
informații necesare
– de a ieși din sesiunea de autentificare, urmând ca intrat a doua oară în aplicație
autentificarea să fie din nou necesară
Ultimul, dar cel dintâi este administratorul, denumit admin. Acesta este ”creierul ”
produsului software fără de care nu ar exista. Poate exista un număr nelimitat de administratori .
Admin -ul are următoarele drepturi:
– de a accesa baza de date și de modifica în ea prin interogări precum SELECT, INSERT,
UPDATE, DELETE, ALTER etc.
– de a accesa codul sursă și de a face modificări atât pe partea de design al aplicațieri cât
și pe cea de funcționalitate
– de a comunica cu utilizatorii și de a răspunde cererilor solicitate de aceștia
– de a accesa site -ul sub formă de vizitator sau utilizator în cazul înregistrării
În Figurile 4.4 și 4.5 sunt reprezentate diagramele cazurilor de utilizare raportate la
actorii menționați mai sus.
Capitolul 4
25
Figura 4. 4 Diagrama cazurilor de utilizare pentru Admin
Figura 4. 5 Diagrama cazurilor de utilizare pentru Vizitator și Utilizator
Capitolul 4
26
Descriere a cazurilor de utilizare
Pentru admin avem cinci cazuri de utilizare, pentru vizitator trei, iar pentru utilizator
nouă. În continuare vă voi prezenta detaliat cazurile de utilizare din cele două figuri anterioare.
1) Înregistrare
2) Autentificare
3) Vizualizare a informațiilor medicale
Nume Înregistrare
Descriere Vizitatorul se înregistrează pentr u a deveni utilizator
Actori Vizitator
Precondiție Serverul funcționează
Vizitatorul are acces la internet și este conectat la aplicația web
Pași de bază Vizitatorul își introduce datele nume, prenume, adresă, telefon, adresă de mail
și parolă
Pas alt ernativ –
Postcondiție Vizitatorul este adăugat și salvat în baza de date, având drepturi depline în
aplicația web
Nume Autentificare
Descriere Utilizatorul se autentifică pentru a avea drepturi de utilizator
Actori Utilizator
Precondiț ie Serverul funcționează
Utilizatorul are acces la internet și este conectat la aplicația web
Utilizatorul are cont creat, existent în baza de date
Pași de bază Utilizatorul își introduce adresa de mail și parola și apasă butonul de logare
Pas alternat iv –
Postcondiție Utilizatorul este autentificat și acum poate realiza anumite operații pe care
înainte nu le putea
Nume Vizualizare a informațiilor medic ale
Descriere Utilizatorii și vizit atorii pot accesa pagin ile web care conțin informații medicale
precum liste cu boli, simptome, unități medicale
Actori Utilizator, Vizitator
Precondiție Serverul funcționează
Utilizatorul și vizitatorul au acces la internet și sunt conectați la aplicația web
Pași de bază Utilizatorul și vizitatorul pornesc aplicația și navighează pe paginile web
corespunzătoare
Pas alternativ Accesează direct link -ul paginii web
Postcondiție –
Capitolul 4
27
4) Vizualizare Medici
5) Informații referitoare la medici
6) Filtre de căutare a medicilor Nume Vizualizare Medici
Descriere Utilizatorii și vizitatorii pot accesa pa gina web care conține lista medicilor
specializați care exist în baza de date
Actori Utilizator, Vizitator
Precondiție Serverul funcționează
Utilizatorul și vizitatorul au acces la internet și sunt conectați la aplicația web
Pași de bază Utilizatorul și vizitatorul pornesc aplicația și navighează pe pagina web
corespunzătoare
Pas alternativ Accesează direct link -ul paginii web
Postcondiție –
Nume Informații referitoare la medici
Descr iere Utilizatorii accesează pagina web corespunzătoare detaliilor despre medicii
specializați conținuți în baza de date
Actori Utilizator
Precondiție Serverul funcționează
Utilizatorul are acces la internet și este conectat la aplicația web
Utilizatorul are cont creat, existent în baza de date
Utilizatorul este autentificat
Pași de bază Utilizatorul accesează pagina web corespunzătoare cazului de utilizare anterior
(Vizualizare Medici) după care alege medicul pe care dorește să fie detaliat
Pas alterna tiv Accesează direct link -ul paginii web
Postcondiție Utilizatorul poate localiza locația sa actuală, locația medicului și poate calcula
distanța dintre cele două locații
Nume Filtre de căutare a medicilor
Descriere Utilizatorii poate alege modul în ca re informația să fie distribuită. De exemplu
filtru de căutare medici în funcție de unitățile medicale existente în baza de date
Actori Utilizator
Precondiție Serverul funcționează
Utilizatorul are acces la internet și este conectat la aplicația web
Utilizatorul are cont creat, existent în baza de date
Utilizatorul este autentificat
Pași de bază În funcție de nevoi, utilizatorul alege filtrul de căutare corespunzător, necesar
pentru a primi informația
Pas alternativ –
Postcondiție Utilizatorul găseșt e ușor și rapid informația necesară
Capitolul 4
28
7) Localizare pe hartă – medic, utilizator
8) Calcul distanță
9) Contactare Admin
Nume Localizare pe hartă – medic, utilizator
Descriere Afișarea pe harta Google a două locații – cea a medicului și cea a utilizatorului
Actori Utilizator
Precondiție Serverul funcționează
Utilizatorul are acces la internet și este conectat la aplicația web
Utilizatorul are cont creat, existent în baza de date
Utilizatorul este autentificat
Pași de bază Se alege medicul și în funcție de el se afișează o hartă în care sunt înse mnate
locația medicului și locația actuală a utilizatorului
Pas alternativ Accesează direct link -ul paginii web
Postcondiție Utilizatorul poate calcula mai departe distanța dintre cele două locații
Nume Calcul distanță
Descriere Calcula rea distanței dintre locația medicului și cea a utilizatorului
Actori Utilizator
Precondiție Serverul funcționează
Utilizatorul are acces la internet și este conectat la aplicația web
Utilizatorul are cont creat, existent în baza de date
Utilizatorul est e autentificat
Pași de bază Se apasă butonul corespunzător pentru calcularea distanței
Pas alternativ –
Postcondiție Utilizatorul va primi informați referitoare la câți km va trebui să parcurgă
pentru a ajunge la medicul specialist
Num e Contactare Admin
Descriere Completarea unui formular pentru a trimite cereri admin -ului
Actori Utilizator
Precondiție Serverul funcționează
Utilizatorul are acces la internet și este conectat la aplicația web
Utilizatorul are cont creat, existent în b aza de date
Utilizatorul este autentificat
Pași de bază Utilizatorul completează câmpurile din formular (nume, e -mail, comentariu) și
apasă butonul de trimitere
Pas alternativ –
Postcondiție Utilizatorul va primi răspuns p e e-mail
Capitolul 4
29
10) Log Out
11) Acces Baz ă de date
12) Modificări în Baza de Date
Nume Log O ut
Descriere Ieșirea din sesiune a utilizatorului(deconectare)
Actori Utilizator
Precondiție Serverul funcționează
Utilizatorul are acces la internet și este conectat la aplicația web
Utilizatorul are cont creat, existent în baza de date
Utilizatorul es te autentificat
Pași de bază Utilizatorul completează câmpurile din formular (nume, e -mail, comentariu) și
apasă butonul de trimitere
Pas alternativ –
Postcondiție Utilizatorul nu poate realiza anumite acțiuni precedente ci doar cele accesibile
unui vizitator
Nume Acces Bază de date
Descriere Accesarea bazei de date prin programul SQL Server
Actori Admin
Precondiție Admin:
– are instalat SQL Server
– are scriptul pentru crearea bazei de date și a tabelelor aferente cu date
implicite
Pași de bază Admin -ul creează baza de date prin scriptul corespunzător
Pas alternativ Admin -ul a creat inițial baza de date, astfel are acces la tot ce este nevo ie
Postcondiție Admin -ul poate modela informațiile din baza de date prin interogări
Nume Modificări în Baza de Dare
Descriere Interogări SQL pentru a modifica datele actuale din baza de date
Actori Admin
Precondiție Admin:
– are instalat SQL Server
– are scriptul pentru crearea bazei de date și a tabelelor aferente cu date
implicite
Pași de bază Admin -ul modelează datele din tabele prin query -uri precum INSERT,
UPDATE
Pas alternativ –
Postcondiție Poate folosi noile date pentru alte obiective
Capitolul 4
30
13) Design
14) Implementare
15) Comunicare cu utilizatorul
Nume Design
Descriere Modificarea elementelor de front -end
Actori Admin
Precondiție Admin:
– dispune de un editor de text
– dispune de fișierele HTML, CSS, JavaScript folosite la aplicația curentă
– are cunoștințe solid e de programare și poate înțelege codul sursă
Pași de bază Modifică codul sursă pentru modificarea aplicației pe partea de front -end
Pas alternativ Admin -ul este ajutat de un alt admin în realizarea noilor task -uri
Postcondiție Poate utiliza noile fișie re la template -urile altor aplicații
Nume Implementare
Descriere Modificarea elementelor de back -end
Actori Admin
Precondiție Admin:
– dispune de un editor de text și de un pachet software pentru partea de server
precum XAMPP
– dispune de fișierele PHP, JavaScript, JQuery etc. folosite la aplicația curentă
– are cunoștințe solide de programare și poate înțelege codul sursă
Pași de bază Modifică codul sursă pentru modificarea aplicației pe partea de back -end
Pas alternativ Admin -ul este aj utat de un alt admin în realizarea noilor task -uri
Postcondiție Noile fișiere pot fi utilizate pentru funcționalitatea altor aplicații
Nume Comunicare cu utilizatorul
Descriere Admin -ul raspunde cererilor utilizatorilor
Actor i Admin
Precondiție Admin:
– are instalat SQL Server
– are acces la baza de date cu tabelele aferente , inclusiv cele care stochează
toate cererile solicitate de către utilizatori
– are drepturi de modificare a datelor din tabele
Pași de bază Verifică î n baza de date apariția de noi cereri din partea utilizatorilor
Pas alternativ Admin -ul este ajutat de un alt admin în realizarea noilor task -uri
Postcondiție Trimite un mail de confirmare a cererii înapoi la utilizator împreună cu
răspunsul aferent. În cazul în care cererea nu poate fi realizată utilizatorul va
primi un mail autogenerat
Capitolul 4
31
16) Devine utilizator
4.3.3 Digrama mașinilor de stare
O diagramă de stare este acea diagramă prin care un obiect poate fi modelat prin stările
ți schimbările de stare care au loc pe parcursul unui ciclu. În Figura 4.6 se prezinta Diagrama
mașinilor de stare a afișării pozițiilor celor două obiecte esențiale din cardul aplicației mele:
utilizatorul și medicul specialist. Dacă stăm puțin să o exminăm putem descoperi exact
obiectele care sunt modelate.
Figura 4. 6 Diagrama mașinilor de stare
4.3.4 Proiectare a interfeței
Interfața grafică a produsului software a fost proiectată cu scopul de a oferi utilizatorilor
un grad mare de control asupra aplicației web. Unul dintre scopurile implementării mele a fost
să dezvolt un sistem în așa fel în cât să poată fi cu ușurință modificat și actulizat în viitor. Astfel,
am folosit tehnologii precum HTML, CSS, JavaScript, limbaje foarte flexibile cu ajutorul
cărora s -a putut concepe interfața grafică a unui produs final.
În Figura 4.7 am prezentat pagi na principală a aplicației pe care orice vizitator o poate
vizualiza accesând link -ul corespunzător. Nume Devine utilizator
Descriere Afișarea pe harta Google a două locații – cea a medicului și cea a utilizatorului
Actori Utilizator
Precondiție Serverul funcționează
Admin -ul are acces la internet și este conectat la aplicația web
Pași de bază Admin -ul vizitează site -ul web și își creează cont de utilizator
Pas alternativ –
Postcondiție Admin -ul devine utilizator și poate beneficia de avantajel e folosirii aplicației
Capitolul 4
32
Figura 4. 7 Pagina principală a Aplicației Web M.D. Locate
După cum se observă și în figură am ales ca logo -ul site -ului web să fie ”M.D. Locate” ,
deoarece este o aplicație concepută pentru a localiza (eng. Locate ) medicii (latină Medicinae
Doctor – MD) specializați în funcție de diagnostic. Produsul software este reprezentat prin mai
multe pagini web integrate de către browser în trei componente: HTML, CSS, JavaScript.
Aceste pagini pot fi accesate de pe pagina principală accesând link -urile corespunzătoare.
Structura paginilor este destul de asemănătoare la toate, de aceea vă voi prezenta câteva aspecte
raportate la figura de mai sus.
Baza realizării acestei pagini este limbajul HTML, fără de care nu ar putea exista. La
început a fost un simplu fișier .html în corpul ( eng. body ) căruia am introdus tag -uri de bază
cum ar fi : <div>, <ul>, <p>, <a>, <input>, <button>. Această pag ină, pe moment o pagină
Capitolul 4
33
simplă, a fost ”înfrumusețată” pe parcurs cu ajutorul CSS -ului. Scopul , în schimb , era acela ca
paginile să fie interactive, de aici folosind și Javascript.
JavaScript -ul l-am folosit la efectele animate care dau un plus oricărui si te web, fiind
mult mai atractiv, astfel realizându -se o balanță între ceea ce interacționează cu clientul și
funcționalitățile din spate cu ajutorul cărora se satisface clientul , scopul fiind atingerea unui
nivel cât mai înalt față de așteptăril e unui cli ent.
Dacă revenim la Figura 4.8 putem observa existența unui buton a cărui valoare este
MEDIC. Vizitatorul nu va putea să îl vizualizeze, deoarece face parte din facilitățile pe care le
primește clientul în momentul în care își creează un cont după care se autentifică. Odată apăsat
butonul se realizează o ”alunecare” în jos a conținutului pe care o puteți observa tranziția de la
o stare la alta urmărind Figura 4.9.
Figura 4. 8 Realizarea tranzitiei prin apăsarea butonului MEDIC
Pentru ca această ”alunecare” menționată mai sus să poată fi realizabilă am utilizat o
librărie a JavaScript -ului amintită în capitolul de Studiu Bibliografic – jQuery. Ca
implementare, partea aceea de căutare este ascunsă prin hide(), iar pentru a putea fi vizibilă în
momentul apăsării butonului am realizat o funcție prin care se preia id -ul butonului și folosind
metoda onCLick() accesez clasa care prin elementele corespunzătoare ale CSS va deveni
vizibilă.
$('#quick-search-switcher' ).on('click', functio n(){
$('#quick-search').toggleClass ('quick-search-visible' );
});
Vizualizând din nou figura de mai sus putem observa puțin că fundalul se interchimbă.
Acest lucru a putut fi realizat tot cu jQuery, mai precis un plugin denumit LayerSlider cu
ajutorul căruia se pot realiza efecte animate de calitate pentru galerii de imagini, video -uri etc.
$('#slider .next' ).on('click', function (){
$('#slider' ).layerSlider ('next');
return false;
});
$('#slider .prev' ).on('click', function (){
$('#slider' ).layerSlider ('prev');
return false;
});
Capitolul 5
34
Capitolul 5. Implementarea
Transformările de date sunt prezentate printr -un model funcțional, astfel fluxul întregii
aplicații reprezintă majoritatea pașilor pe care îi poți parcurge de -a lungul aplicației, iar în acest
voi incerca să dezvolt elementele acestui flux (eng. flow) cu metodele necesare îndeplinirii
cerințelor.
5.1 Prelucrarea și stocarea informațiilor
După cum am precizat și în tr-un capitol anterior o bază de date este un punct ese nțial în
dezvoltarea unei aplicație web. Rolul său este de a colecta datele într -un singur loc pentru
gestionarea informațiilor ușor și rapid.
Structura bazei de date a fost concepută în urma analizei detaliate a problemei
referitoare la rata de creștere a numărului oamenilor care au decedat datorită erorilor medicale
în unități de specialitate. De asemenea, alegerea greșită a medicului specialist în ceea ce
privește tratarea pacientului a avut ca urmare cazuri în care de multe ori s -a ajuns la deces.
Citin d articole cu referire la această temă mi -am putut face o idee despre ce anume îmi doresc
de la aplicație și care ar fi soluția cea mai potrivită în alegerea tabelelor și a datelor incluse.
Un rol important în stabilirea entităților care intră în alcătuir ea bazei de date a fost
constituit și de câteva probleme care au necesitat abordare:
asigurarea securității datelor la un nivel ridicat – protejarea prin parolă a bazei de date,
doar administratorii având acces la ea printr -un user și parolă speciale
respe ctarea unui set de reguli în ceea ce privește simptomele alese de către posibilul
pacient și rezultatul cât mai bun al bolii aferente lor
creșterea vitezei interogărilor în baza de date prin împărțirea informațiilor posibil
necesare utilizatorilor în tabel e
Acum câteva capitole am precizat că baza de date a fost realizată cu ajutorul
programului Microsoft SQL Server Management Studio. Acesta este un sistem de gestionare a
bazelor de date relaționale. Bazele relaționale sunt acele baze de date în care datele sunt văzute
ca niște atribute, fiind stocate în tabele și legate între ele prin relații. SGBDR sau Sistemul de
gestiune al bazelor de date relaționale reprezintă un sistem software prin care se implementează
modelul de date relaționale, respectând cerințe le lui. În figura următoare este reprezentată
funcționalitatea unui SGBD.
Capitolul 5
35
Figura 5. 1 Funcțion alitatea unui SGBD
Ca server de baze de date SQL Server are ca principală funcție stocarea și extragerea
datelor solicitate de alte aplicații software. [1] În figura următoare este prezentată interfața SQL
Server precum și baza de date cu tabelele aferente utilizate în aplicație.
Figura 5. 2 Interfața grafică a Microsoft SQL Server Management Studio
În cont inuare sunt prezentate tabelele realizate cu câmpurile aferente.
a) Entitatea Boli
Entitatea Boli este reprezentată în baza de date localizareMedici_db prin tabela ”Boli”.
Aceasta con ține câmpurile Id_Boala – identificator unic prin care se asigură unicitatea unei
boli, Nume_Boala – numele bolilor pe care un utilizator (pacient) este posibil să o aibe. Această
entitate este necesară, deorece dacă utilizatorul, altfel spus pacientul, a fost deja diagnosticat cu
Capitolul 5
36
o boală și dorește să caute un medic pentru o a d oua opinie, îi este simplificată căutarea
selectând boala care duce la un anumit număr de medici care sunt specializați în tratarea acelei
boli.
b) Entitatea Simptome
Entitatea Simptome este reprezentată prin tabela Simptome. Acesta conține câmpuri
precum Id_ Simptom – identificator unic pentru simptom și Nume_Simptom – numele
simptomelor pe care utilizatorul le poate simți. Această entitate este necesară în cazul în care
pacientul suferă de anumite simptome îi este mai ușor să caute acele simptome pentru a pri mi
cazuri de posibile diagnostice și medicii specializați în tratarea lor.
c) Entitatea Specializări
Entitatea Specializări este reprezentată prin tabela Specializari. Aceasta conține
câmpurile Id_Specializare – identificatorul cu ajutorul căruia specializări le devin unice și
Nume_Specializare, după cum spune și denumirea, numele specializării. Această entitate este
esențială, deoarece p rin ea se face legătura dintre posibilele boli și medici specialiști care au
cunoștințe în tratarea lor în funcție de special izare. Cu ajutorul acestei entități se va pune în
aplicație un filtru de căutare al medicilor în funcție de domeniul în care au practicat medicina,
adică pe ce s -au specializat.
d) Entitățile Boli -Simptome și Boli -Specializări
O relație n la n (eng. many to m any relationship ) se referă la relația dintre două entități
A și B în care A poate conține mai multe înregistrări de tip B și invers. De exemplu, în cazul
nostru o boală se poate manifesta prin mai multe simptome, dar și un simptom poate indica
prezența ma i multor boli sau, un alt exemplu, o boală poate fi incadrată în mai multe
specializări, fiind posibilă tratatarea prin mai multe metode și, totodată, o specializare include
tratarea mai multor boli.
Majoritatea sistemelor de management al bazelor de date nu suportă relați n la n, fapt
pentru care este necesară punerea în aplicarea a unei noi relații printr -un al treilea tabel, numit
joncțiune, cheia primară a acestui tabel fiind formată din cele două chei străine de la celelalte
două tabele.
Având astfel d e relații între tabelele din baza de date am procedat la fel, de aici
formându -se tabelele Boli_Simptome și Boli_Specializari. Altfel spus tabela Boli_Simptome
conține câmpurile Id_Boala_Simptom – care reprezintă cheia primară tabelului, Id_Boala și
Id_Si mptom fiind cheile străine de laa tabelele Boli și Simptome. Același lucru se întâmplă și
cu tabela Boli_Specializări având cheia primară Id_Boala_Specializare, iar celelalte două
câmpuri fiind cheile străine de la tabelele Boli și Specializari, anume Id_B oala și
Id_Specializare.
e) Entitatea Medici
Această entitate este reprezentată prin tabela Medici, una din cele mai importante, ea
fiind con stituită din informații despre medicii pe care prin aplicația realizată obiectivul este de
Capitolul 5
37
a-i localiza. Câmpurile sun t Id_Medic – identificatorul care realizează unicitatea fiecărui medic,
deorece există posibilitatea ca doi medici specialiști să fie botezați la fel. Nume_Medic, după
cum precizează denumirea, reprezintă numele medicului , Grad_Instruire – reprezintă gradu l pe
care îl are medicul după instruire : primar,specialist,rezident, Id_Specializare – cheia străină
aferentă tabelului Specializări cu ajutorul căreia medicul devine specializat pe o anumită
specializare .
f) Entitatea Unități Medicale
Entitatea este repreze ntată prin tabela UnitatiMedicale care este la fel de importantă
precum tabela Medici cu care are le gătură directă. Aceasta conține informații referitoare la
unitățile în care medicii specialiști își practică meseria. Câmpuri sunt mai multe față de alte
tabele: Id_unitate – cheia primară care oferă unicitate unității, Nume_Unitate – denumirea
unității medicale, Sectie – secția unității medicale, Adresa – adresa unității medicale, Telefon –
numărul de telefon la care poate fi contactat orice medic, Localitat e – orașul în care se află
unitatea medicală in cazul nostru fiind Cluj – Napoca, Cod_Judet – județul din care face parte
(Cluj) și, nu în ultimul rând, Latitudine și Longitudine – reprezintă coordonatele la care se află
pe hartă unitatea medicală, implici t medicii.
g) Entitatea Medici_UnitatiMedicale
Această entitate este reprezentată prin tabela Medici_UnitatiMedicale și reprezintă un
tabel de tip joncțiune realizat pentru a fi posibilă relația n la n dintre tabelele Medici și
UnitatiMedicale . La fel ca cele lalte tabele de joncțiune cuprinde o cheie primară
Id_Medic_Unitate și cheile străine de la tabelele ”mamă”, Id_Medic și Id_Unitate.
h) Entitatea Utilizatori
Entitatea Utilizatori este reprezentată în baza de date prin tabela Utilizatori în care se
salvează d atele utilizatorului. Conține câmpurile: Id_Utlizator prin care utilizatorul devine unic
și astfel selecția utilizatorilor devine mai facilă prin căutarea în funcțție de id, Nume_Prenume –
aici utilizatorul îți va introduce numele și prenumele propriu, Adr esa – adresa de domiciliu a
utilizatorului, Telefon – numărul de telefon al utilizatorului, Email – adresa de mail a
utilizatorului care va fi unică, Parola – parola setată de utilizator. Coloanele Email și Parola
sunt utilizate pentru autentificarea utili zatorilor în aplicația web.
i) Entitatea Cereri din partea Utilizatorilor
Această ultimă entitate este reprezentată în baza de dat e prin tabela CereriUtilizatori
care se află în strânsă legătură cu entitatea menționată mai sus. CereriUtilizatori conține coloa na
Id_Cerere – prin care orice solicitare trimisă de orice utilizator devine unică, Id_Utilizator –
reprezintă cheia străină din tabela Utilizatori, Comentariu – reprezintă cerere propriu -zisă a
utilizatorului trimisă la admin.
În Figura 5.3 este rezentată diagrama bazei de date cu toate tabelele necesare aplicației
web și relațiile dintre ele .
Capitolul 5
38
Figura 5. 3 Structura Bazei de date
5.2 Implementare soluție
5.2.1. Înregistrare
Pentru crearea conturilor utilizatorilor și inse rarea datelor trimise în baza de date sunt
necesari anumiți pași , prezentați în schema din Figura 5.4 .
Capitolul 5
39
Figura 5. 4 Fluxul procesului de înregistrare
Pentru ca fluxul procesului de înregistrare să fie realizabil este nevoie ca v izitatorul să
completeze formularul de înregistrare pentru a trimite la server informațiile și a fi introduse în
baza de date. Pentru a fi posibil acest lucru mai întâi trebuie să ne conectăm la baza de date.
Acest lucru s -a realizat utilizând pachetul Microsoft SQL Server Driver pentru PHP. Extensia
SQLSRV permite accesarea bazelor de date din PHP când se rulează fișiere PHP pe Windows.
Cu acest pachet vin anumite constante predefinite și funcții [9], cele folosite de mine la
conectarea la baza de date SQ L Server și realizarea înregistrării fiind:
sqlsrv_connect – funcție care deschide o conexiune la SQL Server
sqlsrv_errors() – constantă predefinită care returnează erori și avertizări (eng. warning )
când se trimite ca parametru
sqlsrv_query – funcție care pregătește și execută un query
sqlsrv_num_rows – funcție care preia numărul de rânduri dintr -o tabelă
Codul sursă aferent acestui flux va fi prezentat în Anexe.
Capitolul 5
40
5.2.2. Autentificare
Un utilizator intrat în aplicație se poate autentifica sau nu. În cazu în care n u s-a
autentificat este un simplu utilizator și are acces doar la câteva informații. Această restricție este
posibilă folosind variabila $_SESSION și verificăm dacă este deschisă o sesiune
if(!isset($_SESSION[ 'Nume_Prenume '])), adică dacă utilizatorul este logat sau nu. În cazul în
care da acesarea paginilor este permisă, dacă nu se va afișa un mesaj de tip alert care alarmează
faptul că persoana în cauză nu are destule privilegii pentru accesare.
Pentru ca fluxul procesului de autentificare să fie realizab il este nevoie ca utilizatorul
să completeze în formular adresa de mail și parola. Se folosește același principiu ca la
înregistrare , în plus apar comenzi noi precum:
sqlsrv_has_rows – funcție care indică dacă obiectul specificat are sau nu rânduri
sqlsrv_ fetch_array – funcție prin care se returnează un rând sub formă de vector de
valori
Codul sursă aferent acestui flux va fi prezentat în Anexe. Pentru conectarea
utilizatorilor sunt necesari anumiți pași, prezentați în schema din Figura 5.2.
Figura 5. 5 Fluxul procesului de identificare
5.2.3. Trimi terea cererilor la administrator
Pentru ca fluxul de trimitere a cererilor la administrator să fie realizabil este nevoie ca
utilizatorul să fie conectat și să completeze formularul de cerere pentru a trimite la server
informațiile și a fi introduse în baza de date. Odată apărute în baza de date admin -ul observă
schimbările din tabela corespunzătoare din baza de date verifică cererile și în funcție de ele
Capitolul 5
41
răspunde printr -un mail la utilizatoru l în cauză. Codul sursă va fi prezentat în Anexe. Pentru
trimiterea anumitor cereri de către utilizatori administratorilor sunt necesari anumiți pași,
prezentați în schema din Figura 5.3.
Figura 5. 6 Fluxul procesului de trim itere a unor cereri administratorului
5.2.4. Afișarea poziției curente a utilizatorului pe hartă
Înainte de prezentarea acestui flux voi povesti puțin despre serviciile Google și Hărți de
tip API (Application Programming Interface) cu ajutorul cărora s -a putut r ealiza poziționarea .
API, oferit de Google este destinat utilizării pentru dezvoltări de aplicații care prelucrează
datele și folosesc harta pentru afișare. Totodată, Google Maps oferă servicii precum descărcare
de date, afișarea hărții în mod interactiv e xistând posibitatea animațiilor, adăugare puncte și
poligoane pe hartă , dar și informații referitoare la locațiile existente pe hartă. [11][12]
Capitolul 5
42
Pentru realizarea afișării poziției curente a utilizatorului am folosit Google Map API. Un
API foarte bun ofer it de cei de la Google este numit Geocoding API și permite returnarea
oricărei locații ș i poziționa rea pe hartă însemnându -le printr -un punct. GclientGeocoder
reprezintă clasa utilizată pentru localizare. [13]
În cazul meu am utilizat HTML5 GeoLocation AP I care definește o interfață de nivel
înalt pentru informațiile privind localizarea asociată cu latitudinea și longitudinea. Astfel am
realizat în HTML un buton numit Localizare. Într -un fișier .js am definit o funcție
showLocation() care este apelată în m omentul apăsării butonului Localizare. Pentru a inițializa
Geolocation API trebuie să utilizăm metoda navigator.geolocation.getCurrentPosition(). O altă
metodă folosită va fi fetchLatAndLong() cu ajutorul căreia se vor prelua coordonatele pentru a
focaliz a imaginea de pe hartă în centrul acelei poziții. Codul sursă aferent acestui flux va fi
prezentat în Anexe. În Figura 5.7 este reprezentat butonul Localizare și poziția curentă a
utilizatorului pe harta Googl e. Pentru a returna poziția actuală a utilizator ului sunt necesari
anumiți pași, prezentați în schema din Figura 5.8:
Figura 5. 7 Rezultatul apăsării butonului Localizare în raport cu Harta Google
Capitolul 5
43
Figura 5. 8 Fluxul procesului de afișare a loc ației curente pentru utilizator
5.2.5. Poziționarea medicului pe harta Google
Pentru ca acest flux să poată fi realiza este necesară utilizarea tabelelor Medici și
UnitatiMedicale din baza de date. Se va folosi un JOIN pentru selectarea medicilor și a
unităților medicale, având nevoie de coordonate. Dacă vă amintiți, în tabela UnitatiMedicale
existau două câmpuri Latitudine și Longitudine și în funcție de datele din coloane vom afișa
poziția medicului pe hartă. Pentru început am realizat o funcție de inițializare în care vom avea
două obiecte sau variabile: mapInfo – obiect de tipul new google.maps.Map() în care
coordonatele sunt preluate din baza de date și utilizate pentru a centra imaginea hărții exact la
poziția respectivă, și mark – obiect de tip new google.ma s.Marker() pentru a poziționa imaginea
exact în coordonatele raportate la fiecare unitate medicală în parte, deci implicit poziționarea
medicului pe hartă.
Pentru Figura 5.9 am luat cazul în care căutăm un medic specialist în Obstretică –
Ginecologie, pri mul care a ieșit în cale în ordine alfabetică fiind Dr. Achimas Cadariu Patriciu
Andrei. Accesând pagina sa proprie (are dreptul doar utilizatorul conectat) putem observa
detaliile despre el printre care adresa unde îl putem găsi, aceasta fiind Strada Emil Isac Nr. 13.
Putem observa că a fost localizat și pe hartă cu aceeași adresă în funcție de latitudine și
longitudine, deci localizarea acestui medic specialist s -a realizat cu succes. Pentru poziționarea
medicului pe Hart a Google sunt necesari anumiți paș i, prezentați în schema din Figura 5.10.
Codul sursă aferent acestui flux va fi prezentat în Anexe.
Capitolul 5
44
Figura 5. 9 Localizarea Medicului Specializat pe Harta Google
Figura 5. 10 Fluxul procesului de l ocalizare a medicului specializat în funcție de datele preluate
din tabelele corespunzătoare
Capitolul 5
45
5.2.6. Calculul distanței utilizator -medic
Datorită faptului că Serviciile de la Google nu sunt integrate în niciun capitol, eventual
doar menționate, vă voi prezenta mai pe scurt câteva aspecte teoretice și practice pentru a putea
înțelege mai bine noțiunile și pașii care au determinat calcularea distanței.
Hărțile Google, apărute în 2005, au transformat total cartografierea online. Nu sunt
dependente de o singură relație client -server, ci folosesc un sistem mai interactiv bazat pe
AJAX prin care este prezentată o hartă online care permite centrarea imaginii, apropierea și
depărtarea ei. [14]
Un avantaj al folosirii acestor tip de hărți îl reprezintă recunoașterea reprezent ării
globale, având abilitatea de referință a datelor spațial. Majoritatea acesto r APIs sunt în așa fel
proiectate pentru a putea fi folosite cu limbajul JavaScript. JavaScript, introdus în capitolul trei,
este un limbaj orientat pe obiecte, scopul lui fii nd dezvoltarea aplicațiilor pe partea de client.
Dezavantajul îl reprezintă codul sursă c are poate fi deshis ș i citit cu ușurință direct din browser
prin selectarea View Source (se apasă F12).
JavaScript inclu de un număr de funcții interne, numite Math Obj ects. Majoritatea sunt
funcții trigonometrice care pot fi folosite pentru a determina distanța între două puncte pe
suprafața pământului .
În aplicație distanța a fost determinată utilizând formula Haversine, ecuație foarte
importantă în navigare, care cal culează distanța dintre două puncte pe sferă folosindu -le
coordonatele. Figura 5.11 reprezintă formula Haversine cu ajutorul căreia se poate calcula
distanța.
Figura 5. 11 Formula Haversine [1]
unde:
haversin – funcția Haversi ne :
d – distanța dintre două puncte
r – raza sferei
ϕ1, ϕ2 – latitudinea punctelor 1 și 2
λ1, λ2 – longitudinea punctelor 1 și 2
Pentru integrarea formulei avem fișier ul .js:
latitudeLongitude .distHaversine = function (latitude1 , longitude1 , latitude2 ,
longitude2 ) {
var R = 6371; // raza medie a pamantului (km)
var dLatitude = (latitude2 -latitude1 ).toRad(); // se calculeaza
latitudinea si se converteste in radiani
var dLongitude = (longitude2 -longitude1 ).toRad(); // se calculeaza
longitudine a si se converteste in radiani
latitude1 = latitude1 .toRad(), latitude2 = latitude2 .toRad();
var a = Math.sin(dLatitude /2) * Math.sin(dLatitude /2) +
Capitolul 5
46
Math.cos(latitude1 ) * Math.cos(latitude2 ) *
Math.sin(dLongitudeg /2) * Math.sin(dLongitu deg/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d;
}
Integrând scriptul în HTML am obținut:
Figura 5. 12 Calcul distanță prin introducerea coordonatelor geografice
Pasul urmă tor este de a trimite cerere la server pentru a prelua coordonatele locației
medicului din baza de date , iar prin HTML5 GeoLocation API prezentat anterior vom prelua
coordonatele utilizatorului. Astfel utilizatorul nu va mai fi nevoit să introducă datele c i va primi
direct răspunsul.
Figura 5. 13 Rezultatul final al căutării medicului specialist pe Harta Google
Capitolul 6
47
Capitolul 6. Testare și validare
Acest capitol este adresat prezentării rezultatelor experimentale obținute în urma
analizării f uncționa lității aplicației, precum și validarea codului sursă. Pentru o bună
funcționare a aplicației web sunt necesari câțiva pași pe care am încercat să îi sintetizez în
figura următoare:
Figura 6. 1 Pașii importanți pentru o bună funcționalitate a Aplicației Web
6.1 Testare
Acest subcapitol este destinat prezentării rezultatelor obținute după testarea
funcționalității. Testarea este un proces esențial în finalizarea unei aplicații, rezultatele fiind un
punct de început în înț elegerea problemelor de funcționalitate, oferind totodată, informații
raportate la calitatea produsului final. Testarea aplicației s -a realizat manual, în continuare fiind
prezentate câteva scenarii:
6.1.1 Înregistrare
Pentru a nu fi un simplu vizitator al aplic ației web, fapt pentru care nu poți utiliza
funcțiile principale ale produsului software, este necesară crearea unui cont pentru a fi salvat în
baza de date. Pentru aceasta a fost creat un formular de înregistrare prin care informațiile
utilizatorilor sun t introduse în tabela corespunzătoare. Salvarea datelor se va realiza cu succes
în cazul în care toate condițiile au fost îndeplinite.
Condiții:
utilizatorul este nevoit să completeze toate câmpurile din formular, în caz contrar va
apărea un mesaj de aten ționare; pentru a optimiza formularul, în cazul în care unul dintre
câmpuri este necompletat va fi verificat mai întâi de browser folosind atributul ”required ” în
tag-urile corespunzătoare, astfel se salvează timpul în care se trimite cererea la server, se
verifică, apoi se trimite răspunsul înapoi la browser
Figura 6. 2 Mesaj de atenționare pentru necomp letarea câmpului Nume și Prenume
utilizatorul este nevoit să introducă aceeași valoare în câmpurile Parolă și Confirmare
Parolă, altfel se atenționează printr -un mesaj
Capitolul 6
48
Figura 6. 3 Mesaj de atenționare pentru introducerea de date diferite pentru confirmarea parolei
utilizatorul trebuie să introducă o parolă de minim 8 caactere, în caz contrar va primi un
mesaj de atenționare
Figura 6. 4 Mesaj de atenționare pentru introducerea unei parole prea scurte
utilizatorul trebuie să țină cont de un alt aspect important, acela referitor la adresa de
email care este unică pe site -uri precum Yahoo, Gmail etc.; adresa de mail va fi utilizatorul cu
care se va putea conecta fiecare, de aceea în baza de date nu trebuie să existe mai multe conturi
create c u aceeași adresă de mail fapt p entru care se va primi un mesaj de atenționare în cazul în
care există deja în baza de date
Figura 6. 5 Mesaj de atenționare pentru adresă de mail existentă în baza de date
6.1.2 Identificare
Pasul următor care trebuie îndeplinit constă în autentificare a în aplicația web. În felul
următor utilizatorul are acces deplin la toate opera țiile pe care aplicația le pune la dispoziție.
Pentru a se putea realiza operația de identificare este necesar ă îndeplinirea anumitor condiții:
conectarea la baza de date este esențială, deoarece pentru a verifi ca dacă datele
introduse de utilizator coincid cu cele din baza de date trebuie realizată o interogare pe tabela
Utilizatori; în cazul în care datele nu coincid se va primi un mesaj de atenționare .
Capitolul 6
49
În figura de mai jos observăm că datele au fost introduse greșit. Este necesar ca
utilizatorul să fie adres de mail a fiecărui utilizator, în schimb în figură nu a îndeplinit această
condiție.
Figura 6. 6 Mesaj de atenționare pentru utilizator introdus greșit
un alt scenariu în care autentificarea poate da greș este acela în care nu au fost introduse
date în formular, astfel se va primi din nou mesaj de atenționare
Figura 6. 7 Mesaj de atenționare pentru câmpurile goale
pentru o funcț ionare bună utilizato rul este nevoit să introducă datele corect, care
coincid cu cele existente în baza de date; dacă au fost introduse corect se deschide o sesiune cu
mesajul ”Buna, utilizator!”, dacă nu se va afișa un mesaj de eroare
6.1.3 Baze de Date
Acest subcapitol constă în a testa dacă interogările pe baza de date s -au realizat în așa fel
încât informațiile sunt valide și existente în baza de date, iar prin filtrarea informațiilor după
anumite criterii de sortare datele au fost afișate în mod corect . Printre testele realiza te amintim:
la secțiunea Boli, afișarea bolilor se face în ordine alfabetică având un tabel cu literele
alfabetului, astfel că atunci când butonul este apăsat, de exemplu pe litera A, vor fi afișate doar
acele boli care încep cu litera; după cum observăm ș i în figura 6.8 testul a fost trecut
Figura 6. 8 Testarea filtrului de sortare a bolilor în funcție de liter din alfabet
Capitolul 6
50
la secțiunea Simptome, utilizatorul (pacientul) poate simți anumite simptome, iar pentru
o căutare rapid ă și ușoară avem un filtru de sortare a simptomelor în funcție de cuvintele
introduse în căsuța de căutare ; de exemplu, dacă utilizatorul suferă de o durere în jurul
abdomenului, dar datele introduse în căsuța de căutare corespund cuvântului durere, răspun sul
de la server va trebui să corespundă cu o listă de simptome care conțin cuvântul ”durere” în
descrierea lor
Acest test a trecut cu succes, după cum se poate observa în Figura 6.9:
Figura 6. 9 Rezultatul testului de căutare a simptomului în funcție de datele introduse de către
utilizator
un alt test care nu trebuie trecut cu vederea este verificarea dacă adresa la care este
localizată unitatea medicală în care medicul specialist preofesează este acceași cu poziția
medicului p e harta Google ; testul a trecut cu succes, un exemplu aferent fiind menționat în
capitolul cinci și demonstrat prin Figura 5.9
6.1.4 Localizare
În ceea ce privește acest aspect pot apărea probleme în cazul în care nu sunt îndepliniți
anumiși pași. În primul rân d este necesară conexiunea la internet pentru putea beneficia de
serviciile Google. Prin modul GPS utilizatorul primește o notificare prin care se dorește
localizarea acestuia. În cazul în care refuză poziționarea pe hartă nu va putea fi posibilă,
implici t și a calcului distanței deoarece unul dintre parametri va fi inexistent.
Pe de altă parte, există posibilitatea apariției unei erori în momentul conectării la baza de
date care produce o problemă asemănătoare cazului anterior, deoarece informațiile nu vo r fi
Capitolul 6
51
accesibile, încercarea localizării medicilor va eșua, de unde din nou problema lipsei unuia
dintre parametri.
În ceea ce privește calculul distanței există posibilitatea ca formula să fie greșită
rezultatul afișat fiind unul eronat. Un alt caz ar fi a cela care implică din nou conexiunea la baza
de date, astfel coordonatele nu vor putea fi preluate, iar formula aferentă calculului distanței nu
va avea ce să calculeze.
6.2 Validare
CSE HTML Validator este o aplicație software cu o versiune Lite gratuită, p entru
sisteme de operare de tip Windows. Acest produs ajută programatorii web în realizarea unor
documente HTML, XHTML, HTML5, CSS3 cu o sintaxă corectă, accesibilă localizând erorile
și posibilele probleme.[1]
În continuare vă prezint două figuri sugestiv e, referitoare la validarea paginii de
înregistrare – register.html. După cum se observă în primul scenariu am primit eroare deoarece
conținutul tag -ului meta era gol. După soluționarea problemei rezultatul final a fost unul
pozitiv. La fel am procedat și cu celelalte fișiere. În figura 6.10 a) este prezentată interfața
programului software folosit la validare – scenariu eronat, iar în b) fișierul nu are erori și a putut
fi validat.
a)
Figura 6. 10 Interfața CSE HTML Validator
Capitolul 6
52
b)
Figura 6.10 Interfața CSE HTML Validator
Capitolul 7
53
Capitolul 7. Concluzii
7.1 Cerințe de interfață
Domeniul medical este abordat în foarte multe aplicații, dar este necesar ca noile
aplicații să fie cât mai mai diversificate, complexe, flexibile și să se apropie tot mai mu lt de
cerințele din domeniu.
Lucrarea de față își propune studierea și aducerea de noi contribuții în domeniul
medical, astfel că poate fi accesată de un număr mare de utilizatori. Interfața pentru client este o
componentă esențială în tehnologia din zilel e noastre. Alte atribute cheie ale aplicației realizate
se pot număra ca fiind caracteristica de platformă integrată prin care se elimină utilizarea mai
multor produse distincte, utilizarea unui model de date unificat, capacitatea de raportare
dinamică, pr ecum și mentenanța facilă a sistemului.
Aplicația va avea o interfață intuitivă, fiind ușor de navigat pe ea, deci permite
interacțiunea cât mai facilă cu clientul (în majoritatea cazurilor pacientul). Pentru a utiliza
aplicația operatorul uman trebuie să dețină câteva noțiuni elementare despre utilizarea și
navigarea unui site web.
Pentru a realiza acea interfață intuitivă se presupune a se realiza integrarea elementelor
de analiză, monitorizare și raportare a performanțelor unor activități. În consecință, dacă
arhitectura aplicației cuprinde o singură metadată (date cuprinse în alte date) utilizatorii nu vor
mai fi nevoiți să folosească un număr mare de instrumente, să interacționeze cu mai multe
interfețe, mai mult decât atât vor putea naviga mult mai sim plu pe paginile web de la meniuri
până la tabele de performanță pentru analiză sau raportare. Scopul este, totuși, de a realiza un
produs software pe lângă performant, accesibil oricărei categorii de vârstă.
Funcționalitatea produsului software este în mar e parte realizat cu limbajului PHP care
beneficiază de aportul de viteză prin statutul său ca modul al serverului Web , devenind parte a
serverului în momentul compilării. C ererile solicitate de către clienți pot fi satisfăcute cu mai
multă eficiență , deoar ece nu există transfer spre sau de la o altă aplicație web . În acest fel,
putem spune că PHP oferă cea mai bună oportunitate de a dezvolta rapid Aplicații Web
puternice.
Un avantaj în dezvoltarea aplicației îl reprezintă structura tabelelor din baza de dat e,
foarte flexibilă, ce oferă multe posibile scenarii prin c are se pot realiza diverse operații prin
care informația dorită este gestionată în funcție de nevoile fiecăruia .
7.2 Dezvoltări ulterioare
Aplicația poate fi îmbunătățită pe mai multe planuri. În pr imul rând, ca implementare, se
poate realiza o secțiu ne de progamări la orice medic existent în baza de date printr -un simplu
formular de programare în care se va alege data și ora , iar datele despre utilizator vor fi preluate
automat în cazul în care este autentificat. În decursul unei ore pacientul va primi răspunsul
referitor la disponibilitatea medicului astfel programarea să poată fi confirmată .
Capitolul 7
54
Pe de altă parte, pentru toți utilizatorii noi apăruți care nu pot decide care medic ar fi
mai potrivit ca zului lor, aș propune realizarea unei secțiuni de Recenzii, prin care fiecare medic
va fi evaluat de către pacienții lui anteriori printr -o notă, sau exprimându -și liber părerile în
secțiunea de Comentarii. În funcție de notele primite pe parcursul unei l uni se va realiza un
raport cu medicii care au media cea mai mare, iar pentru a fi mai interactiv se va realiza și un
grafic prin care va putea fi evaluată evoluția medicilor care au fost notați pe o anumită perioadă
de timp.
La nivel de administrator, se poate realiza implementarea unei secțiuni de Comunicări
Real Tim e, adică totul se va petrece în timp real, asemănător unui chat, dar puțin mai
performant, deoarece scopul este de a reduce timpul în care se întâmplă atât trimiterea cererilor
la administrat or, cât și răspunsul aferent utilizatorilor.
7.3 Contribuții
Obiectivul acestui proiect a fost studierea și gestionarea datelor medicale,
implementându -se un algoritm capabil să realizeze localizarea propriu -zisă a medicilor pe hartă
pentru a ușura munca pac ienților care necesită de un medic pentru tratarea unei boli sau pentru
a cere o a doua opinie, dar nu cunosc domeniul și nu se pot încrede în oricine, fapt pentru care
aplicația este disponibilă la orice oră, pacientul având dreptul de a analiza informați ile cât crede
el de cuviință.
Pentru implementare se folosesc și serviciile de la Google care ajută în localizarea
persoanelor care se află în rol principal – medicul și posibilul său pacient, sau în definirea unor
formule precum cea de calculare a distan ței între dou ă puncte geografice astfel reu șind s ă se
ofere o distan ța mai exact ă.
În final trebuie specificat faptul că lucrarea a fost conceput ă în ideea de a facilita
căutarea medicilor specialiști din județul Cluj , varianta prezentată fiind una desch isă, destinată
dezvoltării, actualizării și îmbunătățirii permanente.
Proiect de diplomă
55
Bibliografie
[1] Wikipedia – enciclopedia liberă (http://en.wikipedia.org/wiki)
[2] What are Applications Web? (http://www.acunetix.com/websitesecurity/web -applications/)
[3] The Journal of Patient Safety – jurnal public USA
(http://journals.lww.com/journalpatientsafety/Fulltext/2013/09000/A_New,_Evidence_based_E
stimate_of_Patient_Harms.2.aspx)
[4] T. H. Nelson, A File Structure for The Complex, Ed. The Changing and the Indete rminate,
Complex Information Processing, 24 August 1956
[5] Lorem ipsum -text standard utilizat pentru a simula casete de text (http://ro.lipsum.com/)
[6] W3Schools – set gratuit de tutoriale și documentații pentru programarea paginilor web
(http://www .w3schools.com)
[7] Ce înseamnă Front -End și ce înseamnă Back -End?
(http://webblog.bestwebimage.ro/2014/06/ce -inseamna -front -end-si-ce-inseamna -back -end/)
[8] Mozilla Developer Network – informații despre tehnologiile web
(https://developer.mozilla.org/e n-US/)
[9] Mehdi Achour, Friedhelm Betz, Antony Dovgal și alții, PHP Manual, Ed. Peter Cowburn,
PHP Documentation Group, 1997 -2015(http://php.net/)
[10] NetCraft – Articole software (http://www.netcraft.com )
[11] Sabyasachi Patra , Karishma Velisetty , Prathamesh Patel , Google Maps and RSS
Integration in Android , October – December 2013
[12] Google Map APIs (https://developers.google.com/maps)
[13] Blog Tehnic, Tutoriale (http://viralpatel.net/)
[14] Michael Peterson, Chair, International Cartograohic Association Commission on Maps and
the Internet, ONLINE Mapping With Google Maps API v3, University of Nebraska at Omaha
Proiect de diplomă
56
Anexe
Acest capitol constă în prezentarea codului sursă a documentelor mai importante care au
dus la realizarea soluției al ese. Deoarece codul sursă al paginilor web este asemănator voi
prezenta doar pagina principală
Pagina Web Acasă – index .php
<?php session_start (); ?>
<!DOCTYPE html >
<html>
<head>
<title>M.D. Locate Application Web </title>
<!– metas –>
<meta charset="utf-8">
<meta name="author" content="source code" >
<!–/ metas –>
<!– styles –>
<link rel="stylesheet" type="text/css" href="css/layerslider.css" >
<link rel="stylesheet" type="text/css" href="css/fullwidth/skin.css" >
<link rel="stylesheet" type="text/css" href="css/font -awesome.css" >
<link rel="stylesheet" type="text/css" href="css/owl.carousel.css" >
<link rel="stylesheet" type="text/css" href="css/jquery.fancybox.css" >
<link rel="stylesheet" type="text/css " href="css/styles.css" >
<link rel="stylesheet" type="text/css" href="css/crscheme.css" >
<link rel="stylesheet"
href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery -ui.css">
<link rel="stylesheet" href="css/showhide.css" />
<!–/ styles –>
<script src="//code.jquery.com/jquery -1.10.2.js" ></script>
<script src="//code.jquery.com/ui/1.11.4/jquery -ui.js"></script>
<script
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" ></scri
pt>
<script src="//code. jquery.com/ui/1.11.4/jquery -ui.js"></script>
<script
src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js" ></scr
ipt>
<script src="js/login_form_appearance.js" ></script>
<!–[if lt IE 9]><script src="js/html5.js"></script><![end if]–>
</head>
<body>
<div class="page-boxed">
<!– page header –>
<header class="page-header main -page sticky" >
<div class="sticky-wrapp">
Proiect de diplomă
57
<!– login and signup –>
<nav class="login-nav">
<div>
<ul>
<?php if(!isset($_SESSION [ 'Nume_Prenume' ])){
echo "
<li>
<a
href='register.html'>Inregis trare</a>
</li>
<li>
|
</li>
<li>
<a href='#'
id='signin'>Identificare</a>
</li>
"; }else{ echo "
<li>
<form method= 'get' name='logout –
form' id= 'logout -form'>
<button type= 'submit' name=
'logout-button' id= 'logout -button'><center><i class='fa fa -power-
off'></i></center></button>
</form>
</li>
<li class='identity' id= 'welcome –
user'>Bun venit, <span id= 'span -user'>".$_SESSION [ 'Nume_Prenume' ].
"</span>!</li>
"; } if(isset($_GET[ 'logout-
button'])){ unset($_SESSION [ 'Nume_Prenume' ]); header( "Location:
index.php" ); } ?>
</ul>
</div>
</nav>
<!– /login and signup –>
<div class="sticky-container" >
<!– logo –>
<section id="logo" class="logo">
<img src="img/cyan/logo.png" alt="M.D. Locate" >
</section>
<!–/ logo –>
<!– main nav –>
<nav class="main-nav">
<ul>
<li>
<a href="#" class="active" ><i class="fa fa-
plus"></i>Acasa</a>
<ul>
<li>
Proiect de diplomă
58
<p style="cursor: pointer; margin –
left: 30px; margin -bottom: 5px" >Contact creator site </p>
<ul>
<li class="text">
<h2>M.D. Locate </h2>
<hr>md.locate@domain.com
<a href="contacts.html"
class="more"><i class="fa fa-angle-double-right"></i></a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#"><i class="fa fa-plus"></i>Index
Medical</a>
<ul>
<li><a href="meds.php" >Medici</a></li>
<li><a href="hospitals.html" >Unitati
Medicale </a></li>
</ul>
</li>
<li>
<a href="#"><i class="fa fa-
plus"></i>Bibioteca Medicala </a>
<ul>
<li><a href="diseases.php" >Boli</a></li>
<li><a
href="widgets.html" >Simptome </a></li>
</ul>
</li>
<li>
<a href="contacts.html" ><i class="fa fa-
plus"></i>Contact</a>
</li>
</ul>
</nav>
<!–/ main nav –>
</div>
</div>
<div id="main">
<!– Create div first for Login Form –>
<div id="first">
<form action="php/check_user.php" method="get"
id="login_form" >
<input type="text" name="loginemail" id="loginemail"
placeholder ="Email" />
<input type="password" name="loginpassword"
id="loginpassword" placeholder ="Parola" />
<input type="submit" id="login" value="Logare"
onclick="../meds.php" />
</form>
Proiect de diplomă
59
</div>
<!– /Create div first for Login Form –>
</div>
</header>
<!–/ page header –>
<!– div delimiter between header and quick -search–>
<div id="delimiter" ></div>
<!–/ div delimiter between header and quick -search–>
<!– quick search –>
<form id="quick-search" class="quick-search">
<fieldset>
<input type="text" placeholder ="Cauta medic dupa nume"
id="docname" name="docname" class="ui-autocomplete -input"
autocomplete= "off">
<select>
<option selected ='selected' >Specializare </option>
<?php require "php/connect_to_db.php" ; $query1="SELECT
Id_Specializare, Nume_Specializare FROM Specializari" ; $result1 =s
qlsrv_query ($conn,$query1); while($row1=s qlsrv_fetch_array ($result1 ,
SQLSRV_FETCH_ASSOC )){ $id_specializare =$ row1[ 'Id_Specializare' ];
$nume_specializare =$ row1[ 'Nume_Specializare' ]; echo "
<option value='1" .$id_specializare .
"'>".$nume_specializare . "</option>
"; } ?>
</select>
<select>
<option selected ='selected' >Unitati Medicale </option>
<?php require "php/connect_to_db.php" ; $query="SELECT
Id_Unitate, Nume_Unitate, Sectie FROM UnitatiMedicale" ; $result=s
qlsrv_query ($conn,$query); while($row=s qlsrv_fetch_array ($result,
SQLSRV_FETCH_ASSOC )){ $id_unitate =$ row[ 'Id_Unitate' ]; $nume_unitate =$ row[
'Nume_Unitate' ]; $sectie=$ row[ 'Sectie' ]; echo "
<option value='1 ".$id_unitate .
"'>".$nume_unitate . " ".$sectie. "</option>
"; } ?>
</select>
<button type="submit" ><i class="icon-search">CAUTA</i>
</button>
<div class="switcher" >
<button id="quick-search-switcher"
type="button" >Medic</button>
</div>
</fieldset>
</form>
<!–/ quick search –>
<!– slider –>
<div class="slider-wrapper" >
<section class="slider" id="slider" >
Proiect de diplomă
60
<div class="ls-slide" data-
ls="transition2d:9;slidedelay:7000;" >
<img src="pic/medical -slide-2.jpg" alt="" class="ls-bg">
</div>
<div class="ls-slide" data-
ls="transition2d:40;slidedelay:7000;" >
<img src="pic/medical -slide-1.jpg" alt="" class="ls-bg">
</div>
<div class="ls-slide" data-
ls="transition2d:11;slidedelay:7000;" >
<img src="pic/medical-slide-3.jpg" alt="" class="ls-bg">
</div>
</section>
</div>
<!–/ slider –>
<!– page content –>
<main class="page -content">
<div class="grid-row"></div>
<div class="grid-row">
<!– services –>
<section class="services" >
<ul>
<li>
<a class="pic"><i class="fa fa-user-md"></i></a>
<div class="text">
<h2>Medici Specializati </h2>
<p>- functia unui medic este aceea de
vindecare a bolilor, fiind una din profesiile cele mai vechi ale omului.
Profesia de medic provine din ocupatia de tamaduitor, ocupatie care deja era
practicata de preotii din antichitate. </p>
<a href="meds.php" class="more fa fa -long-
arrow-right"></a>
</div>
</li>
<li>
<a class="pic"><i class="fa fa-hospital –
o"></i></a>
<div class="text">
<h2>Unitati Medicale </h2>
<p>- institutii dedicate m entinerii
sanatatii care ofera atat ingrijire pe o perioada scurta de timp cat si
pentru o perioada medie si chiar lunga de timp. In antichitate, cele mai
vechi cladiri a caror scop era tratarea bolnavilor sunt templele egiptene.
</p>
<a href="hospitals.html" class="more fa fa –
long-arrow-right"></a>
</div>
</li>
</ul>
</section>
<!–/ services –>
Proiect de diplomă
61
</div>
</main>
<!–/ page content –>
<!– page footer –>
<footer class="page-footer">
<a href="#" id="top-link" class="top-link"><i class="fa fa-
angle-double-up"></i></a>
</footer>
<!–/ page footer –>
<!– copyrights –>
<div class="copyrights" >Copyrights ©2015: M.D. Locate Application
Web</div>
<!–/ copyrights –>
</div>
<!– scripts –>
<script type="text/javascript" src="js/jquery.min.js" ></script>
<script type="text/javascript" src="js/jquery -ui.min.js" ></script>
<script type="text/javascript" src="js/jquery.migrate.min.js" ></script>
<script type="text/javascript" src="js/owl.carousel.min.js" ></script>
<script type="text/javascript" src="js/jquery. isotope.min.js" ></script>
<script type="text/javascript"
src="js/jquery.fancybox.pack.js" ></script>
<script type="text/javascript" src="js/jquery.fancybox –
media.js" ></script>
<script type="text/javascript" src="js/jquery.flot.js" ></script>
<script type="text/javascript" src="js/jquery.flot.pie.js" ></script>
<script type="text/javascript"
src="js/jquery.flot.categories.js" ></script>
<script type="text/javascript" src="js/greensock.js" ></script>
<script type="text/javascript"
src="js/layerslider.transitions.js" ></script>
<script type="text/javascript"
src="js/layerslider.kreaturamedia.jquery.js" ></script>
<!– Superscrollorama –>
<script type="text/javascript"
src="js/jquery.superscrollorama.js" ></script>
<script type="text/javascript" src="js/TweenMax.min.js" ></script>
<script type="text/javascript" src="js/TimelineMax.min.js" ></script>
<!–/ Superscrollorama –>
<script type="text/javascript" src="js/jquery.ui.core.min.js" ></script>
<script type="text/javascript"
src="js/jquery.ui.widget.min.js" ></script>
<script type="text/javascript" src="js/jquery.ui.tabs.min.js" ></script>
<script type="text/javascript" src="js/jquery -ui-tabs-
rotate.js" ></script>
<script type="text/javascript"
src="js/jquery.ui.accordion.min.js" ></script>
Proiect de diplomă
62
<script type="text/javascript" src="js/jquery.tweet.js" ></script>
<!– EASYPIECHART –>
<script type="text/javascript" src="js/jquery.easypiechart.js" ></script>
<!–/ EASYPIECHART –>
<script type="text/javascript"
src="js/jquery.autocomplete.min.js" ></script>
<script type="text/javascript" src="js/scripts.js" ></script>
<!–/ scripts –>
</body>
</html>
Script pentru apariția formularului de autentificare
$(document ).ready(function (){
$("#signin" ).live("click", function (event){
event.stopPropagation ();
$("#first" ).toggle("hide");
});
$(function (){
$(document ).click(function (event){
$('#first' ).hide();
$('#loginemail' ).val("");
$('#loginpassword' ).val("");
});
$("#first" ).click(function (e){
e.stopPropagation ();
});
});
});
Conectarea la baza de date – connect_to_db.php
<?php
/*numele serverului*/
$serverName = "localhost" ;
/*baza de date, utilizatorul si parola cu care ne conectam la SQL SERVER
2008 Management Studio*/
$connect ionInfo = array( "Database" =>"localizareMedici_db" ,
"UID"=>"Maddy", "PWD"=>"maddy");
/*datele de conectare se pun intr -o variabila apoi se verifica daca
datele coincid pentru a se putea realiza conexiunea*/
$conn = sqlsrv_connect ( $serverName , $connectionInfo );
if( $conn ) {
echo "";
}else{
echo "Connexiune esuata.<br />" ;
die( print_r( sqlsrv_errors (), true));
}
?>
Înregistrarea vizitatorilor – create_account.php
<?php
// se importa fisierul connect_to_db. php pentru conectarea la baza de
date
Proiect de diplomă
63
require 'connect_to_db.php' ;
// daca campurile au fost completate
if(isset($_POST["name"]) && isset($_POST["address" ]) &&
isset($_POST["phone"]) && isset($_POST["email"]) &&
isset($_POST["password" ]) && isset($_POST["confirm -password" ]) &&
!empty($_POST["name"]) && !empty($_POST["address" ]) &&
!empty($_POST["phone"]) && !empty($_POST["email"]) &&
!empty($_POST["password" ]) && !empty($_POST["confirm -password" ])){
// preluarea datelor din for mular
$name = $_POST['name'];
$address = $_POST['address' ];
$phone = $_POST['phone'];
$email = $_POST['email'];
$password = $_POST['password' ];
$confirmpassword = $_POST['confirm -password'];
// formeaza si executa query -ul de SELECT din baza de date
$user_query = "SELECT * FROM Utilizatori WHERE Email = ' $email'"
;
$result = sqlsrv_query ($conn, $user_query ,array(), array(
"Scrollable" => 'buffered' ));
$row_count = sqlsrv_num_rows ($result);
// verificam daca mailul setat pentru inregistrare exista deja
in baza de date
if($result && ($row_count >0)){
echo "<script>alert('Utilizatorul este deja folosit!
Încercați altul.');
window.location.href = '/Licenta – Localizare
Medici/Clinico/Clinico – Responsive Medical and Health
Template/register.html';
</script>" ;
exit;
}
else{
// daca nu, se realizeaza inserarea datelor in baza de date
$user_query = "INSERT INTO Utilizatori(Nume_Prenume, Adresa,
Telefon, Email, Parola ) VALUES (' $name','$address ', '$phone', '$email',
'$password ')";
$response = sqlsrv_query ($conn, $user_query );
echo "<script>
alert('Parolele nu coincid.');
window.location.href = '/Licenta – Localizare
Medici/Clinico/Clinico – Responsive Medical and Hea lth
Template/register.html;
</script>" ;
exit;
// daca query -ul de INSERT s -a executat cu succes va aparea
un mesaj afirmativ
if($response ){
echo "<script>
alert('Utilizatorul a fost creat cu succes!');
window.location.href='/Licenta – Localizare
Medici/Clinico/Clinico – Responsive Medical and Health Template/index.php';
</script>" ;
exit;
Proiect de diplomă
64
}
// daca nu -> mesaj de eroare
else{
echo "<script>
alert('A apărut o eroare, fapt pentru care
utilizatorul nu a fost creat. Vă rugăm reîncercați.');
window.location.href = '/Licenta – Localizare
Medici/Clinico/Clinico – Responsive Medical and Health
Template/register.html;
</script>';" ;
exit;
}
}
}
else{
// daca nu -> mesaj de eroare
echo "<script>
alert('Nu au fost completate toate câmpurile.');
</script>" ;
exit;
}
?>
Autentificarea utilizatorilor – check_user.php
<?php
require 'connect_to_db.php' ;
// verifica daca exista date transmise
if(isset($_GET['loginemail' ]) && isset($_GET['loginpassword' ]) &&
!empty($_GET['loginemail' ]) && !empty($_GET['loginpassword' ])){
// preia datele din formular
$email=$_GET['loginemail' ];
$password =$_GET['loginpassword' ];
// formeaza si executa query -ul de select din baza de date
$select_user_query = "SELECT * FROM Util izatori WHERE Email
='$email' AND Parola =' $password '";
$result = sqlsrv_query ($conn, $select_user_query );
// verifica daca interogarea a gasit date valide
if($result && sqlsrv_has_rows ($result)===1){
$user = sqlsrv_f etch_array ($result);
$name = $user['Email'];
session_start ();
// salveaza numele si prenumele in sesiune
$_SESSION ['Email'] = $name;
header("Location: /Licenta – Localizare Medici/Clinico/Clinico –
Responsive Medical and Health Template/index.php" );
die();
}
else{
// daca nu, afiseaza un mesaj de eroare
echo "<script>
alert('Utilizatorul și/sau parola sunt greșite.');
window.location.href=' /Licenta – Localizare
Medici/Clinico/Clinico – Responsive Medical and Health Template/index.php';
</script>" ;
}
Proiect de diplomă
65
}
else{
// daca nu exista date transmise afiseaza un mesaj de eroare
echo "<script>
alert('Nu au fost completate toate câmpurile.');
</script>" ;
exit;
}
?>
Trimitere cereri către administrator
<?php
if(!session_id ()) {
session_start ();
}
error_reporting (0);
if (isset($_REQUEST ['action' ])) {
if ($_REQUEST['action' ] == "contact_form_request" ) {
$ourMail = "maddy.spanu@gmail.com" ;
$required_fields = array("name", "phone","email", "date", "subject" ,
"category" , "message" );
$pre_messagebody_info = "";
$subject = "";
$errors = array();
$data = array();
parse_str ($_REQUEST ['values' ], $data);
if (!empty($data)) {
foreach ($data as $key => $value) {
$name = strtolower (trim($key));
if (in_array ($name, $required_fields )) {
if (empty($value)) {
$errors[$name] = "Introduceti numele si prenumele "
. $name . "!";
}
}
if ($name == "email") {
if (!check_email_address ($value)) {
$errors[$name] = "Adresa de email invalida!" ;
}
}
}
}
$result = array(
"is_errors" => 0,
"info" => ""
);
if (!empty($errors)) {
$result['is_errors' ] = 1;
Proiect de diplomă
66
$result['info'] = $errors;
echo json_encode ($result);
exit;
}
$pre_messagebody_info .="<strong>Nume si Pren ume</strong>" . ": " .
$data['name'] . "<br />" ;
$pre_messagebody_info .="<strong>E -mail</strong>" . ": " .
$data['email'] . "<br />" ;
if (!empty($data["category" ])){
$pre_messagebody_info .="<strong>Adres</strong>" . ": " .
$data['adress' ] . "<br />" ;
}
if (!empty($data["phone"])){
$pre_messagebody_info .="<strong>Telefon</strong>" . ": " .
$data['phone'] . "<br />" ;
}
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF -8' . "\r\n";
$headers .= "From: " .$data['email']."\r\n";
$after_message = "\r\n<br />–––––––––––––-
–––––––––––––––––––- \r\n<br /> Mail
trimis prin formularul de contact" ;
if (mail($ourMail , $subject , $pre_messagebody_info .=
"<strong>Mesaj</strong>" . ": " . $data['message' ] .$after_message ,
$headers )) {
$result["info"] = "succes" ;
} else {
$result["info"] = "server_fail" ;
}
echo json_encode ($result);
exit;
}
}
function check_email_address ($email) {
// First, we check that there's one @ symbol,
// and that the lengths are right.
if (!ereg("^[^@]{1,64}@[^@]{1,255}$" , $email)) {
// Email invalid because wrong number of characters
// in one section or wrong number of @ symbols.
return false;
}
// Split it into sections to make life easier
$email_array = explode("@", $email);
$local_array = explode(".", $email_array [0]);
for ($i = 0; $i < sizeof($local_array ); $i++) {
if
(!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~ -][A-Za-z0-9!#$%&
в†Є'*+/=?^_`{|}~ \.-]{0,63})|( \"[^(\\|\")]{0,62} \"))$", $local_array [$i])) {
Proiect de diplomă
67
return false;
}
}
// Check if domain is IP. If not,
// it should be valid domain name
if (!ereg("^\[?[0-9\.]+\]?$", $email_array [1])) {
$domain_array = explode(".", $email_array [1]);
if (sizeof($domain_array ) < 2) {
return false; // Not enough parts to domain
}
for ($i = 0; $i < sizeof($domain_array ); $i++) {
if
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A -Za-z0-9])|
в†Є([A-Za-z0-9]+))$", $domain_array [$i])) {
return false;
}
}
}
return true;
}
?>
Script pentru afișarea locației curente a utilizatorului pe hartă
var map = null;
function showlocation () {
navigator .geolocation .getCurrentPosition (fetchLatAndLong );
}
function callback (position ) {
var lat = position .coords.latitude ;
var lon = position .coords.longitude ;
document .getElementById ('latitude' ).innerHTML = lat;
document .getElementById ('longitude' ).innerHTML = lon;
var latLong = new google.maps.LatLng(lat, lon);
var marker = new google.maps.Marker({
position : latLong
});
marker.setMap(map);
map.setZoom(8);
map.setCenter (marker.getPosition ());
}
google.maps.event.addDomListener (window, 'load', initializare );
function initializare () {
var mapOptions = {
center: new google.maps.LatLng(0, 0),
zoom: 1,
mapTypeId : google.maps.MapTypeId .ROADMAP
};
map = new google.maps.Map(document .getElementById ("map-canvas"),
mapOptions );
}
Proiect de diplomă
68
Script pentru poziționarea medicului pe harta G oogle
function init_map ()
{
var coordLat = $longitude ;
var coordLng = $latitude ;
if( jQuery(window).width() < 756 )
{
delta = 0;
}
var point = new google.maps.LatLng(coordLat ,coordLng );
var center = new google.maps.LatLng(coordLat ,coordLng );
var mapOptions = {
zoom: 15,
center: center,
scrollwheel : false,
mapTypeId : google.maps.MapTypeId .ROADMAP
}
var map = new google.maps.Map(document .getElementById ('map'), mapOptions );
var image = 'images/gmap_default.png' ;
var beachMarker = new google.maps.Marker({
map: map,
position : point
});
}
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: SISTEM DE LOCALIZARE A MEDICILOR ÎN FUNCȚIE DE [620867] (ID: 620867)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
