Sunteți pe pagina 1din 22

LI C EU L TEO R ETI C N I C O LA E I O RGA

Elev: Clasa: a XII-a Profesor:

- MAI 2007 -

1. ARGUMENT
Tema proiectului Gestiunea unei farmacii este realizata in mediu Visual FoxPro. Aplicatia pe care am realizat-o pentru acest proiect este un mic program prin care se poate tine evidenta medicamentelor dintr-o farmacie. Am ales aceasta tema deoarece in orice fel de farmacie este necesara existenta unui program care sa usureze munca farmacistilor, tinand evidenta asupra medicamentelor printr-o modalitate performanta, sigura si eficienta. Programul isi propune sa tina aceasta evidenta a medicamentelor, folosind 4 baze de date: clienti.dbf, med_compensate.dbf, med_gratuite.dbf, med_liber.dbf. Cele 3 baze de date: med_compensate.dbf, med_gratuite.dbf si med_liber.dbf se completeaza cu datele despre medicamentele intrate in stocul farmaciei, iar baza de date clienti.dbf se completeaza cu datele clientilor si tipul medicamentelor vandute acestora. In acelasi timp putem vorbi despre un program educativ intrucat serveste in educatia Antreprenoriala in Management si Marketing.

2. PREZENTAREA MEDIULUI DE LUCRU Visual FoxPro In orice fel de activitate, indiferent de domeniul in care se desfasoara, exista o latura informationala. Aceasta inseamna ca in cadrul acestor activitati se prelucreaza informatii, prelucrarea realizandu-se intr-o masura tot mai mare cu ajutorul calculatorului. Informatiile prelucrate cu ajutorul sistemelor de calcul se numesc date. Datele trebuie stocate, organizate, prelucrate si regasite. Pentru a executa aceste operatii: Se utilizeaza tipuri de date prestabilite de proiectanti; Se concep structuri de date care permit inregistrarea acestora in colectii organizate, oferind siguranta stocarii si eficienta metodelor de regasire a datelor; Se realizeaza sisteme de gestiune a bazelor de date, care contin procedurile de prelucrare a datelor, interfata pentru comunicare interactiva cu utilizatorul, un mediu de programare si alte instrumente necesare pentru prelucrarea bazelor de date; Se concep limbaje de programare specializate in prelucrarea datelor. Un ansamblu de date de acelasi tip formeaza o colectie de date. Intre datele dintr-o colectie se pot stabili relatii sau legaturi. Construirea unei tabele implica specificarea structurii sale. Odata creata o tabela, la aceasta se pot include inregistrari. La acest
4

nivel se efectueaza principalele operatii: adaugarea, stergerea, blocarea (la lucrul in retea). In Visual FoxPro datele se pot inregistra in tabele simple sau in tabele grupate impreuna cu eventualele relatii dintre ele si cu anumite secvente de cod (instructiuni alcatuind proceduri sau programe) in baza de date. O tabela este alcatuita din campuri si inregistrari. Visual FoxPro dispune de zone de lucru in care se pot deschide tabele existente in aplicatie. Dintre tabelele deschise, doar una singura este considerata tabela activa, si asupra ei actioneaza instructiunile programului. O tabela reprezinta o structura in care se pot memora date de diferite tipuri care descriu elementele unei multimi. Datele pot fi puse in evidenta in inregistrari (randuri) si campuri (coloane). La crearea unei baze de date se reunesc de regula, una sau mai multe tabele, intr-o colectie care beneficiaza de numeroase facilitati, cuprinse in dictionarul de date. O baza de date poate fi alcatuita din mai multe tabele, intre care se stabilesc relatii in vederea coordonarii datelor aflate in aceste tabele. Acestea pot fi temporare (cand se construiesc in cadrul unui program si sunt valabile in timpul sesiunii de lucru curente) si permanente (cand se construiesc o singura data si sunt valabile la fiecare deschidere a bazei de date). La stabilirea unei relatii intre doua tabele, una dintre acestea (numita tabela-parinte) are rol conducator, iar cealalta numita (tabela-fiu) este condusa. Legatura se stabileste pe
5

