Sunteți pe pagina 1din 290

CUPRINS

Capitolul 1 Organizarea datelor


n baze de date . . . . . . . . . . .5

Capitolul 6 Vizualizarea, cutarea


i sortarea datelor . . . . . . . . .59

Informaii i date. Organizarea datelor . . . . . . .5


Operaii generale asupra unei structuri
de date . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
Evoluia metodelor de organizare
a datelor . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Baze de date i sisteme de gestiune
a datelor . . . . . . . . . . . . . . . . . . . . . . . . . .13

Vizualizarea coninutului unei tabele . . . . . . . .59


Vizualizarea structurii unei tabele . . . . . . . . . .60
Cutare secvenial i poziionare
n baza de date . . . . . . . . . . . . . . . . . . . . .60
Sortarea i duplicarea unei tabele . . . . . . . . .61

Capitolul 2 Baze de date relaionale . . . .22


Concepte specifice bazelor de date
relaionale . . . . . . . . . . . . . . . . . . . . . . . . .22
Proiectarea bazelor de date relaionale:
forme normale . . . . . . . . . . . . . . . . . . . . . .27

Capitolul 3 Introducere n mediul


FoxPro . . . . . . . . . . . . . . . . . .33
FoxPro: prezentare general . . . . . . . . . . . . . .33
Interfaa produsului Visual FoxPro . . . . . . . . .35
Configurarea mediului FoxPro . . . . . . . . . . . .36
Moduri de lucru . . . . . . . . . . . . . . . . . . . . . . . .36
Gestiunea fiierelor . . . . . . . . . . . . . . . . . . . . .40

Capitolul 4 Tipuri de date n Visual FoxPro


i operaii specifice . . . . . . . .43
Tipul numeric . . . . . . . . . . . . . . . . . . . . . . . . . .43
Tipul ir de caractere . . . . . . . . . . . . . . . . . . . .44
Tipul dat calendaristic . . . . . . . . . . . . . . . . .45
Tipul logic . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Gestiunea variabilelor . . . . . . . . . . . . . . . . . . .46
Comenzi de lucru cu variabilele . . . . . . . . . . .48
Macrosubstituie i expresii nume . . . . . . . . . .49

Capitolul 7 Actualizarea datelor . . . . . . . .65


Adugarea articolelor . . . . . . . . . . . . . . . . . . .65
tergerea articolelor . . . . . . . . . . . . . . . . . . . .66
Modificarea sau corectarea datelor . . . . . . . . .67
Actualizarea interactiv a tabelelor . . . . . . . . .67
Lucrul cu cmpurile de tip Memo . . . . . . . . . .73
Lucrul cu cmpurile de tip General . . . . . . . . .75

Capitolul 8 Indexare i cutare rapid . . .79


Indexarea tabelelor . . . . . . . . . . . . . . . . . . . . .79
Cutarea rapid i poziionarea
n tabela indexat . . . . . . . . . . . . . . . . . . .82

Capitolul 9 Relaionarea tabelelor . . . . . .85


Tipuri de relaii . . . . . . . . . . . . . . . . . . . . . . . . .85
Crearea i tergerea unei relaii . . . . . . . . . . .85

Capitolul 10 Transferul de date


ntre tabele Visual FoxPro
i alte structuri . . . . . . . . . . . .90
Importarea i exportarea datelor
din i ctre tablouri de memorie . . . . . . . .90
Importarea i exportarea datelor
din i ctre alte tipuri de fiiere . . . . . . . . .92

Capitolul 5 Crearea tabelelor . . . . . . . . . .52

Capitolul 11 Prelucrri statistice


i financiare . . . . . . . . . . . . . .94

Definirea structurii unui tabel . . . . . . . . . . . . . .52


Modificarea structurii conceptuale
a unui tabel . . . . . . . . . . . . . . . . . . . . . . . .54
Editarea cmpurilor unui tabel . . . . . . . . . . . .54
Popularea (ncrcarea) tabelului cu date . . . .55
Deschiderea i nchiderea unui tabel . . . . . . .55
Filtrarea structurii sau selectarea cmpurilor .56
Filtrarea articolelor . . . . . . . . . . . . . . . . . . . . . .56

Recapitulare . . . . . . . . . . . . . . . . . . . . . . . .99

Numrarea articolelor: COUNT . . . . . . . . . . . .94


nsumarea valorilor unor cmpuri: SUM . . . . .94
Calculul mediei aritmetice: AVERAGE . . . . . .95
Diverse calcule statistice
i financiare: CALCULATE . . . . . . . . . . . .95
Totalizarea valorilor: TOTAL . . . . . . . . . . . . . .96
Funcii financiare . . . . . . . . . . . . . . . . . . . . . . .96

Cuprins

Capitolul 12 Programarea clasic


n FoxPro . . . . . . . . . . . . . . .106
Structura alternativ i comanda IF...ENDIF . .106
Structura selectiv i comanda
DO CASE...ENDCASE . . . . . . . . . . . . . .106
Structura repetitiv i comanda
DO WHILE...ENDDO . . . . . . . . . . . . . . . .106
Structura repetitiv i comanda
SCAN...ENDSCAN . . . . . . . . . . . . . . . . .107
Structura repetitiv i comanda
FOR...ENDFOR . . . . . . . . . . . . . . . . . . . .107
Ieiri forate: LOOP i EXIT . . . . . . . . . . . . . .107
Proceduri utilizator . . . . . . . . . . . . . . . . . . . . .111
Funcii utilizator . . . . . . . . . . . . . . . . . . . . . . .111
Activitatea de depanare a programelor . . . . .116
Sfaturi pentru depistarea i eliminarea
erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . .117
Strategii de depanare . . . . . . . . . . . . . . . . . .119
Utilizarea instrumentului Debugger . . . . . . . .119

Capitolul 13 Operaii cu baze de date


n Visual FoxPro . . . . . . . . . .124
Descrierea operaiilor cu baze de date
prin comenzi . . . . . . . . . . . . . . . . . . . . . .124
Gestiunea interactiv a bazei de date.
Database Designer . . . . . . . . . . . . . . . . .125
Crearea rapid a unei baze de date cu
Database Wizard . . . . . . . . . . . . . . . . . . .126
Deschiderea i activarea
unei baze de date . . . . . . . . . . . . . . . . . .127
Operaii asupra unei tabele incluse
n baza de date . . . . . . . . . . . . . . . . . . . .128
Proiectarea interactiv a tabelei
prin Table Designer . . . . . . . . . . . . . . . . .131
Fixarea relaiilor persistente ntre tabelele
unei baze de date . . . . . . . . . . . . . . . . . .135
Proceduri stocate . . . . . . . . . . . . . . . . . . . . .138
Declanatoare . . . . . . . . . . . . . . . . . . . . . . . .139
Proiectarea regulilor de integritate
a bazei de date . . . . . . . . . . . . . . . . . . . .140

Capitolul 14 Interogarea bazelor de date . .145


Definirea interogrilor prin comanda
SELECT . . . . . . . . . . . . . . . . . . . . . . . . . .145
Proiectarea vizual a interogrilor . . . . . . . . .149
Proiectarea fiierelor View . . . . . . . . . . . . . . .158

Capitolul 15 Comunicarea aplicaiei Visual


FoxPro cu alte aplicaii . . . .166
Proiectarea fiierelor vedere cu date
la distan . . . . . . . . . . . . . . . . . . . . . . . .166
Proiectarea rapid a vederilor
cu Remote View Wizard . . . . . . . . . . . . .167

Informatic Manual pentru clasa a XII-a

Proiectarea paginilor web pentru vizualizarea


datelor pe internet . . . . . . . . . . . . . . . . . .168
Proiectarea paginilor de cutare
pe Internet . . . . . . . . . . . . . . . . . . . . . . . .169
Proiectarea i transmiterea documentelor
prin e-mail. Utilitarul Mail Merge Wizard .170
Recapitulare . . . . . . . . . . . . . . . . . . . . . . .172

Capitolul 16 Elemente de programare


orientat spre obiecte . . . . .175
Proprietile definitorii ale claselor . . . . . . . .177
Comenzile FoxPro necesare
programrii obiectelor . . . . . . . . . . . . . . .177

Capitolul 17 Proiectarea formularelor . . .181


Generatorul de formulare (Form Designer) . .182
Proiectarea unui formular prin Quick Form . .187
Proiectarea vizual a obiectelor de interfa . .190
Proiectarea interfeei folosind Form Wizard . .212

Capitolul 18 Afiarea datelor sub form


de rapoarte . . . . . . . . . . . . . .217
Rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . .217
Etichete . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229
Grafice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231

Capitolul 19 Proiectarea meniurilor . . . . .234


Generatorul de meniuri Menu Builder . . . . . .234

Capitolul 20Proiecte i aplicaii . . . . . . . .238


Conducerea aplicaiei printr-un
program monitor . . . . . . . . . . . . . . . . . . .238
Organizarea aplicaiei sub form
de proiecte. Project Builder . . . . . . . . . . .239
Generarea aplicaiilor executabile
cu Project Manager . . . . . . . . . . . . . . . . .241
Realizarea dischetelor de distribuie . . . . . . .243

Capitolul 21 Dezvoltarea profesional


n domeniul IT . . . . . . . . . . .246
Capitolul 22 Teme opionale . . . . . . . . . .248
Protecia bazelor de date . . . . . . . . . . . . . . .248
Tehnici avansate de gestiune a structurii
conceptuale a unei tabele . . . . . . . . . . . .251

Capitolul 23 Dezvoltarea unei aplicaii


informatice . . . . . . . . . . . . . .255
Aspecte teoretice . . . . . . . . . . . . . . . . . . . . . .255
Proiectul final . . . . . . . . . . . . . . . . . . . . . . . . .261
Studii de caz . . . . . . . . . . . . . . . . . . . . . . .266
Rspunsuri, comentarii, indicaii . . . . . . .279

Capitolul

Organizarea datelor
n baze de date





Informaii i date, organizarea datelor


Operaii generale asupra unei structuri de date
Evoluia metodelor i tehnicilor de organizare a datelor
Baze de date i SGBD

INFORMAIA, alturi de energie i materii prime, joac un rol esenial n producia


fizic de bunuri materiale i constituie esena tuturor activitilor intelectuale, de la
conducere, educaie, art, via colectiv i individual, la ntreinerea patrimoniului de
cunotine al umanitii.

Informaii i date. Organizarea datelor


Activitatea uman, n cele mai diverse forme ale sale, a fost ntotdeauna
caracterizat prin entiti faptice, exprimate fie sub form de valori numerice, fie ca
percepii sau observaii nenumerice fcute de fiinele umane sau de maini. Aceste
entiti faptice independente i neevaluate sunt numite DATE. Datele obinute n cadrul
activitilor productive, de conducere, de cercetare, educaionale, artistice constituie un
material informaional brut care poate fi evaluat, ordonat i prelucrat, avnd n vedere
diferite obiective. n urma acestui proces de transformare a datelor se obin
INFORMAII, care reprezint o interpretare a datelor n raport cu anumite situaii
particulare sau cu nelegerea de ctre mintea uman n general. Informaiile constituie
baza raionamentelor, experimentrilor imaginate de mintea uman n scopul obinerii
de noi CUNOTINE.

Figura 1-1: Transformarea datelor n informaii, apoi n cunotine

Producerea informaiilor susine anumite aciuni umane cu finalitate practic, crend


totodat un fond informaional utilizabil pentru generarea de noi informaii i cunotine.
INFORMAIA este definit ca o comunicare susceptibil de a produce cunotine,
are un caracter semantic i de noutate, de aport la cantitatea de cunotine a celui care
o primete. Informaia se refer la obiecte, persoane, procese, fenomene, locuri,
situaii, condiii etc. O informaie trebuie s fie util, precis, complet, fr prea multe
amnunte care s fac mesajul greu de interpretat, s soseasc la timp pentru luarea
unor decizii. Eschil zicea c nelept nu este cel ce tie lucruri multe ci lucruri utile.
O alt trstur fundamental a informaiei este subiectivitatea sa. Ceea ce este o
informaie pentru o persoan poate s nu nsemne nimic pentru alta.
Capitolul 1 Organizarea datelor n baze de date

DATELE constituie materializarea, reprezentarea simbolic a informaiilor (prin


semne, litere, cifre) ntr-o form convenional (scris, vorbit, luminoas, semne
grafice, desene) convenabil unei comunicri. Datele descriu ce s-a ntmplat prin
numr sau cuvnt, nu furnizeaz vreo judecat sau interpretare i nici baza pentru
aciune. Datele reprezint materia prim din care, dup o serie de operaiuni
efectuate de ctre oameni sau echipamente, se obin informaii.
Informaia reprezint semnificaia ce poate fi desprins dintr-un ansamblu de date,
pe baza asociaiilor dintre acestea, este deci partea utilizabil dintr-un ansamblu de
date. Informaiile furnizeaz rspunsuri la ntrebri de genul cine, unde, cnd.
Datele sunt exprimate prin atribut i valoare. Exemple: produs=imprimant,
cantitate=20, preul=150Lei. Informaia se exprim prin propoziii. Exemplu: S-au
vndut 20 imprimante la preul de 150 Lei.
Informaia presupune nelegerea relaiilor dintre date
Pentru obinerea informaiilor se desfoar mai multe activiti, grupate sub
numele de PROCES INFORMAIONAL, dintre care amintim:
 identificarea, culegerea sau nregistrarea datelor;
 pregtirea datelor cuprinde ansamblul activitilor de filtrare, codificare,
clasificare, conversie, selectare;
 prelucrarea datelor;
 memorarea datelor pe diverse medii n vederea refolosirii lor;
 comunicarea sau raportarea informaiilor ctre utilizatorii lor.
SISTEMUL INFORMATIC este definit ca ansamblul mijloacelor (tehnice, umane,
financiare) i al metodelor specifice prin care se asigur desfurarea procesului
informaional, avnd ca obiectiv obinerea informaiilor necesare conducerii unei activiti.
COLECIA DE DATE reprezint un ansamblu de date care se refer la acelai
fenomen, obiect sau situaie.
|ntre componentele unei colecii de date, ca i ntre colecii, pot fi identificate sau,
eventual, pot fi introduse relaii care s determine pe mulimea respectiv o anumit
structur, adic un anumit mod de ordonare care s faciliteze prelucrarea. Relaiile pot
fi unidirecionale sau bidirecionale. O relaie unidirecional poate determina obinerea
unei valori sau a mai multora din componenta legat plecnd numai de la o
component (printe); o relaie bidirecional determin obinerea acelorai date sau
valori plecnd de la ambele colecii. Componentele structurii pot fi individualizate i
selectate prin poziia pe care o ocup n structur, n raport cu ordinea specificat sau,
mai comod, prin numele componentei.
O colecie de date pe care s-au definit anumite relaii i creia i este specific un
anumit mecanism de selecie i identificare a componentelor constituie o STRUCTUR
DE DATE. Mecanismul de selecie al unei structuri de date este implementat de obicei
n programele de prelucrare a datelor respective, la nivelul sistemului de operare, al
sistemului de gestiune sau al programelor aplicative.
Exist dou mari tipuri de acces:
Accesul secvenial presupune parcurgerea tuturor datelor situate naintea datei
care trebuie prelucrat;
Accesul direct presupune un mecanism prin care se poate determina direct
poziia datei necesare prelucrrii.
6

Informatic Manual pentru clasa a XII-a

Operaii generale asupra unei structuri de date

creare (memorarea pe suport a datelor);


consultare (acces la elementele structurii pentru prelucrarea valorilor);
actualizare (inserare, tergere sau corecie a valorilor);
copiere (duplicarea structurii, n general pe un alt suport);
ventilare (desfacerea structurii n dou sau mai multe structuri);
fuzionare (combinarea a dou sau mai multe structuri);
sortarea (aranjarea elementelor structurii dup anumite criterii).

Componentele unei structuri de date pot s fie de acelai tip (structura este
omogen) sau de tipuri diferite (structur neomogen).
Operaiile (operatorii) aplicate asupra unei structuri de date pot s-i afecteze valorile
i/sau structura. Dac o structur de date i modific structura n timp, este numit
dinamic. Spre deosebire de acestea, structurile statice au acelai numr de
componente i n aceeai ordine pe tot parcursul existenei lor.
Definirea structurilor de date necesare ntr-o aplicaie este o activitate complex,
care condiioneaz n mare msur necesarul de memorie, viteza de prelucrare i
uneori chiar efortul de proiectare i implementare. Pentru realizarea ei trebuie s se
in seama de o serie de factori, dintre care:
volumul datelor;
operaiile de prelucrare i frecvena lor (o atenie deosebit trebuie acordat
actualizrii: dac este frecvent, trebuie aleas o structur la care performanele
accesului nu scad esenial datorit modificrilor structurii);
indicele de activitate pe operaii se definete ca raport ntre numrul de
componente ale structurii utilizate ntr-o operaie i numrul de componente
explorate pentru aceasta. El determin timpul de acces. Dac indicele este mare
(peste 0,8), atunci accesul poate fi secvenial. Valorile mici ale indicelui implic
un acces direct.
durata de via a structurii;
utilizarea raional a spaiului de memorie (comprimare, blocare, segmentare,
combinarea diferitelor forme de reprezentare);
complexitatea programrii;
asigurarea integritii datelor (alegerea structurii care permite protecia mpotriva
distrugerilor accidentale i posibilitatea refacerii datelor.

Capitolul 1 Organizarea datelor n baze de date

sarcini de laborator
1.

Catalogul clasei conine mai multe date.

a) Identificai aceste date i facei o list a atributelor lor. Separai datele care sunt
elementare i datele care sunt calculate. Pentru fiecare scriei natura valorilor
posibile (numere sau iruri de caractere).
b) Ce informaii pot fi cerute de conducerea colii, de prini, de elevi?
c) Identificai diferite structuri care s faciliteze obinerea rapid a informaiilor.
Care sunt prelucrrile?
De exemplu, o colecie ar putea s rein numele elevului, numele prinilor i
adresa de acas, o alt colecie ar putea s rein numrul matricol al elevului, totalul
absenelor motivate i nemotivate, o colecie ar putea s conin notele (data cnd a
fost luat, elevul, obiectul) etc.
2.

Accesai site-ul www.olimpiade.ro i facei o list a datelor memorate acolo. Ce


informaii s-ar putea obine?
3.

Cutai pe Internet si accesai un site pentru o companie de transporturi aeriene.


Facei o list cu activitile desfurate, datele memorate, informaiile posibile obinute
din prelucrarea acestor date
4.

Cutai i vizitai site-ul unei librrii on-line. Cum sunt prezentate crile? Este
dat i o imagine a coperii sau a autorilor? Care sunt informaiile pe care le putei
obine din pagina web?
5.

Facei un mic proiect, cercetnd activitatea bibliotecarului colii. Luai interviuri,


cercetai documentele cu care lucreaz bibliotecarul, observai direct ce se ntmpl la
bibliotec.
a. Primul raport va detalia activitile, cine le desfoar, cnd, cu ce periodicitate,
ce decizii se iau.
b. Al doilea raport conine un inventar al documentelor, fiecare cu numele su,
dac este standard sau nu, dac este primit din exterior sau staionar sau trimis
mai departe ctre alte organizaii, cte exemplare conine, cine verific i
semneaz, ct timp necesit redactarea documentului.
c. Realizai machetele tuturor documentelor.
d. Identificai datele de pe documente i tipurile lor. Facei o gril informaional,
plasnd pe linii atributul i pe coloane numele documentului. La intersecie
marcai cu X prezena datei n documentul respectiv. Separai datele de informaii!
e. Analizai rapoartele, rspunznd la ntrebri de felul: toate activitile se
desfoar automatizat/manual? Exist date redundante? Care sunt prelucrrile
datelor (sortri, calcule, comparaii etc.)?
8

Informatic Manual pentru clasa a XII-a

Evoluia metodelor de organizare a datelor


Organizarea datelor a parcurs mai multe etape, pornind de la fiiere, apoi sisteme
de fiiere, pn la baze de date.

Fiiere pe aplicaii
Primele forme de organizare a datelor au fost fiierele secveniale pe band
magnetic. Odat cu folosirea suportului adresabil discul magnetic au aprut
fiierele cu acces direct (indexate, selective). Gestiunea fiierelor era asigurat printrun sistem specializat, numit SGF (sistem de gestiune a fiierelor) existent n orice
sistem de operare. A fost o soluie specific anilor 1960-1970, dar mai este ntlnit i
astzi n cazul aplicaiilor economice care folosesc limbaje clasice precum Cobol.
Fiierul este o structur omogen din punctul de vedere al coninutului i al
prelucrrii. Organizarea n fiiere are un nivel fizic i un nivel logic. Fiierul este format
din nregistrri fizice care formeaz unitatea de transfer ntre memoria extern i cea
intern. O nregistrare fizic poate conine mai multe nregistrri logice (formate din
cmpuri), care reflect punctul de vedere al utilizatorului.
Programele utilizatorilor trebuie s conin n mod explicit referiri la suportul, forma
de organizare i modul de acces al fiierului de lucru.
Altfel spus, datele aveau sens i puteau fi accesate numai din aplicaiile-program.

Figura 1-2: Exemplu de acces la date

Prezena elementelor de descriere a datelor din fiiere n programele de aplicaii


este un mare dezavantaj, pentru c orice modificare a structurii i organizrii datelor pe
suportul fizic conduce la modificarea tuturor aplicaiilor care le folosesc.

Capitolul 1 Organizarea datelor n baze de date

Pe de alt parte, n anii 1960-1970 fiecare aplicaie informatic dintr-o instituie era
proiectat ntr-o manier individualist i viza automatizarea unei anumite activiti. n
vederea creterii vitezei de rspuns, aplicaia i aducea n fiierele proprii toate datele
de care avea nevoie, ignornd faptul c, poate, aceleai date erau culese, selectate i
prelucrate i de alte aplicaii. Apare fenomenul de redundan a datelor i efectele sale
nedorite: creterea nejustificat a costurilor de ntreinere a fiierelor de date i, mai
ales, pericolul inconsistenei datelor (datorit omiterii actualizrii datelor n toate locurile
unde apreau).

Sisteme de fiiere
Pasul urmtor n istoricul organizrilor datelor a fost gestiunea comun a fiierelor
de ctre toate aplicaiile informatice care aveau legturi funcionale bine stabilite ntre
ele. Apare structurarea datelor n fiiere integrate sau sisteme de fiiere.
Trecerea la sistemele de fiiere nu a rezolvat, ns, o problem foarte important:
problema independenei programelor de aplicaii de modul de organizare a datelor. n
organizrile tradiionale pe fiiere, cunotinele despre structura datelor i tehnicile de
accesare a acestora erau incluse n programe. Odat creat fiierul, toate procedurile de
prelucrare conineau aceste caracteristici. Modificarea structurii fiierului (adugarea
unor cmpuri sau eliminarea altora) conducea la modificarea poriunilor descriptive ale
programelor, iar modificarea modului de acces (secvenial, direct) impunea revizuirea
coninutului procedural al programelor. O cerin nou se rezolva doar printr-un
program nou sau prin modificarea unuia existent. Dac lum n consideraie faptul c
aproape zilnic apreau cerine noi, efortul de meninere a sistemului de fiiere
operaional era imens. Soluia a fost detaarea din programul de aplicaii a descrierii
fiierelor i a legturilor dintre ele. Astfel au aprut primele baze de date.

Primele baze de date; apariia SGBD-urilor


O baz de date a fost creat ca o colecie unic, un ansamblu de date unitar organizat
i structurat, la care s aib acces diveri utilizatori, nu neaprat programatori, pentru
operaii curente de adugare de valori, corecii, extrageri de date, asemeni operaiilor
dintr-o banc obinuit. Declararea structurii logice a datelor se face n exteriorul
aplicaiei, asigurnd independena programelor fa de structura datelor. Apare acum i
oportunitatea unui sistem standard de proceduri de gestionare a bazei, numit Sistem de
gestiune a bazei de date (prescurtat, SGBD). Sarcinile acestui SGBD erau legate de
definirea structurii datelor i a criteriilor de acces, oferirea unor msuri de confidenialitate a datelor, oferirea posibilitii accesului la date att pentru programatori ct i
pentru utilizatorii obinuii, neinformaticieni etc. Rmne un punct slab ns faptul c
metoda de acces la date trebuia inclus n programele aplicaiei.

Folosirea dicionarului bazei de date; apariia funciei de administrator


La primele SGBD-uri utilizatorul trebuia s cunoasc, pe lng datele necesare
aplicailor proprii, i descrierea tuturor datelor din baza de date, lucru care, pe lng
greutatea n utilizare, nsemna i o lips de confidenialitate a bazei de date.
n etapa ulterioar, preocuparea principal a fost de a degaja utilizatorul de sarcina
de a cunoate ntreaga structur a bazei de date, mai ales c bazele de date au devenit
foarte complexe. S-a ajuns astfel la o gestiune independent a structurii generale a
bazei de date, denumit nivel virtual de organizare a datelor. Acest lucru este realizat
prin intermediul unui fiier de descriere global a bazei de date, denumit, n general,
dicionar de date (sau repertoar de date sau catalog al sistemului). Lucrul cu baza de
10

Informatic Manual pentru clasa a XII-a

date se deruleaz exclusiv prin intermediul acestui dicionar care conine informaii
privitoare la structurarea datelor i restriciile ndeplinite de acestea. Astfel apare
noiunea de model conceptual al bazei de date.
Specific acestei etape este i apariia funciei de administrator al bazei de date
i conceperea unor proceduri speciale de securitate.

Apariia modelului relaional de baze de date


O adevrat revoluie n gestionarea bazelor de date a provocat-o modelarea
structurii conceptuale a datelor sub forma tabelelor (numite relaii), la sfritul anilor
1970 de ctre Codd, un matematician de la Centrul de cercetri din San Jose
(California) al firmei IBM. Structura propus este independent de tipul echipamentului
i software-ului de sistem pe care este implementat baza de date. Modelul relaional
marcheaz nceputul unei noi generaii de SGBD-uri, la care utilizatorul nu se mai
preocup de descrierea cilor de acces, ca la generaia precedent, aceast sarcin
fiind pus n seama sistemului.

Folosirea bazelor de date n reelele de calculatoare


Odat cu rspndirea reelelor de calculatoare au fost dezvoltate diverse tehnici de
comunicaie, de partajare a datelor, de utilizare n comun a diferitelor componente software
i hardware. Dar, pentru reelele mari, cu sute sau mii de tranzacii, exist inconvenientul
duratei mari de rspuns din cauza, pe de o parte, a vitezelor relativ mici ale liniilor de
comunicaie ntre calculatoare, iar pe de alt parte a volumului mare de date de pe aceste
linii. Modelul client-server este o tehnologie care rezolv o serie de probleme aprute n
utilizarea reelelor de calculatoare. Presupune folosirea sistemelor informatice distribuite i
reprezint un model n care mai multe programe autonome comunic ntre ele.
Aprute la grania dintre dou domenii aparent opuse din punctul de vedere al
procesrii datelor (baze de date i reele de calculatoare), bazele de date distribuite
se definesc ca o colecie de baze de date interconectate logic, distribuite ntr-o reea
de calculatoare.
Transformarea unui sistem centralizat de baze de date ntr-un sistem distribuit
const n scindarea bazei de date n seciuni corespunztoare i repartizarea acestora
n nodurile reelei. Alocarea partiiilor n nodurile unei reele ine cont de prima regul a
distribuirii datelor, aceea c datele vor fi distribuite numai din motive de vitez.
Plasarea datelor se face pe staia n care producerea i utilizarea este mai frecvent,
astfel nct s se minimizeze transportul de date prin reea.
Utilizatorul nu trebuie s cunoasc modul de partiionare i distribuire a datelor,
deoarece lucreaz n acelai mod ca i cu o baz centralizat. Singurul lucru pe care
l cunoate este schema conceptual a bazei de date.
Sistemele moderne de gestiune a bazelor de date conin elemente de prelucrare
paralel. Acest concept servete la reunirea n cadrul aceleiai exploatri a
prelucrrilor de rutin (interogri mai simple, dar numeroase) cu prelucrrile
decizionale (interogri complexe ale unui volum important de date). Un SGBD trebuie
s realizeze mprirea unei interogri complexe n module executate pe mai multe
procesoare i s dirijeze interogrile simple ctre procesorul de care sunt legate
discurile, purtnd informaia necesar interogrii respective.
Obiectivele sunt creterea performanelor SGBD-urilor, att pentru activitatea
tranzacional ct i pentru cea decizional n exploatarea bazelor de dimensiuni mari
(de ordinul terrabaiilor).

Capitolul 1 Organizarea datelor n baze de date

11

Integrarea tehnologiei bazelor de date cu tehnologiile multimedia


O alt tehnologie care a afectat, firesc, i domeniul bazelor de date a fost tehnologia
multimedia. Conceptul tradiional de multimedia se referea la capacitatea noilor
suporturi de a stoca informaia de natur divers: sunet, imagine, text, animaie. Bazele
de date au integrat i dezvoltat tehnologia multimedia i ofer acum utilizatorilor
posibiliti de stocare i de manevrare a informaiei de toate tipurile.

Integrarea tehnologiei bazelor de date cu programarea


orientat spre obiecte
n programare, modelul orientat spre obiecte a fost propus ca model natural de structurare
a datelor complexe, fiind, incontestabil, cel mai popular model din ultimii ani. La sfritul anilor
1980 s-a nscut ideea de a importa acest model n bazele de date. Sistemele de baze de date
orientate spre obiecte s-au nscut din convergena a dou tehnologii: pe de o parte
funcionalitile au fost importate din tehnologia bazelor de date relaionale (interogare
declarativ, tranzacii, meninerea restriciilor de integritate etc.), iar pe de alt parte, modelul
de date a fost adoptat din tehnologia limbajelor de programare orientate spre obiecte.

Integrarea tehnologiei bazelor de date n sistemele inteligente


Bazele de date deductive s-au dezvoltat datorit interesului manifestat pentru logica
predicatelor ca metod de introducere a raionamentelor artificiale n sistemele
informatice. Pentru c logica predicatelor este o metod puternic de reprezentare a
cunoaterii, iar mecanismul inferenial bazat pe calculul predicatelor este suficient
pentru multe aplicaii inteligente, implementarea acestui mecanism n sistemele clasice
de gestiune a bazelor de date a condus la apariia bazelor de date deductive,
denumite baze de cunotine.
Bazele de date inteligente reprezint o nou tehnologie pentru managementul
informaiei, rezultat din integrarea tehnologiilor convenionale pentru baze de date cu
cele mai recente tehnologii referitoare la programarea orientat spre obiecte, sistemele
expert, sistemele hipermedia i regsirea on-line a informaiei.

sarcini de laborator
1.

Cutai pe Internet personaliti n domeniul tehnologiei informaiei i realizai o


prezentare PowerPoint despre una dintre ele (cine este, ce contribuie i-a adus, unde
lucreaz, de ce credei c acea persoan a devenit lider i nu s-a mulumit cu un simplu
job, ce caliti, interese, aptitudini personale are, de ce ai ales-o).
2.

Scriei un eseu Ce tiu despre mine! urmrind rspunsuri la ntrebri de felul urmtor:

 Ce mi place s fac? Ce meserie a face dac a fi pltit i ce a face chiar gratis


pentru c mi place foarte mult?
 Ce tiu s fac? La ce sunt bun?
 Unde m voi duce dup terminarea scolii? Ce carier mi se pare cea mai
probabil, judecnd dup calitile mele?
12

Informatic Manual pentru clasa a XII-a

3.

Cutai pe Internet job-uri in domeniul IT i scriei cerintele fiecrui job (studii,


calificri, trsturi de personalitate cerute). Aflai ce salariu are un administator de baze
de date. Dar un analist-programator n domeniul bazelor de date? Aflai ce alte
avantaje v ofer lucrul n domeniul IT!
4.

Grupai-v cte 3 elevi. Alegeti un domeniu de activitate (sntate, nvmnt,


transport, comer, industrie, agricultur etc.) Cutai pe Internet un site din domeniul
respectiv. Descriei informaiile pe care le prezint site-ul i imaginai-v cui ar servi, la
baza cror decizii ar sta. Identificai informaiile calculate i forma lor de prezentare:
tabele, grafice. Identificai datele pe baza crora s-au obinut informaiile.
Prezentai colegilor rezultatul cercetrii voastre.

Baze de date i sisteme de gestiune a datelor


Baza de date (BD) poate fi definit ca un ansamblu de date interconectate,
mpreun cu descrierea lor, care rspunde calitilor de centralizare, coordonare,
integrare i difuzare a informaiilor i care asigur satisfacerea tuturor necesitilor de
prelucrare ale tuturor utilizatorilor dintr-un sistem.
Sistemul de gestiune a bazei de date (SGBD) este un pachet de programe ce
permite utilizatorilor s interacioneze cu o baz de date, asigurnd acesteia urmtoarele caracteristici:
1. Independena datelor fa de programul care le gestioneaz. Baza de date este
descris independent de programele utilizator. Descrierea vizeaz tipurile de
date i legturile dintre ele i formeaz dicionarul datelor, memorat odat cu
baza de date.
2. Nivel redus de redundan. O anumit dat se afl ntr-un singur loc.
3. Securitatea datelor nseamn protecia mpotriva accesului neautorizat, n
vederea extragerii sau distrugerii unor date cu caracter confidenial.
4. Integritatea datelor nseamn protecia mpotriva defeciunilor hardware sau
software.
5. Transparena presupune existena unor faciliti de utilizare a datelor fr ca
utilizatorii s cunoasc ntreaga complexitate a bazei de date.
6. Limbajele de descriere i manipulare a datelor de nivel foarte nalt nseamn
existena unor limbaje performante de regsire a datelor, care permit exprimarea
sub forma unor conversaii a unor criterii ct mai complexe de selectare a informaiei
i indicrii unor reguli ct mai generale de editare a informaiilor solicitate.
7. Faciliti multiutilizator nseamn c datele pot fi accesate i chiar gestionate din
diferite noduri ale reelei de calculatoare de ctre diferii utilizatori.
8. Accesibilitatea. Gestiunea datelor organizate n baze de date a fost preocuparea
multor specialiti software, ajungndu-se la oferirea unor pachete software care
permit gestiunea unor date foarte complexe n condiii de eficien maxim.

Capitolul 1 Organizarea datelor n baze de date

13

Arhitectura general a unui SGBD


Un SGBD conine o interfa ntre utilizatori i baza de date i asigur, n principal,
crearea, actualizarea i consultarea acesteia, monitorul, procesorul de consultare i
diferite compilatoare pentru limbajele de descriere i de manipulare a datelor.

Monitorul bazei de date este un ansamblu de module care realizeaz interfaa


dintre datele interne coninute n baz i programele sau comenzile de prelucrare.
Principalele sarcini pot fi grupate astfel:
 Interaciunea cu gestionarul de fiiere. Datele sunt stocate pe disc prin
intermediul sistemului de gestiune a fiierelor din sistemul de operare al calculatorului
pe care este instalat SGBD-ul. Monitorul SGBD asigur traducerea instruciunilor
utilizator n instruciuni sistem, fiind responsabil de buna desfurare a operaiilor de
citire-scriere n/din baz.

Figura 1-3: Schema de funcionare a SGBD-ului

 Validarea datelor. Datele stocate trebuie s respecte anumite restricii de


integritate, specificate de administratorul bazei de date. Dup implementarea mecanismului de integritate, monitorul SGBD verific dac toate actualizrile se deruleaz
cu respectarea restriciilor.
 Securitatea datelor. Accesul la date trebuie s fie selectiv i s verifice
drepturile de acces ale fiecrui utilizator.
 Salvare i restaurare. Accidentele ca ntreruperile de curent electric, erorile de
programare, distrugerea suprafeei magnetice pot distruge coerena bazei de date pentru
c datele care erau n curs de prelucrare se pot pierde sau altera. Monitorul are dificila
sarcin de a detecta la timp avariile i de a restaura datele pierdute n forma i coninutul
de dinaintea accidentului, prin intermediul unor proceduri speciale de salvare i restaurare.
 Prelucrri concurente. La o baz de date pot lucra simultan mai muli utilizatori.
Pentru asigurarea coerenei datelor, monitorul supervizeaz accesul i acord niveluri
de prioritate pentru operaii.
14

Informatic Manual pentru clasa a XII-a

Niveluri de structurare a datelor ntr-o baz de date


Obiectivul principal al unei BD este de a separa descrierea datelor i programele de
aplicaii. Pentru a realiza acest obiectiv este necesar o abstractizare a datelor
memorate n BD; astfel s-a ajuns la separarea a 3 niveluri de organizare i percepie a
BD: EXTERN, CONCEPTUAL i INTERN. La fiecare nivel se definete o schem
(model) a bazei de date.
a. Structura virtual sau structura global (extern) nseamn toate datele
necesare tuturor utilizatorilor unei baze de date, n condiii de redundan minim i
controlat a datelor. Descrierea acestui nivel (ansamblu de date, legturi, proprieti)
se face ntr-un limbaj de descriere special al SGBD, numit SCHEM CONCEPTUAL.
Schema este unic, este memorat pe suportul fizic i este invocat la fiecare solicitare
a unui subset de date de ctre un program-aplicaie. Ea este realizat de
administratorul bazei de date.
b. Structura logic sau structura conceptual se refer la forma n care fiecare
utilizator vede datele, n funcie de aplicaia pe care ncearc s o rezolve. Descrierea
structurii logice a datelor se numete SUBSCHEM i este un subset de date necesare
unui program.
c. Structura fizic sau structura intern este nivelul elementar la care se pot
constitui datele; se refer la modul de memorare a datelor pe suportul de stocare.
Acest lucru este interesant pentru un inginer de sistem sau un programator la nivelul
limbajului de asamblare. Fiierele cu date sunt stocate n memoria extern n diferite
structuri interne, care permit utilizarea eficient a suportului i minimizarea timpului de
acces. La acest nivel se numete SCHEM INTERN.

Terminologie i concepte specifice bazelor de date


Elementul fundamental al modelului conceptual este entitatea, ca termen generic
ce desemneaz obiectele similare ca structur, dar care sunt identificabile, deci se pot
deosebi ntre ele prin trsturi specifice. O entitate este format dintr-o mulime de
atribute (caracteristici) care pot defini complet obiectul. Lista atributelor care pot caracteriza o entitate se numete familie de caracteristici sau structur conceptual.
Valorile familiei de caracteristici corespunztoare unui obiect distinct poart numele
de realizare de entitate sau instan. Caracteristica asociaz cte o valoare dintr-un
domeniu fiecrei realizri a respectivei entiti. Domeniile pot fi deci numere ntregi,
iruri etc. Un atribut sau un set de atribute care identific n mod unic fiecare realizare
a unei entiti se numete cheie. Instanele sunt distincte.
Relaiile dintre dou entiti ale unei baze de date pot fi:
1. Relaia 1-1 (unu-la-unu) de exemplu, ntre entitatea Clase i Dirigini: o clas
are un singur diriginte, un diriginte are o singur clas;
2. Relaia 1-n (unu-la-muli) de exemplu, ntre entitatea Clase i Elevi: o clas are
mai muli elevi, un elev aparine unei singure clase;
3. Relaia n-n (muli-la-muli) de exemplu, ntre entitatea Clase i Profesori: o
clas are mai muli profesori, un profesor pred la mai multe clase.

Capitolul 1 Organizarea datelor n baze de date

15

nume entitate

familie de
caracteristici

automobil
serie
1111
1234
1999

culoare
alb
roz
bleu

cheia entitii este


atributul serie

marca
matiz
tico
cielo

pret
200
190
300

realizare de
entitate

domeniul caracteristicii
culoare

Figura 1-4: Exemplu de folosire a terminologiei bazelor de date

O entitate poate fi definit prin liste diferite de caracteristici, n funcie de sistemul


informaional cruia i aparine.1

Observaie. Convenim s folosim urmtoarele simboluri n reprezentarea schemei


conceptuale: elipsa pentru entitate, sgeata dubl pentru relaia N-N, sgeata simpl
pentru relaia 1-N si o linie pentru relaia 1-1.

Modele conceptuale ale bazelor de date


Analiza, proiectarea i implementarea structurii conceptuale a bazei de date sunt
realizate utiliznd un model de date. Un asemenea model reprezint un ansamblu de
instrumente conceptuale care permit descrierea datelor, a relaiilor dintre ele i a
restriciilor la care sunt supuse.
Dac reprezentarea ntr-o baz de date a entitilor este relativ simpl, iar structura
de tip fiier ar fi suficient, modul
de memorare a asocierilor
constituie piatra de ncercare a
eficienei implementrii unei
aplicaii de baze de date, deci
cheia de bolt a unui model
conceptual.
a. Modelul ierarhic
Este considerat primul model
utilizat n structurarea bazelor de
date i presupune ierarhizarea entitilor ntr-o structur de tip arbore,

Figura 1-5: Exemplu de model ierarhic

1 entitatea AUTOMOBIL ce desemneaz un obiect n cadrul sistemului informaional al unei fabrici


de maini poate fi descris prin atributele tip-motor, model, numr-de-portiere, forma-caroseriei etc. Dac ns entitatea AUTOMOBIL se refer la obiectele supuse vnzrii ntr-o unitate
comercial, atunci va trebui s conin: seria-motorului, firma productoare, preul etc.
16

Informatic Manual pentru clasa a XII-a

fiind acceptate doar relaii tip 1-1 sau 1-n (COLI1, nPROFESORI). Dac ns un
profesor pred la mai multe coli, atunci informaiile personale vor fi repetate n
entitatea PROFESORI (vorbim de o anumit redundan a datelor); de asemenea,
modelul are dificulti atunci cnd sunt necesare includeri sau excluderi de entiti sau
de relaii2.
b. Modelul reea
Este un model mai general
de organizare a datelor, n care nu
mai exist restricia ca un nod s
nu aib dect un singur ascendent. Pot fi modelate i relaiile
n-n (COLIn, nPROFESORI).

Figura 1-6: Exemplu de model reea

c. Modelul relaional
n bazele de date relaionale, entitile sunt organizate n tabele simple,
bidimensionale, fr legturi fixe. Relaiile necesare sunt stabilite prin asocierea ntre
ele a unor cmpuri cheie ale fiecrei tabele.
De exemplu, entitile CLASE i ELEVI sunt n legate prin cmpul cod-clas.
Legtura este de tip 1-N.

Figura 1-7: Exemplu de model relaional

Modelul relaional este caracterizat prin unitatea i simplitatea reprezentrilor: totul


se reduce la tabele. De asemenea, modelul pstreaz rigoarea fundamentrii sale
matematice, fapt care a permis definirea unor limbaje de nivel foarte nalt (n special
SQL) care utilizeaz elemente de algebr relaional.
d. Modelul obiect
Datele sunt organizate sub forma unui graf. Un obiect poate avea referine la alte
obiecte, n acelai fel n care structurile sau clasele n C++ pot avea pointeri la alte
structuri sau clase. Spre deosebire ns de SQL, n limbajul de cereri orientat spre
obiecte (OOQ) celelalte tipuri de acces la date se realizeaz utiliznd un limbaj de
programare procedural (C, C++, Java, SmallTalk).
e. Modelul obiect-relaional
Este o abordare recent, care prevede extinderea modelului relaional pentru a
ncorpora elemente de programare orientat spre obiecte, dar cu pstrarea tehnologiilor

Pe baza modelului ierarhic au fost concepute primele SGBD-uri, cel mai reprezentativ fiind IMS
(Information Management System) al firmei IBM.
Capitolul 1 Organizarea datelor n baze de date

17

relaionale. Noul val se numete obiect-relaional. Modelul de date este practic acelai
ca la modelul orientat spre obiecte. Limbajul de interogare declarativ este n esen
acelai OQL, dar pstreaz sintaxa limbajului SQL, cu extensii pentru funciile noi.

Cum se proiecteaz o baz de date?


Problema proiectrii unei structuri eficiente pentru datele necesare unei probleme
este cheia ntregii aplicaii. n general, n aplicaiile de gestiune problema cea mai mare
nu o reprezint implementarea aplicaiei de exploatare a bazei de date, ci proiectarea
unei structuri care s permit accesul ct mai rapid la date i care s sufere de ct mai
puine anomalii. Dup cum se spune i este demonstrat practic, dac se d o
problem, putem rezolva 50% din ea proiectnd structurile adecvate.
Pentru modelarea unei baze de date sunt parcurse cteva faze care se ncadreaz
n metodologia general de dezvoltare a aplicaiilor informatice. Decupm acum numai
aspectele legate de proiectarea bazei de date.
Prima faz este analiza sistemului informaional existent, n care se cerceteaz:
1) informaiile, sursele i destinaiile lor; 2) principalele activiti legate de date:
prelucrri, reguli de calcul, validri, puncte de control, modaliti de arhivare;
3) sistemul de codificare existent etc.
Analiza sistemului informaional existent se poate face prin dou metode. Prima,
cea tradiional, este metoda procedural, n care accentul este pus pe fluxurile de
prelucrri, ntrebarea fundamental fiind: ce date sunt necesare pentru a realiza
sarcina X? Deci se pornete de la studiul cererilor de informaii (informaii de ieire)
i, mergnd pe fluxul invers al prelucrrilor, se determin informaiile de intrare, cele
care trebuie colectate, validate, organizate ntr-o baz de date.
O alt metod de analiz este cea orientat spre obiecte, n care ntrebrile sunt de
felul Ce clase de obiecte distincte pot fi definite pe domeniului aplicaiei? Cum
se comport ele? Ce evenimente pot aprea? Ce aciuni sunt posibile?
A doua faz este proiectarea entitilor i a relaiilor dintre ele; obinem astfel
SCHEMA CONCEPTUAL.
BIBLIOTECA
Analiza unei probleme i proiectarea bazei de date
Ne propunem s ilustrm schematic derularea activitilor de analiz i proiectare
pentru o aplicaie informatic la biblioteca liceului nostru. Pentru analiza sistemului
existent, culegem date i le sistematizm, rspunznd la ntrebri de felul urmtor:
Ce activiti se desfoar la bibliotec? Ce decizii se iau? Pe baza cror
informaii? Ce date pot conduce, imediat sau dup anumite prelucrri, la informaiile
necesare decidenilor? Cine culege aceste date? Care sunt documentele purttoare
de date? Cu ce periodicitate sunt actualizate datele? Ce colecii de date ar fi
necesare? Ce structur trebuie s aib?

Studiu de caz

18

Informatic Manual pentru clasa a XII-a

1. Lista activitilor are ca scop identificarea informaiilor manipulate:


Activitaile desfurate
1. Comanda i achiziionarea unor cri

Periodicitate
Ocazional

2. nregistrarea crilor sosite n bibliotec


ntr-un registru inventar
3. Inventarul crilor existente
4. Scoaterea din inventar a crilor
deteriorate sau pierdute
5. Completarea fielor pentru cititorii noi

La sosirea
crilor
Anual
Ocazional

6. Anularea fielor pentru cititorii


plecai sau penalizai
7. mprumuturi i restituiri
8. Afiarea unor situaii centralizatoare

9. Elaborarea fielor de carte i aranjarea


lor alfabetic pe autori, edituri, domenii etc.
10. Penalizarea cititorilor

Documente
Oferte, comenzi,
facturi
Comanda,
registrul inventar
Registrul inventar
Registrul inventar

La nscrierea
cititorului
Ocazional

Fia cititorului

Zilnic
Anual

Fia cititorului
Fia cititorilor,
registrul inventar,
situaie centralizatoare
Fia crtii

La sosira
crilor
ntrziere,
pierdere

Fia cititorului

Fia cititorului

2. Lista purttorilor de informaii


Cod
RI
FC
FCIT
LI
OFER
C
F
SIT

Documente
Registrul inventar
Fia crii
Fia cititorului
Lista de inventar
Lista ofertelor de carte
Comanda
Factura
Situaia centralizatoare

3. Grila informaional
Documente Informaii RI
Titlu
*
Autor
*
Domeniu
*
Editura
*
Adresa-editurii
Date-pers autori

Periodicitatea de completare
Ocazional, la sosirea/scoaterea crii din inventar
Ocazional, la sosirea unei cri
La nscriere, mprumut/restituire i retragere
Anual; alctuit de comisia de inventar
Ocazional; vine de la edituri
Ocazional; pe baza ofertelor; se trimite la edituri
Ocazional; vine de la editur odat cu livrrile
Anual

FC
*
*
*
*

FCIT

Li
*
*

Of
*
*
*
*
*

C
*
*

F
*
*

*
*

*
*

SIT

*
Capitolul 1 Organizarea datelor n baze de date

19

Documente Informaii RI
Pret-carte
*
Numar inventar
*
Isbn
*
Comision
Data
*
Numar-comanda
Numar-factura
Cnp-cititor
Date-pers cititor
Operaie imprumut/restituire
Numar-restantieri
Numar carti

FC

FCIT

Li

*
*

*
*

Of
*

C
*

F
*

*
*
*

*
*

SIT

*
*
*
*
*

*
*

Proiectarea entitilor
Edituri (nume, adres, alte_informaii); Autori (nume, date-personale, alte_informaii);
Carti (ISBN, titlu, cod-autor, pre, alte-infomaii); Oferte (editura, carte, comision,
alte_informaii); Comenzi (data, numar-comanda, cantitate, alte_informaii); Facturi
(data, numar-factura, nr-buci-trimise, alte_informaii); Inventar (numr-de-inventar,
ISBN, starea, alte_informai); Cititori (cnp, date-personale).
Proiectarea legturilor:
1. O editur poate trimite N oferte; o ofert nu aparine mai multor edituri.
2. O ofert poate constitui baza a N comenzi; o comand nu poate s fac referire
la mai multe oferte.
3. O comand poate fi onorat prin N facturi; o factur nu este trimis dect n
contul unei singure comenzi.
4. O editur poate avea N cri; o carte nu poate aparine mai multor edituri.
5. O carte poate avea mai muli autori; un autor poate scrie N cri.
6. Un cititor poate mprumuta mai multe cri; o carte poate fi citit de mai muli cititori.
Proiectarea SCHEMEI CONCEPTUALE
inventar
edituri

autori

carti
cititori

oferte
Figura 1-8: Schema conceptual a bazei de date

20

Informatic Manual pentru clasa a XII-a

comenzi

facturi

sarcini de laborator
Citii cu atenie urmtoarea problem.
Pe baza dosarului candidatului, alctuit din certificatul de natere (CN), fia de
nscriere (FI) i avizul epidemiologic (AE), secretariatul colii nregistreaz numele,
coala de unde vine elevul, profilul la care se nscrie pentru admitere n registrul de
nscriere (RI) i trece pe dosar numrul de ordine.
Dup terminarea nscrierilor, se completeaz o list alfabetic a candidailor (LA1)
n dou exemplare, dintre care unul este afiat la poarta colii. Se face ordonarea
alfabetic i se repartizeaz candidaii pe sli de examen (trebuie verificate slile i
numrul de locuri din fiecare sal).
Numrul de locuri la fiecare profil al colii este decis de forurile superioare i nscris
pe un document numit plan de colarizare (PS). El este trimis colii naintea nceperii
nscrierilor.
Profesorii din comisie cu numele, gradul didactic, coala unde sunt titulari,
specialitatea etc. sunt nscrii pe documentul lista comisiei de examen (LC) de ctre
inspectorat i trimis secretariatului liceului.
Pe baza listei alfabetice a candidailor (exemplarul rmas la secretariat, nu cel de la
poart) i a listei comisiei se scrie catalogul de examen (C).
Dup susinerea probelor, se trec notele pe catalog, se semneaz catalogul de
comisie i se calculeaz, de ctre secretariat, mediile fiecrui candidat. Se afieaz n
cel mai scurt timp lista alfabetic a candidailor (LA2), lista admiilor (LA) i lista
respinilor (LR). Aceste documente au de fapt acelai format, dar datele sunt diferite!
Comisia ntocmete un proces verbal de examen (PV) n care va trece situaiile
statistice cerute: numr nscrii, numr reuii, cea mai mare medie la matematic etc.
Catalogul, mpreun cu un exemplar din lista alfabetic de dup examen i cu procesul
verbal (primul exemplar) se depun n arhiva colii. Un exemplar din PV merge la
inspectorat. Dosarele candidailor rmn la secretariat.
Secretariatul colii ar dori o aplicaie informatic care s simplifice munca de
eviden a datelor despre candidai, comisii, sli de examen i, desigur, s permit
raportarea informaiilor ctre decideni n formatele i momentele solicitate.
Facei analiza i proiectarea bazei de date necesare secretariatului liceului.

Capitolul 1 Organizarea datelor n baze de date

21

Capitolul

Baze de date relaionale


 Concepte specifice
 Normalizarea tabelelor n bazele de date relaionale

Modelul relaional i datoreaz numele noiunii matematice numit RELAIE. O


relaie poate fi simbolizat astfel: R(a1, a2, a3, ..., an), unde R=numele relaiei, a1, a2,
... sunt numele atributelor sau ale constituenilor. Prin definirea i utilizarea operatorilor
relaionali, teoria relaiilor permite fundamentarea cercetrilor efectuate n domeniul
proiectrii bazelor de date relaionale i al limbajelor relaionale. Algebra relaional
conine, pe lng operatorii de mulimi care trateaz relaiile ca pe mulimi de elemente
cu operaiile cunoscute (reuniunea, intersecia, diferena, produsul cartezian) i
operatorii relaionali specifici (selecia, proiecia, compunerea sau jonciunea).
Fr a intra n fundamentele matematice ale modelului relaional, dorim s ne
familiarizm cu termenii i conceptele specifice acestui model.
O relaie este o tabel; o realizare este o linie sau un tuplu; un atribut este o coloan.

Concepte specifice bazelor de date relaionale


Observai corespondena ntre termenii generali acceptai de teoria bazelor de date
i termenii specifici modelului relaional n figura urmtoare:
nume tabel = nume de entitate
COLI
cod
0111
0231

nume
Liceu Art
Informatic

adresa
Pcii 9
Cminelor 9

nume coloan = caracteristica


sau atributul entitii

antetul tabelului =
familie de caracteristici
anul
1850
1971

linia = realizare de
entitate

coloana = domeniul
caracteristicii

Figura 2-1: Exemplu de entitate ntr-o baz de date relaional

Cheia primar a unei relaii este un atribut (sau grup) care identific fr ambiguitate
fiecare linie a relaiei. Atunci cnd cheia este compus, nici un atribut al su nu poate
fi eliminat fr distrugerea unicitii tuplului.
O cheie strin este un grup de atribute care pune n legtur linii din dou relaii (tabele).
Legtura dintre tabele este stabilit ntre o tabel (numit printe) i o alta (numit
copil) prin intermediul unui cmp comun.
Ca efect, atunci cnd se deplaseaz pointerul de fiier n tabela printe, automat se
poziioneaz i pointerul fiierului copil pe primul articol care are valoarea cheii egal
cu cea din fiierul printe.
22

Informatic Manual pentru clasa a XII-a

Tipuri de relaii
A. Relaia 1-1: Un articol al tabelei printe are legtur cu un singur articol al
tabelei copil sau cu nici unul.

Exemplu

Fie entitile Clase1,1Profesori cu relaia diriginte.

Entitatea Clase are atributele cod,


diriginte
clase
profesori
profil, sala, iar cod este cheia unic de
identificare. Entitatea Profesori are
(Cod, nume,
atributele cod, nume, specialitatea, iar (Cod, profil, sala)
specialitate)
cod este cheia de identificare. Pe baza
acestei relaii putem afla pentru o clas Figura 2-2: Exemplu de relaie 1-1
X care este specializarea profesorului
diriginte i plecnd de la profesorul X putem afla care este profilul clasei la care este
diriginte, dac are aceast atribuie.
n modelul relaional atributele vor fi grupate n dou tabele:
a. tabela CLASE(cod, profil, sala,
CLASE
cod-dirig), unde cod este codul unic al
Cod Profil
sala
Cod-Dirig
clasei i este cheie primar; cod-dirig
12a Info
P2
101
este codul profesorului diriginte i este
12b Stiinte
15
104
cheie extern pentru c face legtura
12c
Litere
P6
102
cu tabela Profesori i este un atribut
unic, deoarece o clas nu poate avea
dect n singur diriginte.
PROFESORI
Cod nume
specialitate
Clasa-Dirig
b. tabela PROFESORI(cod, nume,
specialitate, cls-dirig), unde cod este
100 Popa
Mate
codul unic al profesorului cheie
101 Albu
Biologie
12a
primar, clasa-dirig este codul clasei
102 Barbu
Informatica
12c
la care este diriginte i este cheie
103 Enache Chimie
extern unic pentru c face legtura
104 Anania L.Romana
12b
cu o singur linie din tabela Clase.
B. Relaia 1-n: Unui articol al tabelei printe i corespunde unul sau mai multe
articole ale tabelei copil, iar unui articol al tabelei copil i corespunde un singur
articol n tabela printe.
Fie entitile Clase1, nElevi, cu relaia nva. Entitatea Clase
are atributele cod, profil, sala, iar cod este cheia de identificare unic.
Entitatea Elevi are atributele cod,
nva
elevi
clase
nume, adresa, medie, iar cod este
cheia de identificare. Pe baza acestei
(Cod, nume, medie)
relaii putem afla pentru o clas X care (Cod, profil, sala)
sunt elevii clasei, iar pentru elevul X Figura 2-3: Exemplu de relaie 1-n
putem afla care este profilul i
dirigintele clasei n care nva.

Exemplu

Capitolul 2 Baze de date relaionale

23

Relaia 1-n presupune crearea a dou


CLASE(cod, profil, sala, cod-dirig),
unde cod este codul unic al clasei i
este cheie primar;
ELEVI(cod, nume, media, cod-clasa)
unde cod este codul unic al elevului i
cheie primar, iar cod-clasa este
codul clasei unde nva elevul i este
cheie extern pentru c face legtura
cu tabela Clase. Valorile acestui atribut
nu sunt unice pentru c o clas poate
avea mai muli elevi.

Observaie: n SGBDR nu pot fi


reprezentate relaii de tip n-n. Ele vor fi
sparte n procesul proiectrii bazei de
date n relaii 1-1 i/sau relaii 1-n.

tabele n modelul relaional:


CLASE
Cod Profil
12a Info
12b Stiinte
12c
Litere
ELEVI
Cod Nume
1
Ionescu
2
Albulescu
3
Enachescu
4
Enache
5
Anania

sala
P2
15
P6

Media
7.50
10
8.90
10
8.00

Alte-informatii

Cod-clasa
12b
12c
12c
12a
12b

O schem relaional poate fi definit ca un ansamblu de relaii asociate semantic


prin domeniul lor de definiie i prin anumite restricii de integritate. Schema
relaional este independent n timp.
Pstrarea integritii unei baze de date se realizeaz prin reguli de integritate, ce
sunt memorate odat cu structura bazei i se verific la orice aciune asupra bazei.
Regulile de integritate pot fi:
a. Restriciile cheilor primare se refer la condiia de unicitate i de valori non-nule;
b. Restricii refereniale apar atunci cnd o tabel este n relaie cu alta. De
exemplu, cheia strin nu trebuie s aib valori care nu se regsesc drept valori
ale cheii primare n tabela de referin.
c. Restricii de comportament pot fi impuse asupra valorilor diferitelor atribute sau
asupra ntregii nregistrri.
Procedurile stocate sunt secvene de program care fac parte integrant din baza
de date i sunt ncrcate automat n memorie la deschiderea bazei. Declanatoarele
(triggers) sunt folosite pentru validarea tabelelor, a valorilor unor articole sau atribute
etc. Numele de declanatoare poate fi explicat prin faptul c procedura este invocat
automat cnd un eveniment (adugare, inserare, tergere) modific o tabel.
Principalul lor obiectiv este pstrarea integritii refereniale a bazei de date.

Tabelele virtuale sau vederile (views)


O alt noiune a modelului relaional este imaginea sau tabela virtual sau vederea
(view). O astfel de tabel este o relaie dinamic, fiind definit pe baza unei expresii
relaionale dintre atributele tabelelor reale. Ea nu pstreaz coninutul tabelelor de
baz, ci doar schema. Tabelele virtuale ofer posibilitatea prezentrii numai anumitor
date (securitatea fa de anumii utilizatori). Odat definit, tabela virtual este
memorat n baza de date i poate fi actualizat n sensul actualizrii simultane a
tuturor tabelelor de baz din care este alctuit.

24

Informatic Manual pentru clasa a XII-a

De exemplu, definim o tabel virtual pe tabelele Elevi i Clase, care reine doar
numele elevilor i profilul clasei n care nva.
ELEVI
nume
Albu
Barbu

CLASE
codcl
9a
9b
9c

Codcl
9a
9c

PROFIL_ELEVI
nume
Profil
Albu
Info
Barbu
Bio

Profil
Info
Mate
Bio

Orice modificare a datelor din tabelele surs se reflect automat n tabela virtual.

Studiu de caz

Definirea restriciilor de integritate

Definim n contextul bazei de date SCOALA urmtoarele tabele: CLASE, ELEVI,


PROFESORI, OBIECTE, INCADRARE (codcl=codul clasei, codo=codul obiectului,
codp=codul profesorului, codel=codul elevului).
clase
profil

elevi
codcl

codcl

obiecte
Codel

incadrare
codcl

codo

codo

nume

profesori
codp

codp

nume

spec

Cheile primare (identificatori unici) sunt: clase.codcl; elevi.codel, Obiecte.Codo;


Profesori.codp, Incadrare.(Codp+codo+codp).
Cheile strine sunt: elevi.codcl (refer tabela Clase); incadrare.codo (refer tabela
Obiecte), incadrare.codcl (refer tabela Clase), incadrare.codp (refer tabela Profesori).
Restricii asupra cheilor:
Orice valoare a atributului Codcl trebuie s identifice o linie n Clase.
Orice valoare a atributului Codo trebuie s identifice o linie n Obiecte.
Orice valoare a atributului Codp trebuie s identifice o linie n tabela Profesori.
Orice valoare a grupului de atribute: codcl+codo+codp trebuie s identifice unic
o linie a tabelei Incadrare.
Restricii refereniale:
La adugarea unei linii n tabela Incadrare se va verifica dac valoarea
atributului Codp exist n tabela Profesori, dac valoarea atributului Codo exist
n tabela Obiecte i dac valoarea atributului Codcl exist n tabela Clase.
La tergerea unei linii din tabela Obiecte se vor terge liniile cu valoarea cheii
Codo egal cu valoarea cheii primare terse.
La tergerea unei linii din tabela Clase se vor terge liniile cu valoarea cheii
Codcl egal cu valoarea cheii primare terse.
La tergerea unei linii din tabela Profesori se vor terge liniile cu valoarea cheii
Codp egal cu valoarea cheii primare terse.
Capitolul 2 Baze de date relaionale

25

Restricii de comportament particulare:


La nivel de atribut: atributul Codcl va avea pe primele dou poziii cifre pentru a
marca anul colar, iar al treilea caracter este o liter mic: Exemple: 10a, 9c, 12d.
La nivel de linie: dac codcl este 9a-9z profilul aparine mulimii info, mate,
bio, altfel profilul este numai info.

sarcini de laborator
Fie urmtoarea schem conceptual a unei baze de date care reine informaii
despre discurile, piesele, autorii i cntreii de romane i muzic popular pe plan
naional i internaional.
I.

Proiectai SCHEMA RELATIONAL.

II.

Verificai dac putei obine informaiile urmtoare i identificai subschemele


implicate n procesul de obinere a informaiilor dorite.
1.
2.
3.
4.
5.

Care sunt muzicienii autori de romane?


Care sunt formaiile americane country?
Cte discuri a scos vestita cntrea Sofronia Pdureanca?
Ct timp dureaz albumul D jalei i d dor?
Care sunt piesele muzicale de pe primul disc al Casei de Discuri Trepduul
de dup Revoluie?
6. Ci membri fac parte din formaia Fluieraul?
7. Care sunt romanele mai lungi de o jumtate or?

Figura 2-4: Schema conceptual a bazei de date


26

Informatic Manual pentru clasa a XII-a

Proiectarea bazelor de date relaionale: forme normale


Proiectarea unei baze de date relaionale ncepe prin definirea entitilor i a
relaiilor dintre ele. Apoi se definesc tabelele care vor memora att datele din entiti,
ct i relaiile dintre acestea. Atenia proiectanilor trebuie ndreptat ctre construirea
unor tabele care s evite anomaliile de actualizare i dificultile de prelucrare.
O tabel de date este corect formulat deci este o relaie conform restriciilor
impuse de teoria relaiilor a lui A.F. Codd dac:
1. n cadrul unei baze de date are nume distinct;
2. fiecare celul a relaiei conine o singur valoare;
3. fiecare atribut are un nume distinct;
4. orice valoare a unui atribut face parte din domeniul pe care a fost definit acesta;
5. ordinea dispunerii atributelor n relaie nu prezint importan;
6. orice linie este distinct de celelalte;
7. ordinea liniilor nu influeneaz coninutul informaional al relaiei.

Exemplu
com
006
007

S presupunem c tabelul urmtor reine codurile produselor


solicitate la o comand, precum i numrul, data i valoarea comenzii:

data
01.03.98
01.09.98

furn
f1
f1

adr
Bc
Bc

cod1
a23
c33

cod2
b66

cod3
c33

cod4

cant
10
12

val
12980
12000

Verificm respectarea definiiei anterioare: nu sunt linii identice, nu sunt valori de


tipuri diferite n coloane, cheia este atributul Com (numr comand). Dar:
a) dac exist comenzi cu mai mult de 4 produse?
b) dac sunt comandate cantiti diferite din toate produsele?
c) unde este plasat preul fiecrui produs?
d) prelucrri de tipul valoarea total a comenzilor pentru produsul b66 necesit
verificarea tuturor coloanelor i nsumarea rezultatelor pentru ntreaga baz de
date, lucru care conduce la un timp mare de rspuns.
Deci se impune eliminarea cmpurilor care se repet i astfel se ajunge la prima
form normal:
comanda
006
006
006
007

data
01.03.98
01.03.98
01.03.98
01.09.98

furn
f1
f1
f1
f1

adr
Bc
Bc
Bc
Bc

codprod
a23
b66
c33
c33

cant
10
10
10
12

pret
100
200
150
150

valoare
12980
12980
12980
12000

n aceast tabel, cheia este compus din atributele (comanda + codprod).


Prima form normal este identificat cu noiunea de relaie
Dar nu toate relaiile sunt egal acceptabile, deoarece anumite relaii pot conduce la
dificulti de actualizare sau de manevrare.
Capitolul 2 Baze de date relaionale

27

Operaia de spargere a relaiei care manifest anomalii n alte relaii poart


numele de normalizare.
Procesul de normalizare are la baz noiunea de dependen funcional.
Dependena funcional este o legtur ntre dou atribute, n care al doilea poate fi
determinat dac primul este cunoscut. Exemplu: cunoscnd denumirea unui furnizor
putem s-i aflm adresa. Spunem c atributul adr este dependent funcional de
atributul furn i vom nota (furn)>>>(adr).
S discutm ns dependenele funcionale legate de cheia compus a relaiei. ntre
(numrul comenzii + codprodus) i valoare exist o dependen funcional. Dndu-se o
comand i un produs, putem gsi valoarea. Dar ntrebarea este a cui valoare o aflm?
A comenzii ntregi sau a produsului pe respectiva comand? Dac este valoarea
comenzii, observm c atributul depinde numai de o parte a cheii (comanda)>>>(valoare).
O relaie se afl n a doua form normal dac toate atributele non-cheie sunt
dependente de ntreaga cheie.
Deci problema apare cnd cheia este compus din mai multe atribute. O relaie care
are chei simple este n a doua form normal.
Observm c atributele non-cheie nu sunt dependente de ntreaga cheie.
Normalizm i mprim tabela n dou alte tabele.
COMENZI
PRODUSE
comanda data
furn adr valoare
comanda
codprod cant pret
006
01.03.98 f1
Bc
12980
006
a23
10
100
007
01.09.98 f2
Gl
12000
006
b66
10
200
006
c33
10
150
007
c33
12
150
S urmrim exemplul n continuare. Cheia relaiei la tabela COMENZI este
comanda. tiind numrul de comand, putem afla numele furnizorului. Deci
(comanda)>>>(furn). tiind furnizorul, putem determina adresa (furn)>>>(adr). Pare c
adresa depinde funcional prin tranzitivitate de comand, ceea ce nu este adevrat.
O relaie se afl n a treia form normal dac se afl n forma a doua i nu
prezint dependene tranzitive.
Vom normaliza n continuare i obinem alte dou tabele:
FURNIZORI
COMENZI
codfurn
adr
comanda
data
furn
val
f1
Bc
006
01.03.98
f1
12980
f2
Gl
007
01.09.98
f2
12000

S recapitulm:
Prima form normal este identificat cu definiia unei relaii.
A doua form normal impune ca toate atributele non-cheie s fie dependente de
ntreaga cheie.
A treia form normal presupune inexistena dependenelor tranzitive.
n concluzie, prin normalizare spectrul anomaliilor de care sufer o relaie se
restrnge foarte mult. Toate aceste forme normale sunt folositoare, dar niciuna nu
garanteaz c au fost eliminate toate anomaliile!
28

Informatic Manual pentru clasa a XII-a

Studiu de caz

Analiza structurii i depistarea anomaliilor

Pentru proiectul BIBLIOTECA au fost create urmtoarele variante de structur a


bazei de date, legate de desfurarea operaiilor curente de mprumut i restituire a
crilor. Analizai cerinele de actualizare a datelor i observai dac exist anomalii.
Structura bazei de date

Ce operaii sunt executate?

Varianta 1
LECTURI
(nr_inventar, titlu_carte, autor,
anul_intrarii, numele_cititorului,
adresa, telefon, data-imprumutului)

La sosirea unei cri adaug un articol i trec anul


intrrii. La scoaterea din inventar caut n tabel
cartea i o terg. La mprumutarea unei cri
completez numele cititorului, adresa, telefonul i
data mprumutului. La restituirea unei cri caut
cartea i terg doar informaiile despre cititor.

Observaii
Baza de date permite desfurarea operaiilor de actualizare a crilor, dar prezint
anomalii legate de actualizarea cititorilor.
Astfel:
dac tergem articolul corespunztor unei cri la scoaterea sa din inventar,
atunci vor fi terse i informaiile despre cititor! n acest caz, spunem c exist
anomalii de tergere.
nu putem aduga un nou cititor dect atunci cnd acesta mprumut o carte.
Spunem c exist anomalii de inserare.
datele despre un cititor le gsim n toate articolele corespunztoare crilor
mprumutate de acesta i nerestituite. Spunem c exist date redundante.
Deficienele se datoreaz reinerii ntr-o singur tabel i a informaiilor despre cri
i a celor despre cititori.
Varianta 2
CARTI
(nr_inventar, titlu, autor, editura,
an_intrare, an_ieire)
CITITORI
(cod_cit, nume, adresa, telefon,
nr_inventar, data_imprumutului)

La sosirea unei cri adaug o linie n Carti. La


scoaterea din inventar trec anul ieirii crii. La
mprumut caut cartea i completez n tabela
Cititori codul crii i data mprumutului. La
restituire caut cititorul i terg codul crii i
data mprumutului.

Observaii
Structura bazei de date separ datele n dou tabele (cele despre cri i cele
despre cititori) i permite desfurarea operaiilor de intrare/ieire a crilor i cititorilor.
Dar exist restricia mprumutului unei singure cri, ceea ce nu este deloc credibil.
Dac tot am mers la bibliotec.. .Desigur, putem fixa de la nceput numrul maxim de
cri pe care l-ar putea mprumuta un cititor (s zicem 3!) i structura tabelei CITITORI
ar fi forma (cod_cit, nume, date-personale, cod_carte1, data1, cod_carte2, data2,
Capitolul 2 Baze de date relaionale

29

codcarte3, data3). n aceast situaie, cutarea devine mai dificil, att la restituirea
unei cri (unde valoarea corespunde cu numrul de inventar a crii restituite), ct i
la mprumut (unde este loc liber). n plus, utilizarea memoriei este ineficient nu toi
cititorii au exact 3 cri mprumutate! Observai o astfel de tabel! Pe de alt parte, ce
ne-am face cu o bibliotec unde este permis mprumutul a 20 cri?

Figura 2-5: Exemplu de tabel

Varianta 3
CARTI
(nr_inventar, titlu, autor, editura,
an_intr, an_ies, cod_cititor,
data_imprumut)
CITITORI
(cod, nume, date-pers)

La sosirea unei cri adaug o linie n Carti.


La scoaterea din inventar trec anul ieirii crii.
La mprumut completez n tabela Carti codul
cititorului i data mprumutului.
La restituire caut cartea i terg valoarea din
codul crii i data mprumutului.

Baza de date separ informaiile despre cri i cele despre cititori. La mprumut se
trece codul cititorului i data, iar la restituirea crii se terg valorile din cmpul Cod
cititor i data mprumutului. Deci putem identifica crile nerestituite prin valoarea
diferit de Null n coloana Carti. Dar este ineficient s parcurgem n bibliotec fiecare
carte pentru a afia restanierii!
Un alt dezavantaj ar fi legat de imposibilitatea obinerii unor situaii de felul care
sunt preferinele cititorului X? sau de cte ori a fost citit cartea Y? care ar necesita
un istoric al imprumuturilor.
Varianta 4
CARTI
(nr-inv, titlu, autor, editura, an_intr,
an_ies)
CITITORI
(cod_cit, nume, date_pers)
OPERATII
(nr_inv, cod_cit, data_imprumut,
data_restituire)

La sosirea unei cri adaug o linie n Carti.


La scoaterea din inventar trec anul ieirii crii.
La mprumut completez n operaii un nou
articol cu numrul de inventar codul cititorului i
data_mprumutului.
La restituire caut n operaii i completez datarestituirii.
La sosirea unui nou cititor adaug o linie n Cititori.

Baza de date separ informaiile relativ constante despre crti i despre cititori i
cele curente, legate de mprumut/restituire. Raiunea acestei separri vine din
periodicitatea diferit de actualizare a datelor din cele 3 colecii. Observm reinerea n
tabela Operaii doar a codului crii i a codului cititorului pentru a putea face referire la
informaiile lungi (detaliate) despre cartea sau cititorul care a mprumutat-o!

30

Informatic Manual pentru clasa a XII-a

Se pot obine toate situaiile legate de activitatea bibliotecii, de exemplu:


a. Pentru a vedea dac exist cititori restanieri, vom parcurge tabela Operaii i, n
cazul valorilor nule din coloana data-restituirii, vom calcula numrul de zile de la
mprumut.
b. Pentru a afla dac o carte este pe raft, este suficient o cutare a codului crii
n tabela Operatii.
c. Numrul de cri mprumutate n intervalul D1-D2 se poate calcula ca fiind
numrul de linii din tabela operaii, dup un filtru care ncadreaz data
mprumutului ntre D1 i D2.
d. Pentru o interogare de felul ce cri prefer cititorul X vom cerceta tot tabela
Operatii, filtrat pentru cititorul dorit. Vom afla numrul de crti mprumutate
pentru fiecare domeniu (sau colecie sau editura!) i vom alege maximul.
Varianta 5
CARTI
(nr-inv, date-despre carte)
CITITORI
(cod_cit, date_pers)
IMPRUMUTURI
(nr_inv, cod_cit, data_imprumut)
RESTITUIRI
(cod-carte, cod-cititor,
data_imprumut, data-restituire)

Operaiile de mprumut sunt nregistrate n


tabela Imprumuturi odat cu efectuarea lor. La
restituire, caut n operaii i mut articolul n
tabela Restituiri.

Este realizat separarea informaiilor vechi (cele de care nu mai avem nevoie dect
accidental, pentru situaiile de felul: crile preferate de o persoan, numrul cititorilor
unei cri, activitatea bibliotecii c numr de operaii ntr-un interval etc.) de cele
recente (cri aflate la cititori).
Faptul c tabela Operaii reine doar crile mprumutate i nerestituite scurteaz
dimensiunea tabelei i, implicit, timpul de accesare. Pe baza ei poate fi cutat rapid o
carte pentru a vedea la cine este sau a afla restanierii.

sarcini de laborator
1.

Analizai i normalizai tabela ELEVI. Presupunem codul elevului ca fiind chiar


numrul curent n clas.
Clasa
11a
11a

Cod-elev
1
2

nume_elev
popa
iancu

adresa
iasi
bacau

diriginte
albu
albu

Capitolul 2 Baze de date relaionale

31

2.

S presupunem c elevii se pot specializa n diferite domenii i pot desfura


activiti sportive. S discutm tabela urmtoare.
elev
Popa
Popa
Lucy
Lucy

specializari
muzica
muzica
foto
film

sporturi
atletism
tenis
atletism
tenis

Un elev poate avea mai multe


specializri i poate practica mai
multe sporturi. Cheia relaiei poate fi
doar atributul Student.

3.

Fie tabela urmtoare, coninnd numele cursurilor, profesorii, numrul de ore


pentru aceste cursuri, precum i numele elevilor care au optat pentru cursuri.
Nume_curs
Astronomie
Astronomie
Meteorologie

nume_prof
popa
popa
florea

nume_elev
albu
barbu
doltu

Nr-ore
100
100
200

grad
prof.def
prof.gr.1
lector

4.

Normalizai urmtoarea relaie cu situaia nchirierii slilor dintr-un complex


sportiv de ctre diferii clieni.
client
popa
Ion
gaby
popa

nume_sala
biliard
minigolf
tenis
cafenea

taxa
1200
2000
3000
1200

Un client poate nchiria mai multe


sli; o sal poate fi nchiriat de mai
muli clieni.

5. Evidena cazrilor turitilor n hotelurile unei staiuni este inut n tabela TURIST.
Este corect evidena?
Turist
apopei eduard
dorneanu mihai
enache sorin
6.

hotel
lido
lido
parc

taxa/loc
1200
1200
1400

Fie un tabel care evideniaz situaia stocurilor pe depozite. Normalizai-l!

depozit
d1
d1
d2

32

bi
as123456
gf345675
bv512345

material
suruburi
suruburi
carcase

furnizor
Astra
Zalau
Metalcar

stoc
10
20
19

Informatic Manual pentru clasa a XII-a

Un depozit poate avea mai multe


materiale. Un material poate sosi
de la mai muli furnizori, dar un
furnizor este specializat pe un
anumit material.

Capitolul

Introducere n mediul
FoxPro
 Prezentarea general a produsului FoxPro
Interfaa
Configurarea
Obinerea asistenei
Moduri de lucru
 Gestiunea fiierelor

FoxPro: prezentare general


Originea limbajului Xbase printele limbajului FoxPro este legat de un limbaj
brevetat la sfritul anilor 1970 i portat pe sistemul de operare CP/M de ctre un
angajat, Wayne Ratliff, care l-a denumit Vulcan. Sesiznd posibilitile comerciale ale
unui SGBD (sistem de gestiune a bazelor de date) pe microcalculatoare, Ratliff a
vndut produsul corporaiei Ashton-Tate, sub numele dBASE II, avnd un succes
imediat i cucerind realmente piaa utilizatorilor de microcalculatoare. A urmat portarea
produsului pe calculatoarele IBM-PC i apariia variantei dBASE III, apoi a variantei III
Plus, cu care compania Ashton-Tate domina la sfritul anilor 1980 piaa bazelor de
date pentru microcalculatoare. dBASE III Plus a devenit standardul de facto, fiind urmat
cu loialitate de ctre proiectanii de aplicaii.
n paralel, alte companii ofer compilatoare i sisteme de dezvoltare de aplicaii
compatibile cu dBASE, dar optimizate conform nevoilor utilizatorilor.
Una dintre aceste companii pirat a fost Fox Software din Perrysburg, Ohio, ale
crei produse FoxBase i FoxBase Plus i-au cptat rapid o reputaie bazat pe un
plus de vitez i maxim compatibilitate cu limbajul dBASE. Ali productori, cum ar fi
Nantucket (compilatorul Clipper) i WordTech (compilatorul QuickSilver) au pus
accentul pe crearea programelor executabile pure. Pn la sfritul anilor 1980,
termenul Xbase a fost folosit pentru a descrie generic toate produsele
compatibile dBASE. Acestea aveau implementat un nucleu funcional mai mult sau
mai puin echivalent cu limbajul i setul caracteristicilor dBASE III Plus, dar fiecare
productor i-a urmat propria cale. Fox Software lanseaz n paralel cu firma AshtonTate produsul FoxPro compatibil cu dBASE IV, dar mult mai rapid i cu o interfa mai
prietenoas, orientat ctre ferestre.
Pretenia companiei Ashton-Tate de proprietate asupra limbajului dBASE s-a
manifestat prea trziu, ntr-un mod care nu a fcut dect ru propriului produs i
publicitate gratuit noului-venit. Procesul public intentat companiei Fox Software
pentru furtul limbajului a orientat, din pcate, opinia public n defavoarea firmei
Ashton-Tate, considernd procesul ca o dovad de slbiciune a produsului dBASE n
competiia cu FoxPro.
Capitolul 3 Introducere n mediul FoxPro

33

Ulterior, Ashton-Tate a fost cumprat de firma Borland, care a creat produsul


dBASE V, cu variante pentru sistemele DOS i Windows, iar firma Fox Software a
fuzionat cu Microsoft i a dezvoltat variantele FoxPro pentru Windows, DOS, UNIX,
MacIntosh etc.
FoxPro este un SGBD (sistem de gestiune a bazelor de date) care pune la
dispoziia utilizatorilor aplicaii complexe pentru crearea i manipularea bazelor
de date, precum i pentru obinerea rapoartelor din aceste date. Dispune de un
limbaj de programare propriu, limbaj procedural foarte puternic i flexibil, prin
care programatorii i pot descrie datele i aplicaiile. De asemenea, are
implementat limbajul de cereri SQL pentru utilizatorii neinformaticieni. ncepnd
cu varianta 3.0, limbajul procedural FoxPro a devenit un limbaj orientat pe
obiecte. Avnd implementat conceptul de colecie de date, el reprezint un
depozit central pentru stocarea informaiilor despre tabele.
De asemenea, FoxPro pune la dispoziia programatorilor nu numai un compilator i
un mecanism performant de accesare a datelor (tehnologia Rushmore), ci i un set de
utilitare puternice de proiectare, ncorporate ntr-un mediu integrat i omogen. Acest
mediu este foarte confortabil pentru proiectanii de aplicaii.
FoxPro este un produs care poate rula pe platforme DOS, Windows, Unix,
MacIntosh. Dei interfaa i structura meniurilor sunt oarecum diferite, un programator
poate trece uor de la o variant la alta.
FoxPro recunoate i se adapteaz automat la mediile multiutilizator, fr a fi
nevoie de o variant special pentru reea.
FoxPro permite comunicarea cu alte aplicaii (de exemplu, Excel) prin mecanisme
DDE (Dynamic Data Exchange transfer dinamic de date). FoxPro permite schimbul
de date ntre tabelele sale i alte aplicaii n calitate de server sau de client, respectiv
transmite sau primete informaii ctre i de la programele care ruleaz sub Windows.
FoxPro are facilitatea OLE (Object Linking and Embedding legarea i
ncorporarea obiectelor). Limbajul suport legarea obiectelor i ncorporarea lor n
aplicaii proprii FoxPro, cum sunt sunetele, imaginile, foile de calcul etc., create n alte
aplicaii Windows. n acest caz, vorbim despre FoxPro ca despre un client.
FoxPro import i export date n alte formate (fiiere Microsoft Excel, dBASE,
Access, Oracle, Paradox) pe diferite suporturi, local sau la distan.
FoxPro a fost conceput n vederea unei depline compatibiliti, att cu versiunile
sale anterioare, ct i cu alte produse xBase.
Modulul FoxPro Distribution Kit permite realizarea dischetelor de distribuie pentru
aplicaiile executabile.
Variantele de dup 3.0 permit programarea vizual a aplicaiilor folosind
generatoare programe ncadrate n generaia a patra (4GL) care permit proiectarea
interactiv a obiectelor cu care lucreaz o aplicaie.

34

Informatic Manual pentru clasa a XII-a

Interfaa produsului Visual FoxPro


Visual FoxPRo este o aplicaie Windows, deci folosete elementele de interfa
specifice acestui mediu: ferestrele, meniurile, butoanele, obiectele de control. La
intrarea n mediul Visual FoxPro este afiat fereastra sistem cu meniul principal i o
fereastr de comenzi (figura 3-1).

Linia de stare conine informaii


adecvate obiectului activ aici
o tabel deschis. Corespunde
comenzii SET STATUS ON

Fereastra de comenzi

Figura 3-1: Fereastra sistem a mediului Visual FoxPro

 Meniul principal sau meniul Sistem permite: operaii cu fiiere (creare, deschidere,
salvare, afiare la imprimant (FILE); operaii legate de editare (EDIT); operaii cu baze de
date (DATABASES/TABLE); operaii relative la programe (PROGRAM); utilizarea
ferestrelor (WINDOW); obinerea informaiilor de asisten, alte utilitare (HELP).
 Meniul contextual apare prin clic dreapta pe un item (text,
icon, bar de instrumente) i conine comenzi referitoare la itemul
respectiv (figura 3-2).
 Ferestrele standard FoxPro sunt ferestre Windows cu aceleai
caracteristici. Tipurile de ferestre sunt:

Fereastra de comenzi, care permite introducerea direct a


Figura 3-2:
comenzilor;

Fereastra de proiectare, care permite editarea programelor, Exemplu de


meniu contextual
a machetelor, a rapoartelor etc.;

Fereastra de dialog, care permite completarea unei aciuni conform preferinelor


utilizatorului; ca exemplu, observai fereastra Open, prin care precizai discul,
directorul i fiierul care va fi deschis;

Fereastra de mesaje, prin care sistemul avertizeaz sau informeaz asupra


efectelor unei aciuni (eronate, riscante) a utilizatorului, solicitnd confirmarea
privind modalitatea de continuare sau abandonarea aciunii.
 Obiectele de control sunt alte elemente de interfa cu funcii i aspect recunoscut
din mediul Windows. Lucrul cu obiectele de control este cunoscut din leciile anterioare.

Exemple

Casete de editare Edit box


Butoane de comand Command button
Liste i casete combinate List i Combo box
Contoare Spinner
Comutatoare sau casete de validare Check box
Capitolul 3 Introducere n mediul FoxPro

35

Configurarea mediului FoxPro


La instalare, sistemul se autoconfigureaz la parametrii implicii, considerai optimi
de marea majoritate a utilizatorilor si.
Pentru a mbunti performanele de lucru, multe setri pot fi redefinite pe parcurs,
n funcie de particularitile hardware ale calculatorului i de opiunile utilizatorilor.
Setrile pot fi temporare (anulate la ieirea din Fox) sau permanente (memorate n
fiierele speciale de configurare).
Configurarea se poate face prin scrierea valorilor dorite a comenzilor SET (de
configurare) direct n fereastra de comenzi sau prin folosirea ferestrei Options (figura
3-3), deschis din meniul principal, selectnd Tools, Options. Fereastra Options are
mai multe seciuni (tab-uri) care conin informaii diferite de configurare.

Figura 3-3:
Fereastra Options

Moduri de lucru
Spre deosebire de limbajele de programare algoritmice pe care le-am studiat n anii
anteriori (PASCAL, C), n care, la rezolvarea unei probleme, orict de simple, trebuia
s scriem un program, s-l compilm i s-l lansm n execuie, pachetul de programe
FoxPro ne permite o varietate de modaliti de lucru. Acestea vor fi prezentate pe scurt
n continuare.

Modul de lucru comand


Este o modalitate de lucru interpretativ, care permite ca, imediat ce introducei o
comand, sistemul s o cerceteze i, dac este corect, s o execute. Instruciunile
sunt introduse ntr-o fereastr de comenzi care funcioneaz ca un istoric al comenzilor
36

Informatic Manual pentru clasa a XII-a

introduse. Comenzile introduse n fereastra de comenzi sunt comenzi linie; apsarea


tastei Enter lanseaz comanda n execuie.
Comenzile FoxPro sunt formate dintr-un verb care indic aciunea i un numr de
clauze care particularizeaz efectul comenzii n situaia respectiv. Formatul general al
unei comenzi este:
<verb> [<clauza1>] [<clauza2>]
n general, clauzele nu au o poziie fix n sintaxa comenzii, iar verbul poate fi
prescurtat la primele 4 caractere.

Exemplu

Pentru afiarea numelui i clasei elevilor care au media cel puin 5 se


poate scrie:
Browse fields nume, clasa for media>=5
Browse for media>=5 fields nume,clasa

Modul de lucru program


SGBD-ul FoxPro reprezint un mediu integrat de dezvoltare a programelor utilizator,
oferind un editor de texte pentru scrierea textelor surs, depanator, compilator i
linkeditor. Se pot folosi ambele tehnici de programare: att programarea clasic,
structurat i modular, ct i programarea orientat spre obiecte. Programele sunt
vzute ca fiiere de comenzi (*.PRG).
Apelul editorului se face prin comanda MODIFY COMMAND <fis.prg>
Comanda deschide o fereastr de editare, folosit att pentru crearea, ct i pentru
modificarea programului surs recunoscut prin numele <fis.prg>.
Lansarea programului n execuie (automat se face i compilarea) se face prin
comanda DO <fis.prg>
Programul este executat pn la terminarea fiierului sau pn la ntlnirea
comenzii RETURN, care determin revenirea n fereastra de comenzi. Dac un fiier de
comenzi este apelat din alt fiier de comenzi, spunem c este subprogram. Nu sunt
diferene ntre construirea unui program i a unui subprogram. Prin comanda DO se
caut fiierul de comenzi indicat, se deschide, se execut liniile acestuia, se nchide i
se revine n programul apelant sau n fereastra de comenzi.
n programe i numai n acest context se pot folosi i comenzile multilinie, cum ar
fi comanda IF din exemplul urmtor.
USE ELEVI
&& deschide o tabel
IF nume="albu"
&& test asupra numelui primei persoane
? prenume
&& comanda de afiare a prenumelui
ENDIF
&& nchide structura
Dac este necesar fragmentarea comenzii, se va folosi semnul ; (punct i
virgul). Nu exist separatori ntre comenzi. Lungimea maxim a unei linii de comand
este de 1024 de caractere.
Comentariile sunt introduse ntr-un program fie prin caracterul asterisc (*) la
nceputul liniei, fie prin dublu ampersand (&&) n continuarea comenzii propriu-zise.
FoxPro poate s apeleze comenzi DOS prin comanda
! / RUN
Capitolul 3 Introducere n mediul FoxPro

37

Exemplu

MODIFY COMMAND Salarii


DO SALARII
! DIR
run erase salarii.prg

&& deschide ecranul de proiectare


Salarii.prg
&& compileaz i execut Salarii.prg
&& afieaz lista fiierelor din
directorul curent
&& apeleaz comanda de
tergere DOS

Modul de lucru asistat (interactiv sau vizual)


Acest mod presupune alegerea aciunii dorite prin intermediul interfeei FoxPro,
interfa prietenoas, orientat spre ferestre, meniuri, obiecte de control, cunoscute n
mare parte din mediul Windows. Este un mod de lucru uor de utilizat pentru operaiile
directe ale utilizatorilor asupra datelor, oferind avantajul unei viteze mari de lucru.
Pe de alt parte, proiectarea vizual a devenit un instrument modern, cu ajutorul
cruia pot realiza programe i utilizatorii neinformaticieni, fr s cunoasc restriciile
sintactice ale unui limbaj de programare. Singura cerin este ca proiectantul s tie
foarte bine ce trebuie fcut; cum trebuie fcut hotrte sistemul. Instrumentele
folosite n mediile vizuale sunt generatoarele (designers), asistenii (wizards) sau
constructorii (builders). Pe toat perioada dezvoltrii programului, utilizatorul are
posibilitatea vizualizrii a ceea ce va obine ca rezultat.
Abordarea vizual a obiectelor face ca Visual FoxPro s fie considerat un mediu de
dezvoltare rapid a aplicaiei (RAD Rapid Application Development). Folosind acest
mediu realizm o proiectare vizual a interfeei, spre deosebire de abordarea
textual din mediile de programare tradiionale.

sarcini de laborator
I.

Sarcini pentru familiarizarea cu elementele de interfa

Intrai n mediul FoxPro; observai meniul principal, selectai diverse opiuni; folosind
fereastra de comenzi, executai cteva operaii:

1.
2.
3.
4.
5.
38

 mutare
 minimizare
 redimensionare
 nchidere
 expandare
 deschidere
Creai cu un editor de texte oarecare un fiier text denumit APLIC.TXT.
Deschidei fereastra de editare a fiierului APLIC.TXT.
Modificai poziia ferestrei de editare; redimensionai fereastra.
tergei vechiul coninut; scriei un alt text. Selectai o zon din acest text i
multiplicai-o de 3 ori.
Selectai o zon din acest text i tergei-o; duplicai textul, crend un alt fiier,
denumit APLIC2.TXT.
Deschidei cele dou fiiere n dou ferestre, prezente simultan pe ecran.

Informatic Manual pentru clasa a XII-a

6. Schimbai ntre ele poziiile celor dou ferestre; salvai i nchidei ferestrele.
7. Informai-v asupra opiunii CUT din meniul EDIT prin utilitarul HELP.
8. Aflai ce face comanda CLEAR folosind utilitarul HELP contextual.
9. Capturai o zon a ecranului ntr-un fiier.
10.Deschidei fiierul APLIC2.TXT i ncadrai titlul documentului ntr-un chenar cu
ajutorul caracterelor speciale ASCII.
II.

Exerciii pentru editarea textelor

1. Deschidei editorul de texte i realizai o cerere de nscriere a elevului Popescu


Emil la cursurile de var pentru informatic din perioada 1-30 iulie!
2. Aplicai fonturi, culori i dimensiuni diferite. ncadrai cererea ntr-un chenar cu
linii simple.
3. Multiplicai cererea de 5 ori.
4. nlocuii peste tot perioada cu 1-30 august.
5. Folosii n fiecare cerere alt nume (important este poziionarea pe irul
Popescu Emil n vederea schimbrii cu alt ir din exterior!).
6. tergei peste tot cuvntul azi.
7. Inversai cererea 3 cu cererea 1; refacei varianta anterioar.
8. Salvai cu numele CERERE.TXT; afiai pe ecran sau la imprimant coninutul
fiierului.
III. Exerciii pentru configurarea mediului FoxPro
1. Scriei n fereastra de comenzi ? DATE(). Care este efectul comenzii pe ecranul
sistem?
2. Schimbai formatul datei calendaristice.
Format
nume-format
3. Completai un tabel cu formatele de dat
ll/zz/aa
AMERICAN
i numele acestora:
zz.ll.aa
GERMAN
4. Introducei secolul.
5. Fixai alt separator ntre informaiile de dat: zi, luna, an.
a) Ce comand este generat pentru fixarea formatului de dat?
b) Ce comand este folosit pentru fixarea separatorului de dat?
6. Aflai care este semnul pentru marca zecimal!
7. Scriei n fereastra de comenzi: ? 100/2, 100, 0/2
Obinei acelai rezultat? Care este numrul de zecimale?
8. Observai efectul schimbrii numrului de zecimale la 5.
9. Ce efect are comanda SET DECIMALS? Care este numrul maxim de zecimale?
10.Ce comand folosii pentru fixarea numrului de zecimale?
11.Fixai simbolul monetar lei plasat dup valoare. De exemplu: 1250lei.

Capitolul 3 Introducere n mediul FoxPro

39

Gestiunea fiierelor
La lansare, SGBD-ul FoxPro este ncrcat n memoria de lucru de ctre sistemul de
operare sub care este instalat i funcioneaz n concordan cu restriciile acestui
sistem de operare. Un fiier este descris n sistemul de operare prin: nume, extensie,
poziie logic pe disc (calea de directoare), dimensiune, data i ora ultimei actualizri,
atributele asociate accesului la fiier, drepturi de acces. Fiierele FoxPro stocheaz
date, programe i informaii pentru generatoarele sistemului. Evidena acestui
ansamblu de fiiere este dificil, mai ales cnd numrul lor este mare.
Utilitarul Project Builder servete la gestiunea fiierelor dintr-o aplicaie Fox. l
putei lansa selectnd File, New, Project din meniul principal sau prin comanda
CREATE PROJECT.
Fereastra principal a utilitarului afieaz un arbore de
directoare standard, construit
dup natura fiierelor ce pot fi
gestionate:
1. Data conine subdirectoare pentru baze de date
(.DBC), tabele izolate
(.DBF), interogri (.QPR).
2. Documents conine subdirectoare pentru formulare (.SCX), rapoarte
(.FRX), etichete (.LBX).
3. Classes conine biblio- Figura 3-4: Fereastra Project Manager
tecile de clase (.VCX).
4. Code conine fiierele de proceduri (.PRG, .FXP).
5. Other conine fiiere auxiliare (.BMP).
Pe baza acestui arbore cu fiierele aplicaiei, putei genera o aplicaie executabil,
aa cum vei vedea n leciile urmtoare. Din fereastra gestionarului de fiiere putei
realiza interactiv operaiile dorite cu fiiere: proiectarea sau crearea unui fiier,
deschiderea n vederea consultrii, a execuiei, a modificrii, tergerea fiierului etc.

Atenie
Utilitarul nu creeaz structura de directoare! Este doar o grupare pe care
o face n funcie de tipul fiierelor.
Cnd ncepei s lucrai la o aplicaie, este bine s v creai o structur de
directoare asemntoare celei din fereastra Project Manager; astfel vei
regsi uor fiierele dup tipul lor!

40

Informatic Manual pentru clasa a XII-a

Cteva operaii cu fiiere i directoare


Comand
SET DEFAULT TO <director>

Efect
Schimbarea directorului curent.

SET PATH TO <lista dir>

Indicarea directoarelor de cutare

DIR [[ON]<disc>] [<dir>]


[<sablon>] [TO PRINTER/TO
FILE <fis.txt>]

Afiarea coninutului directorului curent sau


a celui specificat n clauza ON.
ablonul permite limitarea listei la un grup.
Clauza TO indic destinaia comenzii.

COPY FILE <fis1.*> TO


<fis2.*>

Copierea unui fiier identificat unic prin


specificatorul de fiier <fis1.*> n alt fiier
identificat prin <fis2.*>.

COPY FILE <fis1.*> TO


<fis2.*>

Copierea unui fiier identificat unic prin


specificatorul de fiier <fis1.*> n alt fiier
identificat prin <fis2.*>.

RENAME <fis1.*> TO <fis2.*>

Redenumirea unui fiier.

ERASE <fis.*>

tergerea unui fiier.

=CURDIR()

Returnarea numelui directorului curent.

=FILE("<fis>")

Returnarea lui .T. dac fiierul este gsit


pe discul curent.

=GETFILE()/ =GETDIR()

Deschiderea unei ferestre pentru selectarea


direct a unui fiier (director). Este returnat
numele fiierului (directorului) sau irul vid dac
apsai tasta Cancel, Esc sau butonul Close.

Exemplu
.set default to d:\fox\exempl
set path to d:\fox, c:\
use elevi

Poziionare n directorul exempl.


Deschide tabela elevi. Dac nu se gsete n
directorul curent, se va cuta n D:\Fox sau c:\.

Dir
dir *.*
dir d:\fox\*.txt

Afieaz bazele de date din directorul curent


Afieaz toate fiierele din directorul curent
Afieaz lista fiierelor text din d:\fox.

set default to c:\fox

Schimb directorul curent la c:\fox.

copy file elev.dbf


to d:\fox\student.dbf

Copiaz fiierul ELEV.DBF din directorul curent


n directorul d:\fox sub numele STUDENT.DBF.

!copy *.txt a:
Erase *.txt
rename elevi.dbf to student.txt
?curdir()
Cd getdir()

Copiaz toate fiierele text pe dischet.


terge fiierele text din directorul curent.
Schimb numele fiierului.
Afieaz numele directorului curent.
Poziionare n directorul al crui nume l
introducei de la tastatur.
Capitolul 3 Introducere n mediul FoxPro

41

sarcini de laborator
I.

Urmrii comenzile, verificnd dac sunt corecte sintactic i ncercnd s compunei structura discului C. Atenie! Presupunem c apelul FoxPro s-a fcut prin
comanda: C:\>FOX\FOX.EXE, deci directorul curent este rdcina discului C.
! md exemple
dir \fox26\programe\*.prg
set default to exemple
!copy *.txt \texte
! copy con exempl.txt
!copy file elevi.dbf to \*.dbf
copy file exemp.txt to exe.txt !mkdir \bazedate
copy to texte
cd \bazedate
delete file exempl.000
!rd exemple
modify command \program
? curdir()
II.

Prin ce secven se poate realiza mutarea documentului tabel.txt din


directorul \UTIL al discului C n rdcina discului A sub numele lista.doc?
a)
b)
c)
d)

rename c:\util\tabel.txt to a:
copy file c:\util\tabel.txt to a:\lista.doc
delete file c:\util\tabel.txt
move c:\util\tabel.txt a:\lista.doc

III. Fie structura discurilor C i A din figura urmtoare.

1. tiind c suntem n directorul C:\, lansai programul C:\FOX\FOX.EXE fixnd


C:\TP ca director curent.
2. Creai un subdirector nou sub ALFA cu numele GAMA, care s conin toate
fiierele din ALFA.
3. Afiai coninutul directorului curent.
4. Afiai coninutul fiierului ALFA.TXT.
5. Afiai toate fiierele cu extensia .prg din directorul C:\FOX.
6. Fixai ca director de lucru C:\DOS i apoi afiai numai bazele de date.
7. Copiai fiierul ALFA.TXT n C:\TP.
8. Lansai programul A:\PROG.PRG.
9. tergei toate fiierele cu extensia .TXT din directorul TP.
10.Mutai fiierul A:\PROG.PRG n directorul rdcin al discului C.
42

Informatic Manual pentru clasa a XII-a

Capitolul

Tipuri de date n Visual


FoxPro i operaii specifice







Tipul numeric
Tipul ir de caractere
Tipul dat calendaristic
Tipul logic
Comenzi legate de manevrarea variabilelor i a expresiilor

Principalele tipuri de date cu care lucreaz FoxPro sunt datele numerice, irurile de
caractere, datele logice i datele calendaristice. Datele de tip memo sau de tip general
pot fi definite numai n contextul bazei de date, iar operaiile cu aceste tipuri vor fi
prezentate n leciile urmtoare.

Tipul numeric
Este folosit n diferite variante, alese n funcie de domeniul de valori n care se va
ncadra variabila sau cmpul de acest tip.
Varianta
Numeric
Float
Double
Integer
Currency

Descriere
ntregi sau fracii. Ocup 8 B n memorie. Pn la 20 B n tabela de date.
Este folosit pentru valori ntre -0.9E19 i +0.9E19.
n VMSP pe 4 B
Pentru valori ntre -4.9E-324 i 1.79E308 n VMDP pe 8 B.
Pentru valori ntregi ntre -2147483647 i +2147483646 pe 4 B.
Valori monetare ntre -9*10**14 i +9*10**14; pe 8 B.

Operatori
Aritmetici
Relaionali

+, -, *, /, ** (ridicare la putere), % (modulo)


<, >, <=, >=, # sau <>sau != (diferit), = (egal)

Funcii standard matematice uzuale


Funcie
=ABS(n)
=ROUND(n1,n2)
=MOD(n1,n2)
=INT(n)

Efect
Valoarea absolut.
Exemplu: ABS(-15)=15.
<n1> este rotunjit la zecimala al crei ordin e dat de <n2>
Exemplu: ROUND(1.7567,3)=1.757;
Restul mpririi ntregi a lui n1 la n2.
Exemplu: MOD(5,2)=1
Partea ntreag a lui <n>.
Exemple: INT(7.25)=7; INT(7.87)=7
Capitolul 4 Tipuri de date n Visual FoxPro i operaii specifice

43

Aproximare la cel mai mic ntreg mai mare sau egal cu <n>.
Exemple: CEILING(5.87)=6; CEILING(-5.87)=-5
=FLOOR(n)
Aproximare la cel mai mare ntreg mai mic sau egal cu <n>.
Exemplu: FLOOR(5.87)=5; FLOOR(-5.87)=-6
=STR(n1[,n2[,n3]]) Conversie la ir a lui n1; n2 este lungimea; n3 este
numrul de poziii zecimale.
Exemplu: STR(1432.456,12,4)="1432.456"

=CEILING(n)

Tipul ir de caractere
Acest tip este folosit pentru variabilele sau cmpurile care conin caractere ASCII
delimitate prin apostrof, ghilimele sau paranteze ptrate.
Exemplu: "Scarlet OHara"
Operatori
De concatenare + (concatenarea irurilor);
Exemplu: [buna ]+'dimineata'='buna dimineata'
- (concatenare cu mutarea spaiilor de la sfritul primului ir la
sfritul irului rezultat
Exemplu: [buna ]-'dimineata'=[bunadimineata ]
Relaionali
<; <=, >, >=, =, # sau !=, sau <> (diferit) $ (inclus)
Exemple: [alb] = 'albastru returneaz adevrat pentru
SET EXACT OFF; [alb] = 'albastru' returneaz fals
pentru SET EXACT ON; [alb] $ 'albastru'=adevarat

Funcii uzuale aplicate irurilor


Funcie
=SUBSTR(s,n1,n2)

=LEFT/RIGHT(s,n)

=LEN(s)
=LTRIM/RTRIM/
ALLTRIM (s)
=AT(s1,s2)
=LOWER/UPPER/
PROPER(s)

44

Efect
Extrage un subir din irul <s> ncepnd cu caracterul
de pe poziia <n1>, de lungime <n2>.
Exemplu: SUBSTR('ABCD',2,2)='BC'
Extrage primele/ultimele <n> caractere din irul <s>.
Exemple: LEFT("ABCD",2)="AB"
RIGHT('ABCD',2)='CD'
Returneaz lungimea irului <s>.
Exemplu: LEN('ALFA')=4
Elimin spaiile de la stnga irului (LTRIM), de la
dreapta irului (RTRIM) sau din ambele pri (ALLTRIM).
Exemplu: LTRIM('
MIA ')="MIA "
Returneaz poziia irului <s1> n <s2>.
Exemplu: AT('NR','str Ploii nr 5')=0;
Transform irul n minuscule/majuscule/tip titlu.
Exemple: LOWER('VARA')='vara'
UPPER('galben')='GALBEN'
PROPER('ana maria')='Ana Maria'

Informatic Manual pentru clasa a XII-a

=VAL(s)
=OCCURS(s1,s2)

Realizeaz conversia unui ir la numr.


Exemplu: VAL('1433.44')=1433.44
Numr apariiile lui <s1> n irul <s2>.
Exemplu: OCCURS("A","ALFA")=2

Tipul dat calendaristic


Tipul Date este folosit pentru gestionarea datelor calendaristice reprezentate pe 8 B
(an, lun, zi). Forma de reprezentare difer n funcie de formatul implicit sau setat de
utilizator.
Exemplu: {01/31/94} se reprezint 31 ianuarie 1994 n format american.
Tipul DateTime este folosit pentru a memora valori ce conin att data, ct i ora.
Regulile sunt aceleai ca la tipul Date.
Exemplu: {12/12/1999 10:03:09}
Comenzi utile
SET CENTURY ON/OFF
SET DATE GERMAN/AMERICAN/...
Operatori
Aritmetici
Relaionali

Specific anul, inclusiv secolul.


Specific formatul de dat.

+ (adun) sau - (scade) un numr de zile la o dat


Exemplu: {01.01.2001}+3={04.01.2001}
<, <=, >, >=, =, <>, #, !=
Exemplu: {01.01.2001} < {12.31.2001)=T.

Funcii standard pentru date calendaristice


Funcie
Efect
=DATE()/TIME()/ Returneaz data/ora curent a sistemului.
DATETIME()
Exemple: DATE()={01/01/94};
time()="10:12:00"; datetime()={08/05/99 07:18:20PM}
=DAY/MONTH/
Extrage numrul zilei/lunii/anului din data <d>.
YEAR(d)
Exemplu: Fie x={01.07.1997} cu formatul zz.ll.aaaa.
Atunci DAY(x)=1; MONTH(x)=7; Year(x)=1997.
=CMONTH(d)
Returneaz numele lunii din data <d>.
Exemplu: CMONTH({01/07/94})='JANUARY'
=DTOS/DTOC(d)
Returneaz data sub form de ir.
Exemplu: Fie x={01.07.94}.
DTOS(X)="19940701"; DTOC(x)="01/07/94"
=CTOD(s)
Realizeaz conversia unui ir la dat calendaristic.
Exemplu: CTOD("01.01.94")={01.01.94}.

Capitolul 4 Tipuri de date n Visual FoxPro i operaii specifice

45

Tipul logic
Acest tip este folosit pentru variabile sau cmpuri ce pot avea doar dou valori,
notate .T. (true=adevrat) i .F. (false=fals).
Operatorii logici sunt OR, AND, NOT sau !

Alte funcii uzuale aplicate tuturor tipurilor de date


Funcie
=MAX/MIN(e1,e2[,e3...])
=TYPE(eC)
=IIF(eL,e1,e2)

=BETWEEN(e1,e2,e3)
=EMPTY(e)

INLIST(e1,e2[,e3...])

Efect
Calculeaz extremul dintre valorile <e1>, <e2>,...
Exemple: max(14,3)=14; min(14,3,15,6)=3
Returneaz litera corespunztoare tipului de dat.
Exemplu: TYPE ("12")=N; TYPE("[12]")=C
Dac e1=.T. returneaz e1, altfel returneaz e2.
Exemplu: IIF(3=5,"corect","incorect")=
"incorect".
Testeaz dac e1 aparine intervalului (e2,e3).
Exemplu: BETWEEN(3,0,20)=.T.
Testeaz dac expresia dat ca parametru este vid.
Exemple: Empty("")=.t.; empty({//})=.t.;
empty(5)=.f.
Testeaz dac e1 aparine listei date de urmtorii
parametri.
Exemple: inlist(2,1,2,3,4)=.t.;
inlist('d','a','b','c')=.f.

Gestiunea variabilelor
O variabil de memorie reprezint o modalitate prin care FoxPro depoziteaz i
utilizeaz temporar date ntr-un program. Variabilele utilizator sunt zone de memorie
crora li se atribuie un nume, un tip i o valoare. Numele variabilei este un ir de
caractere alfanumerice. Tipul variabilei este atribuit acesteia odat cu valoarea.
Tablourile sau masivele de date sunt structuri statice neomogene. Pot avea cel
mult dou dimensiuni.

Declararea tablourilor
DIMENSION / DECLARE <tablou(dim1[,dim2])>,.>
Iniializarea unui tablou se face odat cu declararea dimensiunii la valoarea .F. Alt
iniializare global a tuturor elementelor unui tablou se poate face prin comanda STORE.
O matrice se poate redimensiona fr ca prin aceast schimbare s i se reiniializeze
componentele.
Exemplu:
dimension a[2, 2]
store 5 to a
&& o matrice ptrat 2x2 este iniializat pe valoarea 5
dimension a[3, 3]
&& redimensionare
?a[1,1],a[1,2],a[1,3],a[2,1],a[2,2],a[2,3],a[3,1],a[3,2],a[3,3]
5
46

f.

.f.

.f.

Informatic Manual pentru clasa a XII-a

.f.

.f.

Funcii standard aplicate tablourilor


Funcie
=alen(t,n)

Efect
Definirea dimensiunii tabloului ca numr total de
elemente (dac n=0), numr de linii (dac n=1), sau
numr de coloane (dac n=2).
=ains(T,P[,N])
Inserare n tabloul T pe poziia P a unui element (dac lipsete
N), a unei linii (dac N=1), a unei coloane (dac N=2).
=adel(T,P[,N])
tergerea unui element (dac lipsete N), a unei linii
(dac N=1), a unei coloane (dac N=2).
=ascan(T,E[,P[,L]]) Returneaz poziia unei expresii E prin cutarea n tabloul T,
ncepnd de la poziia P pe lungimea L.
=acopy(T1,T2[,P[,L]]) Copierea elementelelor din T1, ncepnd cu cel de pe
poziia P pe lungime L n tabloul T2.
=asort(T,[P[,L[,N]]]) Sortarea unui tablou T n mod cresctor (dac N=0) sau
descresctor (dac N0), ncepnd cu elementul de pe
poziia P pe lungimea L.

Exemplu

Fie tabloul B, cu valorile (1, 5, 7, 9) i tabloul A cu valorile ((11, 12,


13, 14), (21, 22, 23, 24), (31, 32, 33, 34)).

Sarcina
Inserarea unei linii pe poziia 3 din A
Inserarea unui element pe poziia 4 din B
Inserarea unei coloane pe poziia 1 din A
tergerea elementului al 4-lea din B
tergerea liniei 3 din A
tergerea coloanei 2 din A

Rezolvare
=ains(a,3)
=ains(b,4)
=ains(a,1,2)
=adel(b,4)
=adel(a,3)
=adel(a,2,2)

Folosirea funciei de sortare a tablourilor


Fie B(3,5,7,1,10) i A((11,12,13,14),(21,22,23,24),(31,32,33,34)).
Comand
=asort(b)
=asort(b,1,5,5)
=asort(b,1,3,1)
=asort(b,3,alen(b),0)
=asort(a,3,alen(z),1)
=asort(a,3)
=asort(a,9)

Efect
B(1, 3, 5, 7, 10) cresctor ntregul tablou
B(10, 7, 5, 3, 1) descresctor ntregul tablou
B(7, 5, 3, 1, 10) descresctor, primele 3 elemente
B(3, 5, 1, 7, 10) cresctor, ncepnd de la poziia 3
sortare descresctoare dup coloana 3
sortare cresctoare dup coloana 3
sortare cresctoare a liniilor 3 i 4 dup valorile coloanei 2

Variabilele pot fi locale (private) unei uniti funcionale sau globale (publice),
recunoscute de toate unitile funcionale subordonate.
Declararea variabilelor publice:
PUBLIC [ARRAY] <lista-var>
Dac variabilele sunt tablouri, se specific clauza ARRAY.
Declararea variabilelor private:
PRIVATE/LOCAL <lista-var>/ALL LIKE/EXCEPT <sablon>
Clauza ALL LIKE permite declararea privat a tuturor variabilelor care verific un
anumit <sablon>. Clauza ALL EXCEPT declar ca locale toate variabilele definite n
modul, cu excepia celor care verific <sablon>.
Capitolul 4 Tipuri de date n Visual FoxPro i operaii specifice

47

Comenzi de lucru cu variabilele


Comanda
<var>=<expresie>
/STORE <exp> TO <lista-var>
INPUT [<mesaj>] TO <var>

ACCEPT [<mesaj>] TO <var>


@ <r,c> GET<var>
[PICTURE <sablon>]
[DEFAULT<exp>][VALID <cond>]
READ

? <lista-expresii> AT <col>
@ <r,c> SAY <exp>
RELEASE <lista_var> /
ALL [LIKE/EXCEPT <sablon>]
SAVE TO <fis.mem>
[ALL LIKE/EXCEPT <sablon>
RESTORE FROM <fis.mem>
[ADDITIVE]
WAIT [<mesaj>] [TO <var>]
[WINDOWS] [NOWAIT]
=MESSAGEBOX(<mesaj>)

Efect
Se atribuie variabilei valoarea expresiei.
Comanda Store permite atribuiri multiple.
Comad de citire. Variabila primete
valoarea i tipul expresiei introduse de la
tastatur.
Comanda de citire a unei variabile de tip
caracter.
Comanda de editare a unei variabile sau
cmp al unei tabele la execuia comenzii
READ. <r,c> specific poziia pe ecran
a variabilei. PICTURE specific un ablon
de editare; DEFAULT este valoarea iniial;
VALID este condiia de validare.
Permite afiarea expresiilor pe linia curent,
ncepnd din coloana specificat.
Afieaz valoarea expresiei <exp>
ncepnd din punctul <r, c>.
tergerea unei liste de variabile sau a
tuturor sau a celor ce verific un ablon.
Salvarea pe disc n fiierul .mem
a variabilelor.
Restaurarea prin suprascriere sau
adugare a variabilelor din fiierul .mem
n zona de lucru.
Pauz n program cu afiarea unui mesaj
(eventual ntr-o fereastr); tasta apsat
este transmis variabilei <var>.
Funcie pentru afiarea unui mesaj.

Lucrul cu imprimanta
Sunt disponibile dou comenzi care direcioneaz efectul comenzilor de afiare
ctre imprimant.
Comanda
SET PRINTER ON/OFF
SET DEVICE TO PRINTER/ TO SCREEN

48

Informatic Manual pentru clasa a XII-a

Efect
Activarea/dezactivarea imprimatei.
Direcionarea comenzii ctre imprimat
sau ecran.

Exemple
Comenzi
store 0 to a, b, c
b=alfa
? "a=",a
x={01. 09. 95}
@ 1,5 say "data="+dtoc(x)
input "nume?" to nume
accept "nume?" to nume
accept "varsta?" to v
release all like a*
save to beta all like a
@ 2,2 get b picture 99.99
default 2.00 valid b<=10.00
read

set printer on
? 'text'
Set device to printer
Set printer on
@ 1,5 say 'text'

Efect
Variabilele numerice a, b, c sunt iniializate
cu valoarea zero; este modificat
coninutul i tipul variabilei b.
Se afieaz a=0.
Se creeaz variabila x de tip dat calendaristic.
Se afieaz din punctul 1,5 expresia
data=01091995.
Pentru citirea unui ir trebuie dai i
delimitatoriii acestuia.
Nu mai este nevoie de delimitatori.
Atenie! Vrsta va fi tot de tip caracter.
Se terg variabilele care ncep cu a.
Se salveaz n fiierul beta.mem variabila a.
Se afieaz o zon de editare i se
ateapt introducerea valorii pentru
variabila b; iniial variabila b=2.00;
nu se prsete zona de editare dac
valoarea introdus este mai mare ca 10.
Se direcioneaz efectul comenzii de
afiare ? ctre imprimant.
Se direcioneaz efectul comenzii de
afiare @ ctre imprimant.

Macrosubstituie i expresii nume


Utilizarea coninutului unei variabile ntr-o comand ca identificator se poate face
prin mecanismul numit macrosubstituie. Indicarea acestei operaii se face prin
simbolul & (ampersand) pus naintea numelui variabilei. n locul macrosubstituiei se
poate folosi expresia-nume (denumit astfel pentru c poate fi folosit oriunde n
FoxPro; ateapt un nume, un identificator). Expresiile-nume pot conine nume de
fiiere, nume de ferestre, nume de aliasuri, numere de zone etc.

Exemple

Alfa='elevi'
Beta='alfa'
? beta
alfa
? &beta
elevi
use alfa
use &alfa

Se atribuie variabilei alfa irul 'Elevi'.


Se atribuie variabilei Beta irul 'alfa'.
Se va afia coninutul lui beta, adic 'alfa'.
Se va nlocui variabila beta cu valoarea sa,
alfa i se va afia coninutul acesteia,
adic 'elevi'.
Se va deschide fiierul 'alfa'.
Se va deschide fiierul 'elevi'.

Capitolul 4 Tipuri de date n Visual FoxPro i operaii specifice

49

sarcini de laborator
1.

Urmrii efectul funciei STR i rspundei la ntrebri:

a=1234
b=mod(a,23)
lung=5
zecim=3
? str(a,lung,zecim)
? str(a,3)
? str(b, lung)
? str(b,10,zecim)
? str(b,lung)
2.

Urmrii rezultatul afiat n fiecare caz. Ce efect are comanda SET EXACT?

a='abcd-'
b='ef-gh'
c=a+b+'*'
d=a-b+'*'
?c, d
e=b-a+'*'
f='bc'

3.

a) Ce se ntmpl dac numrul are zecimale i


parametrul al treilea lipsete?
b) Ce se ntmpl dac lungimea indicat este
prea mare? Vor fi adugate spaii?
c) Cum trebuie calculat lungimea pentru a reprezenta i zecimalele?
d) Ce se ntmpl dac expresia are zecimale, dar
lipsete n funcie parametrul al treilea? Are loc
trunchierea? Se rotunjete la ntreg?

?a<c, a=c, a>c


?b<d, b=d, b>d
?a>f, a=f, a<f
?a>d, a=d, a<d
SET EXACT ON
?a<c, a=c, a>c
?b<d, b=d, b>d

Urmrii efectul urmtoarelor comenzi i scriei ce se afieaz:

? min({ 06/09/93}, {05/09/93})


? x=date()
? day(x), month(x), year(x)

4.

SET EXACT OFF


?b<e, b=e, b>e
?a=f, f=a, a#f, f#a
?'abcd'$f
?f$a, b$a, a$b
?g$a, a$"ABCD

set century on
? year(x), x
? dmy(x)
? mdy(x)

?
?
?
?

cmonth(x)
cdow(x)
len(month(x)
ymd(x)

Ce realizeaz secvena urmtoare?

x=time()
h=val(left(x, 2))
m=val(substr(x, 4, 2))
s=val(right(x, 2))
y=str(h,2) + ":"+ iif(len(alltrim(str(m)))==1, 0'+;
str(m, 1), str(m, 2))+ ":"+ iif(len(alltrim(str(s)))==1, "0"+;
str(s, 1), str(s, 2))

5. Pentru o dat calendaristic primit din exterior sub forma luna/zi/an prin
instructiunea ACCEPT s se afieze sub formatul anul:ziua:luna.
6.

Pentru o dat calendaristic primit din exterior sub forma luna/zi/an prin
instruciunea INPUT s se afieze sub formatul anul:ziua:luna.
7.

Introducei n variabila AZI data curent i afiai numele zilei de azi, de ieri i de mine.

8.

Fie MATRICOL="10A25". Extragei n variabile distincte informaiile anul, litera i


numrul de ordine. Afiai o expresie, recompunnd matricolul.
50

Informatic Manual pentru clasa a XII-a

9.

Care sunt funciile necesare obinerii urmtoarelor valori numerice plecnd de la


irurile x="12.5" i y=".145"?
12.145
14.512
-12
0.145
145.12
0.12
157
12.000
10.

Care sunt funciile care permit afiarea numrului N=145.567 sub forma
urmtoarelor iruri:
"145.567"
" 145.57"
"145.56"
"0.14"
" 146"
"145"
"291"
"14.567"
" 145.6"
"-14"
"567"
"0.00145"
11. tiind c la o staie PECO s-a format o coad de n maini i c timpul de servire
cu benzin a unei maini este n medie X minute, aflai ct timp va atepta ultima
main n zile, ore i minute.
12. La un magazin trebuie s se achite suma S n hrtii de valoare 10000, 5000 sau
1000 uniti monetare (u.m.). Care va fi numrul minim de bacnote de fiecare valoare
pentru acoperirea sumei i ce rest (n monede de 100 u.m.) primete clientul?
Exemplu: Dac S=126400, clientul va plti 12*10000+1*5000+2*1000 i va primi rest 600 lei.
13. Se dau trei numere, reprezentnd laturile unui triunghi. Afiai ce fel de triunghi
este: dreptunghic, ascuitunghic, obtuzunghic.
Urmrii rezolvrile propuse i corectai dac este cazul erorile!
*varianta I*
&& a, b, c sunt date numerice citite deja!
x=a^2
y=b^2
z=c^2
?iif(x=y+z or y=x+z or z=x+y, 'drept', iif(x<y+z and y<x+z and
z<x+y,; 'ascutit',iif(x>y+z or y>x+z or z>x+y, 'obtuz', '')))
*varianta a II-a*
lmax=max(a, b, c)
lmin=min(a, b, c)
lmijl=iif((lmax=a and lmin=b) or (lmax=b and lmin=a),;
c, iif((lmax=a and lmin=c ) or;
(lmax=c and lmin=a), b, a))
ncercai s vedei efectele noilor funcii
l1=lmax^2
standard care apar prin asistentul Help!
l2=lmin^2
l3=lmijl^2
?iif(l1=l2+l3, 'drept', iif(l1<l2+l3, 'ascutit', 'obtuz')
*varianta a III-a*
a1=acos((b^2+c^2-a^2)/(2*b*c))
a2=acos((a^2+c^2-b^2)/(2*a*c))
a3=acos((a^2+b^2-c^2)/(2*a*b))
x=max(a1, a2, a3)
?iif (x=pi()/2,'drept',iif ( x<pi()/2), 'ascutit','obtuz' ))
*varianta a IV-a*
lmax=max(a,b,c)
l2l3=iif(max=a,'bc',iif(max=b,'ac','ab')
l2s=left(l2l3,1)
l3s=right(l2l3,1)
l2=evaluate(ls)
l3=evaluate(l3s)
?iif(lmax^2=l2^2+l3^2,'drept',iif(lmax^2<l2^2_l3^2,'ascutit'; ,'obtuz'))
Capitolul 4 Tipuri de date n Visual FoxPro i operaii specifice

51

Capitolul

Crearea tabelelor








Definirea structurii unui tabel 1


Modificarea structurii conceptuale a unui tabel
Editarea cmpurilor a unui tabel
Popularea (ncrcarea) tabelului cu date
Deschiderea i nchiderea unui tabel
Filtrarea structurii sau selectarea cmpurilor
Filtrarea articolelor

Definirea structurii unui tabel


Produsul FoxPro are la baz teoria algebrelor relaionale, dar identific noiunea de
relaie cu cea de fiier, atributele cu domeniile i cu cmpurile, iar tuplele cu articolele.
nume de tabel = FILE NAME

nume de coloan
= FIELD NAME

ELEVI.DBF
cod

nume

med

cls

......

101

TOMA

7.04

12a

......

102

VLAD

4.50

11b

......

antetul tabelei
= STRUCTURE
o linie n tabel
= RECORD

Figura 5-1: Structura unui tabel

n acest fel, tabela (relaia) este definit ca fiier secvenial cu extensia .DBF,
avnd articole de lungime fix i, ca prim nregistrare, un antet care reine structura
tabelei. Celelalte articole conin datele propriu-zise ale tabelei.
O baz de date este definit ca o colecie de tabele relaionate, mpreun cu indecii,
procedurile stocate i imaginile asociate tabelelor. Extensia acestui fiier este .DBC.
Proiectarea structurii unei tabele se poate realiza direct, prin definirea direct a
cmpurilor n cadrul comenzii CREATE TABLE, sau interactiv, prin comanda-ecran CREATE.
a. Comanda CREATE permite proiectarea interactiv a structurii. Din meniul sistem,
selectai File, New, Table. Apare fereastra de dialog Table Designer. Fereastra are trei
seciuni (tab-uri), dintre care vom lucra deocamdat doar cu tab-ul Fields, care permite
definirea informaiilor de structur. Astfel:
a) Name permite introducerea numelui cmpului pn la 10 caractere;
b) Type permite introducerea tipului de dat al cmpului poate fi numeric,
caracter, logic, dat calendaristic, Memo, General etc.;
c) Width permite specificarea altei lungimi a cmpului dect cea implicit;
d) Decimal permite introducerea numrul de poziii zecimale;
1 Sunt folosite i acceptate n domeniu denumirile tabel i tabel, convenie pe care o urmm i n manual.

52

Informatic Manual pentru clasa a XII-a

Cmpul este
reper index

Schimbarea
ordinii
cmpurilor

Tipul cmpului se
alege dintr-o list
nchis

Lungimea i numrul
de poziii zecimale

Cmpul poate
conine valori video

Se pot insera sau


terge cmpuri

Figura 5-2: Fereastra Table Designer

e) Index permite crearea unui index avnd cmpul curent drept cheie;
f) NULL este un comutator pentru acceptarea sau nu a valorilor nule.
b. Comanda CREATE TABLE permite specificarea direct a structurii:
CREATE TABLE/ DBF <fis.dbf> (<lista-definitii>)
<definitie>:=<nume-cmp> <tip>[([<lungime>], <zecimale>])]
Exemplu: Fie tabela ELEVI.DBF
nume
pren
cls
camin
absn
c, 20
c, 20
c, 3
l, 1
n, 2
Comanda de creare a acestei tabele este:

med
n, 5, 2

adr
m, 10

dn
d, 8

sit
c, 10

create dbf elevi (nume C(20), pren C(20), cls C(3), camin L,
absn N(2), med N(5,2), adr M, dn D, sit C(10))

Exemple

Proiectai structura unei tabele care s permit rspunsuri la diferite


ntrebri de felul celor din prima coloan. Observai n coloana a doua
modalitatea de analiz pentru stabilirea structurii.

Interogri

Analiza

1. Care sunt elevii colii, n ordine


alfabetic?

Tabela va trebui s conin numele i prenumele


fiecrui elev ca un singur cmp, de tip Caracter.
Pentru obinerea informaiilor ordonate alfabetic,
trebuie precizat cmpul drept criteriu de indexare!

2. Cine locuiete la cmin? Care


este adresa stabil a cminitilor?

Putem specifica printr-un cmp Logic dac


elevul este sau nu cminist. Pentru adres vom
folosi tipul Memo.
Capitolul 5 Crearea tabelelor

53

3. Care sunt elevii care i


srbtoresc azi ziua de natere
i n ce clas sunt ei?

Pentru rezolvare va trebui s reinem data


naterii (tip dat-calendaristic) a fiecrui elev
i clasa (tip caracter).

4. Care este situaia colar a


elevului POPA ION (promovat,
corigent, repetent)?

Putem reine mediile la toate obiectele, iar


comparnd aceste medii cu 5 s obinem situaia
cerut. Dar observm c nu exist alt referire la
mediile pe obiecte (sunt i multe!), deci vom
putea reine informaia solicitat ca text.

5. Care este cea mai mare


medie?

Prelucrarea tabelei va determina maximul dintre


valorile unui cmp. Media de absolvire va fi
definit ca tip numeric cu 2 zecimale.

6. Ct la sut din totalul absenelor


sunt nemotivate?

Interogarea necesit reinerea pentru fiecare


elev a absenelor nemotivate i motivate (tip ntreg)
i exprimarea procentual a raportului dintre
totalul absenelor i numrul celor nemotivate.

7. Sunt mai muli elevi cu numele


Popa Ion?

Tabela va conine pentru fiecare elev drept cheie


unic numrul matricol (tip ntreg).

8. Cum arat eful clasei a X-a A?

Pentru a reine fotografiile elevilor, vom proiecta


un cmp de tip General. Prelucrarea va
determina elevul cu media cea mai mare din
clasa a X-a i va afia fotografia sa.

Observaie. Proiectarea structurii trebuie s se fac analiznd cererile de informaii


n totalitatea lor i fixnd tipul fiecrei date care va fi reinut. Se va deschide apoi
ecranul de proiectare i se vor introduce informaiile de structur. Activitatea de analiz
este extrem de important. Unele cereri de informaii sunt date explicit de client, altele
trebuie s fie imaginate de ctre proiectant.

Modificarea structurii conceptuale a unui tabel


O tabel poate fi modificat prin aceeai fereastr Table Designer, deschis la
comanda MODIFY STRUCTURE sau selectnd View, Table Designer. Utilizatorul
poate terge, aduga sau insera cmpuri, poate modifica lungimea sau tipul unor
cmpuri. Datele existente vor fi copiate n noua structur prin verificarea numelui
cmpului din cele dou structuri. |n cazul n care coincid, datele vor trece n noua
structur, fcndu-se conversia la noul tip de cmp, dac este posibil.
Atenie! Modificarea structurii poate duce la pierderea datelor.

Editarea cmpurilor unui tabel


Folosii comenzile CHANGE/EDIT pentru afiarea cmpurilor tabelului n scopul
editrii.
54

Informatic Manual pentru clasa a XII-a

Popularea (ncrcarea) tabelului cu date


Utilizatorul poate introduce date n fiierul .DBF imediat dup salvarea structurii,
rspunznd afirmativ la ntrebarea sistemului: Input data records now? (Introducei
acum date?). O alt posibilitate de populare a tabelei este dat de comanda APPEND.
Datele sunt introduse conform tipului i lungimii declarate la proiectare.

Introducei valorile n cmpul de


Tip Memo sau General deschiznd
fereastra asociat, prin combinaia
<Ctrl>+<Home> sau prin dublu clic
pe cmp.
Pentru a insera o imagine n cmpul
General, selectai Edit, Insert
Object.
nchidei fereastra i salvai datele
folosind combinaia <CTRL>+<W>
sau prin clic pe butonul de nchidere.

Figura 5-3: Popularea tabelului

Deschiderea i nchiderea unui tabel


Orice operaie asupra unei tabele, cu excepia definirii structurii, impune
deschiderea acesteia, iar dup terminarea activitii asupra datelor respective, tabela
trebuie nchis. Deschiderea unui fiier tabel se face de ctre sistemul FoxPro ntr-o
zon de memorie numit zon de lucru (work area). ntr-o zon de lucru se poate
deschide o singur tabel.
Deschiderea unei tabele se poate face prin comanda USE n care se precizeaz
numrul zonei n care se deschide fiierul (clauza IN <zona>).
USE <fis.dbf> IN <zona> [ALIAS <nume-alias>] [AGAIN]
Tot prin comanda USE se poate asocia i un alias (un pseudonim, o prescurtare) n
vederea unei referiri mai clare att a cmpurilor, ct i a zonei n care s-a deschis fiierul
(clauza ALIAS). Clauza AGAIN permite deschiderea aceluiai fiier n dou zone.
nchiderea unei singure tabele se face prin comanda USE IN<zona> .
nchiderea tuturor tabelelor, indiferent de zona unde au fost deschise, se face prin
comanda CLOSE ALL . Zona de lucru care va deveni activ se precizeaz prin
comanda: SELECT <zona>/<nume-alias> .
Zona este precizat printr-un numr (sau o liter de la A la I) sau prin aliasul fiierului
deschis n zon. Ultima zon selectat se numete zon curent i toate referirile
implicite se vor face la aceasta. Comanda SELECT 0 deschide prima zon liber.

Capitolul 5 Crearea tabelelor

55

Calificarea cmpurilor i a variabilelor


Atunci cnd sunt deschise mai multe fiiere sau cnd exist variabile de memorie
cu acelai identificator ca al cmpurilor, se folosete operaia de calificare:
<alias>.<nume-cmp> i <M>.<nume-variabila> .

Exemple
Select 2
use profesori

Zona 2 va contine tabela Profesori.dbf.

modify structure

Modificarea structurii fiierului din zona curent.

use elevi in 1 alias EL


Select EL
select 0
create student
sele student
accept nume ? to Nume
? EL.Nume, m.Nume

Se deschide Elevi.dbf n zona 3 cu aliasul EL.


Poziionare pe zona 1 prin aliasul EL.
Deschiderea primei zone libere.
Crearea fiierului Student.dbf n zona liber.
Selectarea zonei prin aliasul fiierului.
Variabila Nume este creat prin citire.
Afiarea valorii cmpului Nume din primul articol
i a valorii citite n variabila cu acelai identificator.

Filtrarea structurii sau selectarea cmpurilor


Uneori este necesar ca o parte din cmpuri s fie active. Comenzile care opereaz
asupra tabelelor folosesc de obicei clauza Fields n care este precizat lista
cmpurilor active. O alt posibilitate este crearea unei liste de cmpuri (din una sau mai
multe tabele) de care se va ine seama sau nu.
SET FIELDS TO <lista-cmpuri> [/R] / ALL LIKE / EXCEPT <sablon>
tergerea listei de cmpuri i anularea comenzii de selecie se fac prin:
SET FIELDS TO . Activarea listei de cmpuri reinut anterior sau dezactivarea ei se
fac prin: SET FIELDS ON/OFF .

Filtrarea articolelor
Operaia de filtrare a articolelor care vor suporta efectul unei comenzi este realizat
prin clauzele: <domeniu>, FOR, WHILE. Dac aceeai selecie va fi folosit de mai
multe ori, este util comanda:
SET FILTER TO [<cond>]
Comanda permite accesul numai la articolele care ndeplinesc condiia <cond>.
Spunem c se deschide un filtru pe baza de date, care va fi activ pn cnd se
nchide baza de date (prin USE, CLOSE DATABASES) sau se nchide filtrul prin SET
FILTER TO.
56

Informatic Manual pentru clasa a XII-a

Studiu de caz

BIBLIOTECA
Relum activitatea de proiectare a structurii tabelelor, innd cont
de informaiile solicitate i rezolvarea cererilor.

1. Care sunt crile existente


(titlu, autor, editura, editia,
pre)?

S presupunem c biblioteca are un singur exemplar dintr-o


carte, deci putem lua drept cheie numrul de inventar. Tabela
Carti va cuprinde titlul, numele autorului, editura (cmpuri tip
ir de caractere), iar ediia i preul vor fi date numerice.

2. Ce cri au intrat sau au


ieit dup 1994?

Completm structura Crti cu atributele an-intrare i anieire de tip Dat calendaristic.

3. Lista crilor din colecia


De dragoste.

Este necesar n tabela Carti atributul colectie de tip ir de


caractere.

3. Lista cititorilor nscrii la


bibliotec mai mici ca 15 ani.

Este necesar n tabela Cititori atributul data-naterii, de tip


dat calendaristic.

4. Sunt i profesori de la
Liceul de Informatic inscrii
la bibliotec?

Atributele ocupaie i loc de munc vor fi incluse n tabela


Cititori. Le vom defini ca iruri de caractere.

5. Sunt cititori restanieri?

Vom filtra tabela Operaii pentru data restituirii necompletat


i numrul de zile de la data mprumutului peste 14. Dac
numrul de articole accesibile este diferit de zero afim da.

6. Care a fost ultimul


mprumut nregistrat? Cine
a mprumutat i ce carte?

n tabela Operaii ne vom poziiona pe ultimul articol i vom


afla din tabela Carti titlul i din tabela Cititori numele
persoanei.

Structura bazei de date este format din tabelele Carti1,noperatii i


Cititori1,noperatii. Tabelele vor avea structura:
Carti (cod-carte, titlu, autor, editura, colectia, pret, an-intrare, an-iesire)
Cititori (cod-cititor, nume, data-nastere, adresa, telefon, ocupaia, loc-munca)
Operaii (cod-carte, cod-cititor, Data-impr, Data-rest)

sarcini de laborator
I.

Creai structura tabelelor pentru baza de date Bibiloteca.

II.

Creai structura unei tabele FACTURI.DBF cu date despre facturile neachitate


(identificate prin numr, data, valoare) trimise de ctre furnizori (nume-furnizor, adresa,
telefon). Presupunem c la sosirea unei facturi se adaug o nou linie, iar la achitare
se terge linia.
Nrfact
n,5

data
d,8

furnizor
c,10

adr
c,10

tel
n,8

valoare
n,8
Capitolul 5 Crearea tabelelor

57

Dac dorim s cunoatem informaiile despre un furnizor, le vom putea obine doar
dac acesta are facturi neachitate. Este firesc? Cum se poate schimba structura astfel
nct s eliminm aceast anomalie? Cum se numete operaia?
1. Introducei date prin APPEND. Adugai valori fictive n cmpurile Furnizor, adr,
tel pe toat lungimea atributelor. Observai trecerea automat la urmtorul cmp
la depirea lungimii declarate a cmpului curent. Observai avertizarea sonor.
2. Lansai comanda SET CONFIRM ON; reluai adugarea de valorilor; observai
terminarea lungimii unui cmp; se trece automat la urmtorul cmp?
3. Vrem s introducem mai multe facturi ale aceluiai furnizor, deci numele, adresa
i telefonul se vor repeta. Pentru a facilita introducerea datelor, ncercai
comenzile SET CARRY TO i SET CARRY ON/OFF.
4. Lansai comanda SET DATE cu diferite formate, prelund formatul general din
HELP. Observai schimbarea datei calendaristice peste tot n tabel, sub efectul
momentan al comenzii.
5. Modificai structura, schimbnd tipul cmpului NRFACT la ir, iar numele la NRF.
Afiai datele. Ce se ntmpl cu valorile din primul cmp?
6. Modificai cmpul FURNIZOR prin redimensionarea la 4 caractere. Afiai.
Modificai lungimea cmpului VALOARE prin micorare la 4 poziii. Afiai.
7. Schimbai ordinea cmpurilor, punnd pe prima poziie numele furnizorului i
apoi numrul facturii. Afiai. S-au piedut valori?
III. Evidena judectorilor din diferite judectorii i a activitaii fiecrui judector este
inut n fiierul JUDECATORI. Proiectai structura necesar pentru a afla:
1.
2.
3.
4.
5.

Cte cazuri de trafic de valut au fost anul acesta comparativ cu anul trecut?
Care au fost dosarele n care verdictul a fost achitat?
n ce dosare s-a dat pedeapsa maxim?
La ce dosare (cazuri) a lucrat persoana X?
Cte dintre cazurile la care a lucrat anchetatorul X au fost abandonate?

sarcini pentru realizarea


unui mini-proiect
Proiectai structura fiecrei tabele din baza de date specific aplicaiei alese de
echipaj. Atenie la interogrile posibile. Imaginai cereri de informaii pentru a folosi
toate tipurile de date cu care poate lucra Visual FoxPro.

58

Informatic Manual pentru clasa a XII-a

Capitolul

Vizualizarea, cutarea
i sortarea datelor





Vizualizarea coninutului unei tabele


Vizualizarea structurii unei tabele
Cutare secvenial i poziionare n baza de date
Sortarea i duplicarea unei tabele

Vizualizarea coninutului unei tabele


Afiarea informaiilor dintr-o tabel se face prin comenzile:
LIST / DISPLAY [<lista-expr>] [<domeniu>] [FOR <cond>]
[WHILE<cond>] [TO PRINTER/TO FILE <fis.txt> ] [OFF]
n absena oricrei clauze, comanda LIST afieaz ntreaga tabel, iar comanda
DISPLAY afieaz articolul curent. Clauza <lista-exp> enumer expresiile care vor
fi afiate. Clauza OFF dezactiveaz afiarea numrului articolului naintea primului
cmp. Clauza <domeniu> poate avea valorile:
Valoare
ALL
NEXT <n>
REST
RECORD <n>

Efect
Specific toate articolele fiierului.
Urmtoarele <n> articole fa de articolul curent.
Toate articolele pn la sfritul fiierului.
Selecteaz doar articolul cu numrul <n>.

Clauza FOR <cond> permite selectarea articolelor care ndeplinesc condiia;


condiia este verificat pe tot domeniul indicat sau implicit. Clauza WHILE permite
selectarea articolelor ct vreme condiia este adevrat. Execuia comenzii nceteaz
la primul articol care nu ndeplinete condiia din While.
Clauza WHILE presupune mai intai verificarea conditiei, apoi executarea codului (de
un numar de ori care poate ajunge chiar si la infinit), iar clauza FOR are adesea un
contor sau o variabila de ciclare, ce permite cunoasterea numarului de iteratii.
Fie tabela Studenti cu informaii despre studenii unei faculti. Vom
reine codul, numele, grupa, anul i numele unui curs opional.
use studenti
list
&& LIST are domeniul implicit ALL

Exemplu

#
cods
1
1
2
2
3
3
4
4
5
5
Go top

numes
grupa
Dumitru Alina
1
Luca Stefan
1
Amarandei Ion
1
Alexa Ioana
2
Nucu Mary
3
&& poziionare pe primul

anul
1
1
2
1
2
articol

numec
info
mate
info
engleza
chineza

Capitolul 6 Vizualizare, cutare, sortare

59

List "*", grupa, "*", numes while anul =1 && afiare ct vreme anul=1
#
1
2

*
*
*

grupa
1
1

*
*
*

nume
Dumitru Alina
Luca Stefan

List "*", grupa, "*", numes for anul =1 &&afiare studeni din anul=1
&& observai rspunsul sistemului
#
1
2
4

*
*
*
*

grupa
1
1
2

*
*
*
*

nume
Dumitru Alina
Luca Stefan
Alexa Ioana

numec
info
mate
engleza

Vizualizarea structurii unei tabele


Vizualizarea structurii unei tabele se realizeaz prin comenzile:
DISPLAY/LIST STRUCTURE
Comenzile au ca efect afiarea structurii tabelei deschise n mod curent n zona de lucru.

Cutare secvenial i poziionare n baza de date


Cutarea se poate face att secvenial (pe tabele neordonate), ct i rapid, pe
tabele indexate, aa cum vom vedea n leciile urmtoare. Toate comenzile de cutare
poziioneaz pointerul de fiier pe prima apariie a cheii, dac aceasta este gsit.
Comand
Efect
LOCATE FOR <cond>
Cutare i poziionare pe articolul care ndeplinete
[<domeniu>]
condiia <cond>. Cutarea se face ntr-un domeniu dat
(domeniul implicit este ALL).
CONTINUE
Poziionare pe urmtoarea nregistrare care respect condiia.
=LOOKUP(<cmp1>,
Returneaz valoarea cmpului <cmp1> din primul articol,
<exp>, <cmp2>)
unde <cmp2> are valoarea egal cu <exp>, altfel irul vid.
=FOUND()
Returneaz .T. dac articolul a fost gsit.
=EOF() / BOF()
Returneaz .T. dac suntem poziionai la sfritul
tabelei sau naintea primului articol.
GO TO <n>[In <Z>]
Poziionarea fizic a pointerului fiierului curent (n lipsa
GO BOTTOM/TOP
clauzei IN) sau a tabelei deschise n zona <Z>. Poziionarea
se poate face pe primul articol (TOP), pe articolul cu numrul
<n> sau pe ultimul articol (BOTTOM). La deschiderea unei
tabele, pointerul se poziioneaz pe primul articol.
SKIP [+/-]<n>[IN <z>] Salt cu avans (+) sau devans (-) n tabel, peste <n> articole.
=RECNO()
Numrul articolului curent.

Exemplu
#
1
2
60

cods
1
2

Fie tabela STUDENT.DBF cu urmtorul coninut:


numes
Dumitru Alina
Luca Stefan

Informatic Manual pentru clasa a XII-a

grupa
1
1

anul
1
1

numec
info
mate

3
4
5

3
4
5

Amarandei Ion
Alexa Ioana
Nucu Mary

1
2
3

2
1
2

info
engleza
chineza

Use student
? recno()
1
skip -1
? bof()
.T.
locate for anul=2
? eof ()
.F.
display numes
Amarandei Ion
continue
display numes
Nucu Mary
continue
End of locate scope
? eof ()
.T.

Deschiderea tabelei
Poziionare pe pe primul articol

?lookup(numes,1,grupa)
Dumitru Alina
Skip 1
?lookup(numes,1,grupa)
Dumitru Alina

Aflm numele primului student din grupa 1

Devans cu o poziie
funcia BOF ntoarce true
Cutm un student din grupa 2; poziionarea s-a
facut n interiorul fiierului:
funcia eof() returneaz fals.
Afim articolul cutat
Cutm un alt student din grupa 2

Mesajul de cutare fr succes; suntem la sfritul


fiierului? Da

Facem saltul peste articolul gsit


O nou cutare nu schimb rezultatul

Zonele de lucru sunt izolate. Modificarea pointerului de nregistrare ca urmare a unei


aciuni ntr-o tabel nu poate determina modificarea pointerului alteia, deschis n alt
zon de lucru. Fac excepie de la aceast regul fiierele nlnuite cu SET RELATION.

Sortarea i duplicarea unei tabele


a. Comanda SORT rearanjeaz fizic articolele tabelei active, depunndu-le ntr-o
alt tabel, indicat n comand prin clauza TO.
SORT TO <fis.dbf> ON <cheie> [/A] [/D] [/C]
[ASCENDING/ DESCENDING] [FIELDS <lista-camp>]
[<domeniu>] [FOR <cond>] [WHILE <cond>]
Criteriul de ordonare este format din una sau mai multe chei. O cheie este un cmp
al tabelei. Se pot folosi toate cmpurile, cu excepia celor de tip Memo i General.
Pentru fiecare cheie se specific sensul ordonrii: /A=cresctor, /D=descresctor.
Litera C se folosete pentru a ignora tipul literei. Clauzele ASCENDING i DESCENDING
se folosesc la nivelul ntregului criteriu de ordonare. Dac apar att clauzele locale de
indicare a sensului asupra unei chei, ct i cele globale, primele au prioritate.

Atenie
Operaia de sortare duplicheaz datele! Este preferabil ca dup folosirea rezultatelor sortrii s tergei fiierele de manevr i s pstrai baza de date iniial.
Capitolul 6 Vizualizare, cutare, sortare

61

b. Comanda COPY permite copierea ntregului coninut al unei tabele (sau o parte
din ea) n alt tabel.
COPY TO <fis.dbf> [FIELDS <lista-cmp>][STRUCTURE]/
[[<domeniu>] [FOR <conditie>] [WHILE <conditie>]]
Articolele tabelei active vor fi copiate ntr-o nou tabel, al crei nume este precizat
n clauza TO <fis.dbf>. Clauzele de selecie a cmpurilor (FIELDS) i de filtrare
<domeniu>, FOR, WHILE permit fixarea structurii i a coninutului noii tabele.

Exemple
1. Dorim afiarea elevilor din Iai pe clase, pentru fiecare clas n ordinea
descresctoare a mediilor, iar la medii egale n ordine alfabetic.
Considerm structura Elevi(cod N(5), nume C(10), clasa C(3), adresa M, Media N(5,2)).
Use elevi
Sort on cls/ac, media/d, nume/ac to man for "iasi" $ adresa
Use man
List
2. Dorim spargerea tabelei Elevi n dou tabele, Caminiti i Externi, fiecare din ele
avnd datele ordonate alfabetic.
Use elevi
Sort on nume to man
Use man
Copy to caminist for caminist
Copy to externi for not caminist
Use
Erase elevi.dbf
Erase man.dbf
3. Relum interogrile2 folosite la identificarea tipurilor de date n baza de date
BIBLIOTECA i le rezolvm. Vom deschide tabele n trei zone:
Use carti in 1
Use cititori in 2
Use operatii in 3
a) Care sunt crile
existente (ordonate
dup autori)?

sele 1
sort on autori to man
use man
list titlu,autori,editura,colectia,pret

b) Ce cri au intrat sau


au ieit dup anul 1994?

sele carti
list titlu, autori for an-intrare>=1994 or;
an-iesire>=1994

c) Care este lista crilor


din colecia De dragoste?

sele carti
list for colectie=dragoste

d) Care este lista cititorilor


nscrii care au vrsta sub
15 ani?

sele 2
list for year(date())-year(data-nastere)<15

62

Revedei lecia crearea tabelelor


Informatic Manual pentru clasa a XII-a

Sele cititori
e) Sunt i profesori de la
Liceul de Informatic nscrii Locate for ocupatie="prof" and;
loc-munca="informatica"
la bibliotec?
? iif (found() "da", "nu")
f) Sunt restanieri?

sele operatii
set filter to empty(data-rest) and;
date()-data-impr>14
copy to man
use man in 4
? iif (reccount(4)=0,"nu", "da")

g) Care a fost ultimul


mprumut nregistrat?
Cine a mprumutat i
ce carte?

sele operatii
go bottom
sele carti
? lookup(titlu, a.cod-carte, b.cod-carte)
sele cititori
?? lookup(nume, a.cod-cititor, c.cod-cititor)

sarcini de laborator
I.

Fie urmtoarele tabele:

ECHIPE (echipa C(9),grupa C(1))


JUCATORI (nume C(9), echipa C(9),
intrare D, iesire D)
CAMPIONAT (e1 C(9), e2 C(9), data D,
loc C(9),p1 N(2), p2 N(2), arbitri M)

Conine numele i grupa fiecrei echipe.


Este un istoric cu echipe i juctori.
Pstreaz meciurile campionatului.

Sarcini3:
1. Afiai echipele n care a jucat Popescu i cnd.
2. Afiai arbitrii care au fost la primele 3 meciuri.
3. Afiai unde a arbitrat Popescu, la ce meciuri, cnd.
4. Afiai echipele din grupa A.
5. Afiai componena echipei RAPID (la ultimul joc).
6. Afiai localitile unde a jucat sau va juca echipa Rapid.
7. Afiai echipele care au jucat acas i au pierdut.
8. Afiai componena echipelor care joac la data {01.06.99}, pe stadionul
Plieilor. Presupunem c este un singur meci.
9. Afiai cpitanii celor dou echipe care joac n primul meci nregistrat
(presupunem c prima persoana trecut n fiier la o echip este cpitanul).
10.Doi prieteni fotbaliti, Albu i Barbu, se ntlnesc n campionat de dou ori (tur i
retur). Aflai data i locul.
11.Listai programul competiional de sptmna viitoare ordonat cronologic.
12.Afiai meciurile dup numele echipei (care joac acas), iar pentru fiecare
echip dup data desfurrii.
3

Vedei sugestii de rezolvare la sfritul crii.


Capitolul 6 Vizualizare, cutare, sortare

63

II.

Organizai datele i scriei comenzile pentru urmtoarele sarcini:

1. Lista tuturor persoanelor care locuiesc la adresa X.


2. Care sunt proprietile unei persoane X date prin buletinul de identitate?
3. Situaia imobilelor de pe strada X sub forma urmtorului raport:
nrc

tip imobil

suprafaa

nr apartamente

tip nclzire

(vil, bloc, cas)


4. Care sunt apartamentele unde locuiesc mai mult de dou persoane ntr-o camer?
5. Cte apartamente sunt proprietate personal n imobilul X?
III. Stabilii structura bazei de date pentru urmtoarea situaie-problem!
Compania naional de electricitate dispune de un sistem de eviden a consumului
de energie electric i a achitrii sumelor datorate de consumatori.
1. Exist lucrtori CONEL care citesc periodic contoarele fiecrui abonat i ncaseaz sumele corespunztoare consumului (pentru perioada anterioar citirii).
2. Uneori se modific preul unitar pe KW/H la energie electric pentru consumatorii
casnici sau industriali (tim c sunt preuri diferite!).
3. nscrierea unor consumatori noi se face pe baza unei cereri de conectare la
reea, ocazie cu care se achiziioneaz i un contor nou, care este montat i citit
de lucrtorii firmei.
4. Scoaterea din eviden se poate face la cererea abonatului sau la deconectarea
de la reea (penalizare din cauza restanelor).
5. Facturarea nseamn calculul sumelor de achitat pentru fiecare consumator i
expedierea facturilor la consumatori prin angajai speciali.
6. Achitarea unei facturi se face fie direct la angajaii CONEL care aduc acas
factura, fie la sediul firmei (caz n care trebuie prezentat factura!).
7. Trebuie avertizate persoanele restante la plata energiei (care au cel mult 2 luni
de ntrziere). Pentru fiecare lun de ntrziere se percepe o tax!
8. Dac nu este achitat factura pe 3 luni, are loc deconectarea de la reeaua de
distribuie.
IV. Imaginai activitatea desfurat de ROMTELECOM! Prin ce difer de CONEL?
Putem avea acelai model de baz de date? Gsii i alte domenii de activiti similare.

sarcini pentru realizarea


unui mini-proiect
Imaginai operaii de vizualizare, cutare i sortare a datelor din baza de date
specific domeniului analizat. Scriei comenzile necesare.

64

Informatic Manual pentru clasa a XII-a

Capitolul

Actualizarea datelor







Adugarea articolelor
tergerea articolelor
Modificarea sau corectarea datelor
Actualizarea interactiv a tabelelor
Lucrul cu cmpurile de tip Memo
Lucrul cu cmpurile de tip General

Adugarea articolelor
Adugarea articolelor se face la sfritul tabelei active, fie prelund datele n mod
interactiv, prin introducerea lor direct de ctre operator, fie din alt tabel Fox, fie dintr-un
masiv (tablou de memorie), fie chiar din alt tip de fiier (Excel, text etc.). Vom discuta
pe rnd toate aceste modaliti de adugare a datelor pe parcursul mai multor lecii.
a. Adugarea unui articol vid. Un cmp vid are una dintre valorile: zero pentru
cmpul numeric, spaiu pentru cmpul caracter, .F. (fals) pentru cmpurile logice,
valoarea {} sau { / / } pentru dat calendaristic. Comanda de adugare
este APPEND BLANK.
b. Comanda APPEND FROM pemite adugarea la tabela activ a datelor din alt
tabel, specificat n clauza FROM.
APPEND FROM <fis.dbf> [FOR <cond>] [FIELDS <lista-cmp>]
n mod implicit, sunt preluate toate cmpurile. Condiia din clauza FOR este testat
dup plasarea articolului pe noua structur. Clauza FIELDS permite selectarea
cmpurilor care vor fi folosite la adugare.

Exemplu

#
1
2
3*

cods
10
2
5

tiind c n fiierul CONCURS.DBF (cods, numes, bi, facultate, media,


admis) sunt nregistrai participanii la concursul de admitere la
facultate, copiai nregistrrile celor care au reuit n tabela STUDENTI
(cods, numes, grupa, anul), existent deja.
numes
Dumitru Alina
Luca Stefan
Andrei Sara

grupa
1
1
5

anul
1
1
2

numec
info
mate
italo

Use studenti
Append from concurs
from admis

Eronat. Condiia dat n clauza FOR este testat


dup plasarea articolului pe noua structur, iar
tabela Student nu are cmpul admis.

use concurs
copy to man for admis
use studenti
append from man fields
nume,bi,media

Corect. n mod implicit se preiau date din toate


cmpurile cu acelai nume Clauza FIELDS
permite selectarea cmpurilor care vor fi folosite
la adugare.

Capitolul 7 Actualizarea datelor

65

tergerea articolelor
Operaia de tergere a articolelor dintr-o tabel activ se realizeaz n dou etape:
Etapa 1. Are loc o tergere logic sau o marcare pentru tergere, care poate fi
ignorat sau nu de comenzile de cutare sau afiare i care poate fi anulat prin
comanda RECALL.
Etapa 2. Are loc o tergere fizic efectiv, situaie n care datele sunt pierdute definitiv.
a. Comanda DELETE marcheaz pentru tergere articolele care ndeplinesc
condiiile de filtrare. Comanda acioneaz pe articolul curent.
DELETE [<domeniu>] [FOR<cond>] [WHILE<cond>]
Marcarea pentru tergere nu influeneaz nici comanda de afiare (observm *
naintea primului cmp!), nici o eventual cutare prin LOCATE, o copiere (COPY) sau
o sortare (SORT) etc. Acest lucru se datoreaz valorii OFF pe care este poziionat
implicit comanda comutator SET DELETED ON/OFF. Setarea comutatorului pe valoarea
ON determin ignorarea articolelor marcate pentru tergere.
Pentru a afla dac un articol este sau nu marcat pentru tergere se folosete funcia
DELETED([<zona>]) care returneaz .T. dac articolul curent din zona indicat prin
<zona> este marcat pentru tergere.
b. Comanda PACK permite tergerea fizic din fiier a tuturor articolelor marcate
anterior, fr posibilitatea de recuperare a datelor. Clauza MEMO este folosit pentru
diminuarea spaiului de disc nefolosit din fiierul Memo asociat, fr a afecta baza de
date. Clauza DBF este folosit la tergerea articolelor marcate din baza de date, fr a
modifica fiierul Memo asociat.
PACK [MEMO][DBF]
c. Comanda ZAP permite tergerea definitiv din fiier a tuturor articolelor, fr
marcarea prealabil.
d. Comanda RECALL permite revenirea unui articol la starea anterioar operaiei de
tergere, numai n cazul unei tergeri logice.
RECALL [<domeniu>] [FOR<cond>] [WHILE<cond>]
Aciunea comenzii are articolul curent ca domeniu implicit.

Exemplu

use student
delete for cods>=5
recall all for grupa # 1
pack

66

&& implicit comutatorul SET DELETED este OFF

use studenti
delete record 3
list

&& articolul 3 este marcat pentru tergere


Deschidem baza de date din exemplul anterior
Marcm articolele cu cods>=5
Anulm marcarea celor care au grupa<>1
tergem efectiv articolele din grupa 1 cu cod>6.

Informatic Manual pentru clasa a XII-a

Modificarea sau corectarea datelor


Pentru corectarea valorilor din tabela cea mai recent selectat cu expresii ce pot fi
evaluate n momentul executrii comenzii se folosete comanda REPLACE, cu formatul:
REPLACE <cmp1> WITH <exp1> [, <cmp2> WITH <exp2>...]
[domeniu] [FOR<cond>] [WHILE<cond>]
Comanda permite nlocuirea valorii existente n cmpul <cmp1> cu valoarea
expresiei <exp1>, a valorii existente n <cmp2> cu valoarea <exp2>. Domeniul
implicit este articolul curent. Se pot folosi clauzele de filtrare <domeniu>, FOR, WHILE.

Exemplu
#
1
2
3

cods
11
23
34

Fie tabela STUDENT.DBF cu urmtorul coninut:


numes
Dumitru Alina
Luca Stefan
Amarandei Ion

grupa
1
1
1

anul
1
1
2

fac
info
mate
info

use student
repl all cods with recno() && modificm peste tot codul la numar articol
repl grupa with 4, anul with 5 for numes=[Luca]
list
&& observai corecia fcut!!
#
1
2
3

cods
1
2
3

Numes
Dumitru Alina
Luca Stefan
Amarandei Ion

grupa
1
4
1

anul
1
5
2

fac
info
mate
info

Actualizarea interactiv a tabelelor


Comanda BROWSE este una dintre cele mai folosite comenzi pentru vizualizarea i
actualizarea datelor. Efectul ei este afiarea tabelei active pe linii i coloane.

Figura 7-1: Tabela afiat prin comanda Browse


Capitolul 7 Actualizarea datelor

67

Pe prima linie sunt afiate denumirile cmpurilor din structura tabelei, iar n
continuare sunt liniile cu date.
Formatul comenzii cu cele mai uzuale clauze este:
BROWSE [FIELDS <cmp1> [:R][:V][<cmp-calc1>=<exp1>]
[LOCK < nr>][<domeniu>][FOR <conditie>][FREEZE <nume-cmp>]
[NOAPPEND] [NOMENU] [NOEDIT] [NODELETE]
Clauza FIELDS permite enumerarea cmpurilor care vor forma coloanele
tabelului; n lipsa clauzei se rein toate cmpurile din baza de date, n ordinea
structurii. Pentru un cmp putem interzice editarea [:R] sau putem preciza
condiia de validare la introducerea valorilor n cmpul respectiv [:V]. n lista de
cmpuri pot aprea i cmpuri calculate care primesc un nume i o expresie de
calculare. Cmpurile calculate nu pot fi editate, ci numai afiate, dar valorile din ele
se modific odat cu modificrile n cmpurile ce formeaz expresia de calculat.
Clauzele <domeniu> i FOR permit selectarea liniilor care vor fi afiate n
fereastr dup comanda Browse.
Clauza LOCK <nr> permite nghearea pe ecran a primelor <nr> coloane
(cmpuri) n timpul derulrii prin BROWSE spre stnga sau spre dreapta. Se
recomand ca n structura conceptual s fie afiate informaiile de identificare
a unui obiect la nceput. Dac, totui, acest lucru nu este realizat, putem schimba
ordinea de afiare pe ecran a cmpurilor prin clauza FIELDS, astfel nct s
avem pe primele coloane succesive informaiile necesare.
Clauza FREEZE <nume-cmp> permite meninerea cursorului pe o singur coloan.
Clauza NOAPPEND interzice adugarea de noi articole n fiier; n lipsa clauzei
este posibil adugarea.
NOMENU nu afieaz linia de meniuri i impiedic accesul la meniuri.
NODELETE impiedic tergerea accidental de articole.
NOEDIT interzice editarea articolelor.

Exemplu

68

Fie fiierul ELEVI.DBF(Matr N(3), nume C(10), cls C(3), adr M, camin L,
poza G, absm N(2), absn N(2), foto G, med N(5,2)). Sarcini:

Afiai toi elevii, nghend primele


3 coloane.

Browse lock 3

Afiai numai numele i clasa elevilor,


precum i totalul absenelor.
Numele nu poate fi modificat!

browse fields cls'nume:R';


absente=absn+absm

Afiai numai elevii din clasa a IX-a A.

browse for cls= 9a

Afiai primii 20 de elevi, fixnd


pentru modificare cmpul Absm.

browse next 20 freeze absm

Afiai elevii clasei a XI-a B, avnd drept


coloane nume_elev, clasa, media.

Browse fields nume:H

Informatic Manual pentru clasa a XII-a

Odat cu afiarea ferestrei prin Browse pe


bara de meniuri apare un submeniu numit Table.
Properties deschide o caset de dialog care
permite filtrarea datelor, selectarea cmpurilor,
precizarea indexului activ etc.
Go to Record permite poziionarea pe o anumit nregistare, dat prin numrul ei sau prin
cutare cu Locate.
Append New Record adug o linie nou.
Toggle Deletion Mark marcheaz pentru
tergere linia curent.
Append Records permite compunerea
comenzii APPEND FROM.
Delete Records deschide caseta de dialog
pentru tergerea articolelor.
Recall Records permite anularea marcajelor
de tergere.
Figura 7-2: Meniul Table
Remove Deleted tege efectiv articolele marcate.
Replace Field deschide ecranul pentru compunerea comenzii Replace.
Size Field permite modificarea interactiv a dimensiunii cmpului pe care este
cursorul (dimensiunea se schimb prin clic).
Move Field permite schimbarea ordinii coloanelor. Se selecteaz o coloan i se
execut tragere i plasare (drag and drop) pe noua poziie.
Resize Partitions permite afiarea tabelei n dou partiii.

Figura 7-3: Dou partiii ale tabelei

Pentru separare, se poziioneaz cursorul n colul din stnga jos (colorat cu negru)
i se trage partiia pn la obinerea dimensiunii dorite. Cele dou partiii pot avea o
evoluie independent sau nu (Link Partitions).

Capitolul 7 Actualizarea datelor

69

Studiu de caz

BIBLIOTECA
Studiul de caz conine prezentarea operaiilor de actualizare
pentru baza de date analizat:

1. Scoaterea din evidena bibliotecii a unui cititor se face la cererea sa. Se vor terge i
articolele din tabela Operaii. Dac are restane, va aprea un mesaj.
Se citete numele cititorului care se
retrage.

Accept 'nume cititor' to x

Se caut n tabela CITITORI i se


reine codul.

Sele cititori
Cod=lookup(cod_cit, x, nume)
Delete all for nume=X
Pack

Din tabela OPERAII se copiaz


ntr-o singur operaie toate articolele
cititorului care au data_restituirii
necompletat, pentru a vedea dac
are restane.

Sele operatii
Set filter to cod_cit=y
Copy to man2 for empty(data_rest)
Delete all
Pack

Este afiat un mesaj dac sunt cri


nerestituite.

Use man2 in 4
? IIf(reccount(4) #0,"sunt restante","")

2. mprumutarea unei cri:


Se citete codul crii.

Input cod carte=" to codx

Se citete codul cititorului.

Input cod cititor=? to cody

Se adaug o nou operaie de


mprumut.

Select operatii
Append blank
Replace cod_carte with codx, cod_cit
with cody, data_impr with date()

3. Restituirea unei cri:


Se citete codul crii i al cititorului.

Input "cod carte" to x


Input "cod-cititor" to y

Se caut articolul i se completeaz


data restituirii. Presupunem c datele
sunt corecte, altfel ar trebui folosit
structura alternativ, pe care o vom
nva mai trziu!

Select operatii
Locate for cod_carte=x and cod_cit=Y
and data_rest={//}
replace data_rest with date()

4. nscrierea unui cititor se face pe baza solicitrii acestuia:


Se citete codul cititorului, numele,
adresa.

70

accept
Accept
Accept
Accept

Informatic Manual pentru clasa a XII-a

"cod-cititor" to X
"nume? " to y
"adresa?" to Z
"data nasterii?" to w

Se caut articolul i se completeaz


data restituirii. Presupunem c datele
sunt corecte, altfel ar trebui folosit
structura alternativ, pe care o vom
nva mai trziu!

Select cititori
Append blank
replace cod_cit with val(x)
replace nume with y, adresa with y
replace data_n with ctod(w)

5. La un control s-au constatat nite nereguli. Urmrii n prima coloan aceste


neregului, iar n cea de-a doua aciunile de corectare.
a) Exist cri vechi, deteriorate sau
pierdute, care ar trebui trecute n alt
eviden!

Select carti
delete for uzat
copy to deterior for deleted()
pack

b) Nu a fost aplicat majorarea


preului cu 25% la toate crile intrate
n bibliotec nainte de anul 1990!

replace all pret with pret*125 for


year(dataintr)<=1990

c) Editura ALBATROS i-a schimbat


numele n PINGUIN la 1 septembrie
1992. Nu s-a fcut aceast modificare!

set date to german


replace editura with 'PINGIUN' for
editura= 'ALBATROS' and
dataintr>={01.09.92}

d) Numele autorului G. B. SHAW a


fost scris greit, sub forma G.B.SOU.

repl autor with 'G. B. SHAW' for


autor= 'G.B.SOU'

e) Crile autorului POPA ION ar


trebui marcate, ntruct s-a dovedit c
este un plagiator, chiar dac numai
crile aprute dup revoluie, vor fi
scoase definitiv din eviden!

delete all for upper(autor)=POPA ION


recall for dataintr<={22.12.89}
pack

f) De ce sunt manualele trecute n


fiierul Manuale.dbf dac are
aceeai structur? Concatenai
fiierele de cri i de manuale!

Use manuale
Replace all alte_inf with "manual"
Use carti
Append from manuale
Use
Delete file manuale.dbf

g) Nu au fost listate separat


manualele!

Use carti
List for alte_inf=manual" to print

h) Mutai cartea de cod =200 sfritul


tabelei Carti.
Vom scrie un program lansnd editorul
de programe cu Modify Command.
Vom apela prin DO <nume>

Var 2.prg
use carti n 1
use carti n 2 again
sele 1
locate for cod_carte=200
sele 2
append blank
replace b.titlu with a.titlu
replace b.autor with a.autor
....etc se vor copia toate campurile
sele 2
use
sele 1
delete
pack

Var 1.prg
use carti
copy to man for
cod_carte=200
pack
append from man
erase man.dbf

Capitolul 7 Actualizarea datelor

71

sarcini de laborator
I.

Sarcini de actualizare interactiv a tabelelor prin comanda Browse

1. Vizualizai prin ecranul Browse tabelele bazei de date BIBLIOTECA


2. Executai urmtoarele manevre:
a) adugai un articol; poziionai-v pe articolul 3; tergei articolul 4;
b) modificai preul tuturor crilor editurii Ciumafaiul prin majorare cu 10%;
c) modificai interactiv numai preul crilor aprute dup 1 decembrie 1998;
d) poziionai-v pe primul articol i afiai titlul i autorul tuturor crilor;
e) tergei toate crile autorului D.R. Popescu;
f) afiai n fereastra Browse numai cititorii elevi n clasa a 9-a;
g) marcai pentru tergere primii doi cititori;
h) anulai marcajul pentru primul; tergei fizic al doilea cititor;
i) afiai n dou partiii tabela Carti; deplasai cursorul pe bara de derulare
orizontal n cadrul fiecrei partiii. Se vizualizeaz cmpuri aparinnd
acelorai nregistrri sau putei avea o deplasare independent? Cum?
II.

tiind c mai sunt manuale colare n tabela LICEU (Cod, titlu, clasa, autor,
editura, pret) adugai articolele n tabela CARTI.DBF (inventar, titlu, autor, pre,
editura, data-intrrii, data-ieirii, uzat, alte_inf). Titlul crii n tabela CARTI va conine
i clasa pentru care este manualul (de exemplu, Informatic clasa a IX-a).
LICEU.DBF
Titlu
Cls
Autor
Editura
pret
Informatica
IX
T.Sorin
L&S infomat
57000
Informatica
X
M.Cerchez
Polirom
45000
Care dintre cele dou variante rezolv problema?
Varianta 1.

Varianta 2.

use liceu
copy to man for cls=IX
use man
replace all titlu;
with alltrim(titlu)+ "cls."+ cls
use carti
append from man
erase man.dbf

use liceu
dele for between(cls, 9, 12)
repl titlu with;
titlu+cls for deleted()
use carti
append from manuale;
for deleted()

III. Fie un fiier PERSONAL inut pentru o societate, cu urmtoarele informaii (cod,
nume, numr-buletin, salar, data-naterii, nr_copii, alocaia, costul-ora-noapte, numrnopi, suma-spor-noapte, reineri, rest-plat). Se cere:
1.
2.
3.
4.

72

Afiai persoanele care lucreaz n societate.


Ce salariu are o persoan al crei nume este introdus de la tastatur?
Care sunt persoanele fr copii n funcii de administraie?
Alocaia de stat pentru copii se calculeaz ca o sum fix nmulit cu numrul
de copii. Trecei n baza de date alocaia.

Informatic Manual pentru clasa a XII-a

5. Modificai prin majorare cu 15% salariul lucrtorilor n funcii de contabilitate i cu


30% salariul celor n funcii de administraie.
6. Trecei codul unei persoane ca fiind chiar numrul articolului curent.
7. Afiai pentru fiecare persoan suma de primit, tiind c reinerile se scad, iar
sporurile i alocaia se adun la salar.
8. Trecei sporul de noapte ca fiind calculat dup formula:
spor noapte=salar mediu/zi*nr. nopi*0.17.
9. Afiai persoanele care au rest de plat <=0.
10.Toate persoanele care lucreaz n funcii de administraie, au copii i au peste
60 ani, se vor pensiona (marcare pentru tergere).
11.Afiai posturile care vor fi vacante dup pensionarea personalului.
12.Afiai numele persoanei care are codul 4. |naintea persoanei (cu codul 4)
inserai un articol vid, apoi completai cu date.
13.Completai acelai salariu cu al primei persoane la toate celelalte care au
aceeai funcie.
14.Presupunnd c seria buletinului de identitate este pe primele dou caractere,
s se afieze toate persoanele care au seria DK.
15.Schimbai datele persoanei cu buletinul X cu cele ale persoanei Y.
16.Afiai sub forma urmtoare datele din baza de date:
BI

nume

funcie

rest-plat

semntura

Lucrul cu cmpurile de tip Memo


Cmpul de tip Memo este necesar n principal pentru situaiile cnd trebuie
memorate cantiti variabile de informaii. De exemplu, pentru nregistarea studiilor
fiecrei persoane, zona respectiv va conine iruri de lungime variabil.
PERSONAL.DBF
nume

studii

POPA

ADR1

IONEL

ADR2

PERSONAL.FPT
Academia de Sudii Economice
Facultatea de Cibernetic, Bucureti
Liceul de Informatic, Iai

Dimensionarea cmpului la valoarea maxim (255 de caractere) nu rezolv


ntotdeauna problema (s-ar putea ca pentru unele persoane s fie i n acest caz
insuficient spaiu, iar spaiul pentru altele s rmn n mare parte nefolosit). Structura
devine ineficient prin mrimea ei. A aprut necesitatea depunerii informaiilor propriuzise (despre studii!) n alt fiier, sub forma blocurilor de text, fcnd legtura cu articolul
care ar trebui s le conin. Fiierul asociat poart acelai nume ca i baza de date, are
extensia .fpt i se deschide simultan cu aceasta.

Comenzi i funcii utile


Comanda
MODIFY MEMO <lista-cmp>

Efect
Deschiderea unei ferestre de editare pentru
fiecare cmp Memo dintr-o list dat.
Capitolul 7 Actualizarea datelor

73

Comanda
APPEND MEMO <memo>
FROM <fisier> [OVERWRITE]

COPY MEMO <memo> TO


<fis. txt> [ADDITIVE]

Exemple
#
1
2
3

cods
1
2
3

Efect
Introducerea datelor dintr-un fiier text n
cmpul Memo. Clauza Overwrite este
necesar cnd dorim suprascrierea coninutului
fiierului text peste vechiul coninut al cmpului
Memo. Operaia implicit este de adugare.
Extragerea dintr-un cmp Memo a informaiilor
ntr-un fiier text. Operaia implicit este de
suprascriere. Dac dorim ca vechiul coninut s
nu se piard, trebuie folosit clauza ADDITIVE.

1. Fie tabela STUDENT.DBF


numes
Dumitru Alina
Luca Stefan
Amarandei Ion

grupa
1
1
1

anul
1
1
2

alte_inf
Memo
Memo
Memo

Vrem s afim informaiile din cmpul alte_inf pentru persoanele din Iasi.
Observai plasarea numelui de cmp Memo n comanda List!
use student
list alte_inf for Iasi$alte_inf
Record# ALTE_INF
1
adresa: Iai, str. Vasile Alecsandri nr 13
telefon: 245678
buletin: seria AD, numr 457890
3

Observai lipsa datelor din


articolul 2?

adresa: Iai, str Tudor Vladimirescu, nr 5


bl e4, sc a, et 5, ap 9
telefon: 672134
buletin: seria D4, numr 9080897

2. n baza de date TELEFON.DBF (nume, telefon, adres) se gsete numrul de


telefon al lui Dumitru Alina. S se adauge numrul la coninutul cmpului alte_inf
din tabela Student.
Varianta 1
use telefon
locate for nume="Dumitru Alina"
display "tel."+str(telefon);
to file telef. txt
use student
locate for numes="Dumitru Alina"
append memo alte_inf;
from telef. txt

74

Informatic Manual pentru clasa a XII-a

Varianta 2
use telefon
nrtel=lookup(telefon,;
"Dumitru Alina", nume)
use student
repl alte_inf;
with adresa +str(nrtel);
for numes="Dumitru Alina"

3. S presupunem c la introducerea datelor n fiierul STUDENT.DBF s-a inversat


coninutul cmpului alte_inf pentru Amarandei cu cel a lui Luca. Vom corecta
aceast eroare.
use elevi
locate for nume="Amarandei"
copy memo alte_inf to man1
x=recno()
locate for nume="Luca"

copy memo alte_inf to man2


append memo alte_inf ;
from man1 overwrite
goto x
append memo alte_inf;
from man2 overwrite

4. Folosirea cmpului Memo pentru prelucrarea unui fiier de tip text:


S presupunem c avem fiierul Date_pers.txt i dorim modificarea peste tot a
vechiului numr de buletin 'dk123456' cu noul numr 'as121212'
Rezolvare

Vom crea o tabel fictiv cu un cmp Memo n care vom copia fiierul text. Folosim
funcia Strtran care caut toate apariiile unui ir parametru 2 i le
nlocuiete cu alt ir parametru 3.
Observai programul urmtor:
Create table x(cmp M)
Append blank
Append memo cmp from date_pers.txt
Replace cmp with strtran(cmp, [dk123456],[AS121212])
Copy memo cmp to date_pers.txt
Use
Erase x.dbf

Lucrul cu cmpurile de tip General


OLE (Object Linking and Embedding legare i ncorporare a obiectelor) este un
mecanism de comunicare ntre aplicaii prin intermediul cruia o aplicaie (numit aplicaie
client) poate folosi servicii oferite de alt aplicaie (numit aplicaie server). De exemplu,
aplicaia Paintbrush este o aplicaie server care creeaz i editeaz imagini (fiiere .bmp)
care pot fi manipulate de aplicaia Microsoft Word n textele (fiierele .doc) proprii.
n FoxPro sub Windows pot fi stocate i manipulate obiecte cum ar fi grafice, texte,
imagini, tabele, sunete etc. n cmpurile de tip General. Obiectele, create i/sau editate
de alte aplicaii Windows pot fi pstrate n cmpul General prin legare sau prin
ncorporare. n ambele cazuri, ntre baza de date i aplicaia surs, cea cu care a fost
creat obiectul, se stabilete o legtur care permite lansarea direct din FoxProW a
aplicaiei n momentul n care se dorete editarea obiectului.
1. Introducerea unui obiect n cmpul General se face prin comanda:
APPEND GENERAL <cmp> FROM <fis>[LINK][CLASS<id_server>]
Comanda ncorporeaz n cmpul General <cmp> al nregistrrii curente o copie
a fiierului <fis>. Folosind clauza LINK fiierul va fi legat la baza de date. Trebuie
specificat numele complet al fiierului <fis> folosit. De obicei, extensia .XLS este
asociat foilor de calcul din Excel, extensia .DOC documentelor Microsoft Word etc.
Dac din numele fiierului nu poate fi determinat aplicaia server cu care a fost creat
fiierul, atunci trebuie specificat parametrul CLASS. Identificatorii aplicaiilor server
utilizate frecvent sunt dai n urmtorul tabel.
Capitolul 7 Actualizarea datelor

75

Server
Microsoft Excel Chart grafic
Microsoft Excel foaie de calcul
Microsoft Graph grafic
Microsoft Word 6.0 document
Microsoft Word 6.0 imagine
PaintBrush imagine
imagine Bitmap
Sunet
Texte

Id-server
ExcelChart
ExcelWorksheet
MSGraph
WordDocument.6
Word.Picture.6
Pbrush
StaticDib
SoundRec
Textfile

Exemplu: n fiierul CONCURS reinem informaiile despre participanii la un


concurs. Cmpul Poza(G, 10) conine fotografia candidatului.
Dac am scanat poza i am editat-o n aplicaia Paint Shop Pro obinnd fiierul
Pozamea.jpg, comanda de introducere n cmpul General este urmtoarea:
APPEND GENERAL poza FROM 'C:\windows\pozamea.jpg' LINK
2. Completarea interactiv a unui cmp General cu un obiect:
Dac obiectul nu exist, butonul OK lanseaz
aplicaia pentru crearea acestuia.

Se alege
tipul
obiectului.

Deschide o
fereastr
pentru
alegerea
obiectului.
Figura 7-4: Introducerea interactiv a unui obiect ntr-un cmp General

1.
2.
3.
4.
5.

Deschidei fereastra de editare cu combinaia <Ctrl>+<Home>.


Selectai Edit, Insert Object.
Alegei tipul obiectului de inserat.
Alegei fiierul din fereastra deschis prin butonul File...
Dac obiectul de inserat nu exist, apsai (executai clic) pe butonul OK, care
lanseaz aplicaia pentru crearea fiierului.
6. Salvai folosind combinaia <Ctrl>+<W>.

3. Inserarea obiectelor n cmpul General prin Clipboard


Dac este necesar pstrarea unei poriuni dintr-un obiect, putei folosi Clipboard-ul
i opiunea Paste special din meniul Edit.

76

Informatic Manual pentru clasa a XII-a

ncorporarea coninutului
clipboard-ului n cmpul
General
Legarea coninutului
clipboard-ului de cmpul
General

Alegei tipul obiectului


Figura 7-5: Folosirea opiunii Paste special

4. Pentru editarea interactiv a unui cmp General procedai astfel:


a) Poziionai-v pe cmpul General i deschidei fereastra de editare.

Cmpul foto este de tip


General i conine o imagine.

Meniul Edit va conine opiunea Edit Paint.


Figura 7-6: Submeniul Edit

b) Deschidei submeniul Edit. Clauza de apelare a aplicaiei server difer dup tipul
obiectului existent n cmp. Observai figura n care am surprins ecranul Browse
unde, pentru cmpul foto, s-a deschis fereastra de editare care conine o
imagine. Meniul Edit are o opiune corespunztoare tipului obiectului (Edit Paint
Shop Pro Image Object).
5. Revenirea n mediul Fox: dup efectuarea coreciilor n aplicaia server, revenii n
mediul FoxPro.

Exemple

Folosirea cmpului General


Dorim s introducem ntr-o tabel numele i coninutul mai multor
documente pe care le avem ntr-un director.

Comenzi

Efect

CREATE TABLE Fisier(nume c(24), text g)


CD GETDIR()

Crearea tabelei
Poziionare pe director prin fereastra
de dialog
NR=Numr de fiiere copiate
Dac avem documente, atunci adugm
cte un articol n fiier reinnd numele
documentului i coninutul su.

Nr = ADIR(A, "*.doc")
IF nr > 0
FOR i = 1 to nr
APPEND BLANK
REPLACE fisier.Nume WITH A(i,1)

Capitolul 7 Actualizarea datelor

77

APPEND GENERAL fisier.text FROM A(i,1)


ENDFOR
ELSE
MESSAGEBOX(Nu sunt documente !)
ENDIF

Sarcin. ncercai operaia folosind un cmp de tip Memo!

sarcini de laborator
Creai fiierul Concurs cu informaii despre concurenii la Olimpiada de Informatic,
cum ar fi: numele concurentului, coala i localitatea de unde vine, o scurt prezentare a
concurentului (curriculum vitae, fotografia, amprenta vocal), rezultatele la diverse probe.
1. Populai cu articole prin Browse.
2. Punei la primul articol n cmpul Foto o imagine .gif (.bitmap etc.).
3. Punei la primul articol n cmpul Evoluie un grafic al evoluiei rezultatelor
respectivului concurent realizat prin Excel (Microsoft) Graph.
4. Punei la primul articol n cmpul Voce un fiier sunet.
5. Punei la primul articol n cmpul CV (curriculum vitae) un fiier document Word.
6. Afiai cmpurile speciale.
7. Scriei un program care s afieze poza unui concurent dat prin nume de la tastatur.
8. Editai diversele obiecte.
9. Copiai de la articolul unu la articolul doi coninutul cmpului Test.
10.Aflai numele i scoala de unde vine primul concurent nscris.
11.Presupunnd c n cmpul Total_punctaj se adun rezultatele la cele 3 probe de
concurs, realizai calculul prin comenzi adecvate!
12.Afiai concurenii n ordinea descresctoare a punctajelor, la punctaje egale, alfabetic.
13.Aflai ci concureni au venit din localitatea X?
&&
&&
&&
&&

accept 'loc?" to x
copy to man for localitate=X
use man
? reccount()

14.Aflai care este concurentul cu cel mai mare punctaj la proba 1?


&&
&&
&&
&&
&&

Use concurenti
Sort on proba1/d to man
Use man
X=proba1
List while proba1=

sarcini pentru realizarea


unui mini-proiect
Identificai operaiile de actualizare a datelor din fiecare proiect. Realizai interactiv
aceste operaii. Scriei comenzile pentru actualizare.
78

Informatic Manual pentru clasa a XII-a

Capitolul

Indexare i cutare rapid


 Indexarea tabelelor
 Cutarea rapid i poziionarea n tabela indexat

Indexarea tabelelor
Indexarea este o metod de accesare rapid, ntr-o manier ordonat, a coninutului unei tabele, fr a duplica datele propriu-zise, fr a le depune n alt tabel i a
avea grij de ele. Alte avantaje ale indexrii sunt posibilitatea folosirii expresiilor drept
criteriu de ordonare, selectarea dup criterii unice, actualizarea n timp real etc.
S lum ca exemplu tabela ELEVI. Parcurgerea ei ordonat dup nume se poate face
prin construirea unui index care s rein numrul nregistrrii din tabel i criteriul
nume. Liniile acestui index sunt ordonate dup valorile cheii. Solicitarea de a accesa
tabela ELEVI prin cheia nume va impune parcurgerea indexului. Pentru fiecare linie din
index se ajunge prin pointer la articolul cu datele propriu-zise.
Indexarea realizeaz o legtur logic ntre index i fiierul de date prin numrul
articolului. Observai desenul urmtor.
#
1
2
3
4
5

nume
popescu
albule
stan
marinic
albule

pren
teo
geo
ana
ion
ina

cls
11b
11a
11c
11d
9c

absn
5
4
6
0
7

cls
#
5
2
1
3
4

cheie
9c
11a
11b
11c
11d

nume
#
2
5
4
1
3

cheie
albule
albule
marinic
popescu
stan

Indecii pot fi depui n fiiere index (.CDX) asociate tabelei, au acelai nume i se
deschid sau se nchid odat cu tabela, orice operaie de actualizare asupra acesteia
reflectndu-se automat i asupra tuturor indecilor membri.
O tabel poate avea mai muli indeci, dar numai unul este la un moment dat activ
i determin criteriul de parcurgere.

Tipuri de indeci
Indexul obinuit (regular) este folosit pentru selectarea ordinii de parcurgere
din cmpurile non-cheie.
Indexul unic (unique) este folosit pentru selectarea ordinii de parcurgere
bazate pe prima apariie a valorii n cmpul specificat.
Indexul candidat (candidate) este folosit n tabelele care au deja fixat indexul
primar, dar n care este necesar verificarea valorilor unice i n alt cmp dect
n cmpul cheie.
Capitolul 8 Indexarea i cutarea rapid

79

Indexul primar (primary) este folosit n contextul unei tabele incluse ntr-o baz
de date i asigur introducerea valorilor unice pentru cheia articolelor. O tabel
poate avea un singur index primar.

Comenzi i funcii utile


1. Pentru crearea unui index este folosit comanda:
INDEX ON <exp> TAG <tag> [UNIQUE]
[DESCENDING/ASCENDING] [FOR<cond>]
Comanda Index permite crearea unui index cu numele <tag> pe baza expresiei
<exp>. Clauza Unique specific tipul indexului. Sensul ordonrii este dat de clauza
DESCENDING/ASCENDING, iar filtrarea este posibil prin condiia FOR.
2. Pentru specificarea numelui indexului activ este folosit comanda:
SET ORDER TO TAG <tag>
sau comanda
USE <bd> ORDER <tag>
3. Pentru tergerea unui index este folosit comanda:
DELETE TAG <tag>
4. Funcii
Funcie
=TAG (<nr-index>)
=TAGNO(<nume-reper>)
=KEY (<nr-index>)
=ORDER([<nr-zona>])
=TAGCOUNT([<zona>])

Exemple
nume
popescu
albule
stan
marinic
albule

80

Efect
Numele unui reper-index care ocup pozia
<nr_index>
Poziia pe care o ocup un index dat.
Expresia cheii de indexare pentru reperul-index
care ocup poziia <nr-index>
Numele indexului activ.
Numrul de repere index din multiindex.

1. Fie baza de date ELEVI.


Observai comenzile i efectul lor:
pren
teo
geo
ana
ion
ina

Cls
11b
11a
11c
11a
11a

absn
5
4
6
0
7

admis
.T.
.T.
.T.
.F.
.F.

Dn
11/11/94
09/09/95
07/11/95
08/09/95
09/09/95

index on cls tag cls


unique

creare tag cls n fiierul structural elevi.cdx

list

acces permis la primul articol al fiecrei clase

Informatic Manual pentru clasa a XII-a

#
2
1
3

nume
albule
popescu
stan

pren
geo
teo
ana

cls
11a
11b
11c

absn
4
5
6

admis
.T.
.T.
.T.

dn
09/09/95
11/11/94
07/11/95

index on dtos(dn)+nume
tag dn

crearea reperului Dn n elevi.cdx permite


ordonare cronologic i alfabetic

index on nume +
str(abssn)tag x

crearea reperului nume n elevi.cdx


permite ordonare alfabetic i dup absene!

index on nume tag nume

crearea reperului nume pentru parcurgerea


alfabetic

use elevi order nume


sau set order to tag nume

activarea tag-ului nume din Elevi.cdx

set order to 0

se consider tabela neordonat

delete tag nume

tergerea indexului nume

2. Scriei o secven care permite precizarea de ctre operator a cmpului, apoi


indexarea tabelei ELEVI.
accept care este cmpul ? to cmp
Atenie la
use elevi
macrosubstituie!
index on &cmp tag &cmp
list nume, cls, dn, ob1, trim1
return

Definirea vizual a indecilor


Realizarea interactiv a indecilor
pentru o tabel presupune deschiderea
ferestrei Table Designer. Dac expresia
de indexare conine doar un cmp, atunci
indexul se poate defini n primul tab al
ferestrei Table Designer (Fields), odat cu
descrierea cmpului. Dac expresia de
indexare este compus din mai muli
termeni (cmpuri, constante, variabile),
atunci folosim tab-ul Indexes. Expresia de
indexare, ca i expresia de filtrare, pot fi
construite
cu
ajutorul
utilitarului
Expression Builder.

Figura 8-1: Definirea vizual a indecilor


Capitolul 8 Indexarea i cutarea rapid

81

Cutarea rapid i poziionarea n tabela indexat


Una dintre funciile importante ale unui SGBD este accesarea rapid a tabelei.
Condiia impus este ca tabela s fie indexat dup expresia de cutare. Exist dou
comenzi de cutare rapid: FIND i SEEK; prima folosete drept expresie de cutare o
constant. Dac dorim cutarea printr-o variabil va trebui s folosim fie FIND cu
macrosubstituie, fie SEEK.
Cutarea se ncheie la primul articol din tablel care are cheia de indexare egal cu
valoarea expresiei, dac o astfel de nregistrare exist. n cazul n care cutarea nu a
avut succes, se mut pointerul de fiier pe EOF (dac valoarea comutatorului SET
NEAR este OFF) sau se mut indicatorul pe prima nregistrare care ar fi coninut
valoarea dac ar fi existat (dac SET NEAR este ON).

Comenzi i funcii utile


Comanda
FIND <expC>| SEEK <exp>
=SEEK (<exp>)

Efect
Comanda de cutare rapid
Funcie care caut <exp> i returneaz .T.
dac a gsit un articol.
Funcii care returneaz .T. dac articolul
a fost gsit.

= FOUND() / =EOF()

Exemple
#
1
2
3
4
5
6

Fie tabela ELEVI:

nume
albule
albule
marinic
popescu
stan
galeriu

pren
geo
ina
ion
teo
ana
sanda

cls
11a
11a
11a
11b
12c
9a

absn
4
7
0
5
6
0

admis
.T.
.F.
.F.
.T.
.T.
.F.

dn
09/09/95
09/09/95
08/09/95
11/11/94
07/11/95
/ /

1. Efectele comenzilor Find i Seek:


use elevi order nume
Caut persoana cu numele popescu n tabela
find popescu
indexat dup cheia nume. irul nu trebuie pus
? found()
ntre delimitatori.
.T.
Funcia FOUND returneaz .T.

82

var=popescu
find &var
? recno()
4

Dac dorim cutarea cu o variabil, atunci trebuie


s folosim macrosubstituia.
Afim numrul articolului curent.

index on cls tag cls

Indexm dup codul clasei.

find 9a
? eof()
.T.
? found()
.F.

Vrem s ne poziionm pe primul elev din clasa 9a.


Cutare euat. Observm funciile EOF (care
returneaz True) i FOUND (care returneaz
False) pentru eecul cutrii.

Informatic Manual pentru clasa a XII-a

find 9a
? eof()
.F.
Set order to tag nume
seek var
? found()
.T.

Valoarea cheii de cutare ncepe cu spaiu, deci


va trebui pus ntre ghilimele. A fost gsit un
articol, deci poziionarea nu este pe eof.

? seek(popescu)
.T.

Observai funcia de cutare, care ntoarce


valoarea adevrat sau fals.

Iniializarea variabilei s-a fcut anterior cu valoarea


Popescu. Cutarea prin seek conduce la acelai
rezultat ca i folosirea comenzii FIND.

2. Fie baza de date MECIURI care reine toate meciurile unui campionat:
#
1
2
3
4

cod

e1
dinamo
poli
rapid
steaua

e2
farul
corvinul
dinamo
rapid

loc
constana
iai
bucureti
bucureti

data
08.09.95
08.09.95
07.09.95
08.09.95

ora
10
15
10
15

S se completeze codul fiecrui meci cu o informaie care s identifice poziia


meciului n programul competiional, cronologic vorbind, pentru aceeai dat n ordinea
alfabetic a locului de desfurare i, dac sunt meciuri n aceeai zi, n acelai loc, le
vom aranja n funcie de or.
Varianta 1
use meciuri
sort on data, loc, ora to man
use man
repl all cod with recno()
use
erase meciuri. dbf
rename man. dbf to meciuri.
dbf

Varianta 2
use meciuri
index on
dtos(data)+loc+str(ora; tag v
I=1
scan
repl cod with i
i=i+1
endscan
use

sarcini de laborator
1.

Fie o tabel CINEMA (cod-film, nume-film, productor, regia, anul, gen, scenariu,
premii) cu principalele producii cinematografice din anul 1948 ncoace i o tabel
ACTORI (nume, data-naterii, sex, cod-film, naionalitate, data-deces) cu informaii
despre stelele filmului. Se cere:
a) codificarea filmelor, odat cu nregistrarea lor, printr-o informaie compus:
nume-ar + - + genul + - + numr-curent;
b) afiai care a fost primul film (cronologic) al fiecrui gen;
c) scriei rile ale cror producii au fost nregistrate n baza de date.
d) afiai filmele produse n UZBEKISTAN n anul 1994;
e) lista filmelor pe genuri;
f) afiai scenaritii pe genuri cinematografice, dup 1990;
Capitolul 8 Indexarea i cutarea rapid

83

g)
h)
i)
j)
2.

ce actori au jucat n filmul Pe aripile vntului?


cu cine a mai jucat actorul Ralph Macchio n Karate Kid?
lista actrielor n via care n-au depit 30 ani, pe naionaliti;
primii 5 veterani ai filmului romnesc.
Verificai dac cele dou secvene produc acelai rezultat!

Secvena 1:
use elevi
index on cls tag cls
find 11a
? iif (found(), da,nu)

Secvena 2:
use elevi
index on cls tag cls
? iif (seek
(11a,cls).da,nu)

3.

Dorim s gsim media elevului Stan Ana din 12C folosind comanda Seek. Care
variant este corect?
use elevi
index on cls+nume+pren tag x
seek 12CStan
Ana
? iif(found(), media,nu este eleva)

Use elevi
Index on cls+nume+pren tag x
Seek Stan
Ana 12c
? iif(not eof(), media, nu este
eleva)

4.

NERO, mpratul roman, i acuz pe cretini de incendierea ROMEI i se


hotrte s-i pedepseasc.
a) Cere s se fac o list a tuturor persoanelor din ROMA cu numele, vrsta i dac
este sau nu cretin.
b) Pe toate fetele sub 25 ani le expulzeaz din ROMA.
c) Pe toi copii ntre 3 i 10 ani a cror nume ncepe cu A i iart.
d) Hotrte s ierte pe cel mai btrn om din ROMA, fie el femeie sau brbat.
e) Femeile cstorite cu vrsta ntre 25 i 40 ani sunt i ele iertate, cu condiia s
aduc ofrande zeiei DIANA. Se bucur n sinea lui cnd afl c numai o singur
femeie, MARIA, a refuzat oferta.
f) Hotrte ca toi ceilali s fie omori, dar lista acestora o pune pe monumentul
funerar in memoriam.
g) Apoi mpcat, NERO d porunc s fie aduse napoi fetele expulzate i scoate
o foaie cu cetenii de bun credin ai ROMEI.
Traducei aciunile lui NERO n limbajul FoxPro.
5.

Fie date mai multe cri de joc identificate prin culoare (trefl, caro, cup, pic) i
valoare (2-14). Asul este 11. Verificai dac pachetul este complet!
6.

Pentru fiierul ELEVI (nume, clasa, media), s se afle:


a. numele elevilor cu cea mai mare medie din fiecare clas;
b. lista claselor;
c. primii trei i ultimii trei elevi n ordinea mediilor din coal;

Sarcini pentru realizarea


unui mini-proiect
84

Informatic Manual pentru clasa a XII-a

Imaginai cereri de informaii specifice


proiectului vostru pentru a folosi indexarea
(n sens descendent, cu expresii compuse
din mai muli termeni de tipuri diferite) i
cutarea rapid.

Capitolul

Relaionarea tabelelor
 Tipuri de relaii
 Crearea i tergerea unei relaii

Tipuri de relaii
ntr-o baz de date relaional, aa cum am vzut n leciile anterioare, se pot stabili
ntre tabele numai relaii de tipurile 1-1 i 1-n.
Relaia 1-1 este stabilit ntre o tabel numit printe i o alta numit copil prin
intermediul unui cmp sau al unei expresii comune. Atunci cnd pointerul de fiier se
deplaseaz n tabela printe, pointerul fiierului copil se poziioneaz automat pe
primul articol care are valoarea expresiei de legtur egal cu cea din fiierul printe.
Aceeai tabel poate fi legat de mai multe tabele.
Funcionarea relaiilor 1-n este urmtoarea: la poziionarea pe o nregistrare din
fiierul printe se leag toate articolele fiierului copil cu aceeai valoare a cheii.
Trebuie ndeplinite urmtoarele condiii:
Ambele tabele trebuie deschise naintea comenzii.
Tabela printe trebuie s fie ultima selectat.
Tabela copil este indexat dup aceeai expresie ca i a legturii.
Nu sunt permise cicluri: o tabel nu poate fi i printe i copil al uneia i aceleiai tabele.
Tabela poate fi legat de mai multe tabele prin chei distincte.
Legturile unei tabele se numeroteaz n ordinea definirii lor.

Crearea i tergerea unei relaii


Fixarea unei relaii de tip 1-1
SET RELATION TO <exp1> INTO <alias1> [,<exp2> INTO <alias2>]
[ADDITIVE]
Comanda anterioar stabilete o legtur 1-1 ntre tabela activ i cea precizat
prin aliasul ei n clauza INTO pe baza expresiei cheie <exp1>. Clauza ADDITIVE
permite pstrarea noii legturi definite alturi de cea anterioar.

Fixarea unei relaii de tip 1-n


Comanda urmtoare transform relaia definit anterior ntr-o relaie 1-n.
SET SKIP TO [<alias1> [,<alias2>]]

tergerea unei legturi


Comanda urmtoare permite tergerea unei legturi:
SET RELATION OFF [INTO <alias>
Capitolul 9 Relaionarea tabelelor

85

Funcii
Funcie
=RELATION(<nr-relatie>)
=TARGET(<nr-relatie>)

Studiu de caz

Efect
Returneaz expresia relaiei date prin <nr-relatie>.
Returneaz numele tabelei secundare legate prin
relaia <nr-relatie> de fiierul deschis n zona
specificat.

Fie baza de date SCOALA cu tabelele Elevi, Clase, Obiecte,


Profesori, Sali, a cror structur a fost analizat i proiectat n
leciile anterioare. Vom exemplifica modaliti diferite de fixare a
relaiilor ntre tabele.

1. Fixarea relaiei ELEVIcls(1, 1)>CLASE


CLASE
cls dirig
9a
barbu
10a carp
11a doltu
11b nanu

use elevi in
use clase in
sele 1
set relation
list a->cls,

ELEVI
nume
1
albule
2
albule
3
Marinic
4
popescu
5
Stan
1
2 order cls

pren
geo
ina
ion
teo
ana

cls
11a
11a
9a
11b
11c

absn
4
7
0
5
6

admis
.T.
.F.
.F.
.T.
.T.

obinem pentru fiecare elev


numele dirigintelui
&& fiierul copil trebuie indexat

to cls into B
a->nume, b->dirig

2. Fixarea relaiei CLASEcls(1, 1)>ELEVI


CLASE
cls dirig
9a
barbu
10a carp
11a doltu
11b nanu

ELEVI
nume
1
albule
2
albule
3
Marinic
4
popescu
5
Stan

pren
geo
ina
ion
teo
ana

cls
11a
11a
11a
11b
11c

absn
4
7
0
5
6

admis
.T.
.F.
.F.
.T.
.T.

eof
use elevi in
use clase in
sele 2
set relation
list a->cls,

86

1 order cls
2
to cls into a
a->nume, b->dirig

Informatic Manual pentru clasa a XII-a

obinem pentru fiecare diriginte numele


primului elev din clasa sa
presupunem c indexul cls din ELEVI
este creat deja

3. Fixarea relaiei CLASEcls(1, n)>ELEVI


&& obinem pentru fiecare diriginte lista elevilor si
use elevi in 1 order cls
use clase in 2
sele 2
set relation to cls into a
set skip to a
Pentru vizualizarea legturii am deschis ferestrele Browse.
La poziionarea pe un articol n fereastra Clase, automat n
cealalt fereastr sunt selectate doar liniile clasei respective.

Figura 9-1: Vizualizarea legturii

4. Fixarea relaiei ELEVI-cls(1,1)>CLASE cls(1, 1)>SALI


&& Vrem s aflm n ce sal nva elevul x
use elevi in 1
use clase order cls in 2
use sali order cls in 3

#
1
2
3
4
5

nume
albule
albule
marinic
popescu
stan

pren
geo
ina
ion
teo
ana

sele 1
set relation to cls into B
sele b
set relation to cls into C
sele 1
list c.sala for a.nume=x and a.pren=y

cls
11a
11a
11a
11b
11c

cls
9a
10a
11a
11b

dirig
barbu
carp
doltu
nanu

cls
11a
11b
11c
11d

sala
1.1
1.2
2.1
2.2

5. Stabilirea relaiei CLASE(1,1)>SALI prin numrul articolului


use clase in 1
use sali in 2
sele 1
set relation to recno() into b
list a->cls, a->diriginte,
b->sala for a.cls=12

Afim ce dirigini au elevii claselor


a XII-a i unde nva.

Capitolul 9 Relaionarea tabelelor

87

6. Stabilirea unei relaii ELEVIn, n>PROFESORI


&& Vrem s aflm profesorii elevului X.
Datele se gsesc n relaia n-n. Un elev are mai muli profesori, un profesor are mai muli
elevi. Codificarea unei astfel de relaii se face prin intermediul unei relaii noi. Vom folosi
tabela OBIECTE care va conine numele obiectului, codul profesorului i codul clasei.
ELEVIcls(1, n)>OBIECTEcodp(1, 1)>PROFESORI
#
1
2
3
4
5

nume
Albulet Ion
Albulet Jan
Marinica B
Popescu K
stan

cls
11a
11a
11a
11b
11c

use elevi in 1
use obiecte in 2 order cls
use profesori in 3 order codp
sele 1
set relation to cls into obiecte

cls
11a
11a
11a

obiect
mate
fizica
chim

codp
1
2
3

codp
1
2
3

nume
POPA
ALBU
NICU

set skip to b
sele 2
set relation to codp into c
sele 1
list b.obiect, c.nume for
a.nume=x

7. Stabilirea unei relaii multiple


OBIECTEcls (1-1)>ELEVI ; OBIECTEcodp(1-1)>PROFESORI
Vrem s afim pentru obiectul Fox-Pro elevii care studiaz acest obiect i cu
numele profesorului.
Varianta 1:
Varianta 2:
use obiecte in 1
use elevi in 2 order cls
use profesori in 3 order codp
sele 1
set filter to nume=Fox-Pro
set relation to cls into b, codp
into c
set skip to b
list a.obiect, b.nume, c.numep

set relation to cls into b


set relation to codp into c
set skip to b
list a.obiect, b.nume,c.numep

sarcini de laborator
I.

BIBLIOTECA

1. Realizai afiarea tuturor crilor mprumutate de cititorul cu codul X.


Fixai relaia OPERATII 1-n> CARTI.
Filtrai printele pe cod-cititor=X.
2. Afiai numele cititorilor care au mprumutat cartea cu numrul de inventar X.
Fixai relaia OPERATII-1-n>CITITORI.
Filtrai printele pe nr-inventar=X.
3. Care sunt crile i de cine au fost mprumutate n ziua X?
Fixai relaia OPERATII-1-1>CARTI prin nr-inventar 1-1> CITITORI.
Filtrai prin cod-cititor i printele pe data-mprumut =X.
88

Informatic Manual pentru clasa a XII-a

4. Ce se obine?
5. Care sunt restanierii (numele tuturor cititorilor i ale crilor nerestituite dac au
trecut mai mult de dou sptmni de data mprumutului)?
Aceeai relaie ca n sarcina anterioar.
Ordonai tabela OPERATII dup cod-cititor.
Filtrai tabela operaii: date()-data-impr<14 and empty(data-rest).
6. Aflai cine i cnd a mprumutat cri de Mihai Eminescu.
Indexai unic CARTI pe numele autorului i titlul crii.
Fixai relaia CARTI1-n>OPERATII1-1>CITITOR.
7. Aflai care este cmpul de legtur pentru prima relaie i care este cmpul de
legtur pentru cea de a doua relaie.
8. Aflai care este numele fiierului copil din cele dou legturi.
II.

Informaiile despre personalul unei societi comerciale sunt trecute n fiierele


urmtoare.
PERS (cod-persoana, nume, prenume, adresa, data-naterii),
COPII (cod-persoana, prenume-copil, data-naterii),
SALARII (cod-persoana, salar, loc-munca, funcie) i
RETINERI (cod-persoana, cod-reinere, suma).
Fixai relaiile i aflai:
a) lista personalului cu numele, prenumele, funcia, salariul, suma total a
reinerilor i restul de ncasat;
b) lista alfabetic a persoanelor cu copii; pentru fiecare copil se va trece doar
prenumele i vrsta;
c) numele complet al fiecrui copil, cu data naterii i vrsta n ani i luni;
d) numele i adresa persoanelor cu funcia X;
e) toate persoanele, aranjate alfabetic i sumele reinute (eventual pe tipuri de reineri);
f) pentru fiecare loc de munc, numele persoanelor ce lucreaz acolo, cu numrul
de copii i reinerile lor.
Atenie! Creai tabelele i ncrcati-le cu date de test. Citii cu atenie solicitrile de
informaii i imaginai situaiile posibile.
Plan
Situaia legat de reineri i copii
Fr copii
Fr reinere
Popescu
Cu o singur reinere Ex. CAR
Zaharescu
Cu mai multe reineri.
Dobrescu
(Ex. CAR, RATE, PENSIE)
Situaia legat de funcii i locuri de munc Muncitor
Sectia 1
Popescu
Sectia 2
Zaharescu
Sectia 3
Dobrescu

Sarcini pentru realizarea


unui mini-proiect

Cu un copil
Ionescu
Minulescu
Enachescu

Cu mai muli copii


Vasilescu
Albulescu
Nasuescu

Contabil
Ionescu
Minulescu
Enachescu

inginer
Vasilescu
Albulescu
Nasuescu

Pentru fiecare baz de date proiectai relaiile dintre tabele i imaginai interogri pe
care s le rezolvai folosind aceste relaii.
Capitolul 9 Relaionarea tabelelor

89

Capitolul

10

Transferul de date
ntre tabele Visual FoxPro
i alte structuri
 Importarea i exportarea datelor din i ctre masive de memorie
 Importarea i exportarea datelor din i ctre fiiere de alte tipuri

Importarea i exportarea datelor


din i ctre tablouri de memorie
De multe ori, folosirea tablourilor de date este preferabil folosirii fiierelor de date,
deoarece viteza de accesare a memoriei este net superioar vitezei de accesare a
discului. De exemplu, sortarea unui masiv este mult mai rapid dect sortarea unui
fiier. Comunicarea ntre bazele de date i tablouri se realizeaz n ambele sensuri prin
comenzile corespunztoare. Tabelul urmtor prezint comenzi i funcii utile:
Comanda

90

Efect

APPEND FROM ARRAY


<tablou> [FOR<cond>]
[FIELDS <lista-cmp>]

Se adaug la tabela activ liniile dintr-un tablou; fiecare


linie corespunde unei nregistrri; coloanele sunt copiate n
ordinea cmpurilor; se ignor elementele n plus ale
matricii; cmpurile n plus sunt completate automat cu valori
vide. Se face conversia la tipul cmpului.

GATHER FROM
<tablou>/MEMVAR
[FIELDS <lista-cmp>]
[MEMO]

Are loc copierea vectorului <tablou> sau a unor variabile


de memorie cu acelai identificator (MEMVAR) n
nregistrarea curent din tabela activ. Copierea se face de
la stnga la dreapta n ordinea coloanelor, dac nu este
precizat clauza FIELDS. Clauza MEMO este necesar dac
printre cmpurile de copiat este i un cmp Memo.

COPY TO ARRAY <tablou>


[FIELDS <lista
cmpuri>] [<domeniu>]
[FOR<cond>]
[WHILE<cond>]

Comanda realizeaz trecerea articolelor din tabela activ


ntr-un tablou, astfel nct fiecare articol devine o linie.
Implicit sunt considerate toate cmpurile. Matricea nu
trebuie s fie declarat anticipat.

SCATTER [FIELDS
<lista-cmp>][memo]
TO <tablou>/MEMVAR

Cmpurile (toate sau cele specificate n FIELDS) din tabela


activ se vor copia ntr-un vector sau n variabilele speciale
(clauza MEMVAR).

REPLACE FROM ARRAY


<tablou> [FIELDS<lista
cmpuri>] [<domeniu>]
[FOR <cond>] [WHILE
<cond>]

Se nlocuiesc cu elementele din tabloul specificat acele


valori care corespund cmpurilor din clauza FIELDS
(implicit toate cmpurile). Comanda REPLACE are ca
domeniu implicit articolul curent.

Informatic Manual pentru clasa a XII-a

Exemple
1. Adugai la tabela ELEVI elementele masivului NOTE.
note [2, 6]

ELEVI.DBF
nume
rom
ION
10
x
8
y
10

mat
8
8
9

fiz
8
7
8

chim
6
8
9

x
y

8
10

8
9

7
8

8
9

10
10

append from array note

2. Copiai n matricea Note toi elevii cu nota 10 la romn. Matricea NOTE nu este
necesar s fie declarat anticipat. Ea va avea ca dimensiuni numrul de linii egal cu
numrul de articole filtrate, iar numrul de coloane egal cu numrul de cmpuri.
ELEVI.DBF
nume
rom
ION
10
LUCA
8
POPA
10

note [2, 6]
mat
8
8
9

fiz
8
7
8

chim
6
8
9

ION
POPA

10
10

8
9

8
8

6
9

.F.
.F.

copy to array note for rom=10

3.
Use elevi
scatter to array a
? nume,a[1], a[2]
ION ION 10

Se introduc date despre primul elev n vectorul A.


Numrul de elemente este egal cu numrul de cmpuri.
Putem s ne referim la elemente prin indicii lor.
Observai folosirea cmpului nume!

go bottom

Are loc poziionarea la ultimul articol.

scatter memvar

Este creat un ir de variabile cu aceleai nume ca ale


cmpurilor cu valori din ultimul articol.

?m.nume, m.mat, m.rom


POPA 9 10

Observai calificarea variabilelor!

4. La examenul de bacalaureat elevii de la Informatic au fost mprii n trei comisii,


fiecare comisie organizndu-i singur examenul i evidena concurenilor. Se cere concatenarea datelor n vederea calculrii tuturor mediilor i afirii tuturor rezultatelor.
nume
albu
andrei
aurel

p1
8.77
10
5.66

p2
7.63
10
6.50

proiect
10
10
9

COMISIE1.DBF
p1 reine nota la romn,
iar p2 nota la matematic.

nume
barba
baciu
bucur

mate
10
10
10

lrom
9
7
7

med
9.50
8.50
8.50

COMISIE2.DBF
Numele cmpurilor corespund
obiectelor de examen

Capitolul 10 Transferul de date ntre tabele Visual FoxPro i alte structuri

91

candidat
carp
crbune
ciurea
cocea

proba1
10
10
10
10

proba2
4.66
8.99
5
10

coala
economic
informatic
informatic
economic

COMISIE3.DBF
Proba1 = romn,
Proba2 = matematic

Avnd nume de cmp diferit, nu vom putea folosi comanda Append from. O
variant de rezolvare este copierea datelor n tablouri n ordinea dorit a cmpurilor i
apoi adugarea ntr-o nou tabel BAC.
use comisie1 in 1
use comisie2 in 2
use comisie3 in 3
select 4
create dbf bac (nume C(10),;
rom N(5,2),mate N(5,2),;
med N(5,2))
sele 1
copy to array a
sele 2
copy to array b fields nume,;
lrom, mate

sele c
copy to array c fields
candidat,;
proba2, proba1;
for scoala=informatic
sele d
append from array a
append from array b
append from array c
close databases
release all

Importarea i exportarea datelor


din i ctre alte tipuri de fiiere
Transferul informatiilor ntre produse program sau, mai bine spus, ntre fiiere baze de
date tip Xbase i alte tipuri de fiiere se poate face n ambele sensuri prin comenzi speciale.
Comanda

Efect

APPEND FROM < fisier> TYPE


<tip-fis>

Trecerea datelor din fiierul de tip special n


tabela activ.

COPY TO <fisier> TYPE <tip-fis>

Transferul datelor dintr-o tabel .DBF n alt tip de


fiier.

IMPORT FROM <fisier> TYPE PDOX


/ RPD / WKS / WRK / XLS

Conversia unui fiier de alt tip ntr-un fiier .DBF.

EXPORT TO <fisier> FIELDS


<lista-cmpuri>][<domeniu>]
[FOR <cond>] [WHILE <cond>][TYPE]
DIF / MOD / WKS / WRK / XLS

Conversia unui fiier .DBF n alt tip de fiier.


Tipurile de fiiere sunt indicate n clauza type.
Datele care vor fi convertite pot fi filtrate /selectate.

<Tip-fis> poate fi:


DELIMITED / DELIMITED WITH <car> atunci cnd fiierul surs este n
format ASCII sau are cmpurile delimitate de <car>.
DELIMITED WITH BLANK pentru fiiere cu cmpuri delimitate de spaii.
SDF pentru fiier ASCII format data sistem (EXTENSIE.TXT).
WKS pentru fiier LOTUS 1-2-3 etc.
92

Informatic Manual pentru clasa a XII-a

Exemple
#
1
2
3
4
5

Fie tabela ELEVI, cu urmtorul coninut:

nume
popescu
ionescu
zaharescu
fictiv
albu

dn

cls
11a
11a
11b
11b
11a

absn
10
0
12

absn
15
5
1

m1
6
9
2

m2
7
7
10

m3
8
8
10

an
8
8
10

10

10

10

10

10

10

bi

Dorim o operaie de copiere a tabelei elevi ntr-un fiier .TXT avnd ca separatori
de cmpuri virgula, iar irurile delimitate prin ghilimele.
copy to xxx delimited
type xxx. txt
popescu, , , 11A, 10, 15, 6, 7, 8, 8,
ionescu, , , 11A, 0, 5, 9, 7, 7, 8, ,
zaharescu, , , 11B, 12, 1, 2, 10, 10, 10,
fictiv, , , 11B, , , , , , , , , ., ., .,
albu, , , 11A, 10, 10, 10, 10, 10, 10, ,
append from xxx delimited
go 6
dele rest
pack
copy to zzz type sdf
type zzz.txt

Observai clauza
Delimited!

Adugarea datelelor din xxx.txt


Poziionare pe articolul 6
tergerea celorlalte articole.
Exportarea bazei sub form standard.

popescu 11A1015 6 7 8 8
ionescu 11A 0 5 9 7 8 8
zaharescu 11B12 1 2101010
fictiv 11B.. ..
albu 11A101010101010

sarcini de laborator
Ce execut secvenele urmtoare?
Secvena 1
Use elevi
scatter to memvar
accept to nume
input to rom
input to mat
fiz=elevi.fiz
append blank
gather from memvar

Secvena 2
Use elevi
scatter memvar
accept to nume
go bottom
fiz=elevi.mat+1
append blank
gathr memvar

Secvena 3
Use elevi
go 2
scatter memvar
?memvar(1)

Secvena 4
Use elevi
goto 2
scatter to
memvar
?m.nume, m.mat

Capitolul 10 Transferul de date ntre tabele Visual FoxPro i alte structuri

93

Capitolul

11

Prelucrri statistice
i financiare







Numrarea articolelor: COUNT


nsumarea valorilor unor cmpuri: SUM
Calculul mediei aritmetice: AVERAGE
Diverse calcule statistice i financiare: CALCULATE
Totalizarea valorilor: TOTAL
Funcii financiare

Scopul principal pentru care sunt create bazele de date este obinerea ntr-un timp
ct mai scurt a unor informaii cu privire la datele coninute n tabele. Aceste informaii
pot fi de natur diferit, mai detaliate sau mai sintetizate, sub form de liste, tabele sau
simple valori, informaii statistice, totalizatoare.

Numrarea articolelor: COUNT


COUNT [TO <var>] [<domeniu>] [FOR <cond>] [WHILE <cond>]
Comanda numr articolele din tabela activ i, dac este prezent clauza TO <var>,
depune rezultatul n variabila specificat.
Exemplu. Fie tabela ELEVI.DBF cu urmtorul coninut:
nume
popescu minel
albule geo
popescu sile
marinic marin
ionesco marin
albule dino

cls
11B
11A
11C
11C
11C
11A

absm
10
4
5
10
4
0

absn
5
4
6
6
6
0

p1
10
10
10
10
10
10

p2
10
10
10
9
9
9

Numrul total de
elevi se calculeaz
n variabila V
Count to V
?V

nsumarea valorilor unor cmpuri: SUM


SUM [<lista -exp>] [TO <lista-var>/TO ARRAY <tablou>]
[<domeniu>] [FOR <cond>] [WHILE < cond>]
Comanda permite nsumarea valorilor existente n articolele selectate, conform
expresiilor precizate.
Exemplu: Considerm acelai fiier din exemplul anterior. Urmrii efectul urmtoarelor
comenzi!
sum
&& n lipsa clauzelor se nsumeaz valorile
absn absm p1
p2
&& tuturor cmpurilor numerice i rezultatele
27
33
60
57
&& se afieaz pe ecran
Sum for cls=11A absm +absn && se afieaz pe ecran doar
8
&& valoarea calculat
94

Informatic Manual pentru clasa a XII-a

Sum for cls=11A


absm +absn to x, v

&& eroare: numr de variabile


&& mai mare

Calculul mediei aritmetice: AVERAGE


AVERAGE [<lista-exp>] [TO <lista-var>/TO ARRAY <tablou>]
[<domeniu>] [FOR <cond>] [WHILE < cond>]
Comanda permite calculul mediei aritmetice a valorilor expresiilor din <lista-exp>,
pentru articolele din tabela activ care se ncadreaz n domeniul precizat i
ndeplinesc condiiile din FOR i WHILE. Parametrul TO <lista-var> conine lista de
variabile n care vor fi depuse valorile mediilor calculate.
Exemplu
Average
&& n lipsa clauzelor se calculeaz media valorilor
4.50 5.50 10 9
&& tuturor cmpurilor numerice
go top
&& calculm media absenelor
average absm while cls=11B && primilor elevi din clas

Diverse calcule statistice i financiare: CALCULATE


CALCULATE [<lista-exp>] [TO <lista-var> /TO ARRAY <tablou>]
[<domeniu>] [FOR <cond>] [WHILE <cond>]
Comanda poate calcula valorile mai multor expresii i depune rezultatul ntr-o list
de variabile sau ntr-un tablou.
n alctuirea unei expresii pot intra urmtoarele funcii:
1. AVG(<expn>): permite calculul mediei aritmetice a expresiei <expn> ce poate
conine cmpuri numerice ale tabelei active.
2. CNT(): permite numrarea articolelor selectate din tabela activ.
3. SUM(<expn>): permite nsumarea valorilor expresiei <expn>, expresie ce
conine cmpuri numerice ale tabelei.
4. MAX(<exp>): extrage cea mai mare valoare a expresiei <exp> calculat pentru
fiecare articol selectat al tabelei active.
5. MIN(<exp>): extrage cea mai mic valoare a expresiei calculat pentru fiecare
articol selectat al tabelei active.
6. STD(<exp>): returneaz abaterea medie ptratic a expresiei date. Cu ct
abaterea medie ptratic este mai mic, cu att valorile sunt mai apropiate de medie.
7. VAR(<exp>): calculeaz dispersia expresiei (ptratul abaterii medii ptratice).
Exemplu: Fie tabela ELEVI.
Calculm numrul de articole, suma absenelor, media i numrul maxim al
absenelor nemotivate:
calculate cnt(), sum(absn), avg(absn), max(absn)
6 27 4. 50 6

Capitolul 11 Prelucrri statistice i financiare

95

Totalizarea valorilor: TOTAL


TOTAL ON <cheie> TO <fis.dbf> [FIELDS <lista-cmp>]
[<domeniu>] [FOR <cond>] [WHILE <cond>]
Comanda TOTAL realizeaz o nou tabel, numit <fis.dbf>, cu aceeai structur
ca a tabelei active. Tabela activ este parcurs n ntregime i pentru fiecare grup de
articole care au aceeai valoare a expresiei <cheie> se adaug cte un articol n tabela
<fis.dbf>. Articolul are cheia unic a grupului i suma valorilor din cmpurile specificate
n clauza FIELDS (sau toate cmpurile numerice dac lipsete aceast clauz).

Exemple
1. Fie tabela ELEVI din exemplul anterior. Dorim obinerea totalului de absene
(motivate i nemotivate) pe clase.
use elev
index on cls tag cls
total on cls to man fields absm, absn
use man
list cls, absm, absn

2. n fiierul ELEVI avem trecute notele la diferite probe de examen. Dorim s mai
adaugm dou articole: un articol cu mediile i altul cu notele maxime la fiecare prob.
Nume
Popescu
...
Medii
Nota maxima

Proba1
10.00
...

Proba2
3.78
...

Proba3
8.00
...
8.75
10

mediile la aceste probe


nota maxim la aceste probe

use elevi
declare a[3], b[3]
average all proba1, proba2, proba3 to array a
calculate max(proba1), max(proba2), max(proba3) to array b
append blank
gather from a fields proba1,;
proba2, proba3
repl nume with medii

append blank
gather from b fields proba1,;
proba2, proba3
repl nume with nota maxima

Funcii financiare
FV(<expN1>, <expN2>, <expN3>)
Funcia calculeaz valoarea viitoare a unei depuneri regulate <expN1> cu o cretere
constant n cadrul unei investiii, cu o dobnd fix <expN2> pe o perioad dat <expN3>.
Exemplu: Presupunem c am deschis un cont la o banc ce practic o dobnd de
1% lunar. Suma lunar pe care dorim s o depunem este de 3000 uniti monetare. Ne
intereseaz ce sum vom avea n cont dup 36 luni:
? fv(3000, 0.01, 36) && 129230. 64
PV(<expN1>, <expN2>, <expN3>)
96

Informatic Manual pentru clasa a XII-a

Funcia calculeaz valoarea la zi a unei investiii constituite printr-un vrsmnt


regulat cu o sum constant <expN1>, de-a lungul unui numr de perioade date
<expN3>, la o dobnd fixat <expN2>.
Exemplu: Presupunem c avem un cont la o banc ce practic o rat a dobnzii de
1% lunar. Ne intereseaz ce sum am putea acoperi din acest cont n 4 ani, pltind
lunar cte 4000 lei. Deci 4000 este suma ce se scoate regulat (lunar) din cont; 0,01
este dobnda bncii, 48 este numrul de luni.
? pv(4000, 0.01, 48) && 151895.84
PAYMENT (<expN1>, <expN2>, <expN3>)
Funcia calculeaz mrimea rambursrilor constante efectuate la intervale regulate
care permit amortizarea unei sume <expN1>, cu dobnd constant <expN2>, pe un
numr dat de perioade <expN3>.
Exemplu: Presupunem c avem de returnat un mprumut de 500.000 uniti monetare.
Ce sum vom plti lunar pentru ca n 2 ani s achitm mprumutul? tim c depunerile
lunare se adaug ntr-un cont la o banc ce acord o dobnd lunar de 1%.
? payment(500000, 0.01, 24) && 23536. 74

sarcini de laborator
I.

O societate comercial nregistreaz repartiia produselor date spre vnzare la


diferite magazine n tabela REPART cu structura (data, cod-produs, nume, pre-livrare,
grupa, magazin, cant, um). Magazinele sunt codificate numeric de la 1 la 5. Grupele de
produse sunt codificate pe dou caractere, de exemplu: TE=textile, AL=alimente,
EL=electrice .a.
data
cod
nume
pret
grupa
mag
cant
01.01.95
tele color
1500
el
1
10
01.01.95
combina
2300
el
2
2
01.02.95
casetofon
1600
el
1
15
1. Codificai produsele astfel nct s conin grupa, primele 5 caractere din numele
produsului i preul.
&& construim o expresie din cmpurile grup (caracter), nume-produs (caracter)
i pretul (numeric)! Ce funcie trebuie folosit, val sau str???
2. Aflai pentru fiecare grup de produse numrul i valoarea produselor distincte
distribuite la toate magazinele n data X.
&& facem un artificiu i nlocuim peste tot cmpul cod cu valoarea 1
&& indexm dup grupa unic
&& totalizm pe grupe
&& n cmpul cod fictiv umplut cu valoarea 1 vom obine numrul dorit.
3. Afiai cte produse distincte comercializeaz unitatea.
&& Indexare unic i numrare
Capitolul 11 Prelucrri statistice i financiare

97

4. Calculai pentru fiecare cod-produs cantitatea total repartizat n ntreaga


perioad de eviden.
&& vom indexa dup cod-produs
&& vom folosi comanda TOTAL pentru cmpul cant
5. Calculai pe fiecare magazin din subordine valoarea produselor repartizate.
6. Aflai cel mai scump produs.
&& Index on str(-pret)+nume to x unique
&& X= pret
&& List nume while pret=x
7. Trecei ntr-un istoric (fiier de tip text) repartiiile din perioada anterioar datei X,
separnd coloanele prin virgul, delimitator de ir fiind ghilimelele.
II. Vnzri. Evidena vnzrilor la mai multe magazine ale aceleiai societi
comerciale SC INTIM SRL este inut n baza de date VANZARI (dat, cod-magazin,
cod-raion, cod-produs, um, cantitate). Aflai:
1. Cte raioane au vndut azi produsul x?
2. Care este cantitatea total din produsul x vndut azi?
3. La cte magazine se gsesc raioane de papetrie (cod=2)?
4. Care este numrul total de magazine ale societii i numrul de raioane distincte?
5. Care este totalul cantitii vndute din produsul x n fiecare magazin?
6. Care este valoarea total a vnzrilor pe lista de raioane (fiecare raion o singur
dat, chiar dac el aparine unor magazine diferite)?
7. Care este valoarea medie a vnzrilor pe magazine?
8. Care este produsul vndut cel mai scump i unde s-a vndut el?
9. Care este primul moment cnd s-a vndut produsul x?
10.Care sunt cele 3 magazinele fruntae (cu cele mai mari vnzri n ultima lun)?
III.

Fiierul PERSONAL are informaii despre salariaii unei societi: (cod, nume,
loc-munc, grad, funcie, salar, impozit, reineri, sporuri).
1. Aflai:
a) salariul mediu pe locuri de munc;
b) salariul mediu pe funcii;
c) fondul total de salarii;
d) numrul de salariai pe locuri de munc;
e) impozitul total, reinerile totale, totalul sporurilor pe locuri de munc;
f) funcia i numele persoanei cu salariul maxim.
2. S presupunem c avem grila de impozitare a salariailor n tabloul IMPOZ reinut
n fiierul IMPOZ.MEM pe directorul curent. Modificai aceast gril conform
noilor reglementri (precizai reglementrile!).
Grad /salar
gr1
gr2
def

4-10
10%
...
5%

10-20
25%
...
15%

>20
30%
...
20%

Numerele reprezint
sute de RON.

Corectai tabela PERSONAL cu impozitul calculat conform noii grile! Procentul


de impozitare se aplic la salariu!
98

Informatic Manual pentru clasa a XII-a

RECAPITULARE
Operaii elementare asupra tabelelor n Visual FoxPro
SINTEZE: Operaiile curente cu tabele FoxPro
Pentru lucrul cu structura:

Deschidere/nchidere
Afiarea coninutului
Cutare i poziionare
Ordonarea coninutului
Duplicarea coninutului
unei tabele
Adugarea datelor

tergerea datelor
Corecia datelor
Relaionarea tabelelor

CREATE TABLE / CREATE


MODIFY / COPY STRUCTURE
SET FIELDS TO, =FIELDS(N)
USE, CLOSE ALL
SELECT <n>
LIST, DISPLAY afisare continut
SET FILTER TO, =RECNO(), =RECCOUNT()
LOCATE, CONTINUE, FOUND()
FIND / SEEK
SORT, INDEX
COPY TO <dbf> / TO TYPE / TO ARRAY
SCATTER
APPEND / APPEND BLANK
APPEND FROM ARRAY / <dbf> / TYPE
GATHER
DELETE, RECALL, PACK, ZAP, SET DELETED,
=DELETED()
REPLACE, BROWSE
SET RELATION TO fixare relatie 1-1
SET SKIP TO fixare relatie 1-n

Care dintre urmtoarele secvene creeaz o copie (fidel!) a fiierului BANCHERI


(cod, nume, adr, afaceri) n fiierul tabel cu numele BAN?
1. copy file
bancheri.dbf to;
ban.dbf
copy file
bancheri.fpt to
ban.fpt

2. use bancheri 3. use bancheri 4. use bancheri


sort on nume;
copy to array;
copy stru to;
to ban;
ban
ban
field nume

5. use bancheri
copy stru to ban
copy to array to ban
use ban
append from array ban
release ban

6. use bancheri 7. use bancheri 8. use bancheri


copy to ban;
sort on nume;
index on nume;
for not
to ban
tag ban
empty(cod)

9. use bancheri
list to file;
ban

10. use
11. use
bancheri
bancheri
copy stru to ban copy to ban
use ban
append from;
bancheri

12. use
bancheri
copy file;
bancheri.dbf to;
ban.dbf

Recapitulare

99

Testul 1

Operaii de afiare, cutare i poziionare

Fie un fiier de date numit CONTRACTE, creat la 11 decembrie 2000, cu toate


contractele ncheiate de o societate comercial cu diveri furnizori pentru livrarea
produselor necesare activitii sale.
nrc
n, 5

data
d, 8

furnizor
c, 20

produs
c, 10

cant
n, 10, 2

pret
n, 10

term-livr
D, 8

onorat
l, 1

conditii
m, 10

unde: nrc=numrul contractului, data=data semnrii contractului; term-livr=termenul


de livrare; onorat=arat dac a fost sau nu onorat contractul, condiii=alte condiii de
livrare.
Cerine:
a) Listai contractele ncheiate cu SC INTIM SRL n anul curent.
b) Aflai ce produse i n ce cantiti vor veni azi i de la cine.
c) Afiai valoarea fiecrui contract (presupunnd c pe un contract este un singur
produs!) al furnizorul X.
d) Afiai contractele cu termen de livrare depit. Putei numra cte contracte au
termenul depit fr s folosii comenzile de calcul?
e) Afiai ultimele 5 articole existente n tabel.
f) Aflai cte contracte are furnizorului X. (Nu folosii comenzi de calcul!)
g) Aflai dac exist vreun contract cu furnizorul X. Dac da, afiai numrul i data
acestui contract. Cum am putea afla i urmtorul contract al aceluiai furnizor?
h) Separai n dou fiiere coninutul tabelei CONTRACTE. Astfel, tabela
FURNIZ.DBF trebuie s rein datele din cmpurile Nrc, Data, Furnizor i Onorat
i PRODUSE.DBF va reine datele din cmpurile Nrc, Data, Produs, Cant, Pret,
Term_livr.
i) Deschidei n dou zone tabelele FURNIZ i PRODUSE. Afiai toate produsele
contractate de furnizorul X n primul su contract.
j) Afiai la imprimant urmtoarea situaie, scriind titlul i capul de tabel pe prima
foaie a raportului.
LISTA CONTRACTELOR LA DATA DE >>>>
nr-contract

furnizor

valoare

termen

Punctaj: Se acord cte 0,9 puncte/subiect; se acord 1 punct din oficiu.

100

Informatic Manual pentru clasa a XII-a

Testul 2

Lucrul cu mai multe fiiere, actualizarea datelor

Considerm un sistem de eviden inut pe calculator al ocuprii camerelor la mai


multe uniti de cazare din diferite zone turistice, cu urmtoarea baz de date:
Fiierul UNITATI are nregistrate toate unitile de cazare:
UNITATI.DBF
cod nume
fel
n, 5 c, 15
c, 1
numele unitii de
cazare i staiunea:
ex.: mamaia/alfa,
eforie/gama

categorie
n, 2
H=hotel
M=motel
V=vil
C=csue

agentie
c, 15
Numele ageniei
care a nchiriat
unitatea

Fiierul CAMERE reine toate camerele din toate unitile de cazare, pentru fiecare
indicndu-se numrul de paturi i starea de ocupare.
cod_unit
cod_cam
nr_pat are_tel
are_tv
Pret
este_ocup
n, 4
n, 3
n, 1
l, 1
l, 1
n, 5
l, 1
Fiierul OCUPARE ine evidena sosirii i a plecrii tuturor turitilor n anul curent,
codul camerei i al hotelului.
cod_unit
n, 4

cod_cam
n, 3

data_s
d, 8

data_p
d, 8

nume_pers
c, 15

b_i
c, 10

Scriei succesiunea de comenzi necesare pentru:


1) nregistrarea unui turist nou.
2) Plecarea unui turist.
3) Mrirea cu 10% a preului camerelor cu telefon.
4) tergerea logic a camerelor hotelului X care intr n deratizare.
5) Modificarea apartenenei unei uniti de cazare la o agenie de turism.
6) Preluarea telefonului din camera C1 n camera C2 a hotelului X.
7) Este dezafectat camera 5 din hotelul DELTA staiunea MAMAIA. Persoanele
care locuiesc n aceast camer se vor muta n camera 19.
8) Persoana X se mut ntr-o alt camer liber, cu dou paturi, televizor i telefon
din hotelul DELTA.
9) Trecerea ntr-o eviden separat a tuturor camerelor cu patru paturi, care nu
sunt ocupate la data curent.
Punctaj: Se acord 1 punct/subiect. Se acord 1 punct din oficiu.

Recapitulare

101

Testul 3

Definirea structurii unei baze de date pornind de la cerine

Citii cu atenie urmtoarele cerine i proiectai structura bazei de date necesare:


1. Afiai toate piesele de teatru programate pentru oraul X, n perioada d1-d2 sub
numele afi teatral pentru localitatea....
2. Unde (n ce localiti) a avut spectacole trupa de teatru X, cnd?
3. Toate spectacolele programate n sala Majestic dup 1 decembrie vor ncepe
la ora 18 n loc de 19, i la ora 11 n loc de ora 10.
4. Se anuleaz toate spectacolele cu piesa X, programate dup data Y.
5. Sala X intr n reparaie capital la 1 decembrie. Reprogramai spectacolele n
sala Y cu o sptmn mai trziu.
6. Ce piese de teatru are trupa MASCA n stagiunea aceasta?
7. Unde (la ce teatre) s-a montat piesa X, cnd, n regia cui?
8. Cte reprezentaii a avut piesa X, n toate montrile ei?
9. Ce actori are angajai teatrul Y?
10.Ce distribuie are piesa X, de la teatrul Y, n data Z?
11.Mai sunt locuri la piesa X?
12.Care a fost cea mai de succes montare a piesei X, la ce teatru, de care trup, n
ce regie, n ce stagiune, cine a fost n distribuie?
13.Care este indicatorul de ocupare a slii X (total locuri ocupate/total locuri disponibile) la spectacolul din data Y?
14.Cte bilete au fost vndute la un spectacol X?
15.S-a mai jucat piesa X, la alte teatre, stagiuni? Cnd? Unde? n ce regie?
Punctaj: Se acord cte 0,6 puncte/subiect i un punct din oficiu.

Testul 4

Comenzile i funciile uzuale

Fie urmtoarea list a fiierelor existente pe directorul curent:


elevi.dbf, elevi.cdx, fisier.prg, elevi.txt
A. Pentru comenzile urmtoare indicai fiierele, extensia fiecruia i extensia
implicit, eventual semnalai erorile:
use elevi
Sort on nume+str(med) to beta
Index on nume tag delta unique
List next 5 to file delta
Save to nume
Append from fisier
Sum to fis
Rename elev to student
Restore from date
102

Informatic Manual pentru clasa a XII-a

Copy to alfa for nume=a


Type beta
Use delta
Store popa to nume
Append memo to fisier
Count to fisier
Do fisier
Set default to scoala
Replace elevi to studenti

B. Care sunt comenzile corespunztoare urmtoarelor operaii?


Editarea unui fiier text
tergerea de pe disc a unui fiier
Modificarea lungimii unui cmp
Afiarea unei expresii
Crearea unui index
Schimbarea directorului curent
Adugarea unui articol vid
Pauz n program pn la
apsarea unei taste

Afiarea unui text


Citirea unei variabile
Suma valorilor unui cmp din toat tabela
Afiarea la imprimant a codului surs
a unui program
Duplicarea coninutului unei tabele
Apelul unui subprogram
tergerea tuturor variabilelor
Fixarea unei relaii de tip 1-n

C. Care dintre urmtoarele comenzi au n formatele lor clauzele de selecie i filtrare?


REPLACE
CALCULATE
PACK
ERASE

COPY
CLOSE
USE
RESTORE

LIST
DELETE
SORT
TOTAL

APPEND
FIND
COUNT
ACCEPT

SUM
SAVE
APPEND
WAIT

D. Scriei numele funciei care realizeaz aciunea:


1. conversia de la ir la numr
2. conversia de la numr la ir
3. conversia de la dat
4. conversia de la ir la dat
calendaristic la ir
calendaristic
5. minimul dintre dou expresii
6. rezultatul operaiei de cutare
7. testul asupra sfritului de tabel 8. numrul de articole ale tabelei active
Punctaj: Se acord cte 2 puncte pentru fiecare subiect; se acord dou puncte din oficiu.

Testul 5

Indexarea

Considerm o agenie de rezervare a biletelor de avion. Creai o aplicaie care permite:


a. Afiarea unui program al curselor interne regulate i excepionale, cronologic
dup ora plecrii. Pentru cele cu plecri excepionale sau neregulate, se va afia
data plecrii numai pentru o perioad de 3 luni fa de momentul afirii.
b. Aflarea curselor interne pentru localitatea X, pe companii de zbor i cronologic.
Se vor afia pentru fiecare curs: numrul, numele companiei de zbor creia i
aparine avionul i, dac este curs regulat, se va trece ziua i ora, iar dac
este o curs neregulat se va obine data i ora plecrii.
c. Afiarea unui program cronologic al curselor internaionale; plecrile i sosirile
de pe i pe aeroportul deservit de agenia respectiv vor fi afiate separat.

Recapitulare

103

d. Aflarea datei i orei de plecare, a datei i orei de sosire la destinaie pentru o


curs dat prin numrul ei. Dac este o curs regulat, se va afia un text zilnic/
sptmnal/lunar/anual n funcie de ritmicitatea zborului, apoi ora/ziua din
sptmn i ora/data din lun, apoi ora/luna, data din lun i ora.
e. Aflarea numrului de locuri ocupate/rezervate/libere pentru o anumit curs,
dat prin numrul ei i data zborului.
Sarcini: Proiectai baza de date i scriei comenzile necesare obinerii informaiilor
solicitate.
Punctaj: Se acord cte 2 puncte la sarcinile a-d, 1 punct la sarcina e i un punct din oficiu.

Testul 6

Proiectarea i folosirea relaiilor dintre tabele

Pentru activitatea de distruibuire a unor mrfuri, o companie ncheie contracte cu


diferii clieni, iar n contul acestor angajamente livreaz marfa pe baz de facturi care
trebuie achitate. Desigur, o factur se refer la un singur contract, dar pentru acelai
contract pot fi nregistrate mai multe facturi. O chitan documentul care certific
achitarea unei sume se refer la o anumit factur, dar pentru o factur pot fi
nregistrate mai multe chitane.
Fie o baz de date cu tabelele urmtoare:
a. CLIENTI, cu numele, adresa, codul, alte-inf despre clienii unei firme;
b. CONTRACTE, cu numrul i data semnrii, codul clientului, valoarea contractului;
c. FACTURI, cu numrul i data facturrii, numrul contractului pentru care s-a
facturat i valoarea facturii;
d. CHITANTE, cu numrul i data chitanei, numrul facturii, suma achitat.
Se cere:
1. Definii tabelele i relaiile dintre ele. Atenie, fixai corect cheile primare i cele
strine.
2. Aflai dac exist vreun client care nu a achitat nici o factur.
3. Care sunt facturile clientului X. Pentru fiecare factur se va afia un text
anunnd dac are sau nu achitri.
4. Pentru fiecare chitan nregistrat azi, afiai numele clientului i numrul
contractului, numrul facturii i suma.
Punctaj. Se acord cte 2 puncte/subiect. Se acord 2 puncte din oficiu.

104

Informatic Manual pentru clasa a XII-a

Testul 7

Operaii elementare cu tabele

Toi senatorii i deputaii trebuie s declare venitul i proprietile pe familie. Au fost


create urmtoarele fiiere: PARTIDE (cod_pers, nume_persoan, data_naterii, sex,
ocupaie_anterioar, studii, nume_partid, funcia_in_partid, data_inscrierii, alte_date);
PARLAMENT (cod_pers, tip, venit_anual_declarat), cu informaii despre parlamentari
(unde tip=s=senator, tip=d=deputat); IMOBILE (cod_pers, imobil-adresa, numrcamere, valoare).
1. Facei urmtoarele corecii:
Popescu a trecut la PRM. Ionescu, fiind prieten cu Zaharescu, se nscrie la
partidul acestuia din urm. X a decedat i va fi scos din eviden, dar, nainte i
se trec datele personale ntr-un fiier istoric cu aceeai structur ca VIP.DBF. n
locul lui X intr n parlament pe aceeai funcie persoana Y din acelai partid.
2. Afiai sub forma urmtoare:
Lista parlamentarilor la data de ....
Deputai

Senatori

nume partid funcie

nume partid funcie

3. Dublai venitul senatorilor numai dac de la ultima majorare a trecut cel puin o
lun. Ultima modificare se gsete n fiierul DATE_IMP.MEM sub numele DUA
(Data Ultimei Actualizri).
4. S-a anunat c venitul trebuie exprimat n dolari; tiind cursul de schimb, facei
coreciile necesare.
5. Aflai:
a) Pentru fiecare imobil, din ce partid face parte proprietarul?
b) Care sunt membrii senatori sau deputai din patidul X?
c) Exist vreun membru al partidului X fr cas?
d) Care sunt cei mai bogai parlamentari (primii 10)?
Punctaj. Se acord cte 2 puncte pentru subiectele 1, 2, 3, 5, un punct pentru subiectul 4 i
un punct din oficiu.

sarcini pentru realizarea


unui mini-proiect
Lucrai la proiectele pe echipe. Imaginai sarcini pentru folosirea indecilor i a
relaiilor dintre tabele. Codificai operaii de calculare a sumelor, mediilor, diverse
totalizri. Folosii importuri de date din Excel. Realizai exportarea unei table Visual
FoxPro ntr-o foaie de calcul Excel.
Recapitulare

105

Capitolul

12

Programarea clasic
n FoxPro
 Comenzi pentru structuri de control
 Proceduri i funcii utilizator
 Depanarea programelor

Dezvoltarea programelor n maniera clasic presupune folosirea tehnicilor de


structurare i modularizare a programului. FoxPro permite descrierea structurilor de
control i a procedurilor i funciilor utilizator.

Structura alternativ i comanda IF...ENDIF


IF <cond>
<secv.1>
[ELSE
<secv.2>]
ENDIF

Operaia de ramificare a algoritmului n funcie de valoarea


de adevr a unei expresii logice, cu revenirea, n ambele
situaii, ntr-un singur punct, se realizeaz cu structura
alternativ codificat prin comanda IF.

Structura selectiv i comanda DO CASE...ENDCASE


DO CASE
CASE <conditie1>
<secv1>
CASE <conditie2>
<secv2 >
CASE <conditieN>
<secvn>
[OTHERWISE
<secvm>]
ENDCASE

Este evaluat prima condiie <c1> i, dac este


adevrat, este executat secvena de comenzi
<secv1> i se prsete structura CASE. Dac nu
este ndeplinit condiia <c1>, se va testa condiia
notat <c2> .a.m.d. Se ajunge, deci, la testarea
condiiei <cn> atunci cnd niciuna dintre condiiile
precedente nu a avut valoarea adevrat. Codificarea
structurii selective se face prin comanda DO CASE.
Dac nicio condiie nu este adevrat, se va executa
secvena <secvm> asociat clauzei OTHERWISE.

Structura repetitiv i comanda DO WHILE...ENDDO


DO WHILE <cond>
<secv >
[LOOP]
[EXIT]
ENDDO

106

Structura repetitiv condiionat anterior (sau


structura while) se execut astfel: ct vreme
condiia pus n structur <cond> este adevrat, se
repet grupul de comenzi <secv>. n momentul n
care condiia a devenit fals, se prsete ciclul.

Informatic Manual pentru clasa a XII-a

Structura repetitiv i comanda SCAN...ENDSCAN


SCAN [<domeniu>]
[FOR <cond>]
[WHILE <cond>]
<secv>
ENDSCAN

Se parcurge baza de date activ, selectnd articolele


prin clauzele <domeniu> FOR<conditie> i
WHILE <conditie>. Secvena de comenzi <secv>
se va aplica pe articolele selectate. Domeniul implicit
de aciune al comenzii SCAN este ALL. Se poate fora
ieirea din structura repetitiv SCAN prin comenzile
EXIT i LOOP.

Structura repetitiv i comanda FOR...ENDFOR


FOR <variabila> = <exp1>
TO <exp2> [STEP <exp3>]
<secv >
ENDFOR

Se iniializeaz variabila de control a ciclului cu


valoarea <exp1>; se execut corpul de
instruciuni pn cnd variabila de control
devine mai mare dect <exp2>. La fiecare pas
se modific valoarea variabilei de control a
ciclului cu valoarea <exp3>, dac este
prezent clauza STEP, sau incrementat cu o
unitate dac lipsete clauza STEP.

Ieiri forate: LOOP i EXIT


Pentru forarea ieirii dintr-un ciclu se folosete comanda LOOP, care determin
saltul peste urmtoarele instruciuni ale ciclului i reevaluarea condiiei ciclului. EXIT
determin ieirea forat din bucl, indiferent de valoarea expresiei logice <cond>.

Exemple
1. Dorim s introducem ntr-o tabel numele i coninutul mai multor documente pe
care le avem ntr-un director. Vom folosi cmpul General.
CREATE TABLE Fisier (nume C(24),text G)
CD GETDIR()
Nr = ADIR(A, *.doc)
IF nr > 0
FOR i = 1 to nr
APPEND BLANK
REPLACE fisier.Nume WITH A(i,1)
APPEND GENERAL fisier.text FROM A(i,1)
ENDFOR
ELSE
=MESSAGEBOX(Nu sunt documente!)
ENDIF

Crearea tabelei;
poziionare pe director
prin GETDIR.
Funcia ADIR copiaz
ntr-un masiv informaiile
despre fiierele din
directorul curent.
NR=Numr de fiiere
copiate n matricea A.
Dac avem documente,
atunci adugm cte un
articol n fiier, reinnd
numele i coninutul
documentului.

Capitolul 12 Programarea clasic n FoxPro

107

2. Utilitatea funciei GetFile


SELECT 0
FIS = GETFILE(DBF)
DO CASE
CASE UNTITLED $ FIS
CREATE (FIS)
CASE EMPTY(FIS)
RETURN
OTHERWISE
USE (FIS)
BROWSE
ENDCASE

Se deschide fereastra Open.


Opiuni:
1. Dac a fost apsat butonul New, atunci irul
returnat are valoarea Untitled i se permite
crearea tabelei;
2. Dac a fost apsat tasta Cancel sau Esc
sau butonul Close, atunci irul returnat este
vid i nu facem nimic;
3. A fost selectat fiierul i acesta va fi deschis
prin comanda Use.

3. Problema celebritii
Spunem c o persoan este celebritate pentru un grup, dac este cunoscut de toi
membrii grupului, dar nu cunoate pe nimeni. Stabilii cine este celebritatea (dac
exist o astfel de persoan).
Rezolvare
Presupunem existent o tabel RELATII(P1 N(4), P2 N(4)) cu semnificaia
persoana de cod P1 cunoate persoana de cod P2.
P1 i P2 conin coduri de persoane (valori numerice ntregi mai mari ca 1). Valoarea
maxim a acestor coduri poate da numrul total de persoane.
1) Determinarea codului maxim n variabila nr
Varianta 1
Varianta 2
Use relatii
Do while not eof()
calc max(p1), max(p2) to n, m
if nr<max(p1,p2)
nr=max(n, m)
nr=max(p1,p2)
skip
enddo
endscan
2) Afiarea celebritii
Index on p1 tag p1
for i=1 to nr
y=0
scan for p2=i
&&numarare
y=y+1
endscan
if y=nr-1 &&pers i este
&&cunoscuta
seek i
if .not. found() &&nu cunoaste
?persoana,i,e celebritate
exit
&& iesirere fortata
endif
endif
endfor
use
108

Informatic Manual pentru clasa a XII-a

Mesaj = && initial, sirul vid


For i=1 to Nr
count for p2=i to y
if y=nr-1
locate for p1=I
if .not. found()
mesaj=pers+str(i)+;
este calebritate
EXIT
Endif
endif
endfor
if empty(mesaj)
? nu exista celebritate
else
? mesaj
endif

4. O problem de vnzare a biletelor de tren


La agenia CFR, pentru activitatea de eliberare a biletelor, este folosit un fiier
LOCURI cu urmtoarea structur (figura 12-1):
La sosirea unui client se
cere data, numrul trenului,
tipul vagonului (clasa 1,
clasa 2, cuet sau vagon
de dormit) i numrul de
bilete solicitate. Biletele se
pot elibera maxim cu zece
zile naintea plecrii trenului.

Figura 12-1:
Fiierul locuri.dbf
n Table Designer

Vanzare.prg
use locuri in 1
input trenul to t
input nr-bilete? to n
accept data? to d
d=ctod(d)
accept clasa? (1,2,d,c) to c
sele 1
set filter to a.tren=t and a.data=d and a.tip_vagon=c
count to v
if v<n
messagebox(atentie, nu sunt bilete)
else
locate for tren=t and data=d and tip_vagon=c and not ocupat
i=0
do while found() and i<n
i=i+1
@ 5+i,5 say aveti locul+str(nr_vagon)+str(compartiment)+str(nr_loc)
replace ocupat with .T.
continue
enddo

sarcini de laborator
1. Cum modificai procedura de ocupare a locurilor dac s-ar cere ca toate biletele
unui grup s fie n acelai compartiment sau acelai vagon? Este necesar precizarea
staiei de coborre? Cum s-ar schimba programul dac ar fi o baz de date distribuit
pe o reea de calculatoare i toate ageniile CFR din ar ar avea acces direct la ea?
2.

Scriei un program care s calculeze numrul de locuri ocupate i neocupate, pe


categorii de vagoane i date calendaristice. Aflai care este ziua/zilele cnd au fost
ocupate integral locurile unui tren dat.
Capitolul 12 Programarea clasic n FoxPro

109

3.

4.

Fie tabela meciuri, cu rezultatele meciurilor planificate ntr-o etap MECI(e1, e2,
g1, g2). Realizai un clasament pe echipe, dup punctaje i golaveraje.
La un concurs de orientare turistic se fixeaz de ctre arbitri momente decalate
de plecare n curs pentru fiecare participant. Organizarea participanilor se face pe
grupe de vrst i sex. Grupa este un cod format din litera m sau f i un numr care
indic limita maxim a intervalului de vrst. De exemplu grupa m10 desemneaz
bieii ntre 9 i 10 ani, f8 fetele ntre 7 i 8 ani.
n fiierul START (grupa, moment-start, interval) se introduc pentru fiecare grup
momentul de plecare n concurs i intervalul ntre dou plecri sucesive ale membrilor
aceleiai grupe. n fiierul CONCURENT (grupa, nr, nume, moment-plecare, momentsosire) se vor trece concurenii.
La nscriere, pentru fiecare concurent se citesc numele, data naterii, sexul i se
determin grupa. Cmpul Nr va conine numrul curent dup ordonarea alfabetic pe
grupe. Momentul de plecare va fi calculat n funcie de momentul de start al grupei i
de poziia n grup.
Scriei un program pentru:
1) introducerea concurenilor (nume, vrst, sex);
2) codificarea persoanelor (cmpul Nr);
3) introducerea momentelor de start pentru fiecare grup;
4) completarea momentului de plecare n curs a fiecrui participant (atenie la
intervalul ntre plecrile celor din aceeai grup);
5) nregistrarea momentului de sosire a fiecrui participant (pentru o persoan
indicat prin cod se va trece timpul sistem);
6) determinarea ctigtorului din fiecare grup;
7) afiarea listelor de final pe grupe, n funcie de durata cursei;
8) afiarea tuturor concurenilor n ordine alfabetic.
5.

Observai programul urmtor. Putei deduce structura tabelei contracte? Ce


credei c dorete s realizeze programul? Ce erori sunt?
1. create table manevra(nr_art
11.endif
N(3), erori N(3))
12.if not inlist(um,kg,tone,
2. use manevra in 1 alias ma
buc)
3. use contracte in 2 alias c
13.er=er+str(3)
4. er=[ ]
14.endif
5. scan
15.if er # [ ]
6. if empty(furnizor)
16.sele ma
7. er=er+str(1)
17.repl nr_art with recno(2),
8. endif
1-> erori with m->er
9. if not between(term_livr,
18. endscan
date(), date()-7)
10.er=er+str(2)

1
2

110

Urmrii o sugestie de rezolvare la sfritul manualului.


Urmrii o sugestie de rezolvare la sfritul manualului.
Informatic Manual pentru clasa a XII-a

Proceduri utilizator
Procedurile utilizator sunt uniti funcionale care realizeaz o anumit sarcin i
returneaz sau nu valori n modulul apelant. Pot fi plasate n fiierul surs n care se
gsete modulul apelant sau n alt fiier, numit fiier de proceduri. Definirea procedurii:
PROCEDURE <nume-proc>
[PARAMETERS <lista-parametri -formali>]
<comenzi>
[ENDPROC]
Comunicarea ntre modulul apelant i procedur se poate face prin parametri.
Definirea listei de parametri formali se realizeaz prin comanda PARAMETERS, care
trebuie s fie pe prima linie dup numele modulului.
Apelul unei proceduri se face prin comanda DO:
DO <nume-proc> [WITH <lista parametri-efectivi>]
Lista parametrilor reali sau efectivi este precizat n clauza WITH a comenzii de apel.
Revenirea n programul apelant se poate face prin una dintre comenzile:
RETURN[TO MASTER]/CANCEL/RETRY

Funcii utilizator
Funcia este o unitate funcional care returneaz programului apelant o valoare,
ca rezultat al prelucrrilor sale. O funcie utilizator (UDF User Defined Function) poate
intra n componena unei expresii.
Definirea unei funcii se face prin comanda FUNCTION:
FUNCTION <nume-functie>
[PARAMETERS <lista-parametri-formali>]
<comenzi>
RETURN <expr>
[ENDFUNC]
Comunicarea rezultatului funciei se face comanda RETURN <exp>.
Apelul pentru execuia funciei se face prin numele acesteia n cadrul unei expresii.
La execuie, n locul identificatorului se va introduce valoarea returnat de funcie.
Transmiterea parametrilor se poate face prin valoare sau prin referin. n mod
implicit, parametrii sunt transmii prin valoare n funcie i prin referin n subprograme
sau proceduri. Schimbarea modului de transmitere a parametrilor la funcii utilizator se
poate realiza prin comanda:
SET UDFPARMS TO VALUE / REFERENCE

Capitolul 12 Programarea clasic n FoxPro

111

n Visual FoxPro nu exist nici o diferen ntre unitile funcionale. O procedur


poate fi apelat ca o funcie i invers. Numrul de parametri reali poate s fie mai mare
dect cei formali! n continuare sunt prezentate cteva uniti funcionale. Observai
apelurile:
Do ex_proc with 15
Procedure ex_proc
Do ex_proc with 15,20,30
Parameters unu, doi
? ex_proc(15,20)
If parameters()<2
=ex_proc (15)
=messagebox(prea putini parametri)
Return .F.
else
function ex_proc (unu,doi)
Return .T.
If parameters()<2
Endif
=messagebox(prea putini parametri)
Endproc
Return .F.
else
procedure ex_proc (unu,doi)
Return .T.
If parameters()<2
Endif
=messagebox(prea putini parametri)
Endfunc
Return .F.
else
Return .T.
Endif

Exemplu
function adun
parameters x
x=x+1
return x

Exemple

set udfparms to value


A=5
? adun(A)
6
? A
5
Cnd un parametru este transmis
prin valoare, orice modificare n
unitatea funcional nu este
vizibil n exterior.

set udfparms to reference


A=5
? adun(A)
6
? A
6
Cnd un parametru este transmis
prin referin, orice modificare a
coninutului su este vizibil n
programul apelant.

1. Criptare i decriptare. Presupunem c n cmpul Adresa (de tip Memo) al unui


fiier se gsesc informaii secrete. Se dorete criptarea i, desigur, decriptarea lor.
ELEVI (nume C(10), adresa M)

112

&& criptare
replace all adresa;
with cripto(adresa)

&& decriptare
Scan
wsir=
do decripto with elevi.adresa, wsir
replace adresa with wsir
endscan

function cripto
parameters s
w=
for i=1 to len(s)
el=substr(s,i,1)
if el $ aAeEiIoOuU
el=el+p+el && p+vocala
endif
w=w+el
endfor
return w

procedure decripto
parameters s,w
w=
i=1
do while i<= len(s)
el=substr(s,i,1)
if upper(el) $ AEIOU
i=i+2
endif
w=w+el
i=i+1
enddo

Informatic Manual pentru clasa a XII-a

2. La jocul BINGO se pun n vnzare sptmnal un numr de buletine de concurs,


numr hotrt de agenie. Pe buletine sunt nscrise cte 6 numere distincte, generate
aleator, n intervalul 1-45. Buletinele de concurs sunt numerotate (nseriate). Tabela va
fi BINGO cu urmtoarea structur:
data
d,8

cod
n,8

nr1
n,2

use bingo
declare a[6]
input cate buletine ?;
to nrb
input seria primului ?;
to ns
for b =1 to nrb
append blank

nr2
n,2

nr3
n,2

nr4
n,2

nr5
n,2

nr6
n,2

repl cod with (ns-1)+b, data with date()


do generare
repl from array a fields nr1,nr2,nr3,;
nr4, nr5, nr6
endfor
use
return

&& bingo.prg declare a[10]


input to nrb
for b=1 to nrb
procedure generare
append blank
for h=1 to 6
do generare
a[h]=punenr() function punenr
replace .....
endfor
x=int(rand()*45+1)
replace.....
return
do while .not.
endfor
verif()
x=int(rand()*45+1)
enddo
return x

function verif
verif=.t.
y=1
do while y<h
if a[y]=x
verif =.f.
endif
y=y+1
enddo
return verif

3. n vederea vnzrii biletelor, fiierul LOCURI din aplicaia anterioar trebuie completat
cu locurile la toate trenurile din
perioada urmtoare (maxim 10
zile). S presupunem c exist
un fiier GARNITURA, actualizat
de un dispecer, ce ofer informaii despre structura fiecrui
tren: cte vagoane are, de ce Figura 12-2: Fiierul GARNITURA n Table Designer
tipuri.
Scriei un program care, pe baza unui meniu, s ofere mai multe activiti: editarea
tabelei Garnitura, generarea locurilor, vnzarea biletelor. Observai o modalitate de
realizare. Atenie la folosirea procedurilor cu parametri!

Capitolul 12 Programarea clasic n FoxPro

113

Programul principal CFR.prg


use locuri in 1
use garnitura in 2
opt =3
do while opt# 4
@ 1,1 say 1. editare garnituri
@ 2,1 say 2. generare locuri
@ 3,1 say 3. vanzare bilete
@ 4,1 say 4. terminare program
@ 5,1 say alegeti get opt
read
do case
case opt=1
sele 2
browse
case opt=2
do generare
case opt=3
do vanzare
endcase
enddo
close all

Procedure generare
sele 2
scan
do gen_loc with 1,b.nr_vag_1,8,6
do gen_loc with
2,b.nr_vag_2,10,8
do gen_loc with
c,b.nr_cusete,6,6
do gen_loc with
d,nr_vag_dormit,6,3
endscan
close all
return
Procedure gen_loc
parameters t,v,c,l
for i=1 to v
for j=1 to c
for k=1 to l
sele 1
append blank
replace id with recno()
replace a.tren with b.tren
replace data with date()+10
replace tip_vagon with t
replace nr_vagon with i
replace compartiment with j
replace nr_loc with k
endfor
endfor
endfor
sele 2
return

sarcini de laborator
I.

Un concurs de frumusee3 conine mai multe probe sau criterii de selecie.


Fiecare criteriu are un punctaj minim trecut n vectorul P din fiierul MINIME.MEM. La
nscrierea concurentelor, se trec datele generale n fiierul CONCURS.DBF (nume,
adresa etc). Odat cu desfurarea probelor se nregistreaz punctajele obinute
efectiv de candidate n fiierul REZULT.DBF (nume, criteriu, punctaj). Cerine:
1. Scriei o funcie care testeaz dac fiierele aplicaiei exist i dac toate
rezultatele au fost completate n fiierul Rezult.dbf. Funcia va determina
continuarea sau prsirea programului.
2. Creai o procedur care compune un tablou cu rezultatele fiecrei concurente pe
criterii i afieaz tabloul.
3. Scriei o funcie care determin punctajul maxim obinut de participante la un
criteriu dat ca parametru.
3

114

urmrii variantele de rezolvare a problemei la sfritul manualului.


Informatic Manual pentru clasa a XII-a

4. Scriei o procedur care va marca pentru tergere toate persoanele din


Rezult.dbf care nu au obinut minimul cerut de fiecare criteriu i afieaz
aceste persoane.
5. Scriei o procedur care afieaz persoanele ctigtoare la fiecare criteriu.
6. Scriei o funcie care testeaz dac exist criterii la care exist mai muli
ctigtori i returneaz codurile acestor criterii.
7. Scriei o funcie care afl numrul persoanelor cu punctaj maxim la vreun criteriu
i sub minim la altul. Care este (sunt) acest(e) caz(uri)?
8. Scriei o procedur care afieaz clasamentul pe primele trei locuri. Particip
toate concurentele care au punctaje de trecere la toate probele. La acelai
punctaj se acord aceleai medalie.
9. Scriei o procedur care permite nregistrarea punctajelor obinute la o prob
(criteriu) dat ca parametru la toate concurentele.
10.Scriei o procedur care citete datele personale ale unei concurente.
11.Scriei o procedur de actualizare a vectorului cu punctaje.
12.Scriei programul principal care apeleaz aceste uniti funcionale.
II.

Fie urmtoarele fiiere. Presupunem c un programator distrat a construit un set


de variante de fiiere principale i un alt set de fiiere secundare, adic cele care conin
unitile funcionale apelate de principal.
**fiier1.prg
procedure unu
parameters a
?a*10
return
function doi
? a/10
return

**fiier2.prg
clear
do unu
? doi
return

**fiier4.prg
clear
do unu(5)
do doi
return

**fiier5.prg
procedure unu
parameters a
?a*10
function doi
?a/10
return .t.

**fiier3.prg
function unu
parameters a
return a*10
procedure doi
parameters a
return a/10
**fiier6.prg
clear
? unu(5)
?doi(5)

Care este
perechea
corect?

sarcini pentru realizarea


unui mini-proiect
Identificai prelucrrile specifice fiecrui domeniu analizat i proiectai procedurile
necesare. De exemplu, pentru baza de date TEATRU v propunem s analizai
urmtoarele proceduri:
1. O procedur de planificare a unui spectacol pentru o anumit dat/sal/or
numai dac sala nu este ocupat;
2. O procedur de afiare a informaiilor solicitate de clienti (de exemplu, unde se
joac piesa x? La ce or ncep spectacolele la sala x? etc.);
Capitolul 12 Programarea clasic n FoxPro

115

3. O procedur de rezervare/vnzare a biletelor la spectacolele din oraul X;


4. O procedur pentru calcule statistice: numr de spectatori, sume ncasate,
valoarea medie a unui bilet etc.

Activitatea de depanare a programelor


Testarea sau depanarea dezvluie deficienele de proiectare i erorile de scriere,
ceea ce nseamn pentru programator revenirea la faza de codificare, corectarea
erorilor, recompilare, apoi relansarea n execuie pentru testare.
Primul caz de depanare a avut loc cu muli ani n urm, cnd o insect a provocat
defectarea ctorva componente din calculator. A aprut termenul de debugging=depanare, adic operaia de scoatere a hibelor (bugs=insecte) dintr-un program.
Aplicaia informatic trebuie privit ca un ansamblu de componente care, chiar dac
au fost proiectate vizual i suntem siguri c sunt corecte, trebuie asamblate i verificate
n interdependenele dintre ele.
Activitatea de testare este foarte important i este vzut ca o activitate distinct a
procesului de dezvoltare. Se poate desfura conform unui plan. Unii programatori
testeaz aplicaia doar la final. Alii prefer ca pe parcursul proiectrii s pun i
problema testrii. Exist dou abordri ale procesului de testare:
a) orientat spre date: nu cunoatem modul de funcionare a programului, dar
selectm o gam larg de date de test i rulm programul cu aceste date,
observnd dac sunt obinute rezultatele (ieirile) dorite.
b) orientat spre funcia programului: cunoatem bine funcia realizat de program
i urmrim trecerea controlului pe toate cile pe care poate evolua execuia
programului.

Etapele activitii de testare


a. Pregtirea programului pentru testare:
verificarea manual a modului de codificare a programului, urmrind respectarea restriciilor metodologice, alegerea notaiilor standardizate sau semnificative, adoptarea unor formulri clare, precise, utilizarea comentariilor;
rularea pe calculator a programelor pentru depistarea i corectarea erorilor de
compilare;
adugarea unor secvene temporare, care permit controlul derulrii
programului (mesaje suplimentare, stocarea rezultatelor intermediare ntr-un
fiier de control etc.);
simularea modulelor lips din cadrul structurii programului, fie prin folosirea
modulelor vide (nu execut nici un fel de prelucrare, prednd controlul programului apelant imediat ce au fost apelate), fie prin module de substituie (module
simple cu caracter provizoriu care simuleaz funcia modulului respectiv).
b. Pregtirea datelor de test are o deosebit importan, de aceast operaie
depinznd n bun parte reuita testrii. Trebuie testate toate ramificaiile din
program i toate combinaiile posibile ale acestora. Exist o serie de tehnici care
permit generarea fiierelor de test sau programatorul trebuie s compun fiiere
cu datele dorite.
116

Informatic Manual pentru clasa a XII-a

c. Testarea propriu-zis, adic rularea programului cu datele pregtite pentru test


i verificarea rezultatelor obinute prin analiza fiierelor obinute dup prelucrare.
Pentru analiza rezultatelor se pleac de la aceleai date i se efectueaz manual
calculele, simulnd funcia programului, pentru a fi comparate cu ieirile din
program.
d. Testarea de ansamblu vizeaz asamblarea componentelor i constituirea
datelor de test pentru toate funciunile modulelor programului, testarea propriuzis a programului principal i comunicarea ctre eful de proiect a momentului
de terminare a etapei.

Tipuri de erori
a) Erori de sintax. Sunt depistate la compilarea programului. Sistemul afieaz
ntr-o fereastr de mesaje eroarea ntlnit.
b) Erori logice. Sunt mai greu de depistat sau de remediat. Nu sunt detectate la
compilare, ci la execuie. De exemplu:
operaia de restaurare Restore, chiar dac folosim clauza Additive, poate
determina tergerea vechilor variabile, dac au acelai nume;
depirea capacitii unui cmp numeric conduce la pierderea valorilor
(observai steluele!);
expresii complicate, unde au fost inversate valorile etc.;
alt eroare greu de detectat survine cnd lucrm cu mai multe zone i
pointerul de fiier nu este bine gestionat.
c) Erori de tip excepie. Sunt acele situaii care nu pot fi anticipate la testarea
programului. De exemplu, mutarea unui fiier n alt director sau tergerea unui index
care se face n afara aplicaiei pot conduce la prsirea pe caz de eroare a
programului.

Sfaturi pentru depistarea i eliminarea erorilor


Utilizarea modularizrii, pentru ca depistarea i corectarea erorilor s se fac
mai uor;
Eliminarea ieirilor forate din structurile de control;
Conceperea unui plan de testare care s acopere toate cile/ramurile
programului;
Utilizarea ferestrelor Wait i a altor mesaje de testare a locului unde se gsete
execuia programului;
Crearea unui mediu de testare identic cu cel n care va funciona aplicaia;
Identificarea operaiilor mai delicate i a calculelor speciale pe care le face
programul, pentru a insista supra lor;
Identificarea criteriilor de succes al testrii;

O idee: Luai programul care nu merge i plasai pe rnd proceduri ntre comentarii
pn cnd acesta va funciona. Refacei invers drumul, activnd cte o procedur pn
depistai eroarea!

Capitolul 12 Programarea clasic n FoxPro

117

Utilizarea rutinelor (subprogramelor) de tratare a erorilor. Rutinele de tratare


a erorilor presupun din partea programatorilor un efort de imaginare a
eventualelor situaii care pot duce la erori i ieire forat din program.

Exemple
1. De multe ori, deschiderea unui fiier nu este posibil din cauza inexistenei lui. n
asemenea cazuri, sistemul afieaz un mesaj i ntrerupe programul. Pentru rezolvarea
erorii putem concepe un modul special:
If ! file (elevi.dbf)
Rezolv.prg
do rezolv
create elevi
endif
use
use elevi
return
2. Pentru situaia detectrii sfritului de fiier la o comand SKIP se poate construi
o procedur care face poziionarea pe ultimul articol. Pentru a elimina dependena de
fiierul care a cauzat eroarea vom folosi comanda ON ERROR.
on error do rezolv
rezolv.prg
use elevi
if error()=4 && codul de eroare este 4
skip
go bottom
...
endif
return
Comanda ON ERROR redirecioneaz execuia ctre o anumit subrutin cnd
procesorul de evenimente detecteaz o eroare.

Alte funcii utile


error()&& returneaz codul de eroare
message() && returneaz mesajul asociat erorii
lineno() && returneaz numrul liniei care a generat eroarea
program() && returneaz numele programului aflat n execuie
Putem realiza o subrutin care s testeze numrul erorii i s ncerce s o trateze.
De obicei, rutina de tratare a erorilor este apelat cu mai muli parametri:
ON ERROR DO tratare_erori WITH error(), message(),
program(), lineno()

Exemplu
PROCEDURE tratare_erori
Parameters nreroare, mesaj, Cprogram,nlinie
Do case
nu se gsete tabela n
case nreroare=1
directorul precizat
noufis=getfile(dbf, alegeti un fisier) vom deschide ecranul de
selecie a fiierelor
if empty(noufis)
prsirea programului
cancel
n caz de eroare
118

Informatic Manual pentru clasa a XII-a

else
return
case nreroare=38
goto top
case nreroare=4
go bottom
endcase

ne ntoarcem n programul
apelant dup selecia fiierului.
pointerul este naintea primului articol
pointerul este dup ultimul articol

Strategii de depanare
Cnd survine o eroare n timpul execuiei programului, sistemul afieaz o caset
de dialog coninnd mesajul i trei butoane: Ignore, Suspend, Cancel.
Ignore ignor eroarea i continu programul (este cazul unor erori minore,
cum ar fi inexistena unui set de culori).
Suspend suspend execuia, las fereastra de editare deschis i cursorul
plasat pe linia greit. Mediul este lsat intact. Operatorul ncearc corectarea i
se revine cu comanda RESUME din fereastra de comenzi. Aceasta reexecut linia
de la care a aprut eroarea. Este cazul unei erori mai grave, cum ar fi lipsa
fiierului care trebuie deschis, dar care poate fi corectat manual, direct. Poate
fi executat o comand de creare a unei tabele i apoi se poate reveni. Se pot
deschide ferestrele de depanare Trace, Debug.
Cancel anuleaz execuia programului i v plaseaz n fereastra de editare
pe linia greit.

Utilizarea instrumentului Debugger


Utilitarul Debugger se apeleaz selectnd Tools, Debugger sau prin comanda
SET STEP ON din fereastra de comenzi. Se deschide o fereastr cu un meniu
principal, o bar cu butoane pentru selectarea direct a unor opiuni, cinci ferestre de
lucru, fiecare cu meniuri contextuale.
Principalele ferestre sunt:
Fereastra Trace permite vizualizarea liniilor pe parcursul execuiei programului.
Deschiderea unui program pentru vizualizare se face prin File, Open sau prin clic pe
butonul cu acelai nume. Programul deschis trebuie s fie rulat n regim de depanare.
Fereastra Watch ajut la urmrirea valorilor variabilelor, expresiilor. Adugarea
rapid a unei variabile se face prin poziionarea pe variabil n fereastra Trace i
tragere i plasare spre fereastra Watch.
Fereastra Call stack ofer vizualizarea stivei de apeluri a funciilor i procedurilor
folosite n program.
Fereastra Output este o fereastr special n care sunt afiate ieirile special
destinate depanrii, prin intermediul comenzii DebugOut.
Fereastra Local permite urmrirea variabilelor locale unui modul.

Capitolul 12 Programarea clasic n FoxPro

119

Figura 12-3: Depanarea unui program

Urmrirea execuiei unui program se poate face prin rularea acestuia linie cu linie i
observarea efectelor asupra variabilelor, cmpurilor, tabelelor. Compararea valorilor
expresiilor cu cele ateptate poate s conduc la depistarea erorii. Dac depistm o
eroare i nchidem fereastra depanatorului, intrm n editarea sursei i facem modificarea.
Opiunile de rulare a unui program n regim de depanare sunt:
a) opiunea step into rularea pas cu pas intrnd i n subrutine. Permite avansul
la urmtoarea instruciune numai dac utilizatorul apas tasta Enter. Observai
n figura 12-3 semnul sgeat ctre instruciunea curent.
b) opiunea step over rularea pas cu pas, dar srind peste subrutine. Opiunea
step out este folosit dac, indiferent pe ce instruciune am fi, dorim terminarea
programului ntr-un singur pas.
c) opiunea run to cursor executarea tuturor instruciunilor de la cea curent
(marcat prin sgeat) ntr-un singur pas pn la instruciunea pe care am pus
cursorul.
d) opiunea de rulare ncetinit se alege selectnd Debug, Throttle. Dup un anumit
numr de secunde, precizat de utilizator, se trece la instruciunea urmtoare.
e) opiunea breakpoint rulare pn se ajunge la un punct de ntrerupere.
Punctele de ntrerupere se plaseaz prin dublu clic pe banda din stnga a liniei, cu
instruciunea sau expresia unde se dorete oprirea sau prin butonul toggle breakpoint
(observai un punct rou!). tergerea unui punct de ntrerupere se face prin dublu clic
pe el sau cu opiunea Clear Breakpoint.

120

Informatic Manual pentru clasa a XII-a

Atenie! Un punct de ntrerupere poate fi permanent chiar dac nchidei programul


i ieii din depanare.
Atunci cnd fixm un punct de ntrerupere este bine s ne gndim ce faciliti
permite acesta. Fereastra Breakpoints, deschis selectnd Tools, Breakpoints, arat
aceste posibiliti la lista Type:
a) Oprire la un anumit modul / linie (Break at location).
b) Oprire atunci cnd o anumit expresie este adevrat sau doar se modific
(Break when expression is true/Break when expression has changed).
Expresia ce trebuie construit n aceeai fereastr a utilitarului se va evalua la
fiecare linie a programului, determinnd oprirea atunci cnd este adevrat sau
numai i-a schimbat valoarea.
c) Oprire la o anumit linie numai dac expresia este adevrat (Break at location
when expresion is true) este combinaia celor dou posibiliti anterioare.
Ori de cte ori programul ntlnete un punct de ntrerupere, l trateaz ca pe o
instruciune Suspend i ntrerupe execuia. n timp ce programul este suspendat putei
face urmtoarele:
a) s parcurgei codul surs nainte i napoi folosind bara de derulare;
b) s comutai la un alt obiect sau alt procedur;
c) s deschidei fereastra Data Session pentru a verifica starea fiierelor deschise,
indecii asociai;
d) s introducei comenzi n fereastra de comenzi;
e) s selectai opiuni din meniul principal;
f) s modificai valoarea curent a oricrei variabile de memorie sau tabel.

sarcini de laborator
I.

Fie un program de calcul a factorialului. Programul citete o variabil, apeleaz


funcia de calcul i la terminare afieaz un mesaj. Observai-l n fereastra Trace din
figura 12-4. De fiecare dat cnd l rulm obinem acelai rezultat: zero!
1. Scriei codul programului de calcul al factorialului exact ca i cel din figur cu
editorul de programme.
2. Apelai programul utilitar prin Tools, Debugger.
3. Deschidei fereastra Trace prin clic pe butonul Trace.
4. Deschidei programul n fereastra de urmrire prin File, Open sau clic pe butonul
cu acelai nume etc.

Capitolul 12 Programarea clasic n FoxPro

121

Figura 12-4: Exemplu de ntrerupere

5. Deschidei fereastra Watch prin Window, Watch sau clic pe butonul utilitar.
6. Trecei n urmrire variabilele de lucru: n, i, p prin tragere i plasare.
7. Apsai butonul Step Over. Ce se ntmpl? Programul se va opri la introducerea
lui n i va afia gata!. Valoarea rezultatului este zero! Mai mult, se terge sursa
din fereastra Trace.
8. Redeschidei sursa i rulai-o pas cu pas prin butonul Step Into. Observai
deplasarea sgeii de la o instruciune la alta i modul de variaie a variabilelor i
i p. Ai depistat eroarea? Dac nu, continuai depanarea.
9. Fixai un punct de ntrerupere pe instruciunea FOR i activai butonul Step over.
Automat programul trece peste celelalte comenzi i se oprete doar la FOR.
Observai n fereastra Watch valoarea lui i i a lui p. Continuai alt Step over. Ai
observat sursa erorii? Ce s-a ntamplat cu p? Care este ultima valoare a lui i
(cnd iese din FOR)?
9. Deschidei fereastra Breakpoint i observai ce aciune este implicit la fixarea
punctului de ntrerupere pe o linie de comand!
10.tergei punctul de ntrerupere de pe linia FOR i punei unul pe variabila p n
fereastra Watch. Apsai butonul Step over. De cte ori s-a oprit programul?
Niciodat? De ce?
11.Punei un alt punct de oprire pe linia p=p*i din subrutin i plasai n fereastra
Breackpoint opiunea Breack at line when changed. Executai rularea pas cu pas.
De cte ori s-a oprit programul? Niciodat? De ce?
12.Ce trebuie fcut pentru a modifica sursa? Comanda Modify Command este suficient?

122

Informatic Manual pentru clasa a XII-a

II.

Am realizat un mic program care numr contractele pe beneficiari. Apare n


fereastra 2.
1. Datele de plecare sunt afiate n fereastra 1.

Fereastra 1
Figura 12-5: Fereastra 1

Dei pare ciudat, rezultatul afiat pe ecran ca urmare a execuiei programului a fost
urmtorul:

Unde am greit?
2. Scriei ce aciuni au fost executate pentru a obine fiecare dintre cele patru ferestre!
Fereastra 2

Fereastra 3

Figura 12-6:
Ferestrele 2 i 3

3. Unde s-a fixat punctul de ntrerupere, pe o variabil sau pe o instruciune?

Figura 12-7: Fereastra 4


Capitolul 12 Programarea clasic n FoxPro

123

Capitolul

13

Operaii cu baze de
date n Visual FoxPro





Comenzi i manipulare interactiv a bazelor de date


Comenzi i manipulare interactiv a tabelelor incluse
Stabilirea legturilor ntre tabele
Proceduri stocate i declanatoare

O baz de date este o colecie de date operaionale, cu o anumit importan i


stabilitate n domeniul supus analizei i proiectrii unei aplicaii informatice. Baza de
date relaional nu poate fi privit doar ca un ansamblu de tabele, ci cuprinde i relaiile
dintre acestea, relaii permanente (nu cele definite n programele utilizator pentru o
anumit prelucrare), condiiile care trebuie ndeplinite pentru a asigura corectitudinea
i integritatea coleciei n ntregime i anumite informaii1 cum ar fi numele lung al
cmpurilor, formatul implicit de afiare, valorile implicite ale cmpurilor, funcii pentru
validarea cmpurilor sau a nregistrrilor etc.
Manipularea bazei de date n SGBDR Visual FoxPro se poate face att prin
comenzi, ct i n mod interactiv, Visual FoxPro punnd la dispoziie aplicaii wizard
(vrjitori) i aplicaii Designer (constructori).

Descrierea operaiilor cu baze de date prin comenzi


Vom preciza principalele operaii cu o baz de date i comenzile necesare.
Comanda
Efect
CREATE DATABASE <fis.dbc> Crearea unei noi baze de date fiier cu extensia
.DBC. Numai baza de date nou-creat este
deschis automat.
OPEN DATABASE <fis.dbc>
Deschiderea bazei de date specificate pentru a
avea acces la coninutul ei chiar dac toate
tabelele i vizualizrile sunt disponibile, nu
nseamn c sunt deschise, trebuind executate
aciuni explicite pentru deschiderea lor.
SET DATABASE TO <fis.dbc> Fixarea bazei de date curente dintre cele
deschise la un moment dat, o singur baz
de date este activ i o vom numi baza curent.
CLOSE DATABASES/ALL
nchiderea bazei de date curente, mpreun cu
tabelele ei opiunea ALL nchide bazele de
date i tabelele lor, tabelele izolate (FREE),
indecii i fiierele format.
1

incluse ntr-un Dicionar de date care asigur aa cum am prezentat n aspectele teoretice
independena sau autonomia datelor fa de programe.

124

Informatic Manual pentru clasa a XII-a

DELETE DATABASE
<dbc>[DELETETABLES]

ADD TABLE <dbf>


REMOVE TABLE
<dbf> [DELETE]

DISPLAY DATABASES
DISPLAY TABLES

tergerea bazei de date specificate de pe disc ea nu


trebuie s fie deschis. Dac opiunea DELETETABLES
nu este prezent, tabelele coninute n baza de date
nu sunt terse de pe disc, ci numai din baz.
Adugarea unui fiier .DBF n baza activ
tergerea tabelei precizate din baza de date, dar nu i
de pe disc clauza DELETE permite tergerea i de
pe disc a fiierului. Atenie! Tabela trebuie s fi fost
nchis anterior comenzii.
Afiarea informaiilor despre coninutul bazei de date.
Afiarea numelor tabelelor existente n baza de date
curent.

Gestiunea interactiv a bazei de date.


Database Designer
Utilitarul Database Designer permite definirea tuturor operaiilor cu baza de date
prin intermediul meniurilor i al butoanelor. Se lanseaz astfel:
a) pentru crearea bazei de date: din meniul sistem, selectnd File, New, Database,
New sau prin comanda CREATE DATABASE.
b) pentru modificarea unei baze de date existente: selectnd View, Database
Designer sau prin comanda MODIFY DATABASE.

Meniul Database

Figura 13-1: Meniul Database

Capitolul 13 Operaii cu baze de date

125

Meniul contextual Database


Utilitarul dispune de un meniu contextual care permite
un alt mod de selectare a operaiei dorite prin clic dreapta. n
general, opiunile sunt aceleai ca i cele incluse pe barele
de butoane.
n plus, Expand All afieaz toate tabelele cu structura lor;
Collapse All afieaz numai denumirea tabelelor; Help
deschide fereastra de asisten; Properties fixeaz tipurile de
fiiere care vor fi vizualizate n fereastra Database Designer.
Bara de instrumente asociat utilitarului Database
Designer se deschide selectnd View, Toolbars.
Adaug o tabel
liber la BD

Nou View
la distan

Figura 13-2: Meniul


contextual Database

Nou View
local

Editarea procedurilor stocate


Creare tabel
Legturi ntre BD
Figura 13-3:
Bara de instrumente
Database Designer

terge

Modific

Editarea tabelelor prin Browse

Crearea rapid a unei baze de date


cu Database Wizard
Asistentul Database Wizard se poate apela fie selectnd File, New, Database,
Wizard fie selectnd Tools, Wizards, Database. Pentru crearea bazei de date cu
utilitarul Database Wizard, parcurgei urmtorii pai:
Pasul 1: Alegei una dintre bazele de date disponibile (legate de
bibliotec, studeni, gestiune etc.). Selectai tabela i fiierele view care
vor forma noua baz de date.
Pasul 2: Pentru baza de date selectat, pstrai toate tabelele pe care
le vei include sau alegei cteva.

Pasul 3: Selectai cmpurile din fiecare tabel. Pentru fiecare tabel


vizualizai cmpurile i eventual schimbai cheile de indexare i cheia
primar.
Pasul 4: Stabilii interactiv relaiile dintre tabele: pentru fiecare tabel
precizai care este legtura. Observai c sunt deja fixate legturi. Le
putei pstra, terge sau putei aduga altele.
126

Informatic Manual pentru clasa a XII-a

Pasul 5: Salvai definiiile i, eventual, populai tabelele. Dup salvare,


baza de date este generat i putei lucra cu ea. Atenie, ea nu este
automat deschis.

Deschiderea i activarea unei baze de date


Se poate face prin comanda OPEN DATABASE
?/<dbc> n fereastra de comenzi sau selectnd File,
Open, Database. Putem deschide mai multe baze de
date. Se pot observa toate bazele de date deschise
ntr-o list derulant plasat pe bara de instrumente.
Figura 13-4: Lista derulant
a bazelor de date

sarcini de laborator
1. Creai o baz de date cu numele Bib, prelund baza de date predefinit Books.
2. Observai fiierele componente i aranjarea lor n fereastra Database Designer.
Vizualizai coninutul tabelelor.
&& ne putem poziiona pe bara de titlu i prin dublu clic deschidem fereastra Browse
&& sau prin comanda Browse din meniul contextual sau din meniul Table

3. nchidei baza de date.


&& nu uitai de comanda Close database!

4. nchidei fereastra Database i Table Wizard.


5. Creai o alt baz de date cu numele Studeni, ns prelund selectiv unele
tabele i relaii din baza de date predefinit Students.
6. Deschidei i baza de date Bib alturi de Studeni.
&& fileopen

7. Activai cnd una, cnd cealalt baz de date i observai fereastra Database Designer.
&& se poate folosi comanda Modify database

8. Folosii meniul contextual ataat ferestrei Database Designer pentru micorarea


tuturor tabelelor i revenirea lor la dimensiunile proiectate.
9. tergei din baza de date Bib cteva tabele. Ele vor deveni tabele libere. tergei
de pe disc cteva tabele. tergei baza de date Bib.

sarcini pentru realizarea


unui mini-proiect
Creai baza de date pentru activitatea analizat i adugai tabelele create deja.
Folosii fereastra Database Designer!
Capitolul 13 Operaii cu baze de date

127

Operaii asupra unei tabele incluse n baza de date


n dicionarul bazei de date, aa cum am vzut, se memoreaz informaii
suplimentare pentru structura conceptual la nivelul fiecrei tabele, cum ar fi: numele
lung asociat cmpurilor, valoarea implicit, ablonul de afiare, mesajele ctre utilizator
pentru cazuri de eroare, dar i mesaje ctre proiectant pentru cazuri de restructurare a
bazei de date, legturile dintre tabele, regulile de integritate, cheile de indexare etc.
Principalele operaii asupra tabelelor incluse n baza de date sunt: creare,
actualizare, indexare, filtrare, relaionare. Desigur, sunt valabile i comenzile pe care
le-am nvat pentru tabele izolate, dar vom prezenta i altele, care fac parte din
limbajul SQL.

1. Proiectarea tabelei prin comanda SQL CREATE TABLE


O cale de proiectare a structurii este dat de comanda SQL CREATE TABLE.
Comanda CREATE TABLE2 are forma:
CREATE TABLE <fis.dbf> NAME <nume-lung>
(<lista-cmp><clauze-articol>)
unde:
<lista-cmp>==<nume-cmp1><tip>[(<lung>[,<zecim>])]<clauze-cmp>,..
<clauze-cmp> se folosesc la nivelul fiecrui cmp:
NULL/ NOT NULL
CHECK <exp> [ERROR <mesaj>]
DEFAULT<exp>
PRIMARY KEY
REFERENCES <tabela2> [TAG<reper>]

Atributul poate conine valori NULL


Funcia de validare cu mesajul adecvat
Valoarea implicit a atributului
Declar atributul cheie primar
Declar atributul ca fiind cheie strin n tabela
curent i cheie de indexare n <tabela2>

<clauze-articol> se folosesc la nivelul tabelei:


PRIMARY KEY <exp> TAG <tag>
CHECK <exp> [ERROR <MESAJ>]
FOREIGN KEY<exp> TAG <tag1>
REFERENCES <dbf> [TAG<tag2>]

Creeaz indexul primar prin specificarea


expresiei i a numelui de reper.
Permite specificarea unor restricii la nivel de
tabel.
Fixeaz drept index o cheie strin i
stabilete o legtur cu tabela <dbf> prin
acest reper <tag1> i <tag2> din tabela
printe. Dac lipsete <tag2>, atunci
legtura se face prin cheia primar a <dbf>.

2 Este parial cunoscut din leciile despre proiectarea structurii tabelelor neincluse ntr-o baz
de date; o vom dezvolta prezentnd clauzele necesare definirii structurii unei tabele incluse
ntr-o baz de date.

128

Informatic Manual pentru clasa a XII-a

Exemplu
Fie tabele ELEVI i CLASE legate prin atributul cls. Vom scrie comenzile de creare
a acestei baze. Cmpul cod este cheie unic pentru Elevi, iar cls este cheie unic
pentru Clase.
CREATE DATABASE elevi
&& definim baza de date
CREATE TABLE clase(cls C(3) NOT NULL DEFAULT "999" PRIMARY KEY,;
profil C(10) NULL DEFAULT "Info",;
diriginte C(30) NULL DEFAULT space(30))
CREATE TABLE elevi(cod N(3) NOT NULL DEFAULT 999 PRIMARY KEY,;
nume C(30) DEFAULT SPACE(30), med N(5,2) default 9.99,;
cls C(3) NOT NULL DEFAULT "12A";
CHECK val(left(codcls),2)>=9 ERROR "Atentie anul",;
FOREIGN KEY cls TAG cls REFERENCE clase)

2. Modificarea structurii
Modificarea structurii unei tabele se poate face i printr-o comand SQL. Sunt mai
multe forme ale comenzii pe care le prezentm pe rnd:
ALTER TABLE <dbf> ADD <cmp><tip> [(<lung>[,<zecim>])]
[NULL/NOT NULL]
[CHECK <expl>[ERROR <msg>]
[DEFAULT <exp>]
[PRIMARY KEY ][REFERENCES <dbf> [TAG <tag>]]

sau
ALTER TABLE <dbf> ALTER COLUMN <cmp> [NULL/NOT NULL]
[SET CHECK <expl>[ERROR <msg>]/ DROP CHECK]
[SET DEFAULT <exp>]/DROP DEFAULT]

sau
ALTER TABLE <dbf> DROP COLUMN <cmp>
[SET CHECK <expl>[ERROR <msg>]/ DROP CHECK]
[ADD PRIMARY KEY <exp> TAG <tag>/DROP PRIMARY KEY]
[ADD FOREIGN KEY<exp> TAG<tag> REFERENCES<dbf>[TAG<tag>]]
/DROP FOREIGN KEY
TAG <tag> [SAVE]
[RENAME COLUMN <cmp_vechi> TO <cmp_nou>]

Exemple
Fie comanda de creare a tabelei pentru evidena mprumuturilor de cri.
CREATE TABLE imprumut (inv N(5), data_i D, data_r D)

 Se adaug o coloan.
ALTER TABLE imprumut ADD COLUMN cod_cit C(3) NOT NULL

 Se fixeaz o cheie primar la tabela creat anterior.


ALTER TABLE imprumut ADD PRIMARY KEY str(inv)+dtos(data_i) TAG in_d

 Se adaug la un cmp o regul de validare.


ALTER TABLE imprumut

ALTER COLUMN data_i SET CHECK data_i>=data_r

 Se adaug o relaie 1-n ntre carti i tabela Imprumut.dbf pe cheia Inv.


ALTER TABLE imprumut ADD FOREIGN

KEY inv TAG inv REFERENCES carti

 Se terge regula de validare.


ALTER TABLE imprumut ALTER COLUMN data_i DROP CHECK

 Se terge relaia stabilit anterior.


ALTER TABLE imprumut DROP FOREIGN KEY TAG inv SAVE
Capitolul 13 Operaii cu baze de date

129

3. nchiderea unei tabele


CLOSE TABLE <dbf>/TABLES/ALL

nchide tabela <dbf> din baza de date curent, toate tabelele din baza curent sau
toate tabelele libere din toate zonele dac nu este deschis nici o baz de date.

4.Redenumirea unei tabele


RENAME TABLE <dbf_vechi> TO <dbf_nou>

Schimb numele unei tabele n contextul aceleiai baze de date.

Exemple
CREATE DATABASE D1
CREATE DATABASE D2
SET DATABASE TO D1
CREATE TABLE T1 (CMP1 n(3))
CLOSE TABLES
REMOVE TABLES T1
SET DATABASE TO D2
ADD TABLE T1
RENAME TABLE T1 TO T2

&&
&&
&&
&&
&&
&&
&&
&&
&&

Creeaz d1.dbc
Creeaz d2.dbc
Fixeaz d1 baz curent
Creeaz t1.dbf n baza d1
nchide fiierul t1.dbf
terge t1 din baza d1
Fixeaz d2 baz curent
Adaug t1.dbf la baza d2
Schimb numele la t2.dbf

5. Inserarea datelor
Este o comand care nu trebuie confundat cu versiunea Fox a acesteia pe care
am prezentat-o la leciile de actualizare. Ea permite adugarea unei nregistrri la
sfritul unei baze de date.
Sintaxa comenzii:
INSERT INTO <tabela> [(<lista campuri>)] VALUES (<lista valori>)

sau
INSERT INTO <tabela> FROM ARRAY <vector> / FROM MEMVAR

Comanda nu afecteaz numrul zonei de lucru curente. Dac tabela n care dorim
s facem inserarea este deschis n alt zon de lucru dect cea curent se va aduga
o nregistrare la sfritul su fr ca tabela s fie activ.

Exemple
 S se adauge un elev:
INSERT INTO ELEVI VALUES (100, "POPESCU",9.66, "9A")
INSERT INTO ELEVI(nume, cod, med) VALUES ("ionescu", 200, 10)

 S se adauge primul elev n tabela Bacalaureat cu aceeai structur:


Use elevi
Scatter memvar
Insert into bacalaureat from memvar

130

Informatic Manual pentru clasa a XII-a

6. tergerea datelor
tergerea poate fi efectuat i printr-o comand SQL cu formatul general:
DELETE FROM [<nume-baza>!]<nume-tabela> WHERE <cond>

Exemplu
 tergerea elevilor din clasa "9a":
DELETE FROM ELEVI WHERE cls="9a"

7. Actualizarea datelor
O alt comand pentru corectarea valorilor este comanda SQL Are formatul general:
UPDATE [<nume-baza>!]<nume-tabela> SET <cmp1>=<exp1>,
<cmp2>=<exp2>,..WHERE <cond>

Exemplu
 Modificarea clasei elevului "Popescu" la valoarea "9x":
UPDATE ELEVI SET cls="9x" WHERE nume="Popescu"

Proiectarea interactiv a tabelei prin Table Designer


a. Utilitarul Table Designer
Pentru proiectarea direct a structurii unei tabele se apeleaz utilitarul Table
Designer, fie din fereastra Database Designer prin clic pe butonul New, fie selectnd
File, New, Table.
 Tab-ul Fields permite fixarea structurii tabelei:
a) numele, tipul i dimensiunea fiecrui cmp (ca n proiectarea tabelelor izolate);
b) dac atributul este index i de ce tip (cresctor/descresctor) (Index);
c) dac atributul poate conine valoarea NULL sau e obligatoriu s conin o valoare;
d) ablonul pentru formatul de afiare a valorilor coninute n cmp. ablonul poate
conine anumite caractere, n funcie de tipul cmpului.
Caracterele !, X se pot folosi la afiarea textelor. De exemplu, pentru fereastra
din figura anterioar se cere ca indiferent de caracterele tastate irul cu specialitatea
persoanei s fie convertit la majuscule.
d) caption permite introducerea numelui lung pentru cmp, folosit n ecranele
Browse sau n obiectele care l conin3 (CAPTION);
e) regula de validare la nivel de atribut i mesajul asociat (RULE, MESSAGE);
valoarea implicit a cmpului (DEFAULT);
f) comentariile care se vor afia pe lina de stare (COMMENT) intereseaz doar
proiectantul, n vederea unei revizuiri a structurii;
3

n comanda Browse pentru asocierea unui alt identificator pentru o coloan dect numele
cmpului se folosete opiunea H.
Capitolul 13 Operaii cu baze de date

131

Figura 13-5: Tab-ul Fields din Table Designer

g) obiectul4 i clasa de obiecte corespondente, astfel nct la compunerea


machetei de introducere sau de vizualizare s fie automat definit obiectul vizual
respectiv cnd se folosete cmpul. n mod implicit, cmpurile au asociate
obiecte de tip TextBox, iar cmpurile Memo obiecte EditBox.
 Tab-ul Indexes permite fixarea indecilor asociai tabelei.
Aa cum tim deja, un index permite accesul ordonat la tabel. Indecii asociai unei tabele
sunt precizai prin nume (NAME), sensul ordonrii, ascendent sau descendent (ORDER), tip
(TYPE), expresia de indexare (Expression), precum i condiia de filtrare (FILTER).

Figura 13-6: Tab-ul Indexes

132

Asocierea obiectelor este referit n leciile de proiectare a formularelor.


Informatic Manual pentru clasa a XII-a

Reamintim tipurile de indeci care pot fi folosii ntr-o tabel inclus ntr-o baz de
date:
Index primar (Primary index) asigur introducerea valorilor unice ntr-o tabel.
O tabel are un singur index primar;
Index candidat (Candidate index) tabela are deja un index primar, dar dorim
verificarea valorilor unice i n alt cmp;
Index obinuit (Regular index) permit nregistrri duplicate;
Index unic (Unique indexes) selecteaz ordinea de parcurgere bazat pe
prima apariie a valorii n cmpul specificat.
 Tab-ul Table permite specificarea condiiilor de validare la nivelul ntregului articol
(Rule) i al mesajului asociat situaiei de eroare (Message), a declanatorului (trigger)
pentru inserarea articolelor (Insert trigger), pentru corecii (Update trigger) i pentru
tergere (Delete trigger). Despre declanatoare vom discuta ntr-o tem special.

b. Proiectarea rapid a tabelelor cu Table Wizard


Pasul 1: Alegei una
dintre tabelele
predefinite; fixai
cmpurile care vor
forma structura.
Pasul 2a: Asociai
tabela unei baze de
date; baza de date
este deschis implicit.
Generai tabela ca
izolat (Free Table).
Dai tabelei un (alt)
nume.
Pasul 2b: Vizualizai Figura 13-7: Pasul 2 din Table Designer
structura tabelei i
eventual modificai-o prin selectarea anumitor cmpuri, schimbarea
numelui, a tipului, a lungimii etc.
Pasul 3: Precizai indecii i cmpul folosit drept cheie primar. n
exemplu, cmpul Cod este index primar.
Pasul 4: Putei izola tabela curent sau o putei lega de alte tabele din
baz. Se fixeaz relaiile ntre tabela curent i unele dintre tabelele
bazei de date active. Exist mai multe modaliti de fixare a relaiei. n
exemplul nostru am fixat relaia ntre cititori i cri de tip 1-n, n sensul
c un cititor poate mprumuta mai multe cri.
Pasul 5: Salvai definiiile tabelei i nchidei utilitarul.

Capitolul 13 Operaii cu baze de date

133

c. Meniul contextual asociat tabelei


Tabelele vizualizate n fereastra Database Designer au asociat un meniu accesibil
prin clic dreapta i care permite:
editarea n fereastra Browse a tabelei,
tergerea tabelei din baza de date sau chiar de pe disc (DELETE),
micorarea tabelei n fereastr (COLAPSE),
modificarea structurii tabelei (MODIFY), apelul utilitarului Help.
Dorim crearea unei baze de date cu dou tabele, alese din cele
oferite de produsul FoxPRO: Books i Friends.
Vom parcurge urmtorii pai:
1. Vom deschide utilitarul Database Designer selectnd File, New, Database.
Fixm numele bazei de date Biblio.
2. Pentru includerea fiecreia
dintre cele dou tabele vom
apela Table Wizard din fereastra de dialog pentru crearea
unei tabele noi: Database, New
Table, Wizard.
3. Vom parcurge paii necesari
alegerii tabelei, selectrii cmpurilor, precizrii destinaiei.
4. Observm n fereastra Database
Designer cele dou tabele.
5. Pentru ca tabela Books s fie
prezent numai cu numele se Figura 13-8: Crearea unei baze de date cu dou
apeleaz din meniul contextual tabele
opiunea collapse.

Exemplu

sarcini de laborator
1. Folosind fereastra de comenzi creai o baz de date FOTBAL cu tabelele
MECIURI, ECHIPE, JUCATORI. Stabilii cmpurile necesare evidenei tuturor
meciurilor dintr-un campionat, a juctorilor i echipelor de fotbal.
2. Folosind Database Designer i Table Designer proiectai o baz de date
TURISM cu tabelele UNITATI (care va reine toate unitile de cazare cu numele,
categorie, adresa, dac are sau nu piscin, restaurant, etc), LOCURI (care va
reine toate locurile/camere din unitile de cazare cu numrul de paturi, dac au
sau nu televizor, telefon, orientare, pret, etc.) Stabilii proprieti pentru cmpuri,
valori implicite, cheia fiecrei tabele.
3. Deschidei ambele baze de date i trecei controlul de la una la alta. Facei o
modificare n structura unei tabele. |nchidei odat ambele baze de date.
134

Informatic Manual pentru clasa a XII-a

Fixarea relaiilor persistente ntre tabelele


unei baze de date
Relaiile ntre tabelele dintr-o baz de date sunt permanente5 (persistente), n
sensul c intr automat n vigoare la deschiderea bazei de date i sunt valabile pe tot
parcursul lucrului cu baza de date. Relaiile sunt memorate ca pri integrante ale bazei
de date.
Stabilirea unei relaii presupune:
a) identificarea tipului relaiei: 1-1 (unu-la-unu) sau 1-n (unu-la-n)

Atenie:

Tipul relaiei va fi dat de tipul indexului din tabela copil. Dac indexul este cheie unic
(de tip unique, primary, candidate), atunci relaia va fi 1-1; dac este cheie comun
(de tip regular), atunci relaia va fi 1-n.

b) pregtirea tabelelor: tabela printe se indexeaz unic dup cheia de legtur


(cmpul index va fi de tip primary sau candidate); tabela copil se indexeaz unic
(pentru o legtur 1-1) sau normal (pentru o legtur 1-n) dup cheia de legtur.
Ambii indeci trebuie s fie de acelai tip i s aib aceleai expresii de indexare.
c) proiectarea vizual a legturii se face prin fereastra Database Designer sau prin
caseta de dialog Data Session. Astfel:
n fereastra Database Designer ne poziionm n tabela printe, pe indexul
primar i executm tragere i plasare ctre tabela copil peste indexul folosit
drept cheie de legtur.
deschidem fereastra Data Session din meniul principal Window, apsm
butonul Relations (pentru stabilirea legturii) i introducem expresia de
legtur dintre cele dou tabele.

Exemplu

Folosirea ferestrei Database Designer la proiectarea legturilor


Deschidem baza de date
Scoala i, n fereastra Database
Designer, observm tabelele
incluse. S presupunem c sunt
cele trei din figura 13-9.
Vom fixa legturile Profesori1,1clase pentru diriginte
i Clase1,nelevi.
Pasul 1. Ne poziionm pe
tabela Profesori i verificm sau
adugm indexul Codprof de tip Figura 13-9: Tabelele incluse n baza de date
primary prin fereastra Table
Designer.

Reamintim c relaiile realizate prin comanda SET RELATION sunt temporare, disparnd la
terminarea programului sau a sesiunii de lucru.
Capitolul 13 Operaii cu baze de date

135

Pasul 2. Ne poziionm pe tabela Clase i folosim cmpul diriginte drept index


candidate pentru c n tabela clase cheia diriginte este unic. De asemenea, indexm
(sau verificm dac exist) indexul primary pe cmpul cls.
Pasul 3. Ne poziionm pe tabela Elevi i indexm dup cmpul Cod (cheia
primar) i dup cmpul cls index de tip regular.
Pasul 4. Fixm relaia Profesori1,1Clase prin tragere i plasare de la indexul
profesori.codprof ctre cheia clase.diriginte.
Pasul 5. Fixm relaia Clase1,nElevi prin manevra tragere i plasare de la
indexul clase.cls ctre indexul elevi.cls.
Observm n fereastra Database Designer legtura proiectat.
Folosirea ferestrei Data Session
1. Deschidem fereastra Data
Session din meniul Window.
2. Ne poziionm pe tabela
Clase i apsm butonul
Relation.
3. Selectm tabela copil (Elevi).
4. Introducem expresia de legtur: Clase.cls=elevi.cls.

Figura 13-10: Fereastra Data Session

tergerea sau modificarea unei relaii


Pentru editarea unei relaii se poate folosi meniul contextual deschis atunci cnd,
poziionai fiind pe legtur (ea este mai intens colorat), executai clic dreapta.
Comanda Edit deschide un ecran de dialog.

Figura 13-11: Fereastra Edit Relationship

tergerea unei relaii se poate face i prin apsarea tastei Delete.

136

Informatic Manual pentru clasa a XII-a

sarcini de laborator
I.

La Liceul de Informatic se organizeaz preselecia pentru MISS BOBOC.


Participanii i rezultatele la cele 3 probe artistice sunt reinute ntr-o tabel cu
numele Miss.dbf, iar membrii juriului sunt nscrii n tabela Juriu (cod, nume, ocupaia,
varsta, sex). Avem n vedere urmtoarele:
Numele candidatei trebuie s fie trecut obligatoriu cu majuscule.
Proba 1 se noteaz cu note ntre 5 i 10 cu dou zecimale.
Proba 2 se va nota cu calificative {ffb, fb, b, suf, insuf}.
Proba 3 se noteaz cu puncte ntre 1 i 100.
O persoan este admis dac are la prima prob cel puin 5.00, a obinut la
proba a doua cel puin suficient, iar la a treia mai mult de 60 puncte.
Se vor reine i anumite informaii despre candidat (nlimea, greutatea,
culoarea ochilor, lungimea prului, fotografia, mesajul verbal adresat comisiei etc.)
Ocupaia unui membru al comisiei nu trebuie s fie elev sau student.
Varsta membrilor comisiei trebuie s fie cuprins ntre 25-30 ani.
Codificarea pentru cmpul Sex se va face prin F sau B.
Codul membrilor juriului va avea pe prima poziie o liter mare, apoi 2 cifre i
iar o liter.
1. Proiectai baza de date, incluznd tabelele necesare.
2. Populai-o cu date semnificative.
II.

O baz de date este format din urmtoarele fiiere:


PROFESORI (cod_prof, nume, specialitate, grad_didactic);
STUDENTI (cod_stud, nume, facultate,an);
CURSURI (cod_curs, nume, nr_ore, cod_prof);
ALEG (cod_stud, cod_curs) opiunile studenilor.
Se cere:
1. Afiai numele cursurilor predate de fiecare profesor.
2. Afiai lista studenilor la fiecare curs.
3. Verificai corectitudinea secvenei urmtoare! Ce i propune s obin?
sele aleg
index on cod_curs tag cc unique
sele curs
set relationoff into ale g
sele aleg
set relation to cod_curs into curs
list curs.nume

4. Realizai structura urmtoare prin comenzi adecvate i dai o interogare care s


necesite aceste relaii.
1
n
1
1
studenti
aleg
cursuri
Capitolul 13 Operaii cu baze de date

137

5. Pentru toti studentii care i-au ales deja cursuri, aflai numele lor i al cursurilor alese.
6. Afiai cursurile fr studeni.
7. Afiai numai profesorii la cursurile crora s-au nscris studeni. |mpreun cu
numele cursului se pot afia i numele studenilor care au optat pentru curs?

Proceduri stocate
Procedurile stocate sunt memorate n baza de date i sunt deschise odat cu
aceasta. Operaia de adugare a procedurii la baza de date este precedat de scrierea
ei ntr-un fiier text.
Procedur
MODIFY PROCEDURE
APPEND PROCEDURE
FROM<fis.txt> [OVERWRITE]
DISPLAY PROCEDURES
COPY PROCEDURE TO <fis.txt>
[ADDITIVE]

Efect
Editarea unei proceduri.
Adugarea unei proceduri stocate la baza
de date curent dintr-un fiier <Fis.txt>,
cu sau fr suprascriere.
Afiarea procedurilor memorate din baza
curent.
Copierea procedurii stocate ntr-un fiier
text, de unde poate fi manipulat.

Pentru a introduce o funcie utilizator drept regul de validare, procedura stocat


trebuie s existe. n caz contrar, FoxPro va respinge referina la funcia utilizator.
Orice apel al funciei de validare trebuie s returneze un rezultat logic. Dac n urma
validrii cmpurilor este returnat valoarea .F., FoxPro pstreaz indicatorul de
nregistrri n aceeai linie i nu salveaz modificarea fcut asupra ei.
Pentru validare se poate folosi funcia GETFLDSTATE() care determin dac un
cmp al tabelei sau view-ului s-a modificat.
Putei folosi declanatorii pentru calcule sau validri suplimentare, putei trimite
e-mail-uri unui compartiment de aprovizionare atunci cnd stocul dintr-un articol atinge
o anumit valoare redefinit, sau putei crea jurnale cu toate modificrile efectuate
asupra unui tabel.

Exemple
Open database D1
Create table t1 free (cmp M)
Append blank
Replace cmp with procedure;
fictiv+chr(13)+chr(10)
Copy memo cmp to fis.txt
Use
Append procedure from;
fis.txt
Display procedures
138

creeaz baza de date, care este deschis automat


tabela temporar
adaug o linie vid
pune n coloana Memo linia de definiie
a unei proceduri fictive
copiaz coninutul cmpului Memo ntr-un fiier
nchide tabela temporar t1
adaug la baz fis.txt ca fiind procedur stocat
afieaz procedurile bazei D1

Informatic Manual pentru clasa a XII-a

Delete file t1.dbf


Delete file t1.fpt
Modify procedure
Close database

terge de pe disc manevrele


apeleaz editorul pentru modificarea procedurilor
nchide baza de date

Alt exemplu: generarea automat a codului la adugarea unui nou articol.


n tabela Elevi dorim generarea automat a codului la adugarea unui nou elev.
Practic, noul cod va fi ultimul cod +1.
Pasul 1. Vom deschide fereastra de editare a procedurilor stocate cu MODIFY
PROCEDURE i vom scrie procedura urmtoare:
procedure pune_cod
calculate max(elev.cod)to codmax
if empty(codmax)
=messagebox(nu sunt coduri)
return 1
else
=messagebox(codul ultim=+str(codmax))
return codmax+1
endif
endproc

Observaie:
Fereastra de editare a
procedurilor stocate ntr-o
baz de date se poate
deschide i direct,
selectnd Database, Edit
Stored Procedures.

Pasul 2. Vom apela procedura ca valoare implicit a cmpului n momentul unei


adugri; de exemplu, codul persoanei va fi automat generat.

Figura 13-12: Generarea automat a codului

Declanatoare
Declanatoarele (triggers) sunt acele proceduri stocate, rulate dup o operaie de
inserare, actualizare sau tergere, care ataeaz anumite aciuni anumitor evenimente.
Se folosesc n special la pstrarea integritii refereniale ntr-o baz de date.
CREATE TRIGGER ON <dbf> FOR
Crearea unui declanator ataat tabelei
DELETE/INSERT/UPDATE AS <expl> <dbf> din baza de date curent.
Dac <expl> este .T., atunci se d curs
operaiei de inserare, actualizare, tergere.
DELETE TRIGGER ON <dbf>
tergerea unui declanator asociat
FOR DELETE/ INSERT/UPDATE
tabelei <dbf> incluse n baza curent.
Pentru fiecare tabel a unei baze de date se pot crea maxim 3 declanatoare.
Procedura de validare indicat prin <expl> va trebui s returneze .T. sau .F. Expresia
poate fi i o funcie utilizator sau o procedur memorat (creat cu MODIFY PROCEDURE).
Atenie, baza de date curent trebuie s fie deschis n mod exclusiv!
Capitolul 13 Operaii cu baze de date

139

Pentru tabela ELEVI dorim ca verificarea mediei la actualizare s


nu fie mai mare ca 10:
Open database x
&& elevi.dbf(nume,clasa,media)
Use elevi
Create trigger on elevi for
&&Creare declanator
update AS media<=10
On error
&& restaureaz gestionarul de erori
Replace all media with 11.88
&& se afieaz mesaj de eroare
Replace all media with 4.67
&& se accept valoarea !

Exemplu

Proiectarea regulilor de integritate a bazei de date


Bazele de date permit, aa cum tim din leciile anterioare, verificarea unor condiii
la orice aciune de actualizare a datelor, astfel nct s se asigure corectitudinea datelor
validri la nivelul fiecrui cmp sau la nivelul unei nregistrri. Se pot fixa i anumite
condiii pentru tabelele legate, astfel nct s se asigure integritatea bazei de date.
Premiza de baz este c valorii unei chei externe dintr-o tabel copil trebuie s-i
corespund o cheie de cutare sau o cheie primar n tabela printe. Mecanismul de
integritate referenial trateaz nregistrrile care nu ndeplinesc aceste condiii drept
invalide. Prin analogie, putei fi un printe fr fii, dar nu putei avea un fiu fr a fi printe.
Apelul utilitarului Referential Integrity Builder se face din meniul contextual
asociat relaiei sau selectnd Database, Edit Referential Integrity. La apelul
utilitarului se deschide o fereastr de dialog cu 3 tab-uri care permit editarea condiiilor
pentru actualizarea datelor, tergerea i inserarea.
n tab-ul Rules for Inserting se pot stabili regulile pentru adugarea articolelor n
tabela copil. Opiunile disponibile sunt:

Figura 13-13: Tab-ul Rules for Inserting

Restrict interzice introducerea articolelor n tabela copil dac n tabela printe


nu exist nici o nregistrare cu aceeai valoare a cheii.
Ignore permite inserarea articolelor fr verificarea valorii cheii strine n
tabela printe.
140

Informatic Manual pentru clasa a XII-a

n tab-ul Rules for Deleting se stabilesc reguli atunci cnd se tege un articol n
tabela printe. Opiunile disponibile sunt:
Cascade terge toate articolele cu aceeai valoare ca a cheii strine;
Restrict interzice tergerea dac n tabela copil sunt articole cu aceeai
valoare a cheii strine ca i cea a cheii terse;
Ignore permite tergerea din tabela printe i las articolele orfane n tabela copil.

Atenie! ntotdeauna trebuie bine gndit aciunea de tegere. Desigur, dac tergem o carte
din evidenele noastre, toate operaiile asupra ei ar trebui terse. Dar acestea sunt
operaii trecute, reinute poate n fiierul Operaii pentru a se vedea activitatea,
succesul unei cri. Faptul c ea este pierdut nu-i scade din valoare! Pe de alt parte,
putem proiecta mecanismul de protecie astfel ca s nu putem terge o carte dac ea
este mprumutat cuiva!

Tab-ul Rules for updating permite alegerea posibilitilor de actualizare a


articolelor atunci cnd se modific cheia primar a unui articol n tabela printe.
Opiunile disponibile sunt:
Cascade actualizeaz toate articolele legate n tabela copil cu noile valori ale
cheii modificate.
Restrict interzice modificarea cheii dac sunt articole legate n tabela copil.
Ignore actualizeaz cheia fr verificarea corespondenei din tabela copil.

Figura 13-14: Tab-ul Rules for Updating

Dac modificm structura tabelelor implicate n mecanismul de integritate


referenial, indecii sau relaiile permanente, trebuie s rulm din nou utilitarul
Referential Integrity Builder. n acest fel, codul surs din baza de date va fi revizuit.
Generarea unui cod pentru fiecare tip de declanator se poate vizualiza prin deschiderea ferestrei de proceduri stocate (selectnd Database, Edit Storage Procedure).

Capitolul 13 Operaii cu baze de date

141

BIBLIOTECA
Dorim s fixm restriciile de integritate. Astfel:
a. Vom interzice adugarea n tabela Operatii a unei nregistrri pentru o carte, s
zicem cu valoarea inexistent n tabela Carti. Acest lucru impune folosirea unui
declanator pentru inserare de tip Restrict.
b. Modificarea codului unei cri n tabela Carti va determina modificarea peste tot
a cheii cod_carte la noua valoare. Acest lucru impune folosirea unui declanator pentru
actualizare de tip Cascade.
tergerea unei cri din fiierul Carti va determina tergerea tuturor articolelor din
fiierul Operatii. Acest lucru impune folosirea unui declanator pentru tergere de tip
Cascade.
Pai:
1. Fixm relaia Carti1-nOperatii prin cmpul cod-carte.
2. Deschidem Edit Referential Integrity i fixm pentru inserare declanatoare de
tip Restrict, iar pentru actualizare i tergere folosim tipul Cascade.
3. Verificm funcionarea declanatoarelor astfel: deschidem n fereastra Browse
tabelele Cari i Operaii. Marcm pentru tergere o linie cu un cod-carte care
apare n tabela Operaii. Articolele referite de cod sunt automat marcate!

Studiu de caz

Figura 13-15: Verificarea funcionrii declanatoarelor

4. Observm plasarea declanatoarelor automat n cele dou tabele.

Figura 13-16: Plasarea automat a declanatoarelor n cele dou tabele

c. Deschidem fereastra Table Designer, tab-ul Table.

142

Informatic Manual pentru clasa a XII-a

Observaie. Pentru a putea fixa restriciile de integritate este necesar ca imediat


dup crearea unei baze de date (prin File, New, Database) ocazie cnd se deschide
fereastra Database Designer, s dm comanda Database, Clean up database i apoi
s adugm sau s proiectm tabelele de date.

sarcini de laborator
I.
1. Folosind fereastra de comenzi, creai baza de date coal cu tabelele: Elevi
(clas, nume, adres), Clase (clas, sal, diriginte), Sli (sal, inventar, poziie)
Profesori (nume, clas, specialitate).
2. Stabilii relaiile Elevi-Clase, Sli-Clase, Profesori-Clase, fixnd tipul relaiei i
cheia de legtur.
3. Deschidei baza de date n fereastra Database Designer i vedei legturile create.
4. n fereastra de comenzi, scriei comenzile pentru:
a) scoaterea fiierului Sli din contextul bazei de date;
b) modificarea structurii fiierului Clase;
c) tergerea legturii Elevi-Clase.
II.

n vederea realizrii orarului, sunt proiectate tabelele urmtoare: Orar (ziua, ora,
codul disciplinei, codul profesorului, codul clasei), Profesori (codul profesorului,
numele, catedra), Discipline (codul disciplinei, numele, catedra, nivelul sau anul/anii la
care se pred disciplina respectiv).
Discipline
bi
Ia
so

Bazele informaticii
Informatic aplicat
Sisteme de operare

Info
Info
Info

Profesori
P1
P2

Popescu Emilian
Zaharescu Vasilache

9,10,11,12
10,11,12
10
Orar

Mate
Info

L
L

8
9

bi
so

P2
P2

9a
10b

Convenii:
Ora poate fi n intervalul 8-14.
Ziua se codific pe dou caractere i aparine mulimii {L,Ma,Mi,J,V}.
ntr-o catedr sunt mai multe discipline.
Acelai profesor poate s aib ore la diferite clase, dar nu n acelai timp. El
poate s predea orice disciplin din catedra sa.
Sarcini:
1. Creai baza de date cu numele ORE.
2. Adugai tabelele menionate anterior. Fixai cheile unice ale fiecreia.
Capitolul 13 Operaii cu baze de date

143

3. Stabilii relaiile necesare prin fereastra de comenzi.


4. ncrcai cu date fiierele Profesori i Discipline.
5. Pentru baza de date ORE fixai legturile permanente, tiind c:
a) Un profesor poate s predea mai multe discipline.
b) O disciplin este regsit n orar la mai multe clase, dar la ore diferite.
c) O disciplin poate fi predat de profesori diferii, dar n cadrul aceleiai catedre.
6. Scriei comenzile necesare obinerii situaiei ncadrrii tuturor profesorilor care
predau disciplina X (cine, la ce clas, cnd).
7. Scriei comenzile pentru situaia ncadrrii unui profesor X (ce discipline pred,
cnd, la ce clase).
8. Scriei comenzile prin care s aflai dac exist suprapuneri n orar pentru
anumite discipline sau profesori.
9. Aflai ncadrarea tuturor claselor a XII-a (profesorii i numele disciplinei predate).
10.Proiectai regulile de integritate pentru baza de date ORE astfel nct:
a) La adugarea unei linii n orar:
codul profesorului s se gseasc n fiierul Profesor;
codul disciplinei s se gseasc n fiierul Discipline;
anul de studiu din codul clasei s corespund unui nivel de predare a
disciplinei respective;
disciplina predat de un profesor s corespund catedrei acestuia.
b) La tergerea unui profesor s dispar toate orele sale.
c) La tergerea unei discipline s dispar toate orele din orar cu disciplina
respectiv.
d) La tergerea unei catedre s fie teri toi profesorii care au ncadrare pe
catedra respectiv, precum i toate disciplinele asociate catedrei. n orar vor
fi terse orele corespunztoare profesorilor i disciplinelor.
e) La modificarea codului unei discipline se va modifica peste tot acest cod n orar.
f) Modificarea codului unui profesor determin modificarea peste tot a codului
n orar.
g) Adugarea unei nregistrri n Profesori nu afecteaz celelalte fiiere.
h) Adugarea unei nregistrri n Discipline nu afecteaz celelalte fiiere.

sarcini pentru realizarea


unui mini-proiect
Proiectai sau reproiectai tabelele bazei de date specifice fiecrui proiect, avnd n
vedere posibilitatea fixrii condiiilor de validare, a valorilor iniiale etc.
Fixai relaiile persistente dintre tabelele bazei de date.
Fixai regulile de integritate referenial pentru baza de date.

144

Informatic Manual pentru clasa a XII-a

Capitolul

14

Interogarea bazelor
de date





Definirea interogrilor prin comanda SELECT


Proiectarea vizual a interogrilor
Proiectarea fiierelor View
Query Designer

O interogare (cerere) este o solicitare direct de date, fr indicarea modului de obinere.


O cerere SQL se poate lansa din fereastra de comenzi sau din interiorul unui
program FoxPro, pentru c funcioneaz ca orice alt comand, dar se poate proiecta
n mod interactiv cu ajutorul utilitarului Query Designer.

Definirea interogrilor prin comanda SELECT


Comanda SELECT permite specificarea datelor care vor constitui ieirea din
interogare, precum i sursa acestora. Cum se vor obine aceste date este sarcina
optimizatorului de cereri Rushmore.
SELECT [ALL/DISTINCT]
[<col1>[AS<nume>], <col2> [AS <nume2>..]..]
FROM <lista-fis>
[INTO <destinatie>/ TO FILE <fis.dbf>]
[WHERE <conditie>]
[GROUP BY <lista_chei>[ HAVING <cond>]]
[ORDER [BY] <exp>]
 Clauza ALL/DISTINCT determin prelucrarea tuturor nregistrrilor (ALL) sau
numai a articolelor unice (DISTINCT).
 Clauza <col1> [AS <nume1>] permite definirea coloanelor care vor constitui
ieirea din interogare. Coloanele pot fi cmpuri aparinnd tabelelor definite n
clauza FROM, constante, expresii, funcii utilizator. Coloanele pot primi un alt
nume prin clauza AS.
Pot fi utilizate funcii cum sunt: AVG(<exp>) care calculeaz media aritmetic,
COUNT(<art selectat>) care numr seleciile, SUM(<art-selectat>)
care calculeaz suma, MIN(<art-selectat>), MAX(<art-selectat>)
care determin extremul.
 Clauza FROM specific lista fiierelor de intrare n prelucrare.
Exemplu: Fie Baza de date coala cu tabelele ELEVI, CLASE:
Cerere
1. Numele tuturor elevilor
2. Numele claselor (distincte!) din coal
3. Tot coninutul fiierului ELEVI

Rezolvare
select nume from elevi
select distinct cls as
cod_clasa from elevi
select all from elevi
select * from elevi
Capitolul 14 Interogarea bazelor de date

145

4. Media general a elevilor


5. Numrul elevilor din coal
6. Numrul claselor din coal

select avg(med) as med_gen


from elevi
select count(*) as nr_elelevi
from elevi
select count(distinct cls) from elevi

 Destinaia rezultatelor este specificat prin dou clauze: INTO/TO, dintre care
INTO este prioritar. Clauza INTO <dest_into> determin forma de stocare
a datelor; lipsa clauzei permite afiarea ntr-o fereastr BROWSE a datelor.
<Dest_into> poate fi: ARRAY <tablou>/CURSOR< fis>/DBF <fis.dbf>.
Forma de stocare cursor este o tabel temporar, de tip Read Only, tears
automat n momentul nchiderii ei. Clauza TO este folosit cnd lipsete clauza
INTO. <Dest_to> poate fi: TO FILE <fis.txt> [ADDITIVE] / TO
PRINTER [PROMPT] / TO SCREEN, unde TO FILE direcioneaz ieirea ctre
un fiier ASCII (fie prin suprascriere, implicit, fie prin adugarea datelor la vechiul
coninut, folosind clauza ADDITIVE), TO PRINT ctre imprimant, iar TO
SCREEN ctre ecran.
Exemple:
Cerere
Afiai elevii claselor la imprimant
Copiai numai numele i codul elevilor
ntr-o alt tabel

Rezolvare
select cls, nume from elevi to print
select cod, nume from elevi;
into dbf manelevi.dbf

 Clauza WHERE <cond> permite introducerea legturilor ntre tabele i a filtrelor.


Condiiile <cond> cer sistemului FoxPro s includ anumite nregistrri n
rezultatele cererii.
Exemple:
Cerere
Care sunt elevii cu medii ntre 8 i 10
din clasa 12A?
Care sunt elevii cu media 10 precum
i numele diriginilor lor?
Care sunt elevii dirigintelui X?

Rezolvare
select nume, med from elevi;
where med between 8 and 10 and cls=12A
select elevi.nume, elevi.cls,
clase.diriginte;
from elevi, clase where
elevi.cls=clase.cls; and elevi.med=10
Accept nume profesor diriginte? to x
Select elevi.nume, elevi.med from
elevi, clase; where clase.cls=elevi.cls
and clase.diriginte=x

 Clauza GROUP permite gruparea rezultatelor dup lista de cmpuri.


Exemplu:
Cerere
Care sunt elevii cu media 10 pentru
fiecare clas (i numele diriginilor lor)?

146

Informatic Manual pentru clasa a XII-a

Rezolvare
select elevi.cls, clase.diriginte;
elevi.nume from elevi, clase;
where elevi.cls=clase.cls and;
elevi.med=10 group by cls

 Clauza HAVING permite introducerea unor restricii de afiare a grupului.


Exemplu:
Cerere
Care este numrul elevilor pe clase,
numai de la profilul info?

Rezolvare
select elevi.cls, count(*) from;
elevi, clase where elevi.cls=clase.cls;
group by cls having clase.profil=info

 Clauza ORDER BY <exp-ordo> ASC/DESC permite specificarea expresiei de


ordonare i a sensului ordonrii.
Exemplu:
Cerere
Lista alfabetic a elevilor
dirigintelui Popa.

Rezolvare
select elevi.nume from elevi, clase where;
elevi.cls=clase.cls and clase.diriginte=Popa;
order by elevi.nume asc

sarcini de laborator
Considerm o firm care produce i comercializeaz produse din pielrie.
1.

Proiectai o baz de date necesar pentru compartimentul comercial n


activitatea de aprovizionare.
Se cere:
a. evidena furnizorilor de materiale (care sunt, ce materiale ofer, la ce preuri,
condiii de transport, alte faciliti);
b. evidena contractelor de aprovizionare (din momentul ncheierii lor se nregistreaz ca obligaii de livrare de ctre furnizor a unor materiale n cantitile i la
termenele fixate);
c. evidena facturilor. Odat cu livrarea materialelor, furnizorul ntocmete o factur
n care se nscrie contractul n baza cruia se face livrarea, materialele trimise,
preuri, condiii de plat.
d. evidena achitrilor. Pentru livrrile fcute, firma trebuie s plteasc. Plata
facturii se nregistreaz pe un document numit chitan. Chitanele identific
factura, data achitrii i suma. O factur poate fi achitat prin mai multe chitane.
Desigur, putem achita i prin banc!
2. Calculai necesarul de aprovizionat pe baza planului de fabricaie i a consumului
unitar de materiale. Se va ine cont de stocurile existente!
3.
a.
b.
c.
d.

Aflai prin interogri SELECT:


Care sunt furnizorii pentru materialul x?
Care este cantitatea total contractat pentru materialul x?
Care dintre furnizorii pentru materialul x ofer preul cel mai mic?
Cte facturi au fost trimise pentru contractul x?
Capitolul 14 Interogarea bazelor de date

147

e.
f.
g.
h.
i.

Care este valoarea total a contractelor ncheiate cu furnizorul X?


Exist contracte neonorate la termen sau cantitate?
Care sunt furnizorii care nu au facturi?
Exist facturi neachitate?
Care este situaia centralizat a achitrilor pentru furnizorul X: total valoric
facturi, total sume achitate, diferena?
j. Care sunt furnizorii care nu au nici un contract?
k. Exist contracte ncheiate cu furnizori nenregistrai n baza de date?
l. Exist materiale necesare, pentru care nu exist furnizori sau contracte?
Sugestie de rezolvare a punctului 2:
Necesar de aprovizionat1
Necesarul de aprovizionat
se determin n funcie de
stocul existent i necesarul de
materiale pentru realizarea
planului de producie. Tabelele
necesare sunt Plan (cod-produs, cantitate-planificat), Stoc
(cod material, stoc-existent) i
Consum-unitar (cod-produs,
cod-material, cantitatea de Figura 14-1: Proiectarea bazei de date
material consumat pentru
realizarea unitii de produs).
Pasul 1. Proiectm baza de date (pe care o numim Aproviz) cu tabelele Plan,
Consum, Stoc. Fixm relaiile plan1,nconsum; stoc1,nconsum.
Pasul 2. Calculul necesarului de materiale pentru realizarea planului se va face
nmulind consumul unitar de material cu planul de producie. Relaia dintre cele dou
tabele permite asocierea cantitii planificate pentru fiecare consum n parte; baza de
date curent este Aproviz.

Exemplu

SELECT Plan.plan, Consum.codp, Consum.codm, Consum.consum,;


Plan.plan*Consum.consum AS necplan;
FROM aproviz!plan INNER JOIN aproviz!consum ;
ON Plan.codp = Consum.codp;
ORDER BY Consum.codm;
INTO DBF fnecplan
USE
ADD TABLE fnecplan && trecem tabela nou creat n baza de date

Pasul 3. Calculm necesarul total de materiale pentru fiecare material.


SELECT fNecplan.codm, SUM(fNecplan.necplan) AS nectotal;
FROM aproviz!fnecplan;
GROUP BY fNecplan.codm;
INTO DBF fnectotal
USE
ADD TABLE fnectotal
1

148

Urmrii alte variante de rezolvare la sfritul manualului.


Informatic Manual pentru clasa a XII-a

Pasul 4. Scdem din stocul existent necesarul total i aflm necesarul de aprovizionat.
SELECT Stoc.codm, Stoc.stoc-fnectotal.nectotal;
FROM aproviz!fnectotal INNER JOIN aproviz!stoc;
ON fNectotal.codm = Stoc.codm;
GROUP BY fNectotal.codm;
ORDER BY Stoc.codm;
INTO DBF fnecaprov
USE
ADD TABLE fnecaprov && trecem fiierul fnecaprov n baza de date

Proiectarea vizual a interogrilor


O interogare este o modalitate de combinare a datelor provenind din mai multe
surse, care servete la realizarea rapoartelor, a formularelor etc. Aceste date sunt doar
afiate, nu pot fi modificate (sunt read-only). Exist mai multe tipuri de interogri:
simple sau unidimensionale (query);
ncruciate sau bidimensionale (cross tab);
tridimensionale sau tabele pivot (pivot table).

a. Proiectarea interogrilor cu Query Designer


Query Designer este generatorul de interogri i reprezint o interfa pentru
realizarea interactiv a cererilor SELECT din SQL.
Crearea unui fiier de cereri se face interactiv, prin deschiderea ecranului de
proiectare Query Design din meniul File, New, Query sau prin comanda CREATE
/MODIFY QUERY <fis.qpr>
Va crea un fiier cu extensia .qpr numit fiier de cereri, care va putea fi executat
tot prin comanda DO <fis.qpr>.

Mediul de lucru
Pentru utilizatorii FoxPro, interfaa utilitarului Query Designer este foarte prietenoas, punnd la dispoziie o multitudine de elemente pentru realizarea operaiilor
dorite: bara cu butoane, un meniu contextual, un meniu pe linia principal Query.
Bara Query Designer
 Butonul Run
 Butonul Add Table permite deschiderea
ferestrei pentru includerea tabelelor n
interogare.

  

Figura 14-2: Bara Query Designer

 Butonul Remove table permite tergerea


tabelelor din fereastra de proiectare a interogrii.

 Butonul Add Join permite adugarea de relaii temporare ntre tabelele interogrii.
 Butonul View SQL permite vizualizarea comenzii SELECT.
 Butonul Maximize/Minimize permite modificarea dimensiunii zonei de
vizualizare a tabelelor.
 Butonul Query Destination deschide fereastra pentru precizarea destinaiei interogrii.
Capitolul 14 Interogarea bazelor de date

149

Meniul contextual
Se deschide, aa cum tim, prin clic dreapta i conine cteva
aciuni legate de interogare, cum ar fi execuie (Run), adugarea
unei tabele (Add table), tergerea unei tabele (Remove table),
vizualizarea comenzii SELECT (View SQL), deschiderea ferestrei
cu butoane pentru alegerea destinaiei interogrii (Output setting).
Figura 14-3:
Meniul contextual

Meniul Query

Adugarea unei tabele


tergerea unei tabele
tergere legtur
Deschide tab-ul Fields selectare cmpuri
Deschide tab-ul Join fixare legturi
Deschide tab-ul Filter fixare filtru
Deschide tab-ul Order fixare chei de ordonare
Deschide tab-ul Group fixare cheie de grupare
Deschide tab-ul Miscellaneous alte opiuni
Destinaia se alege dintr-un ecran cu butoane
Vizualizarea comenzii SELECT generate
Introducerea comentariilor
Execuie fisier.qpr

Figura 14-4: Meniul Query

Fereastra de proiectare a unei interogri


Fereastra principal a utilitarului Query Designer este structurat n dou pri: cea
de sus permite vizualizarea i editarea surselor de date.

Permite
precizarea
coloanelor:
clauza
SELECT

Legturile dintre
tabele clauza
FROM ON

Zona de vizualizare
a tabelelor.
Se deschide prin
fereastra Add Table

Condiii
de filtrare
clauza
WHERE

Cmpurile folosite
pentru ordonarea
datelor clauza
ORDER

Figura 14-5: Fereastra de proiectare a interogrii


150

Informatic Manual pentru clasa a XII-a

Cmpurile folosite
la gruparea
articolelor
clauza GROUP BY

Numrul de
valori, dac
sunt distincte;
dac este o
interogare
ncruciat

Ecranul Query Destination permite alegerea dintre urmtoarele destinaii:

Figura 14-6: Ecranul Query Destination

Browse (afiare n fereastra Browse); Cursor (afiare ntr-o tabel temporar pe


durata sesiunii de lucru curente); Table/DBF (nscrierea informaiilor ntr-o tabel);
Graph (reprezentri grafice); Screen (afiarea datelor pe ecran); Report (afiare sub
form de raport); Label (afiare sub form de etichet).

Exemple

Vom explica particularitile proiectrii interogrilor prin rezolvarea


pas cu pas a unor teme.

Tema 1. Paii construirii unei interogri, tab-urile Fields, Filter, Order


Firma Condurul de aur, ce
produce articole din pielrie, a
crei activitate de aprovizionare a
fost analizat n leciile anterioare,
ncheie cu diveri parteneri contracte pentru vnzarea produciei
sale, nscrise n tabela CONTRACTE
(numrul
contractului,
data,
nume_beneficiar, nume_produs,
cantitatea contractat, preul
promis la contractare). Un contract
se refer la un singur produs. La
contractare s-a estimat un anumit Figura 14-7: Tabelele CONTRACTE i FACTURI
pre de vnzare, numit
pretpromis. Produsele se factureaz la livrare, evidena acestora fiind inut n tabela
FACTURI (nr_factur, data, nr_contract, cantitatea livrat, preul efectiv de vnzare).

Figura 14-8: Datele din tabelele CONTRACTE i FACTURI

Capitolul 14 Interogarea bazelor de date

151

Presupunem c sunt create tabelele i incluse n baza de date DESFACERE.


Problem
Ce contracte au fost ncheiate cu firma intim srl
pentru produsul pantofi? Sau, altfel formulat, dorim
o situaie cronologic a tuturor contractelor ncheiate
pentru produsul Pantofi de ctre firma intim srl.
Rezolvare
Pasul 1. Deschidem ferestra Query Designer
selectnd File, New, Query. Se deschide fereastra Add Figura 14-9:
Table or View pentru precizarea tabelelor surs. Fereastra Add Table or View
Fereastra Add Table or View se deschide din Query
Designer pentru includerea altei tabele selectnd
Query, Add Table sau din meniul contextual. Includem tabela Contracte.
Pasul 2. Precizm coloanele nterogrii n tab-ul Fields. Cmpurile tabelelor
deschise n zona Table apar n lista Available Fields i pot fi mutate prin butonul ADD
n lista Selected Fields, formnd coloanele interogrii.
Vom selecta din cmpurile dorite din tabela
CONTRACTE: numrul
contractului,
produsul,
cantitatea. Pentru valoarea contractului folosim
zona de editare a expresiilor interogrii.
Dup construirea expresiei Contracte.cant * Figura 14-10: Construirea expresiei
Contracte.pret_promis n
zona de editare vom
apsa butonul Add pentru includerea
expresiei n lista coloanelor.
Pentru construirea comod a
expresiilor folosim Expression Builder
prin clic pe butonul
.
Selectm tabela (lista From Table),
cmpul (lista Fields), variabila (lista
Variables) sau funcia adecvat din
listele Functions. Prin dublu clic se
trimite selecia n zona de editare.
Verificm corectitudinea expresiei prin
clic pe butonul Verify.
Pasul 3. Fixm un filtru prin tag-ul
Filter. Expresia filtru se compune prin
asocierea expresiilor relaionale cu
operatorii logici and i or. Folosim lista
derulant a operatorilor relaionali
152

Informatic Manual pentru clasa a XII-a

Figura 14-11: Expression Builder

(Criteria) i lista celor logici (Logical) care vor forma condiia. Nu ncadrm irurile ntre
ghilimele, nici datele calendaristice ntre apostrofuri, pentru c Query Designer
asociaz constantei tipul cmpului.

Figura 14-12: Realizarea unui filtru

Fiecare nou expresie relaional se adaug prin clic pe butonul Insert.


Pasul 4. Fixm cmpurile de ordonare prin tab-ul Order By.

Figura 14-13: Tab-ul Order By

Pot fi alese maxim 3 cmpuri pentru ordonarea datelor. n problema noastr, vom
folosi Contracte.data. Dac trebuie introduse mai multe cmpuri, ordinea este
esenial, ca i la comanda Sort. Putem inversa cmpurile n fereastra Ordering
Criteria, prin tragere i plasare a butonului asociat liniei.
Pasul 5. Vizualizm interogarea prin clic pe butonul Run Query

Figura 14-14: Vizualizarea interogrii


Pasul 6. Vizualizm comanda SQL asociat prin View SQL
SELECT Contracte.nume_benef, Contracte.nr_contr,
Contracte.nume_prod,;
Contracte.cant, Contracte.pret_promis FROM
desfacere!contracte;
WHERE Contracte.nume_prod = pantofi
AND
Contracte.nume_benef LIKE intim srl

Capitolul 14 Interogarea bazelor de date

153

Tema 2 Folosirea tabelelor legate, grupuri, totalizri.


Tab-urile Join, Group i opiunea Query Destination
Problema
Fie baza de date DESFACERE. Obinei ntr-o tabel cu numele Centralizare o
situaie centralizatoare a livrilor de pantofi pe beneficiari i contracte. Pentru fiecare
beneficiar i contract intereseaz numrul contractului, data, cantitatea contractat,
numrul de facturi trimise i suma livrrilor (cantitii facturate).
Observai situaia dorit ntr-o fereastr Browse.

Figura 14-15: Situaia centralizatoare

Rezolvare
Pasul 1. Lansm generatorul de interogri
selectnd File, New, Query, New sau prin
comanda CREATE QUERY.
Pasul 2. n fereastra de poiectare a interogrii
deschidem tabelele Contracte i Facturi fie din
meniul contextual, fie selectnd Query, Add Table.
Pasul 3. Fixm condiia de legtur n tab-ul
Join. Observm conservarea legturii dintre tabelele
Contracte i Facturi, definit la nivelul bazei de date.

Figura 14-16: Cele dou tabele n


fereastra de proiectare

Figura 14-17: Vizualizarea legturii n tab-ul Join

Tipuri de asocieri ntre tabelele legate:


Inner Join numai articolele comune care satisfac criteriul;
Left Outer Join toate nregistrrile din tabela din stnga (printe) i numai cele
care satisfac criteriul din tabela din dreapta (deci n stnga vom avea i articole
care nu satisfac condiia de legtur!);
Right Outer Join toate articolele din dreapta relaiei (copil) i numai cele care
satisfac criteriul din tabela din stnga;
Full Join toate articolele din ambele tabele (concatenare complet).
Pasul 4. Fixm condiia de filtrare prin tab-ul Filter.

Figura 14-18: Condiia de filtrare n tab-ul Filter


154

Informatic Manual pentru clasa a XII-a

Pasul 5. Fixm cmpul


folosit ca grup n tab-ul
Group By. De obicei, se
folosete gruparea, apoi se
fac calcule asupra grupului.
Calculele se fac prin funciile: Figura 14-19: Cmpul de grupare n tab-ul Group By
AVG, COUNT, MAX, MIN,
SUM. n cazul nostru, dorim gruparea facturilor pe contracte, deci vom indica drept cheie
de grupare cmpul facturi.nr_contr.
|n general, pentru grupuri se pot folosi funciile urmtoare:
COUNT() numr nregistrrile grupului;
SUM() nsumeaz valorile pentru toate nregistrrile grupului;
AVG(...) calculeaz media valorilor articolelor din grup;
MIN() extrage valoarea minim a expresiei din grup;
MAX() extrage valoarea maxim din grup;
COUNT(DISTINCT) numr apariiile grupului;
SUM(DISTINCT) nsumeaz valorile pentru articolele distincte etc.
Pasul 6. Fixm coloanele rezultat ale cererii n tab-ul Fields.
Vom selecta i vom muta prin butonul ADD
cmpurile nr_contract, nume_benef, data. Pentru
cantitatea contractat, dorim asocierea unui alt
nume, deci vom lansa Expression builder, iar n
zona de editare vom plasa pentru cmp aliasul
Contractat.
n problema noastr se cere o grupare a
facturilor pe fiecare contract. Pentru suma
cantitilor
facturate
folosim
expresia
Sum(Facturi.cant) as facturat.
Pentru numrul de facturi vom construi o expresie Figura 14-20: Fixarea coloanelor
folosind funcia COUNT(facturi.nr_fact), iar rezultat n tab-ul Fields
pentru
diferen
vom
scrie
expresia
Contracte.cant-sum(facturi.cant) as diferenta.
Pasul 7. Alegem destinaia final a rezultatelor interogrii prin opiunea Query
Destination. Alegem opiunea Table.
Pasul 8. Executm interogarea folosind butonul sau comanda Run query.
Pasul 9. Vizualizm comanda SQL prin View SQL.
SELECT Contracte.nr_contr, Contracte.nume_benef, Contracte.data,;
Contracte.nume_prod, Contracte.cant AS contractat,;
SUM(Facturi.cant) AS facturat,;
Contracte.cant-SUM(Facturi.cant) AS diferenta,;
COUNT(Facturi.nr_fact) AS nr_facturi;
FROM desfacere!contracte INNER JOIN desfacere!facturi ;
ON Contracte.nr_contr = Facturi.nr_contr;
WHERE Contracte.nume_prod = pantofi;
GROUP BY Facturi.nr_contr INTO TABLE livrari.dbf

Capitolul 14 Interogarea bazelor de date

155

Tema 3 Folosirea interogrilor pentru obinerea informaiilor distincte.


Prezentarea tab-ului Miscellaneous
Problema
Fie baza de date DESFACERE. Afiai partenerii de afaceri care au ncheiat
contracte cu firma Condurul de aur n luna februarie.
Rezolvare
Pasul 1. Lansm Query
Designer i includem tabela
Contracte.
Pasul 2. Precizm coloanele n tab-ul Fields: nume
beneficiar.
Pasul 3. Fixm condiia filtru.
Pentru a filtra dup o expresie
este
necesar
alegerea
opiunii Expression din lista
Field
Name.
Deschidem
Expression Builder, pentru a
construi expresia.
Figura 14-20: Fixarea condiiei pentru filtru
Pasul 4. Fixm opiunea
NO Duplicates n tab-ul Miscellaneous. Din acest tab este posibil i stabilirea unui
numr sau procent de vizualizat din rezultatul interogrii (caseta Number of records
sau comutatorul Percent).
Pasul 5. Salvm, apoi nchidem Query Designer.
Pasul 6. Executm prin comanda DO fis.qpr.

Tema 4 Prezentarea rezultatelor unei interogri sub forma unei diagrame


Problema
Fie baza de date DESFACERE. Afiai variaia valoric a contractelor ncheiate de
firma intim srl pe fiecare produs.
Rezolvare
Pasul 1. Proiectm o interogare prin Query Designer, preciznd drept surs tabela
Contracte i coloanele: nume beneficiar, nume produs i expresia pentru valoare
(cant*pret).
Pasul 2. Fixm pentru grupare cmpurile nume beneficiar i nume produs.
Pasul 3. Fixm drept filtru expresia Contracte.nume_benef=intim srl.
Pasul 4. Precizm destinaia ca raport grafic: Query, Query Destination, Graph..
Pasul 5. Executm interogarea prin clic pe butonul Run i observm deschiderea
ferestrelor de proiectare a graficului prin Graph Wizard.
n fereastra Graph Wizard indicm variabilele pentru axe prin tragere i plasare de
la cmpul nume_prod la axa Ox i de la Valoare la Data Series.

156

Informatic Manual pentru clasa a XII-a

Observaie: Atributele graficului


pot fi schimbate prin dublu clic pe
fereastra final a Graph Wizard. Se
deschide fereastra de editare a
graficului, iar pe meniul principal
pot fi folosite opiunile Chart, Tools,
Data etc. Dac butonul Graph nu
este activ, putem salva interogarea
ntr-o tabel, apoi, dup ieirea din
generatorul de interogri, selectm
Tools, Graph Wizard i alegem
tabela anterior generat.

Figura 14-21: Reprezentarea grafic a rezultatelor

Pasul 6. Vizualizm comanda Select prin View SQL:


SELECT Contracte.nume_benef, Contracte.nume_prod,;
sum(Contracte.cant* Contracte.pret_promis) as valoare;
FROM desfacere!contracte, desfacere!facturi;
WHERE Contracte.nume_benef = intim srl;
GROUP BY Contracte.nume_benef, Contracte.nume_prod;
INTO CURSOR SYS(2015)
DO (_GENGRAPH) WITH QUERY

b. Proiectarea rapid a interogrilor cu Query Wizard


Pentru proiectarea rapid a interogrilor, folosim aplicaia Query Wizard, care poate
fi lansat selectnd Tools, Wizard, Query sau File, New, Query i alegnd aplicaia
wizard. n fereastra de dialog deschis se poate opta pentru tipul de interogare dorit.

Exemple
Tema 5 Folosirea aplicaiei Query Wizard
Problema
Obinei situaia contractelor, ordonat pe beneficiari, care au facturri dup 1 ianuarie 2002.
Vom afia de fapt informaii despre contracte, pentru fiecare contract informaii
despre facturile trimise n contul acestuia(cmpul; Nr_fact i data).
Pasul 1. Selectm cmpurile care vor forma ieirea din interogare.
Atenie, sunt cmpuri din tabele, nu expresii. Dac dorim folosirea
expresiilor, editm fiierul .Qpr creat cu aplicaia Wizard n Query
Designer.
Pasul 2. Dac sunt mai multe tabele, specificm relaia. n cazul nostru
scriem:
Contracte.nr_contr= facturi.nr_contr
Capitolul 14 Interogarea bazelor de date

157

Pasul 3. Filtrm datele rezultate printr-o expresie logic format din mai
multe expresii relaionale. n cazul nostru scriem:
Facturi.data greater then or equal 01/01/02
Pasul 4. Fixm cmpurile de ordonare, n cazul nostru,
contracte.nume_benef. La fel, numrul de cmpuri este limitat la 3.
Ordinea plasrii acestor cmpuri n lista Avaible Fields conteaz pentru
c d prioritatea cheii la sortare.
Pasul 5. Salvm ca fiier .Qpr; putem rula imediat fiierul (opiunea
Save and run) sau putem intra n Query Designer (opiunea Save
query and modify it in Query Designer).

Proiectarea fiierelor View


Spre deosebire de interogri (care sunt de tip Read only) vederile, perspectivele
sau imaginile (views) sunt fiiere care se pot modifica i, mai mult, transmit aceste
corecii tabelelor surs din care sunt create.
Vederile sunt de dou tipuri: locale (create din tabele sau alte vederi locale) sau la
distan (create din tabele situate pe serverul ODBC aflat la distan).
Fiierele sunt memorate ntr-o baz de date i pot fi gestionate ca i celelate tabele
de date. Acest lucru este un avantaj, dar atenie: nu putem utiliza vederea dect dac
baza de date este deschis.
Cnd folosim vederea, definiia ei va crea o comand SQL care va da setul de date
pe care l putem folosi. Realizarea fiierelor vedere (avnd extensia .Vue) se poate
face interactiv cu utilitarul View Designer sau cu asistenii Wizard.

a. Proiectarea fiierelor vedere prin View Designer


Apelul utilitarului pentru crearea unei vederi se face fie direct, selectnd File, New,
View, fie prin tastarea comenzii CREATE VIEW n fereastra de comenzi. Meniul asociat,
ca i fereastra de proiectare, sunt asemntoare celor de la Query Designer.

Exemple
Tema 6 Etapele i specificul operaiei de creare a unui fiier View
Problema
Fie baza de date DESFACERE. Creai o vedere cu beneficiarii unui produs X. Va fi
permis editarea cmpurilor, cu excepia cheii de legtur (nr_contr) i a numelui
beneficiarului (nume_benef).
Rezolvare
1. Deschidem baza de date Contracte prin OPEN DATABASE.
ATENIE! Vederile pot fi create numai n contextul unei baze de date deschise, unde de
fapt, sunt i memorate.
158

Informatic Manual pentru clasa a XII-a

2. Lansm utilitarul View Designer, selectnd File, New, View, New.


3. Ecranul de proiectare este cunoscut de la Query Designer. Deschidem tabelele
Contracte i Facturi prin opiunea Add Table din meniul principal, numit tot query.
4. Prin Tab-ul Fields selectm cmpurile care vor forma coloanele tabelei view:
Contracte.nr_contr, contracte.data, contracte.nume_benef,
facturi.nr_fact, facturi.data.
ATENIE! Dei cmpurile Memo pot fi incluse ntr-o vedere, ele nu pot fi actualizate.
5. Prin tab-ul Join fixm legtura contracte1-nfacturi.
6. Stabilim cheile de ordonare, grupate la fel ca la Query Designer.
7. Introducem condiia de filtrare. Pn acum am folosit tab-ul Filter punnd n
membrul drept al condiiei o constant. n problem dorim s filtrm vederea prin
introducerea unei variabile, astfel nct la execuie s obinem rezultate diferite.
Pentru introducerea variabilei n filtru, i precedm numele cu semnul ntrebrii.
Exemplu: facturi.nume_prod==?x. Apoi definim numele variabilei i tipul ei n
fereastra View Parameters, deschis prin Query, View Parameters. La execuie va fi
cerut valoarea acestei variabile.

Figura 14-22: Introducerea variabilei n filtru

Tab-ul Update Criteria este folosit pentru actualizarea datelor. n fereastra sa


principal sunt afiate toate coloanele precizate ca ieire din vedere. Lateral sunt doi
indicatori: primul (cheia) arat dac este cmp cheie ntr-o tabel surs i al doilea
(creionul) dac poate fi actualizat coloana prin vedere.

Figura 14-23: Tab-ul Update Criteria

Capitolul 14 Interogarea bazelor de date

159

Trebuie tiut c:
Un cmp cheie nu poate fi modificat. Dac am stabilit deja nite cmpuri
cheie diferite de cele din tabela iniial, alegem Reset Key i sistemul va
cuta n tabela surs cmpurile cheie dup indecii primari existeni i va
permite fixarea altuia drept cheie.
Vom modifica doar cmpurile marcate pentru
aceast operaie. n fereastra Update
observm c numele beneficiarilor nu poate
fi modificat.
Schimbarea setrii iniale a indicatorilor
asociai coloanelor vederii se face prin pozi- Figura 14-24: Cmpurile marcate
ionarea pe numele cmpului i selectarea pot fi modificate
comutatorului corespunztor (primul pentru
fixarea cheii, al doilea pentru actualizare).
Comutatorul Send SQL Updates trebuie activat pentru a folosi vederea la
actualizarea datelor din surse.
Partea dreapt a ferestrei Update (SQL WHERE) este folosit pentru vederi
la distan i o vom discuta la lecia urmtoare.
8. Salvm i ieim din proiectare.

Exemple
Tema 7 Proiectarea interogrilor ncruciate cu Crosstab Wizard
O interogare ncruciat este rezultatul unei interogri speciale, care permite
analizarea relaiei dintre un cmp al tabelei de date i alt cmp al aceluiai tabel.
Problema
Fie baza de date DESFACERE. Afiai cantitatea total vndut din fiecare produs
n fiecare lun din anul curent. Situaia va fi afiat sub forma unei matrici: pe linii avem
produsele, iar pe coloane avem lunile. La fiecare produs, calculai totalul vnzrilor.
Observai rezultatul obinut printr-o interogare ncruciat pornind de la tabela
Facturi, dat n continuare.
Rezolvare
Pasul 1. Pregtirea sursei de date pentru
Crosstab Wizard.
Observai tabela Facturi. Prima problem pe
care o avem de rezolvat este asocierea numelui
de produs pentru fiecare factur. tiind c o
factur se refer la un anumit contract i un
contract se semneaz pentru un produs, este
suficient legtura ntre tabelele Contracte i
Facturi. De exemplu, contractele 122 sunt
pentru pantofi, 123 pentru papuci, iar 125
pentru sandale. O alt problem care trebuie Figura 14-25: Tabela Facturi
rezolvat naintea proiectrii interogrii Crosstab
este identificarea lunii din data facturii.
160

Informatic Manual pentru clasa a XII-a

Figura 14-26: Contractele pentru pantofi, papuci, sandale

Deci, crem un fiier vedere prin File, New, View.


Adgm tabelele Contracte i Facturi i indicm drept coloane denumirea
produsului din tabela Contracte, iar cantitatea din tabela Facturi. De asemenea, folosim
funcia Month(facturi.data) pentru a totaliza vnzrile pe luni. Salvm ntr-un
fiier View cu numele View1.

Figura 14-27: Crearea fiierului vedere

Pasul 2. Lansm Cross Tab Wizard selectnd Tools, Wizard, Query, Cross-Tab Wizard.
a. Selectm cele trei necesare: luna, numele produsului, cantitatea din fiierul cursor.
b. Completm axele: dorim pe linii produsele (sunt multe), pe coloane trecem lunile,
iar n celulele matricii trecem cantitatea.
c. Specificm operaia de calcul pe care o va face utilitarul (SUM).
n mod implicit, n ultima
coloan se face suma, dar
putem solicita i alte calcule,
cum ar fi: numrarea celulelor
care conin date (de exemplu,
numrul de luni n care a fost
solicitat fiecare produs) sau
calcularea procentajului (ct la
sut din totalul vnzrilor
reprezint fiecare produs) etc.
d. Salvm ca fiier .qpr; acesta
poate fi rulat imediat (opiunea
Figura 14-28: Stabilirea layout-ului
Save and run) sau putem intra
n generatorul de interogri
pentru modificri.

Capitolul 14 Interogarea bazelor de date

161

Tema 8 O problem recapitulativ


Stabilirea necesarului de aprovizionat folosind Query Design
Realizai prin utilitarul Query Design operaia de calcul a necesarului de
aprovizionat (din aplicaia anterioar). Baza de date este Aproviz i cuprinde tabelele
Plan 1,n consum 1,n stoc.

Figura 14-29: Baza de date Aproviz

Datele de plecare sunt memorate n tabelele Plan, Consum i Stoc.

Figura 14-30: Datele de pornire din cele trei tabele


Pasul 1. Calculm produsul cantitii planificate cu unitatea de consum ca s aflm
necesarul de material pentru realizarea planului.
Lansm View Designer i indicm tabelele Plan i Consum. Precizm coloanele, iar
printre ele plan.plan*consum.consum as necplan pentru fiecare linie din consum
legat de plan prin codp. Vom denumi fiierul vedere necplan.
Observai fereastra de proiectare pentru necplan.vue

Figura 14-31: Fereastra de proiectare pentru necplan.vue

162

Informatic Manual pentru clasa a XII-a

Pasul 2. Folosim tabela virtual creat anterior. Pentru fiecare codmaterial din
vederea necplan creat calculm suma.

Deschidem fiierul vedere Necplan i indicm


n tab-ul Fields expresia Sum. Pentru a denumi
coloana folosim clauza AS. Fiierul are numele
Nectotal. Grupm pe cmpul codmaterial.
Figura 14-32: Fereastra de proiectare pentru nectotal.vue

Pasul 3. Aflm necesarul de aprovizionat la fiecare material prin diferena stocnecesar total. Noul fiier vedere folosete vederea Nectotal creat anterior i tabela
Stoc. Relaia trebuie fixat pe cmpul codm.

Figura 14-33: Aflarea necesarului de aprovizionat

Figura 14-34: Tabelele intermediare rezultate n proiectare

Capitolul 14 Interogarea bazelor de date

163

sarcini de laborator
I.

Considerm o baz de date cu informaii legate de salarizarea personalului


ntr-o firm. Tabelele sunt:
PERSONAL (marca sau codul persoanei, numele, funcia, locul de munc)
Salar (marca, salariul de baz);
CAR (marca, cotizaia-lunar, suma-mprumutat, data mprumutului, suma
lunar pentru lichidarea mprumutului, suma total achitat din mprumut,
fondul cumulat din cotizaiile lunare anterioare),
RATE (marca, valoarea total a cumprturilor prin rate, banca i contul la
banc unde se pltesc ratele, suma pltit lunar, numrul de rate, valoarea
ultimei rate).
Se cere:
1. Proiectai baza de date i populai tabelele cu date de test.
2. Aflai prin comenzi SQL:
a) toi salariaii ordonai alfabetic;
b) numele i locul de munc pentru persoanele care nu pltesc impozit;
c) salariul mediu pe locuri de munc;
d) salarul mediu pe funcii;
e) fondul total de salarii;
f) numrul de salariai pe locuri de munc;
g) impozitul total, reinerile totale, totalul sporurilor pe locuri de munc;
h) funcia i numele persoanei cu salariul maxim;
i) locurile de munc (distincte!).
3. Folosind Query Designer, Query Wizard, View Designer, View Wizard aflai:
a) Cte persoane nu au mprumuturi la CAR (pltesc doar cotizaia)?
b) Care este suma total achitat pentru ratele contractate de o persoan X?
c) Care sunt persoanele care au contractat cel mai mare mprumut la CAR i au
suma ratelor peste 1 milion?
d) Care sunt persoanele care au terminat de achitat ratele luna aceasta?
e) Afiai sub form de fluturai informaiile despre salariul de baz, nume,
funcie, sumele reinute la CAR i rate.
f) Numrai pe funcii cte persoane au rate.
g) Calculai pe locuri de munc suma CAR care trebuie depus luna curent.
h) Calculai pentru fiecare banc sumele care trebuie virate ca urmare a achitrii
ratelor de ctre salariai.
i) Afiai ntr-un raport informaiile nume, funcie, salariu de baz, total reineri
(rate+CAR), rest de plat, pe locuri de munc, alfabetic.
j) Afiai sub forma unui grafic variaia salariului de baz pe funcii.
k) Afiai sub forma unui grafic variaia reinerilor totale pe locurile de munc.
l) Afiai sub forma unui tabel sumele datorate de fiecare persoan ca
rate_CAR+cotizaie_lunar+rate_cumprturi pe fiecare lun a primului
trimestru i total.

164

Informatic Manual pentru clasa a XII-a

II.

tiind c se ine evidena participanilor la faza naional a olimpiadelor colare


nc din anul 1990, aflai:
1. La ce olimpiade au obinut premii sau meniuni reprezentanii judeului X?
2. Realizai o situaie centralizatoare cu numrul total de premii pe judee i
discipline n anul curent.
3. Realizai o clasificare a judeelor n funcie de rezultate, acordnd un punctaj
fiecrui premiu (vor fi luate n ordine premiul 1, premiul 2, premiul 3, mentiune 1,
meniune 2 i meniune 3).
4. Care sunt participanii din Cluj la olimpiada de matematic n anul curent?
5. Care este judeul cu cele mai multe premii 1 n anul x?
6. La ce olimpiade s-au obinut cele mai multe premii?
7. Lista participanilor la olimpiada internaional de informatic din anul trecut.
8. Exist vreun jude care nu a obinut nici un premiu anul acesta?
9. Lipsete vreun an din evidene?
10.Care sunt disciplinele la care se organizeaz olimpiade? Salvai n alt tabel
aceste discipline. Fixai o legtur ntre tabelele DISCIPLINE i OLIMPIADE i
aflai care sunt anii n care nu s-a organizat concurs pentru fiecare disciplin.
III. Deschidei baza de date pentru activitatea de BIBLIOTECA. Proiectai
interogrile urmtoare prin comenzile SELECT i interactiv, cu utilitarele Query Design
i Query Wizard:
1. Care sunt restanierii ?
2. Cine a mprumutat anul acesta cartea X?
3. Care sunt elevii din clasa 11b nscrii la bibliotec?

sarcini pentru realizarea


unui mini-proiect
Imaginai interogri legate de activitatea specific proiectului fiecrei echipe pentru:
a. folosirea unei singure tabele, cu filtrarea datelor;
b. folosirea unei singure tabele cu operaii totalizatoare la nivelul unui grup;
c. folosirea a dou tabele legate;
d. folosirea unei interogri cu parametru (View);
e. folosirea unei vederi pentru actualizarea datelor din dou tabele legate.

Capitolul 14 Interogarea bazelor de date

165

Capitolul

15

Comunicarea aplicaiei
Visual FoxPro
cu alte aplicaii





Accesarea datelor la distan; View Designer, Remote View Wizard


Publicarea datelor pe Internet; Web Publishing Wizard
Proiectarea paginii Web pentru cutare; WWW Search Page Wizard
Proiectarea documentelor pentru e-mail

O aplicaie nu folosete totdeauna doar date situate pe calculatorul gazd. Ea poate


i trebuie s acceseze i s vad datele situate pe alte calculatoare, chiar n alte
formate dect FoxPro.
De asemenea, este util uneori s facem cunoscute anumite date publicului larg,
pentru reclam sau alte activiti. i cum internetul este cea mai eficient cale de
comunicare, ne vom ocupa de proiectarea documentelor web pentru vizualizarea
informaiilor din baza de date FoxPro pe internet.
O alt activitate legat tot de comunicarea cu exteriorul este posibilitatea oferirii
unor informaii la cererea clienilor de pe internet.

Proiectarea fiierelor vedere cu date la distan


Pentru a accesa date situate la distan trebuie utilizat interfaa ODBC (Open
DataBase Connectivity). Aceast interfa utilizeaz drivere pentru conversia sintaxei
SQL de la un produs la altul.
Pai:
1. Stabilirea unei conexiuni la distan cu alt baz de date: deschidem Control
Panel i selectm pictograma ODBC pentru a vedea ce surse de date sunt
disponibile. FoxPro posed drivere ODBC pentru partajarea datelor, printre care
Access, Sybase SQL, DB2, Oracle, Paradox. Toate driverele au ecrane de
configurare n care se pot specifica informaii, cum ar fi versiunile, tabelele i
directoarele supuse partajrii.
2. Deschiderea FoxPro.
3. Deschiderea unei baze de date: Visual FoxPro stocheaz informaiile referitoare
la conexiuni i vederi la distan n fiierul .DBC.
4. Crearea conexiunii: selectm File, New, Connectivity. Apare o fereastr pentru
identificarea sursei de date, definirea numelui utilizatorului, introducerea parolei etc.
Dm un nume conexiunii. Putem defini attea conexiuni cte surse de date (tabele)
avem n sistem. Fiecare conexiune poate susine vederi ale datelor de la distan.
5. Lansarea generatorului de vederi prin File, New, Remote View, New. Apare o
caset de dialog pentru selectarea conexiunii i a sursei de date (baza de date).
166

Informatic Manual pentru clasa a XII-a

6. Adugarea tabelelor necesare din baza de date: fiecare nou tabel trebuie s
aib o legtur cu cele existente deja, altfel FoxPro face produsul cartezian al
articolelor celor dou tabele.
7. Adugarea criteriilor de selecie prin tab-ul Join: nu se pot lega ntre ele tabele
aparinnd unor conexiuni diferite. |n schimb, odat creat vederea, se poate
crea o interogare sau un formular care s utilizeze date de la mai multe surse.

Figura 15-1: Adugarea criteriilor

8. Filtrarea, stabilirea ordinii, a gruprii, a criteriilor de actualizare, ca i n cazul


unei vederi locale.
9. Precizarea condiiilor de acceptare a actualizrilor prin Update Criteria: pot
exista conflicte de actualizare, innd cont c n condiiile existenei mai multor
utilizatori, acceai tabel poate fi solicitat la actualizare simultan de la mai multe
calculatoare. Clauzele SQL WHERE ne ajut n aceast privin:
Key fields only se efectueaz actualizrile atta vreme ct cmpul cheie al
tabelei surs nu s-a modificat;
Key and updatable fields interzice actualizarea atunci cnd oricare dintre
cmpurile marcate pentru actualizare i-a schimbat valoarea n tabela de la
distan;
Key and modified fields interzice actualizarea dac pentru un cmp a crui
valoare s-a modificat local, valoarea acestuia se schimbase i n tabela surs;
Key and timestamp interzice actualizarea dac valoarea cheii sau a mrcii
temporare a fost modificat n tabela iniial.
Modificarea cmpurilor se poate face fie prin corecii directe n articolele
vederii (butonul radio SQL Update), fie prin tergerea nregistrrilor care au
suferit corecii i reinserarea lor n varianta nou (butonul SQL Delete then
INSERT).

Proiectarea rapid a vederilor cu Remote View Wizard


Pentru realizarea unei vederi cu surse de date diferite de cele ale Visual FoxPro se
poate folosi i instrumentul Remote View Wizard, care desfoar aceleai ferestre de
dialog ca i Local View Wizard, cu excepia primului pas, cnd se indic legtura cu
sursa extern. Fiierul vedere nu permite n mod automat actualizarea datelor, ci va
trebui ca dup salvare s-l modificm cu View Designer, tab-ul Update Criteria.

Capitolul 15 Comunicarea aplicaiei Visual FoxPro cu alte aplicai

167

Atenie! Fiecare vedere la distan poate accesa o singur surs de date. Pentru a
combina un fiier Paradox cu unul FoxPro trebuie create dou vederi ale
celor dou tabele. Apoi, presupunnd c exist un cmp care permite
definirea unei relaii, se pot combina cele dou vederi n mediul de date Data
Environment al unui formular sau al unui raport.

Proiectarea paginilor web pentru vizualizarea


datelor pe internet
Utilitarul Web Publishing Wizard permite utilizatorilor externi vizualizarea unei baze
de date. Este lansat selectnd Tools, Wizards, Web Publishing.
Pasul 1. Selectm baza de date sau tabela ale crei informaii se
pot vizualiza pe internet. Desigur, dac este nevoie s asigurm
filtrarea articolelor, realizm un fiier vedere care se deschide la acest
pas. Selectm cmpurile care vor fi afiate.
Pasul 2. Precizm ordinea de afiare a datelor indicnd maxim 3
cmpuri de sortare i sensul operaiei.

Pasul 3. Setm caracteristicile de design ale


paginii web. Alegem modalitatea de afiare a
datelor selectate; pe linii,
sub form de etichet sau
pe coloane etc.
Stilul folosit pentru formatul paginii web poate fi
selectat prin comutatoarele din lista Visual Styles.
Pentru fiecare configurare a paginii alese Figura 15-2: Exemplu de format de afiare a unei colecii de cri
exist posibilitatea de
previzualizare.
Pasul 4. Salvm documentul. Putem salva documentul ca pagin web pentru
folosire ulterioar; putem salva i lansa un editor de texte n vederea modificrii paginii;
putem salva i deschide ntr-un browser sau putem s crem un program (cu extensia
.prg) generator de pagini de web.

168

Informatic Manual pentru clasa a XII-a

Proiectarea paginilor de cutare pe internet


n vederea cutrii anumitor informaii de
ctre vizitatorii internetului, Visual FoxPro
dispune de utilitarul WWW Search Page
Wizard, lansat selectnd Tools, Wizards, All,
WWW Search.
Pasul 1. Selectm tabela sau baza de
date n care vor fi cutate datele. Este
necesar ca tabela aleas s aib cel puin o
cheie principal. n cazul nostru, lum tabela
Carti cu cheia principal ISBN.
Pasul 2. Precizm indexul dup care se Figura 15-3: Aplicaia WWW Search
face cutarea. n cazul nostru, este colecia.
Page Wizard
Pasul 3. Introducem textele pentru titlul
paginii (Search Page Title) i indicaiile pentru
cutare (Search Page Description).
Pasul 4. Introducem o imagine de fundal
(Background Image) i o imagine de antet a
paginii (Header Image). Fiierele imagine au
extensiile .gif i .jpg. Comutatorul Provide
Ability to Download the Result Set as a File
permite trimiterea rezultatului cutrii sub
forma unui fiier.
Pasul 5. Selectm cmpurile care vor fi
incluse n pagina de rezultate. Numrul
maxim de cmpuri selectate este 5. S
presupunem c dm acces la titlu, autori,
editur, ediie, numr de pagini.
Pasul 6. Precizm imaginile de fundal i Figura 15-4: Pagin de cutare a crilor
dintr-un depozit denumit Cartea prin pot
antet pentru pagina rezultat al cutrii. De
asemenea, setm numrul maxim de nregistrri returnate n cutare. n zona de editare ODBC Data Source introducem sursele
de date ODBC create n sistem pentru a face accesibile tabelele FoxPro serverului
internet (implicit Microsoft).
Pasul 7: Salvm pagina web introducnd numele i directorul unde sunt memorate
cele trei fiiere pe care le creeaz utilitarul. Fiierele au extensiile .htm pagina HTML
folosit pentru cutare, .htx fiierul rezultat al cutrii i .idc fiier cu instruciunea
SQL Select prin care se realizeaz cutarea. Vom crea directorul carti i vom salva
fiierele tot sub numele Carti.

Capitolul 15 Comunicarea aplicaiei Visual FoxPro cu alte aplicai

169

Proiectarea i transmiterea documentelor prin e-mail.


Utilitarul Mail Merge Wizard
Visual FoxPro permite transmiterea direct prin e-mail a unor documente ca
etichete, scrisori, cataloage.
Utilitarul Mail Merge Wizard preia datele din tabelele Visual FoxPro specificate i
lanseaz instrumentul Word pentru compunerea documentului de expediat. Odat
realizat documentul, poate fi trimis imediat la adresele dorite. Modificrile ulterioare din
baza de date sunt reflectate automat n document. Utilitarul se lanseaz selectand
Tools, Wizard, Mail Merge.

Exemplu

Ne propunem s trimitem tuturor prietenilor notri invitaii de nunt. n


tabela Agenda, avem numele i adresele lor de e-mail.

Figura 15-5: Scrierea documentului de expediat

n vederea elaborrii scrisorii i trimiterii prin e-mail, vom lansa utilitarul Mail Merge
Wizard.
Pasul 1. Selectm cmpurile din tabela Agenda: numele i adresa de
e-mail. Atenie, nu putem folosi cmpuri din mai multe tabele. |n aceste
situaii va trebui creat o vedere.
Pasul 2. Indicm procesorul de texte pentru editatea scrisorii. Cel
implicit este Microsoft Word.
Pasul 3. Selectm opiunea de creare a documentului. Pentru a selecta
un document existent, introducem numele acestuia sau l cutm.
Pasul 4. Alegem Form Letter ca tip de document. Celelalte tipuri sunt
Label, Envelope sau Catalog.
Pasul 5. Deschidem Word-ul ca editor de texte. Compunem textul
scrisorii, avnd grij s inserm cmpul nume din baza de date prin
lista Insert Merge Field. Butoanele barei de instrumente care apare
aparin Word-ului i se presupun a fi cunoscute.

170

Informatic Manual pentru clasa a XII-a

Trimitem scrisoarea prin clic pe butonul Mail Merge de pe bara de instrumente.


Fereastra deschis de declanatorul Setup este prezentat n figura 15-6.

Figura 15-6: Introducerea datelor


pentru expediere

Indicm numele cmpului din tabel care conine adresa de e-mail a fiecrei
persoane. n vederea filtrrii datelor (nu toi prietenii vor fi invitai) se poate folosi
domeniul de nregistrri sau o condiie pus prin Query Options. Executm clic pe
butonul Merge pentru a expedia la toate adresele gsite n articolele selectate.

sarcini de laborator
Creai o aplicaie n FoxPro pentru concursul Info-Baby care se va desfura n
coala dumneavoastr. Se vor afia pe internet:
a) Informaiile generale despre concurs i organizatori, condiiile de participare;
b) Programul concursului pe zile, ore, activiti, locuri de desfurare;
c) Membrii juriului;
d) Concurenii, n ordinea nscrierilor, alfabetic, pe zile;
e) Problemele date n fiecare zi;
f) Situaiile zilnice rezultatele obinute de fiecare participant n ziua respectiv,
eventual clasamentul pn n momentul curent;
g) Clasamentul final pe judee, pe grupe de vrst;
h) Perlele, evenimentele deosebite, comentariile prietenilor.

Capitolul 15 Comunicarea aplicaiei Visual FoxPro cu alte aplicai

171

RECAPITULARE
Prelucrarea procedural a datelor n FoxPro i SQL
SINTEZE. Limbajul de programare FoxPro i
Limbajul de comenzi SQL
Definirea structurilor de control

IF ... ENDIF
DO WHILE....ENDDO
SCAN....ENDSCAN
FOR ..ENDFOR
DO CASE....ENDCASE

Definirea procedurilor i a
funciilor utilizator

PROCEDURE..ENDPROC
FUNCTION...ENDFUNC.
RETURN
PUBLIC / PRIVATE/LOCAL
PARAMETERS
SET UDFPARMS
SELECT...FROM...TOFILE / INTO...
...WHILE...GROUP BY [HAVING]..

Comunicarea ntre unitile


funcionale
Definirea unei interogri
Definirea unei tabele

Utilizarea bazei de date

Utilizarea tabelelor ntr-o baz


de date

CREATE TABLE (<structura>)...


CHECK..FOREIGN KEY..TAG..
REFERENCES...[TAG..]
CREATE / DISPLAY DATABASE
OPEN/ CLOSE/ DELETE DATABASE
SET DATABASE TO
ADD/ REMOVE/ DISPLAY TABLES

Proceduri stocate

MODIFY/APPEND/DISPLAY PROCEDURE
COPY PROCEDURE TO..

Declanatoare

CREATE/DELETE TRIGGER ON ..
...FOR ....DELETE/INSERT/UODATE

Actualizare (sql)

UPDATE SET...WHERE...
INSERT...INTO...VALUE...
DELETE FROM...WHERE...

Modificarea structurii

ALTER TABLE

1. Care este diferena ntre limbajul FoxPro i SQL?


2. Ce alte limbaje relaionale mai exist?
3. Cum se asigur comunicarea datelor ntre unitile funcionale ale unui program?
Ce sunt variabilele publice?
4. Ce moduri de transmisie a parametrilor cunoatei? Cum se transmit parametrii tip referin?
5. Ce este o interogare? Cum se pot pot proiecta interogri de totalizare la nivelul unui
grup? Dai exemple de funcii agregat!
172

Informatic Manual pentru clasa a XII-a

Testul 1

Structuri de control

O staie central de pompare trebuie s alimenteze cu ap nite beneficiari, notai


cu x1, x2,..., xN. Costurile de construcie a conductei de ap ntre beneficiarul xI i
beneficiarul xJ se cunosc i se dau prin triplete de felul (i,j,k) unde i=codul beneficiarului i,
j=codul beneficiarului j, k=costul lucrrii de la beneficiarul i la beneficiarul j.
S se determine schema construciei reelei de alimentare care s conduc la un
cost total de realizare minim.
Indicaie:
Problema poate fi rezolvat prin algoritmul lui Kruskall pentru APM, cunoscut din
leciile de programare din clasa a XI-a.
Punctaj:
1. Crearea structurilor de memorare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1p
Se cere ca programul s nu distrug eventualele date existente; dac
tabela cu toate costurile ntre beneficiari exist, ea trebuie doar deschis,
nu creat. Tabela care va reine ponderile asociate nodurilor este
temporar i va fi creat de program.
2. Popularea tabelei cu date (costurile lucrrilor) . . . . . . . . . . . . . . . . . . . . .1p
Se cere ca operaia de introducere a informaiilor s fie continuat sau
abandonat n funcie de opiunea operatorului, chiar de la nceputul
secvenei de citire.
3. Determinarea numrului de beneficiari (noduri) . . . . . . . . . . . . . . . . . . . .1p
4. ncrcarea cu date a tabelei ponderi . . . . . . . . . . . . . . . . . . . . . . . . . . . .1p
5. Ordonarea datelor n funcie de costuri . . . . . . . . . . . . . . . . . . . . . . . . . .1p
6. Algoritmul Kruskall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1p
7. Determinarea sumei costurilor pentru soluia dat . . . . . . . . . . . . . . . . .1p
8. Afiarea soluiei (drumul i suma total minim) . . . . . . . . . . . . . . . . . . .1p
Se cere afiarea datelor sub forma unui tabel cu titlu, cap-tabel,
coninutul pe coloane separate de un caracter (*), o linie care s
marcheze terminarea tabelului.
9. Aspect, comentarii, indentarea structurilor . . . . . . . . . . . . . . . . . . . . . . . .1p
10. Oficiu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1p

Testul 2

Prelucrarea tablourilor i actualizarea datelor

Fie o baz de date necesar evidenei unitilor de cazare i turitilor, cu urmtoarele tabele:
UNITATI(cod N(5), nume C(15), fel C(1), categorie N(2),agentie C(15)) pentru
reinerea unitilor de cazare. Numele unitii va fi dat cu numele staiunii pe primele
poziii apoi numele unitii; separator este caracterul /.
Atributul Fel conine o liter: H pentru hotel; M pentru motel etc.
CAMERE(cod_unit N(4), cod_cam N(3), nr_pat N(1), are_tel L, are_tv L, pret N(5),
este_ocup L) pentru informaiile despre camere.
OCUPARE(cod_unit N(4), cod_cam N(3), data_s D, data_p D, nume_pers C(15),
b_i C(10)) pentru informaii despre turiti.

Recapitulare

173

Cerine:
1) tiind c o nou unitate de cazare Y are exact aceleai caracteristici cu hotelul
Alfa din Sinaia, s se adauge informaiile despre noua unitate n baza de date.
(Are aceleai camere, confort etc., dar camerele sunt iniial neocupate!)
2) Trecei toate unitile de cazare din Sinaia n alt fiier, cu structura
CAZARE.DBF(cu N(3), sta C(10), nu C(10, fel N(1), cat N(1), ag C(10)), unde
cu=codul unitii; sta=numele staiunii; nu=numele unitii; fel=tipul unitii
(astfel:1=Hotel, 2=Motel, 3=Vila, 4=Csua); cat=categoria, ag=agenia de turism
3) Modificai codul unei uniti de cazare.
4) Pentru toate unitile de cazare din staiunea X, aflai numrul de camere neocupate.
5) Afiai numrul de camere libere pe uniti, sub forma:
Nume-staiune...unitate...fel...nr-camere...
Not: Se acord cte dou puncte pentru fiecare sarcin, cu excepia sarcinii 3 notat cu un punct;
se acord un punct din oficiu.

Testul 3

Operaii in SQL

Se ine evidena vnzrilor mai multor magazine ale aceleiai societi comerciale
SC INTIM SRL ntr-o baz de date cu tabelele MAGAZINE (cod-magazin, nume,
adresa), PRODUSE (cod-produs, nume-produs, unitate de msur, pre unitar), RAIOANE
(cod-raion, nume), VINZARI (dat, cod-magazin, cod-raion, cod-produs, um, cantitate).
Cerine:
A. S se proiecteze baza de date i tabelele prin comenzi SQL.
B. S se scrie comenzile pentru inserarea unei nregistrri noi n fiecare tabel.
C. S se tearg din tabela VANZARI toate articolele care au data vnzrii nainte
de 1 ianuarie anul curent.
D. Magazinul care are numele "Metro-golden" s-a mutat n "str. Iancului, nr. 456".
Facei modificarea corespunzatoare prin comenzi SQL
E. S se afle prin comenzi SELECT:
- cantitatea total de hrtie vndut azi;
- numrul total de raioane distincte;
- valoarea total a vnzrilor pe magazine;
- care sunt primele 3 magazine fruntae (au vndut cele mai multe produse cantitativ!).
Punctaj:
A. 2p; B., C., D, cte 1 p; E. 4p i 1 p din oficiu.

174

Informatic Manual pentru clasa a XII-a

Capitolul

16

Elemente de programare
orientat spre obiecte
 Obiecte, proprieti, evenimente, metode
 Comenzi necesare programrii obiectuale n Visual FoxPro

Un obiect este un lucru (o fereastr, un buton radio, un comutator etc.) cruia i


putem defini proprietile, evenimentele care pot s acioneze asupra lui i metodele
ca operaii asociate sau ca aciuni de rspuns la evenimentele care apar.
S ne amintim cteva obiecte ale interfeei Windows. Principalul element de
interfa este fereastra, care poate conine alte obiecte: comutatoare, liste, butoane de
comand etc.
O proprietate definete una dintre caracteristicile obiectului ca aspect sau
comportament. De exemplu, o fereastr poate fi caracterizat prin: titlu, distana n
pixeli fa de marginea din stnga a ecranului, distana fa de marginea superioar a
ecranului, nlimea, starea vizibil sau ascuns etc.
Un eveniment este o activitate specific i predeterminat, iniiat de sistemul de
operare (eveniment intern) sau de utilizator (eveniment extern), la care un obiect tie
s reacioneze. De exemplu un eveniment extern ar fi un clic cu mouse-ul, micarea
mouse-ului, apsarea unei taste.
Metodele sunt proceduri asociate unui obiect. Deosebirea dintre metode i
evenimente este c primele pot exista i pot fi apelate indiferent de apariia
evenimentelor. Evenimentele, de asemenea, pot avea asociate anumite proceduri,
aciuni care vor fi executate ori de cte ori se produce evenimentul respectiv. Metodele
sunt asociate i legate cu obiectele crora le aparin. De exemplu, o metod asociat
selectrii ferestrei poate s-i schimbe culoarea de fond, poziia etc.
Obiectele difer ntre ele prin proprieti. Dou declanatoare pot avea dimensiuni
diferite, poziii diferite pe ecran, alt text explicativ etc., dar se comport similar (rspund
la aceleai evenimente prin aceleai aciuni). Spunem c aparin aceleiai clase.
O clas este definit prin mulimea obiectelor care au n comun aceleai proprieti
i acelai comportament. Prin definirea unei clase specificm modul n care dorim s
se comporte i s arate toate obiectele care i aparin.
n limbajul Visual FoxPro au fost deja implementate numeroase clase de baz
predefinite, pe baza crora putem crea obiecte ca instane ale acestor clase i,
desigur, clase derivate. De exemplu, clasele uzuale pentru obiectele de interfa
cunoscute sunt: Form (pentru formulare sau video-formate); CheckBox (pentru casete
de validare sau comutatoare); CommandButton (pentru butoane de comand sau
declanatoare); Listbox (pentru liste).

Capitolul 16 Elemente de programare orientat pe obiecte

175

Pagini sau
tab-uri

Comutatoare=
CheckBox

Zone de
editare

Butoane radio

Liste combinate

Declanatoare

Figura 16-1: Obiecte de interfa cunoscute

Clasele pot fi mprite n clase container i clase controller. O clas container


poate gzdui alte obiecte aparinnd clasei controller sau chiar containere. De
exemplu, un formular poate conine zone de editare, ca obiecte din clasa controller, dar
i grupuri de butoane (clasa CommandGroup, o alt clas container). Butoanele radio
fac parte tot dintr-o clas container: OptionGroup.
Unele clase sunt non-vizuale, adic obiectele care le aparin nu sunt vizibile pe
ecran, ci au diferite utilizri, cum ar fi: calculul unor valori, stabilirea momentului de timp
pentru a efectua o anumit aciune etc. De exemplu, clasa Timer cronometreaz
anumite aciuni i lanseaz altele n funcie de momente precizate de timp.
Obiectele vizuale pot fi:
1. de tip container care conin alte obiecte; de exemplu un formular;
2. de tip controller care nu pot fi prini; de exemplu un comutator.
n Visual FoxPro sunt definite 4 clase de baz de tip container: CommandGroup,
Grid, OptionGroup i PageFrame.
n plus fa de clasele de baz, mai exist containere care pot fi coninute numai n
alte containere (nu pot exista independent), cum ar fi: Column (coloanele unui Grid
conin fiecare cte un Header i un control de afiare a datelor, dar nu pot exista n
afara grilei care le conine), Page (pagina unui PageSet, care nu poate exista n afara
containerului printe i poate conine alte obiecte).

176

Informatic Manual pentru clasa a XII-a

Proprietile definitorii ale claselor


ncapsulare n definiia unei clase sunt incluse i proprietile i metodele (vezi
comanda DEFINE CLASS).
Derivare este permis crearea unor subclase sau clase derivate, care vor
avea ntreaga funcionalitate a clasei printe, plus alte noi specificaii.
Motenire proprietile clasei de baz nu vor mai trebui s fie definite n clasa
derivat. Aici se memoreaz doar proprietile i metodele noi. Orice schimbare
a caracteristicilor clasei de baz este reflectat automat i n clasa derivat.
Datorit acestor caracteristici ale claselor se pot defini ierarhii de clase care se
memoreaz n fiiere biblioteci de clase. Clasele pot fi introduse, terse sau
modificate ntr-o bibliotec. nainte de utilizarea unei clase existente ntr-o biblotec,
este necesar deschiderea bibliotecii.
Vom explicita aceste concepte prin formatele generale ale comenzilor i funciilor
uzuale de lucru cu obiecte, cu atenionarea c FoxPro pune la dispoziie utilitare rapide
pentru construirea i dezvoltarea claselor (de tip Designer, Wizard) pe care le vom
prezenta n leciile urmtoare. Deocamdat, vom prezenta comenzile FoxPro pentru
definirea i utilizarea claselor i obiectelor.

Comenzile FoxPro necesare programrii obiectelor


1. Definirea unei clase se face prin comanda:
DEFINE CLASS <clasa> AS <parinte> [PROTECTED<lista de
proprietati>] [<nume-proprietate>=<expresie>...]
[ADD OBJECT [PROTECTED] <nume-obiect> AS
<clasa>[WITH <lista-proprietati>]]
[PROCEDURE <nume-procedura><comenzi>ENDPROC]
ENDDEFINE
Comanda permite crearea unei subclase <nume-clasa> din clasa printe
precizat n clauza AS. Proprietile noi ale clasei pot fi protejate prevenind accesul
i schimbarea lor din exterior (clauza PROTECTED). Se pot atribui valori proprietilor
prin construcii de forma: <nume-proprietate>=<expresie>.

Exemple
Exemplul 1: Definirea unei subclase cu
numele Fer1 cu caracteristicile clasei
printe.
DEFINE CLASS fer1 AS FORM
ENDDEFINE

Exemplul 2: O clas pentru cri de


vizit non-vizual.
DEFINE CLASS carti AS CUSTOM
Nume=Popescu
Ocupatie=artist
Adresa=Iasi
ENDDEFINE

Capitolul 16 Elemente de programare orientat pe obiecte

177

Exemplul 3: Subclasa fer2 are alte proprieti: poziie pe ecran, alte dimensiuni, fond
galben, text rou1.
DEFINE CLASS fer2 AS Form
Top=2
Left=10
Hight=10
Width=80
BackColor=RGB(255,255,0)
ForeColor=RGB(128,0,0)
ENDDEFINE
O definiie de subclas poate s conin obiecte ale altor clase. Ele sunt specificate
prin clauza ADD OBJECT. Clauza PROTECTED previne accesul la modificri exterioare
ale acestor obiecte. Clauza WITH d proprietile obiectelor adugate.
Exemplul 4: Adugarea unui obiect de tip buton declanator la o clas container derivat
(Fer2). Noua clas va moteni textul rou, poziia (Top=2, Left=10) i dimensiunile
(10X80) dar va avea fondul alb.
DEFINE CLASS Fer4 AS fer2
Backcolor=RGB(0,0,0)
ADD OBJECT X As CommandButton
WITH Caption=More>>, Top=0, Left=0, Height=4, Widht=12
ENDDEFINE
Pentru subclasa definit se pot specifica evenimentele i metodele ca set de funcii
utilizator sau proceduri.
Evenimentele sunt apelate prin: <nume-obiect>.<eveniment>, iar metodele prin
construcia: <nume-obiect>.<metoda>.
Referinele relative se exprim prin:
Parent
&& Primul container al obiectului curent
This
&& Obiectul curent
ThisForm
&& Formularul care conine obiectul curent
Exemplul 5. Definim o clas de butoane (declanatori) care au scris textul More>> i
care s coboare cu 40 de pixeli la selectare.
DEFINE CLASS buton1 AS CommandButton
Caption=More>>
PROCEDURE CLICK
Buton1.TOP=50
&&sau This.TOP=50
ENDPROC
ENDDEFINE

178

Culorile se definesc indicnd cantitatea de Albastru, Galben, Rosu ca valori numerice.


Exemplu: RGB(0,0,0)-alb, RGB(255,255,255)-negru, RGB(127,0,0)-galben
Informatic Manual pentru clasa a XII-a

Exemplul 6. Definim o fereastr care afieaz un mesaj cnd se execut clic. Clasa
de baz este Form. Observai motenirea proprietilor clasei de baz. Definim doar
aciunea la evenimentul clic.
DEFINE CLASS fer_mesaj AS Form
Procedure click
=Messagebox(in fereastra s-a apasat mouse-ul)
endproc
ENDDEFINE

2. Crearea unui obiect (instaniere) se face prin comanda de apel a funciei


CREATEOBJECT, care ntoarce o referin ctre obiectul creat:
<nume-obiect> = CREATEOBJECT(<nume-clasa>)

3. Afiarea listei complete a obiectelor active, a proprietilor i valorilor


acestora:
DISPLAY OBJECT

4. Eliberarea obiectelor se face prin tergerea variabilelor asociate:


RELEASE <nume-obiecte>

5. Comanda de activare a procesorului de evenimente:


READ EVENTS

6. Comanda de oprire a procesorului de evenimente:


CLEAR EVENTS
Exemplul 7. Definim o instan a ferestrei Fer1 pe care o afim:
F1=CREATEOBJECT(fer1)
F1.SHOW
&& observai metoda SHOW de afiare obiect
Exemplul 8. Afiarea proprietilor obiectului
? F1.Top
&& obiectul F1 este o fereastr
? F1.Left
&& afim poziia colului dreapta
Exemplul 9. Modificm unele proprieti odat cu instanierea:
F2=CREATEOBJECT(fer1)
f2.Caption=alta fereastra
f2.Show
Exemplul 10. ncapsulm obiecte odat cu definirea unei instane a clasei container.
Observai metoda ADDOBJECT asociat clasei container Form; ea se apeleaz cu
<obiect>.ADDOBJECT (<nume-obiect>,<nume-clasa>)
F3=CREATEOBJECT(Form)
&& clasa Form este container
F3.Show
&& metoda afiare
F3.Caption=fereastra cu buton && proprietatea nume-fereastra
F3.ADDOBJECT(B1,CommandButtton)
&& metoda ADDOBJECT
F3.B1.Visible=.T.
&& proprietatea de vizibilitate
F3.B1.Caption=Exit
&& proprietatea nume-buton
Capitolul 16 Elemente de programare orientat pe obiecte

179

Exemplul 11. Crearea unor obiecte non-vizuale: n legtur cu o aplicaie de


gestiune a vnzrilor, definim o clas denumit Produs, care conine atributele cod,
nume, cant, pret i valoare. Atributul valoare se calculeaz printr-o procedur.
Instana cu numele Birou atribuie valori atributelor i afieaz obiectul.
Birou=CREATEOBJECT(Produse)
Birou.Cod=1234
Birou.Nume= Birou Student
Birou.Cant=125
Birou.Pret=1400000
Birou.Calcul_Valoare
DISPLAY OBJECT Birou
&& afiare obiect
DEFINE CLASS Produse AS CUSTOM Store to cod, nume
Store 0 to Cant, Pret,Valoare
PROCEDURE Calcul_Valoare
THIS.Valoare=THIS.Pret * THIS.Cant
ENDPROC
ENDDEFINE

sarcini de laborator
I.
1. Creai o clas cu numele Fereastra pentru orice fereastr cu fundal galben, cu
proprietile de a putea fi redimensionat, minimizat, maximizat, mutat,
nchis prin butoanele corespunztoare. Fixai i dimensiunile.
2. Creai dou obiecte ale clasei Fereastr: un obiect va moteni culoarea, dar va
avea alte dimensiuni, cellalt va moteni dimensiunile, dar va avea ca fundal o
imagine. Numii-le Fer1, fer2.
3. Creai un buton de comand care s se numeasc fereastra 1 i care s
afieze prima fereastr la evenimentul clic.
4. Creai un buton de comand care s se numeasc fereastra 2, care s afieze
a doua fereastr la evenimentul dublu clic.
5. Plasai cele dou butoane de comand pe o fereastr cu numele fer3.
II.

Ce realizeaz construciile urmtoare?


a) Thisform.release
b) Thisform.refresh
c) Thisform.name=frmelevi
d) Thisform.txtnume.caption=oprescu
e) This.value=5
f) This.visible=.t.

180

Informatic Manual pentru clasa a XII-a

Capitolul

17

Proiectarea formularelor





Formulare, machete ecran sau video-formate


Form Designer: componente, mod de utilizare
Proiectarea obiectelor de control
Proiectarea formularelor folosind Form Wizard

Formularul ca element de interfa cuprinde una sau mai multe ferestre, pe care
sunt plasate informaii. Formularele pot fi folosite pentru prezentarea aplicaiei sau
drept panou de bord, avnd butoane care deschid ferestrele specifice anumitor sarcini
ale aplicaiei. Cel mai adesea formularele sunt folosite pentru vizualizarea i editarea
datelor din tabelele unei baze de date.
Principalele informaii ce trebuie avute n vedere la formatarea ecranului pentru
actualizarea datelor pot fi grupate1 astfel:
1. informaii pentru explicarea semnificaiei cmpurilor din baza de date;
2. cmpurile din baza de date sau variabilele de memorie;
3. mesaje de eroare, date eronate, texte explicative privind corectarea lor;
4. liste de valori posibile care se pot atribui variabilelor;
5. opiuni utilizator pentru prelucrarea datelor;
6. informaii statistice, informaii de ntreinere i de ghidare a operatorului pe
durata sesiunii de lucru;
7. informaii interogative i rspunsuri posibile privind continuarea operaiilor sau
renunarea la acestea.
Observai formularul din
figura 17-1, realizat cu Form
Wizard n FoxPro. Este o
fereastr care are proprietile de a putea fi micorat,
mrit sau nchis prin butoanele situate pe bara de
titlu a ferestrei. De asemenea,
se poate fixa i titlul ferestrei.
Pe fereastr sunt plasate
diferite obiecte de control,
care permit vizualizarea datelor
i editarea lor. Proiectarea
formularelor se poate face
scriind cod (n modul tradiional sau n modul orientat
spre obiecte) sau n mod
vizual, prin Form Designer i Figura 17-1: Exemplu de formular
Form Wizard.

Dup I. Lungu, Foxpro pag. 311.


Capitolul 17 Proiectarea formularelor

181

Generatorul de formulare (Form Designer)


Visual FoxPro ofer mai multe posibiliti pentru crearea formularelor: Form Designer,
Form Buider, Form Wizard.
Form Wizard este apelat selectnd Tools, Wizard i permite generarea unui
program de introducere pe baza unei machete construite automat din informaiile date
de operator.
Form Builder permite, de asemenea, o proiectare rapid, dar pe baza opiunii
Quick Form din meniul Form. Form Designer este folosit pentru aplicaii mai
complicate, unde cele dou instrumente nu fac fa.
Form Designer este constructorul de formulare care permite proiectarea interactiv
a unui formular (pas cu pas) de ctre utilizator. Deschide o fereastr de proiectare pe
care se pot plasa obiectele de control necesare.
Apelarea utilitarului Form Designer se face selectnd File, New, Form sau prin
comanda
CREATE FORM <fis.Scx>
Dup proiectarea sa, un formular este memorat ntr-un fiier cu extensia .scx care
poate fi deschis cu USE i vizualizat cu BROWSE.
Lansarea formularului se face prin comanda:
DO FORM <fis.scx> [WITH <param-intr>][TO <param-ies>]
Comunicarea formularului cu programul apelant se poate face prin parametri.
Parametrii de intrare se pun n clauza With iar parametrul de ieire (atenie, este unul
singur, o variabil) n clauza TO a comenzii DO.
Dac se folosesc parametri, macheta trebuie definit cu proprietatea WindowType=1
i trebuie s aib metoda Init cu instruciunea Parameters <lista-var> pentru
intrri. Returnarea unui rezultat se face prin comanda Return <exp> pus n metoda
Unload.

Do form fis.scx with p_intr to p_ies

x.scx
procedure init
parameters intr
.
Procedure unload
Return ies

Mediul de lucru
Cuprinde o fereastr de proiectare pe care vor fi dispuse obiectele de control
necesare, fereastra de proprieti, ferestre de dialog, meniuri i bare cu butoane.

182

Informatic Manual pentru clasa a XII-a

Bara de instrumente Form Designer

Apel Form Builder

Apel autoformat

Figura 17-2: Bara de instrumente Form Designer

Fereastra Properties
Caracteristicile fiecrui obiect plasat pe formular pot fi
observate n fereastra Properties, o fereastr comun
tuturor obiectelor. Aceasta permite att vizualizarea
proprietilor, ct i introducerea codului pentru metode i
evenimente. Se poate deshide selectnd View, Properties
din meniul contextual asociat ferestrei Form Design sau
cel asociat obiectului pe care dorim s-l editm.
Fereastra Properties afieaz pe prima linie numele
obiectului curent, ale crui proprieti sunt afiate.
Deschiznd lista putem s observm ierarhia obiectelor
din formularul curent.
Fereastra are mai multe tab-uri (All, Data, Method, Figura 17-3: Fereastra
Layout, Other) i o zon de afiare cu dou coloane: Properties
prima pentru numele caracteristicii, iar a doua pentru
valoarea sa. Iat pe scurt coninutul tab-urilor: ALL afieaz toate proprietile, Data
afieaz proprietile legate de date, Method afieaz metodele, Layout afieaz
proprieti legate de aspect (culoare, font etc.), Other afieaz alte proprieti.

Capitolul 17 Proiectarea formularelor

183

Meniul Form

Adugarea de noi proprieti


Adugarea de noi metode
Modificarea proprietilor/metodelor
Includerea unui fiier
Crearea seturilor de formulare
tegerea seturilor de formulare
Adugarea unui nou formular
tergerea unui formular
Proiectare rapid
Execuia formularului

Figura 17-4: Meniul Form

Obiectul Data Environment


Utilitarul Form Designer, ca i alte utilitare, permite n timpul activitii de proiectare
deschiderea tabelelelor, specificarea indecilor i a legturilor. Aceste informaii sunt
depuse n obiectul Data Environment fr ca utilizatorul s aib cunotin de acest
lucru. La lansarea formularului, ntreaga activitate de deschidere a tabelelor i de
restabilire a legturilor este realizat automat.
nchiderea formularului nseamn i nchiderea
tabelelor folosite.
Deci nu trebuie scris nici o comand de
deschidere sau nchidere! Dac, totui, dorim
acest lucru, metoda Load este potrivit pentru
comenzile de deschidere, iar metoda Unload
pentru cele de nchidere.
Putem deschide ecranul obiectului Data
Environment prin meniul contextual ataat
formularului (clic dreapta oriunde pe fereastra
de proiectare), prin meniul Form sau prin bara
de instrumente Form Designer.
Figura 17-5: Obiectul Data Environment
Pentru deschiderea fiierelor necesare
proiectului este folosit meniul contextual al
obiectului (clic dreapta pe obiectul Data Environment, apoi selectm Add). Pentru
tergerea unei tabele folosim Remove, iar pentru vizualizarea coninutului, Browse.
Adugarea unei noi tabele presupune i specificarea legturilor. Dac tabele fac parte
dintr-o baz de date, utilitarul Form Designer folosete legtura permanent existent.
Putem pstra aceast legtur, o putem schimba sau putem plasa una nou.

184

Informatic Manual pentru clasa a XII-a

Meniul View
Schimbarea ordinii obiectelor de pe formular
Deschiderea ferestrei pentru mediul de date
Deschiderea ferestrei Properties
Deschiderea ferestrelor de proceduri
Afiarea barei de instrumente Form Controls
Afiarea barei de instrumente Layout
Afiarea barei de instrumente Color Palette
Afiarea/ascunderea liniilor de gril
Vizualizarea poziiei obiectului n proiectare
Alegerea barelor de instrumente ce vor fi afiate

Figura 17-6: Meniul View

Proprieti i metode specifice unui formular


 WindowType specific modul de rulare a unui formular. Valoarea zero specific
un formular normal, care poate preda controlul altor ferestre deschise simultan pe
ecran; valoarea 1 arat un formular modal, care nu permite trecerea controlului la
alt formular. Forma modal trebuie s fie folosit atunci cnd, de exemplu, exist
un program care transmite un parametru formularului, l deschide i ateapt un
rspuns la terminarea lucrului cu acesta. Comunicarea programului cu formularul
se face prin parametri, dar numai dac fereastra este de tip modal.
 Closable, Movable, MaxButton, MinButton, ControlBox pe valoarea .T. dau
ferestrei proprietile de a putea fi nchis, mutat, de a avea butoanele de
maximizare, minimizare i meniul standard n colul din stnga sus.
 Load este o metod apelat imediat dup crearea formularului i poate conine
comenzi de deschidere a unor tabele sau de iniializare a unor variabile.
 Init este o metod apelat la crearea formularului (la rulare). Ea este cea care
preia parametrii de rulare ai formularului, trimii de ctre programul apelant.
Prima linie a acestei proceduri conine comanda Parameters.
 Destroy este o metod apelat la eliminarea formularului de pe ecran.
 Unload este o metod apelat la distrugerea obiectului din memorie; este
ultima metod.

Obiectele de control sau de interfa


Obiectele de control pe care le poate conine un formular pot fi specificate prin bara
de instrumente Form controls.
Dintre butoanele pe care le vom folosi n leciile urmtoare pentru proiectarea
obiectelor de control, le explicm pe ultimele dou:
BuilderLock comut n modul de generare, apelnd sau ieind din utilitarul
Builder. Putem proiecta manual fiecare obiect de control, plasndu-l pe
suprafaa de lucru, conturnd dimensiunea i setndu-i proprietile n fereastra
Properties. O alt modalitate este s folosim un asistent numit Builder, care
Capitolul 17 Proiectarea formularelor

185

Select Object
Label
Editbox
CommandGroup
CheckBox
List
Grid
Timer
OLE Container Control
Line
Container
HyperLink
BuilderLock

View classes
TextBox
CommandButton
OptionButton
ComboBox
Spinner
Image
PageFrame
OLEBound Control
Chenare, cercuri, elipse
Separator
ButtonLock

Figura 17-7: Bara de instrumente Form Controls

prezint ecrane de dialog pentru construirea rapid a obiectului. (Nu este posibil
chiar pentru toate obiectele, dar pentru majoritatea se poate i vom prezenta
modalitatea de lucru n temele urmtoare.)
ButtonLock permite adugarea de instane multiple ale aceluiai obiect.
Manevra obinuit pentru crearea unui obiect este selectarea butonului
corespunztor de pe bara de instrumente FormControls, apoi tragere i plasare
pe suprafaa de lucru. Dac dorim plasarea aceluiai obiect, se poate folosi
ButtonLock. Selectai-l, apoi selectai obiectul dorit (un CheckBox, de exemplu).
Executai tragere i plasare pentru o instan, clic pentru a doua etc.

Operaii generale cu obiectele de control


 Selectarea obiectului se face prin clic pe suprafaa obiectului.
 Selectarea mai multor obiecte se face prin butonul de selectare de pe bara de
instrumente, apoi tragere i plasare pe suprafaa tuturor obiectelor pe care dorim
s le selectm.
 Mutarea obiectului (sau a grupului) se face prin tragere i plasare n noua poziie
sau prin Clipboard, cu operaiile Cut, apoi Edit, Paste.
 Redimensionarea unui obiect selectat se face prin poziionarea cursorului pe o
margine a obiectului pn apare sgeata dubl, apoi tragere i plasare pn la
dimensiunile dorite.
 Copierea unui obiect se realizeaz prin intermediul Clipboard-ului, prin operaiile
Copy, apoi Edit, Paste. n mod implicit, copia are aceleai proprieti i metode
ca i originalul.

186

Informatic Manual pentru clasa a XII-a

 tergerea unui obiect selectat se face apsnd tasta Delete.


 Aranjarea obiectelor pe formular se face dup dorina utilizatorului. Pentru
aranjarea mai uoar, suprafaa formularului este mprit n ptrate (care pot fi
ascunse prin debifarea opiunii Grid lines din Forms, Options).
 Stabilirea ordinii obiectelor se face cu Tab Order. n mod implicit, ordinea de
parcurgere a obiectelor este ordinea crerii lor. Dup apsarea butonului Tab
Order, fiecare obiect va avea ataat un numr; schimbarea acestuia se face prin
clic pe obiecte n ordinea dorit.
 Schimbarea fontului i a culorii se face pentru obiectele care afieaz text prin
proprietile FontName i FontSize.
 De asemenea, se pot seta caracteristicile de ngroare (FontBold), nclinare
(FontItalic), subliniere (FontUnderline).
 Pentru culoarea textului este folosit proprietatea ForeColor, iar pentru
specificarea culorii pe care o va avea obiectul atunci cnd va fi inactiv se
folosete proprietatea DisabledForeColor.

Proprieti i metode generale ale obiectelor de interfa


 Name specific numele obiectului;
 Top, Left, Width, Height specific poziia i dimensiunea;
 Caption d titlul obiectului;
 AutoCenter stabilete plasarea automat n centrul ecranului;
 Show stabilete afiarea sa pe ecran;
 Hide stabilete ascunderea obiectului;
 Activate (metod) stabilete activarea obiectului la poziionarea cursorului pe
obiect;
 Deactivate (metod) stabilete cnd se pred controlul aupra altui obiect;
 GotFocus stabilete evenimentul prin care obiectul primete controlul, devine
activ;
 LostFocus este evenimentul de pierdere a controlului de ctre obiect;
 SetFocus este evenimentul de fixare a controlului pe obiect.

Proiectarea unui formular prin Quick Form


Un formular simplu pe care l putem apoi folosi i/sau dezvolta poate fi creat rapid
n Visual FoxPro. Este folosit utilitarul Form Designer, care poate fi lansat prin File,
New, Form, iar din meniul Form se alege Quick Form. S urmrim modul de lucru prin
rezolvarea unei probleme.

Capitolul 17 Proiectarea formularelor

187

Exemple
Tema 1. Proiectarea rapid a unui formular prin Quick Form
Problema
Fiierul Elevi conine cmpurile nume C(10), media N(5,2), clasa C(3). S se
realizeze un formular care permite adugarea unui nou elev.

Figura 17-8: Formularul pe care dorim s-l crem

Pasul 1) Deschidem fiierul Elevi;


Pasul 2) Lansm generatorul de formulare prin CREATE FORM sau prin File, New,
Form, New File (vom lansa utilitarul Form Wizard ntr-o lecie viitoare);
Pasul 3) Alegem opiunea Quick Form din meniul Form. Se deschide fereastra
Form Builder, care are 2 tab-uri:
1. Field selection permite
selectarea tabelei i a
cmpurilor care se vor citi.
2. Style permite fixarea
stilului de formular, la fel
ca la Form Wizard.
Figura 17-9: Fereastra Form Builder

Pasul 4) Selectm toate cmpurile, fixm aranjarea pe coloane i ieim din Form
Builder. Vom deplasa cu mouse-ul obiectele, astfel nct numele cmpului
s se afle deasupra zonei de editare.
Pasul 5) Pentru c formularul este folosit la adugarea unui singur elev, plasm
comanda APPEND BLANK n metoda INIT a formularului.
n fereastra Properties, ne poziionm pe prima linie la nivelul obiectului
Form1 (observai numele atribuit obiectelor de ctre generator!), iar n tab-ul
Method alegem Init. Se deschide fereastra de coduri i scriem comanda
Append Blank.
Pasul 6) Lansm n execuie, de prob, prin butonul Run:
.
Pasul 7) Introducem date i deschidem fereastra Browse pentru verificare.
Pasul 8) Salvm.

188

Informatic Manual pentru clasa a XII-a

n concluzie: Cum se lucreaz cu un formular ?


1.
2.
3.
4.
5.

Prima etap este apelarea utilitarului de proiectare.


Definim proprietile i metodele formularului.
Deschidem baza de date.
Includem obiectele de control i realizm un prototip al formularului.
Legm aceste obiecte cu cmpurile din baza de date sau variabilele unde vor fi
citite/editate valorile.
6. Verificm funcionarea formularului prin butonul sau comanda Run.
7. Putem reveni n proiectare prin clic pe butonul Modify.
8. Salvm prin File, Save.
9. Lansm n execuie prin comanda Do Form.
10.Formularul poate primi valori din exterior (ca parametri de intrare) i/sau poate
comunica valori obinute prin aciunea operatorului (ca parametri de ieire).

sarcini de laborator
Exerciii cu Quick Form i primele manevre cu un formular:
1. Proiectai un formular de culegere a datelor, utiliznd opiunea Quick Form
pentru fiierul ELEVI. Aranjai cmpurile pe linii.
2. Vizualizai caracteristicile tuturor obiectelor din formular i rspundei la ntrebrile:
a) Ce valoare s-a atribuit proprietii ControlSource la nivelul formularului? Dar
pentru primul cmp Nume?
b) Care este culoarea de fundal a formularului? Putei s o schimbai cu galben?
Cum sunt codificate culorile?
3. Fixai posibilitatea de adugare a unui nou articol dac trecei (cu bine) de ultimul cmp!
4. Ce manevr trebuie s facei pentru a mri tabela ELEVI prin adugarea unui
ultim articol vid la ieirea din formular?
5. Scriei programul care apeleaz formularul de culegere. Schimbai dimensiunea
formularului, centrai-l!
6. Ce manevr trebuie s facei pentru a terge din tabel ultimul articol vid,
adugat fictiv la ieirea din formular?
7. nchidei fiierul Elevi n fereastra de comenzi i executai o machet anterior
definit, prin comanda DO FORM. Ce se observ? Aveam fiierul Elevi nchis, i
totui formularul permite citirea cmpurilor. De ce?
8. Introducei valori i nchidei formularul prin clic pe butonul de nchidere.
9. ncercai s vedei efectul n Browse. Ce se observ? Fiierul Elevi este nchis
sau deschis? Cum v explicai?
10.Schimbai culoarea de fundal a formularului n albastru deschis. Punei bordur
roie. Aranjai formularul n centrul ecranului.
11.ncercai s vedei coninutul fiierului ELEVI dup fiecare rulare a programului
sau chiar n momentul ncrcrii formularului.
12.Construii formulare de culegere a datelor pentru tabelele bazei de date DESFACERE.
Capitolul 17 Proiectarea formularelor

189

Proiectarea vizual a obiectelor de interfa


Obiectele de control sunt aezate pe suprafaa de lucru a formularului, ordinea lor
de activare fiind cea de la creare. Se poate schimba ordinea la proiectare selectnd
View, Tab Order sau prin clic pe butonul Tab Order de pe bara de butoane Form
Designer. Cnd se deschide formularul, inta este fixat, implicit, pe primul obiect.
Trecerea de la un obiect la altul se face prin tasta Tab sau cu mouse-ul.

a) Mesaje. Obiecte Label


Obiectul de tip mesaj se proiecteaz prin butonul Label
. Proprietile uzuale, ca
Top, Left, Width, Height se stabilesc automat la plasarea obiectului i aranjarea sa n
fereastr. Textul explicativ este valoarea proprietii Caption. Alinierea textului n
cadrul obiectului se face prin proprietatea alignment, care poate lua valorile: 0=la
stnga (implicit), 1=la dreapta, 2=centrat. Pentru text sunt utile proprietile:
FontName, FontSize, FontBold, FontItalic, FontUnderline etc. Culoarea cernelii
este dat de ForeColor i cea a fundalului de BackColor. Proprietatea WordWrap=.T.
permite trecerea textului pe mai multe linii dac lungimea sa nu ncape n dimensiunea
orizontal (Width) a obiectului.
O proprietate interesant este
Visible, care d posibilitatea
ascunderii unui mesaj sau plasrii n acelai loc a unor mesaje
diferite i a controlrii momentului n care va fi vizibil fiecare.
Fie urmtorul mesaj, afiat
ntr-o fereastr. Realizarea lui
presupune includerea unui
Figura 17-10: Exemplu de mesaj
obiect de tip Label i atribuirea
proprietilor:
FontBold=.T., FontName=Courier-R, FontSize=12, WordWrap=.T., Caption= Nu
putei intra n acest program pentru c este protejat !.

b) Texte explicative. Obiecte TextBox


Definirea unui obiect de acest tip se face prin butonul TextBox de pe bara de
instrumente. Cmpul de editare trebuie s permit citirea i/sau modificarea fie a unei
variabile, fie a unui cmp dintr-o tabel de date, care este specificat n proprietatea
ControlSource.
Dac zona va trebui s afieze numai valoarea, nu s o editeze, vom seta
parametrul ReadOnly=.T.
 Dac un cmp de editare nu trebuie s fie accesibil, folosim proprietatea
Enabled=.T.
 alt proprietate interesant este SelectOnEntry. Cnd are valoarea .T., va fi
selectat automat valoarea din cmpul de editare atunci cnd acesta devine inta
intrrilor. O simpl apsare pe tast i coninutul selectat va fi nlocuit cu tasta
respectiv.
 Pentru parole folosim proprietatea PasswordChar=x, specificnd caracterul
de substituie la introducerea textului.
190

Informatic Manual pentru clasa a XII-a

Metode specifice
 Valid este folosit atunci cnd terminm introducerea unei valori n cmp.
Dac valoarea ndeplinete condiia de validare, controlul poate trece la alt
obiect. Dac nu, revenim la editarea valorii.
 When se folosete nainte ca obiectul s devin inta intrrilor. Valoarea logic
a acestei proceduri determin accesul la cmp sau interzice acest lucru.
 KeyPress este o activitate lansat atunci cnd se apas o tast. Procedura
ncepe cu instruciunea Parameters x,y, unde x conine codul tastei apsate,
iar y un numr care indic dac a fost apsat una dintre tastele de control
(Shift, Ctrl, Alt).
 Interactivechange este o activitate de schimbare imediat a valorii unui alt
obiect chiar n timpul introducerii datelor n obiectul curent.

Editarea rapid. Folosirea asistentului TextBox Builder


Pentru a intra n programul TextBox Builder afim meniul contextual al cmpului
de editare, din care alegem Builder.
Utilitarul apare ca o fereastr cu 3 tab-uri, n care rspundem la ntrebri fr s fim
nevoii s memorm numele atributelor i metodelor. Prima ntrebare la care rspundem
este ce tip de valori va edita cmpul; n funcie de acesta, vor fi schimbate i CheckBoxurile (casetele de validare), fiind adaptate la tipul datei. n tab-ul Style setm aspectul
dorit pentru obiect (bi- sau tridimensional, cu bordur, modul de aliniere etc.).
Size text box to fit permite modificarea automat a casetei de editare n funcie de
mrimea cmpului. Tab-ul al treilea, Value, permite alegerea tabelei/view i a cmpului.
Corespunde clauzei ControlSource.

Exemple
Exemplul 1. S realizm un formular care citete o
parol i o ntoarce programului apelant.
Obiectul folosit este de tip TextBox, iar dup
plasarea sa pe formular vom seta proprietile (vezi
prima coloan a tabelului de mai jos). Va trebui ns
ca la ieirea din formular irul introdus drept parol Figura 17-11: Formularul pentru
n TextBox s fie comunicat programului apelant. introducerea parolei
Pentru aceasta vom lansa formularul prin comanda
Do With TO, iar pentru obiectul Form vom scrie metodele Init, Load, Unload.
Text1 (parola)

Metoda Init

Metoda Load

Metoda Unload

Passwordchar=X
Controlsource=m.parola

Parameters
parola

parola=
initial

Return
parola

Pai:
1. salvm cu numele x.scx i nchidem generatorul.
2. scriem codul de apel al formularului n cuvant.prg
parola=

do form x with parola to parola


? parola
return
Capitolul 17 Proiectarea formularelor

191

Exemplul 2. S realizm un formular pentru


completarea taxei de cmin. Presupunem c
fiierul Elevi este completat deja. Formularul
va afia doar numele fiecrui elev (nu este
permis modificarea lui), va permite
completarea cmpului cminist i, dac este
nevoie, a cmpului taxa. Desigur, parcurgerea
tabelei Elevi se va face pn la ultimul articol
dac variabila pe care o folosim pentru
decizia continurii machetei ia valoarea D.
Figura 17-12: Formularul pentru taxa
Pai:
de cmin
1. Deschidem utilitarul Form Designer i
adugm n Data Environment tabela Elevi.
2. Plasm obiectele pe ecran (Label i TextBox). Observai principalele proprieti
i metode n tabelul urmtor.
form1
metoda Init

Text2 (caminist)

Text4 (variabila continuare)

controlSource=caminist

variabila=n

metoda Valid

Text1 (nume)

if this.value=.t.
thisform.text3.enabled=.t.
else
thisform.text3.enabled=.f.
endif

Value = n
ControlSource=
m.variabila

ControlSource
=elevi.nume
ReadOnly= .T.

Text3 (taxa)
Enabled=.t.
ControlSource=elevi.taxa

metoda Valid
if this.value`dD
if eof()
go bottom
wait window sunteti
deja la final
else
skip
endif
endif

3. Executm clic pe butonul Run i observm efectul n fereastra Browse.


4. Salvm formularul sub numele adaug.scx; o executm prin Do adaug.scx.

c) Zone de editare. Obiecte EditBox


Obiectele de tip EditBox permit introducerea textelor lungi ntr-o fereastr de
editare i lucrul cu acest text asemeni oricrui editor de texte (de gen Notepad). De
obicei, sunt folosite pentru cmpurile Memo din tabele, dar se pot edita chiar fiiere
de tip text. Important este c obiectul permite aranjarea automat a textului i
mutarea cursorului n text folosind tastele sgei, PgUp, PgDn, precum i barele de
rulare. Sunt disponibile comenzile meniului Edit: Cut, Copy, Paste i combinaiile de
taste cunoscute: Ctrl+c=copiere, Ctrl+x=tiere, Ctrl+v=inserare. Alte proprieti
specifice sunt:
 AllowTabs este permis introducerea caracterului Tab n text (altfel, tim c
tab este folosit pentru prsirea obiectului i trecerea la urmtorul obiect);
 ReadOnly permite doar vizualizarea textului.
192

Informatic Manual pentru clasa a XII-a

Editarea rapid a zonelor de


text cu Edit Box Builder
Pentru crearea rapid a unui obiect
zon de editare se poate folosi utilitarul
Edit BoxBuilder, care poate fi lansat din
meniul contextual ataat obiectului
dup dispunerea acestuia pe formular.
Ca i la Text Box Builder, vom rspunde la ntrebri grupate pe 3 tab-uri:
1. Format pentru opiunile de
formatare a a textului.
2. Style pentru efectele vizuale Figura 17-13: Zon de editare
ale obiectului (Special effect),
chenare, alinierea textului.
3. Value unde va fi depus textul dup editare, ntr-un cmp al unei tabele sau ntr-o
vedere.

Exemplu
Fie tabela Elevi n care cmpul
Adresa este de tip Memo. Dorim un
formular pentru introducerea datelor
generale despre un nou elev, inclusiv
a adresei sale, folosind obiectul
EditBox. n cmpul adresa vor fi scrise
pe rnduri separate localitatea, strada Figura 17-14: Formular pentru introducerea datelor
i telefonul elevului.
generale ale unui elev
Pai:
1. Deschidem Data Environment cu tabela ELEVI.
2. Plasm cmpurile pe formular, precedndu-le de texte explicative.
3. Pentru fiecare indicm sursa de date.
TextBox

EditBox

ControlSource= Elevi.nume

ControlSource=elevi.adresa,
AllowTabs=.t.
ScollBars=2
Alignment=1.

Atenie! O alt posibilitate de plasare rapid a cmpurilor pe suprafaa formularului


este urmtoarea: deschidei ecranul Data Environment, apoi tragei i plasai
de la cmpul dorit pe suprafaa de lucru.
Observai asocierea implicit a obiectelor de tip Label cu numele cmpului, a
celor de tip TextBox cu cmpurile caracter, a celor EditBox cu cmpurile
Memo i a celor de tip CheckBox cu cmpurile logice. Se pot fixa i alte clase
pentru cmpuri (de exemplu Spinner pentru cmp Numeric). Asocierea se
face direct n proiectarea structurii prin Table Designer.
Capitolul 17 Proiectarea formularelor

193

d) Comutatoare. Obiecte CheckBox


Comutatoarele sau casetele de validare se pot proiecta prin butonul Checkbox.
Dintre proprieti amintim:
 Autosize=.T. permite autodimensionarea obiectului n funcie de textul introdus
ca valoare a proprietii.
 Caption reprezint textul explicativ.
 Enabled=.T. permite activarea obiectului
 ControlSource este numele variabilei sau al cmpului unde se va realiza citirea.
Metoda folosit este Click, care va trebui s precizeze aciunea la apsarea
butonului mouse-ului.

Exemplu
Dezvoltm formularul pentru adugarea elevilor, introducnd i informaia din
cmpul de tip logic Cminist. n plus, pentru continuarea introducerii datelor despre un
nou elev, am folosit tot un comutator.
1. Deschidem proiectul anterior cu Modify Form.
2. Deschidem Data Environment i adugm tabela Elevi.
3. Plasm obiectele pe suprafaa de lucru, selectndu-le din Form Controls i le
fixm proprietile i metodele:
Check2
Caption=continuti?
ControlSource=;
m.continuare

Form1
Metoda init
Continuare=.F.
Append blank

Metoda Valid
If m.continuare
Append blank
Endif

Check1
Caption=Caminist
ControlSource=;
elevi.caminist

e) Declanatoare. Obiecte CommandButton i CommandGroup


Declanatoarele sunt obiecte simple de tip CommandButton. Proprietile mai
importante sunt:
 Caption reprezint textul afiat pe buton;
 WordWrap=.T. permite continuarea textului pe linia urmtoare; WordWrap=.F.
trunchiaz textul depus n Caption la dimensiunea zonei;
 Autosize=.T. permite autodimensionarea butonului n funcie de lungimea textului;
 Picture permite afiarea unui fiier imagine (.bmp) pe buton cnd este neapsat,
DisablePicture permite afiarea imaginii cnd butonul este dezactivat,
DownPicture permite afiarea unei imagini cnd butonul este apsat;
194

Informatic Manual pentru clasa a XII-a

 Cancel=.t. arat c obiectul este declanator de ieire implicit la tasta Esc (se
va executa codul din click la apsarea tastei Esc);
 Default=.t. arat un declanator implicit la tasta Enter.
n general, nu se asociaz cmpuri unui astfel de obiect, ci doar aciuni, de aceea
metoda principal este Click, care nseamn selectarea butonului i determin
execuia codului precizat la metod. Alte evenimente sunt DblClick, RightClick,
MidlleClick, Rightclick, care nu mai necesit explicaii, numele evenimentului
sugernd momentul declanrii lui.
Butoanele de comand se pot grupa, formnd un obiect de tip container
CommandGroup. Avantajul const n faptul c se poate asocia un cod comun
metodelor o singur dat pentru toate butoanele aparinnd grupului. Dup plasarea
obiectului pe suprafaa de proiectare se poate edita fiecare component prin meniul
contextual asociat obiectului container la opiunea Edit. Putem deci schimba poziiile,
dimensiunile fiecrei componente etc.
Proprieti ale unui grup de butoane:
 Value numrul butonului care a fost selectat din grup.
 ButtonCount numrul butoanelor.
Editarea rapid a butoanelor de comand prin Command Group Builder
i pentru acest obiect de control exist un asistent de editare rapid, numit
Command Group Builder, care poate fi lansat din meniul contextual ataat obiectului,
dup depunerea lui pe suprafaa de lucru. Primul tab permite specificarea numrului de
butoane i atribuirea unui text sau a unei imagini. Al doilea tab permite alegerea
designului obiectului.

Exemple
Exemplul 1. Adugm la formularul de citire a elevilor dou butoane: butonul continua
i butonul gata.
La activarea butonului continua sunt acceptate
datele de pe ecran i se trece la un alt articol. La
activarea butonului gata se termin execuia
formularului i se afieaz fereastra Browse pentru Figura 17-15: Cele dou butoane
adugate n formular
tabela activ.
Pai:
1. Deschidem cu Modify Form proiectul anterior de formular;
2. Adugm cele dou butoane de control i definim proprietile i metodele click
asociate:
Cmd1
Caption=continua
Procedure Click
Append blank
endproc

Cmd2
Caption=gata
Procedure click
Browse
endproc

Capitolul 17 Proiectarea formularelor

195

Exemplul 2. Proiectm dou butoane de comand. La apsarea oricruia dintre butoane


va fi afiat un mesaj cu numele butonului selectat i se va nchide formularul.
Pai:
1. Proiectm grupul i punem la nivelul acestuia proprietile ButtonCount=2,
Autosize=.t. i metoda Click (vezi procedura asociat).
2. Editm grupul prin clic dreapta, apoi selectnd Edit.
3. Pentru primul buton definim proprietatea Caption=fox, iar pentru al doilea
Caption=window.
Metoda click pentru grup
do case
case this.value=1
wait window 'ati apsat pe butonul'+;
this.command1.caption
thisform.release
case this.value=2
wait window 'ati apsat pe butonul'+;
this.command2.caption
thisform.release
endcase

Figura 17-16: Cele dou butoane de comand pe formular

f ) Butoane radio. Obiecte OptionButton i OptionGroup


Butoanele radio sunt folosite pentru selectarea rapid a unei singure valori dintre
cele afiate. OptionButton este un obiect care afieaz o valoare care poate fi sau nu
selectat. Nu apare singur, ci n grup, i formeaz obiectul container OptionGroup.
Scopul butoanelor radio este s permit alegerea dintr-o serie de variante a uneia
singure. Spre deosebire de un grup de comand, pe care utilizatorul poate s-l ignore,
un grup de butoane radio are ntotdeauna un buton selectat.
 Autosize=.t. permite autodimensionarea zonei ocupate pe ecran de buton
pentru ca ntregul text explicativ s ncap;
 Caption reprezint textul explicativ asociat butonului;
 ButtonCount este numrul de butoane din grup;
 ControlSource reprezint variabila sau cmpul unde va fi memorat butonul
selectat. Dac acest cmp este numeric, va fi memorat poziia n grup, iar dac
este ir de caractere, va fi memorat textul explicativ asociat butonului selectat;
 Value reprezint butonul radio care d valoarea implicit grupului;
 BorderStyle asociaz un chenar grupului; controleaz transparena sa.
Cea mai important metod este Click, care determin selectarea obiectului i
deselectarea celorlalte butoane radio din grup.

196

Informatic Manual pentru clasa a XII-a

Editarea rapid a obiectelor prin OptionGroup Builder


Pentru editarea butoanelor radio exist un asistent numit OptionGroup Builder, care
poate fi lansat din meniul contextual asociat obiectului, opiunea Builder. Fereastra de
dialog conine:
1. tab-ul Buttons, prin care se pot specifica numrul de butoane i textul asociat
fiecruia;
2. tab-ul Layout, care permite specificarea modului de aranjare pe formular;
3. tab-ul Value, prin care este aleas tabela i cmpul n care va fi memorat selecia.

Exemplu
Pe formularul de introducere a elevilor citim profilul
la care s-a nscris concurentul cu ajutorul butoanelor
radio afiate. Reamintim structura fiierului Elevi (nume
C(20), profil N(1), clasa C(3), alte cmpuri). Pai:
1. Selectm butonul OptionGrop de pe bara de
instrumente Form Controls i l plasam pe
formular prin tragere i plasare;
2. Deschidem fereastra Properties i specificm la
nivelul grupului proprietile:
Buttoncount=3,
ControlSource=elevi.profil;

3. Specificm proprietile fiecrui buton:


Option1.Caption=informatica,
Option2.Caption=sport
Option3.Caption=engleza

Figura 17-17: Butoane radio


pe formular

4. Rulm prin Run.

Observaie: Dac alegem pentru cmpul care va primi valoarea citit prin butonul radio
tipul numeric, va fi memorat poziia butonului radio selectat n cadrul
grupului. Dac tipul cmpului este caracter, va fi reinut textul explicativ
asociat butonului.

g) Contoare. Obiecte Spinner


Contoarele sunt cmpuri de editare a valorilor numerice, cu verificarea apartenenei
la un interval. Creterea sau scderea valorii se face prin clic pe butoanele
corespunztoare; trebuie fixat valoarea cea mai mare pe care o poate lua contorul
(proprietatea SpinnerHighValue) i cea mai mic (proprietatea SpinnerLowValue).
De asemenea, operatorul poate introduce de la tastatur valori n caset. Vom fixa
proprietile KeyboardHighValue i KeyboardLowValue. O alt proprietate este
pasul de variaie, stabilit prin Increment. ControlSource specific numele variabilei
sau al cmpului unde este memorat valoarea obiectului dup pierderea intei.

Capitolul 17 Proiectarea formularelor

197

Exemplu
Pentru acelai fiier ELEVI i formularul de citire am
introdus taxa de admitere printr-un contor spinner.
Pai:
1. Deschidem formualrul precedent.
2. Plasm obiectul i fixm:
SpinnerLowValue=200,000
SpinnerHighValue=1,500,000,Increment=1000,
ControlSource=elevi.taxa

Figura 17-18: Contor spinner


adugat la formular

h) Liste. Obiecte ListBox i ComboBox


Listele deschise sunt obiecte care se proiecteaz prin butonul ListBox din bara de
instrumente Form Designer. Se prezint ca o fereastr care afieaz mai multe
elemente, dintre care utilizatorul poate alege una. Listele nchise se proiecteaz prin
butonul ComboBox i se prezint ca o fereastr cu un singur element i cu o bar de
derulare. La deschidere este afiat toat lista i este permis selectarea unei valori.
 Elementul selectat este memorat n cmpul pe care l asociem proprietii
ControlSource. Un cmp numeric va primi poziia elementului selectat, iar un
cmp de tip caracter va primi chiar valoarea elementului.
 Elementele afiate pot proveni din surse diferite, specificate prin proprietile
Rowsource i Rowsourcetype.
Rowsource
9a,9b,...
Elementele listei
elevi.dbf
Tabela de date
SELECT..
A
Nume masiv
Elevi.nume
Nume de cmp
C:alfa*.db? ablon pentru
fiiere
elevi.dbf

Numele unei
tabele

=1
=2
=3
=4
=5
=6
=7
=8

198

Rowsourcetype
Surs nespecificat; elementele
listei se vor specifica dinamic la
rularea formularului
Value
Elementele sunt enumerate
Alias
Se preiau elementele
dintr-o tabel
SQL
Elemente date de comanda SQL
Query
Elemente date de un Query
Array
Elementele sunt preluate
dintr-un tablou
Fields
Elementele sunt preluate din
valorile cmpului
Files
Elementele sunt nume de fiiere
care verific ablonul
Structure Lista este alctuit din
cmpurile (structura) tabelei

=0 none

Informatic Manual pentru clasa a XII-a

Alte proprieti:
Sorted=.t. d posibilitatea sortrii alfabetice a elementelor listei la afiare.
IncrementalSeach=.T. este o facilitate deosebit pentru cutarea asistat n listele
mari. Astfel, imediat ce utilizatorul introduce primul caracter, cursorul se plaseaz pe
linia elementului care ncepe cu acel caracter.
 De obicei este selectat un singur element dintr-o list. Dac trebuie selectate mai
multe, folosim proprietatea MultiSelect=.t. Selectarea se face cu mouse-ul (innd
tasta Ctrl apsat i executnd clic pe elementele respective) sau cu tastatura
(Ctrl+Space). Pentru a testa dac o opiune a fost selectat se folosete proprietatea
Selected, un vector boolean care are pentru fiecare element al listei valoarea .T. dac
a fost selectat i .F. dac nu. Numrul elementelor listei este reinut n proprietatea
ListCount, iar valorile propriu-zise sunt reinute n proprietatea List.

Exemple
Exemplul 1: Liste deschise cu diferite surse
Folosim o list deschis pentru alegerea clasei noului elev. Elevi (nume, adresa,
clasa, media).
Pai:
1. Executm clic pe butonul ListBox din bara de instrumente Form Controls i
proiectm poziia i dimensiunea pe suprafaa de lucru.
2. Definim proprietile. Pentru cmpul unde se face citirea, definim
ControlSource=elevi.clasa. Pentru specificarea elementelor listei,
alegem din trei variante pe care le vom explica pe rnd.
Varianta 1. Elementele listei sunt trecute manual la proiectarea obiectului.
Folosim proprietile: RowSourcetye=1; Rowsource= 12a,12b,12c,12d.
Varianta 2. Elementele listei sunt preluate dintr-un tablou numit A.
Proprietile sunt RowSourcetye=5 Array; Rowsource=A; Adugm la
metoda Load a formularului comanda DECLARE A[4], iar n metoda Init vom
iniializa elementele tabloului: a[1]=12a, a[2]=12b etc.
Varianta 3. Elementele listei sunt preluate dintr-un fiier.
Extragerea elementelor listei se face din cmpul clasa
al tabelei Clase.dbf (clasa C(3), diriginte C(10), sala
c(4)). Pentru aceasta deschidem fiierul n Data
Environment (deschidem fereastra prin clic pe butonul
din Form Designer, apoi din meniul contextual alegem
ADD). Proprietile listei sunt:
RowSource=clase.clasa, RowSourceType=6.
Figura 17-19:
Varianta 4. Lista este format din mai multe cmpuri List deschis
unite ntr-o expresie.
introdus n formular
Afim numele dirigintelui i sala mpreun cu numele
clasei, dar extragem doar clasa. Proprieti: RowsourceType=2 alias
Rowsource= clase.clasa+ clase.diriginte+ clase.sala
3. Dup fixarea proprietilor, lansm formularul prin Run i, bineneles, deschidem
fereastra Browse s verificm corectitudinea citirilor.
Capitolul 17 Proiectarea formularelor

199

Exemplul 2: List nchis. Elementele listei sunt nume de fiiere


S presupunem c avem Fisiere.dbf, o
tabel cu toate fiierele unui grup de
proiectare cu structura (nume-fisier C(20),
autor C(30)).
Vrem s proiectm un formular pentru
adugarea n tabela Fisiere a numelui unui
fiier (numai de tip dbf) ales dintr-o list
nchis. Observai formularul din figur.
Pai:
1. Deschidem n fereastra Data
Figura 17-20: List nchis n formular
Environment tabela Fisiere.
2. Scriem comanda Append blank pentru
metoda Init a formularului, care permite adugarea unui nou articol n Fisiere.
3. Proiectm obiectul prin butonul ComboBox ales de pe bara de instrumente i
poziionarea sa pe formular.
4. Stabilim proprietile eseniale: ControlSource=fisiere.nume_fis,
RowSource= *.dbf; RowsourceType=6 Files.
5. Rulm prin Run i urmrim noul articol n fereastra Browse.
Exemplul 3: Liste deschise cu selecii multiple
Ne propunem s selectm dintr-o list deschis care afieaz numele tuturor
fiierelor cu extensia .doc din directorul C:/vfp6 mai multe elemente i s le adugm
n tabela Fisiere.dbf n cmpul Nume_fis.
Pai:
1. Plasm obiectul ListBox pe formular;
2. Fixm proprietile: ControlSource=fisiere.nume_fis
RowSource=C:vfp6*.doc; RowsourceType=6 Files;
MultiSelect=.T.;
3. Activm fereastra de proprieti a formularului i scriem pentru obiect metoda
Lostfocus (artm ce vom face dup ce se termin lucrul cu formularul):

200

Procedure Lostfocus

Poziionare pe tabela destinaie

select fisiere
for i=1 to thisform.list1.listcount
if thisform.list1.selected[i]
append blank
replace nume;
with thisform.list1.list[i]
endif
endfor
endproc

Listcount numrul de elemente din list

Informatic Manual pentru clasa a XII-a

Selected vectorul asociat listei cu valoare


.t.=selectat
List vectorul cu valorile listei
List1 este numele obiectului

Editarea rapid: List Box Builder


Pentru editarea rapid a obiectelor de tip list se folosete asistentul List Box
Builder, lansat din meniul contextual al obiectului, opiunea Builder.
1. Tab-ul List Items permite precizarea sursei
elementelor, fie introduse manual, fie dintrun tablou, fie dintre
cmpurile unei tabele.
2. Tab-ul Style permite
precizarea aspectului
obiectului
(Special
Effect), a numrului de
linii (corespunde pro- Figura 17-21: Fereastra Combo Box Builder
prietii Height), dac
dorim cutarea asistat (corespunde proprietii IncrementalSearch).
3. Tab-ul Layout ofer o previzualizare a listei. Putem s modificm direct limea
coloanei (coloanelor) sau s dispunem ajustarea lor automat (adjust).
4. Tab-ul Value ne ajut s fixm coloana pentru care dorim s i se memoreze
valoarea selectat (proprietatea BoundColumn). Proprietatea ControlSource
este setat prin seciunea FieldName.

Exemple

Un exemplu de formular pentru actualizarea datelor

S presupunem c pentru o baz de date creat la banca Ion Popescu informaiile


despre comisioanele practicate pentru conturi curente, depozite, alte operaii bancare se
rein n tabela Comisioane(tip_comision, denumire, procentul aplicat drept comision).
Realizm un formular care permite adugarea unui nou articol, editarea procentului
sau tergerea articolului curent. Articolul curent este determinat prin selectarea unui
element din list. Lista afieaz liniile tabelei Comision. Odat selectat o linie, sunt
afiate n zone separate tipul, denumirea i procentul i este permis editarea lor. La
nchiderea formularului dorim afiarea unui mesaj.
Observai proiectul formularului i proprietile/metodele asociate formularului i
obiectelor de control.

Figura 17-22: Formularul de actualizare a comisioanelor


Capitolul 17 Proiectarea formularelor

201

Form1.destroy
thisform.refresh
if mess(Vrei sa inchizi?,36, Inchidere) = 6
thisform.release
else
if mess(Vrei sa inchizi?,36,Inchidere)=7
endif
endif
Form1.caption=actualizare

Form1. init
if !used(comision)
use comision in 0
endif
set deleted on
Form1. release
set deleted off
sele comision
pack

Tip_comision.ControlSource=comision.tipcomision

Dencomision. lostfocus

Iesire. caption=iesire
Iesire. click
thisform.release

if thisform.comm1.tag=t
reindex
thisform.list_com.refresh
thisform.comm1.tag=f
else
thisform.list_com.refresh

sterger.click
sele comision
dele
skip-1
thisform.refresh

Procent_comision.click
if thisform.comm1.tag=t
reindex
thisform.list_com.refresh
thisform.comm1.tag=f
else
thisform.list_com.refresh
endif

endif

List_comision.click
sele comision
go top
locate for;
tipcomision=val(thisform.list_com.value)
thisform.tip_com.refresh
thisform.den_com.refresh
thisform.proc_com.refresh

list_comision
Rowsource=comision.tipcomision,denco
mision,;
procent
RowSourceType=fields
Tabindex=4
Columncount=3
Name=list_com

Adaugare.click
go bottom
append blank
thisform.comm1.tag=t
thisform.refresh

i) Grile. Obiecte Grid


Grilele sunt obiecte de interfa de tip container, proiectate prin butonul Grid de pe
bara de instrumente Form Controls, apoi trasarea zonei ocupate de obiect pe suprafaa
formularului. Grilele sunt folosite pentru introducerea mai comod a articolelor ntr-o
tabel/o vedere.
Grilele au n componen mai multe obiecte de intefa plasate ntr-un tabel,
asemeni tabelului Browse. La intersecia liniilor cu coloanele se afl celula folosit
pentru citirea/vizualizarea valorilor preluate dintr-o variabil sau un cmp al unei
202

Informatic Manual pentru clasa a XII-a

tabele/vederi. Antetul grilei este folosit pentru denumirile coloanelor. Exist o coloan
pentru tergere i o coloan pentru selectarea liniilor. Grila este plasat ntr-o fereastr
cu bare de derulare verticale i orizontale atunci cnd dimensiunea matricii depete
dimensiunea zonei proiectate.

selectare

tergere

TextBox

header

Form1
Grid1
Column1
Header1
Text1
Column2
Header1
Text1
Check1

Column3
Header1
Text1
Column4
Header1
Spinner1

Figura 17-23: Elementele unei grile

Corespunztor acestor componente, obiectul Grid este compus ntr-o structur


arborescent din mai multe obiecte Column, care, la rndul lor, sunt compuse din Header
(anteturi pentru titlul coloanei) i, implicit, Texbox-uri (casete de text pentru afiarea/editarea
informaiei de pe coloan). Dac dorim, celula poate avea alt obiect pentru editatea valorii
(de exemplu, CheckBox ca n coloana Caminist, Spinner ca n coloana Taxa).
Dac nu specificm proprietatea Name pentru nici un obiect din exemplu, sunt
asociate n mod implicit nume de obiecte.
Fiecare dintre aceste componente are proprieti i metode.
 Referirea la o component a grilei se face folosind calificarea.
De exemplu, dac dorim ca zona de editare a coloanei Clasa s aib textul centrat,
vom scrie:
Form1.Grid1.Column3.Text1.Alignment=2
ntreaga gril poate fi referit prin metoda SetAll care determin atribuirea unei
proprieti pentru ntregul grup. Exemplu:
Form1.Grid1.SetAll(fontName,arial)
De asemenea, se poate face referire la o ntreag coloan tiind c grilei i se
asociaz un vector special Columns. Exemplu:
Form1.Grid1.Columns[1].Datasource=elevi.nume
 Numrul de coloane ale unei grile este dat de proprietatea Columncount.
Dac exist o tabel deschis, toate coloanele ei vor popula grila i implicit
columncount=-1.
Pentru a indica sursa de date a ntregii grile se folosete proprietatea:
RowSourceType care poate avea valorile:
=0-Table sau =1-Alias cnd datele sunt preluate dintr-o tabel, iar
Rowsource va trebui s conin numele tabelei;
=2-Prompt cnd datele sunt furnizate la execuie de ctre utilizator;
=3-Query cnd datele sunt preluate dintr-un fiier Qpr;
=4-SQL cnd sursa de date este rezultatul unei comenzi SQL, iar
Rowsource va cuprinde comanda Select.
Capitolul 17 Proiectarea formularelor

203

 Pentru a indica sursa de date a unei coloane se folosete proprietatea


ControlSource cu numele cmpului precedat de alias.
De obicei, datele sunt preluate dintr-o tabel i este deci util ca la proiectarea grilei
s avem deschis tabela, astfel nct la completarea proprietii Rowsource sau
ControlSource s putem alege dintr-o list valoarea dorit.
 Operaii cu datele unei grile (proprieti la nivelul grilei):
1. Adugarea datelor se permite prin AllowAddNew=.T. astfel nct la ultima
linie, dac se apas sgeata n jos, se mai adaug o linie.
2. tergerea liniilor se face prin marcarea lor n coloana de tergere, asemeni
ferestrei Browse. Dac dorim dezactivarea acestei coloane, deci i a posibilitii
de tergere, fixm DeleteMark=.F. Setarea implicit este .t.
3. Modificarea cmpurilor este implicit, dar dac dorim s permitem doar
vizualizarea, stabilim ReadOnly=.T. Proprietatea se poate plasa i la nivelul
unei coloane, dac dorim numai protecia acesteia.
Editarea grilei este permis prin meniul contextual asociat grilei, apoi selectnd
opiunea Edit. Se observ schimbarea conturului grilei la acceptarea editrii. Prin
poziionarea pe o coloan se pot schimba proprietile acesteia n fereastra Properties.
Se pot modifica dimensiunile coloanei prin tragerea cu mouse-ul a benzilor
separatoare. Pentru tergerea unei coloane se apas tasta Delete. Adugarea unei
coloane se face prin schimbarea la nivelul grilei a proprietii ColumnCount la noul
numr i completarea manual a header-ului i a sursei de date pentru TextBox.
 Editarea rapid a unui obiect de tip gril prin Grid Builder
O metod de construire rapid a unei grile este oferit de asistentul Grid Builder,
activat prin meniul contextual al grilei, opiunea Builder.
1. Tab-ul Grid Items permite deschiderea/selectarea bazei de date, a tabelei surs
i precizarea cmpurilor care vor forma coloanele grilei.
2. Tab-ul Style seteaz aspectul grilei.
3. Tab-ul
Layout
permite
fixarea obiectelor asociate.
Pentru fiecare coloan se
stabilete titlul (Caption) i
tipul obiectului (Control type).
Se poate alege dintre
TextBox, CheckBox, Spinner
etc. De asemenea, se pot
ajusta dimensiunile celulelor
(proprietile Height, Width).
4. Tab-ul Relationship conine
ntrebri pentru a permite
crearea unei grile cu dou Figura 17-24: Fereastra Grid Builder
tabele legate.

204

Informatic Manual pentru clasa a XII-a

 Proiectarea rapid a obiectului gril prin Data Environment


O alt metod de a crea rapid grile este folosirea obiectului Data Environment, care
conine toate tabelele i vederile deschise pe parcursul proiectrii unui formular. Poate
fi lansat din bara de instrumente Form Designer sau din meniul View. Ne poziionm
pe titlul tabelei creia dorim s-i proiectm o gril i executm tragere i plasare pe
suprafaa de lucru a formularului. Desenm o gril pentru toate cmpurile tabelei,
avnd ca antet chiar numele cmpului i ca obiecte de editare casete de text.
Realizm o gril de actualizare a numelui i clasei elevilor din tabela
Elevi(nume C(10), adresa M, clasa c(3), media N(5,2), taxa N(5),
caminist l, dn D, foto G). Pai:
Varianta 1: Proiectare pas cu pas.
1. Deschidem tabela Elevi n fereastra Data
Environment.
2. Proiectm grila prin clic pe butonul Grid de pe
bara de isntrumente Form Controls; poziionm i
dimensionm obiectul direct pe suprafaa de
lucru.
Figura 17-25: Grila de
3. Intrm n editarea containerului prin meniul actualizare a numelui i clasei
contextual al grilei (opiunea Edit).
4. Fixm proprietile fiecrui obiect:

Exemplu

Pentru Grid1:
ColumnCount=2,
AllowAddNew=.t.
RowSource=elevi
Rowsourcetype=0
La Metoda Lostfocus
Browse

Pentru Column1:
Controlsource=elevi.n
ume

Pentru Column2:
Controlsource=elevi.c
lasa

Pentru Header1:
Caption=nume-elev

Pentru Header1:
Caption=clasa

Varianta 2: Proiectarea rapid prin Data Environment.


1. Deschidem tabela n Data environment i ne poziionm pe bara de titlu a
tabelei.
2. Executm tragere i plasare pn la suprafaa formularului.
3. Alegem din meniul contextual (clic dreapta) opiunea Edit.
4. Ne poziionm cu mouse-ul pe coloana a doua (coloana corespunztoare
adresei, de care nu avem nevoie) i o tergem apsnd tasta Delete.
5. n fereastra Properties fixm ColumnCount=2 (cu aceast ocazie tergem i
coloana Media) i AlladdNew=.t. (pentru c valoarea implicit este .F.).
6. Executm de prob prin clic pe Run.
Varianta 3. Proiectarea rapid prin Grid Builder.
Ne propunem realizarea unei grile pentru actualizarea tabelei Elevi, dar care s aib
pentru cmpul Caminist un Checkbox, pentru cmpul Tax un Spinner, iar pentru
cmpul Adresa un obiect de tip Editbox.
Capitolul 17 Proiectarea formularelor

205

Pai:
1. Ne poziionm n fereastra de lucru a generatorului de formulare i executm
tragere i plasare de la butonul Grid de pe bara de isntrumente Form Controls
pe formular.
2. Deschidem meniul contextual prin clic dreapta i alegem Builder.
3. Rspundem la ntrebri i rulm prin Run.

Observaie: Proiectarea unei grile prin Data Environment asociaz coloanelor doar
TextBox-uri.
O metod de a pune alte obiecte drept coloane ale grilei este adugarea
obiectelor prin codul metodei Init asociate grilei. De exemplu, pentru o gril
unde dorim pe coloana corespunztoare cmpului caminist un obiect de tip
CheckBox, iar pe coloana unde este taxa un spinner scriem codul urmtor:
**Procedure Init ***pentru grid
This.column2.addobject(check1,checkbox)
This.column4.addobject(spinner1,spinner)
This.column2.currentControl=check1
This.column4.currentControl=spinner
This.column2.check1.visible=.T.
This.column2.check1.caption=elevi.caminist
This.column4.spinner1.spinnerhighvalue=2000
This.column4.spinner1.spinnerlowvalue=100
This.column4.spinner1.increment=100
This.column4.spinner1.controlSource=elevi.taxa

O alt metod de a schimba obiectul de editare2 este urmtoarea:


deschidem fereastra Browse asociat formularului i cutm linia
corespunztoare coloanei creia dorim s-i schimbm obiectul de editare.
Schimbm valorile din cmpurile Class, BaseClass i ObjName pentru a
referi noul obiect asociat coloanei i tergem cmpul Properties.
nchidem fiierul obiectului formular prin Close all. Revenim n constructorul de
formulare prin modify form i editm formularul.

j) Seturi de Pagini. Obiecte Page Frame


Paginile i seturile de pagini sunt elemente de interfa care asigur centralizarea
informaiilor n acelai formular i sistematizarea lor pe pagini distincte. n literatura de
specialitate am ntlnit denumirea de tab-uri. Se mai numesc i pagini alternative,
pentru c la un moment dat o singur pagin este activ. Definirea unui set de pagini
se face prin clic pe butonul Page Frame de pe bara de instrumente Form Controls i
trasarea zonei ocupate pe formular. Fiecare pagin este un obiect numit Page.

206

Propus de Gabriel i Mihai Dima n Bazele Visual FoxPro 5.0


Informatic Manual pentru clasa a XII-a

La

nivelul setului de formulare se definesc proprietile:


Numrul de pagini proprietatea PageCount;
Dimensiunea paginilor PageHeight (nlimea) i PageWidth (limea);
Modul de afiare a titlurilor de pagin Tabstretch valoarea 0 (multiple rows),
dac sunt mai multe pagini i anteturile lor nu ncap pe un singur rnd, se
creeaz dou linii cu anteturi; valoarea 1 (single row); se ajusteaz titlurile
paginilor pentru a ncpea pe o singur linie;
Caption textul explicativ la nivelul paginii (antetul);
Activepage fixeaz pagina activ (la un moment dat o singur pagin este
activ);
PageOrder fixeaz numrul de ordine al paginii (n mod implicit, sunt numerotate
n ordinea proiectrii).
O metod important la nivelul paginii este Activate, care va fi executat la
activarea paginii. Putem introduce aici secvene care remprospteaz datele prin
citirea lor de pe disc n cazul n care acestea s-au modificat.
Obiectul PageFrame este un container care cuprinde mai multe pagini, la rndul lor
containere, organizate dup un model arborescent. Referirea la un obiect se face prin
indicarea ntregii ramuri printe.
Utilitarul acord nume implicite obiectelor, dup cum bine tim, prin numerotarea
obiectelor din aceeai clas. Deci, dac avem trei pagini, ele vor primi numele Page1,
Page2, Page3.
O alt modalitate de referire a paginilor este proprietatea Pages un vector care
are ca elemente paginile componente ale setului. Referirea la un obiect n pagin se
poate face i prin numele obiectului sau prin proprietatea Controls un vector care are
ca elemente obiectele de control definite n pagina respectiv.

Exemplu
Acordarea numelui paginii 3

Pageframe1.Page3.caption=Listare
sau
Pageframe1.Pages[3].caption=Listare

Activarea paginii 1

Pageframe1.page[1].ActivePage=.t.

Pe prima pagin avem un TextBox5


(presupunem c este al 12-lea obiect
pe pagin) cruia i asociem
metoda SetFocus.

Pageframe1.page1.textbox5.setfocus
sau
Pageframe1.page[1].controls[12].setfocus

Odat configurat, obiectul Set de pagini poate fi editat separat, accesnd meniul
contextual, opiunea Edit sau selectndu-l n arborele de obiecte a paginii dorite.

Capitolul 17 Proiectarea formularelor

207

Vom exemplifica modul de proiectare


a unui formular cu seturi de pagini pornind
de la obiectele de tip gril realizate
anterior, asupra crora nu ne vom opri.
Deci pe prima pagin este o gril pentru
actualizarea elevilor, iar pe cea de-a doua
o gril pentru actualizarea claselor.
Trecem de la o pagin la alta, iar cnd
dorim ncheierea lucrului apsm butonul
de comand: gata.
Pai:
1. Definim colecia de pagini pornind Figura 17-26: Proiectarea formularului cu
de la butonul Page Frame, trasnd seturi de pagini
zona ocupat de acesta pe formular.
2. Definim butonul CommandButton pe formular n afara setului.
3. Intrm n editare (din meniul contextual, opiunea Edit) i fixm proprietile
fiecrei pagini. Astfel:
Frame1

Page1

Page2

Command1

Pagecount=2

Caption=elevi

Caption=clase

Caption=gata
Procedure click
Thisform.release

4. Plasm pe pagina 1 un obiect gril pentru Elevi i pe pagina 2 un obiect gril


pentru tabela Clase, pentru care nu mai artm proprietile.
5. Rulm prin comanda Run.

k) Imagini. Obiecte Image


Formularele de culegere a datelor sau de vizualizare sunt mai atractive cnd conin
desene, imagini, sigle. Proiectarea ntr-o zon a formularului a obiectelor imagine, care
sunt de fapt fiiere .bmp, se face prin clic pe butonul Image de pe bara de instrumente
Form Controls prin tragere i plasare, apoi conturarea zonei ocupate de imagine.
Proprieti:
 Picture specific numele fiierului surs;
 BorderStyle=1: imaginea este ncadrat n chenar i =2: contrar;
 Stretch fixeaz modul de afiare a imaginii i poate lua valorile:
=0 Clip se pstreaz dimensiunile iniiale ale imaginii sau se decupeaz imaginea;
=1 Isometric imaginea se ncadreaz n zon pstrnd proporiile;
=2 Stretch imaginea este ajustat prin deformare la zon.
 Dintre evenimente, se pot enumera Click, Drag (tragere cu mouse-ul) etc.

l) Ceas. Obiecte Timer


Ceasul ca obiect de interfa permite msurarea intervalelor de timp la care trebuie
executate anumite aciuni, de exemplu, afiarea unor mesaje care solicit alegerea unei
opiuni. Dac utilizatorul nu alege n timpul disponibil, va fi folosit o variant implicit.
208

Informatic Manual pentru clasa a XII-a

Definirea obiectului ncepe prin aducerea butonului timer de pe bara de instrumente


Form Controls pe suprafaa de lucru. Proprieti:
 Interval fixeaz intervalul de timp ntre dou evenimente Timer. Intervalul este
specificat n miimi de secunde.
Metoda Timer specific aciunea care va fi executat la expirarea timpului.

Exemplu
Exemplul pe care l folosim plimb o imagine
de la dreapta formularului la stnga i invers. Iniial
se afieaz doar poza din stnga. La clic pe buton
apare n dreapta timp de 2 secunde, apoi se mut
din nou n stnga. Pai:
1. Proiectm pe formular obiectul Timer, apoi
obiectul Image1 (pe care apoi l copiem i l
denumim Image2) i Command1.
2. Scriem proprietile i metodele (conform
tabelului urmtor):
Timer1
Interval=2000
Procedure Timer
thisform.image1.visible=.t.
thisform.image2.visible=.f.

Image1
(stnga)
Visible=.t.

Figura 17-27: Obiect Timer n

formular

Image2
(dreapta)
Visible=.f.

Command1
Procedure click
thisform.image1.visible=.f.
thisform.image2.visible=.t.

m) Obiecte de tip OLE


Tehnica OLE este deja cunoscut din leciile anterioare de programare a aplicaiilor
Windows, permind interaciunile dintre aplicaiile Windows prin intermediul obiectelor
suportate de acestea. Obiectele pot fi legate (linked) sau incluse (embedded). La
execuie pot fi editate folosind aplicaia care le-a generat.
Controalele ActiveX, memorate pe disc sub forma fiierelor .OCX, pot fi incluse
direct ntr-un formular, ca i obiectele Fox. Ele sunt obiecte OLE, n sensul c sunt
create de alte aplicaii. Important este c au propriul set de proprieti i
evenimente/metode pe care le putem modifica la proiectare. Din acest punct de
vedere, FoxPro este o aplicaie client, pentru c nu ofer obiecte altor aplicaii.

Obiecte de tip OLE Container control


Aceste obiecte sunt proiectate prin butonul OLE Control, care deschide fereastra de
dialog Insert Object. Poate fi creat un nou obiect sau poate fi inclus unul existent.

Obiecte de tip OLE Bound Control


Aceste obiecte editeaz cmpurile General din tabele de date. Sunt proiectate prin
butonul OLE Bound Control i, dup specificarea zonei ocupate de obiect, sunt definite
proprietile. ControlSource desemneaz numele cmpului de tip general care
dorim s fie editat prin formular.
Capitolul 17 Proiectarea formularelor

209

Dintre proprietile asociate ambelor obiecte OLE amintim:


 Autoactive specific modul de activare a obiectului. Poate lua valorile:
=0 Manual nseamn activare prin cod folosind metoda Doverb.
=1 Gotfocus obiectul este activat cnd este selectat cu mouse-ul sau cu tastatura.
=2 DoubleClick obiectul este activat prin dublu clic.
=3 Automatic obiectul este activat automat la afiarea formularului.
Metoda doverb execut o funcie specific aplicaiilor server OLE (de exemplu,
EDIT, SAVE, OPEN).

Figura 17-28: Fereastra Insert Object

De exemplu, dorim ca pe formularul de culegere a datelor despre un elev, n afar


de introducerea numelui i a pozei preferate, s permitem operatorului s-i
deseneze semntura. Folosim fiierul Elevi(nume C(20), poza G,...).
Pai:
1. Deschidem fiierul Elevi.
2. Proiectm formularul cu obiectele Label.
3. Pentru TextBox indicm ControlSource =elevi.nume.
4. Pentru semntur folosim obiectul ActiveX OLE de pe bara de instrumente Form
Designer.
5. Alegem din fereastra Insert Object tipul
Bitmap Image i bifm Create New.
6. n ecranul de proiectare deschis
desenm cele trei litere.
7. nchidem fereastra de proiectare i
revenim n mediul formularului.
8. Pentru poz, alegem butonul OLE
Bound Control de pe bara de instrumente Form Controls i indicm legtura Figura 17-29: Obiect OLE introdus n
cu sursa de date, deci proprietatea formular
ControlSource=elevi.poza.

210

Informatic Manual pentru clasa a XII-a

o) Linii, chenare, cercuri. Obiecte Line i Shape


Obiectele grafice, ca liniile i chenarele, mbuntesc aspectul unui formular.
Proprieti ale liniilor:
 BorderColor culoarea;
 BorderStyle modul de desenare (0=transparent, 1=continuu, 2=linie ntrerupt
etc.);
 BorderWidth grosimea n pixeli;
 LineSlant orientarea.
Forma prestabilit a obiectelor form
(shape) este dreptunghiul. Proprietile sunt:
 SpecialEffect =1 d un aspect
tridimensional;
 FillStyle stilul obiectului =1
transparent, =2 opac;
 FillColor culoarea de umplere;
 BorderColor culoarea marginii;
 Curvature gradul de rotunjire
(ntre zero i 99 pentru cerc).

Figura 17-30: Linii, chenare i cercuri


introduse n formular

Figura 17-31: Obiecte form adugate n formular

Capitolul 17 Proiectarea formularelor

211

Proiectarea interfeei folosind Form Wizard


FoxPro conine un vrjitor (aplicaie wizard) pentru realizarea rapid a formularelor
cu aspect profesionist. Observai un astfel de formular care permite nu numai cutarea
i poziionarea n tabela de date, ci i actualizarea sau afiarea la imprimant.
Lansm FORM WIZARD selectnd Tools, Wizard, Form. Form Wizard permite
crearea rapid a unui program direct executabil (fis.scx) pentru editarea cmpurilor
dintr-o tabel sau din dou tabele legate ntre ele. Vom prezenta pe rnd cele dou
posibiliti.
Fereastra 1 deschide baza de date, tabela dorit i selecteaz cmpurile
care vor fi editate prin formular.
Fereastra 2 permite specificarea unui model de formular din cele
prestabilite. Printre opiuni sunt: Standard afiarea vertical a
cmpurilor; Chiseled rndurile au un efect de subliniere 3D etc. Pot fi
plasate butoane de derulare cu text sau imagine.
Fereastra 3 permite alegerea, dac este cazul, a cmpurilor dup care se
va face ordonarea automat a nregistrrilor pentru vizualizare.
Fereastra 4 permite salvarea i rularea imediat sau ulterioar a
formularului sau modificarea acestuia cu Form Designer.
O alt posibilitate oferit de asistent este editarea simultan a datelor din dou
tabele legate ntre ele. Cmpurile din prima tabel formeaz antetul formularului, iar
cele din a doua tabel sunt dispuse pe coloane, asemeni ecranului Browse ntr-un
subformular. Se poate trece de la un articol al primei tabele la altul. Automat, n
subformularul asociat tabelei copil se pot edita doar datele legate de articolul curent din
tabela printe.

n concluzie
Formularul este un element central al unei interfee Windows care poate fi proiectat
att prin comenzi Visual FoxPro (obiectul aparine clasei container Form) ct i
interactiv, prin utilizarea instrumentului de proiectare Form Designer i a asistenilor
(Builder) asociai.
Formularele pot fi folosite ca ferestre de prezentare a aplicaiei sau ca panou de bord.
Principalul lor rol este ns vizualizarea i editarea datelor din unul sau mai multe tabele.
Trebuie avute n vedere cteva principii3 la proiectarea interfeelor utilizator, astfel
nct orice utilizator, chiar dac nu a folosit niciodat aplicaia, s fie n msur s
neleag i s lucreze cu programul aplicaiei.

212

Bob Grommes, FoxPro 2.5 pag. 395


Informatic Manual pentru clasa a XII-a

Aceste principii sunt:


 Prezentarea tuturor informaiilor necesare utilizatorului trebuie fcut n mod
intuitiv. Astfel, afiarea stins sau dezactivat n fereastr a unor obiecte care nu
sunt disponibile n momentul respectiv ofer, un plus de siguran utilizatorului.
Este indicat ca textele s fie clar afiate, folosind diverse culori.
 Gruparea logic a meniurilor i obiectelor de interfa.
 Autodocumentarea fiecrei aciuni, opiuni etc.
 Folosirea standardelor pentru numele butoanelor, de exemplu; Cancel are
aceeai semnificaie peste tot, nu este necesar s schimbai numele sau s l
nlocuii cu Abandon).
 Informarea permanent a utilizatorilor privind ceea ce se ntmpl. Ori de cte
ori se apas un buton sau o tast, trebuie s se ntmple ceva, de aceea pentru
operaiile lungi afiai un indicator de proces (bare de progres, care prezint
procentajul realizat din proces) sau mesaje de informare.
 Avertizarea sonor n cazurile de eroare este indicat!
 Mesajul de operaie ilegal trebuie particularizat preciznd exact unde i ce s-a
greit.
 Deorece n maniera procesrii conduse de evenimente a aplicaiei sunt deschise
simultan pe ecran mai multe ferestre, este important ca fiecare mesaj sau fereastr
de dialog s aib referire la fereastra sau procesul care a cauzat intervenia.
 Este bine ca utilizatorului s i se permit personalizarea mediului de lucru: culori,
viteza mouse-ului, starea difuzorului i orice altceva este posibil. Acest lucru d
aplicaiei un aspect profesional dar, n acelai timp, prietenos fa de utilizatori.
 Pentru evitarea cazurilor de tergeri accidentale sau de deteriorare a
informaiilor este recomandat plasarea operaiei ntr-un loc mai greu accesibil,
fr tast direct etc. De asemenea, se va cere confirmarea utilizatorului la orice
operaie distructiv. Dac totui s-a executat o manevr greit trebuie avut n
vedere posibilitatea refacerii datelor (prin comanda UNDO).

sarcini de laborator
I.

Sarcini pentru proiectarea unui formular cu parametri


1. Construii un formular care s primeasc din exterior (ca parametru de intrare)
un numr ntre 1 i 7, s-l afieze pe formular ntr-un chenar dac este par i fr
chenar dac este impar i s ntoarc numele zilei corespunztor acestui numr,
tot ca parametru n variabila Nume. Afiai apoi aceast variabil!
2. Imaginai o variant de rezolvare pentru ca formularul s primeasc dou
numere: primul, dac este zero, va determina considerarea celui de-al doilea ca
numr de zi (din sptmn), iar dac primul numr este 1, cel de-al doilea va
reprezenta numrul unei luni (din an). Pe formular vor fi afiate cele dou
numere primite din exterior cu culori diferite i alturat numele zilei sau a lunii.
Formularul va returna un mesaj de tipul ziua este... sau luna este... completnd
Capitolul 17 Proiectarea formularelor

213

numele obinut numai dac este satisfcut condiia de validare. Atenie, nu se


citesc cele dou numere: se primesc drept parametru!
3. Modificai formularul pentru introducerea datelor n ELEVI astfel nct s afieze
i adresa (presupunem cmpul adresa pe 30 caractere, din care primele sunt
pentru localitatea elevului) i dac elevul nu este din Iai (sau o localitate pe care
s-o dai ca parametru de intrare), atunci s fie automat considerat cminist i
operatorul s aib acces la completarea valorii Taxa.
4. ncercai s nchidei formularul atunci cnd s-au terminat articolele. V aducei
aminte de metoda Release a formularului? Unde va fi plasat?
II.

Sarcini pentru proiectarea pas cu pas a obiectelor de control


Odat cu recepia produselor de la furnizori se nregistreaz informaiile de pe factura
nsoitoare n fiierul PRODUSE(furniz C(20), produs C(20), tip_mf C(5), pi N(7), tva
N(7), tva N(7), adaos N(7), impozit N(7)), unde: furniz=numele furnizorului; tip_mf=tipul
mrfii (buturi, igri, cafea, alte alimente), pentru care se percepe impozit diferit; pi=pre
de intrare al produsului de pe factur; tva=suma calculat conform procentului de tva
aplicat asupra preului de intrare; adaos=suma adaos calculat prin aplicarea
procentului de adaos fixat pentru produs de societate; impozit=suma calculat ca
impozit pentru cafea, igri, buturi etc., conform cotelor de impozitare legale.
Proiectai formularul de introducere a datelor de pe factur folosind tipuri diferite de
obiecte de control!
III. Sarcini pentru construirea unei interfee a aplicaiei BIBLIOTECA
Pentru baza de date Biblioteca au fost construite
Procedure click
tabelele Carti (isbn, titlu, cod_autor, editura, colectia),
Do case
Autori (cod_autor, nume, data_n, data_d, naionalitate),
Case this.value=1
Cititori (cod_cit, nume, adresa, ocupaia, telefon).
List
Case this.value=2
1. Realizai un grup de declanatori care permite
List to print
afiarea tabelei Carti pe ecran, la imprimat sau
Otherwise
ntr-un fiier. Analizai procedura Click alturat!
List;
Unde ar trebui plasat? La nivelul formularului, al
to file x.txt
grupului sau al primului buton? Credei c mai
Endcase
trebuie schimbat ceva? Cum s asociem o
Endproc
pictogram numai unui singur buton?
2. Construii un formular care permite introducerea noilor cri
prin preluarea dintr-o list deschis a numelor de autori
(elementele vor fi sortate alfabetic i vor proveni din valorile
cmpului nume al tabelei Autori), prin preluarea numelui
editurii dintre elementele unui masiv, iar pentru colecie lista
va fi completat manual.
3. Pentru baza de date BIBLIOTECA construii un formular ca i
cel din imagine, care permite editarea i adugarea crilor.
4. Construii un formular de vizualizare a crilor unui autor X, Figura 17-32:
Grupul de
dat ca parametru la intrarea n formular.
declanatori
5. Modificai formularul anterior pentru ca afiarea crilor s
se fac pentru o anumit colecie sau editur.
214

Informatic Manual pentru clasa a XII-a

6. Proiectai un formular
de culegere a datelor
cu dou pagini. Prima
va permite introducerea unei cri i,
dac autorul respectivei cri nu este
nregistrat n tabela
autori, se va deschide
pagina de introducere
a autorului. Desigur,
paginile pot fi de
dimensiuni
diferite, Figura 17-33: Pagin a formularului
colorate etc.
7. Proiectai un formular pentru introducerea unor noi cititori pn cnd se nchide
fereastra formularului. Se vor folosi obiecte de control diferite. Codul noului cititor
se va realiza prin program, fiind chiar poziia n cadrului fiierului.
8. Realizai formularul urmtor, care s permit editarea simultan a tabelelor Carti
i operaii. Fixai opiuni diferite de adugare a datelor.

Figura 17-34: Formularul de editare simultan

9. Construii un formular care s selecteze dintr-o list cartea mprumutat,


din alt list numele cititorului i s
adauge un articol n tabela Operaii
tiind c data mprumutului este
chiar data curent.
10.Construii un formular care s in
controlul operaiilor de editare cri,
editare operaii, editare cititori, sub
forma unui panou de bord cu butoane
de control care s dirijeze activitile.
Plasai o imagine de fundal.

Figura 17-35: Formular sub forma unui


panou de bord
Capitolul 17 Proiectarea formularelor

215

IV. Sarcini pentru construirea unui formular de actualizare simultan a mai


multor tabele
Informaiile despre personalul unei societi se in n 3 fiiere:
PERSOANE (cod N(3), nume C(10), adres M, studii M, stareciv C(1), buletin
C(10));
ANGAJAI (cod N(3), loc_munc C(10), funcia C(5), data_angaj D, mod_angajare
C(5), data_plecare D, motiv_plecare M);
SALARII (cod N(3), salar N(7), avans N(7), reineri N(7)).
Proiectai baza de date i un formular de introducere a datelor n momentul angajrii
unei persoane.

Figura 17-36: Schema de realizare a formularului

inei seama de urmtoarele cerine:


numele angajatului se va trece cu minuscule;
data-angajrii va fi chiar data nregistrrii angajatului;
mod-angajare va fi salariat, prestri servicii codificat prin SAL, PS dac
loc-munc este tonet atunci funcia poate fi vnztor
dac funcia este contabil, nu trebuie s fie completat cmpul loc-munc, iar
modul de angajare va fi salariat.
Pentru fiecare tabel din baza de date
proiectai formularele de vizualizare i
actualizare. Folosii att Quick Form, ct
i Form Wizard.
Proiectai pas cu pas un formular mai complex, care s conin toate obiectele de
interfa nvate.
Proiectai un formular cu rol de panou de bord al operaiilor realizate de aplicaia
voastr.

Sarcini pentru realizarea


unui mini-proiect

216

Informatic Manual pentru clasa a XII-a

Capitolul

18

Afiarea datelor sub


form de rapoarte
 Rapoarte. Generatorul de rapoarte Report Designer
 Etichete. Generatorul de etichete Label Designer
 Grafice. Utilitarul GENGRAPH

Rapoarte
Rapoartele sau situaiile finale constituie o modalitate de valorificare a coninutului
informaional al bazei de date, servind ca instrument de cunoatere a aspectelor
pozitive (i negative) dintr-o situaie pentru care am cules date, le-am transportat,
le-am verificat i depozitat ntr-o baz de date. innd seama de aceste aspecte,
raportul apare ca un instrument al cunoaterii, care conine o cantitate mare de
informaii selectate, prelucrate, sistematizate dup anumite reguli de prezentare,
conform cerinelor de informare ale utilizatorilor.
n practic se disting mai multe tipuri de rapoarte1:
dup aria de cuprindere i locul de obinere, rapoartele pot fi de uz local (pe
secii, compartimente) sau de uz global (pe societi, firme);
dup gradul de prelucrare a datelor, rapoartele pot fi analitice sau sintetice;
dup perioadele de referin a coninutului informaional, rapoartele pot fi zilnice,
decadale, lunare etc.;
dup natura informaiilor oferite, rapoartele pot fi sub form tabelar (text sau
numeric) sau grafic (histograme, grafice).
Editarea unui raport presupune o anumit succesiune de operaii:
1. Definirea coninutului informaional al raportului (se stabilesc datele care vor
compune raportul, fiierele care le conin, denumirea i ordinea cmpurilor din
structura unei nregistrri, din liniile raportului).
2. Colectarea datelor care compun raportul (operaii de selecie, interclasare,
ordonare, filtrarea datelor care vor compune raportul).
3. Efectuarea calculelor matematice (dac este cazul, pentru rapoartele care conin
indicatori, acetia sunt calculai i memorai n variabile sau cmpuri ale tabelelor).
4. Definirea machetei raportului (operaie complex de definire a formei de
prezentare i explicitare a informaiilor ntr-un cadru limitat pagina sau ecranul
innd seama de cerinele utilizatorilor).

Dup Ion Lungu, Sistemul FoxPro, editura All, 1996.


Capitolul 18 Afiarea datelor sub form e rapoarte

217

Principalele categorii de informaii sunt:


datele propriu-zise ale raportului;
indicatorii totalizai pe diverse niveluri de centralizare;
capul de tabel;
titlul raportului;
datele sau nivelurile de grupare i totalizare;
informaii centralizatoare de sfrit de raport/pagin.
5. Stabilirea modalitilor de afiare (pe ecran, la imprimant, ntr-un fiier).
Rapoartele pot fi realizate prin comenzi adecvate n programe utilizator, dar mai
util este un program de generare a rapoartelor conform proiectului utilizatorului,
cum este cel numit Report Designer.

Editorul de rapoarte Report Designer


SGBD-ul FoxPro pune la dispoziia utilizatorilor un program special, numit generator
de rapoarte, prin intermediul cruia pot fi proiectate rapoartele conform cerinelor
utilizatorilor. Informaiile despre proiect sunt salvate ntr-un fiier care, lansat n
execuie, va afia datele surs (tabele/vederi), conform cu indicaiile proiectului.
Generatorul de rapoarte permite:
1. Proiectarea unui raport simplu (opiunea QUICK REPORT), n care apare data
curent a listrii, capul de tabel fiind format din denumirea cmpurilor din baza
de date, iar coninutul din articolele bazei.
2. Proiectarea unui raport complex prin indicarea n cadrul unor benzi speciale a
componentelor raportului.
3. Introducerea benzilor de grup, pentru rapoarte care grupeaz datele avnd un
cmp comun, fiecare grup fiind identificat prin antet, coninut i informaii de final.
4. Folosirea funciilor standard (recno(), pagno(), date(), time(), sum(),
avg(), max()), a cmpurilor calculate, a cmpurilor din baza de date sau a
fiierului contextual deschis anterior.

Apelarea editorului
CREATE/MODIFY REPORT <fis.frx>

Lansarea n execuie
Lansarea n execuie a raportului se face prin comanda:
REPORT FORM <fis.frx> [HEADING<sir>] [NOEJECT]
[SUMMARY] <domeniu> [FOR <cond>] [WHILE <cond>]
TO PRINTER/TO FILE <fis.txt>
Comanda REPORT
FORM permite listarea fiierului/vederii deschise anterior
comenzii sau a fiierelor contextuale proiectate odat cu macheta raportului. Clauza
HEADING are ca efect afiarea unui antet care va fi listat la nceputul fiecrei pagini.
EJECT inhib saltul la pagina nou naintea afirii raportului. SUMMARY inhib afiarea
rndului curent i are ca efect listarea numai a liniilor de totaluri.

218

Informatic Manual pentru clasa a XII-a

Mediul de proiectare
n vederea facilitrii proiectrii vizuale, Report Designer v pune la dispoziie o bar
de meniuri, un meniu contextual, o bar de instrumente, fereastra de proiectare,
ferestre de dialog.
1. Fereastra de proiectare are mai multe benzi, unde vor fi depuse categoriile de
informaii ale raportului
Bara de
instrumente

Prin deplasarea butonului lateral se pot aduga/terge linii

Bara de
titlu
Bara-antet
de grup
Se trec variabile, cmpuri, expresii
Bara-final
de grup
Bara-final
de pagin
Bara de
totalizare

Figura 18-1: Fereastra de proiectare

Meniul Report
Vom explica particularitile editrii rapoartelor rezolvnd pas cu pas o problem.
deschiderea benzilor de titlu i nsumarea la final de raport
deschiderea benzilor de grup
editarea variabilelor
fixarea fontului implicit de raport
sursa de date este independent de proiectul de raport
realizarea automat a unui raport rapid
execuia raportului

Figura 18-2: Meniul Report

Capitolul 18 Afiarea datelor sub form e rapoarte

219

Exemple
Tema 1. Folosirea Quick Report
Problema
Fie baza de date CONTRACTE (nr_contr N(3), data D, nume_benef C(10),
nume_prod C(10), pret_promis N(5), cant N(5), data_livr D), care reine contractele
comerciale a produselor unei firme. Se cere afiarea situaiei contractelor ncheiate la
data curent sub forma unui raport:
LISTA CONTRACTELOR
nr_contr
data
..

nume_benef

pret_promis

cant

Rezolvare:
1. Apelm generatorul de rapoarte cu comanda CREATE
REPORT sau selectnd File, New, Report.
2. Deschidem tabela CONTRACTE n mediul de date
asociat raportului, selectnd Data Environment din
meniul View sau din meniul contextual al raportului.
3. Selectm Report, Quick Report; se deschide
fereastra Field Layout, ce permite alegerea formei i a
coninutului raportului (Fields).
4. Cmpurile care vor fi folosite pot fi selectate din
fereastra Field Picker.
5. Plasm o band de titlu selectnd Report, Title i dm
titlul raportului folosind butonul Text.
Figura 18-3:
Tabela CONTRACTE
6. Inversm coloanele Cant cu Pret_promis.
n Data Environment
7. Selectm File, Page Setup i stabilim caracteristicile
globale ale raportului
Aranjarea
din fereastra care
datelor pe
Aranjarea
apare. Putem preciza
coloane
datelor pe linii
(tabel)
numrul de coloane
(etichet)
(Number),
distana
Valorile vor
pn la prima coloan
avea ca
(Left Margins), limea
Deschide
titlu numele
ecranul Fields
de cmp
coloanelor (Width) i
Picker pentru
distana dintre ele
selectarea
Cmpurile
(Spacing). Raportul
cmpurilor
vor fi
poate fi structurat pe
calificate
coloane sau pe linii
prin clic pe butonul Figura 18-4: Fereastra Quick Report
Print Order.
n general, imprimantele las o zon la marginea hrtiei unde nu se afieaz nimic
(opiunea Printable page). Dac alegem Whole page, atunci ntreaga pagin fizic este
folosit pentru raport.
220

Informatic Manual pentru clasa a XII-a

8. Raportul poate fi previzualizat


selectnd View, Preview sau
folosind meniul contextual. Prin
previzualizare observm comportarea raportului pe setul de
date. Observai bara de instrumente asociat. Revenim n
modul de proiectare selectnd
View, Design sau prin nchiderea ferestrei Preview.
9. Dac suntem mulumii de
funcionarea raportului, salvm
prin combinaia <CTRL>+<W> Figura 18-5: Fereastra Page Setup
sau selectnd File, Save R1.rfx.
10.Utilizm raportul prin comanda: REPORT FORM R1 FOR data=date()

Tema 2. Proiectarea unui raport pas cu pas


Problema
Plecnd de la tabela CONTRACTE (nr_contr N(3), data D, nume_benef C(10),
nume_prod C(10), pret_promis N(5), cant N(5), clauze M) care reine contractele
comerciale, s se proiecteze urmtorul raport:

Observai fereastra de proiectare a raportului (fig. 18-6).


Proiectul trebuie s conin ca titlu un text constant Lista contractelor i
intervalul de afiare dat din apel.
Numrul curent al contractului este obinut prin numrarea valorilor ntr-o variabil
local; cmpurile contract, data, beneficiar i clauze sunt cmpuri din tabel; valoarea
fiecrui contract este o expresie (cmp calculat) obinut din produsul pret*cant. La
sfritul raportului calculm valoarea total pentru contractele afiate. Obinem raportul
numai pentru contractele produsului X ntr-un fiier text cu numele Lista.txt.

Capitolul 18 Afiarea datelor sub form e rapoarte

221

Figura 18-6: Fereastra de proiectare a raportului

Rezolvare:
1. Deschidem tabela Contracte.
2. Crem variabilele globale D1 i D2 ca interval de selecie dorit; prin fereastra de
comenzi li se atribuie valori.
3. Intrm n generatorul de rapoarte prin CREATE REPORT Z.
4. Deschidem benzile de titlu i nsumare (Report, Title) i plasm textele dorite
pentru titlu i cap de tabel (clic pe butonul Text).
5. Plasm intervalul D1-D2 n fereastra de proiectare pe banda de titlu astfel:
a) Executm clic pe butonul Field; se deschide fereastra Report Expression,
n care introducem direct numele unei variabile sau deschidem fereastra
Expression Builder.
S
comentm
puin
aceast fereastr: pe linia
Expression putem introduce
direct expresia care va fi
afiat. Prin clic pe butonul
alturat
se
deschide
Expression Builder, care
permite construirea rapid a
expresiei. Poziia expresiei
afiate n banda unde este
definit poate fi precizat i Figura 18-7: Fereastra Report Expression
prin butoanele radio: Float
mobil fa de liniile deasupra ei2; Fix relative to top fix fa de marginea
superioar a benzii; Fix relative to bottom fix fa de marginea de jos a benzii.
Opiunea Stretch with overflow permite extinderea n jos a cmpului raportului ct
este necesar pentru a cuprinde tot coninutul sursei de date.
2

222

Este de obicei asociat unui cmp Memo i clauzei strech. De exemplu, o adres care
poate avea mai multe linii deplaseaz obiectul plasat sub ea. Este o situaie pe care o vom
exemplifica ulterior.
Informatic Manual pentru clasa a XII-a

b) Selectm variabila D1 din lista de variabile publice (creat la intrarea n


proiectare; numele variabilei apare n lista utilitarului).
c) Plasm linia separatoare prin butonul Label.
d) Plasm variabila D2 n acelai mod ca i variabila D1.
5. Completm bara Detail cu prima coloan numrul curent al contractului,
alegnd una dintre variantele prezentate n continuare:
a) Definim variabila Nr selectnd Report, Variable; apare ecranul Variable
Definition; dm valoarea iniial zero i executm clic pe butonul radio (.)Count.
Comutatorul Release After Report face ca variabila s fie definit local
raportului i s fie tears la terminarea acestuia. Seciunea Calculate conine
principalele funcii care pot fi aplicate pentru calculul valorii variabilei respective
n raport. Astfel, butonul Count permite ca variabila s conin numrul de linii
din tabel, sum suma valorilor expresiilor din definiia variabilei etc.

Expresia de calcul
a valorii poate fi
introdus direct
sau compus

Variabila va fi
reiniializat la
terminarea unui
grup/pagin/raport

Figura 18-8: Fereastra Variable Definition

6.
7.
8.

9.

b) Executm clic pe butonul Field i alegem din Expression Builder un cmp


numeric (de exemplu, Nr_contr). n fereastra Report Expression executm
clic pe butonul Calculations. Observm aceleai funcii de calcul ca i n
fereastra Variable. Alegem opiunea (.)Count.
Plasm cmpurile Data, Nume_benef, Clauze pe banda de detaliu prin aceleai
manevre.
Stabilim formate corespunztoare fiecrul cmp (ecranul Format).
Pentru proiectarea cmpului calculat Valoare din banda Detail care va afia
produsul ntre pre i cantitate, procedm astfel: apsm butonul Field, iar n zona
de editare a expresiei introducem produsul Contracte.Pret_promis*contracte.Cant.
Putem folosi Expression Builder.
Parcurgem urmtorii pai pentru proiectarea cmpului calculat Valoare din
banda Summary care va afia suma valorilor contractelor:
a) Deschidem fereastra pentru inserarea unui cmp (clic pe butonul Field, fereastra
Report Expression) i introducem expresia: contract.Pret_promis *contract.cant
b) Afim fereastra Calculate i selectm butonul radio (.)Sum, indicnd operaia
de totalizare la nivel de raport a acestei expresii.
Capitolul 18 Afiarea datelor sub form e rapoarte

223

10. Salvm (File, Save).


11.Executm raportul printr-un program p1.prg.
P1.prg
accept dati data de inceput to d1
d1=ctod(d1)
accept dati data de sfirsit to d2
d2=ctod(d2)
accept produs? to x
report form z for nume_prod=x and between(data,d1,d2) to print

Putem seta condiiile de tiprire pentru fiecare cmp prin fereastra Print When.

La afiare se vor folosi doar


valorile distincte ale cmpului
Afiarea primei benzi ntr-o nou pagin
Este identificat grupul care trebuie
s-i schimbe valoarea pentru
ca obiectul cmp s fie afiat

La afiarea valorii se va testa


expresia introdus

Figura 18-9: Fereastra Print When

Nu se vor afia liniile goale

Tema 3. Utilizarea benzilor de grup


Problema
Pentru fiecare
Fie tabela CONTRACTE
beneficiar va fi
din temele anterioare. Se
afiat numele
(codul)
cere un raport care grupeaz toate contractele
Vor urma toate
pe parteneri. Pentru fiecontractele sale
care partener vor fi afiate
numerotate, cu
numrul, valoarea fiecrui
numrul, data i
valoarea lor
contract, iar la sfritul
listei numrul de
contracte i valoarea
La finalul de
total. Raportul va fi afiat
grup va fi
n fiierul Grup.txt.
specificat
numrul total de
Indicaii:
contacte i
1. Deschidem baza
valoarea lor
de date CONTRACTE i indexm dup nume_benef.
2. Selectm Report, Data Grouping. Introducem numele cmpului folosit ca i
cheie de grupare n zona de editare sau construim prin Expression Builder.

224

Informatic Manual pentru clasa a XII-a

3. Stabilim proprietile grupului:


start group on new column
este cazul rapoartelor multicoloan, care ncep o nou
coloan pentru o alt valoare
a expresiei de grupare;
start each group on a new
page ncepe fiecare grup pe
pagin nou
reset page number to 1 for
each group numeroteaz
paginile de la 1 pentru fiecare
grup;
reprint group header on
each page tiprete antetul
pe fiecare pagin a raportului,
chiar dac nu ncepe un nou Figura 18-10: Fereastra Data Grouping
grup;
start group on new page when less than fixeaz o distan minim fa
de marginea inferioar a raportului, astfel nct s nu nceap un grup cnd
nu este suficient spaiu pentru cteva linii mcar.
4. Revenim la ecranul de proiectare i completm obiectele cmp pe benzile
corespunztoare; despre modul de proiectare a cmpurilor calculate am discutat
deja la tema anterioar.
5. Previzualizm (Report, Preview).
6. Salvm (File, Save).
7. Rulm cu comanda Report form x.

Tema 4. Folosirea rapoartelor pentru mai multe tabele


Problema
Baza de date despre contractele i facturile
trimise beneficiarilor n contul acestor
contracte conine tabela CONTRACTE.DBF
(nr_contr N(5), nume_benef C(10), data D,
nume_prod c(10), pret_promis N(7), cant N(5),
clauze M) i FACTURI.DBF (nr-fact N(5), data D,
nr-contr N(5), nume_benef C(10), nume_prod
C(10), cant N(5), pret N(7)). Legtura dintre
cele dou tabele este realizat prin Nr_contr
(numrul contractului).
S se realizeze o situaie a facturilor pentru
fiecare contract n parte. Facturile sunt afiate
cu numrul, data i valoarea fiecreia. La
terminarea listrii facturilor unui contract se va
afia totalul valorii facturate.

Figura 18-11: Tabelele CONTRACTE i


FACTURI

Capitolul 18 Afiarea datelor sub form e rapoarte

225

Indicaii:
1. Deschidem tabelele (izolate) n baza de date Contracte i stabilim o legtur 1-n
ntre Contracte i Facturi.
2. Intrm n proiectare prin Create Report sau selectnd File, New, Report.

3. Deschidem Data Environment i adugm tabelele Contracte i Facturi.


Observm c legtura este 1-1. Pentru a o transforma ntr-o legtur 1-n editm
legtura (dublu clic pe legtur n fereastra Data Environment) i modificm n
ecranul Properties atributul One-to Many=.T.
4. Deschidem benzile de titlu i nsumare (Report, Title).
5. Plasm informaiile pe benzi, alegnd fiierul corespunztor.

Figura 18-12: Proiectarea raportului

Salvm i lansm n execuie prin Run, Report.

226

Informatic Manual pentru clasa a XII-a

Observaie. Putem stabili contextul de lucru la proiectare prin fereastr, stabilind ca


opiunea Report, Private Data Session s fie activ. Aceeai secven
de stabilire a legturii va fi plasat i n procedura de apel a raportului.
Use contracte in 1
Use facturi in 2
Select contracte
Set relation to nr_contr into facturi
Set skip to facturi
Report form ff

Tema 5. Folosirea raportului cu funcii utilizator


Problema
Pornind de la baza de date Contracte din exemplele anterioare se cere un raport
sintez care afieaz n stnga datele despre contract, iar n dreapta informaiile
despre facturile contractului, sub forma urmtoare:

Va fi folosit o funcie utilizator care returneaz pentru fiecare nr_contr un ir cu


informaii despre facturile acestuia. Astfel, n banda de detaliu, vor fi trecute att
informaiile despre contracte (partea din stnga), ct i despre facturile lor (partea din
dreapta). Pentru c variabila are lungime diferit, se va selecta clauza Stretch.
Pai:
1. Deschidem baza de date n Data Environment. Ambele tabele sunt indexate
dup Nr_contr.
2. Deschidem ecranul de proiectare a raportului i grupm dup Nr_contr.
Observai ecranul de proiectare (figura 18-13).

Figura 18-13: Proiectarea raportului


Capitolul 18 Afiarea datelor sub form e rapoarte

227

3. Pe banda de detaliu la nivelul grupului trecem att textele explicative, ct i


cmpurile din fiierul contracte: Nr_contr, data, nume_benef, clauze (care va
avea comutatorul Stretch);
4. Crem variabila m.varfunct de tip C, cu valoare iniial irul vid i cu valoare
memorat o funcie utilizator. Exemplu: Store value=contr().
5. Plasm variabila m.varfunct n stnga zonei proiectate i fixm comutatorul
Stretch pentru aceasta.
6. Salvm raportul.
7. Scriem programul de apel care va avea i funcia utilizator contr().
Programul apel_fff
conine funcia necesar
raportului. Se execut
programul cu
DO apel_fff

Apel_fff.prg
report form fff
return

function contr
cvar=
select facturi
seek facturi.nr_contr
scan while facturi.nr_contr=contracte.nr_contr
cvar=cvar+str(nr_fact,5)+
+ dtoc(data)+
str(pret*cant)+;
chr(13)+chr(10)
&& trecerea la un nou rand
endscan
select contracte
return cva

Aplicaia Report Wizard


Report Wizard este folosit pentru rapoarte simple, caz n care asistentul va cere
doar fiierele i cmpurile pe care dorii s le folosii. Exist mai multe forme de
rapoarte care pot fi realizate cu aplicaia wizard: rapoarte simple pe baza unui singur
fiier sau rapoarte cu date din mai multe fiiere legate dintr-o baz de date.
Aplicaia Report Wizard se apeleaz selectnd Tools, Wizard, Report.
One-to-Many Report Wizard
Pasul 1. Deschidem tabela printe i selectm cmpurile care vor forma
raportul. De exemplu, dorim o situaie a contractelor care s aib asociate
toate facturile acestora pe fiecare contract n parte. Selectm cmpurile
tabelei Contracte.
Pasul 2. Deschidem tabela copil i alegem cmpurile care vor fi trecute n
raport. n exemplul nostru, folosim tabela Facturi.
Pasul 3. Stabilim cheia de legtur ntre tabele. n cazul nostru scriem:
Contracte.nr_contr= facturi.nr_contr.
Pasul 4. Fixm cmpurile de ordonare. n cazul nostru punem data
contractului.
Pasul 5. Salvm ca fiier .Qpr, pe care l putem rula imediat (opiunea
Save and Run) sau putem intra n Query Designer (opiunea Save query
and modify it in Query Designer). La fiecare pas pot fi previzualizate
rezultatele.
228

Informatic Manual pentru clasa a XII-a

Ultima fereastr permite alegerea formei de finalizare. Astfel, raportul poate fi


previzualizat pe ecran (Preview), i poate da un titlu (Enter a title for your report), poate
fi salvat pentru folosire ulterioar (Save report for later use), poate fi salvat odat cu
afiarea (Save and print report) sau se poate deschide fereastra de proiectare a
raportului pentru a i se face corecii.

Etichete
Etichetele (labels) sunt o alt modalitate de afiare a datelor. Etichetele pot avea
declarat o dimensiune, ca numr de linii i coloane, pot fi afiate cte una sau mai
multe pe limea hrtiei.
S ne gndim la necesitatea scrierii unor etichete pentru medicamente, colete
potale, cri de vizit. Tot etichete pot fi fluturaii cu informaiile despre salariul
fiecrei persoane dintr-o unitate. Informaiile nume-persoan, funcie, salar_brut,
reineri, sporuri etc. vor fi nsoite de comentarii, ncadrate n chenar i afiate pe mai
multe coloane pentru a face economie de hrtie.
Aceast form special de raport poate fi proiectat prin intermediul utilitarului
Label Designer. Utilitarul este asemntor cu Report Designer, folosete aceleai
instrumente (meniu, fereastr de proiectare, bar de instrumente). Singura diferen
este mrimea paginii folosite: dac Report Designer seteaz o pagin ntreag, Label
Designer i seteaz o mrime potrivit ncadrrii informaiilor n etichet.
Apelarea generatorului de etichete se face prin comanda:
CREATE / MODIFY LABEL <fis.lbx>
Comanda lucreaz n modul ecran i afieaz un meniu care permite proiectarea
unei etichete i salvarea proiectului ntr-un fiier special cu extensia .Lbx. Ecranul de
proiectare este acelai cu cel afiat de generatorul de rapoarte.

Lansarea n execuie
LABEL FORM <fis.lbx> TO PRINTER / TO FILE <fis.txt>
[<domeniu>] [FOR <cond>] [WHILE <cond>] [SAMPLE]
Comanda actioneaz pe articolele selectate prin clauzele <domeniu>, FOR, WHILE.
Afiarea poate fi fcut pe ecran, sub forma etichetelor de prob (cnd este prezent
clauza SAMPLE), la imprimant (TO PRINTER) sau ntr-un fiier text (TO FILE <fis. txt>).

Capitolul 18 Afiarea datelor sub form e rapoarte

229

Exemplu
Tema 6. Proiectarea unei etichete cu Label Designer
Problema
n vederea elaborrii unor invitaii, dorim afiarea numelui i adresei tuturor
destinatarilor (beneficiarilor) sub forma unor etichete, ca n exemplul urmtor:

Invitaiile vor fi scurte, deci


ncap mai multe pe pagin!

Rezolvare:
1. Deschidem fiierul Contracte i indexm unic dup Nume_benef.
2. Apelm generatorul
de etichete selectnd
File, New (.)Label
sau prin comanda
Dimensiunea
Create Label
zonei de
<nume-eticheta
proiectare
3. Alegem forma de
este calculat
etichet din formele
automat n
funcie de
predefinite afiate la
formatul
deschiderea
etichetei
generatorului.
4. Introducem informaiile
n banda de detaliu.
5. Previzualizm
prin Figura 18-14: Proiectarea etichetei
Report, Preview.
6. Salvm prin File, Save.
Executm prin comanda LABEL FORM sau selectnd Run, Label.
Dispunerea etichetelor pe foaia de afiare este realizat n funcie de configurarea
din fereastra Page setup, prezentat la Report Designer.

230

Informatic Manual pentru clasa a XII-a

Aplicaia Label Wizard


Poate fi apelat selectnd Tools, Wizard, Label; parcurgem ferestrele necesare
proiectrii etichetelor:
Pasul 1: Selectarea tabelei surs;
Pasul 2: Selectarea formei etichetei din cele prestabilte;
Pasul 3. Construirea machetei etichetei prin indicarea coninutului (texte i cmpuri
din tabela selectat);
Pasul 4. Ordonarea datelor;
Pasul 5. Salvarea etichetei i/sau modificarea acesteia.
Fiierul creat are extensia .lbx i este utilizat prin comanda LABEL FORM
<fis.lbx> sau selectnd Run, Label.
Etichetele sunt definite linie cu linie. Fiecare cmp selectat este trimis n lista
Selected Fields prin clic pe butonul Move >. Expresiile sunt construite nti n zona de
editare Text, apoi sunt mutate n Selected Fields. Nu uitai s includei un spaiu
separator ntre informaii!

O schi a
etichetei
poate fi
observat n
acest ecran

Pentru selectarea unui cmp se alege din list,


apoi se apas declanatorul >

Zona de
editare a
textelor

Pentru excluderea ultimului obiect din


linia etichetei se apas <

Figura 18-15: Folosirea aplicaiei Label Wizard

Grafice
Un alt tip de raport care poate fi realizat n mediul Windows prin intermediul
sistemului FoxPro i pe baza coninutului tabelelor gestionate de acesta, este raportul
sub form grafic. Dac o balan de pli a beneficiarilor poate fi reprezentat sub
forma unui tabel, fiele de cont ale clienilor arat bine realizate cu Label Designer,
un raport privind situaia vnzrilor lunare pe magazine este mult mai sugestiv sub
forma unui grafic. Desigur, o histogram poate fi realizat printr-un program de grafic,
dar pentru muli dintre noi este o activitate destul de dificil.
Utilitarul care realizeaz grafice este Graph Wizard, apelat selectnd Tools, Wizard,
All, Graph. Ca i la celelalte programe de asisten, parcurgnd paii indicai, poate fi
realizat un grafic care va fi salvat ntr-un cmp de tip General, numit Olegraph, al unei tabele
numit implicit Vfpgraph.dbf sau ca fiier .scx ce poate fi editat i executat prin DO FORM.
Capitolul 18 Afiarea datelor sub form e rapoarte

231

Atenie! Trebuie bine gndit ce grafic dorim s realizeze utilitarul, ce surse de date
are la dispoziie, pentru c reprezentarea grafic nu se poate referi dect la cmpurile
din tabela curent.
Exemplu
Tema 7. Proiectarea unui raport de tip grafic
Problema
Pentru fiierul contracte dorim variaia cantitii contractate de beneficiari pentru
produsul Pantofi.
Rezolvare:
1. Folosim generatorul de interogri pentru a totaliza tabela Contracte pe cmpul
nume_benef, cu filtrare pe produsul pantofi. Vom obine n coloana Cant totalul
cantitilor contractate pe beneficiari.
2. Deschidem utilitarul prin Tools, Wizard, All, Graph.
Pasul 1. Deschidem tabela de date pe care dorim s o folosim pentru
grafic (Contracte). Fixm cmpurile care vor fi trecute pe axe.
Pasul 2. Fixm axele. Pentru o ax OY este necesar un cmp numeric i
vom trece Cant. Pentru axa OX fixm cmpul Nume_benef i executm
tragere i plasare pn la fereastra din stnga.
Pasul 3. Alegem forma graficului.

Pasul 4. Salvm graficul ca tabel sau editm prin Browse.

sarcini de laborator
I.

FOTBAL: Proiectai o baz de date pentru evidena echipelor, juctorilor i


meciurilor dintr-un campinat de fotbal. Populai baza de date cu date de test.
1. Scriei comenzile SQL sau proiectai interactiv interogrile pentru a afla:
a) cine face parte din echipa X;
b) programul competiional pentru cupa Romniei;
c) unde joac X (la ce echip, de cnd..);
d) care sunt arbitrii pentru meciul x-y;
e) cu ce scor s-a ncheiat meciul x-y;
f) care este ordinea echipelor dup punctaj;
g) care este ordinea echipelor dup golaveraj.
232

Informatic Manual pentru clasa a XII-a

2. Proiectai formularele pentru vizualizarea i editarea datelor.


3. Proiectai urmtoarele rapoarte:
a) Pentru fiecare stadion pe care au loc meciuri, la planificarea acestora este necesar
s fie trimis cte o scrisoare cu urmtorul coninut. Proiectai-o prin Report
Designer!
FEDERAIA ROMN DE FOTBAL AMATOR
Ctre administraia stadionului................
Avem deosebita plcere s v anunm planificarea meciului
ntre...................i...................la data............pe stadionul dumneavoastr.
Rugm asigurai buna desfurare, eventual sponsorizare!
azi,................ora..........
Semntura,

b) Proiectai raportul final al


campionatului.
Pentru fiecare echip vor fi
afiate meciurile jucate i
scorul. La finalul raportului va
fi scris totalul golurilor
nscrise/primite de echipa
respectiv, punctajul.
c) Realizai un raport cu evidena
cronologic a meciurilor pe
stadioane. Pentru fiecare
stadion va fi afiat punctajul
maxim obinut de o echip
care a jucat n deplasare,
respectiv acas. La sfritul
raportului se vor calcula numrul total de meciuri jucate
i numrul total de goluri.

CAMPIONATUL NAIONAL DE FOTBAL


Situaie Final
Echipa...............
pag. x
data

loc

adversar

scor

total goluri nscrise......total goluri primite.......


total golaveraj......total punctaj.......

Lista meciurilor pe stadioane


Stadionul:................
data

echipa1

echipa2

scor

punctaj maxim (rezultat meci) n deplasare:......


punctaj maxim (rezultat meci) acas:.................
numr de meciuri jucate pe stadion:..................

4. Proiectai un formular tip prezentare a aplicaiei cu butoane care s deschid


formularele pentru editarea datelor i pentru rapoarte.

sarcini pentru realizarea


unui mini-proiect
Fiecare aplicaie va trebui s conin diverse raportri. Proiectai rapoartele
specifice aplicaiei, tiind c trebuie s avei:
1. un raport realizat pas cu pas cu date centralizate pentru o tabel;
2. un raport cu date preluate din mai multe tabele;
3. un raport care folosete funcii utilizator;
4. un raport realizat cu Report Wizard;
5. un raport de tip etichet;
6. un raport de tip grafic.

Capitolul 18 Afiarea datelor sub form e rapoarte

233

Capitolul

19

Proiectarea meniurilor
 Generatorul de meniuri Menu Builder

Meniul este un element de interfa indispensabil unui proiect informatic profesional.


Este un ansamblu de opiuni pus la dispoziia utilizatorului, prin care se exercit
controlul asupra aplicaiei. Meniul principal este plasat pe prima linie a ecranului
aplicaiei, peste sau n completarea barei de meniuri. Este recomandabil ca orice
operaie s poat fi declanat de utilizator prin alegerea ei dintre elementele meniului.
Meniurile pot fi de mai multe tipuri: grafice sau n mod text, orizontale sau verticale.

Generatorul de meniuri Menu Builder


Crearea meniurilor utilizator este mai uoar i mai rapid prin utilitarul numit Menu
Builder.
Apelul generatorului se face selectnd File, New (.)Menu sau prin comanda:
CREATE

/MODIFY

MENU <fis.mnx>

Exist dou tipuri de meniuri care pot fi create cu acest utilitar: meniuri utilizator
clasice, aezate pe linia zero, n locul sau n completarea barei de meniuri (tip menu)
i meniuri scurttur, de dimensiuni mici, afiate prin clic dreapta, plasate n fereastra
utilizatorului.
Pentru crearea meniului, proiectantul va indica numele opiunilor, operaiile
declanate de alegerea acestora, precum i caracteristicile globale ale mediului. Pe
baza specificrilor fcute n fereastra de proiectare, este generat un program care prin
lansare n execuie va activa meniul.
Programul obinut are extensia .Mnx i poate fi executat, ca orice program, prin
DO <fis.mnx>.
La lansare, Menu Builder deschide o fereastr de
proiectare i un meniu pe prima linie. Meniul Menu permite
construirea rapid a unui meniu asemntor celui standard
(Quick Menu), inserarea opiunilor (Insert item), inserarea
submeniurilor (Insert bar), tergerea opiunilor (Delete Item).
Comanda Generate permite transformarea proiectului ntr-un
fiier executabil. Preview ofer o previzualizare a
proiectulului nainte de finalizare.
Figura 19-1:
Fereastra de proiectare a meniului cuprinde elementele Meniul Menu
definitorii pentru proiectarea meniului principal al aplicaiei.
Partea principal conine numele opiunilor (Prompt), tipul aciunii declanate prin
selectarea opiunii (Rezult), care poate fi deschiderea unui submeniu, execuia unei
comenzi sau a unei proceduri. Fiecare opiune poate fi numit sau editat local n zona
alturat.
234

Informatic Manual pentru clasa a XII-a

Figura 19-2: Fereastra de proiectare a meniului

Pentru opiune se fixeaz cteva caracteristici (Options) cum ar fi:


tasta de selecie rapid n Shortcut;
Condiia ca opiunea s fie srit (Skip for);
Mesajul explicativ pe linia de stare la selectarea opiunii (message);
Alte comentarii pentru proiectant (comment).
Fixarea caracteristicilor globale ale meniului poate fi fcut prin fereastra General
Options, deschis selectnd View, General Options.
Butoanele Location stabilesc
poziia meniului relativ la linia zero
a barei de meniuri. Astfel:
Replace meniul utilizator
nlocuiete bara de meniuri;
Append meniul nou este
adugat la bara de meniuri;
Before/After meniul nou este Figura 19-3: Opiuni din fereastra General Options
aezat naintea/dup submeniul
indicat din lista derulant alturat, deschis la activarea butoanelor respective.
Pentru un meniu se poate defini un cod de iniializare (Setup) care va fi executat la
crearea meniului i de finalizare (Cleanup), executat la tergerea meniului de pe ecran.
Butonul Edit permite scrierea unei proceduri executate la activarea meniului.
Operaia de generare a programului este apelat selectnd Menu, Generate.
Odat generat, fiierul poate fi executat ca orice program, dar trebuie specificat
extensia .Mpr (pentru c la comanda DO se consider extensia implicit .Prg).
Bara de meniuri este disponibil oricnd dac folosim comanda SET SYSMENU
AUTOMATIC. Pentru activarea meniului Browse sau a altor operaii, folosim tasta F10
sau executm dublu clic. Dac exist setarea SET SYSMENU OFF, atunci bara de
meniuri este dezactivat.
Revenirea la afiarea meniului sistem Fox cnd terminm operaiile din meniul
utilizator se poate face prin SET SYSMENU TO DEFAULT.

Capitolul 19 Proiectarea meniurilor

235

Exemple
Tema 1. Paii proiectrii unui meniu
Problema
Fie baza de date CONTRACTE cu informaii despre contractele comerciale ale unei
societi comerciale i FACTURI cu evidena facturilor trimise beneficiarilor n contul
contractelor ncheiate. Structura celor dou fiiere este: CONTRACTE (nr_contr N(3),
data D, nume_benef C(10), nume_prod C(10), pret_promis N(5), cant N(5), data_livr D);
FACTURI(Nr_fact N(5), nr_contr N(5), data D, nume_prod C(10), cant N(5), pret N(5)).
Se cere elaborarea unui program care grupeaz principalele operaii legate de
evidena contractelor i facturilor.
Un astfel de meniu poate
fi cel alturat:
Rezolvare
Pasul 1. Apelm generatorul de meniuri prin comanda CREATE MENU sau selectnd
File, New (.)Menu. Se deschide fereastra de configurare a meniului principal (bar).
Pasul 2. Definim opiunile meniului principal:
tastm textul n zona Prompt (i indicm tasta rapid) (Introducere,
Actualizare, Afiare).
alegem aciunea dorit n cazul selectrii opiunii din lista nchis Result
(submeniu, procedur sau comand).

Figura 19-4: Definirea opiunilor meniului

Executnd clic pe butonul Create se deschide o fereastr n care pot fi definite


opiunile submeniului n acelai mod ca la meniul principal sau pot fi scrise comenzile
procedurii apelate.

Figura 19-5: Definirea opiunilor submeniului

Butonul Edit deschide ecranul pentru modificare. Pentru fiecare opiune, definim
submeniul dorit n acelai mod ca la meniul principal.
La ultima opiune de ieire din meniul bar se poate pune comanda SET SYSMENU
TO DEFAULT. De asemenea, se poate scrie comanda CLEAR EVENTS, ce determin
ncheierea tratrii evenimntelor.

236

Informatic Manual pentru clasa a XII-a

Pasul 3. n fereastra afiat selectnd View, General Options fixm SETUP


(procedurile de deschidere a fiierelor, asocierea indecilor, stabilirea relaiilor) i
CLEANUP (procedurile de nchidere-tergere a ecranului, nchiderea fiierelor). i n
Cleanup se poate pune comanda SET SYSMENU TO DEFAULT.
Specificm zona unde va fi plasat meniul creat (View, General Options, Location
(.)Replace).
Pasul 4. Generm programul (Menu, Generate) sub numele Contracte.mpr.
Pasul 5. Executm programul generat prin comanda do contracte.mpr.

sarcini de laborator
1. Scriei un programmeniu care permite planificarea meciurilor dintr-un campionat,
nscrierea rezultatelor pentru toate meciurile dintr-o zi dat, afiarea clasamentului.
(Punctajul se calculeaz astfel: 3 puncte pentru un meci ctigat, 1 punct pentru
meci egal, zero puncte pentru un meci pierdut. Golaverajul reprezint diferena
ntre golurile date i cele primite.)
2. Realizai un meniu scurttur, ca n figura 19-6.
3. Realizai un submeniu pentru activitatea de aprovizionare a unei uniti economice, i anume determinarea
necesarul de aprovizionare. Revedei modalitile de
calcul la capitolul despre interogri.
Figura 19-6:
Realizai un meniu ca n figura 19-7:
Meniu scurttur

Figura 19-7: Meniul aplicaiei de aprovizionare

Opiunea Vizualizare permite afiarea fiierelor (Read only).


Opiunea Actualizare permite corectarea fiierelor: Plan, Stocuri, Consum.
Opiunea Calcul determin i afieaz necesarul de aprovizionat.
La terminare, se va reveni la bara de meniuri n FoxPro.

Capitolul 19 Proiectarea meniurilor

237

Capitolul

20

Proiecte i aplicaii






Conducerea aplicaiei printr-un program monitor


Organizarea aplicaiei sub form de proiecte
Generarea aplicaiilor executabile (.App, .Exe)
Construirea dischetelor de distribuie
Etape n realizarea unei aplicaii informatice

Conducerea aplicaiei printr-un program monitor


n general, o aplicaie cuprinde o multitudine de programe, ecrane, rapoarte,
meniuri, care au fost scrise pentru un scop comun i care sunt incluse ntr-o singur
aplicaie executabil. Pentru buna funcionare a ansamblului este necesar ca toate
operaiile pe care le face aplicaia s poat fi lansate din opiuni ale unui meniu.
De regul, exist un program principal sau monitor care deschide o fereastr sau o
bar de meniuri, de care sunt legate toate celelalte operaiuni. Acest program mai are
o sarcin important: aceea de a configura un mediu particular aplicaiei fr s
deterioreze mediul gsit.

Observaie: la realizarea unei aplicaii informatice este foarte important s fie creat
un mediu stabil i coerent, fr a face presupuneri legate de parametrii implicii.
Configurarea existent a mediului va fi salvat la intrarea n aplicaie i refcut la
terminarea aplicaiei.
Mediul este configurat cu comenzi SET. Preluarea valorii curente a oricrui
parametru stabilit cu comanda SET se face prin funcia SET().
Iat cteva aspecte de luat n considere la proiectarea programului principal al aplicaiei:
1. Sunt salvate valorile curente ale parametrilor de mediu SET.
2. Sunt ncrcate toate fiierele de proceduri i de clase, precum i bibliotecile API
necesare.
3. Sunt deschise bazele de date.
4. Sunt configurai n mod corespunztor parametrii aplicaiei (mai ales cei referitori
la tabele, SET DELETED, SET EXCLUSIVE, SET MULTILOCK etc.).
5. Este stabilit o rutin de tratare a erorilor cu comanda ON ERROR.
6. Este selectat i deschis fiierul de asisten.
7. Sunt stabilite i iniializate variabilele globale sau variabilele clasei aplicaiei.
8. Sunt activate meniul principal i bara de instrumente. Comanda DO apeleaz
programul generat de Menu Builder ca fiier .mpr.
9. Este pornit procesorul de evenimente.
10.Sunt restabililii parametrii de mediu modificai.

238

Informatic Manual pentru clasa a XII-a

Exemple
Exemplul 1: n tema anterioar am proiectat un meniu al aplicaiei Contracte.mpr.
Pentru aplicaia noastr ne propunem s scriem un program cu 3 funcii: una de
salvare a parametrilor de mediu; alta de lansare a meniului aplicaiei i a treia de
restaurare a parametrilor dup terminarea aplicaiei.
Principal.prg
Configurarea mediului
Do contracte.mpr
salvare parametri de mediu
OldEx=SET(exclusive)
Read Events
Oldtalk= SET(talk)
Olddel=SET(Deleted)
Oldpath=SET(Path)
Olddir=FULLPATH(CURDIR())

Restabilirea mediului
Pop menu _Msysmenu
Set exclusive &OldEx
Set talk &Oldtalk
Set deleted &Olddel
! Cd (Olddir)
Set path to (Oldpath)

Programul generat de Menu Builder nu este un obiect, ci definete i afieaz


meniul aplicaiei, ns nu are propriul gestionar de evenimente. Comanda READ
EVENTS activeaz sistemul de meniuri i, n plus, activeaz ciclul de procesare a
evenimentelor. Ea continu tratarea evenimentelor pn n momentul lansrii comenzii
CLEAR EVENTS. Programul continu cu linia de dup READ EVENTS. Locul cel mai
potrivit pentru plasarea comenzii CLEAR EVENTS este cel n care ai plasat opiunea
de terminare a meniului.

Organizarea aplicaiei sub form de proiecte.


Project Builder
Prin proiect FoxPro nelegem un ansamblu de fiiere
de proceduri, formulare, rapoarte, meniuri, care vor fi
folosite n comun pentru crearea unei aplicaii executabile.
Evidena acestui ansamblu de fiiere este dificil, mai
ales cnd numrul lor este
mare.
De aceea, programatorii
pot folosi utilitarul Project
Builder n dou moduri:
Figura 20-1: Fereastra Project Manager

Capitolul 20 Proiecte i aplicaii

239

1. Pentru sistemele informatice deja construite, utilitarul permite gestionarea


fiierelor. Acest lucru presupune ca utilizatorul s includ manual fiierele n
fereastra gestionarului. Este o operaie destul de complicat, de aceea se
recomand folosirea Project Manager pentru organizarea aplicaiei de la zero,
apoi pe msur ce este construit.
2. Pentru sistemele informatice care urmeaz a fi construite, utilitarul este un
adevrat centru de comand al ntregii activiti de construire: de aici se pot
lansa toate celelalte instrumente FoxPro pentru dezvoltarea aplicaiei.
3. Utilitarul Project Manager poate fi lansat selectnd File, New, Project sau prin
comanda CREATE PROJECT.

Operaii cu fiierele din Project Manager


1. Un fiier sau element al proiectului poate fi adugat dup poziionarea pe
subdirectorul corespunztor tipului fiierului i apsarea butonului Add. Apare o
fereastr pentru localizarea fiierului, iar acesta este plasat n subdirectorul
proiectului.
2. Crearea unui nou fiier poate fi fcut dup selectarea directorului corespunztor tipului su prin clic pe butonul New, care afieaz fereastra de creare.
3. tergerea unui fiier poate fi fcut
prin clic pe butonul Remove.
Fiierul poate fi ters doar din
proiect sau chiar de pe disc.
4. Putem s executm un
fiiermachet sau un program prin clic
pe butonul Run; astfel putem s
(re)vedem rezultatele programului.
La deplasarea peste directoarele cu
rapoarte sau etichete, caseta de
dialog pune n eviden butonul
Preview, prin care putem previzualiza fiierul.
5. Modificarea unui fiier poate fi fcut Figura 20-2: Fereastra Build Options
prin clic pe butonul Modify, care
apeleaz utilitarul Designer potrivit.
6. Recompilarea fiierelor este posibil prin clic pe butonul Build, care deschide
fereastra Build Options. Prima opiune, Rebuild Project, nseamn
reconstruirea proiectului. Opiunea Recompile all files permite ca la selectare
s fie recompilate toate componentele proiectului, iar dac rmne neselectat
determin recompilarea numai a elementelor care au suferit modificri fa de
data ultimei construiri a proiectului.

Observaie. Un proiect este de fapt o tabel cu o structur special, avnd


extensia .Pjx. nregistrrile corespund elementelor proiectului. Includerea unui
element ntr-un proiect nu nseamn includere fizic, ci doar memorarea informaiilor
legate de fiier (poziie pe disc, data ultimei modificri etc.).

240

Informatic Manual pentru clasa a XII-a

Generarea aplicaiilor executabile cu Project Manager


Project Manager permite ca, pe baza componentelor din arborele de directoare, s fie
obinut automat un fiier executabil sau o aplicaie. Acest lucru poate fi realizat prin clic
pe butonul Build, care deschide fereastra Build Options, ce conine urmtoarele opiuni:
 ReBuild Project parcurge toate fiierele proiectului n vederea generrii
codului surs i/sau a depistrii erorilor.
 Build Application parcurge toate fiierele proiectului pentru a construi o
aplicaie dependent de mediul Fox, pe care o vom lansa cu comanda DO
<fis.App>.
 Build Executable genereaz un fiier executabil independent de mediul
FoxPro. Build Executable genereaz proiectul i nglobeaz fiierele, la fel ca n
cazul generrii aplicaiei, dar adaug modulele speciale Fox pentru rulare
(Runtime), ct i bibliotecile i modulele necesare pentru fiierele .Exe.
La solicitarea de generare a unei aplicaii are loc (re)compilarea automat a
componentelor. Dac procesul de compilare decurge normal, ultimul mesaj din bara de
stare este build application completed (construirea aplicaiei s-a ncheiat). Dac
selectm Display Errors, erorile de compilare vor fi prezentate detaliat ntr-o fereastr,
dup compilare.

Atenie! n produsele executabile exist unele comenzi sau opiuni care nu sunt
disponibile: SET STEP, SET ECHO, BUILD PROJECT, MODIFY MENU/PROJECT,
MODIFY QUERY, SUSPEND, CREATE VIEW.
Ecranul Project information din meniul Project poate consemna diferite informaii
despre un proiect. |n afara informaiilor pivind autorul i asigur drepturile de autor
codul generat este individualizat cu ajutorul informaiilor referitoare la autor i dat.
Directorul Home este directorul rdcin al proiectului. Caseta Debug info permite
includerea sau excluderea numerelor de linie din codul surs n fiierele compilate.
Acest lucru este esenial
la depanarea aplicaiei.
Informaiile referitoare la
programul i liniile care au
generat eroarea rmn n
fiierul de erori i permit
corectarea.
 Caseta de validare
Encrypt comunic
programului FoxPro
s cifreze fiierele
compilate, asigurnd
protecia mpotriva
pirateriei software.
 Caseta Attach Icon
permite asocierea
unei pictograme
proiectului.

Figura 20-3: Fereastra Project Information

Capitolul 20 Proiecte i aplicaii

241

 Lista lung de fiiere din tab-ul Files al ferestrei Project Information specific informaii
despre toate fiierele coninute n proiect. Ordinea de afiare poate fi schimbat prin
clic pe butoanele Type, Name i Last Modified.
 Caseta Included permite includerea sau neincluderea fiierului n aplicaia .App sau .Exe.

Specificarea fiierului principal al aplicaiei


Orice aplicaie trebuie s aib un fiier principal. Toate celelalte fiiere sunt
ancorate de acest fiier principal. Pentru specificarea acestuia, poziionm cursorul pe
fiierul dorit i selectm Project, Set Main.

Alte faciliti oferite de utilitarul Project Manager


1. Restrngerea ferestrei Project Manger la o bar de instrumente

Figura 20-4: Reducerea ferestrei Project Manager la o bar

Pentru c fereastra Project


Manager este o excelent
modalitate de organizare a
fiierelor aplicaiei, dar ocup un
spaiu destul de mare, sistemul
Fox ofer o facilitate: restrngerea ferestrei la o bar de
instrumente. Bara poate fi plasat pe primele linii ale ecranului
printre celelalte butoane. Pentru
a realiza transformarea ferestrei
Project Manager ntr-o bar de Figura 20-5: Observai butonul ce permite reducerea
instrumente, ne poziionm pe ferestrei la o bar
titlul ferestrei i executm clic pe
butonul cu sgeat n sus. Toate funcionalitile instrumentului Project Manager pot fi
folosite prin clic dreapta.

2. Ancorarea unui tab al ferestrei Project Manager


De asemenea, un tab (de exemplu, de documente)
poate fi ancorat ntr-un col al ferestrei utilizatorului astfel:
poziionm cursorul pe un tab al ferestrei n forma sa de
bar de instrumente, apoi tragem i plasm ctre o alt
zon a ecranului. Observm o fereastr ca n figur.
nchiderea sa va determina revenirea tab-ului la bara de
instrumente Project Manager.
Figura 20-6: Tab-ul ancorat

242

Informatic Manual pentru clasa a XII-a

3. Funcionarea ferestrei Project Manager ca meniu utilizator


Cnd este strns i ancorat, instrumentul Project Manager poate fi folosit ca meniu
al unei aplicaii. Ca orice meniu utilizator, dup poziionarea mouse-ului pe un fiier,
acesta trebuie s fie executat sau deschis pentru previzionare. Urmai paii:
1. Alegei Tools, Options, Projects;
2. Din fereastra ce apare selectai butonul radio Run din grupul Project doubleclick action.

Realizarea dischetelor de distribuie


Dup ce am realizat o aplicaie, este necesar s ne punem problema distribuirii ei
ctre client. Transportul aplicaiei se face pe dischete (se pot folosi i CD-uri!) ntr-un
format compactat. Dischetele de distribuie trebuie s conin toate componentele
necesare rulrii aplicaiei. Dac am realizat fiere .app este necesar s fie n prealabil
instalat mediul FoxPro. Dac am realizat fiere .Exe nu mai este necesar instalarea
Visual FoxPro pentru execuie.
Oricum, ceea ce trebuie s realizm este gruparea fiierelor aplicaiei pe dischete
i oferirea unui program care s fac instalarea programului la destinatar.

Utilitarul de construire a dischetelor de distribuie Setup Wizard


S pornim de la exemplul anterior. Am realizat aplicaia alfa.app. Toate fiierele
se gsesc pe directorul C:\ALFA. Ne propunem s realizm programul de instalare i
dischetele de distribuie.
Pasul 1: Selectm directorul n care se gsete aplicaia pe care dorim s o trecem
pe dischete. Este imperios necesar ca toate fiierele proiectului din care a fost generat
aplicaia (nu numai fiierul .App sau .Exe) s se afle ntr-un director separat. n cazul
nostru, folosim c:\ALFA.
Pasul 2: Selectm din lista afiat componentele speciale folosite de aplicaie:
Visual FoxPro Runtime este necesar cnd distribuim aplicaia sub form executabil.
Dac aplicaia folosete grafice, bifm opiunea Microsoft Graph. Opiunea ODBC
Drivers... va fi bifat dac n sistemul informatic distribuit exist conexiuni ctre baze
de date externe mediului FoxPro.
Pasul 3: Specificm un director pe discul de lucru imagine a dischetelor care vor
fi construite de generator. De asemenea, specificm formatul dischetelor de distribuie
(3,5 inch, 1,44 Mb). Opiunea Web Setup este folosit la crearea unui director care
conine toate fiierele n
form comprimat, pentru
distribuirea aplicaiei pe
internet. Net Setup este
folosit n cazul instalrii n
reea, cnd kit-ul de instalare
nu este mprit din segmente. n cazul nostru vom
bifa opiunea 1.44Mb.
Figura 20-7: Specificarea fiierelor

Capitolul 20 Proiecte i aplicaii

243

Pasul 4: Introducem titlul aplicaiei n caseta de dialog Setup Dialog Box Caption.
Numele autorilor i informaiile de copyright vor fi introduse n Copyright Information.
Post Setup Executable permite introducerea numelui unui program care va fi
executat la sfritul instalrii aplicaiei.
Pasul 5: Precizm directorul implicit care va fi creat pe discul de destinaie, n care
vor fi plasate fiierele aplicaiei la instalare, Default Directory. Dac dorim adugarea
aplicaiei n meniul Start al sistemului de operare Windows sau, n general, pentru
crearea unui grup de pictograme ale aplicaiei, folosim Program Group.
Pasul 6. Afim o tabel cu
fiierele aplicaiei. Pentru fiecare
poate fi specificat n coloana
Target Dir dac fiierul urmeaz
s fie instalat n directorul aplicaiei (AppDir) sau n directorul
Windows (WinDir) sau n directorul Windows/System (WinSysDir).
n vederea specificrii unor
proprieti ale fiierului, cum ar fi
asocierea unei pictograme, se Figura 20-8: Fereastra Program Group Menu Item
deschide fereastra Program Manager Item prin clic pe PM Item.
Pasul 7: nainte de nceperea generrii kit-ului, putem crea o arhiv autoextractiv
n vederea distribuirii optime pe internet, prin opiunea Generate a web executable file.
Pentru crearea dischetelor de instalare, Setup Wizard efectueaz urmtoarele operaii:
1. Verific arborele de distribuie n cutarea fiierelor noi sau actualizate;
2. Actualizeaz propriul tabel de fiiere;
3. Comprim toate fiierele;
4. Sparge fiierele n felii de dimensiunea unei dischete.
Dup generarea dischetelor, este afiat o statistic asupra numrului de dischete,
spaiul ocupat de fiierele de pe fiecare dischet etc.

244

Informatic Manual pentru clasa a XII-a

sarcini de laborator
Liceul de Informatic are o baz de date necesar evidenei personalului i
calculul salariilor. Considerm urmtoarele tabele:
PERS (cod, nume, adres, studii, data-naterii, data-angajrii, funcia, salar-brut,
este-diriginte, specialitatea, catedra, grad didactic, alte-inf), care reine toate datele
personale ale fiecrui angajat;
REINERI (cod-persoana, cod-reinere, suma, perioada-de-reinere), cu obligaiile
personalului ctre terI; perioada de reinere poate fi dat ca interval de dou date
calendaristice;
SALARII (luna, cod-persoan, numar-ore-suplimentare, total-reineri, total-sporuri,
impozit, rest-plata), cu date despre salariile angajailor n fiecare lun a anului current.
tim c:
Vechimea este calculat n ani i se acord un spor de vechime (mrit
procentual cu 5% din salariu la fiecare 5 ani vechime).
Ora suplimentar se pltete ca o or obinuit, dar este impozitat cu 10%.
Salariul brut se consider cuvenit pentru o norm de 18*4 ore/lun.
Se acord spor de periculozitate tuturor cadrelor didactice care sunt dirigini
(3% din salariul brut).
Avansul chenzinal este 45% din salariul brut.
Realizai un program condus de un meniu principal pentru activitatea de
administrare a salariilor, care s cuprind urmtoarele activiti:
a. vizualizarea i editarea informaiilor legate de persoane, reineri, salarii;
b. afiarea listei avansului chenzinal ca o situaie simpl cu numele i avansul
cuvenit persoanei;
c. afiarea raportului retribuiilor sub forma urmtoare:
LISTA RETRIBUIILOR........
cod

nume

funcia salar-brut vechime

sporuri

reineri

total sume

xxxxxx

xxxx

xxxx

avans rest-plat
xxxx

xxxxx

d. afiarea unor fluturai cu toate informaiile legate de plata salariului;


e. afiarea graficului ponderii totalului reinerilor n total salarii brute pe unitate.

sarcini pentru realizarea


unui mini-proiect
Integrai ntr-un program unitar componentele realizate pe parcursul leciilor
anterioare. Construii meniul i programul principal. Folosii Project Manager i generai
o aplicaie executabil. Generai dischetele de distribuie.
Capitolul 20 Proiecte i aplicaii

245

Capitolul

21

Dezvoltarea profesional
n domeniul IT





Identificarea aptitudinilor pentru anumite tipuri de activiti


Crearea unui CV i reguli de susinere a unui interviu
10 reguli n susinerea unei prelegeri
Principii de lucru n echip

Domeniul IT este n plin expansiune n ara noastr, iar perspectivele profesionale


pe care le ofer n alte ri sunt i ele interesante. Apariia continu a noilor tehnologii,
provocrile intelectuale i satisfaciile profesionale, dar i recompensele materiale pe
care le primesc angajaii din acest domeniu sunt printre factorii care determin muli
tineri s se orienteze ctre IT. Acest capitol v prezint pe scurt cteva sfaturi de care
s inei cont dac v gndii s v construii o carier n IT.

Identificarea aptitudinilor pentru anumite activiti


Dei ai putea fi tentat de un post bine pltit de programator, de tester de inginer
software, trebuie s v gndii mai nti dac suntei potrivit pentru postul vizat, att ca
pregtire tehnic, dar i din punctul de vedere al calitilor personale pe care le presupune.
Iat cteva profesii din domeniul bazelor de date i calitile necesare pentru ele:
Administrator de baze de date este de obicei acea persoan care administreaz
instrarea datelor dintr-o firm, controlnd modificrile structurilor de date, stocarea unor
noi proceduri, meninerea i funcionarea optim a bazelor de date.
Programator de aplicaii pentru baze de date poate c tii programare, dar avei
nevoie de experien de lucru cu datele. Abilitile de lucru cu bazele de date v vor
ajuta s atacai lumea aplicaiilor pentru baze de date, care au un impact direct asupra
operaiunilor unor firme. ns, ca s dezvoltai o aplicaie pentru baze de date destinat
unei firme, trebuie mai nti s nelegei foarte bine ntreaga activitate a firmei.
Analist pentru baze de date poate nu dorii s dezvoltai programe, ci suntei mai
degrab o persoan care nelege bine firma i datele legate de aceasta. Un post cheie
n acest amalgam este cel de analist al bazei de date. Analitii sunt planificatori cheie
n designul unei baze de date; s nu uitm c proiectarea i dezvoltarea aplicaiilor sunt
diferite, iar primul pas este proiectarea.

Crearea unui CV i reguli de susinere a unui interviu


Dup ce ai stabilit zona profesional care v-ar interesa i v-ai dat seama c avei
calitile tehnice i personale pentru un anume post, cum vei face s l obinei? La
solicitarea oricrui post de munc, angajatorul v va solicita un CV (curicullum vitae).
Acest document are n general o structur-tip, urmnd anumite abloane, iar rolul su
cel mai important este de a convinge un potenial angajator c suntei persoana
potrivit pentru postul respectiv.
Structura conine cteva zone principale, pe care le completai cu datele proprii:
Date personale: adres, telefon, adres e-mail, vrsta etc.
Educaie: atest nivelul de cunotine pe care l avei, prin lista colilor i a
cursurilor urmate i a titlurilor pe care le-ai obinut n urma absolvirii lor.
246

Informatic Manual pentru clasa a XII-a

Experien profesional: conine detalii despre locurile de munc anterioare,


responsabilitile pe care le-ai avut n diferite posturi i succesele pe care le-ai
obinut n munc
Diverse alte informaii, ca aptitudini, pasiuni i interese personale, faptul c
deinei permis de conducere, avei stagiul militar satisfcut, nu avei cazier etc.
Este bine s inei cont c, n funcie de postul pe care l solicitai, putei schimba
structura i coninutul CV-ului, pentru a scoate n eviden aspectele pe care le
considerai mai relevante pentru compania i postul respectiv. Dup ce ai realizat CVul i ai aplicat pentru (ai solicitat) postul vizat, compania a fcut o selecie a
candidailor i v-a convocat la un interviu. Cum trebuie s v comportai la interviu
pentru a face nc un pas spre obinerea postului? Iat cteva sfaturi:
Meninei o atitudine deschis i pozitiv
Rspundei sincer i concis la ntrebrile care vi se pun
Insistai asupra aspectelor bune, a calitilor i succeselor pe care le-ai nregistrat
Informai-v asupra companiei, a activitii pe care o desfoar i a succeselor
pe care le-a nregistrat
Pregtii ntrebri despre companie, detalii despre post, colegi, mediul de lucru
mbrcai-v adecvat domeniului i postului solicitat

10 reguli n susinerea unei prelegeri


Referatele i prezentrile pe care le-ai susinut n cadrul orelor de la coal sunt un
bun nceput pentru cele pe care le vei avea de susinut mai trziu, pe parcursul
activitii dumneavoastr profesionale. Iat cteva reguli care v vor netezi drumul spre
susinerea cu succes a unei prelegeri:
Pregtii coninutul prezentrii
Pregtii sala: lumin, aezarea scaunelor, locaia prezentatorului
Pregtii echipamentul: configurai computerul, rezoluia ecranului, dezactivai
screen saver-ul, proiectorul
Pregtii notele
Stabilii msuri de urgen pentru situaii neprevzute
Planificai-v micrile n timpul prezentrii
nelegei caracteristicile publicului
Stabilii strategii de captare a interesului publicului
Stabilii strategii de calmare a celor care ntrerup i deranjeaz prezentarea
(public public ostil)
Facei o repetiie nainte de susinerea propriu-zis, cu ajutorul unui prieten

Principii de lucru n echip


Domeniul IT este unul dintre domeniile n care munca n echip este esenial. Produsele
software sunt rezultatul muncii n echip, iar eficiena echipelor este vizibil i n succesul de
pia al acestor produse. Un bun team player tie s asculte, s pun ntrebri, s conving,
s respecte ideile altora, s ajute, s comunice, s participe la activitatea echipei.
Organizai o echip i stabilii roluri: unii vor fi
angajatori, ceilali candidai. Candidaii i vor
pregti CV-urile i participarea la interviu, iar angajatorii vor seleciona CV-urile, vor pune ntrebri
i vor alege unul sau mai muli candidai. La sfrit, discutai despre modul cum a decurs
activitatea, stabilind ce ai fcut bine i unde trebuia s procedai n mod diferit. Realizai
i susinei o prezentare n faa colegilor de clas privind activitatea voastr.

Sarcini pentru realizarea


unui mini-proiect

Capitolul 20 Proiecte i aplicaii

247

Capitolul

22

Teme opionale
 Protecia bazelor de date
 Tehnici avansate de gestiune a structurii conceptuale
a tabelelor

Protecia bazelor de date


Exploatarea actual a datelor se face utiliznd din ce n ce mai mult configuraii cu
un numr mare de utilizatori i cu volum mare de prelucrri. Majoritatea SGBD-urilor
permit exploatarea bazelor de date distribuite pe mai multe maini, n reele eterogene
de calculatoare, de ctre utilizatori foarte diveri.
Exist dou cerine legate de protecia datelor cu care se lucreaz:
1. asigurarea confidenialitii informaiilor;
2. asigurarea integritii datelor prin protecia datelor n condiiile accesului
multiutilizator i impotriva defectelor hardware sau a erorilor programatorilor.

Confidenialitatea datelor
nseamn protecia mpotriva accesului neautorizat la bazele de date. Este rolul
administratorului de sistem de a decide necesitatea unui sistem de securitate i de a
menine integritatea acestuia. nainte de a defini un plan de securitate, este necesar s
fie detectate toate riscurile posibile i s fie analizate consecinele directe i indirecte
ale riscurilor. Iat cteva mecanisme de asigurare a confidenialitii datelor:
1. Parolele sau cuvintele de trecere (password) sunt organizate pe niveluri,
pentru identificarea utilizatorilor i a drepturilor lor de acces. Pot fi acordate drepturi
numai de citire sau/i de actualizare la ntreaga baz de date sau la o parte a ei.
Memorarea parolelor se face, de regul, de ctre administrator ntr-un fiier care are
drept cmpuri parola, utilizatorul i nivelul de acces. E bine ca numele dat acestui fiier
s fie ales cu grij. O bun idee ar fi criptarea parolelor.
2. Mecanismul de utilizare a fiierelor virtuale (imaginilor) adic a schemelor
externe ale bazei de date permite securitatea bazei n sensul restricionrii la nivelul
schemelor conceptuale a accesului la date al diferiilor utilizatori.
3. Criptarea datelor este operaia de codificare pe timpul stocrii sau transportului,
astfel nct descifrarea lor s fie posibil numai de ctre posesorii cheii. n practic este
frecvent utilizat sistemul DES (Data Encryption Standard), care are la baz un algoritm
de criptare public, dar utilizeaz o cheie de criptare privat.
4. Metodele biometrice de identificare, autentificare i acceptare/refuz a intrrii n
sistem a unei persoane se bazeaz pe amprente digitale sau genetice, decodarea vocii
sau studiul semnturii etc. Sunt deja larg folosite n sistemele militare, dar pot pune
unele probleme de etic.
248

Informatic Manual pentru clasa a XII-a

5. Cartelele microprocesor conin mecanisme de stocare i prelucrare a datelor


sub controlul propriului circuit, la iniiativa fabricantului. Este o metod sigur, cci nu
permite nici accesarea, nici modificarea programelor i a datelor coninute pe cartel.

Integritatea datelor
Un alt aspect legat de protecia datelor privete corectitudinea datelor introduse i
manipulate i se concretizeaz prin:
 asigurarea integritii semantice a datelor;
 controlul accesului concurent;
 salvarea i restaurarea bazei de date.

1. Asigurarea integritii semantice a datelor prin prevenirea introducerii


unor date incorecte i a efecturii unor prelucrri greite presupune includerea n
programele de aplicaie a unor secvene de testare a datelor i respectarea restriciilor
de integritate a bazei.
2. Controlul accesului concurent
Unul dintre principalele avantaje ale utilizatorilor de reele de calculatoare este faptul
c un program sau un fiier de date poate fi folosit de mai muli utilizatori fr a fi nevoie
ca fiecare dintre acetia s aib pe staia sa de lucru o copie a programului sau a fiierului
respectiv. n acest mod se economisete spaiu de memorie i timp. Un alt avantaj major
al folosirii bazelor de date n reelele de calculatoare este accesul utilizatorului la
versiunea actualizat a unei baze de date. Dar, n acelai timp, pot avea loc i situaii
conflictuale, cnd doi utilizatori doresc s modifice aceeai dat! Sistemul trebuie
controlat astfel nct datele s nu fie compromise sau actualizate necorespunztor.
Sistemul FoxPro permite utilizarea bazelor de date n dou moduri:
 modul privilegiat sau exclusiv (exclusive) permite accesul unui singur
utilizator la date;
 modul comun sau partajat (share) permite accesul mai multor utilizatori.
n cazul utilizrii comune a bazei de date de ctre mai muli clieni (n mod concurent)
este necesar aplicarea mecanismelor de protecie a datelor fa de accesul simultan.
Regula general este: nu este permis citirea unei nregistrri concomitent cu o scriere
n aceeai nregistrare. Deci nainte de citirea unor date dintr-un articol este necesar
blocarea accesului la scriere a celorlali utilizatori la nregistrarea respectiv.
A. Mecanisme de blocare
Blocarea se poate aplica la nivelul ntregii baze de date, la nivelul unui fiier, al unei
nregistrri sau chiar al unui cmp al articolului.
Tip de blocare
Implicit

Explicit

Nivel tabel
Append
Delete All
Recall All
Replace All
Update
Set Exclusive On
Set Lock On

Nivel articol
Nivel cmp
Append Memo
Modi Memo
Browse/Edit
Replace Record
Delete/Recall Record
Flock()
Lock()
Rlock()
Capitolul 22 Teme opionale

249

Exemple
Exemplul 1: Listarea unei tabele la imprimant fr ca, ntre timp, altcineva s poat
modifica fiierul.
use elevi
set lock on
list to printer
set lock off
use
Exemplul 2: Repetarea ncercrii de blocare a unei baze de date pn cnd aceasta
reuete.
set reprocess to 0
on error do eroare
procedure eroare
use test
retry
if flock()= .t.
return
sort on nume to man
unlock
use man
endif
B. Mecanismul tranzaciilor
Un alt mod de protejare a datelor n reea este organizarea operaiilor n tranzacii.
O tranzacie const dintr-o succesiune de comenzi elementare asupra unei tabele i a
fiierelor index i memo care o nsoesc. Orice tranzacie este caracterizat printr-un
punct de ncepere, o secven de operaii i un punct de sfrit.
n reea, euarea unei tranzacii poate avea loc din urmtoarele cauze: ntreruperea
curentului electric, eroare hardware la citire/scrire pe disc, eroare software, incident la
cablu sau conector etc. ntreruperea executrii unei tranzacii poate conduce la
alterarea datelor.
Spunem c este asigurat starea consistent a bazei de date atunci cnd baza
reflect rezultatele finale ale execuiei unor tranzacii, nici o tranzacie nu este n curs
de execuie i sunt respectate restriciile de integritate semantic.

3. Salvarea i restaurarea bazei de date


Dac prin funcionarea anormal a reelei sau cderea SGBD-ului sau prin alte
incidente hardware, tranzaciile nu se ncheie normal i exist pericolul unei deteriorri
a datelor, trebuie s apelm la mecanismul de refacere a strii anterioare, consistente
a bazei. Salvarea, din punctul de vedere al asigurrii integritii datelor, este procesul
de stocare a datelor n vederea restaurrii contextului anterior n cazuri extreme i
poate fi fcut prin:
a) copii de siguran (backup) ale bazei de date sunt realizate automat, fie de
ctre sistem, la anumite intervale de timp, fie de ctre administratorul bazei de
date. De regul, copia bazei de date este utilizat la cderea sau pierderea sau
distrugerea suportului care pstreaz baza, de aceea este bine s fie fcut pe
alt suport (disc, band magnetic).

250

Informatic Manual pentru clasa a XII-a

b) Jurnale de tranzacii reprezint fiiere speciale, ntreinute de monitorul SGBD,


ce conin o eviden riguroas a modificrilor efectuate asupra bazei, prin contabilizarea urmtoarelor informaii:
Identificatorul programului, utilizatorului i postului de lucru care face apelul;
Durata apelului;
Tipul modificrii (adaug, modific, terge) i articolele care au suferit aceste
modificri;
Natura tranzaciei sistem sau a aplicaiei;
Identificarea nclcrilor integritii bazei de date i semnalizarea erorilor
ctre utilizator.
c) Jurnale de imagini spre deosebire de jurnalele de tranzacii, nu conin operaiile
care au fost efectuate, ci efectul acestora. Pot fi:
jurnale cu imaginea datelor dup modificare;
jurnale cu imaginea datelor nainte de tranzacie;
jurnale ce conin ambele variante ale datelor nainte i dup dezastru.
Restaurarea bazei poate fi realizat automat de monitorul SGBD. Pe baza fiierelor
jurnal, se poate face reorganizarea structurii bazei dup accident, n sensul revenirii la
starea anterioar accidentului. Restaurarea poate fi fcut i de ctre administrator, prin
ncrcarea copiei de siguran celei mai recente, urmnd ca apoi s fie reluate prelucrrile.

Tehnici avansate de gestiune a structurii


conceptuale a unei tabele
O aplicaie la cheie trebuie s permit uneori construirea tabelelor conform
cerinelor particulare ale utilizatorilor, fr s le impun cunoaterea limbajului FoxPro.
Printr-un dialog cu utilizatorul, aplicaia informatic va trebui s obin informaiile
necesare la generarea structurii tabelei de date.
1. Comanda CREATE FROM ARRAY permite constituirea structurii unei tabele din
informaiile unui tablou.
CREATE TABLE <fis.dbf> FROM ARRAY <tablou>
Comanda preia numele cmpurilor din prima coloan a masivului <tablou>, tipul
din a doua coloan, lungimea fiecrui cmp din coloana a treia, iar numrul de poziii
zecimale din coloana a patra. Este creat numai structura tabelei.
Operaia invers, de transfer al informaiilor de structur ntr-un tablou, este realizat
de funcia Afields. Funcia AFIELDS (<tablou>) ncarc ntr-un tablou structura
unei tabele active. n prima coloan sunt memorate numele cmpurilor, n coloana a
doua tipul cmpurilor din structur, n coloana a treia lungimea i n coloana a patra
numrul poziiilor zecimale.

Capitolul 22 Teme opionale

251

Exemplu

S se creeze o nou tabel cu aceeai structur cu a fiierului


ELEVI.DBF, dar avnd cmpurile sortate alfabetic, iar cmpul nume va
fi nlocuit cu cmpul prenume (modificarea unui nume de cmp).

use elev
=afields(a)
poz=ascan(a, NUME, 1)
if poz# 0
a[poz]=PRENUME
endif
=ASORT(a)
create table b from array a

copiem n tabloul A structura fiierului elevi


cautm n tablou valoarea NUME
Dac se gsete
nlocuim cu valoarea PRENUME
sortm tabloul alfabetic dup prima coloan
copierea tabloului ca structur

2. Comanda CREATE FROM transform o tabel special (cu structur extins)


ntr-o structur obinuit n tabela <fis.dbf>
CREATE <fis.dbf> FROM <fis.dbf extins>
Sub numele de structur extins este folosit o tabel special avnd cmpurile:
FIELD_NAME, FIELD_TYPE, FIELD_LEN, FIELD_DEC i drept articole tocmai
cmpurile tabelei.
3. Comanda COPY STRUCTURE EXTENDED, cu formatul dat n continuare, folosete
tabela activ i creeaz structura extins pentru fiierul <fis.dbf extins>
COPY TO <fis.dbf extins> STRUCTURE EXTENDED
Baza de date cu structur extins nu este tears automat prin aceast manevr.

Exemple
Exemplul 1. Fie baza de date ELEVI (nume, pren, cls, media, absn, absm, dn). Vrem
s realizm o alt tabel care s aib numai primele trei cmpuri i ultimul (nume, pren,
cls, dn) fr s folosim denumirile acestor cmpuri1.
Varianta 1:
use elevi
copy to man structure extended
use man
go 4
dele rest

&&
#
1
2
3
4
5
6

recall record reccount()


pack
create nume from man
use man
append from elevi

observai tabela realizat prin comanda COPY EXTENDED:


FIELD_NAME FIELD_TYPE FIELD_LEN FIELD_DEC
NUME
C
10
0
PREN
C
6
0
CLS
C
3
0
ABSN
N
2
0
ADMIS
L
1
0
DN
D
8
0

1 Comanda Copy to cere precizarea cmpurilor care vor fi copiate.


252

Informatic Manual pentru clasa a XII-a

FIELD_IDX
Y
N
Y
N
N
N

Varianta 2
use elevi
for i=1 to 3
x=field(i)
set fields to &x
&& lista de campuri
endfor
copy to man
&&se va copia structura
use man
append from elevi

Varianta 3
use elevi
=afield(a)&& copiem structura
n=alen(a,1)
for i=1 to n-4
=adel(a,4,1)&&stergem coloanele
endfor
dimension a4,m
create table man from array a
use man

Exemplul 2. Dorim o aplicaie pentru concursuri colare. Procedurile sunt aceleai:


nscrierea concurenilor, introducerea notelor la fiecare prob, calcularea mediei i
determinarea reuiilor. Ce difer ns de la un concurs la altul? Numrul de probe,
denumirea fiecrei probe, poate sistemul de notare, modalitatea de a determina reuiii.
Deci ne propunem ca prima procedur din acest program s fie cea de construire
a tabelei particulare, specifice, unui anumit concurs (probele de examen sunt
notate de la 1 la 10). Urmrii variantele de rezolvare:
procedure creare_1

procedure creare_2

use manevra
set fields to nume, mg
input NR. DE PROBE: to n
for i=1 to n
var=ob+ltrim(str(i, 2))
set fields to &var
endfor
copy stru to concurs
use concurs
return

use manevra
copy stru exte to man
use man
dele all for field_name #NUME and.;
field_name#MG
input numar probe? to n
for i=1 to n
var=OB+ltrim(str(i))
recall for field_name=var
endfor
pack
create concurs from man
use concurs
return

procprocedure creare_3

procedure creare_4

create table X(nume C(20),


mg N(5,2))
copy stru exte to man
use man
input numar probe? to n
for i=1 to n
var=ob+ltrim(str(i))
append blank
repl field_name with var
repl field_type with n
repl field_len with 5,field_dec
with 2
endfor
create concurs from man
use concurs
erase X.dbf
erase man.dbf
return

crea table X(nume C(10), mg


N(5,2))
copy stru extended to man
use man
input numar probe? to n
for i=1 to n
append blank
accept obiect? to field_name
repl field_type with;
N, field_len with 2
endfor
create concurs from man
use concurs
delete file x.dbf
delete file man.dbf
return

Capitolul 22 Teme opionale

253

sarcini de laborator
1.

La proiectarea structurii unei tabele necesare nregistrrii persoanelor ce


lucreaz la firma AIRFRANCE S.A., cmpul adresa a fost dimensionat la 200
caractere. Modificai structura fiierului astfel nct dimensiunea acestui cmp s fie ct
mai mic, pentru a pstra informaiile iniiale fr trunchiere i fr spaii inutile.
2. Scriei un program care s creeze fiierul FIS.DBF (nume C(8), ext C(3)) cu toate
tabelele din directorul curent i s afieze toate fiierele care au structur identic.
3. La cantina colii sunt nregistrate intrrile i consumurile de alimente din fiecare
zi n fiierul ALIMENTE (data, cod-aliment, cod-micare, cantitate), unde cod-micare
este fie literele e =consum, fie i = intrri alimente).
tim c n fiierul STOCURI (nume-aliment, cod, pre, stoc) codificarea s-a fcut
odat cu sosirea unui nou aliment pe baza numelui i a preului acestuia. S se afieze
situaia urmtoare:
SITUAIA CONSUMULUI DE ALIMENTE |N LUNA...
cod/nume-aliment
pret
z1
z2
...
31
total-cant
total/zile
Xx
xx
...
xx
xxxxxxx

total-val
xxxxxxx

Alimentele vor fi trecute n ordinea alfabetic, pe preuri. Coloanele Z1-Z31 vor


conine totalul cantitilor de alimente consumate n zilele lunii solicitate. Pentru fiecare
aliment se calculeaz totalul cantitativ (coloana total cant) i valoric n lun (coloana
total-val). Pentru fiecare zi se calculeaz totalul valoric n ultima linie, notat total/zile.
4.

La un oficiu potal se ine evidena revistelor la care se poate face abonament


n fiierul REVISTE(cod_rev N(3), nume_rev C(10), pret N(6)). |n momentul sosirii unui
client care dorete abonament, se alege revista i se completeaz perioada, numrul
de buci solicitate, datele personale ale abonatului n tabela ABONAM( data D, nr_chit
N(5), cod_rev N(3), nume_pers C(10), Adr M, perioada C(5), nr_buc N(3)).
Se cer:
1. O procedur de introducere a datelor la abonarea unui client;
2. O procedur care s creeze structura unui fiier numit CENTRALIZ:
data

nr_chit

nume_pers

adr

nume_rev

L01

....

L12

3. O procedur de ncrcare cu date a fiierului CENTRALIZ din fiierele ABON i REV;


4. O procedur pentru calcularea valorii totale lunare a toturor abonamentelor
pentru revista X;
5. O procedur pentru afiarea numrului total de exemplare cerute prin
abonament pentru fiecare revist;
6. O procedur pentru aflarea cheltuielii fcute de o persoan X.
2

254

Vedei o variant de rezolvare la sfritul crii.


Informatic Manual pentru clasa a XII-a

Capitolul

23

Dezvoltarea unei
aplicaii informatice
 Aspecte teoretice
 Proiect final, sugestii de rezolvare

Aspecte teoretice
Ingineria software sau ingineria produselor program (software engineering) este un
domeniu care ncearc o abordare sistemic a proiectrii, operrii, ntreinerii i
dezvoltrii produselor informatice. Numele vine din alturarea cuvintelor software (care
reprezint att codul surs al unui program, ct i documentaia corespunztoare) i
engineering (care se refer la aplicarea unei abordri sistematice, tiinifice a
problemei, abordare care are drept scop rezolvarea corect i cu minim de efort a
problemei).

Principii n dezvoltarea software


procesul de realizare a unui produs informatic de o anumit complexitate poate
i trebuie s fie structurat ntr-o serie de etape/subetape/activiti bine
determinate;
n realizarea produsului informatic sunt antrenate diferite persoane, nu numai
informaticieni; de aceea, este necesar o bun organizare i specializare, o
repartizare precis a sarcinilor; se recomand folosirea tehnicilor speciale,
adecvate dimensiunii proiectului i etapei respective;
trebuie s existe o documentare bun, ntr-o form standardizat, a fiecrei faze
parcurse;
procesul trebuie s fie controlat tot timpul, iar abaterile constatate, mpreun cu
propunerile de remediere, trebuie semnalate celor care-l conduc i rspund de
buna lui desfurare;
pentru a avea sigurana c producem ceva util, trebuie s se in seama de
modificrile care apar n timpul desfurrii procesului, n primul rnd cele cu
caracter organizatoric i tehnologic, precum i de posibilele dezvoltri viitoare;
n toate fazele de dezvoltare a produsului trebuie antrenat beneficiarul lucrrii,
cel care va plti de fapt efortul. Acesta decide anumite variante de continuare a
lucrrilor, se obinuiete cu sistemul informatic, i poate clarifica anumite cerine
la timp i nu dup ce produsul este gata. Acest principiu este foarte important
pentru acceptarea lucrrii i conduce la o scurtare a perioadei de implementare
i a costurilor;
criteriul principal care trebuie s stea la baza realizrii produsului este cel
economic, trebuie estimate corect costurile i beneficiile;
Capitolul 23 Dezvoltarea unei aplicaii informatice

255

Produsele informatice nu-i dovedesc viabilitatea dect n msura n care


reunesc cerinele i interesele utilizatorilor. Ei dicteaz ce trebuie informatizat i
cnd anume. Se contureaz astfel anumite condiii de acceptare a produselor
soft: funcionalitate (s rezolve problemele organizaiei), rentabilitate (legat de
impactul economic provocat de introducerea sistemului), adaptabilitate
(capacitatea sistemului de evolua conform contextului) etc.

Ce doresc utilizatorii?
rspunsuri exacte i clare la probleme foarte diferite;
comunicare direct cu calculatorul n limbaje accesibile, de nivel conversaional;
independen a aplicaiilor fa de sistemul de calcul, astfel nct schimbarea
calculatorului s nu impun schimbarea softului;
produse compatibile cu cele anterioare i standarde (mai ales pentru
comunicaii);
controlul asupra datelor proprii;
un mod variat de introducere a datelor i de obinere a rezultatelor (voce,
imangine, text);
un pre mic i o durat de realizare mic.
Ingineria produselor informatice conine metode, tehnologii (instrumente) i
proceduri pentru conducerea i controlul produciei de software. Unii autori numesc
acest domeniu de activitate metodologia sau tehnologia realizrii produselor program.

Etapele principale de realizare a produselor informatice


Efortul de realizare a unui software este declanat de cererea unui client. Ca urmare
a descoperirii unor probleme, aspecte negative n instituia unde lucreaz sau pe care
o conduce, clientul dorete realizarea unui produs informatic care s rezolve
problemele. O alt situaie care poate declana cererea de soft poate fi dorina folosirii
tehnicii noi de calcul sau a unor metode noi de conducere (programare dinamic,
simulare etc.).

Etapa 1. Formularea problemei


Primul pas este luarea contactului cu clientul pentru clarificarea domeniului n care
va fi implementat produsul informatic, clarificarea problemei puse, a motivelor, a
costurilor estimative, a unor variante de rezolvare i inventarierea efectelor. Este un
moment decisiv pentru c, uneori, clientul i d seama c nu poate suporta financiar
efortul de dezvoltare a software-ului i renun.
Atenie! O problem nu este niciodat complet definit, exist ntotdeauna cel puin
cteva elemente subnelese, datorit cunotinelor din domeniul investigat pe care le
are cel ce pune problema, cunotine care nu sunt cunoscute de programator. Prin
urmare, un prim efort trebuie fcut spre enunarea clar, corect i complet a
problemei de rezolvat.

256

Informatic Manual pentru clasa a XII-a

Etapa 2. Analiza diagnostic a situaiei existente


Este etapa cea mai important pentru c permite stabilirea exact a cerinelor,
obiectivelor i limitelor produsului informatic. Acest lucru se face printr-un studiu complet
al activitilor desfurate n domeniul problemei, dar i al activitilor conexe. Prin
interviuri, chestionare i observri directe, prin cercetarea tuturor documentelor, actelor
etc. sunt clarificate cerinele clientului i sunt stabilite posibile variante de rezolvare.
Prima etap de analiz este culegerea informaiilor despre sistemul informatic
existent; este cea mai lung i foarte important. Scopul este cunoaterea detaliat a:
a) informaiilor, surselor i consumatorilor de informaii;
b) principalelor activiti legate de date: prelucrri, reguli de calcul, validri, puncte
de control, modaliti de arhivare;
c) principalelor acte normative, legi, decrete etc. care restricioneaz sistemul nou
(de exemplu, documentele tipizate au un coninut i un traseu deja fixat, care nu
poate fi modificat);
d) sistemului de codificare existent;
e) mijloacelor tehnice existente;
f) personalului implicat n fluxurile informaionale: numr, calificare etc.
Culegerea tuturor informaiilor despre activitile desfurate, modalitile de
conducere a acestor activiti i despre sistemul informaional existent se finalizeaz
printr-o analiz critic a situaiei existente: depistarea aspectelor negative i
identificarea cerinelor i obiectivelor noului sistem informatic, precum i a limitelor i
restriciilor de realizare.
n evaluarea sistemului, soluiile spontane reprezint o metod ideal de
concepere a scenariilor de tipul ce-ar fi dac?. O decizie tipic oscileaz ntre
varianta de mbuntire a sistemului existent prin schimbarea fluxurilor de informaii,
reducerea documentelor, schimbarea sarcinilor i varianta de informatizare. Avantajul
celei de a doua variante n ceea ce privete flexibilitatea, acurateea, promptitudinea cu
care se raporteaz orice fel de informaii trebuie pus n balan cu efortul (nu numai
financiar) pentru realizarea acesteia.
Studiul i analiza sistemului existent se fac prin intermediul mai multor tehnici,
dintre care amintim: tehnica interviului, tehnica chestionarelor, studiul documentelor,
observaia direct, tabele de decizie. n culegerea i analiza datelor despre sistemul
existent, dar i n urmtoarele etape, sunt folosite tehnici de reprezentare grafic a
fluxurilor de date, evenimente, structuri etc. Schemele i diagramele au avantajul c
sunt simple, redau logica sau cronologia prelucrrii fr ambiguiti i pot fi uor
interpretate. O imagine este mai sugestiv dect o mie de cuvinte.
a. Tehnica interviului
Scopul tehnicii interviului este obinerea ntr-un timp redus a informaiilor privind
orientrile practice, metodele i strategiile existente sau preconizate n rezolvarea
problemelor analizate. Interviul asigur:
obinerea informaiilor ct mai recente i ct mai complete;
compararea i verificarea informaiilor obinute prin alte metode sau tehnici;
culegerea unor date semnificative la locul producerii lor.
Capitolul 23 Dezvoltarea unei aplicaii informatice

257

Interviul poate fi folosit cu succes n toate etapele de concepere, realizare i


funcionare a sistemelor informatice, dar trebuie subliniat necesitatea ndeplinirii a
dou condiii pentru ca rezultatele obinute n urma unui interviu s fie cu adevrat utile:
a. meninerea n timpul interviului a unei atmosfere de ncredere i acceptare, cu
mare atenie de a nu trezi respondentului teama c e forat s dezvluie
informaii (strict) confideniale;
b. purtarea discuiilor n aa fel nct interlocutorul s neleag i s simt c ideile
lui vor afecta lucrrile care urmeaz s fie realizate, deci c opiniile sale vor fi
respectate.
Procedura de aplicare a tehnicii interviului cuprinde mai multe etape i presupune
respectarea mai multor condiii. Astfel:
1. pregtirea interviului se realizeaz naintea ntlnirii, cnd face o list cu
principalele ntrebri, punctele critice ale activitii asupra creia dorim informaii,
programul de lucru etc.;
2. interviul este preferat o atitudine neutr, nu foarte familiar, nici distant; se
iau notie sau se nregistreaz convorbirea dac interlocutorul accept, iar la
sfrit sunt recapitulate punctele principale ale discuiei, pentru a verifica dac
au fost nelese cerinele clientului. Nu uitai s mulumii i s cerei acceptul
unei eventuale revederi dac mai apar aspecte de clarificat;
3. dup interviu transcriei notiele, centraliznd datele culese. Identificai punctele
rmase nelmurite.
Concluziile interviului reflect starea elementelor sau a proceselor analizate i
posibiliti de remediere a unor deficiene existente.
b. Tehnica chestionarului
Tehnica chestionarului este recomandat cnd se dorete informarea asupra prerii
generale despre un anumit aspect, culegerea informaiilor de la un numr mare de
subieci n acelai timp, despre aceeai problem.
Tehnica chestionarului este folosit cnd cantitatea de informaii care trebuie
culeas este redus sau trebuie verificate anumite informaii obinute prin interviuri sau
observri directe. Fiind anonime, chestionarele ncurajeaz subiecii n completarea
rspunsurilor corect i cu sim critic (autocritic mai puin!!) dar se pierde legtura
afectiv cu persoana care rspunde i, evident, se evit rspunsurile la ntrebrile care
deranjeaz.
c. Tehnica observrii directe
Observarea direct a activitilor, n special a activittilor legate de sistemul informaional, asigur cunoaterea nemijlocit a situaiei existente. Se studiaz sarcinile
care formeaz coninutul unei activiti. De exemplu: dotarea cu tehnic de calcul i
folosirea acesteia, circulaia informaiilor, modaliti de stocare, timp de lucru etc.
Dac obiectivele propuse prin observare direct sunt clar precizate, atunci aplicarea
acestei tehnici duce la concluzii reale, care nu pot fi obinute prin alte metode sau
tehnici. De exemplu, informaiile cu caracter tehnic pot fi confruntate cu rezultatele
observrii locurilor de munc i a modului de utilizare a capacitilor de producie.

258

Informatic Manual pentru clasa a XII-a

Tehnica observrii directe se bazeaz pe instrumente specifice de lucru: sondaje,


cronometrri. Prin aplicarea lor se relev stri de fapt, deficienele existente i
posibiliti de ameliorare.

Etapa 3. Proiectarea
Urmrete conturarea unui model al viitoarei aplicaii, att al datelor ct i al
funcionalitilor. Soluia informatic aprobat n etapa precedent este structurat pe
componente relativ independente, sunt determinate resursele necesare i termenele
de realizare. Tot acum sunt estimate eficiena i impactul asupra oamenilor din
organizaia n care va fi implementat produsul. Etapa conine:
a) Proiectarea bazei de date, a tabelelor, a relaiilor dintre acestea, a regulilor de
validare, a condiiilor de integritate referenial etc.;
b) Proiectarea interfeelor de intrare: documentele noi care intervin n sistemul
informaional, fluxurile de informaii de la sursele de date ctre calculator,
precum i formularele de introducere a datelor n calculator;
c) Proiectarea interfeelor de ieire: documentele de raportare, graficele, precum i
fluxurile acestor documente ctre utilizatori;
d) Proiectarea prelucrrilor automate: proceduri sau interogri directe, modalitile
de apel;
e) Proiectarea programului monitor i a meniului principal al aplicaiei.

Etapa 5. Construirea i testarea aplicaiei


Etapa de construire poate fi unit cu etapa de proiectare pentru lucrrile de mai
mic amploare, mai ales prin folosirea unui mediu vizual de dezvoltare. ns testarea
produsului rmne deosebit de necesar, folosind date fictive, n vederea depistrii i
corectrii erorilor.

Etapa 6. Implementarea i experimentarea cu date reale a aplicaiei


Este realizat prin metode specifice dimensiunii i complexitii aplicaiei
informatice, n vederea validrii prin practic. Pentru fiecare aplicaie, este
experimentat funcionarea n condiii reale n paralel cu vechea procedur de lucru
pentru o anumit perioad de timp. Dac rezultatele sunt cele ateptate, atunci se
declar sistemul operabil i echipa de specialiti care l-a realizat las exploatarea
aplicaiei pe seama beneficiarilor.

Etapa 7. Exploatarea curent, ntreinerea i dezvoltarea


Activitatea de exploatare curent a sistemului informatic este evaluat permanent,
pentru a depista coreciile necesare. Coreciile pot fi de mic sau mare amploare i
formeaz activitatea de ntreinere sau dezvoltare a sistemului informatic.
Dac ns apar anumite schimbri tehnologice, restructurarea unitii sau noi
metode de conducere, atunci se impun o nou analiz i stategie.

Capitolul 23 Dezvoltarea unei aplicaii informatice

259

Documentarea aplicaiilor informatice


Trecerea de la artizanat la industrie n activitatea software a nsemnat cerine noi i
pe linia documentrii aplicaiilor. Programele generalizabile, folosite de un numr tot
mai mare de utilizatori, trebuie s fie nsoite de o documentaie clar i complet, care
s conin informaii n legtur cu funcia programului, structura general i de detaliu
a acestuia, datele de intrare i de ieire, specificaiile de realizare, implementare i
exploatare. Se apreciaz c aproape 10% din fondul de timp afectat activitii de
programare este utilizat pentru activitatea de documentare1.
n funcie de destinaia lor, distingem trei tipuri de documentaie:
A. Documentaia destinat utilizatorului, care include:
documentaia de prezentare a aplicaiei conine informaii generale, de
natur tehnic i economic, asupra produsului program n ntregul su;
este destinat potenialilor utilizatori; are un pronunat caracter comercial;
insist asupra posibilitilor oferite de produsul program, eventualele
performane care recomand produsul dintre mai multe programe similare
existente pe pia;
documentaia de utilizare conine informaii privind utilizarea curent a
produsului program: aria de probleme acoperit (limite, restricii), descrierea
intrrilor i ieirilor, procedurile de codificare i validare, procedurile de
interpretare a ieirilor, organizarea datelor, descrierea funcional a
procedurilor, metodele folosite, estimarea performanelor, exemple.
B. Documentaia destinat echipei de programatori. Constituind principalul mijloc
de comunicare ntre diversele categorii de specialiti din echipa de realizare, documentaiile formuleaz problemele care au fost rezolvate n etapa/subetapa/faza
curent i problemele ce urmeaz a fi rezolvate n etapele urmtoare.
C. Documentaia destinat echipei de ntreinere i dezvoltare a produsului
program, care cuprinde rezultatele activitii de elaborare i testare a
procedurilor. Se numete specificaie de realizare.
D. Documentaia destinat personalului unitii implicat n exploatare (operatori,
verificatori, administratori). Se numete manualul utilizatorului.
Specificaiile sunt pe plan mondial din ce n ce mai apropiate de o form
standard i, de regul, cnd se pronun acest termen, un specialist tie despre ce este
vorba. Uneori, la proiectele mici, cu scopul declarat de a ntocmi un singur tip de
specificaii cele de realizare etapele de proiectare logic i tehnic se pot contopi
ntr-una singur. Dar, atenie, sunt necesare persoane cu experien, care s nu fie
tentate s sar peste unele activiti obligatorii.
Documentaia trebuie s fie conceput modular, n aa fel nct fiecare categorie
de personal implicat n funcionarea sistemului informatic s o poat folosi n mod
independent; s fie clar, sugestiv, editat ntr-o form grafic adecvat, cu exemple
de utilizare, innd seama de pregtirea de baz a fiecrei categorii de personal, s fie
ntocmit n colaborare cu personalul beneficiar, receptat i nsuit de acesta
naintea etapei de implementare.

260

Dup Ingineria programrii vol. 2, pag. 53


Informatic Manual pentru clasa a XII-a

Proiectul final
Trebuie s realizai la nivelul fiecrei echipe de 2-3 elevi cte un proiect final, care
s demonstreze c avei att cunotinele necesare dezvoltrii unui proiect cu baze de
date, ct i deprinderile de a lucra n echip i de a v prezenta lucrarea.

Ce se cere?
1. s alegei o problem din lumea real;
2. s modelai baza de date necesar rezolvrii problemei;
3. s dovedii cunotinele necesare proiectrii bazei de date, a formularelor,
interogrilor, formularelor si rapoartelor n FoxPro;
4. s elaborai documentaia proiectului (Word+PowerPoint);
5. s prezentai lucrarea n faa colegilor i a profesorului vostru.

1. Activitatea de formulare a problemei


V sugerm ca, studiind exemplele din lumea real, din manual sau de pe Internet,
s construii un scenariu, o problem care necesit modelarea unei baze de date. De
exemplu, suntei patronul unei cafenele i dorii s tii care este consumul de cafea pe
lun, care lun este mai aglomerat, dac trebuie s mai angajai personal sau nu,
dac avei clieni nemulumii, dac ai avut sau nu profit!

2. Analiza situaiei existente


ntocmii fie de analiz, identificnd activitile care pot fi informatizate:
documentele specifice purttoare de informaii, fluxurile informaionale, prelucrrile
specifice. Facei o critic a situaiei existente. Imaginai mai multe variante de rezolvare
a problemei i analizai efectele fiecreia. Alegei o variant. Desenai schema
conceptual a bazei de date. NU folosii mai mult de 5 entiti. NU sunt necesare mai
mult de 5 interogri sau rapoarte!

4. Proiectarea aplicaiei
Identificai fluxurile de prelucrri, intrrile i ieirile, legturile dintre ele. Stabilii
entitile cu proprietile (atributele, tipul i lungimea) lor i cerinele de validare.
Determinai legturile dintre entiti; normalizai. Proiectai formularele pentru
culegerea datelor, pentru vizualizare i editare. Proiectai forma rapoartelor utilizator:
situaii centralizatoare sau grafice. Proiectai panoul de bord cum va fi prezentat
aplicaia, cum vor fi selectate operaiile specifice acesteia: meniuri, butoane, taste
funcionale. Proiectai schema de sistem a aplicaiei.

5. Construirea i testarea aplicaiei


Este momentul s creai baza de date cu tabelele ei i s impunei restriciile de
integritate. Populai baza de date cu date de test. Construii formularele de culegere i
vizualizare a datelor. Construii interogrile. Atenie la informaiile cerute, dac sunt
corecte i complete, dac forma lor este cea optim (alegei tabele sau diagrame).
Construii machetele rapoartelor. Unii componentele aplicaiei ntr-un tablou de bord
sau meniu.

Capitolul 23 Dezvoltarea unei aplicaii informatice

261

6. Implementarea aplicaiei
Pregtii datele de test i realizai testarea componentelor pe rnd, apoi integrai-le
n proiectul final. Realizai un grafic de implementare.

7. Documentarea
Fiecare echip va realiza o documentaie de prezentare a rezolvrii problemei n
fata clientului (n PowerPoint) i o documentaie de utilizare, cu detalii despre fiecare
component n parte (n Word).

8. Prezentarea proiectului
Trebuie s demonstrai c tii s lucrai n echip, c fiecare v-ai asumat un anumit
rol i l-ai realizat foarte bine. ncepei prin a prezenta membrii grupei, apoi problema.
Putei preciza restriciile i variantele de soluii propuse (dac sunt). Accentul ar trebui
pus pe explicarea clar a modelului conceptual al bazei de date (SCHEMA).
Aplicaia trebuie s fie modularizat, deci fiecare modul (fereastr) ar trebui s fie
explicat clientului prin funcionalitatea sa.
Prezentai documentaia scris. Puteti sugera i o posibil dezvoltare a proiectului.
Asigurai-v c v ncadrai n timp. La sfritul prezentrii, rspundei la ntrebrile
celorlalte grupe.
V reamintim cele 10 reguli pentru susinerea cu succes a unei prezentri:
1. relaxai-v i respirai adnc;
2. stai drept, adoptai o atitudine de ncredere n ceea ce vei spune;
3. concentrai-v asupra mesajului pe care dorii s-l transmitei, nu v lsai
perturbat de alte lucruri;
4. folosii un limbaj accesibil, corect;
5. pstrai contactul vizual cu ceva fee prietenoase i captai-le atenia asupra
subiectului pe care l dezvoltai;
6. nu v ludai i nici nu v cerei scuze;
7. ncadrai-v n timp;
8. nu v jucai cu indicatorul pe plan sau pe diapozitivul pe care l prezentai;
9. nu punei minile n buzunare;
10.mbrcai-v corespunztor.
Not. Este foarte important s discutai dup prezentarea proiectului final urmtoarele
aspecte: Ce parte din ciclul de via a dezvoltrii unei aplicaii informatice vi s-a prut mai
grea? Ce etap a durat mai mult? Preferai s analizai cerinele problemei, sau s
construii tabelele sau s scriei documentaia? Ce v-a plcut mai mult? Care funcie?

262

Informatic Manual pentru clasa a XII-a

Exemple de probleme
1. Firma Cori_Flame este specializat n producerea i comercializarea produselor cosmetice
i i organizeaz vnzarea ctre populaie prin intermediul distribuitorilor autorizai.
Fiecare persoan care dorete s fie distribuitor trebuie s fie recomandat de un distribuitor
deja autorizat, care va fi numit sponsor. La nscriere, persoana viitor distribuitor semneaz un
contract de fidelitate, comunicnd codul sponsorului i primete un cod sau numr de distribuitor,
care va fi folosit n toate tranzaciile cu firma. Codul este astfel realizat nct s permit legtura
cu sponsorul. Un distribuitor este activ dac are cel puin o comand n ultimele 6 luni.
Distribuitorul prospecteaz piaa i face o comand ctre firm, angajndu-se s comercializeze
anumite produse n anumite cantiti. Pe comand va fi notat codul distribuitorului i, pentru
fiecare produs, codul i cantitatea cerut. Marfa cerut nu poate fi returnat dect dac are
defecte. Operaiile de vnzare a mrfii se realizeaz de ctre distribuitor, care primete marfa
cerut prin comanda sa odat cu documentul numit factur. n factur sunt identificate
produsele, cantitile trimise, precum i preul de distribuie (separat se trece TVA). Factura are
un numr i o dat. Factura trebuie achitat n termen de 30 zile, altfel se percep penalizri.
Produsele comercializate de firma Cori_Flame au un pre de distribuie (pe care l pltesc
distribuitorii la achitarea facturii), un pre de vnzare (la care poate fi comercializat ctre
populaie) i un punctaj pentru stabilirea unei bonificaii de stimulare a vnzrii. Pe parcursul unei
luni sunt totalizate facturile achitate de un distribuitor i punctajul de vnzare. Nu este permis
nregistrarea unei noi comenzi de ctre un distribuitor care nu i-a achitat factura anterioar.
Comenzile servesc i la orientarea produciei. De obicei, mrfurile solicitate se afl n stocul
depozitului firmei, dar uneori cererea poate depi stocul existent, deci vor fi livrate i facturate
mrfurile (n ordinea nregistrrii cererilor), n funcie de cantitile existente.
Firma dorete:
evidena distribuitorilor (ci sunt nscrii, activi, cu credite restante etc.);
operaii de nscriere a noi distribuitori, retragere la cerere, scoatere din eviden
pentru distribuitorii inactivi n ultimul an;
gestiunea produselor comercializate de firm, prin nregistrarea intrrilor i a ieirilor,
modificri de preuri sau punctaje;
gestiunea cererilor (nscriere cerere, facturare cu scoaterea cererii din eviden;
gestiunea facturilor (trimiteri, achitri).
2. Suntei angajat al unei companii specializate de recrutare i selectie a personalului.
Orice firm trimite oferta de posturi disponibile, cu avantajele i cerinele fiecruia.
Candidaii au acces la oferte i i trimit CV-ul.
Dumneavoastr avei sarcina de a asista firmele n decizia de angajare, ordonnd CVurile primite n funcie de cerinele postului.
Cum vei face?
1. V documentai pe Internet i vedeti ce posturi n domeniul IT sunt oferite n ar.
2. Pentru fiecare post, facei o list cu avantajele oferite: salariu, transport, concedii,
condiii de lucru.
3. Pentru fiecare post, facei o list cu cerinele postului: studii, experien, calificri
suplimentare.
4. Memorai ntr-o baz de date persoanele care se nscriu la concurs, nregistrnd
CV-ul fiecreia, poza, telefonul.
5. Notai observaiile dup interviu.
6. Afiai CV-urile n funcie de studii.
7. Ordonai CV-urile dup experien.
Sarcini suplimentare
1. Completai-v CV-ul personal!
2. Facei o list cu intrebrile interviului pentru ocuparea unui post n domeniul IT.
Capitolul 23 Dezvoltarea unei aplicaii informatice

263

STUDIUL

DE CAZ

Analiza diagnostic, proiectarea bazei de date


i a formularelor de introducere
 Folosirea formularelor i a schemelor pentru clarificarea problemei
 Imaginarea unor variante de rezolvare i analiza consecinelor fiecreia

Problema
La casa de schimb valutar S.C. PATRICIA S.R.L. este necesar un program care
ajut agentul de schimb la desfurarea activitilor sale. Astfel, agentul primete
dimineaa cursul valutar i sumele disponibile din fiecare moned. Pe parcursul zilei,
desfoar operaii de cumprri i vnzri de valut, iar seara afieaz situaii
centralizatoare, precum:
a. lista tranzaciilor din ziua respectiv;
b. situaia financiar: stoc iniial n lei la nceputul zilei, total lei intrai prin operaii
de vnzare valut, total lei pltii din cas prin operaii de cumprare valut,
stocul final;
c. lista operaiilor de tip vnzare valut, pe tipuri de monede, cronologic.
S se realizeze o aplicaie care s permit att gestiunea diferitelor monede, ct i
a tranzaciilor efectuate la o cas de schimb valutar.

Analiza diagnostic
F1. Cine i ce face?
Prezentm principalele sarcini legate de problem, pe posturi de lucru, urmrind
care pot fi reduse, eliminate, schimbate sau automatizate.

264

Cine?

Ce face?

Perioada

Poate fi automatizat?

eful

Hotrte CE valute se
tranzacioneaz i preurile
de vnzare-cumprare ale
acestora.

Zilnic

Nu, deocamdat.

Operator

Afieaz cursul valutar.

Zilnic

Da, dac avem informaiile


primite de la ef.

Operator

Decide dac un client poate


fi refuzat; nregistreaz
operaiile de vnzarecumprare de valut

Zilnic

Da, tiind c o tranzacie se


refer numai la valute care
pot fi comercializate.
Cantitatea cerut va fi

Informatic Manual pentru clasa a XII-a

n documente primare
numite buletin de schimb
valutar.

comparat cu stocul de valut


existent; oferta de valut va fi
comparat cu suma de lei
disponibil.

Operator

Afieaz situaii centralizate


pe tipuri de tranzacii, pe
valute etc.

Zilnic

Da, dac sunt memorate toate


datele despre o tranzacie!

Operator

ndosariaz copiile dup


buletinele de schimb, cursul
valutar i situaiile
centralizate n dosarul zilei.

Zilnic

Da, vom salva activitatea unei


zile n istoric.

F2. Care sunt documentele?


Ca purttoare de informaii, trebuie s inventariem toate documentele care sunt
primite sau sunt completate n sistemul informatic analizat.
Cod
Bc

Nume document
Buletin de schimb

Listt

Situaia tranzaciilor 1/zi de ieire;


se introduce
n dosarul zilei.
Cursul valutar
2/zi; de ieire;
unul este afiat,
iar unul se reine
la dosarul zilei.

listv

Volum, tip
200 exemplare/zi;
de ieire.

Observaii
Elaborat de operator; certific
desfurarea tranzaciei;
un exemplar este dat clientului i
unul este pstrat la sediul firmei.
Elaborat de operator; folosete la
evidena centralizat a tranzaciilor;
este trimis efului.
Elaborat de operator; folosete la
situaia centralizat i la
informarea clienilor; este
trimis efului.

F3. Cum arat documentele?


Exchange Office Patricia
Iai, str. Vasile Conta, nr.7
CURSUL VALUTAR
Azi, 1.01.2003
Nrcrt

Valuta

Cumparare

vanzare

Dolar

30000

3200

Euro

28000

29000

Exchange Office Patricia


Iai, str. Vasile Conta, nr.7
Buletin de schimb
Nr 1234/din 1.01.2003, ora 14:30
Client POPESCU MIRCEA cu CI 123456 a
cumprat cantitatea de 100 dolari la cursul de
40000 LEI/USD
Suma achitat clientului =100 USD
Suma ncasat de la client= 4000000 LEI
Semntura,

Studiul de caz I

265

Proiectarea bazei de date


Pentru studiul de caz observm c exist dou categorii de informaii pe care s le
gestionm: despre valute i despre tranzaciile cu aceste valute. Legtura ntre cele
dou entiti este de tipul 1-n: o tranzacie se refer la o singur valut; pentru o valut
pot fi nregistrate mai multe tranzacii.

Restricii i limite
1. Presupunem c vom solicita doar numele clientului nu i buletinul, adresa etc.
2. Pstrm tranzaciile n ordinea sosirii lor nu nregistrm ora!

Figura S1-1: Tabelele valute i tranzacii

Proiectarea formularului pentru introducerea unei tranzacii

Figura S1-2: Proiectarea formularului tranzaciei

266

Informatic Manual pentru clasa a XII-a

Formularul de introducere a unei tranzacii are mai multe sarcini:


a. introducerea datelor despre un nou client, a tipului tranzaciei (C=cumprare,
V=vnzare) a cantitii de valut solicitate sau oferite;
b. introducerea numelui valutei sau alegerea din valutele existente printr-un obiect
de tip list;
c. afiarea informaiilor despre cursul valutar i stocul existent;
d. afiarea stocului n lei nainte i dup tranzacie;
e. avertizarea situaiei de refuzare a tranzaciei: la cumprare de valut, suma n lei nu
acoper valoarea valutei oferite; la vnzare, stocul de valut existent este sub cerere;
e. operarea n tabelele Valute i Tranzacii numai dac tranzacia poate fi efectuat;
f. refacerea situaiei anterioare tranzaciei numai dac se constat necesitatea
anulrii tranzaciei dup operarea ei.

Pai n proiectarea formularului pentru adugarea unei tranzacii


Pasul 1. Apelm Form Design.
Pasul 2. Deschidem fereastra Data Environment, n care includem cele dou
tabele, astfel nct lista cmpurilor (Field List) este automat completat.
Pasul 3. Plasm pe formular urmtoarele cmpuri din tabela Tranzactii: client,
tip_tranzacie, cantitate (de tip Textbox). Observm proprietatea Control Source.
Pasul 4. Pentru cmpul cod_valut care este cheie extern proiectm un
obiect de tip Combo fixnd proprietile:
ControlSource=tranzactii.cod_valuta;
RowSource=valute.nume_valuta,cod_valuta;
RowSourcetype=6.
De fapt, beneficiind de ferestrele deschise de Combo Box Builder, vom indica mai
simplu aceste proprieti ale obiectului de control. S nu uitm: utilitarul poate fi apelat
din meniul contextual, selectnd opiunea Build.

Figura S1-3: Alegerea elementelor pentru obiectul Combo

Studiul de caz I

267

Figura S1-4: Alegerea valorii pentru obiectul Combo

Pasul 5. Plasm pe formular cmpurile de tip textbox pentru preul valutei i nivelul
stocului final. Denumirile acestor obiecte sunt sugestive! Pentru c nu dorim ca prin operare
s fie modificate valorile, folosim proprietatea ReadOnly=.T. Observm schimbarea
culorii asociate cmpurilor de editare. De fapt, este de preferat ca pentru operaia de
cumprare s fie afiat preul de cumprare, iar cellalt s nu fie vizibil i invers.
De aceea, vom fixa deocamdat proprietatea Visible=.F. n procedura click
asociat butonului Cmccalcule schimbm proprietatea la valoarea .t. fie pentru
txtpret_cump, fie pentru txtpret_vanz.
Pasul 6. Pentru stocul2 n lei lum dou variabile: lei_init i lei_final, pe
care le memorm n fiierul Stoc_lei.mem. n fereatra de comenzi dm valori iniiale
celor dou variabile i salvm cu SAVE TO STOC_LEI.
Pasul 7. Proiectm caseta de text (textbox) pentru stocul final n lei i dm ca
valoare coninutul variabilei m.lei_final; vezi procedura click asociat butonului
Cmccalcule.
CmdCalcule. clic()
RESTORE FROM STOC_LEI
thisform.txtlei_final.value=m.lei_final
**************cautare valuta si pozitionare
******************pe articolul acesteia
sele VALUTE
locate for valute.cod_valuta=;
thisform.combo1.value
thisform.refresh
****************schimbare atribut Visible
thisform.txtstoc.visible=.T.
if thisform.txttip_tranzactie.VALUE$Cc
****************cumparare valuta
thisform.txtpret_cump.visible=.t.
thisform.txtpret_vanz.visible=.f.
2

268

Este o variant de lucru care exemplific i folosirea variabilelor.


Informatic Manual pentru clasa a XII-a

thisform.txtvaloare.value=thisform.txtcantitate.value * thisform.txtpret_cump.value
thisform.txtleidupatranzactie.value=;
m.lei_final-thisform.txtvaloare.value
iif thisform.txtleidupatranzactie.value<=0
=messagebox(atentie, nu aveti bani suficienti!)
endif
else
*******************vanzare valuta
thisform.txtpret_cump.visible=.f.
thisform.txtpret_vanz.visible=.t.
thisform.txtvaloare.value=thisform.txtcantitate.value*thisform.txtpret_vanz.value
thisform.txtleidupatranzactie.value=;
m.lei_final+thisform.txtvaloare.value
iif thisform.txtstoc.value<;
thisform.txtcantitate.value
=messagebox(atentie, valuta existenta insuficienta!)
endif
endif
CmdOK.click()
***************acceptare tranzactie
RESTORE FROM STOC_LEI
M.LEI_FINAL=thisform.txtleidupatranzactie.value
IF thisform.txttip_tranzactie.value$cC
replace valute.stoc_final with;
valute.stoc_final+thisform.txtcantitate.value
else
replace valute.stoc_final with;
valute.stoc_final-thisform.txtcantitate.value
endif
replace tranzactii.valoare with;
thisform.txtvaloare.value
SAVE TO STOC_LEI
CmdAnulare.click()
**************este situatia in care s-au facut
******************modificari in fisiere si le anulam
RESTORE FROM STOC_LEI
if m.lei_final<>thisform.txtlei_final.value
lei_final=thisform.txtlei_final.value
endif
*********************************
IF thisform.txttip_tranzactie.value$cC
replace valute.stoc_final with;
valute.stoc_final-thisform.txtcantitate.value
else
replace valute.stoc_final with valute.stoc_final+;
thisform.txtcantitate.value
endif
*********************************
select tranzactii
go bottom
delete
SAVE TO STOC_LEI
Studiul de caz I

269

CmdNotOK.click()
SELECT TRANZACTII
GO BOTTOM
DELETE

Form1.init()
SET SAFETY OFF
set default to d:\manuale\aplicatii
use valute in 1
use tranzactii in 2
restore from stoc_lei
select tranzactii
APPEND BLANK

Pasul 8. Dorim s afim pe ecran suma n lei corespunztoare tranzaciei i


proiectm un obiect de editare cu numele txtValoare care va primi valoarea
calculat din cantitate*pret (de cumprare sau de vnzare).
Pasul 9. Va fi afiat o caset de text, numit txtLeiDupaTranzactie, cu suma
n lei dup tranzactie, fcnd diferena sau suma ntre stocul n lei existent la nceputul
tranzaciei i valoarea acesteia.
Pasul 10. Proiectm un buton de comand, numit cmdCalcule, care declaneaz
aciunile de afiare/calculare. Vezi codul metodei click().
Pasul 11. Macheta ecran este folosit pentru o nou nregistrare n tabela
Tranzacii. Deschidem tabelele i adugm o nou nregistrare prin metoda Init a
formularului vezi codul asociat!
Pasul 12. Proiectm butonul de comand care memoreaz operaiile din tranzacie
n fiiere (butonul cmdOK) vezi codul metodei Click().
Pasul 13. Proiectm un buton, numit cmdNotOk, pentru cazul cnd se renun la
tranzacie. S nu uitm c la intrarea n formular am adugat un articol vid. Metoda
Click() terge ultimul articol. Atenie! Codul tranzaciei este cheie principal i nu
trebuie s aib valori vide sau duplicate. Am rezolvat acest lucru prin plasarea ca
valoare implicit (Default value) funcia Reccount()+1. Deci, la adugarea unui nou
articol, cheia este generat automat. Dac ns tergem fizic articole, numrul acordat
drept cheie se poate regsi, de aceea am marcat doar cu Delete. V propunem ca
exerciiu gsirea altei metode pentru generarea cheii primare dintr-o tabel!
Pasul 14. Ne imaginm situaia cnd, din greeal, un operator neatent a apsat
butonul OK. Proiectm un butom numit cmdAnulare, care anuleaz aciunea
butonului OK vezi codul metodei cmdAnulare.Click().

270

Informatic Manual pentru clasa a XII-a

STUDIUL

DE CAZ

II

Proiectarea rapid a unei aplicaii


Vom crea o aplicaie care folosete toate tipurile de fiiere: tabele, vederi, interogri,
rapoarte, etichete, formulare, grafice, meniuri.
Vom folosi aplicaiile wizard la realizarea acestora.
Controlul proiectrii aplicaiei va fi exercitat prin Project Manager.

Problema
Doresc o agend cu informaii despre cunotinele mele, prieteni, rude, colegi etc.
A vrea s pot aduga uor noii mei prieteni i s pot terge la fel de uor pe cei cu
care nu mai in legtura; cu alte cuvinte, o aplicaie care s-mi permit:
1. s m deplasez n agend oricum, de la nceput ctre sfrit sau invers, dar
alfabetic dup numele persoanei;
2. s aflu imediat ce telefon are X;
3. s pot afia toate cunotinele din localitatea Y;
4. s aflu informaii despre posesorul unui anumit numr de telefon Z;
5. s redactez felicitri (de Crciun!) pentru fiecare prieten.

Etape de lucru
1. Crem directorul C:\alfa unde vom
depune fiierele aplicaiei.
2. Deschidem Project Manager, selectnd
File, New, Project.
3. Crem o baz de date direct din Project
Manager, astfel: n fereastra utilitarului ne
poziionm pe directorul Database, apsm
butonul New i apelm aplicaia wizard.
Alegem baza de date AdressBook. La
ultimul pas selectm butonul radio pentru
modificarea bazei i intrm n Database Figura S2-1: Proiectarea bazei de date
Designer. Prin meniul contextual
intrm n fereastra Table Designer i
dm un nume corespunztor cmpurilor.
Atenie: trebuie schimbate i expresiile
de indexare.
4. Crem o machet ecran (un formular)
pentru introducerea datelor: ne poziionm
n fereastra Project Manager pe directorul
Documents/ Forms i ncepem crearea
Figura S2-2: Proiectarea formularului
unei machete prin clic pe butonul Add.
Studiul de caz II

271

Alegem aplicaia Form Wizard i crem macheta. Observm la previzualizare c


etichetele asociate cmpurilor nu ne avantajeaz, modificm macheta prin
opiunea corespunztoare a ultimului ecran din Form Wizard. Salvm cu numele
macheta_intr.
5. Realizm un raport cu principalele informaii din agenda de adrese. Pentru c
tabela de adrese are mai multe cmpuri dect ar ncpea pe o linie a raportului,
ne propunem un raport cu trei coloane, informaiile fiind dispuse pe linii.
Ne poziionm n directorul Documents/Reports i apsm butonul Add. Folosim
Report Wizard pentru un raport simplu (nici nu avem mai multe tabele!).
Specificm cmpurile, stilul tabelei i observm la previzualizare c denumirile
informaiilor au rmas cele corespunztoare cmpurilor predefinite din tabela
standard. Deci alegem opiunea de modificare a raportului i ieim din Report
Wizard. Folosim Report Designer, care se deschide automat, pentru modificarea
etichetelor asociate cmpurilor.

Atenie! Modificarea textelor explicative asociate implicit de utilitar cmpurilor poate fi


fcut prin urmtoarele manevre: 1. selectm butonul Label; 2. poziionm
cursorul pe textul dorit; 3. tergem i/sau modificm textul explicativ. O nou
operaie implic din nou cei trei pai.
Poate fi folosit i butonul Build Lock. Efectuarea coreciilor se face apoi
numai trecnd controlul de la un obiect la altul (fr paii 1 i 2).
6. Pentru a afia numele i adresa persoanelor crora le trimitem felicitri, vom proiecta
etichete prin Project Manager. Ne poziionm pe directorul Documents/Labels i
apsm butonul New. Alegem Label Wizard i selectm tabela i tipul etichetei n
care vom pune informaiile dorite. Numele asociat este Felicitare.lbx.
7. Pentru a afia persoana/persoanele care au porecla X, proiectm o vedere (fiier view).
Proiectarea vederilor (fiiere View) din Project Manager se face prin
poziionarea pe baza de date i deschiderea utilitarului Data Designer, apoi clic
pe butonul Modify al ferestrei Project Manager.
272

Informatic Manual pentru clasa a XII-a

n fereastra Database Designer, deschidem meniul contextual i selectm


opiunea New Local View.

Figura S2-3: Stabilirea condiiei de filtrare

Se deschide fereastra New i alegem, ca i n activitile anterioare, View


Wizard. Parcurgem paii aplicaiei Wizard, iar la condiia de filtrare, n cazul
nostru, punem Adresses.porecla=?porecla.

Atenie! Pentru ca parola s fie considerat variabil, ea trebuie definit n fereastra View
Parameters din meniul Query. Pentru aceasta, ieim din View Wizard cu opiunea
Save local view and modify it in View Designer, care deschide automat View
Designer. Intrm n tab-ul Filter i vedem condiia pus. Selectm Query, View
Parameters i se deschide fereastra care se precizeaz c variabila Parola este
de tip caracter i este parametru de intrare. La rulare se cere introducerea valorii
acestui parametru. Astfel este creat fiierul Cutelefonul.vue care selecteaz
persoanele dintr-o anumit localitate introdus de operator.
8. Pentru obinerea persoanelor dintr-o localitate ca interogare lansat din meniul
aplicaiei vom folosi fiierul vedere creat anterior ntr-o interogare. Selectm
directorul Data, Queries i apsm butonul Add. Alegem Query Wizard. La
primul pas, indicm fiierul vedere pe care dorim s-l folosim, de exemplu
Dinlocalitatea. Selectm toate cmpurile acestei vederi, nu completm
clauza Filter i salvm sub numele Dinlocal.qpr. Destinaia va fi o fereastr
Browse. Deci cnd executm interogarea va fi solicitat numele localitii i vor fi
afiai ntr-o fereastr Browse prietenii din acea localitate.
9. Aplicaia este structurat ntr-un meniu. Dorim ca o prim parte s conin opiuni
despre aplicaie i autori, a doua s lanseze programul de introducere/vizualizare
prin formular. Consultrile vor fi alese dintr-o list de opiuni: informaii despre o
persoan dat prin numrul ei de telefon, cine are porecla X etc.
Pentru proiectarea meniului, ne poziionm pe directorul Other, subdirectorul
Menus. Butonul New apeleaz utilitarul Menu Builder. Trecem opiunile liniei
principale. Pentru afiarea unor scurte informaii, folosim editorul de texte, apoi
introducem n meniu comanda de deschidere Modify file text.txt.
Pentru apelarea formularului, nu uitm comanda DO FORM fis.sc.
Operaiile de consultare vor fi alese dintr-un submeniu. Comenzile asociate sunt DO
<numefis>.qpr. Pentru apelul raportului folosim comanda REPORT FORM
fis.frx, iar pentru etichete, LABEL FORM fis.lbx. Opiunii de iesire i asociem
comanda SET SYSMENU TO DEFAULT, pentru revenirea la meniul sistem.
Studiul de caz II

273

Figura S2-4: Proiectarea meniului

Dup proiectarea opiunilor, nu uitm s generm programul, selectnd Menu,


Generate. Numele meniului va fi, de exemplu, meniudrese.mpr.

Figura S2-5: Generarea meniului

10.Proiectarea programului principal


Aa cum am artat, este necesar s construim programul monitor: din Project
Manager ne poziionm pe directorul Codes, Programs i deschidem fereastra
editorului de programe prin clic pe butonul New. Scriem urmtorul cod, salvat n
fiierul Princadrese.prg.
oldtalk=set(talk)
set path to data\databases,data\queries,;
document\forms,documents\reports,;
documents\labelscodes\programs,others\menus
set talk off
localitate=iasi
telefon=121212
porecla=fat-frumos

do meniuadrese.mpr
read events
release all
set talk (oldtalk)
return

Fixm ca fiier principal al aplicaiei programul Princadrese.prg prin clic


dreapta i selectnd Set Main.
11.Transformarea proiectului ntr-o aplicaie se face prin butonul Build. Bifm
opiunea Recompile All Files i selectm Build Application. Numele poate fi,
de exemplu, Alfa.app.
Salvarea se face n directorul rdcin, acolo de unde au fost construite celelalte
subdirectoare.
Lansarea n execuie a aplicaiei se face prin Alfa.app.
274

Informatic Manual pentru clasa a XII-a

STUDIUL

DE CAZ

III

Realizarea unei aplicaii executabile, generarea dischetelor


de distribuie i instalarea aplicaiei sub Windows
Ne propunem s realizm o aplicaie executabil pentru gestiunea crilor dintr-o
bibliotec. Pe parcursul manualului au fost exemplificate i probabil realizate tabelele,
interogrile, rapoartele si meniul principal al acestei aplicaii. Programul principal este
numit Biblioteca.
1. Crem directorul c:\BIBLIO.
2. Apelm Project Manager selectnd File, New, Project, New. Denumim proiectul
BIB.PJX.
3. Adugm la proiect toate fiierele prin clic pe butonul ADD.
4. Indicm BIBLIOTECA.PRG ca program principal al aplicaiei: ne poziionm pe
linia corespunztoare fiierului n fereastra Project Manager, executm clic
dreapta, afim meniul contextual i alegem
Set Main.
5. Compilm i grupm toate fiierele ntr-un
proiect prin fereastra Build Options, deschis
prin clic pe butonul Builds din Project
Manager. Activm opiunile Recompile All
Files i Display Errors, precum i butonul radio
Rebuild Project.
6. Generm aplicaia executabil prin clic pe
butonul radio Build Executable. Pentru c
dorim verificarea aplicaiei dup generarea sa,
activm opiunea Run after Build.
7. Ne propunem s construim n continuare
dischetele de distribuie a aplicaiei.
Folosim utilitarul Setup Wizard, lansat
selectnd Tools, Wizards, Setup.
Pasul 1: Notm n caseta de dialog Distribution Files a primei ferestre numele directorului
n care am creat aplicaia: C:\BIBLIO.
Pasul 2: Singura opiune pe care o selectm
este Visual FoxPro runtime pentru c
aplicaia nu folosete alte componente.
Pasul 3: Specificm directorul imagine al
kit-ului C:\BIB. Setm formatul dischetei de
Figura S3-1:
1,44 Mb i Web Setup.
Specificarea grupului aplicaiei
i asocierea unei pictograme
Studiul de caz III

275

Pasul 4: Dm un titlu ferestrei de dialog i trecem datele referitoare la copyright.


Pasul 5: Fixm directorul implicit, care va fi creat pe discul destinaie C:\BIBLI.
Specificm numele grupului pentru aplicaie, care va fi adugat la meniul Start
din Windows.

Figura S3-2: Generarea executabilelor

Pasul 6: Acceptm ca toate fiierele s fie


plasate n directorul implicit al aplicaiei i
fixm o pictogram pentru fiierul bib.exe:
selectm n coloana PM Item comutatorul
asociat acestui fiier. Se deschide fereastra
Program Group Menu Item. Cutm o pictogram, indicm textul asociat acesteia
n caseta Description, iar n Command
Line trecem instruciunea de apel.
Pasul 7: Activm comutatorul Generate a
web executable file i lansm generatorul.
8. n vederea verificrii corectitudinii operaiilor, vizualizm directorul imagine a kit-ului Figura S3-3: Verificarea directorului
c:\BIB. S l comentm puin:
imagine a kit-ului
Directorul Websetup conine varianta
pentru distribuie pe internet (Nu uitai
c am setat opiunea Web Setup n fereastra a treia a Setup Wizard!). Pentru
a instala aplicaia vom lansa programul setup.exe, aflat n acest director.

276

Informatic Manual pentru clasa a XII-a

Fiierul
executabil
webapp.exe este versiunea optim a distribuiei pentru internet (n
fereastra a aptea am
bifat opiunea Generate a web executable
file!). Prin lansare n
execuie, dezarhiveaz
automat pachetul de
distribuie ntr-un director
temporar, apoi lanseaz acelai setup.exe.
Directorul Disk144 este
creat pentru instalarea cu
dischete. n directorul Disk1 se
afl programul setup.exe,
care va realiza instalarea
aplicaiei.
9. Copiem coninutul directoarelor
pe cte o dischet i le predm
clientului.
10.Sfaturi pentru client:
Figura S3-4: Coninutul directorului pentru
Copiai pe hard disc cele trei
instalarea cu dischete
dischete i lansai aplicaia
setup.exe.
Alegei directorul unde va fi instalat aplicaia; eventual, pstrai calea
implicit, C:\BIBLI.

Figura S3-5: Rularea aplicaiei de instalare

Verificai dac avei suficient spaiu i n partiia activ pentru c instalarea


presupune i plasarea unor fiiere speciale (biblioteci dinamice etc.) n
directorul Windows.

Studiul de caz III

277

Dac dorii, schimbai numele grupului.


Pentru nceperea
instalrii aplicaiei,
apsai butonul cu
pictogram.
Dac totul a mers
bine, apare confirmarea succesului.
Nu v speriai dac
apare mesajul
You must restart
your computer...!
Pentru c instalarea
aplicaiei a modificat
regitrii Windows,
este necesar
restartarea
sistemului.
Verificai dac pe
C:\BIBLI avei
Figura S3-6: Crearea grupului aplicaiei la instalare
fiierele aplicaiei.
Verificai dac n
meniul Windows
apare numele
grupului creat la
instalare.
Cutai pictograma
asociat fiierului
executabil n acest
Figura S3-7: Mesaj privind necesitatea restartrii
grup.
dup instalare
Lansai aplicaia.
Observai c nu este necesar intrarea sau ieirea n/din mediul Visual
FoxPro. Aplicaia se comport ca un program autonom.

278

Informatic Manual pentru clasa a XII-a

RSPUNSURI, COMENTARII,
INDICAII
Pag. 29
Tabela LECTURI conine:
titlu

autor

editura

an_i

an_e

nume_cit

date_pers

di

c,20

c,20

c,20

n,4

n,4

c,20

d,8

Dar,
Ce se ntmpl dac tergem articolul corespunztor unei cri scoase din inventar? Se vor
terge i informaiile despre cititor! ==> sunt anomalii de tergere
Ce se ntmpl dac se dorete adugarea unui nou cititor? Se va atepta mprumutarea
unei cri. ==> sunt anomalii de inserare
Unde gsim datele despre un cititor? n toate articolele corespunztoare crilor mprumutate
i nerestituite ==> sunt date redundante
Deficienele se datoreaz reinerii ntr-o singur tabel i a informaiilor despre cri i a celor
despre cititori. Rezolvarea acestor deficiene se realizeaz prin normalizare: mprirea relaiei
n alte dou relaii, iar fiecare s se ocupe de o tem distinct. Obinem urmtoarea structur:
CARTI.DBF(cod-carte, titlu, autor, date-despre-carte)
CITITORI.DBF(cod-cititor, nume, date_pers, cod-carte, data-imprumut)
Atunci cnd se mprumut o carte, se adaug un articol n tabela Cititori, iar cnd se restituie
cartea se caut articolul i se terge.
Dar,
Un cititor are adresa, date personale trecute de cte ori mprumut o carte, ceea ce
nseamn redundan.
Dac cititorul Z a mprumutat o singur carte i a restituit-o, pierdem datele personale ale acestuia!
Nu putem afla activitatea bibliotecii printr-un indicator de felul: numrul de cri mprumutate
ntr-un interval dat pentru c atunci cnd se restituie cartea, se va terge articolul din tabela
Cititori
Nu putem afla numrul de cititori nscrii la bibliotec pentru c fiierul CITITORI i reine doar
pe cei ce au mprumutat cel puin o carte.
Nu putem afla preferinele unui cititor, de cte ori a fost citit o carte etc.
Rafinm structura, mprind-o n alte tabele: una pentru informaiile de baz legate de cri, alta
pentru datele personale ale cititorilor bibliotecii i, n sfrit, o tabel cu operaii. Vom face codificarea
crilor printr-o informaie unic folosit pentru identificare i legtur ntre tabele (numr de inventar).
CARTI.DBF
Cod-carte

titlu

autor

editura

editie

an_i

cod_cit

nume

date_pers

Cod-carte

cod_cit

di

an_e

CITITOR.DBF

OPERATII.DBF
dr

Rspunsuri, comentarii, indicaii

279

Pag. 32
4. Comentarii: Cheia relaiei nu poate fi dect perechea (student, sala). Dar atributul Taxa este
dependent doar de sal. Nu ar exista anomalii dac dependena ar fi total. Observai c taxa
pentru o sal este pierdut dac se terge articolul despre studentul care a nchiriat-o. Nu putem
introduce informaii despre sli i taxe pn cnd nu exist un student care s nchirieze
respectivele sli. Se normalizeaz relaia i se obin relaiile SALI (nume-sal, taxa) i CHIRII
(cod_student, sala).
5. Comentarii: Cheia este buletinul turistului (un atribut) dar, se pare c, mpreun cu atributul
hotel, determin atributul Taxa, ceea ce nu este corect. Spunem c Buletin determin funcional
atributul Taxa. Putem i trebuie s nlturm anomalia prin separarea relaiei n alte dou relaii
CAZARE (turist, buletin, hotel) i TAXE (hotel, taxe/loc).
6. Comentarii: n exemplul acesta apar dou chei posibile: (depozit, material) i (depozit,
furnizor). n plus, fa de cele dou chei candidate, exist i o dependen funcional ntre
furnizor i material. Anomalii de actualizare: dac tergem articolul al treilea, se pierde informaia
c furnizorul Metalcar produce Carcase. Se rezolv prin spargerea relaiei n alte dou relaii:
STOC (depozit, material, stoc) i FURNIZOR (furnizor, material).

Pag. 63
I.
ECHIPE (echipa C(9),grupa C(1))

cu numele i grupa fiecrei echipe

JUCATORI (nume C(9), echipa C(9), intrare D, iesire D)

este un istoric cu echipe i juctori

CAMPIONAT (e1 C(9), e2 C(9), data D, loc C(9),


p1 N(2), p2 N(2), arbitri M)

pstreaz meciurile campionatului.

Sarcini

280

Rezolvri

Deschidei cele trei tabele


n trei zone.

use CAMPIONAT n 1 alias camp


use JUCATORI n 2 alias juc
use ECHIPE in 3 alias ec

Afiai n ce echipe a jucat


Popescu i cnd.

sele 2
list for nume=Popescu

Afiai arbitrii care au fost la


primele 3 meciuri.

sele camp
list next 3 alte_inf

Afiai unde a arbitrat


Popescu, la ce meciuri, cnd.

sele campion
list e1, e2, data for Popescu $ arbitri

Afiai echipele din grupa A.

sele ec
list for grupa=A

Afiai componena echipei


RAPID (ultima dat).

sele juc
list for echipa=Rapid and iesire={//}

Afiai localitile unde a


jucat sau va juca echipa
Rapid.

sele camp
set filter to e1=Rapid or e2=Rapid
list loc, data, e1, e2

Afiai echipele care au


jucat acas i au pierdut.

sele 1
list e1 for p1<p2

Informatic Manual pentru clasa a XII-a

Afiai componena
echipelor care joac la data
{01.06.99}, pe stadionul
Plaiesilor? Presupunem
c este un singur meci.

select 1
locate for data={01.06.99} .and. loc=Sportu
sele 2
? echipa + a->e1+ este formata din :
list nume for b->echipa=a->e1
? echipa + a->e2+ este formata din :
list nume for b->echipa=a->e2

Afiai cpitanii celor dou


echipe care joac n primul
meci nregistrat
(presupunem c prima
persoan trecut n fiier la
o echip este cpitanul).

go top in 1
sele 2
? capitanul echipei +a->e1, este, lookup
(b->nume, a->e1 , b->echipa)
? capitanul echipei +a->e2, este
?? lookup(b->nume, a->e2, b->echipa)

Doi prieteni fotbaliti, Albu


i Barbu, se ntlnesc n
campionat de dou ori (tur
i retur). Aflai data i locul.

sele b
echipa1=lookup(b->echipa,Albu,b->nume)
echipa2=lookup(b->echipa,Barbu,b->nume)
sele 1
list for A->e1=echipa1 .and. A->e2=echipa2 or
A->e1=echipa2 .and. A->e2=echipa1

Listai programul
competiional de sptmna
viitoare, ordonat cronologic.

sele camp
sort on data to man for between(data, date(),
date()+7)
select 0
use man
list fields e1,e2,data, loc

Afiai meciurile, ordonate


dup numele echipelor care
joac acas, pentru fiecare
echip dup data
desfurrii.

Sele camp
Sort on e1,data to man
Select 0
Use man
List

Pag. 110
3. Fie tabela MECI (e1 C(10), e2 C(10), g1 N(2) ,g2 N(2)) unde e1, e2 =codul celor dou echipe,
g1=numrul de goluri marcate de e1; g2=numrul de goluri marcate de e2.
&& clasam.prg
create dbf manevra (cod N(2), echipa C(10), puncte N(5), golaveraj N(5))
use manevra in select (0) alias man
sele meci
&&parcurgem meciurile i completm tabela menevra
scan
sele man
locate for man.cod=meci.e1
if not foun()
append blank
replace cod with meci.e1
endif
repl man.puncte with man.puncte+iif(meci.g1>meci.g2,2,;
iif(meci.g1=meci.g2,1,0))
repl man.golaveraj with man.golaveraj+meci.g1-meci.g2
locate for man.cod=meci.e2
Rspunsuri, comentarii, indicaii

281

if not found()
append blank
replace man.cod with meci.e2
endif
repl man.puncte with man.puncte+iif(meci.g2>meci.g1,2,;
iif(meci.g1=meci.g2,1,0))
repl man.golaveraj with man.golaveraj+meci.g2-meci.g1
sele meci
endscan
sele man
index on str(punctaj)+str(golaveraj) tag v
List
4. Concurenti (nume C(10),grupa C(3),nr N(2),ts
Concurs(grupa C(3), start C(5), interval N(2))
1) Procedura de citire a concurenilor
sele concurenti
clear
accept nume to m.nume
accept data nasterii to dn
accept SEX to sex

C(8),tp C(8))

varsta=year(date())-year(dn)
replace grupa with
sex+ltrim(str(varsta))
replace nume with m.nume

2) Procedura de codificare a concurenilor (cmpul Nr)


Varianta 2:
Varianta 1:
use concurenti in 1
use concurs in 1
index on grupa tag xx unique
use concurenti in 2 order nume
copy to man field grupa && sunt
sele 1
grupele distincte
scan
index on grupa+nume tag x
sele 2
use man in 2
copy to man for a.grupa=b.grupa
sele 2
dele all for a.grupa=b.grupa
scan
pack
sele 1
sele 3
locate for b.grupa=a.grupa
use man
n=0
repl all nr with recno()
do while found()
use
n=n+1
sele 2
repl nr with n
append from man
continue
erase man.dbf
enddo
sele 1
sele 2
endscan
endscan
Varianta 3:
use concurenti
index on grupa+nume tag xx
do while not eof()
x=grupa
i=0
do while grupa=x
i=i+1
repl nr with i
skip
enddo
enddo

282

Informatic Manual pentru clasa a XII-a

Varianta 4:
use concurenti in 1
index on grupa tag xx unique
copy to array A
index on grupa+nume tag x
for i=1 to alen(A,1)
n=0
locate for grupa=A[i,1]
do while found()
n=n+1
replace nr with m.n
continue
enddo
endfor

3) Procedura de completare a momentului de start pentru fiecare concurent


Varianta 1:
Varianta 2:
use concurs in 1
use concurs in 1 order grupa
use concurenti in 2
use concurenti in 2
sele 2
sele 2
index on nume tag nume
set relation to grupa into a
sele 1
repl all tp with timp( a.start,
scan
a.interval*(b.nr -1))
sele 2
return
count to y for b.grupa=a.grupa
if y#0
copy to array x for
Varianta 3:
use concurs in 1
b.grupa=a.grupa
use concurenti in 2
dele for b.grupa=a.grupa
sele 1
pack
scan
x[1,4]=a.start
sele 2
yy=a.interval
locate for b.grupa=a.grupa
for i=2 to alen(x,1)
t1=a.start
x[i,4]=timp(x[i-1,4],yy)
endfor
t2=0
function timp
do while found()
append from array x
param t,d
repl tp with t1
release x
o=val(left(t,2))
endif
t1=timp(t1, a.interval)
m=val(right(t,2))+d
continue
sele 1
o=o+int(m/60)
enddo
endscan
m=mod(m,60)
sele 1
return
return
endscan
str(o,2)+:+str(m,2)
return
4) Procedura de afiare a ctigtorilor
procedure afis
sele 0
create table man (grupa C(3),
nr N(3), durata N(6))
append from concurenti
sele 1
use concurenti
sele 3
use man
set relation to recno() into a
repl all c.durata with;
diferenta(a.ts,a.tp)
index on grupa tag gr
list c.grupa,a.nr,a.tp,a.ts,c.durata
sort on durata to man2
use man2
set relation to recno() into a
index on grupa tag x unique
list c.grupa, a.nume, a.tp, a.ts,
c.durata
use
erase man.dbf
erase man2.dbf
return

5) Procedura de trecere a momentului


de sosire
procedure sosire
input codul? to x
accept grupa? to y
select concurenti
locate for nr=x and grupa=y
if found()
replace ts with time()
else
wait atentie coduri eronate
endif
return
function diferenta
param ts,tp
os=val(left(ts,2))
ms=val(right(ts,2))
mins=os*60+ms
op=val(left(tp,2))
mp=val(right(tp,2))
minp=op*60+mp
return mins-minp

Rspunsuri, comentarii, indicaii

283

Pag. 114. 1. Concurs de frumusee


*programul principal *
set talk off
public array p[10]
if not
f1()
&& validare date
wait date incomplete
return
endif
do p1
&&
input criteriul ? to x
? punctajul maxim obtinut la;
criteriul ,x,=, f2(x)
do p2
&& marcare persoane ce nu intrunesc
&& minimul cerut la un criteriu
do p3
&& lista persoanelor
castigatoare
&& pe criterii
sir=f3()
&& criteriile unde sunt mai multi
&& castigatori
if not empty(sir)
? sunt mai multe persoane;
castigatoare la criteriile +sir
else
? nu sunt criterii la care sa;
existe mai multe persoane cu;
acelasi punctaj maxim
endif
nr=f4()
&& numarul persoanelor
necalificate
&& la un criteriu si cu maxim la
&& alt criteriu
if nr=0
? nu sunt persoane cu punctaje;
extreme
else
for i=1 to nr
? pers[i]
endfor
endif
? clasamentul competitiei
do p4
&& punctajul total pe concurenta.
&& se va lua in considerare
&& existenta aceleiasi valori la
mai
&& mute concurente
close all
erase total.dbf
return

284

Informatic Manual pentru clasa a XII-a

function f1
&&verificare completitudine date
public array p[10]
if not (file(conc.dbf) and;
file(minime.mem) and;
file(rezult.dbf))
wait date de plecare incomplete
rezult=.F.
else
restore from minime
additive
select 1
use rezult
&& verificare corectitudine fisier
&& rezult
nr_criterii=alen(P)
select 2
use conc
nr_candidat=reccount(2)
use
sele rezult
index on nume+str(criteriu);
tag n unique
count to z
if z # nr_candidat*nr_criterii
rezult=.f.
else
rezult=.T.
endif
set order to 0
&& fisierul rezult este lasat
&& neordonat
delete tag n
&& stergem reperul index
anterior
&& creat
endif
return rezult
function f2
&& punctajul maxim la un criteriu
dat
&& ca parametru
parameters x
calculate max(punctaj) for;
criteriu=x to y
return y
procedure p3
&& lista castigatorilor pe
criterii
select rezult
set heading off
for i=1 to alen(p)
ma=f2(i)
?rezultatul cel mai bun la;
criteriul , i
list nume, punctaj for
criteriu=i;
and punctaj=ma
endfor
set heading on
return

procedure p1
&& trece sub forma de tabel
&& rezultatele
select rezult
index on nume tag nume unique
count to g
nr_criterii=alen(p)
dimension a[g, nr_criterii+1]
copy to array a field nume
delete tag nume
index on nume tag nume
&& fara selectie unica
text
&& varianta de rezolvare
scan
poz=ascan(a, a.nume,1)
a[asubscript(a,poz,1),
criteriu+1]=punctaj
endscan
endtext && sfarsit varianta
for i=1 to alen(a,1)
locate for nume= a[i,1]
do while found()
a[i,criteriu+1] =punctaj
continue
enddo
endfor
*afisare tablou*
for i=1 to alen(a,1)
?
for j=1 to alen(a,2)
?? a[i,j],
endfor
endfor
return

function f4
&& determina persoanele
necalificate
&& la un criteriu si castigatoare
&& la altul
public array pers[20]
nr_caz=0
select rezult
index on nume tag nume
do while not eof()
x=nume
store .f. to bun, rau
do while not eof() and nume=x
rau=deleted()
if punctaj = f2(criteriu)
bun=.T.
endif

procedure p2
&& marcare persoane care nu au
&& punctajul de calificare
select rezult
recall all
delete all for
punctaj<p[criteriu]
copy to manevra for deleted()
select 2
use manevra
scan
sele 1
delete for b.nume=a.nume
sele 2
endscan
use
erase manevra.dbf
sele 1
index on nume tag nume unique
list for deleted()
set order to 0
return
function f3
&& criteriile unde sunt mai
multi
&& castigatori
sir=
for i=1 to alen(p)
ma=f2(i)
count for criteriu=i and;
punctaj=ma to zz
if zz>1
sir=sir+iif(empty(sir),str(i,3),
,+str(i,3))
endif
endfor
return sir
procedure p4
&& lista primilor trei clasati*
sele rezult
index on nume tag nume for;
not deleted()
total on nume field punctaj to
total
sele 2
use total
index on punctaj tag pct1;
descending unique
copy to man_unic
index on punctaj tag pct2 desc
sele 3
use man_unic
i=0
scan next 3

Rspunsuri, comentarii, indicaii

285

i=i+1
? premiul , i
sele 2
list nume for b.punctaj=c.punctaj
sele 3
endscan
sele 3
use
erase man_unic.dbf
return

skip
if eof()
exit
endif
enddo
if bun and rau
nr_caz=nr_caz+1
pers[nr_caz]=x
endif
enddo
return nr_caz

Pag. 147
1. Calculul necesarului de aprovizionat
procedure calcul
create dbf nec (mat n(1), nt n(5), na
n(5))
use stoc in 1
use plan in 2
use consum in 3
use nec in 4
sele 3
index on mat tag mat
do while not eof(3)
x=mat
sum c.cant* cautplan(c.prod) while;
c.mat=x to y
do adauga_art with x, y
enddo
sele 4
repl all na with nt-cautstoc(d.mat)
list
return
function cautplan
param cod
sele 2
locate for b.prod=cod
if found()
rez=b.cant
else
rez=0
endif
sele 3
return rez

286

Varianta 1:
Se va crea un fiier NEC cu necesarul
total (cmpul NT) i necesarul de
aprovizionat (cmpul NA) pentru
fiecare cod-material (cmpul MAT).
Ordonm fiierul CONSUM pe
materiale.
Pentru fiecare material i:
facem suma produselor dintre
cantitatea unitar necesar pentru
produsul j i planul pentru produsul j
generm un articol n fiierul NEC
Completm cmpul NA
Afiare

procedure adauga_art
param x, y
sele 4
append blank
repl mat with x,nt;
with y
sele 3
return

Informatic Manual pentru clasa a XII-a

function cautstoc
param x
sele 1
locate for a.mat=x
sele 4
return
iif(found(1),a.cant,0)

use stoc in 1 order mat


use plan in 2 order prod
sele 3
use consum
copy to man
use man
repl all c.cant with;
c.cant * cautplan(c.prod)
index on mat tag mat
total on mat to nec field cant
use nec
repl all prod with;
c.cant - cautstoc(c.mat)
? material, necesar total,;
necesar de aprovizionat
set heading off
list c.mat, c.cant, c.prod
close all
erase man.dbf
return
function cautplan
param x
sele 2
seek x
sele 3
return iif(found(2), b.cant, 0)

Varianta 2:
1. Se folosete o tabel de manevr
(copie a fiierului CONSUM)
nlocuind cmpul CANT cu
produsul dintre cantitatea necesar
i planul pentru produsul
corespunztor.
2. Se face totalizarea pentru acelai
material n fiierul TOT.
3. Se poate completa necesarul de
aprovizionat n cmpul PROD
(atenie la lungimea codului de
produs!) prin diferena dintre
necesarul total (aflat n cmpul
CANT) i stocul din materialul
corespunztor.
4. Se afieaz.

function cautstoc
param x
sele 3
return iif(seek(x, 1), a.cant, 0)

sele 2
use plan
index on prod tag prod
sele 3
use consum
set relation to prod into b
sele 1
create table nec (mat N(5),;
cant N(5), na N(5))
append from stoc
repl all a.na with suma(a.mat)
? material, necesar total, necesar;
de aprovizionat
list mat, na, na-cant
return
function suma
param x
sele 3
sum c.cant*b.cant for c.mat=x to y
sele 1
return y

Varianta 3:
Se folosete relaia dintre fiierul
CONSUM i PLAN pe atributul PROD.
Se presupune c fiierul STOC are
toate codurile de materiale chiar dac
stocul este zero.
Pentru fiecare cod material din stocuri
se scade suma produselor consum
unitar i plan

Varianta 4:
Putem organiza datele n tablouri i vom nota:
1. Tabloul consum specific C(i,j) conine: cantitatea necesar din materialul i pentru realizarea
unei uniti din produsul j (i = 1,n produse, j = 1,m materiale);
2. Vectorul plan P(i) = cantitatea planificat a fi realizat din produsul i;

Rspunsuri, comentarii, indicaii

287

3. Vectorul stocuri S(J) = stocul existent din materialul j (j = 1,m).

Presupunem c fiierul STOC nu are toate codurile de materiale, ci numai cele cu stoc
pozitiv, fiierul Plan, de asemenea, nu conine dect acele coduri de produse care se
fabric la un moment dat.
Pentru dimensionarea tablourilor vom determina att codul de valoare maxim pentru
materiale, ct i pentru produse din fiierele corespunztoare.
Dup calculare, se trec rezultatele n baza de date NEC(mat, nt, na), unde mat=codul
materialelor, nt=necesar total, na= necesar de aprovizionat.
&& program principal
nmat=det_cod(1)
nprod=det_cod(2)
dimension
cs(nmat,nprod),P(nprod),s(nmat),;
nt(nmat), na(nmat)
store 0 to cs, s, p, nt, na
do incarca with 1
do incarca with 2
do incarca with 3
do calcul_nt && Nt= CS*P
do afis with nt
&& afisare vector NT
do calcul_na
&& NA=NT-S
do afis with na
&& afisare vector NA
function det_cod
param cod
sele 1
use consum
calculate max(mat),
max(prod) to xm, xp
if cod=1
use stoc
calculate max(mat) to ym
use
return max(xm, ym)
else
use plan
calculate max(prod) to yp
use
return max(xp, yp)
endif
endif

288

&&continuare
sele 1
create dbf nec (mat N(5),nt;
N(5),na N(5))
for i=1 to nmat
append blank
repl mat with i,nt with
nt[i],;
na with na[i]
endfor
delete for nt=0
pack &&articole
close all
&&nefolosite
return

procedure incarca
param x
do case
case x=1
use consum
scan for mat#0 and
prod#0
CS[mat, prod]=cant
endscan
case x=2
use plan
scan for prod#0
P[prod]=cant
endscan
otherwise
use stoc
scan for mat#0
S[mat]=cant
endscan
endcase
return

Informatic Manual pentru clasa a XII-a

procedure calcul_nt
for i=1 to nmat
nt[i]=0
for j=1 to nprod
nt[i]=nt[i]+cs[i, j]*P[j]
endfor
endfor
return
procedure calcul_na
for i=1 to nmat
NA[i]=NT[i]-S[i]
endfor
return
procedure afis
param v
?
for i=1 to alen(v)
if v[i]>0
?? str(v[i], 5)
endif
endfor
return

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