Lucrare pentru obtinerea Atestatului la Informatica
"Administrator Spital"
Cuprins
Introducere
Cerinte Hardware si Software
Descrierea proiectului
Bibliografie
Introducere
În aceasta lucrare s-a dorit prezentarea efectiva a modului de utilizare a bazelor de date si a unui limbaj ce se preteaza bazelor de date. Astfel, proiectul ales se refera la un domeniu public în care pâna nu demult s-a lucrat numai pe baza unor hârtii si dosare, dar în care în ultima vreme a început sa intre masiv tehnica de ultima ora, si anume calculatoarele si aparatele specializate asistate de calculator.
A început infuzia de tehnica de calcul, dar nu s-au pus înca la punct programele specializate pe diverse domenii de activitate.
Astfel, lucrarea ce va fi prezentata în continuare doreste sa acopere segmentul de lucru în spital, 14214t1920o segment ce se ocupa de partea administrativa a unui spital, mai exact de biroul de internare la sectia de cardiologie a Spitalului Judetean Buzau. Programul, cu foarte putine modificari, poate fi utilizat în orice sectie a oricaui spital din orice localitate si judet.
Pentru a pune la punct acest program a fost consultata efectiv o fisa de internare, au fost consultate cadrele medicale cu studii superioare si cu studii medii.
Astfel a fost elaborat un program ce poate fi folosit si de persoane care nu cunosc nimic despre calculatoare, doar modul în care se porneste si se opreste un astfel de calculator si doar semnificatia unor taste.
Programul principal, ce poarta numele de spital.prg este atasat pe discheta alaturata.
Cerinte Hardware si Software
Procesor : 486, 66 Mhz
Memorie RAM : 16 Mb
HDD : 30 Mb
Sistem : Windows 3.1/9x/Me/2k/Xp
Software : Microsoft FoxPro 2.6
Descriere proiect
În partea de început a programului am relizat setarile asupra documentului cu ajutorul comenzilor <set>.
Apoi am definit interfata de lucru, foarte usor de lucrat cu aceasta, în care am definit meniul, pad-urile si bar-urile. Toate optiunile sunt scrise în limba romana si pot fi accesate cu ajutorul sagetilor si al tastei <Enter> :
define menu main
define pad padx of main prompt ' ' at < linie, coloana>
define popup pop from < linie, coloana> to < linie, coloana>
define bar x of pop prompt ' '
Apoi am specificat ce actiune sa se execute la activarea uneia din optiunile meniului:
on select pad padx of main do procx
on select bar x of pop do procx
În continuare am descris comenzile de activare, dezactivare, stergere a meniului si pad-urilor:
activate menu main
deactivate menu main
release menu main extended
activate popup pop
Interfata descrisa în aceasta parte a programului este pe întreaga pagina de ecran, optiunile pad-urilor sunt separate, iar pentru fiecare pad în parte am dimensionat marimea bar-urilor astfel încât sa nu se intre cu prompter-ul în zona afectata altui pad. Optiunile de tip bar ale fiecarui pad sunt afisate una sub alta, iar în momentul selectarii unei optiuni se trece la o afisare video-invers.
În continuare am definit si activat doua ferestre, fiecare având câte un rol bine definit: în prima se descriu date generale despre un pacient, iar în cea de a doua date personale ale pacientului respectiv si date despre starea sanatatii, data internarii, medicul la care a fost internat si unele rubrici ce nu vor fi completate la internare, ci ele se refera la perioada post-spitalizare: starea sanatatii la externare, numar zile de spitalizare, numar zile de concediu medical, data externarii, eventualul transfer la o alta sectie din cadrul spitalului.
Lucrul cel mai dificil în aceasta parte a programului a fost asezarea în pagina si dimensionarea rubricilor de completat, aceasta pentru ca se face completarea exact ca într-o fisa de internare. Rubricile sunt asezate cât mai uniform pe pagina de lucru, trecerea de la un ecran la celalalt si de la o fereastra la alta facându-se automat dupa completarea ultimei rubrici din fereastra anterioara. Ferestrele au un titlu care sugereaza ce anume trebuie completat în zona respectiva. La sfârsit se dezactiveaza fiecare fereastra în parte, iar pe ecran apare meniul din care putem alege o alta optiune:
define window < numele_ferestrei> from < linie, coloana> to
< linie, coloana> title ' titlul_ferestrei '
activate window < numele_ferestrei >
deactivate window < numele_ferestrei >
Citirea informatiilor de la tastatura se realizeaza cu ajutorul comenzilor say - get, spatiul alocat fiind egal cu dimensiunea câmpurilor din baza de date atasata programului. La sfârsit exista comanda read, comanda fara de care nu poate functiona comanda say - get.
@ < linie, coloana> say ' mesaj ' get < veriabila de memorie>
default (o valoare numerica sau un numar de spatii
în functie de tipul câmpului din baza de date)
Dupa citirea datelor de la tastatura se completeaza baza de date cu aceste informatii prin intermediul comenzii replace:
append blank
replace < numele câmpului din baza de date> with < valoarea
retinuta în variabila de memorie corespunzatoare>
Procedura de creare a bazei de date este o procedura standard. Am încercat sa creez mai multe baze de date mai mici, legate între ele prin comanda set relation, dar am întâmpinat greutati la completarea acestora, nereusind sa deschid si sa închid în timp util unele din aceste baze de date. Asa ca am recurs la o rezolvare mai simplista, dar în care nu pot lista normal baza de date, aceasta având foarte multe câmpuri, media dimensiunilor câmpurilor fiind de aproximativ 10 caractere.
create table < numele bazei de date >
Aceasta procedura va trebui sa fie rulata o singura data. Daca mai este aleasa acesta optiune, baza de date va fi creata din nou si atunci toate datele retinute în aceasta se vor pierde iremediabil. Astfel, în programul principal, dupa rularea procedurii de creare este bine sa dezactivam optiunea de creare, optiune ce va fi pusa ca un comentariu:
* define bar 1 of prompt ' Creare '
Urmeaza o procedura de modificare a câmpurilor ce nu puteau fi completate la internare, si anume: data_externarii, starea la externare, numarul de zile de spitalizare, numarul de zile de concediu de odihna, sectia unde va fi transferat pacientul (daca va fi transferat la vreo alta sectie), diagnosticul la externare. Cautarea unui pacient în baza de date se face dupa nume, initiala, prenume si data internarii. Am decis sa fac cautarea dupa toate aceste câmpuri din urmatoarele motive:
1) Este destul de improbabil sa existe mai multi pacienti cu acelasi nume, acelasi prenume si aceeasi initiala si care sa se fi internat în aceasta sectie în aceeasi zi, luna si an.
2) În program va exista o optiune de listare a tuturor pacientilor, lista ce ne va putea furniza în mod corect data internarii unui pacient în cazul în care acesta nu mai stie exact ziua internarii.
3) Un anumit pacient se poate interna la aceesi sectie de mai multe ori într-un an, dar pe noi ne intereseaza ultima internare a acestuia.
În cazul în care am gresit numele, prenumele, initiala sau data pentru un pacient, calculatorul ne va afisa un mesaj de informare cu privire la faptul ca acel pacient nu exista în evidentele sectiei respective.
Daca îl gaseste, noi vom putea modifica informatiile mentionate mai sus, având afisate totodata si valorile anterioare ale câmpurilor respective.
Pentru usurarea modului de lucru a personalului nespecializat în utilizarea calculatorului, la cautare nu se va tine cont de faptul ca numele este scris cu majuscule sau cu minuscule sau combinatie din aceste doua tipuri de caractere:
locate for ( upper( nume ) upper( num )) . and.
( upper( init) upper( vinit )) . and.
( upper( prenume) upper( pren)) .and.
( internare dat)
În baza de date se vor produce modificarile conform cu doleantele noaste tot prin intermediul comenzii replace.
Avem si o optiune de stergere din baza de date a anumitor pacienti din diverse motive. Ca si în cazul modificarii, cautarea unui pacient se face dupa nume, initiala, prenume si data internarii.
În cazul în care nu se gaseste acel pacient se afiseaza un mesaj, iar în cazul gasirii acestuia suntem pozitionati în baza de date chiar pe înregistrarea pe care o cautam. Initial se face o stergere logica, iar pentru o stergere fizica definitiva mai suntem interogati o data. În cazul în care ne-am razgândit sa mai stergem înregistrarea respectiva, marcajul pentru stergere este anulat.
locate for ( upper( nume ) upper( num )) . and.
( upper( init) upper( vinit )) . and.
( upper( prenume) upper( pren)) .and.
( internare dat)
delete
@ 7,1 say 'sunteti sigur?(d/n)' get q default space(1)
read
if upper(q) 'D'
pack
else recall
endif
În continuare exista trei optiuni de afisare a unor date din baza de date si anume:
1) afisarea tuturor persoanelor care au fost internate în sectia de cardiologie de-a lungul unui an întreg;
2) afisarea tuturor persoanelor care au fost internate începând cu o anumita data ce se citeste de la tastatura;
3) afisarea tuturor persoanelor ce se afla internate la un medic al carui nume se citaste de la tastatura (numele medicului este de fapt format din inisialele numelui si prenumelui acestuia);
4) afisarea tuturor persoanelor internate în sectie într-o anumita zi, data ce se citeste de asemenea de la tastatura.
Observatie: Se afiseaza numai informatiile referitoare la nume, initiala si prenume.
În cazul în care o persoana nu se gaseste în baza de date apare o fereastra în care utilizatorul este informat de acest lucru.
Atât în cazul acestor afisari, ca si în cazul procedurilor anterioare, la terminarea efectuarii cererii apare în coltul din dreapta sus o fereastra care contine informatii despre actiunea efectuata. Ceea ce este afisat pe ecran dispare dupa apasarea oricarei taste de pe claviatura.
wait window 'mesajul ce va aparea pe monitor'
use spital
@ 1,1 say 'Introduceti data: ' get vd default / /
read
display nume, init, prenume for internare vd
show menu all
Observatie: Programul poate suferi îmbunatatiri, si anume: se poate lua o variabila tip contor prin care se vor afisa informatii numai despre un anumit numar de persoane, sau informatiile se vor afisa ecran cu ecran (numai câte 20), trecerea la un nou ecran facându-se în momentul apasarii unei taste.
Al doilea pad contine numai doua optiuni si anume afisarea tuturor informatiilor despre o anumita persoana pe monitor sau la imprimanta.
Am reconstruit ferestrele din prima parte a programului în aceeasi maniera, dar spre deosebire de acelea, în care datele le introduceam de la tastatura si cu acestea completam baza de date, de aceasta data, pe structura de macheta, am preluat datele din baza de date si le-am organizat pe ecran într-o afisare cât mai estetica si cât mai clara.
Cautarea în baza de date se face, ca în toate celelalte proceduri, dupa câmpurile nume, prenume, initiala si data internarii. De asemenea, nu conteaza cu ce fel de caractere introducem valorile dupa care se face cautarea; am folosit functia upper(), de câte ori a fost necesar, astfel încât sa nu avem probleme.
Afisarea se face în doua etape:
1) informatii din registre proprii ale sectiei si registre generale ale spitalului; numele judetului, localitatea, numele spitalului si sectia sunt aceleasi la orice pacient, ele ne mai fiind introduse deloc nici în baza de date. În plus sunt preluate anumite informatii reprezentând anumite valori numerice bine determinate, precum si data la care a fost completata fisa de internare.
2) informatii generale despre pacient, ca si informatii despre starea sanatatii acestuia, atât la data internarii, cât si la data externarii. Afisarea acestor lucruri se face cu ajutorul unui contor "i" - pentru linii, contor care se mareste de câte ori este necesar.
În cazul în care nu este gasit un anumit pacient, calculatorul afiseaza un mesaj în acest sens, iar la apasarea unei taste se revine la imaginea initiala, si anume la afisarea meniului principal.
În afisarea la imprimanta se face apel tot la procedura de afisare pe ecran, dar cu specificatia de directionare a imaginilor catre perifericul de iesire specificat, instalat si activ în acel moment.
Daca imprimanta nu este conectata la LPT1 sau nu este alimentata cu curent electric, afisarea se va face pe monitor, concomitent cu afisarea unui mesaj corespunzator.
set device to printer
set printer on
Este recomandat ca înainte de a opta pentru afisare la imprimanta sa se verifice starea acesteia. Exista cazuri în care buffer-ul imprimantei se poate umple cu mesaje care nu au putut fi tiparite (memoria unei imprimante este cu mult mai mica decât memoria interna a unui calculator) si exista pericolul blocarii sistemului de calcul si implicit a programului.
Observatie: Acest program poate functiona atât sub sistemul MS-DOS cât si sub sistemul WINDOWS. În schimb, afisarea la imprimanta functioneaza numai sub sistemul MS-DOS. Pentru o îmbunatatire a performantelor programului, codul sursa al acestuia trebuie rescris în Visual FoxPro si folosite comenzile specifice acestuia pentru afisare la imprimanta.
În momentul încetarii afisarii la imprimanta sunt refacute setarile anterioare:
set printer off
set device to screen
În cazul în care se doreste, afisarea datelor poate fi directionata catre un fisier text:
set device to file < numele fisierului >
Când se doreste parasirea programului se apleleaza optiunea de la pad-ul al trei-lea si anume iesirea. Procedura care descrie acest lucru este:
defi pad pad3 of main prompt ' Iesire ' at 2,30
on sele pad pad3 of main return
if pad() ' Iesire '
deactivate menu main
release menu main extended
endif
Bibliografie
FoxPro 2.5 2.6 pentru DOS, Gabriel Dima, Mihai Dima, editura Teora
|