baza unui camp comun celor doua tabele numai pentru valorile egale aflate in aceste campuri din tabelele respective. In general, o aplicatie trebuie sa vizualizeze informatii din tabelele cuprinse in baze de date si sa permita utilizatorilor introducerea altor informatii. Visual FoxPro pune la dispozitie o colectie substantiala de obiecte care pot raspunde la diverse evenimente generate de utilizator sau sistem si care se pot deplasa in interiorul unui formular alcatuind o puternica interfata cu utilizatorul. Formularele sunt plasate in cadrul unui proiect in pagina de document (Documents) in rubrica Forms.

Una dintre cele mai importante facilitati oferite de Visual FoxPro e capacitatea de a creea biblioteci de clase, care pot fi refolosite in aceeasi aplicatie sau in aplicatii diferite. Aplicatia Form
6

Designer dispune de posibilitatea de a salva un control plasat intr-un formular sau chiar un formular sub forma unei clase. Clasele pot fi adaugate la un formular direct in bara Form Controls ca orice alt obiect obisnuit. Realizarea acestor clase se bazeaza pe capacitatea limbajelor de programare orientata spre obiecte de a asigura reutilizarea componentelor prin intermediul mostenirii. Este recomandabil ca mostenirea sa survina la nivelul celor mai elementare componente. Este foarte important ca atunci cand toate cerintele unui proiect au fost indeplinite, situatiile finale sa fie prezentate intr-o forma sintetica, clara, atractiva. Visual FoxPro ofera un program specializat in realizarea rapoartelor numit Report Designer. Pentru realizarea unui raport: Se stabilesc datele care vor intra in componenta acestuia; Se stabilesc sursele care vor furniza datele; Se stabilesc calculele ce trebuiesc efectuate; Se stabileste aspectul raportului avand in vedere cadrul limitat. Un mediu reprezinta o grupare de optiuni la alegerea carora sunt declansate diferite actiuni, ceea ce permite o comunicare optima cu utilizatorul. Utilizatorii pot parcurge meniurile inainte de a cauta altundeva informatii despre aplicatia aflata in lucru. Daca meniurile sunt proiectate in mod adecvat, utilizatorii pot intelege aplicatia si pot parcurge cu usurinta structura meniurilor, afisand continuturile acestora.
7

3. REALIZAREA APLICATIEI
Aplicatia este bazata pe 4 tabele pe care le-am creat cu urmatoarele denumiri: clienti.dbf, med_compensate.dbf, med_gratuite.dbf, med_liber.dbf, in care am introdus datele catorva clienti, tipuri de medicamente, cantitatea acestora, pretul si valoarea. Campul Valoare este completat automat in momentul in care se introduc preturile si cantitatea medicamentelor.

Pentru a utiliza programul cat mai simplu, am construit un meniu de unde se lanseaza toate modulele incluse in aplicatie. Pentru aceasta am ales optiunea Menus din Project Manager si am apasat butonul New ce a activat Menu Designer, unde am creeat tab-urile necesare aplicatiei pentru evidenta medicamentelor dintr-o farmacie. In imaginea de mai jos este prezentata structura principala a meniului, desfasurarea acestuia fiind descrisa in manualul de utilizare din paginile urmatoare ale prezentului proiect.

Dupa realizarea meniului, am creat formularele necesare pentru utilizarea tabelelor create anterior si pentru manipularea datelor existente in ele. Este de preferat ca aceasta manipulare a datelor din baza de date sa se faca prin intermediul formularelor, deoarece adaugarea, modificarea, stergerea datelor se face in siguranta, fara a se ivi riscul pierderilor de date.

Pe langa formularele ce stau la baza acestei aplicatii am mai creeat si niste programe ce indeplinesc diferite roluri in functionarea programului. Unul dintre ele aranjeaza toti elevii din baza de date in ordinea descrescatoare mediilor si ii afiseaza intr-o fereastra. Programul este prezentat in imaginea de mai jos.

