Implementarea Unei Aplicatii Web Pentru Farmacii
LUCRARE DE DIPLOMĂ
IMPLEMENTAREA UNEI APLICAȚII WEB PENTRU FARMACII
Capitolul I. Introducere
De câte ori nu s-a întâmplat să aveți nevoie de o informație cu privire la prețul unui medicamente și nu ați știut de unde să o aflați? Sau poate ați căutat un medicament în nenumărate farmacii și ați primit același răspuns că “nu îl mai au pe stoc” sau că “de curând s-a dat ultima bucată” ?
Titlul lucrării mele de diplomă este “Implementarea unei aplicații web pentru farmacii”. Rolul aplicației mele este de a rezolva aceste inconveniențe și al altora. Cu ajutorul site-ului un utilizator poate accesa pagina farmaciei, să vizualizeze atât produse compensate și necompensate de Casa de Asigurări de Sănătate, cât și să le rezerve, astfel în momentul în care ajunge în farmacie are certitudinea că produsele sunt disponibile și cunoaște prețul acestor. Desigur unii se întreabă dacă mi le rezerv, nu mi le-ar putea și livra la domiciliu ? Pentu transportul medicamentelor este nevoie de respectarea multor reguli și necesită îndeplinirea unor condiții impuse prin lege. De asemenea pentru eliberarea medicamentelor compensate e nevoie de o reteță de la medic care trebuie să fie verificată să fie validă de către farmacist, înainte de eliberarea produselor.
Dacă cumva doriți să cumpărați un medicament însă nu știți dacă vă ajung banii pe care ii aveți la îndemâna. În cadrul site-ului se poate afla prețul unui produs prin alegerea categoriei de asigurat care corespunde persoanei pe numele căruia a fost prescrisă rețeta.
Încă un beneficiu al aplicației este sistemul de recomandare al medicamentelor. În situația în care nu știți ce medicament ar fi potrivit să îl luați pentru anumite afecțiuni, pur si simplu selectați simptomele și vor fi afișate medicamentele care le tratează.
Și un angajat al farmaciei are contribuțiile sale în dezvoltarea aplicației.În partea de administrare el are posibilitatea de a adăuga un medicament, producător, sau afecțiune nouă. De asemenea poate să le modifice în care au fost introduse greșit sau să le șteargă din baza de date.
Mai este o secțiune în care de fiecare dată când se fac modificări referitoare la ce medicamente tratează care afecțiune trebuie doar apăsat butonul de “actualizare”, pentru a actualiza sistemul de recomandare. Ultima și poate cea mai importantă parte din administrarea site-ului este pagina cu comenzile efectuate.Aici apar toate comenzile care au fost plasate de clienți, iar angajatul farmaciei are responsabilitatea de verifica dacă produse sunt pe stoc și să le pună de o parte pentru client. În caz contrar să contacteze clientul și să anuleze comanda. Aplicația este simplă și ușor de folosit atât pentru client, cât și pentru angajatul farmaciei.
Capitolul II.Tehnologii utilizate
II.1 HTML
HyperText Markup Language (HTML) este probabil cel mai utilizat program când vine vorba de crearea paginilor web. „Hypertext” se referă la faptul că textul obișnuit este îmbogățit cu caracteristici suplimentare, cum ar fi formatarea textului, adăugarea de imagini, conținut multimedia sau legături către alte documente. „Markup” est procesul prin care textului obișnuit ii sunt adăugate caracteristici suplimentare. Fiecare simbol de marcare (markup) este utilizat pentru a specifica browser-ului cum să prezinte informația reprezentată de textul simplu. Fiind un limbaj independent de platformă, relativ structurat, și având facilitatea de a realiza legături cu alte documente, HTML se dovedește a fi un limbaj foarte bun pentru reprezentarea documentelor pe Internet. Documentele HTML sunt documente în format ASCII și prin urmare pot fi create cu orice editor de texte. Au fost dezvoltate convertoare care permit formatarea HTML a documentelor generate (și formatate) cu alte editoare. Evident conversiile nu pot păstra decât parțial formatările anterioare deoarece limbajul HTML este încă incomplet.
Paginile HTML sunt construite cu ajutorul etichetelor sau tag-urilor.Acestea de regulă vin în pereche, una de început “<etichetă>” și una de sfârșit “</etichetă>”,însă există si cazuri în care nu se închid si se folosește “<etichetă/>”. Aceste etichete sunt procesate de către browser și este afișat conținutul pe ecran.
Forma generală a unui element în HTML este:
<tag atribut1=”valoare1” atribut2=”valoare2” >conținut</tag>
În cazul în care atributul nu este specificat,se vor lua valorile implicite.
Elementele de marcare pot fi clasificate in patru categorii:
Marcarea structurală – are rolul de a descrie scopul unui text.Spre exemplu pentru titlu se folosește eticheta “h1”. Alte titluri importante se notează cu h2,h3,etc.HTML oferă posibilitatea să se folosească implicit aceasta notare pana la h6.
Marcarea pentru prezentare – se referă la modul de prezentare al textului. Luând exemplul <i>Text</i> .Știm doar ca textul respectiv va fi afișat ânclinat.Nu știm nimic despre structura sau funcția lui. De cele mai multe ori este de preferat să se folosească pentru a indica modul de prezentare marcaje generale, care nu se limitează la o descriere vizuală a modului cum un text trebuie reprezentat.Marcajul <i> în general este sugerat să fie înlocuit cu <em>,deoarece în cazul unui browser utilizat de cei cu deficiență de vedere ,conținutul textului va fi interpretat intr-un mod accentuat.
Marcarea pentru hyperlink – Acestea leagă părți ale unui document de alte documente.Exemplu <a href=www.wikipedia.org>Wikipedia</a> Acest rând ar afișa într-un browser cuvântul Wikipedia cu culoare albastră,iar dacă se dă click pe el, va redirectiona utilizatorul spre pagina scrisă în atributul href al elementului ancoră “a”.Imaginile de asemenea pot fi folosite ca și elemente ancoră prin inserarea etichetei de introducere a imaginilor <img> între eticheta ancorei.
Elemente speciale (widgets) – sunt mici aplicații care pot fi folosite pe paginile web de către utilizatori .Acestea pot fi inserate și în alte pagini web prin simpla copiere a codului din secțiunea embed al elementului.
Elementele au două proprietăți de bază:conținutul și atributele.Majoritatea atributelor unui element sunt de forma denumire = valoare și se pun în eticheta de start al unui element. Valoarea se poate scrie fie între ghilimele,fie între apostroafe.Există și cazul în care se poate scrie direct valoarea,fără să fie marcată ,dar acest lucru este considerat să fie o practică nesigură.
Unele dintre cele mai des utilizate atribute sunt id, class, style, title și lang. Id este utilizat pentru a identifica în mod unic ul element al paginii HTML.Atribuind elementului un id îi putem asocia stiluri CSS, putem să îi facem referire dacă utilizăm un limbaj de scripting,cum ar fi JavaScript sau îi putem trimite valoarea spre server să fie procesată ulterior.
Cu ajutorul atributului class putem să delimităm unele elemente similare, care ulterior vor fi supuse anumitor acțiuni. De exemplu, dacă avem pentru anumite elemente ancoră o clasa “underlinedred” putem în definițiile CSS să specificăm faptul că dorim ca toate ancorele ce aparțin acestei clase să fie subliniate cu culoarea roșu.
Atributul style este utilizat pentru a define anumite reguli de stil unui singur element. De exemplu, dacă am avea avem un text de câteva zeci sau sute de rânduri și am dori să evidențiem un titlu sau un paragraf ar fi mai practic să folosim pentru întreg textul o clasă de stil, iar pentru acel element ce vrem să îl scoatem în evidență să folosim atributul style și să îi modificăm aspectul.
Title este folosit pentru a oferi informații suplimentare despre un element. Majoritatea
Browsere-lor afișează acest atribut ca și un tooltip pentru elementului căruia i se atașează. De
exemplu, în momentul în care trecem cu mouse-ul deasupra unei imagini poate să apară o căsuță
cu o descriere a imaginii.
Atributul lang este folosit pentru a specifica limbajul intr-o pagină web sau o porțiune a acesteia. Informația aceasta este utilă pentru motoarele de căutare sau pentru browser-ele bazate pe voce. Exemplu : <p lang="en-GB">This sentence will be read with a British accent</p>.
HTML are definite 252 de referințe caracter și un set de 1.114.050 de referințe numerice, ambele reprezentări dând posibilitatea caracterelor individuale să fie scrise prin intermediul unui marcaj și nu literal. Un caracter literal și un marcaj sunt considerate echivalente dacă sunt interpretate identic de către browser. Aceste referințe sunt deosebit de utile atunci când dorim să afișăm literal anumite caractere, care în mod normal ar fi interpretate de browser ca și caractere specifice HTML. De exemplu pentru a afișa < sau & se vor folosi entitățile < respectiv &. Dacă s-ar introduce pur și simplu caracterele < și & în conținutul elementelor HMTL, s-ar produce erori de interpretare HTML, deoarece < simbolizează începutul unui element HMTL, iar & simbolizează începutul unei referințe caracter.
HTML definește de asemenea câteva tipuri de date asociate conținutului elementelor, cum ar fi date script sau date de stil, precum și numeroase tipuri pentru valorile atributelor, incluzând id-uri, nume, unități de măsură, limbi, descriptori media, culori, caractere de codificare, data și timpul, etc.
Documentul HTML este prezentat către utilizatorul final în același mod ca orice alt tip de document Web. Cel mai adesea conținutul HTML este transmis în două moduri: prin HTTP și prin email.
Deși în general, documentele HTML sunt transmise de la un server web către un client utilizând protocolul HTTP (HyperText Transfer Protocol), acesta se folosește și pentru transmiterea de imagini,sunete și alte tipuri de conținut atașate documentelor HTML.Pentru a pemite browser-ului să manipuleze conținutul primit de la server, se mai transmit și alte informații împreună cu documentul. Aceste date adiționale includ tipul MIME (Multipurpose Internet Mail Extensions), care în cazul documentelor HTML este text/html, iar în cazul documentelor XHTML este application/xhtml+xml. Se poate întâmpla ca un document trimis ca un XHTML să nu fie corect afișat într-un browser deoarece formatul XHTML este un format strict, iar greșelile din document să întrerupă interpretarea acestuia. Însă același document trimis ca text/html poate să fie corect afișat, deoarece formatul HTML nu este strict, iar browser-ele de obicei tolerează greșeli de editare a documentului, făcând modificările necesare pentru ca acesta sa fie corect afișat.
Cealaltă modalitate de transmitere a conținutului HTML este prin poșta electronică. Marea majoritate a clienților de email permit posibilitatea de formatare a conținutului trimis folosind un subset al limbajului HTML. Inițial se putea trimite doar text prin poșta electronic, însă în scurt timp neajusurile reprezentării prin text au devenit evidente.Cu ajutorul tag-urilor HTML s-au dobândit noi capabilități ân trimiterea unui email, cum ar fi accentuarea de cuvinte, îngroșarea textului, introducerea de imagini, ș.a.m.d. Deși adduce multe avantaje, utilizarea elementelor HTML are și dezavantaje.Prin intermediul textului formatat în această manieră se pot lansa atacuri de tip phishing care se concentrează pe obținerea datelor personale cum ar fi parole sau detalii privitoare la cardul bancar. În plus, filtrele impotriva spam-urilor sunt încurcate de prezența elementelor de HTML ,iar astfel pot fi catalogate greșit unele mesaje. De asemenea dimensiunea email-ului este mai mare, decât dacă ar fi doar textul simplu.
II.2 CSS
Cascading Style Sheets sau CSS este limbajul utilizat pentru a defini modul în care conținutul unui document este prezentat utilizatorului. În general, CSS este utilizat în mare parte cu HTML și XHTML, însp acesta poate fi aplicat oricărui document structurat,cum ar fi XML, SGV(Scalable Vector Graphics) sau XUL (XML User Interface Language).
CSS este o recomandare a W3C (World Wide Web Consortium). W3C este o organizația principală de standardizare ce se ocupă cu reglementările din domeniul web. Este alcătuită din entități guvernamentale, universități, organizații nonprofit, companii celebre precum Microsoft, Netscape sau Macromedia și de experți în tehnologii web.Lista cu membri oficiali este publică . Una din îndatoririle W3C este de a da recomandări legate de multe aspecte web, de la noile tehnologii, la noi tendințe. CSS1 a fost recomandat la sfârșitul anului 1996, CSS2 în mai 1998,iar CSS 2.1 în ianuarei 2003.Momentan, cea mai recentă versiune și cea folosită de mine este CSS 3.
Aceasta în comparație cu versiunea sa anterioară a fost împărțită în module care adaugă noi capabilități sau le îmbogățesc pe cele anterioare. Până în noiembrie 2011 au fost dezvoltate peste 50 de module CSS. Au apărut noi opțiuni cu privire la fundaluri, chenare, rândurile și coloanele tabelelor, și multe altele. Unul dintre cele mai utilizate atribute este “border-radius”, care permite rotunjirea colțurilor elementelor. Tot mai mulți autori a paginilor web,dintre care și eu, au folosit acest atribut din motive estetice și facilitatea utilizării.
La CSS 4 se lucrează încă din septembrie 2009 ,dar până în prezent nu a fost implementat pentru nici un browser.
La baza CSS-ului stau regulile de stil. Fiecare regulă selectează unul sau mai multe elemente HTML și definesc modul în care elementele respective vor fi reprezentate. Aici nu ne referim doar la reprezentare vizuală, ci și la reprezentarea auditivă sau senzitivă a informației pentru persoanele cu dizabilități.
Stilurile de definire a modul de reprezentare a informației pot fi plasate direct în cadrul elementului HTML pentru care sunt definite, în partea de head al documentului sau în fișiere separate. Pentru a specifica modul de reprezentare al unui element HTML avem două opțiuni. Ori folosim stiluri CSS, iar astfel folosim id-ul elementului pentru a-l selecta si a-i aplica regulile, ori folosim atributul style. Exista de asemenea un element style care se plasează în partea de head a documentului html. Aici se definesc regulile de stil care vor fi aplicate doar documentului curent. Este recomandat să se folosească un singur fișier CSS pentru stilizarea unui întreg site, deoarece acest lucru oferă un caracter unitar aplicației, concomitent cu dimensiunile acestuia.
Înfățisarea unei paginii web depinde de trei tipuri de stiluri:
stilurile aplicate de browser – fiecare browser își aplică propriile stiluri documentelor HTML. Deși acestea diferă de la un browser la celălalt, există un standard pentru anumite caracteristici care este valabil pentru toate browser-ele. De exemplu, culoarea scrisului este negru, pentru hyperlink-uri se folosește albastru, iar pentru link-urile deja vizitate mov; practic se folosesc stilurile implicite din browser dacă nu sunt alte reguli specificate;
stiluri utilizator – cel care privește sau interacționează cu pagina web se numește utilizator. Acesta, la majoritatea browserelor noi, are prosibilitatea să modifice setările de stil definite de browser; astfel regulile definite de utilizator suprascriu regulile implicite;
Stiluri autor – creatorul sau dezvoltatorul unei pagini web are ultimul cuvânt de spus când vine vorba de CSS. Regulile acestuia suprascriu orice alte reguli de stil, fie cele definite de utilizator sau cele care sunt implicite în browser.
Fig 2.1 Modul de aplicare a stilurilor pentru o pagina web
Organizarea în cascadă este utilizată pentru a stabili care reguli vor avea precedență și care se vor aplica documentului.
Anterior am vorbit despre trei metode de aplicare a stilurilor intr-un documente: în linie (folosind atributul style), în sețiunea de head a documentului și utilizând documente externe. Ordinea priorităților lor într-un document ar fi: stilul în linie are precedență față de stilurile definite în secțiunea head a documentului, care la rândul lor au precendență față de stilurile definite într-un fișier extern. Utilizarea uneia dintre aceste metode depinde foarte mult și la ce dorim să o aplicăm și cât stil dorim să utilizăm. De exemplu, dacă avem o singură pagină web, relativ simplă ar fi mai convenabil să folosim atributul style sau metoda declarării în secțiunea head. În schimb, pentru site-uri mai complexe cu mai multe pagini, ar fi mai util și eficient să se folosească pagini de stil externe. Nu ar avea nici un sens să se scrie pentru fiecare pagină setările care se repetă de la o pagină la cealaltă cănd se pot nota toate într-un singur fișier. Această metodă am ales-o și eu, astfel majoritatea elementelor de CSS folosite pentru aplicație sunt stocate în fișierulul stil.css. Aici sunt notate stilurile pentru banner, meniu, chenare, butoane, header-uri. De asemenea folosesc și atributul style în definirea prezentării site-ului fiind foarte util, spre exemplu, când folosesc o clasă din fișierul extern și trebuie să îi modific doar dimensiunea sau poziția sa în pagină.
Utilizând CSS avem parte de multe beneficii precum:
separăm elementele de prezentare de cele de conținut – astfel dacă dorim să modificăm design-ul unui site, ar fi de ajuns să modificăm fișierul cu regulile de stil. Acest fapt duce la economisirea timpului de lucru precum și ușurează munca programatorului.
dimensiune redusă a fișierelor – înainte să apară CSS-ul toate informațiile referitoare la culoarea, dimensiunea, fontul scrisului, imaginea de fundal, mărimea paginii și multe alte atribute referitoare la partea de prezentare a informației erau controlate în HTML. Astfel aveam pagini stufoase, cu foarte multe linii de cod care se repetau de la o pagină la alta, care erau greu de modificat și lua mult timp să se facă modificări majore în design. Toate acestea s-au modificat o dată cu apariția CSS-ului. Paginile au devenit mai scurte, liniile de cod comune dintre pagini acum se afla într-un fișier extern și probabil cel mai important paginile se încărcau mult mai rapid datorită stocării fișierului de CSS în memoria cache a browser-ului.
stiluri speciale pentru persoanele cu dizabilități – stilurile CSS au fost create si pentru a satisface nevoile persoanelor cu dizabilități. În combinație cu un document structurat HTML, CSS-ul poate fi de mare ajutor dispozitivelor de citire a paginilor Web. Deoarece partea de specificare a modului de reprezentare a informației revine exclusiv în sarcina CSS-ului, dispozitivul de citire trebuie doar să parcurgă conținutul, adică informația utilă. CSS 2 conține unele reguli în plus, destinate să reprezinte informația pe dispozitivele care citesc paginile Web, sau cele care se bazează pe simțul tactil. CSS poate fi folosit de asemenea să mărească aria în care se poate da clic, în jurul textului ce reprezintă adresa, poate să controleze înălțimea liniilor și a textului, iar dacă se folosește si un limbaj de scripting se poate modifica dinamic o pagină web să fie parcursă și de persoanele cu dizabilități.
stiluri diferite pentru anumite dispozitive – odată cu evolutia tehnologiei și a aparițiilor noi de dispozitive de afișare, trebuia modificată și prezentarea informației afișată pe aceste dispozitive. Din fericire, CSS-ul ne oferă această posibilitate. Astfel chiar dacă acesăm un site de pe un laptop, tabletă sau smartphone putem să vizualizăm conținutul paginii fără problemă.
control sporit asupra tipografiei – proprietăți ca și lowercase, text-decoration, letter-spacing, word-spacing, text-intend, line-height, au fost introduse odată cu implementarea CSS-ului. Astfel autorul dobândește mai mult control asupra stilului pe care vrea să îl folosească.
II.3 PHP
PHP este limbajul ideal pentru construirea de pagini web dinamice. Este usor de învățat, open-source, poate fi rulat pe mai multe platforme și se poate conecta la mai multe tipuri de baze de date. Cel mai important aspect al limbajului este însa posibilitatea de a fi îmbricat cu cod HTML. Putem astfel crea pagini HTML statice și din loc în loc, acolo unde este nevoie, să introducem dinamism cu ajutorul PHP.
A fost început ca o extensie a limbajului server-side Perl, și apoi de o serie de CGI-uri compilate de către Rasmus Lerdorf, în 1994, apoi a evoluat în PHP/FI 2.0, dar proiectul open-source a început să ia amploare în vara anului 1998, această versiune primind numele de PHP 3.0. in mai 2000 a fost lansat PHP 4.0, având la bază Zend Engine 1.0. Pe 13 iulie 2004 a fost lansat PHP 5, cu Zend Engine II, care a adus și o orientare obiect, mai pronunțată și suportând mai multe caracteristici ale acestui tip de programare. Versiunea 6 a acestui limbaj se zvonește că urmează să fie lansată la începutul lunii august al anului 2012. Acesta aducând o mulțime de înbunătățiri și noi facilități precum suport pentru variabile de tipul integer pe 64 de biți, accesarea caracterelor dintr-un string se va face prin paranteze drepte “[]”, acoladele fiind scoase din uz, adaugarea instrucținuii “goto” permite salturi la un alt bloc de comenzi, etc.
Numele de PHP provine de la "PHP Hypertext Preprocessor". PHP reprezintă un popular limbaj "server-side" prezent în jumătate din serverele Apache existente. Rasmus Lerdorf și-a distribuit gratuit "tool-ul", denumit inițial Personal Home Page. PHP a devenit în timp un puternic limbaj de scripting server-side, open-source și multi-platformă.
PHP poate fi încapsulat în HTML și se folosește în conjuncție cu acesta pentru a realiza aplicații web cu un conținuit generat dinamic. Spre deosebire de JavaScript, codul PHP este procesat pe server, clientul primește doar cod HTML.
Fiind open-source, PHP beneficiază de suport activ din partea comunității online, acesta fiind și motivul creșterii explozive a numărului site-urilor bazate pe PHP.
Pentru a putea testa pagini PHP aveți nevoie de un server de web (Apache) și de pachetul PHP instalat.
PHP permite folosirea unor elemente specifice limbajelor de programare. Ieșirea standard a script-ului PHP devine intrarea standard pentru programul de navigare care vizualizează pagina. Așadar, la iesirea standard poate fi scris (de exemplu, prin intermediul comenzii echo) orice tip de cod HTML, acesta fiind interpretat de către browser.
Pe lângă manipularea conținutului paginilor de web, PHP poate trimite headere HTTP pentru autentificare, seta cookie-uri sau redirecționa utilizatorii. Mai mult, cu ajutorul bibliotecilor externe de funcții poate parsa fisiere XML, crea și manipula imagini, animații Shokwave Flash, PDF-uri sau se poate conecta la un server de mail, iar acestea sunt doar câteva din funcțiile pe care le poate îndeplini.
Interpretor-ul PHP parcurge documentul accesat până în momentul în care întâlnește marcajul de deschidere „<?php >”, care indică faptul că textul care urmează trebuie interpretat ca fiind cod PHP. În continuare, textul este interpretat ca fiind cod PHP până în momentul în care este întâlnit marcajul de inchidere „<? >”. Întreg textul care nu este interpretat ca fiind cod PHP este furnizat la ieșire în forma în care a fost primit ca intrare de către interpretor. Există mai multe marcaje care indică începerea unei secvențe de cod PHP, dar doar două dintre ele sunt folosite de obicei (aceste marcaje depind și de configurarea serverului de web).
Este permisă "iesirea" și "intrarea" în "modul PHP" de oricâte ori este necesar în pagină. Aceasta este util când se lucrează cu texte de mari dimensiuni. Pentru ca instrucțiunile PHP să fie interpretate corect, acestea trebuie separate prin caracterul ';'.
În PHP, comentariile pot fi inserate folosind sintaxele din C, C++ și shell-urile Unix. Apariția secventei de caractere '//' sau a caracterului '#' indică faptul că restul liniei reprezintă un comentariu. Pentru a insera comentarii pe mai multe linii, acestea trebuie delimitate de secventa '/*' la început și de secventa '*/' la sfârșit.
Pentru un programator care cunoaște limbajul de programare C este simplu de a învăta limbajul PHP deoarece acesta se aseamană în mare parte cu limbajului C. Astfel la fel ca și limbajul C limbajul PHP știe să lucreze cu numere și șiruri, valori literale și variabile, tablouri, operatori care sunt aproximativ aceeași ca și in limbajul C și anume:
Operatori aritmetici: + pentru adunare, – pentru scădere, * pentru înmulțire, / pentru împarțire;
Operatori de asignare: += pentru adunare, -= pentru scădere, .= pentru concatenare;
Operatori pe biți: & SI, | SAU, ^ SAU EXCLUSIV, ~ NEGARE, << SHIFT-are STANGA, >> SHIFT-are DREAPTA;
Operatori de comparație: == egal, === identic, != și <> diferit, !== neidentic, < mai mic, > mai mare, <= mai mic sau egal, >= mai mare sau egal;
Operatori de incrementare ++ și decrementare –;
Operatori logici: && și and SI, || și or SAU, xor SAU EXCLUSIV, ! NEGARE;
Operatori pentru șiruri: Punctul (.) este un operator de concatenare.
În limbajul PHP se poate lucra și cu funcții existănd mai multe categorii de funcții care sunt implementate in bibliotecile limbajului cum ar fi: funcții tablou, funcții de verificare a ortografiei, funcții calendar, funcții cu clase și obiecte, funcții de tip caracter, funcții de tip dată si oră, funcții de manipulare a cataloagelor, funcții de tratare si consemnare a erorilor, funcții ale sistemului de fișiere, funcții ftp, funcții http, funcții IMAP, POP3, si NNTP, funcții de poștă, funcții matematice, funcții MySQL, funcții de control a datelor de ieșire, funcții pentru opțiuni și informații PHP, funcții de execuție a programelor, funcții POSIX, funcții de manipulare a sesiunilor, funcții cu șiruri, funcții URL si funcții cu variabile. De asemenea limbajul PHP oferă posibilitatea programatorului de a-și creea și apela propriile funcții. În aplicația mea se regăsește o funcție proprie numită shorten_string cu ajutorul căreia unui șir de caractere dat ca parametru i se adaugă semnul de trei puncte „ … ” în cazul în care acest șir depășește un număr de caractere, număr dat ca parametru.
Function shorten_string($string, $amount)
{
if(strlen($string) > $amount)
{
$string = trim(substr($string, 0, $amount))."…";
}
return $string;
}
Această funcție își are utilitatea în pagina de căutare a medicamentelor compensate deoarece unele câmpuri conțin foarte mult text, iar cu ajutorul ei menținem dimensiunea tabelulul în parametrii paginii site-ului.
Ca și în limbajul C, sunt prezente instrucțiunile condiționale si recursive, având aceeași structură: if, if else, switch, for, while, do while.
Fiind open-source, PHP beneficiază de suport activ din partea comunității online, acesta fiind și motivul creșterii explozive a numărului site-urilor bazate pe PHP.
Pentru a putea testa pagini PHP aveți nevoie de un server de web (Apache) și de pachetul PHP instalat.
PHP este prezent pe Linux, Windows, HP-UX, Solaris, Mac OS și OpenBSD. Suportul este oferit de servere web care includ: Apache, IIS, PWS, Netscape, iPlanet, Xitami, OmniHTTPd și altele. Poate fi obținut gratuit, fiind un produs al mișcării open-source. PHP oferă suport pentru acces la aproape 20 de servere de baze de date diferite printre care: MySQL, Oracle, MS-SQL, Sybase, Informix, Adabas D, DB2, dBase, Ingres, PostgreSQL, FilePro. PHP suportă de asemenea ODBC, permițându-i să se conecteze la servere de baze de date prin intermediul driver-ului ODBC.
PHP prezintă suport pentru XML, atât prin intermediul SAX, cât și DOM. De asemenea permite crearea "on-the-fly" de fișiere PDF. Comunicarea cu alte servicii este permisă prin COM, HTTP, IMAP, LDAP, NNTP, POP3, SNMP și altele.
II.4 MySQL
SQL vine de la Structured Query Language și este un limbaj de programare specific pentru manipularea datelor în sistemele de manipulare a bazelor de date relaționale. La originea lui stă limbajul bazat pe algebra relațională. Scopul său este de a insera, șterge, interoga și actualiza datele, modificare și crearea schemelor, precum și controlul accesului la date. Ulterior a devenit un standard în domeniu, iar astăzi este cel mai popular limbaj utilizat de creare, modificare și manipulare a datelor de către Sistemele de Gestiune a Bazelor de Date ( SGBD) relaționale.
Inițial a fost dezvoltat în anul 1974. Era denumit “Sequel” (Structured Query Language) și scopul său era manipularea și regăsirea datelor stocate în bazele de date relaționale. La sfârșitul anilor ’70, compania Oracle ( atunci numindu-se Relational Software) a văzut potențialul pe care îl aveau aceste concepte și au dezvoltat propriul lor SQL RDBMS.
Zece ani mai târziu a fost introdusă pe piață prima versiune comerciala disponibilă de SQL, Oracle.
Acest limbaj este divizat în următoarele elemente:
Clauze – acestea sunt componentele instrucțiunilor și interogărilor;
Expresii – rolul lor este de a produce valori scalare sau tabele;
Predicate – cu ajutorul lor se pot specifica condiții care fiind evaluate de SQL conform logicii ternare sau logicii booleene vor limita efectul instrucțiunilor, sau vor influența cursul programului ;
Interogările – regăsesc datele după criteriile specificare;
Instruțiunile – aceste pot controla tranzacțiile, conexiunile sau cursul programului.Instrucțiunile se termină, în general, cu caracterul punct-virgulă “;” , dar nu este obligatoriu în toate platformele SQL. Spațiile albe suplimentare fiind ignorate, ele fiind puse doar pentru lizibilitatea codului;
MySQL este cel mai popular SGBD open-source la ora actuală, fiind o componentă cheie a stivei LAMP (Linux, Apache, MySQL, PHP). Este produs de compania suedeză MySQL AB și este distribuit sub Licența Publică Generală. În general este folosit împreuna cu limbajul de programare PHP, cu MySQL se pot construi aplicații în orice limbaj major. Se pot scrie programe în numeroase limbaje de programare pentru accesarea bazelor de date precum ar fi: C, C++, C#, Java, Perl, PHP, Python,etc fiecare dintre acestea folosind un tip specific de API.
Licența GNU nu permite încorporarea MySQL în softuri comerciale, însă cei care doresc să o facă pot achiziționa contra cost o licență comercială de la compania producătoare MySQL AB.
MySQL este o componentă integrată a platformelor LAMP sau WAMP (Windows-Apache-MySQL-Php). Popularitatea sa ca aplicație se datorează în mare parte de legătura strânsă cu limbajul PHP, denumită și Duo-ul Dinamic.Este precizat și în cărți de specialitate că MySQL este mai ușor de folosit și de învățat decât multe dintre aplicațiile de gestiune a bazelor de date.
Pentru a administra baza de date MySQL se poate folosi fie linia de comandă, fie una din interfețele grafice ce se pot descărca de pe internet.Printre cele mai cunoscute interfețe se numără și phpMyAdmin.Aceasta este o aplicație open-source scrisă în PHP și poate fi accesată utilizând browser-ul. Aceasta oferă anumite caracteristici precum :
Management al bazei de date MySQL ;
Import al datelor sub formatul CSV și SQL ;
Exportul datelor sub diferite formate CSV, SQL, XML, PDF ;
Administrarea serverelor ;
Crearea unui grafic cu schema bazei de date ;
Căutarea în baza de date ;
MySQL împreuna cu phpMyAdmin l-am folosit atât pentru importul listei de medicamente compensate cât și pentru crearea, modificarea și manipularea tabelelor din baza de date.Prima dată am modificat extensia listei cu medicamente eliberată de Casa Națională de Asigurări de Sănătate în format CSV, astfel am putut să o import in baza de date, iar cu aplicația phpMyAdmin am șters coloanele care nu imi erau utile ca să mai economisc spațiu și timp la încărcare.
II.5 XAMPP
Este un server web multi-platformă care are la bază server Apache, baze de date MySQL și interpretoare de scripturi scrise în limbajele de programare PHP si Perl. Programul se află sub licența GNU și funcționează ca un server web capabil de a servi pagini dinamice. Este disponibil pentru sistemele de operare Microsoft Windows, Linux, Solaris si Mac OS X fiind folosit pentru dezvoltarea proiectelor web.
Designerii XAMPP au avut intenția să îl utilizeze numai ca un utilitar de dezvoltare pentru a perminte programatorilor de pagini web să își terteze munca pe calculatoarele proprii, fără a avea nevoie de conexiune la internet. Pentru a face posibil acest lucru, au fost dezactivate multe caracteristici de securitate. În practică , uneori XAMPP este folosit pentru a posta paginile pe internet. XAMPP oferă suport pentru crearea și manipularea bazelor de date în MySQL și SQLite.
Pentru instalarea programului XAMPP este necesara utilizarea kitului de instalare sub formă ZIP, RAR sau EXE , fără a fi nevoie de modificarea configurării componentelor instalate. Odată cu instalarea acestuia se instalează și alte componente cum ar fi OpenSSL și phpMyAdmin. După aceasta se va trata adresa de localhost a serverului XAMPP ca pe un server la distanță prin conectarea utilizând protocolul client FTP.
XAMPP-ul servește ca server Apache, iar cu ajutorului lui am putut vizualiza conținutul paginilor PHP.
II.6 JavaScript
JavaScript este un limbaj de programare orientat pe obiecte bazat pe conceptul prototipurilor. Este folosit în general pentru adăugarea a noi funcționalități în paginile web. El poate fi introdus integral intr-o pagină HTML sau într-un fișier extern. Într-o pagină pagină HTML, din cauză că este încadrat în tag-ul <script>, textul scriptului nu este afișat pe ecranul utilizatorului, dar browserul Web va ști să ruleze ca pe un program JavaScript .
Limbajul JavaScript foarte fi folosit în multe moduri pentru a face pagina web mai interactivă și stilizată, de asemenea să ofere utilizatorilor site-ului o experiență mai bună și mai interesantă. Permite și crearea unor interfețe grafice care le oferă utilizatorilor feedback în timp ce navighează pe pagină. Spre exemplu în momentul în care se poziționează mouse-ul deasupra butoanelor din meniu și acestea își schimbă culoarea. Acest lucru este realizat cu JavaScript, utilizând metoda rollover.
Limbajul JavaScript este utilizat pentru a valida informațiilor introduse într-un formular, fapt ce poate să economisească timp. Dacă formurile au nevoie de calcule, acestea pot fi făcute cu JavaScript pe calculatorul clientului fără procesare pe partea de server. În lucrarea mea, am utilizat JavaScript în pagina comanda.php pentru a valida câmpurile din formularul respectiv.Și anume, numele, prenumele și adresa să fie neaparat completate, numărul de telefon să fie numeric și să aibă exact 10 caractere, validarea câmpului de email se face în mod automat de către HTML 5 .
JavaScript oferă posibilitatea de a crea pagini HTML la cerere din mers, în funcție de acțiunea pe care o face utilizatorul. JavaScript controlează browserul pentru a deschide noi ferestre, căsuțe de alertare, plasează mesaje în status bar sau în fereastra browserului. Deoarece JavaScript are un set de caracteristici pentru dată și timp, pot fi generate ceasuri, calendare. De asemenea pot fi gestionate formuri, setate cookie-urile, cerarea paginilor HTML din mers și crearea aplicațiilor bazate pe Web.
Cel mai des, limbajul JavaScript este utilizat pentru a scrie funcții care interacționează cu elementele DOM (Document Object Model) ale paginii, de exemplu pentru:
Încărcarea conținutului altei pagini sau trimiterea de informații către server pri Ajax, fără a reîncărca pagina pe care te afli;
Animația unor elemente de pe pagină , efectul de fade in și fade out, redimensionarea lor, rotirea lor;
Transmiterea de informație despre ce caută un utilizator pe un site, astfel se pot colecta date și face statistici;
JavaScript este un limbaj pe parte de client; este destinat să lucreze pe partea de client, și nu pe server. Din acest considerente:
JavaScript-ului nu îi este permis să citească sau să scrie fișiere pe calculatorul clientului. Fapt ce în sine e un lucru bun, deoarece nimeni nu își dorește ca o pagină web să îi poată citi fișierele personale de pe hard disk, sau să îi manipuleze documentele în orice fel; Excepție de la regulă sunt fișierele cookie ale browserului, dar și aici sunt limitări;
JavaScript-ul nu are drepturi să scrie fișiere pe server. În schimb, se folosește un CGI (Common Gateway Interface) ce poate fi scris în Perl, PHP sau Java și el se va ocupa de aceste date si le va stocha.
JavaScript nu poate închide o fereastră ce nu s-a deschis, pentru a evita situația în care o pagină ia controlul browserului și închide ferestrele unui alt site.
JavaScript nu poate citi informații dintr-o pagină care a fost furnizată de un alt server. Cu alte cuvinte, o pagină Web nu poate citi informații din alte ferestre deschise, nici ce pagini mai are deschise utilizatorul.
II.7 Adobe Dreamweaver CS 5.5
Este o aplicație de dezvoltare web a companiei Adobe Systems, care suportă tehnologii precum CSS, PHP, JavaScript, Cold Fusion cât și cadre ASP.
Programul oferă multe avantaje față de un editor banal cum ar fi Notepad sau Word. La crearea de pagini noi generează codul de bază automat, verifică codul să fie scris corect, să nu lipsească etichetele de închidere sau să rămână deschise ghilimele sau acolare. Lucruri mărunte, dar care generează erori în momentul în care se rulează site-ul. Programul în momentul în care s-a tastat “</” orice tag deschis anterior îl va închide.
Faptul că există posibilitate să împarți fereastra în două constituie un alt avantaj, ne mai fiind obligat să mergi pe un browser să vezi rezultatele codului scris ci le vezi în fereastra alăturată în program. Dreamweaver conține și câteva utilitare pentru administrarea site-urilor, precum cel pentru a găsi și modifica un paragraf sau o linie de cod în intregul site, cu toate paginile sale, pe baza unor parametri specificați de către programator.
Desigur, programul conține în meniurile sale butoane cu care se introduc direct tabele, formulare, imagini, frame-uri, div-uri fără să fii nevoit să scrii vreo linie de cod. Trebuiesc doar specificați parametrii. În cazul în care scrii linii de cod, programul în funcție de ce litere ai tastat și în contextul a căror etichete scrii îți va afișa sugestii.Acest lucru e de mare ajutor, având posibilitatea să scrii câteva cuvinte după care mergi cu săgețile de la tastatură pe cuvântul pe care îl doreai scris. Astfel codul sigur e scris corect, iar programatorul economisește timp.
Codul aplicației l-am scris tot în Dreamweaver și mă bucur de alegerea făcută deoarece mi-a fost de mare ajutor, în special când vine vorba de sintaxa mai uitând uneori să pun un semn de punct-virgulă sau să închid acolade. De asemenea faptul că în fereastra de design a programului există posibilitatea de a modifica poziția sau dimensiunea unul element, precum o imagine, iar codul să se schimbe în conformitate cu modificările făcute, mi-a salvat mult timp .
Capitolul III. Analiza Conceptelor Formale
III.1 Generalități
Analiza Conceptelor Formale (FCA) este o metodă folosită în special pentru analiza datelor, și anume pentru derivarea relațiilor implicite dintre obiectele descrise printr-un set de atribute. Datele sunt structurate în unități ce sunt abstracții formale ale conceptelor gândirii umane, permițând o interpretare semnificativă, ușor de înțeles. Astfel, FCA poate fi văzută ca o metodă conceptuală de clustering (de grupare) ce furnizează descrieri intelectuale, de grad înalt, pentru conceptele abstracte sau pentru unitățile de date pe care le produce.
Analiza Conceptelor Formale (FCA) este o metodă de analiză a datelor, reprezentare a cunoștințelor, precum și de gestionare a informațiilor, care este încă necunoscută în rândul multor oameni de știință din întreaga lume, chiar dacă această tehnologie are un potențial semnificativ pentru crearea aplicațiilor. FCA a fost inventat de Rudolf Wille la începutul anilor 80 (Wille, 1982). In prima faza FCA a fost dezvoltat în principal, de un mic grup de cercetători și studenți ai profesorului Rudolf Wille, în Germania. Prin intermediul proiectelor de cercetare finanțate, acest algoritm a fost implementat în mai multe aplicații de mari dimensiuni, cea mai importantă fiind o punere în aplicare a unui sistem de explorare a cunoștințelor pentru construcții civile, în cooperare cu Ministerul de Inginerie Civilă din North-Rhine Westfalia. Dar aceste aplicații nu au fost publicate peste granițele Germaniei.
În ultimii ani, FCA a crescut într-o comunitate internațională de cercetare cu aplicativitate în mai multe discipline, cum ar fi lingvistica, ingineria software, psihologia, matematica și regăsirea de informații. Această schimbare se datorează unei varietăți de factori. Lucrarea lui Freeman și a lui White din 1993 despre analiza rețelei sociale a inițiat un interes pentru aplicarea programelor informatice pe baza de FCA printre sociologi. În ingineria software lucrarile lui Fischer (1998) și a lui Eisenbarth (2001) au câștigat marele premiu la conferințe, deoarece FCA reușește să faciliteze un tip de analiză, care nu a fost anterior disponibilă în acest domeniu. Așa cum explică Stumme – FCA a schimbat accentul pe aplicațiile în informatică în mare parte datorită unei fuziuni cu comunitatea Graficii Conceptuale.
III.2 Aplicabilitatea conceptului de analiză formală
O noțiune centrală a analizei conceptelor formale este o dualitate numită „conexiunea Galois”. Această dualitate poate fi adesea observată între două tipuri de elemente care sunt inter dependente într-o aplicație, cum ar fi obiectele și atributele sau documentele și termenii. De exemplu, luând în considerare documentele și termenii în regăsirea de informații, majorând un set de termeni, se va reduce setul de documente care conțin toți acești termeni, întrucât un set mai mic de termeni se vor potrivi cu un set mai mare de documente.
În Analiza Conceptelor Formale, avem două tipuri de elemente „obiecte formale” și “atribute formale”. „Obiectele formale” nu trebuie să fie „obiecte” în sensul comun al cuvântului. Folosirea termenilor de „obiect” și „atribut” este indicată, deoarece în multe aplicații ar putea fi utilă pentru a alege itemi de tip obiect ca „obiecte formale” și de a alege caracteristicile lor pe post de „atribute formale”. Într-o aplicație de extragere a informațiilor, documentele ar putea fi considerate a fi obiecte și termenii atribute.
Pentru a exemplifica aceste noțiuni, voi da un exemplu simplu, obiectele fiind tipuri de medicamente, iar atributele afecțiuni pe care le combat medicamentele.
Seturile de obiecte și atribute formale, împreună cu relațiile lor, formează un „context formal”, care poate fi reprezentat printr-un un tabel (a se vedea Tabelul 3.1).
Tabelul 3.1: Contextul formal „ Medicamente ”
Elementele de pe orizontală reprezintă „obiectele formale”, cele de pe verticală sunt „atributele formale”, iar relația dintre ele este reprezentată prin X-uri. În acest exemplu, obiectele formale sunt medicamente ce pot fi eliberate de orice farmacie. Atributeles specifică care sunt afecțiunile pe care le tratează. Aceasta este, desigur, un exemplu banal, ce poate fi exemplificat cu orice tip de obiecte și atribute, de exemplu animale, cărți, filme, alimente, etc. și calitățile acestora, dar este suficient pentru a explica caracteristicile de bază FCA.
O altă caracteristică interesantă a conexiuni Galois este faptul că o anumită „închidere” a relației este implicată. Începând cu orice set de obiecte formale se pot identifica toate atributele formale pe care le au în comun. Folosind exemplul din Tabelul 3.1, singurul atribut comun dintre Ibalgin și Paduden este că tratează durerea de cap. Dar nu sunt singurele medicamente, deoarece și Mig-400 tratează durerea de cap. Dacă cineva selectează Ibalgin și Paduden, derivă toate atributele lor comune (acesta fiind durerea de cap), iar mai apoi derivă și celelalte medicamente ce tratează durerea de cap, se obține un set de obiecte „Ibalgin, Paduden, Mig-400” și este setat atributul „durere de cap”. În acest moment relația este „închisă”, deoarece nu se poate mări nici setul de atribute, nici cel de obiecte. O pereche, formată dintr-un de un set de obiecte formale și un set de atribute formale, care este închisă în acest mod, se numește un „concept formal”. Astfel, „Ibalgin, Paduden, Mig-400” și „durere de cap” formează un concept formal. Setul de obiecte formale a unui FCA se numește „extensie”, iar setul de atribute formale, „intensie” . Pentru un context formal dat, conceptele formale, extensiile și intensiile sale, sunt unic definite și fixe.
Notații:
Atributele sunt reprezentate printr-un oval;
Obiectele sunt reprezentate printr-un dreptunghi;
Simbolul reprezintă mulțimea vidă, și este folosit atunci când nu există obiecte sau atribute în acel set de elemente;
Liniile reprezintă relațiile dintre elemente;
Pentru a nu încărca prea tare figura, am ales să nu desenez toate relațiile dintre seturile de atribute ce nu returnau nici un obiect.
Figura 3.1: Taxonomia contextului formal „Medicamente”
III.3 Modul de funcționare a analizei conceptelor formale
Un avantaj important al analizei conceptelor formale este că seturile de concepte formale și conexiunile Galois pot fi vizualizate. Figura 3.1 reprezintă o așa-numită diagramă liniară a ierarhiei de clase (taxonomie) ce corespunde cu contextul formal din Tabelul 3.1. Nodurile din figura de mai sus reprezintă concepte formale. Obiectele formale sunt afișate în dreptunghiuri în partea de jos a nodului, iar atributele formale în ovale, în partea de sus. Continuând cu exemplul de la secțiunea anterioară, nodul de pe partea dreaptă, care este etichetat cu atributul „durere a articulațiilor” va fi referit în continuare ca și „conceptul A”.
Pentru a prelua extensia unui concept formal este nevoie să urmărim toate căile care pornesc în jos de la acest nod, pentru a colecta obiectele formale. În acest exemplu, obiectele formale a conceptului A sunt „Mig-400, Nurofen și Paduden”. Pentru a prelua intensia conceptului formal trebuie urmărite toate căile care duc în sus, cu scopul de a colecta toate atributele formale. În figura 3.1, există un nod deasupra conceptului A, dar care nu conține atribute formale. Astfel, conceptul A reprezintă conceptul formal cu extensia „Paduden, Nurofen” și intensia formată dintr-un singur set de elemente: „febră”. Un alt concept formal poate fi cel cu obiectele formale „Nurofen și Paduden” și cu atributele „durere a articulațiilor, febră”. Acest concept este conectat de conceptul A printr-o linie (care merge în jos de la conceptul A). Acest concept va fi referit în continuare ca și conceptul B.
Figura 3.2: O relație subconcept – superconcept
Figura 3.2 prezinta relația dintre conceptele A și B. Conceptul B este un sub-concept al conceptului A, deoarece extensia conceptului B este un subset al extensiei conceptului A, iar intensia conceptului B este un superset de intensitate a conceptului A. Toate muchiile din diagrama linie reprezintă un astfel de relație relație subconcept – superconcept.
Conceptele de sus și de jos dintr-o taxinomie sunt speciale. Conceptul de top dispune de toate obiectele formale în extensia sa. Intensia sa este de multe ori goală, dar nu trebuie să fie o regulă. În exemplul nostru, conceptul de top ar putea avea un atribut formal numit „medicamente”. Conceptul de jos este dotat cu toate atributele sale formale în intensie. Relația subconcept – superconcept este tranzitivă, ceea ce înseamnă că un concept este un subconcept al oricărui concept care poate fi atins prin călătoria în sus, către el. În cazul în care un concept formal are un atribut formal, atunci atributele sale sunt moștenite de toate subconceptele. Aceasta corespunde noțiunii de „moștenire” folosită în bibliotecile de clase a modelării orientate-obiect. Din acest motiv, FCA este potrivit pentru modelarea și analiza bibliotecilor de clase orientate-obiect.
Capitolul IV. Proiectarea si implementarea aplicației
Aplicația implementattă în cadrul proiectului de diplomă se utilizează pentru a rezerva medicamente care vor fi ridicare ulterior de client din sediul farmaciei. De asemenea se poate utiliza pentru a afla prețul medicamentului compensat de către Casa de Asigurări de Sănătate în funcție de categoria de asigurat din care face parte clientul. Este implementat și un sistem de recomandare care în funcție de afecțiunile selectate afișează lista medicamentelor ce pot fi utilizate pentru a le contracara.
IV.1 Structura bazei de date
Aplicația fiind destul de complexă are nevoie de o bază de date pe măsură. După cum am amintit și mai sus, baza de date este creată cu ajutorul limbajului SQL, și este gestionată de Xampp prin MySql (phpMyAdmin).
Tabelele centrale ale bazei de date sunt medex și medicament.
Figura 4.1 Tabelele medex și medicament
Figura 4.2: Tabelele bazei de date și relațiile dintre ele
Medex este creată pornind de la lista de medicamente eliberată periodic de către Casa Națională de Asigurări de Sănătate cu prețurile impuse al medicamentelor, care trebuie să apară pe facturi indiferent de reducerile aplicate. Acceste valori de referință reprezintă prețurile maximale de înregistrare în gestiunea depozitelor (prețurile cu ridicata), respectiv prețurile de vânzare în farmacii (prețurile de amănunt).De asemenea, în acest nomenclator mai sunt disponibile informații despre tipurile de compensare în care se incadrează aceste produse. Acest document l-am modificat să aibe extensia CSV, iar astfel am putut să îm import în MySQL. Aici se află date precum,id_medicament, denumirea comercială a produsului, tipul ambalajului, numărul de bucăți aflate într-un ambalaj, substanța activă si concentrația acesteia, producătorul și precum am specificat mai sus, prețurile impuse de către Casa Națională.
Tabela medicament se referă la toate produsele comericializate de către farmacie și se pot elibera fară rețetă de la medic.A fost creată de către mine și conține câmpurile, cheia primară id_medicament care se autoincrementează la adăugarea de date, denumirea medicamentului, tipul ambalajului, numărul de bucăți dintr-un ambalaj, substanța activă ,concentrația ei, id_producător și prețul unitar al produsului. Producătorul nu este memorat în acest tabel, deoarece există posibilitatea ca un producător să producă mai multe medicamente ce aparțin aceluiași tabel. Astfel ne întâlnim cu relația 1:n, adică un producător emite mai multe medicamente.Acest lucru este reprezentat prin cheia primară id_producător din tabelul producător, ce se va lega de cheia străină cu același nume din tabelul medicament. În tabelul producător mai este notat și denumirea producătorului.
Figura 4.3 Tabelele afecțiuni și legături
Tabelul afecțiuni conține numele afecțiunii precum și cheia primară id_afectiune. Legătura dintre tabelele afecțiuni și medicament este una mai complicată, fiind o relație many-to-many. Adică un medicament poate trata mai multe afecțiuni, iar o afecțiune poate fi tratată de mai multe medicamente.Ca să rezolv această problemă, folosesc un tabel intermediar numit legături. Acesta conține o cheie primară id_legătura și două chei străine numite id_medicament și id_afecțiune, care se leagă la tabelele aferente.
Figura 4.4 Tabelul fca
Tabelul fca își trage numele de la Formal Concept Analysis și stochează id-urile medicamentelor calculate cu acest algoritm ca fiind cele mai apropiate din punctul de vedere al afecțiunilor pe care le tratează , de medicamentul selectat de utilizator. Cheia străină id_medicament își ia valoarea din tabelul medicament.
Figura 4.5 Tabelele tranzacție și comenzi
Tabelul comenzi conține datele referitoare la comenzile efectuate, și anume: data comenzii, numele și prenumele, adresa, telefonul si adresa de e-mail a clientului, dar și opțiunea care verifică dacă a fost onorată sau anulată comanda. Acest tabel se leagă de tabelul medicament prin intermediul tabelului tranzacție pentru a evitat relațiea many-to-many.O comandă poate conține mai multe medicamente, dar și un medicamente se poate afla în mai multe comenzi. Tabelul tranzacție conține la rândul lui două chei străine id_comandă și id_medicament care îsi primesc valorile din tabelele corespunzătoare și câmpurile nr_buc și nr_bucatele în care se memorează numărul de cutii, respectiv de bucățele (în cazul în care nu se dorește o cutie întreagă) pe care le comandă clientul.
Figura 4.6 Tabelul admin
Tabelul admin este folosit în partea de administrare pentru a memora lista cu utilizatori și parolele acestor criptate prin metoda MD5.
IV.2. Structura site-ului
Arhitectura paginii web este de tipul client/server. Programele folosite pentru implementarea sa sunt: Dreamweaver CS4, utilizat pentru scrierea codul PHP, HTML și CSS, Xampp pentru Windows, ce găzduiește aplicația, conținând serverul Apache, și de asemenea include Mysql, gazda bazei de date, folosind limbajul SQL.
Acest sistem client/server are trei componente principale: interfața cu utilizatorul (ce este posibilă prin intermediului unui browser, în cazul de față Google Chrome), aplicația propriu zisă (prelucrările și procesele) și sistemul de gestiune a bazei de date (în acest caz MySql).
Figura 4.7 Arhitectura client-server
Elementul de noutate al acestui site îl reprezintă ulilizarea Analizei Conceptelor Formale în analiza datelor. Astfel, nu este un banal site similar cu un magazin online, ce afișează produse și permite cumpărarea lor, ci merge mai departe și ajută clientul în momentul în care nu știe ce să aleagă, iar în cazul în care a ales un produs îi sugerează și niste alternative cu ajutorul sistemului de recomandare.
Pe scurt, aplicația funcționează după următorul principiu:
Utilizatorul accesează prima pagină, index.php, unde sunt afișate promoțiile ce se acordă în cadrul farmaciei.De aici poate să caute un medicament, fie el compensat sau necompensat, după denumire, substanța activă din el sau producător, sau mai poate naviga utilizănd meniu pe pagina în care sunt afișate produsele farmaceutice.
În cazul în care utilizatorul folosește butonul “Necompensate” din meniu, va fi redirecționat înspre pagina unde se afișează toate produsele ce se eliberează fără rețetă în farmacia respectivă.
Prin apăsarea butonul “Rețetă” din meniu, utilizatorul ajunge pe o pagină ce conține un formular cu toate categoriile de asigurați. Acesta este nevoit să aleagă categoria de asigurat, deoarece în funcție de aceasta se vor afișa prețurile pentru medicamentele ce se eliberează cu rețetă primită de la medic.Opțional poate să restrangă afișarea în cazul în care cunoaște numele medicamentului sau chiar doar câteva litere din el.
După ce s-a decis asupra produsului ,utilizatorul poate accesa informații despre el printr-un singur clic pe numele lui. Astfel se deschide pagina cu detalii despre produsul respectiv , precum substanța activa, tipul de ambalaj, numărul de bucăți într-un ambalaj ,producător cât și prețul.
Dacă se dorește să se rezerve produsul respectiv trebuie doar să apese butonul “Rezervă acum”. Astfel produsul ajunge în coșul de cumpărături. În pagina cos.php utilizatorul are posibilitatea de a schimba cantitatea ,fie vorba și de câteva comprimate sau o cutie întreagă, de a continua cu cumpărăturile sau de a merge la pagina următoare pentru a finaliza comanda.
Aplicația, în mare, este împărțită în două părți: farmacia online, care este destinată publicului larg, și pagina de administrare, destinată angajatului din cadrul farmaciei care va gestiona și actualiza baza de date.
Figura 4.8 Structura site-ului
Figura 4.9 Structura interfeței utilizator
Figura 4.10 Structura interfeței administratorului
IV.3 Diagramele aplicației
Diagramele UML au scopul de a specifica, vizualiza, construi și documenta componentele unei aplicații informatice. Mai jos am desenat diagramele cele mai importante pentru descrierea sistemului informatic, și anume: digrama cazurilor de utilizare, implementată atât pentru pagina farmaciei cât și pentru administrare, diagrama de activități, care prezintă acțiunile posibile ce de pot desfășura în această aplicațoe, diagrama de secvențe, ce descrie procesul de cumpărare și diagrama entitate-relație, ce descrie baza de date și legăturile dintre entități.
Diagrama de secvențe
Figura 4.11: Diagrama de secvențe
Diagrama de activități
Figura 4.12: Diagrama de activități
Diagrama entitate – relație
Figura 4.13: Diagrama entitate – relație
Diagrama cazurilor de utilizare (Use Case)
Figura 4.14: Diagrama cazurilor de utilizare pentru aplicație și pagina de administrare
IV.4 Implementarea aplicației
IV.4.1 index.php
Aceasta este prima pagină a site-ului. Primele 2 alineate cuprind codul de includere a paginilor conectare.php, care conține 2 rânduri și reprezintă conectarea la baza de date, și page_top.php, care este antetul paginii.
Fiind un site dinamic, antetul și subsolul este fix pentru fiecare pagină, schimbându-se doar conținutul. Acest lucru este posibil prin crearea a 2 pagini numite page_top și page_bottom ce conțin doar cod html. Primul element din page_top este imaginea cu sigla farmaciei. Dacă se dă clic pe ea utilizatorul este redirecționat spre index.php.
Pentru aranjarea în pagină am folosit un tabel ascuns, iar meniul este alcătuit din imagini suprapuse. Sub meniu se găsește un mic motor de căutare care în funcție de ce este bifat caută medicamente compensate sau necompensate după nume, substanța activă sau producător. Acest lucru a fost realizat cu ajutorul clauzei “like” care compară cuvîntul scris cu datele din tabel.În partea dreaptă a motorului de căutare este afișat coșul de cumpărături al utilizatorului site-ului.Se afișează numărul de produse din coș și prețul total al acestora.
Dacă se apasă pe imaginea cu coșul de cumpăraturi utilizatorul intră pe pagina unde poate vedea conținutul lui. În page_bottom este trecut un paragraf cu autorul site-ului.
Revenind la index.php, aceasta este una dintre cele mai simple pagini ale site-ului aceasta fiind compusă dintr-un tabel în care sunt notate ofertele speciale pe care le le acordă farmacia.
Figura 4.15: Pagina index.php
IV.4.2 Medicament.php
Pe această pagină se ajunge apăsând butonul “Necompensate” din meniu. Aici sunt afișate toate medicamentele necompensate care au fost introduse în tabelul corespunzător până în momentul respectiv. Utilizatorul are posibilitatea să selecteze numele unui medicament, fapt care îl va redirecționa spre o pagină cu toate detaliile produsului și în dreptul informațiilor un sistem de recomandare cu produse similare,dar despre acesta vom vorbi mai târziu. Mai avem un buton pe pagină numit “Rezervă acum” al cărui rol este de a introduce produsul în dreptul căruia se află în coșul de cumpărături.
Figura 4.16: Pagina medicament.php
IV.4.3 Categorii.php
Apăsând butonul al treilea din meniu ajungem pe pagina categorii.php. Pe această pagină sunt afișate toate categoriile de asigurat social. Orice persoană aparține uneia dintre acestor categorii, fie că este angajat, șomer, elev, pensionar sau nu este asigurat de fel, are o categorie căruia îi corespunde. Selectarea categoriei este foarte importantă deoarece în funcție de ea se aleg prețurile pentru medicamentele eliberate pe baza de rețetă primită de la medic.
Dacă pe rețeta primită de la medic este notat sau pusă bifă cu lista C1 / C2, atunci ar trebui bifată și căsuța corespunzătoare din program.Astfel nu se mai ține cont de categoria de asigurat, regulile de compensare fiind diferite pentru categoria aceasta de medicamente.
În funție de acești factori produsele sunt împărțite pe categorii și anume produse aflate pe lista A, B, sau C, de compensare. Ceea ce înseamnă că 90%, 50%, și respectiv 100% din prețul de referință este plătit de către Casa Națională de Asigurări de Sănătate. Restul ce rămâne este suportat de către client.
Pentru a implementa acest lucru, am împărțit categoriile de asigurați în grupuri, a căror nume corespunde coloanei de preț din lista cu medicamente compensate,după cum se poate observa în Figura 4.17.
Acum știm ce câmpuri trebuie să folosim în funcție de ce alege.Tot ce mai rămâne e să scriem codul. Acesta se află în pagina compensare.php . Aici sunt structurile condiționale care separă si selectează informația în funcție de parametrii dați de utilizator. Sunt selectate medicamentele a căror câmpuri cu denumirea grupului de asigurați conține valori diferite de zero și denumirea medicamentului seamănă cu ce a introdus utilizatorul în căsuța alocată pentru căutare.
Pentru a calcula cât mai este de plată folosesc variabila „$deplată” în care scad valoarea din coloana corespunzătoare categoriei de asigurat, sau listei C1 sau C2 (dacă este bifat), din coloana “msf_new”(Figura 4.18).
Figura 4.17: Gruparea categoriilor de asigați
Figura 4.18: Selectarea medicamentelor și calcul restului de plată
După ce s-au selectat detaliile privind compensarea și se apasă pe butonul “Afișare medicamente” clientul este redirecționat pe pagina compensare.php unde se văd produsele cu prețurile lor și are posibilitatea să le rezerve apăsând butonul aferent( fig. 4.20).
Figura 4.19: Pagina categorii.php
Figura 4.20: Pagina compensate.php
IV.4.4 Afecțiuni.php
Această pagină este de a ajuta utilizatorul să aleagă medicamentul de care are nevoie în funcție de afecțiunile pe care le selectează. Astfel în partea stângă a paginii se află toate afecțiunile posibile pe care le poate avea o persoane și pentru care farmacia are medicamente care le combate. În mijloc se afișează medicamentele ce combat afecțiunea selectată, iar în partea dreaptă a paginii sunt afișate afecțiunile ce au fost selectate.
Pentru a explica mai bine modul de funcționare fac din nou referire la Figura 3.1. Nodul de top (de sus), al ierarhiei de clase medicament, se numește nod „universal” și conține toate obiectele formale, iar în acest caz nici un atribut. Nodul de jos reprezintă nodul cu numele de „nul” sau „contradictoriu”. De obicei acesta este gol, iar când se dorește afișarea obiectelor formale ale acestui set se tipărește un mesaj de eroare specific.
Revenind la funcționalitatea paginii, se poate preciza că în momentul în care un utilizator alege o afecțiune, atributul respectiv se mută în partea dreaptă a paginii. Din perspectiva teoriei analizei conceptelor formale, acest lucru este definit ca o coborâre pe nodul ales al setului de concepte formale. Astfel, intensia conceptului (setul de atribute formale) este afișată în partea dreaptă a paginii.
Pentru a reține setul de atribute, am folosit o matrice sesiune cu numele de “tăiate” – numele se referă la faptul că au fost scoase din matricea cu afecțiuni posibilie și introduse în cea cu afecțiuni selectate.
Ca să fie mai ușor de înteles, doresc să menționez toate variabilele folosite, și modul lor de inițializare. În primul rând folosesc vectorii sesiune “obiecte”, ce conține toate medicamentele existente în baza de date și “atribute”, ce conține toate afecțiunile din baza de date. Aceștia sunt inițializați în index.php prin funcții MySQL cu datele din baza de date. De asemenea mai folosesc matricele sesiune “legături” și “noduri”, ce conțin contextul formal, adică toate obiectele și atributele formale cu legăturile dintre ele. Matricea noduri este o copie a matricei legături, dar voi vorbi despre ea mai târziu. Acestea două sunt inițializate tot în index.php.
Revenind la pagina afecțiuni, în momentul în care utilizatorul alege o afecțiune, fie ea selectată sau neselectată anterior, se extrage atributul prin metoda GET. Se parcurge matricea atributelor tăiate, dacă aceasta este populată, și se verifică dacă afecțiunea se găsește printre valorile ei. Dacă nu există afecțiuni selectate până în acel moment, sau dacă afecțiunea nu este găsita printre atributele selectate, se parcurge matricea legături, în ea fiind stocate afecțiunile neselectate până în acel moment. În cazul în care scoatem un element din matricea “tăiate” îl introducem înapoi in “legături”.
Figura 4.21 Inițializarea matricelor
Figura 4.22 Reintroducerea in matricea legaturi
Dacă utilizatorul dorește ca setul atributelor selectate să crească, alegând o afecțiune neselectată, atunci se va parcurge matricea “legături” și se va muta afecțiunea respectivă în “tăiate”. Exact opusul a ceea ce se întâmplă mai sus.
Pentru a afișa afecțiunile posibile într-o parte,medicamentele în mijloc si afecțiunile selectate în dreapta am folosit un tabel,pentru a împărți pagina în trei coloane.
Figura 4.23 Interfața paginii afecțiuni
Pentru a afișa medicamentele care tratează afecțiunile selectate se apelează la matricea “tăiate”, în care sunt reținute toate afecțiunile ce sunt la un moment dat selectate. După cum se poate observa în Figura 4.13 dacă setul de atribute formale este gol, atunci este afișat un mesaj de eroare corespunzător.
Figura 4.24 Afișarea medicamentelor ce conbat afecțiunile selectate
În momentul în care un utilizator alege o afecțiune, se coboară la următorul concept formal. Spre exemplu, dacă se alege afecțiunea “dureri musculare”, există un nod deasupra conceptului curent, dar care nu conține atribute formale.
Dacă utilizatorul mai alege o afecțiune, precum “dureri dentare”, atunci ne vom referi la conceptul care are intensia aceste două atribute formale, și cu extensia “Ibalgin” .Pentru a ajunge să se preia extensia conceptului,trebuie să fie urmărite toate căile care duc în sus, cu scopul de a colecta toate atributele formale. Deasupra acestui concept exista două superconcepte, și anume “dureri musculare” și “dureri dentare”, pe care le intersectez, iar astfel se obține extensia dorită.
Algoritmul se poate aplica pentru oricăte domenii selectate, folosindu-se funcția repetitivă for () și funcția array_intersect ce intersectează elementele din matricea “tăiate” și $adj unde sunt memorate denumirile atributelor.
Figura 4.25 Intersectarea conceptelor formale
IV.4.5 Recomandare.php
În momentul în care în pagina descrisă mai sus, se dă clic pe numele unui medicament, acesta este redirecționat spre pagina recomandare.php unde, în partea stângă se afișează toate detaliile despre produsul respectiv, iar în partea dreaptă se află un sistem de recomandare al medicamentelor. Acest sistem este un element util, care afișează medicamentele în ordinea similitudinii lor în ce privește combaterea afecțiunilor selectate. Acest lucru este foarte util și pentru utilizator și pentru farmacie. Efectele medicamentor nu sunt la fel pentru toată lumea. Poate utilizatorul nu este mulțumit de un medicament, astfel când dă clic pe el, sistemul de recomandare îi afișează cinci produse similare cu cel selectat. Astfel clientul este mulțumit, iar farmacia face vânzare.
Algoritmul seamănă cu cel folosit la pagina anterioară, însă are mici diferențe. În primul rând nu se pornește de la o afecțiune selectata ci de la un medicament. O caracteristică interesantă a setului de concepte formale este faptul că o anumită “ închidere” a relației este implicată. Începând cu orice obiect formal se pot identifica toate atributele sale formale și astfel și obictele formale ce sunt comune.
Folosind exemplul din figura 3.1 ,mai exact medicamentul “Paduden” se poate extrage toate atributele acestuia, și anume: “dureri de cap”, “dureri ale articulațiilor” și “febră”. Parcurgând taxonomia contextului formal de jos în sus, și urmărinduâse nordurile unde apar acest medicament se observă că “Mig-400” are cele mai multe atribute în comun cu “Paduden”. Urcând și mai sus mai găsim și “Nurofen” și “Ibalgin” deși acestea au doar un atribut comun cu acesta.
Luând în considerare că site-ul este destinat publicului larg, și, dacă ar fi să fie introduse toate medicamentele necompensate dintr-o farmacie, cantitatea de informație ar fi foarte mare, procesarea codului și de date ar fi foarte costisitoare, atât din punctul de vedere al timpului cât și al memoriei necesare. De aceea, am decis ca medicamentele asemănătoare să nu fie “calculate” pe locîn pagina recomandare.php, ci acestea să fie memorate înt-un tabel separat în baza de date numit “FCA”. Acestea vor putea fi actualizate în partea de administrare oricând se vor stabili noi legături între medicamente și afecțiuni, prin apăsarea unui singur buton.
Figura 4.26 Sistemul de recomandare
Am notat câmpurile tabelului FCA sugestic cu medicament1,medicament2, etc. pentru a putea fi parcurse ușor cu un for (), metodă ce scutește de mult cod scris. Dacă nu aș fi făcut acest lucru, ar fi trebuit să rescriu codul pentru fiecare câmp în parte și să modific doar numele câmpului.
Codul ce calculează care sunt medicamentele din extensia supraconceptelor medicamentului selectat se poate găsi în pagina prelucrare_update.php și este activat prin apăsarea butonului “Actualizare” din pagina update.php din secțiunea de administrare.
Figura 4.27 Popularea tabelului FCA
Prima dată presupunem că nu există nici o dată în tabel. Pentru popularea acestuia se selectează fiecare medicament pe rând din tabelul “medicament” . Se verifică dacă id-ul medicamentului respectiv este deja in tabelul FCA . Dacă da, se trece la următorul medicament, dacă nu se inserează în tabel. Variabila $nr am utilizat-o să nu introduc cumva același id de mai multe ori. Am folosit codul mysql de golire a tabelului FCA, la începutul acestei pagini, pentru a fi sigur că datele sunt întotdeauna corecte și tabelul este populat cu datele referitoare la medicamentele din baza de date ce există la momentul respectiv, nu date incorecte.
După această etapă, e timpul să se introducă id-urile medicamentelor recomandate în câmpurile aferente. Pentru fiecare medicament memorăm într-un vector numit $adj toate afecțiunile pe care le combate. Dacă obiectul formal are mai multe atribute formale acestea se memorează, iar dacă sunt mai puține decât spațiul alocat se iau și atributele de la supranoduri.
Parcurgerea ierarhiei de clase a contextului formal se face de jos în sus. Prima dată se parcurg toate afecțiunile combătute de un medicament, pentru a se afla extensia acesteia. Se memorează aceasta într-un vector, iar mai apoi se urcă în sus spre supraconcepte. Codul ce calculează toate intensiile posibile, în acest caz pornindu-se da la nivelul 2 pana la nivelul 3 (dar funcționează pentru oricâte nivele).
Având în vedere că se dorește parcurgerea de jos în sus și nu invers, matricea ce memorează aceste concentrări ($obj) va fi inversată ulterior prin funcția array_reverse() în matricea $obj1.
Figura 4.28 Algoritmul ce calculează intensiile nodurilor taxonomiei contextului formal, pe nivele
Matricea $obj1 conține intensiile fiecărui nod, despărțite prin semnul „*”. Am ales acest semn în loc de spațiu deoarece multe afecțiuni conțin spațiu în denumirea loc și astfel ar fi imposibil să le delimitez corect. Am folosit vectorul „$adj” pentru a reține intensia fiecărui nod, astfel putând să intersectez afecțiunile și să rețin extensiile aferente.
În cazul destul de improbabil, în care s-au parcurs toate nodurile și nu sunt destule medicamente se vor lua din conceptul universal care conține toate medicamentele.
Figura 4.29: Inserarea cărților recomandate în baza de date
IV.4.6 Coș.php
Date din această pagină provin din paginile prezentate anterior și sunt afișate prin intermediu acțiunii “adaugă” și a sesiunilor. Aici utilizatorul are posibilitatea de a modifica cantitatea din coș, fie că este vorba de o cutie sau o capsulă. În cazul în care ambele din aceste câmpuri conțin valoare zero, medicamentele sunt scoase din coșul de cumpărături. Aceste schimbări au loc în cadrul acțiunii “modifică”. Nu pot fi introduse valori negative, în caz contrar revenindu-se direct pe pagina coș.php.
După ce clientul este mulțumit cu medicamentele din coș poate să continue cu finalizarea comenzii prin apăsarea butonului cu același nume.
Figura 4.30: Pagina coș.php
IV.4.7 Comanda.php
Aici este pagina unde trebuiesc notate datele pentru cine sunt produsele selectate în pagina anterioară. Medicamentele sunt și ele afișate, însă nu se mai pot modica. Clientul trebuie să completeze în mod obligatoriu câmpul de nume, prenume, telefon și adresă din formular, email-ul fiind opțional. Datele sunt trimise în prelucrare.php unde sunt validate cu ajutorul unor funcții scrise în JavaScript. Dacă datele sunt corecte, cele referitoare la cumpărător sunt notate în tabela comenzi, iar cele referitoare la medicamente și cantitatea rezervată în tabela tranzacții. După aceea se trimite un mail către administrator, cu toate informațiile referitoare la tranzacția efectuată.
Figura 4.31: Trimiterea emailului către administrator
Figura 4.32: Pagina comanda.php
IV.4.8 Contact.php
Ca și orice alt site e nevoie de o pagină de contact. Aici sunt afișate informații cu privire la adresa farmaciei, telefonul și programul de lucru. De asemenea mai este inclusă o imagine a farmaciei și este inserată harta google maps în care este setată adresa farmaciei pentru a ajuta clientul să găsească farmacia.
Figura 4.33 Pagina contact.php
IV.4.9 Asistență.php
Aceasta este o pagină ajutătoare pentru cei care au probleme cu navigarea pe site. Sunt notate instrucțiuni și sunt puse imagini ajutătoare cu aplicația.
Figura 4.32 Pagina asistență.php
IV.4.10 Index.php ( administrare)
Acesta este prima pagină din partea de administrare a site-ului. Partea aceasta este destinată angajaților pentru a putea face modificări în baza de date și de a administra lista cu comenzile efectuate de clienți.
Prima dată farmacistul trebuie să se conecteze. Pentru aceasta trebuie să introducă utilizatorul și parola care sunt verificați în pagina login.php dacă corespund cu datele din baza de date. Dacă nu, este afișat un mesaj de eroare. În caz că avem nevoie de un utilizator nou trebuie doar să se apese butonul de “creare utilizator” și trebuiesc introduse datele.
Figura 4.33: Pagina index.php
IV.4.11 Comenzi.php
După logare administratorii sunt redirecționați spre pagina de comenzi. În cazul în care sunt comenzi care nu au fost încă onorate, acestea sunt afișate pe pagină. Sunt afișate datele clientului, medicamentele dorite, precum și data când a fost plasată comanda. Utilizatorul are posibilitatea de a anula o comandă, dacă este cazul, sau o poate seta ca și onorată. În acel moment acele comenzi nu mai sunt afișate, însă ele sunt încă stocate în baza de date.
Figura 4.34: Pagina comenzi.php
IV.4.12 Update.php
În această pagină se pot stabili legăturile intre ce medicament combate care afecțiune și care este producătorul unui medicament. Acest lucru este util dacă cumva când a fost introdus produsul s-a selectat greșit. Acțiunea click-urilor facute de utilizator asupra bazei de date are loc în pagina prelucrare_update.php unde sunt trimise datele. Aici datele sunt manipulate și sunt trimise spre tabele corespunzătoare. Astfel tabela de legături este populată cu id-ul medicamentelor și afecțiunilor, iar id-ul procătorului este notat în câmpul id_producător din tabelul medicament.
Cum am precizat și la pagina recomandare.php aici se află codul care populează tabela FCA cu medicamentele cele mai relevante în comparație cu cel selectat. Datoria celui care administreaza site-ul din farmacie este de a apăsa butonul “Actualizare” după ce face schimbări de nume, introduce medicamente, sau setează legături pentru o funcționare corectă al sistemului de recomandare.
Figura 4.35: Pagina update.php
IV.4.13 Modifica.php
Toată lumea greșește, e firesc și e normal. Așa că nu am putut exclude idea că poate a fost introdusă o afecțiune cu o literă în plus, sau nu a fost scris cum trebuie numele unui producător. Astfel în această pagină am dat posibilitatea administratorului din farmacie să corecteze eventuale greșeli ce au fost introduse la numele medicamentului, al producătorului sau al unei afecțiuni.
De asemenea acestea pot fi șterse complet din baza de date.Asta în cazul în care nu sunt create legături intre ele. Spre exemplu, dacă avem legat un medicament de un producător și am dori să ștergem producătorul, aplicația nu ar permite acest fapt afisând un mesaj de eroare corespunzător. Nu am putea lasă un medicament să fie fără producător. Dacă numele e scris greșit se poate modifica, iar dacă ar fi al producătorl ar trebui doar să ii facem legătura acestuia cu medicamentul, legătura veche fiind suprascrisă. Codul pentru a modifica sau a șterge elementele se află în paginile prelucrare_modifică.php și prelucrare_ștergere.php. Din modifică.php fiind trimise doar datele care trebuiesc manipulate.
Figura 4.36: Pagina modifică.php
IV.4.14 Add.php
Tot timpul vor apărea produse, producători sau afecțiuni noi care vor trebui introduse în baza de date. Acest lucru se poate realiza pe pagina add.php. Medicamentul poate fi introdus cu toate datele sale tipul ambalajului,numărul de bucăți din ambalaj, substanța activă, concentrația, prețul de vânzare și producătorul.În momentul în care avem parte de un producător nou și el poate fi introdus.
Codul aferent introducerii datelor în baza de date se află în paginile adaugă_medicament.php, adaugă.php (pentru furnizor) și adaugă_afecțiune.php. Inainte însă sunt verificate datele, deoarece nu am vrea să introducem date necorespunzătoare sau goale în baza de date.
Figura 4.37: Pagina add.php
Capitolul V. Modul de utilizare al site-ului
În acest capitol voi descrie modul de utilizare al aplicației atât din punctul de vedere al unui potențial client, cât și al angajatului farmaciei.
Prima dată ca și un vizitator al site-ului pe pagină principală puteți vedea ofertele speciale pe care le promovează și oferă farmacia.Dacă cumva sunteți un client anterior, sau cunoașteti numele medicamentului puteți foarte ușor să îl căutați print intermediul motorului de căutare aflat deasupra meniului.
Trebuie doar să scrieți cuvântul sau câteva caractere din numele, productărul sau substanța sa activă, selectați dacă medicamentul este compensat sau nu, și apăsați butonul “Caută”. Se va deschide o nouă pagină cu rezultatele căutării. De aici veți putea trimite produsul în coșul de cumpărături, sau dacă dați click pe denumirea medicamentului veți fi redirecționați spre o pagină unde sunt afișate detaliile acestuia.
Dacă în schimb vreți să vizualizați produsele din farmacie trebuie doar să selectați butonul din meniu. “Necompensate” va deschide o pagină cu toate produsele necompensate comercializate, iar de aici puteți din nou printr-un simplu click să le trimiteți în coșul de cumpărături.
În cazul în care vă interesează medicamente care se eliberează pe bază de rețetă trebuie doar să selectați categoria de asigurat al persoanei notate pe rețeta de la medic , și să selectați “afișează medicamentele” și vor fi afișate toate medicamentele care corespund acelei categorii de asigurat împreună cu restul de plată pe care l-ar mai avea de achitat clientul. Aveți posibilitatea să notați si numele sau câteva caractere din el, astfel fiind afișate doar medicamentele care seamănă cu caracterele s-a introdus în câmpul respectiv.
Dacă dați click pe butonul “ afecțiuni” din meniu veți găsi un mic “îndrumător” .Pe această pagină în partea stângă sunt toate afecțiunile posibile. Trebuie doar să le selectați pe cele care le aveți ,pot fi chiar mai multe și aplicația vă va afișa medicamentul care le tratează (în cazul în care există). Afecțiunile selectate se află în partea dreaptă a paginii. În cazul în care ați selectat greșit trebuie doar să dați click pe afecțiune, din nou, și va fi deselectată.
Dacă vă place un medicament, puteți să îl selectați cu mouse-ul și va apărea o pagină cu detalii privind mecamentul respectiv,iar în partea dreaptă sunt afișate cinci produse similare cu acesta. Primul fiind cel mai apropiat de medicamentul selectat. Astfel dacă un medicament nu vă place, sau știți că nu este compatibil cu organismul dumneavoastră, atunci puteți alege altul similar.
Dacă v-ați hotărât asupra unor produse și le-ați adăugat în coșul de cumpărături, este timpul să mergem mai departe. De pe orice pagină puteți vedea numărul de produse din cos, cât și valoarea acesturia. Pentru a vedea conținutul trebuie doar dat click pe imaginea cu coșul de cumpărături. Pe pagina ce se va deschide vor fi afișate toate produsele în dreptul cărora ați apăsat pe butonul “Rezervă acum”. Dacă cumva vreți să cumpărați mai multe cutii, sau din contră doar câteva boabe, trebuie doar să modificați valoarea din câmpurile aferente și să dați click pe butonul “Modifică”. Cantitatea si prețul din coș vor fi actualizate automat conform cu valorile date.
Acum că avem și cantitatea dorită trebuie doar să finalizăm comanda. Se apasă pe butonul cu acest nume și veți fi redirecționat spre pagina comandă.php. Aici trebuiesc completate câmpurile cu datele clientului ce va ridica comanda din cadrul farmaciei și apoi trebuie doar să apăsați butonul “rezervă produsele”. În momentul acesta va fi afișat un mesaj ce confirmă faptul că a fost trimisă comanda și trebuie doar să mergeți după medicamente la sediul farmaciei.
Datele farmaciei împreună cu telefonul și programul de lucru sunt toate notate în pagina de contact.Aici găsiți și locația acesteia pe Google Maps.
Pentru un angajat al farmaciei, lucrurile stau altfel decât pentru clienți. Prima dată angajatul trebuie să își introducă numele utilizatorului și parola .În cazul în care nu are utilizator, trebuie să de a click pe butonul “creare utilizator”. Astfel își crează utilizatorul și parola după ce le introduce. Apoi acesta are acces la partea de administrare.
Să presupunem că acesta dorește să introducă un medicament nou care tratează o afecțiune care nu a mai fost folosită până acuma. Acest lucru este ușor de făcut. Trebuie doar apăsat buton “Adaugă”, iar pe pagina ce se deschide trebuie să completeze câmpurile. Dacă cumva producătorul nu a mai fost introdus până atunci, el trebuie introdus primul ca să apară în lista de la medicamente.
Ce se întâmplă dacă angajatul a scris numele medicamentul greșit ? Trebuie doar să meargă în a doua pagină, “Modifică/Șterge” .Aici trebuie doar să selecteze elementul scris greșit, să apese pe “modifică” și să introducă numele corect. De asemenea în cazul în care din ceva motiv trebuie să îl șteargă, e nevoie doar să selecteze, să dea click pe butonul “șsterge” și să confirme că întradevăr vrea să șteargă numele medicamentului, producătorului sau a afecțiunii.
Poate partea cea mai importantă al angajatului farmaciei este să asigure buna funcționare a sistemului de recomandare. Ceea ce e mai ușor decât pare. O dată cu introducerea unui medicament nou trebuie să menționeze ce afecțiuni combate produsul respectiv. Astfel pe pagina update.php administratorul din farmacie trebuie să selecteze medicamentul și afecțiunea corespunzătoate acesteia. În cazul a mai multor afecțiuni combătute, se repetă acest pas.
Această posibilitate de a seta legăturile intre medicamente și producător sau afecțiune, oferă un alt avantaj. Și anume, permite corectarea legăturilor greșite introduse anteior, deoarece le suprascrise. Utilizatorul trebuie doar să aleagă ,spre exemplu, medicamentul și producătorul corect, și se va stabili relația dintre cei doi,chiar dacă medicamentul avea atribuit alt producător inainte. După ce au fost stabilite legăturile dintre medicamente și afecțiuni administratorului îi mai rămâne doar să apese butonul “Actualizează” care va face totul pentru a actualiza sistemul de recomandare.
În cazul în care, un client a plasat o comandă de rezervare a unor medicamente, aceasta va fi afișată în pagina comenzi.php pe care se ajunge apăsând ultimul buton din meniul administratorului. Aici sunt afișate medicamentele dorite, cantitatea, precum și datele acestuia. Dacă cumva nu sunt medicamentele respective pe stoc, angajatul are obligația să anunșe clientul, iar acesta are posibilitatea să anuleze sau să accepte așa comanda. Astfel după ce clientul vine și își ridică medicamentele rezervate, angajatul va apăsa pe butonul “Comandă onorată” aflat sub detaliile comenzii respective sau pe butonul “Anulează comanda” în cazul în care un client a renunțat la produs.Astfel aceste comenzi nu vor mai apărea pe această pagină.
Concluzii
Aplicația pe care am realizat-o pentru proiectul de diplomă este un site destinat rezervării medicamentelor intr-o farmacie pentru a fi ridicate ulterior de către client. Pentru a se putea decide mai ușor asupra ce medicamente are nevoie și pentru a găsi cât mai ușor produsul, am implementat și un sistem de recomandare bazat pe metodologia analizei formale. Acesta funcționează pe principiul că există o legătură între obiecte și atribute, acestea fiind grupate în seturi de concepte formale.
De asemenea pot fi aflate prețul medicamentelor compensate în funcție de categoria de asigurat, conform liste de medicamente eliberată de Casa Națională de Asigurări de Sănătate. Aplicația este utilă atât celor ce vizitează site-ul deoarece pot afla informații legate de medicamente, dar și pentru farmacie/farmacist deoarece îi poate promova produsele, astfel aducând un profit suplimentar.
Pe viitor doresc să îmbunătățesc aplicația, sistemul de recomandare a produsului în funcție de afecțiuni putând fi un pic mai dinamic, de exemplu să fie un desen cu corpul uman iar pacientul să dea click pe zona cu probleme. De asemenea, s-ar putea face îmbunătățiri și la partea de administrare, dar acestea ar fi mai bine să fie stabilite după o perioadă de probă a utilizării aplicației actuale în cadrul farmaciei.
Această aplicație poate fi dezvoltată și adaptată pentru o mare varietate de domenii, în special sistemul de recomandare, este nevoie doar de o imaginație bogată, un calculator, cunoștințe și de mult timp liber la dispoziție pentru implementare.
Bibliografie
Ghidul din 2 decembrie 2008 privind buna practica de distributie angro a medicamentelor publicat in Monitorul Oficial 865 din 22 decembrie 2008 (M. Of. 865/2008) cap. XII art.58-76
"On SGML and HTML". World Wide Web Consortium. Retrieved November 16, 2008.
Korpela, Jukka (July 6, 1998). "Why attribute values should always be quoted in HTML". Cs.tut.fi. Retrieved November 16, 2008.
"World Wide Web Consortium – current Members". World Wide Web Consortium. 29 Martie 2012.
Bos, Bert (18 February 2011). "Descriptions of all CSS specifications". World Wide Web Consortium.
Darwen, Hugh (2005-04-15). "More on Relational Algebra versus Calculus". In Pascal, Fabian. Database Debunkings
http://www.almaden.ibm.com/cs/people/chamberlin/sequel-1974.pdf
ANSI/ISO/IEC International Standard (IS). Database Language SQL—Part 2: Foundation (SQL/Foundation). 1999.
Carpineto, C., & Romano, G. (2004), Concept Data Analysis: Theory and Applications, Berlin: Springer: 126-140
Wille, R. (1982), Restructuring lattice theory: an approach based on hierarchies of concepts, Reidel, Dordrecht-Boston: 445-470
Freeman, L., & White, D. (1993), Using Galois lattices to represent network data. Sociological Methodology, Berlin: Springer: 127-146
Stumme, G. (2002), Formal Concept Analysis on Its Way from Mathematics to Computer Science, Berlin: Springer: 2-19
Godin, R., & Mili, H. (1993), Building and maintaining analysis-level class hierarchies using Galois lattices, OOPSLA ’93. ACM Sigplan Notices: 394-410
Ganter, B., & Wille, R. (1999a), Formal Concept Analysis. Mathematical Foundations, Berlin: Springer: 377-388
Hereth Correia, J., & Klinger, J. (2004), Protoconcept Graphs: The Lattice of Conceptual Contents, Berlin: Springer: 24
http://www.wme.ro/docs/down/solutii_suport/Mentor/WME%20%20Actualizare%20Nomenclator%20Articole%20cf%20Medex.pdf, 16.06.2012
Baker, K.A., Wille, R. (1995): Lattice theory and its applications, Heldermann-Verlag, Berlin: 23
Constantin Avornicului (2010), Caiet de lucrări practice la managementul și proiectarea sistemelor informatice de gestiune, Cluj Napoca, pag 55 – 83
Bibliografie
Ghidul din 2 decembrie 2008 privind buna practica de distributie angro a medicamentelor publicat in Monitorul Oficial 865 din 22 decembrie 2008 (M. Of. 865/2008) cap. XII art.58-76
"On SGML and HTML". World Wide Web Consortium. Retrieved November 16, 2008.
Korpela, Jukka (July 6, 1998). "Why attribute values should always be quoted in HTML". Cs.tut.fi. Retrieved November 16, 2008.
"World Wide Web Consortium – current Members". World Wide Web Consortium. 29 Martie 2012.
Bos, Bert (18 February 2011). "Descriptions of all CSS specifications". World Wide Web Consortium.
Darwen, Hugh (2005-04-15). "More on Relational Algebra versus Calculus". In Pascal, Fabian. Database Debunkings
http://www.almaden.ibm.com/cs/people/chamberlin/sequel-1974.pdf
ANSI/ISO/IEC International Standard (IS). Database Language SQL—Part 2: Foundation (SQL/Foundation). 1999.
Carpineto, C., & Romano, G. (2004), Concept Data Analysis: Theory and Applications, Berlin: Springer: 126-140
Wille, R. (1982), Restructuring lattice theory: an approach based on hierarchies of concepts, Reidel, Dordrecht-Boston: 445-470
Freeman, L., & White, D. (1993), Using Galois lattices to represent network data. Sociological Methodology, Berlin: Springer: 127-146
Stumme, G. (2002), Formal Concept Analysis on Its Way from Mathematics to Computer Science, Berlin: Springer: 2-19
Godin, R., & Mili, H. (1993), Building and maintaining analysis-level class hierarchies using Galois lattices, OOPSLA ’93. ACM Sigplan Notices: 394-410
Ganter, B., & Wille, R. (1999a), Formal Concept Analysis. Mathematical Foundations, Berlin: Springer: 377-388
Hereth Correia, J., & Klinger, J. (2004), Protoconcept Graphs: The Lattice of Conceptual Contents, Berlin: Springer: 24
http://www.wme.ro/docs/down/solutii_suport/Mentor/WME%20%20Actualizare%20Nomenclator%20Articole%20cf%20Medex.pdf, 16.06.2012
Baker, K.A., Wille, R. (1995): Lattice theory and its applications, Heldermann-Verlag, Berlin: 23
Constantin Avornicului (2010), Caiet de lucrări practice la managementul și proiectarea sistemelor informatice de gestiune, Cluj Napoca, pag 55 – 83
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: Implementarea Unei Aplicatii Web Pentru Farmacii (ID: 149875)
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.