10

4. MANUAL DE UTILIZARE
Aceasta aplicatie este realizata pentru orice fel de farmacie, gestiunea medicamentelor facandu-se peste tot in acelasi fel. Programul poate fi utilizat si de catre cei care nu au cunostinte in domeniul calculatoarelor datorita simplitatii acestuia in legatura cu manipularea datelor. In continuare va prezentam manualul de utilizare al programului. Lansarea aplicatiei va activa un meniu ce contine toate facilitatile pe care vi le poate oferi programul. Accesul la comenzi se face prin click pe unul din butoanele: Aprovizionare, Vanzare medicamente, Consultare, Indexare, Despre program sau Iesire.

Dupa afisarea meniului, este necesara introducerea datelor despre medicamentele intrate in stoc. Pentru aceasta se va selecta primul buton al meniului principal si anume Aprovizionare, dupa care se va selecta una din cele trei variante puse la dispozitie: Medicamente fara reteta, Medicamente compensate sau Medicamente gratuite. La selectarea oricarei optiuni se va activa o fereastra in care utilizatorul trebuie sa introduca datele despre medicamente: Denumire, cantitate, pret si cateva indicatii ale medicamentului respectiv. Dupa introducerea tuturor datelor despre medicament se va apasa butonul Adauga si datele vor fi imediat salvate in baza de date corespunzatoare fiecarui tip de medicament. In caz contrar, se va apasa butonul Renunta si se va reveni la meniul principal, unde utilizatorul poate selecta orice alta optiune a programului. Imaginea celor trei formulare de introducere, specifice tipului de medicament, este aratata mai jos.
11

Pentru vanzarea medicamentelor din stocul farmaciei, se va selecta cel de-al doilea buton din meniul principal, Vanzare medicamente apoi se va selecta una din cele trei optiuni si se vor introduce datele despre client.

12

Al treilea buton din meniul principal, si anume Consultare, pune la dispozitia utilizatorului toate datele necesare despre stocul de medicamente existent in farmacie, situatia vanzarilor si o lista cu medicamentele vandute, canditatea si valoarea lor. Pentru vizualizarea stocului de medicamente existent se va apasa butonul Consultare apoi se vor selecta optiunile Medicamente-Stoc si tipul de medicament la care se doreste sa se vizualizeze stocul. Imaginea vizualizarii stocului de medicamente fara reteta este prezentata mai jos.

Pentru vizualizarea vanzarilor din farmacie se va selecta butonul Consultare din meniul principal apoi se va apasa pe butonul Vanzari. Se va activa o fereastra in care sunt trecute CNP-urile clientilor ce au cumparat medicamente din farmacie, denumirea medicamentului cumparat si valoarea totala a incasarii. Programul realizeaza si valoarea totala a incasarilor, afisata in partea de jos a listei.

13

Daca se doreste o vizualizare mai amanuntita a medicamentelor vandute, se va selecta butonul Consultare apoi se vor apasa butoanele Medicamente si Vandute din meniurile secundare activare prin apasarea butonului precedent. Imaginea este prezentata mai jos. Diferenta dintre Vanzari si Vandute este data de continutul ferestrelor: la Situatie vanzari se afiseaza datele despre client si medicamentele cumparate de acesta iar in Medicamente vandute se afiseaza doar datele specifice medicamentelor. Diferenta se poate observa si in imaginea de mai jos, comparata cu cea precedenta.

Pentru indexarea datelor din tabele se va apasa cel de-al patrulea buton din meniul principal, apoi se va alege una din cele doua optiuni oferite de program: Indexare Dupa denumire sau indexare Dupa pret. In imaginea de mai jos este prezentata o indexare a medicamentelor dupa denumire. Se activeaza o fereastra in care i se cere utilizatorului sa aleaga tipul medicamentelor pe care doreste sa le indexeze. Selectarea tipului de medicamente se realizeaza prin click pe una din optiuni, urmand sa se afiseze lista cu medicamentele indexate.

14

La indexarea dupa pret se va afisa o fereastra asemanatoare, in care i se cere utilizatorului sa aleaga una din optiuni, apoi se afiseaza lista cu medicamentele indexate. O scurta prezentare a programului poate fi vizualizata prin apasarea butonului Despre program din meniul principal. Iesirea din aplicatie se poate face in doua moduri: iesirea in Visual FoxPro, ce permine mentinerea mediului de lucru deschis si iesirea in Windows, ce are ca efect inchiderea tuturor aplicatiilor (implicit a mediului de lucru Visual FoxPro) si revenirea la desktop.

15

5. ANEXA
Forma Medicamente compensate:
USE med_compensate d1=ALLTRIM(thisform.text1.Text) c1=VAL(thisform.text2.Text) p1=VAL(thisform.text3.Text) i1=ALLTRIM(thisform.text4.Text) v=0 v=c1*p1 APPEND BLANK replace denumire WITH d1 replace cantitate WITH c1 replace pret WITH p1 replace valoare WITH v replace indicatii WITH i1 USE RELEASE WINDOWS

Forma Medicamente gratuite:


USE med_gratuite d2=ALLTRIM(thisform.text1.Text) c2=VAL(thisform.text2.Text) p2=VAL(thisform.text3.Text) i2=ALLTRIM(thisform.text4.Text) v=0 v=c2*p2 APPEND BLANK replace denumire WITH d2 replace cantitate WITH c2 replace pret WITH p2 replace valoare WITH v replace indicatii WITH i2 USE RELEASE WINDOWS

Forma Medicamente fara reteta:


USE med_liber d=ALLTRIM(thisform.text1.Text) c=VAL(thisform.text2.Text) p=VAL(thisform.text3.Text) i=ALLTRIM(thisform.text4.Text) v=0 v=c*p APPEND BLANK replace denumire WITH d replace cantitate WITH c replace pret WITH p replace valoare WITH v replace indicatii WITH i USE RELEASE WINDOWS

16

Forma Medicamente compensate - vanzari:


CLOSE TABLES cn=VAL(thisform.text1.Text) m=ALLTRIM(thisform.text2.Text) c=VAL(thisform.text3.text) thisform.command3.Visible=.F. v=0 p=0 verifica=1 USE med_compensate SCAN IF denumire=m THEN p=pret IF cantitate=0 then MESSAGEBOX('Stoc 0 pentru acest medicament. Va rugam aprovizionati farmacia!',0) verifica=0 RELEASE WINDOWS ELSE IF c>cantitate then MESSAGEBOX('Stoc insuficient pentru acest medicament. Introduceti o cantitate mai mica sau vizualizati stocul existent!',0) verifica=0 thisform.command3.Visible=.T. ELSE replace cantitate WITH cantitate-c ENDIF ENDIF ENDIF ENDSCAN USE CLOSE TABLES USE clienti APPEND BLANK replace cnp WITH cn replace medicament WITH m replace cantitate WITH c replace valoare WITH 0 IF verifica=0 THEN DELETE PACK ENDIF IF verifica<>0 THEN MESSAGEBOX('Tranzactie efectuata cu succes!',0) RELEASE WINDOWS ENDIF USE CLOSE TABLES

Forma Medicamente gratuite - vanzari


CLOSE TABLES cn=VAL(thisform.text1.Text) m=ALLTRIM(thisform.text2.Text) c=VAL(thisform.text3.text) thisform.command3.Visible=.F. v=0 p=0 verifica=1 USE med_gratuite

17

SCAN IF denumire=m THEN p=pret IF cantitate=0 then MESSAGEBOX('Stoc 0 pentru acest medicament. Va rugam aprovizionati farmacia!',0) verifica=0 RELEASE WINDOWS ELSE IF c>cantitate then MESSAGEBOX('Stoc insuficient pentru acest medicament. Introduceti o cantitate mai mica sau vizualizati stocul existent!',0) verifica=0 thisform.command3.Visible=.T. ELSE replace cantitate WITH cantitate-c ENDIF ENDIF ENDIF ENDSCAN USE CLOSE TABLES USE clienti APPEND BLANK replace cnp WITH cn replace medicament WITH m replace cantitate WITH c replace valoare WITH 0 IF verifica=0 THEN DELETE PACK ENDIF IF verifica<>0 THEN MESSAGEBOX('Tranzactie efectuata cu succes!',0) RELEASE WINDOWS ENDIF USE CLOSE TABLES

Forma Medicamente fara reteta - vanzari:


CLOSE TABLES cn=VAL(thisform.text1.Text) m=ALLTRIM(thisform.text2.Text) c=VAL(thisform.text3.text) thisform.command3.Visible=.F. v=0 p=0 verifica=1 USE med_liber SCAN IF denumire=m THEN p=pret IF cantitate=0 then MESSAGEBOX('Stoc 0 pentru acest medicament. Va rugam aprovizionati farmacia!',0) verifica=0 RELEASE WINDOWS ELSE IF c>cantitate then MESSAGEBOX('Stoc insuficient pentru acest medicament. Introduceti o cantitate mai mica sau vizualizati stocul existent!',0)

18

verifica=0 thisform.command3.Visible=.T. ELSE replace cantitate WITH cantitate-c ENDIF ENDIF ENDIF ENDSCAN USE CLOSE TABLES v=p*c USE clienti APPEND BLANK replace cnp WITH cn replace medicament WITH m replace cantitate WITH c replace valoare WITH v IF verifica=0 THEN DELETE PACK ENDIF IF verifica<>0 THEN MESSAGEBOX('Tranzactie efectuata cu succes!',0) RELEASE WINDOWS ENDIF USE CLOSE TABLES

Programul index_den_c.prg (pentru indexarea dupa nume program utilizat in formele de indexare, la selectarea optiunii de indexare):
CLEAR DEFINE WINDOW w FROM 2,10 TO 40,110 TITLE 'Indexare medicamente gratuite dupa denumire' CLOSE FLOAT ACTIVATE WINDOW w USE med_gratuite SORT TO tmp ON denumire ASCENDING USE tmp LIST denumire, cantitate, pret, valoare, indicatii CLOSE TABLES ALL ERASE tmp.dbf

Programul index_den_g.prg (pentru indexarea dupa nume program utilizat in formele de indexare, la selectarea optiunii de indexare):
CLEAR DEFINE WINDOW w FROM 2,10 TO 40,110 TITLE 'Indexare medicamente gratuite dupa denumire' CLOSE FLOAT ACTIVATE WINDOW w USE med_gratuite SORT TO tmp ON denumire ASCENDING USE tmp LIST denumire, cantitate, pret, valoare, indicatii CLOSE TABLES ALL ERASE tmp.dbf

19

Programul index_den_liber.prg (pentru indexarea dupa nume program utilizat in formele de indexare, la selectarea optiunii de indexare):
CLEAR DEFINE WINDOW w FROM 2,10 TO 40,110 TITLE 'Indexare medicamente fara reteta dupa denumire' CLOSE FLOAT ACTIVATE WINDOW w USE med_liber SORT TO tmp ON denumire ASCENDING USE tmp LIST denumire, cantitate, pret, valoare, indicatii CLOSE TABLES ALL ERASE tmp.dbf

Programul index_pret_c.prg (pentru indexarea dupa pret program utilizat in formele de indexare, la selectarea optiunii de indexare):
CLEAR DEFINE WINDOW w FROM 2,10 TO 40,110 TITLE 'Indexare medicamente compensate dupa pret' CLOSE FLOAT ACTIVATE WINDOW w USE med_compensate SORT TO tmp ON pret ASCENDING USE tmp LIST denumire, cantitate, pret, valoare, indicatii CLOSE TABLES ALL ERASE tmp.dbf

Programul index_pret_g.prg (pentru indexarea dupa pret program utilizat in formele de indexare, la selectarea optiunii de indexare):
CLEAR DEFINE WINDOW w FROM 2,10 TO 40,110 TITLE 'Indexare medicamente gratuite dupa pret' CLOSE FLOAT ACTIVATE WINDOW w USE med_gratuite SORT TO tmp ON pret ASCENDING USE tmp LIST denumire, cantitate, pret, valoare, indicatii CLOSE TABLES ALL ERASE tmp.dbf

Programul index_pret_liber.prg (pentru indexarea dupa pret program utilizat in formele de indexare, la selectarea optiunii de indexare):
CLEAR DEFINE WINDOW w FROM 2,10 TO 40,110 TITLE 'Indexare medicamente fara reteta dupa pret' CLOSE FLOAT ACTIVATE WINDOW w USE med_liber SORT TO tmp ON pret ASCENDING USE tmp LIST denumire, cantitate, pret, valoare, indicatii CLOSE TABLES ALL ERASE tmp.dbf

20

Programul med_vandute.prg
CLOSE TABLES USE clienti DEFINE WINDOW w FROM 2,10 TO 40,60 TITLE 'Medicamente vandute' CLOSE FLOAT ACTIVATE WINDOW w LIST medicament, cantitate, valoare SUM(valoare) USE CLOSE TABLES

Programul vanzari.prg
CLOSE TABLES USE clienti DEFINE WINDOW w FROM 2,10 TO 40,70 TITLE 'Situatie vanzari' CLOSE FLOAT ACTIVATE WINDOW w LIST cnp, medicament, valoare SUM(valoare) USE CLOSE TABLES

Programul stoc_compensate.prg
CLOSE TABLES USE med_compensate DEFINE WINDOW w FROM 2,10 TO 40,100 TITLE 'Stoc medicamente compensate' CLOSE FLOAT ACTIVATE WINDOW w c=cantitate p=pret replace valoare WITH c*p BROWSE IN WINDOW w USE CLOSE TABLES

Programul stoc_gratuite.prg
CLOSE TABLES USE med_gratuite DEFINE WINDOW w FROM 2,10 TO 40,100 TITLE 'Stoc medicamente gratuite' CLOSE FLOAT ACTIVATE WINDOW w c=cantitate p=pret replace valoare WITH c*p BROWSE IN WINDOW w USE CLOSE TABLES

Programul stoc_liber.prg
CLOSE TABLES USE med_liber DEFINE WINDOW w FROM 2,10 TO 40,100 TITLE 'Stoc medicamente fara reteta' CLOSE FLOAT ACTIVATE WINDOW w c=cantitate p=pret replace valoare WITH c*p

21

BROWSE IN WINDOW w USE CLOSE TABLES

Programul despre.prg
DEFINE WINDOW w FROM 2,1 TO 25,60 TITLE 'Despre program' CLOSE FLOAT ACTIVATE WINDOW w @2,1 Say 'Programul este destinat tuturor farmaciilor care doresc' @3,1 say 'sa-si tina evidenta medicamentelor si a ofertelor' @4,1 say 'acestora printr-o metoda simpla, sigura si performanta.' @6,1 say 'Programul salveaza in trei baze de date denumirile ' @7,1 say 'medicamentelor, cantitatea existenta in stoc, pretul,' @8,1 say 'valoarea si cateva indicatii despre acesta. ' @9,1 say 'Medicamentele sunt impartite in trei grupe: fara reteta' @10,1 say 'compensate si gratuite, fiecare dintre ele avand cate' @11,1 say 'o baza de date. Salvarea datelor si manipularea lor' @12,1 say 'este foarte simpla utilizandu-se diferitele formulare' @13,1 say 'din cadrul aplicatiei.' @17,25 say'Autor: FILIP ADRIANA MIHAELA' @18,25 say'Clasa: a XII-a A' @19,25 say'Liceul Teoretic NICOLAE IORGA'

22