Sunteți pe pagina 1din 290

CUPRINS

Capitolul 1 Organizarea datelor Capitolul 6 Vizualizarea, cutarea


n baze de date . . . . . . . . . . .5 i sortarea datelor . . . . . . . . .59
Informaii i date. Organizarea datelor . . . . . . .5 Vizualizarea coninutului unei tabele . . . . . . . .59
Operaii generale asupra unei structuri Vizualizarea structurii unei tabele . . . . . . . . . .60
de date . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 Cutare secvenial i poziionare
Evoluia metodelor de organizare n baza de date . . . . . . . . . . . . . . . . . . . . .60
a datelor . . . . . . . . . . . . . . . . . . . . . . . . . . .9 Sortarea i duplicarea unei tabele . . . . . . . . .61
Baze de date i sisteme de gestiune
a datelor . . . . . . . . . . . . . . . . . . . . . . . . . .13 Capitolul 7 Actualizarea datelor . . . . . . . .65
Adugarea articolelor . . . . . . . . . . . . . . . . . . .65
Capitolul 2 Baze de date relaionale . . . .22 tergerea articolelor . . . . . . . . . . . . . . . . . . . .66
Concepte specifice bazelor de date Modificarea sau corectarea datelor . . . . . . . . .67
relaionale . . . . . . . . . . . . . . . . . . . . . . . . .22 Actualizarea interactiv a tabelelor . . . . . . . . .67
Proiectarea bazelor de date relaionale: Lucrul cu cmpurile de tip Memo . . . . . . . . . .73
forme normale . . . . . . . . . . . . . . . . . . . . . .27
Lucrul cu cmpurile de tip General . . . . . . . . .75
Capitolul 3 Introducere n mediul
Capitolul 8 Indexare i cutare rapid . . .79
FoxPro . . . . . . . . . . . . . . . . . .33
Indexarea tabelelor . . . . . . . . . . . . . . . . . . . . .79
FoxPro: prezentare general . . . . . . . . . . . . . .33
Cutarea rapid i poziionarea
Interfaa produsului Visual FoxPro . . . . . . . . .35 n tabela indexat . . . . . . . . . . . . . . . . . . .82
Configurarea mediului FoxPro . . . . . . . . . . . .36
Moduri de lucru . . . . . . . . . . . . . . . . . . . . . . . .36 Capitolul 9 Relaionarea tabelelor . . . . . .85
Gestiunea fiierelor . . . . . . . . . . . . . . . . . . . . .40 Tipuri de relaii . . . . . . . . . . . . . . . . . . . . . . . . .85
Crearea i tergerea unei relaii . . . . . . . . . . .85
Capitolul 4 Tipuri de date n Visual FoxPro
i operaii specifice . . . . . . . .43 Capitolul 10 Transferul de date
Tipul numeric . . . . . . . . . . . . . . . . . . . . . . . . . .43 ntre tabele Visual FoxPro
Tipul ir de caractere . . . . . . . . . . . . . . . . . . . .44 i alte structuri . . . . . . . . . . . .90
Tipul dat calendaristic . . . . . . . . . . . . . . . . .45 Importarea i exportarea datelor
Tipul logic . . . . . . . . . . . . . . . . . . . . . . . . . . . .46 din i ctre tablouri de memorie . . . . . . . .90
Gestiunea variabilelor . . . . . . . . . . . . . . . . . . .46 Importarea i exportarea datelor
Comenzi de lucru cu variabilele . . . . . . . . . . .48 din i ctre alte tipuri de fiiere . . . . . . . . .92
Macrosubstituie i expresii nume . . . . . . . . . .49 Capitolul 11 Prelucrri statistice
Capitolul 5 Crearea tabelelor . . . . . . . . . .52 i financiare . . . . . . . . . . . . . .94
Definirea structurii unui tabel . . . . . . . . . . . . . .52 Numrarea articolelor: COUNT . . . . . . . . . . . .94
Modificarea structurii conceptuale nsumarea valorilor unor cmpuri: SUM . . . . .94
a unui tabel . . . . . . . . . . . . . . . . . . . . . . . .54 Calculul mediei aritmetice: AVERAGE . . . . . .95
Editarea cmpurilor unui tabel . . . . . . . . . . . .54 Diverse calcule statistice
Popularea (ncrcarea) tabelului cu date . . . .55 i financiare: CALCULATE . . . . . . . . . . . .95
Deschiderea i nchiderea unui tabel . . . . . . .55 Totalizarea valorilor: TOTAL . . . . . . . . . . . . . .96
Filtrarea structurii sau selectarea cmpurilor .56 Funcii financiare . . . . . . . . . . . . . . . . . . . . . . .96
Filtrarea articolelor . . . . . . . . . . . . . . . . . . . . . .56 Recapitulare . . . . . . . . . . . . . . . . . . . . . . . .99

Cuprins 3
Capitolul 12 Programarea clasic Proiectarea paginilor web pentru vizualizarea
n FoxPro . . . . . . . . . . . . . . .106 datelor pe internet . . . . . . . . . . . . . . . . . .168
Structura alternativ i comanda IF...ENDIF . .106 Proiectarea paginilor de cutare
pe Internet . . . . . . . . . . . . . . . . . . . . . . . .169
Structura selectiv i comanda
DO CASE...ENDCASE . . . . . . . . . . . . . .106 Proiectarea i transmiterea documentelor
prin e-mail. Utilitarul Mail Merge Wizard .170
Structura repetitiv i comanda
DO WHILE...ENDDO . . . . . . . . . . . . . . . .106 Recapitulare . . . . . . . . . . . . . . . . . . . . . . .172
Structura repetitiv i comanda
SCAN...ENDSCAN . . . . . . . . . . . . . . . . .107 Capitolul 16 Elemente de programare
Structura repetitiv i comanda orientat spre obiecte . . . . .175
FOR...ENDFOR . . . . . . . . . . . . . . . . . . . .107 Proprietile definitorii ale claselor . . . . . . . .177
Ieiri forate: LOOP i EXIT . . . . . . . . . . . . . .107 Comenzile FoxPro necesare
Proceduri utilizator . . . . . . . . . . . . . . . . . . . . .111 programrii obiectelor . . . . . . . . . . . . . . .177
Funcii utilizator . . . . . . . . . . . . . . . . . . . . . . .111 Capitolul 17 Proiectarea formularelor . . .181
Activitatea de depanare a programelor . . . . .116
Generatorul de formulare (Form Designer) . .182
Sfaturi pentru depistarea i eliminarea
Proiectarea unui formular prin Quick Form . .187
erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . .117
Proiectarea vizual a obiectelor de interfa . .190
Strategii de depanare . . . . . . . . . . . . . . . . . .119
Proiectarea interfeei folosind Form Wizard . .212
Utilizarea instrumentului Debugger . . . . . . . .119
Capitolul 18 Afiarea datelor sub form
Capitolul 13 Operaii cu baze de date
de rapoarte . . . . . . . . . . . . . .217
n Visual FoxPro . . . . . . . . . .124
Rapoarte . . . . . . . . . . . . . . . . . . . . . . . . . . . .217
Descrierea operaiilor cu baze de date
prin comenzi . . . . . . . . . . . . . . . . . . . . . .124 Etichete . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229
Gestiunea interactiv a bazei de date. Grafice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231
Database Designer . . . . . . . . . . . . . . . . .125 Capitolul 19 Proiectarea meniurilor . . . . .234
Crearea rapid a unei baze de date cu Generatorul de meniuri Menu Builder . . . . . .234
Database Wizard . . . . . . . . . . . . . . . . . . .126
Deschiderea i activarea Capitolul 20Proiecte i aplicaii . . . . . . . .238
unei baze de date . . . . . . . . . . . . . . . . . .127 Conducerea aplicaiei printr-un
Operaii asupra unei tabele incluse program monitor . . . . . . . . . . . . . . . . . . .238
n baza de date . . . . . . . . . . . . . . . . . . . .128 Organizarea aplicaiei sub form
Proiectarea interactiv a tabelei de proiecte. Project Builder . . . . . . . . . . .239
prin Table Designer . . . . . . . . . . . . . . . . .131 Generarea aplicaiilor executabile
Fixarea relaiilor persistente ntre tabelele cu Project Manager . . . . . . . . . . . . . . . . .241
unei baze de date . . . . . . . . . . . . . . . . . .135 Realizarea dischetelor de distribuie . . . . . . .243
Proceduri stocate . . . . . . . . . . . . . . . . . . . . .138
Declanatoare . . . . . . . . . . . . . . . . . . . . . . . .139 Capitolul 21 Dezvoltarea profesional
Proiectarea regulilor de integritate n domeniul IT . . . . . . . . . . .246
a bazei de date . . . . . . . . . . . . . . . . . . . .140 Capitolul 22 Teme opionale . . . . . . . . . .248
Capitolul 14 Interogarea bazelor de date . .145 Protecia bazelor de date . . . . . . . . . . . . . . .248
Definirea interogrilor prin comanda Tehnici avansate de gestiune a structurii
SELECT . . . . . . . . . . . . . . . . . . . . . . . . . .145 conceptuale a unei tabele . . . . . . . . . . . .251
Proiectarea vizual a interogrilor . . . . . . . . .149
Capitolul 23 Dezvoltarea unei aplicaii
Proiectarea fiierelor View . . . . . . . . . . . . . . .158
informatice . . . . . . . . . . . . . .255
Capitolul 15 Comunicarea aplicaiei Visual Aspecte teoretice . . . . . . . . . . . . . . . . . . . . . .255
FoxPro cu alte aplicaii . . . .166 Proiectul final . . . . . . . . . . . . . . . . . . . . . . . . .261
Proiectarea fiierelor vedere cu date
la distan . . . . . . . . . . . . . . . . . . . . . . . .166 Studii de caz . . . . . . . . . . . . . . . . . . . . . . .266
Proiectarea rapid a vederilor
cu Remote View Wizard . . . . . . . . . . . . .167 Rspunsuri, comentarii, indicaii . . . . . . .279

4 Informatic Manual pentru clasa a XII-a


Capitolul
Organizarea datelor
1 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 5


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 7


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 printr-
un 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 9


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 confidenia-
litate 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 urm-
toarele 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 meca-
nismului 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 ca-
racteriza 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 automobil familie de
caracteristici

serie culoare marca pret


1111 alb matiz 200 realizare de
1234 roz tico 190 entitate
1999 bleu cielo 300

cheia entitii este domeniul caracteristicii


atributul serie 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 en-
Figura 1-5: Exemplu de model ierarhic
titilor ntr-o structur de tip arbore,

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-caro-
seriei 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 ascen-
dent. 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

2 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.

Studiu de caz 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?

18 Informatic Manual pentru clasa a XII-a


1. Lista activitilor are ca scop identificarea informaiilor manipulate:
Activitaile desfurate Periodicitate Documente
1. Comanda i achiziionarea unor cri Ocazional Oferte, comenzi,
facturi
2. nregistrarea crilor sosite n bibliotec La sosirea Comanda,
ntr-un registru inventar crilor registrul inventar
3. Inventarul crilor existente Anual Registrul inventar
4. Scoaterea din inventar a crilor Ocazional Registrul inventar
deteriorate sau pierdute
5. Completarea fielor pentru cititorii noi La nscrierea Fia cititorului
cititorului
6. Anularea fielor pentru cititorii Ocazional Fia cititorului
plecai sau penalizai
7. mprumuturi i restituiri Zilnic Fia cititorului
8. Afiarea unor situaii centralizatoare Anual Fia cititorilor,
registrul inventar,
situaie centralizatoare
9. Elaborarea fielor de carte i aranjarea La sosira Fia crtii
lor alfabetic pe autori, edituri, domenii etc. crilor
10. Penalizarea cititorilor ntrziere, Fia cititorului
pierdere

2. Lista purttorilor de informaii


Cod Documente Periodicitatea de completare
RI Registrul inventar Ocazional, la sosirea/scoaterea crii din inventar
FC Fia crii Ocazional, la sosirea unei cri
FCIT Fia cititorului La nscriere, mprumut/restituire i retragere
LI Lista de inventar Anual; alctuit de comisia de inventar
OFER Lista ofertelor de carte Ocazional; vine de la edituri
C Comanda Ocazional; pe baza ofertelor; se trimite la edituri
F Factura Ocazional; vine de la editur odat cu livrrile
SIT Situaia centralizatoare Anual

3. Grila informaional
Documente Informaii RI FC FCIT Li Of C F SIT
Titlu * * * * * *
Autor * * * * * *
Domeniu * * *
Editura * * * * *
Adresa-editurii * * *
Date-pers autori *

Capitolul 1 Organizarea datelor n baze de date 19


Documente Informaii RI FC FCIT Li Of C F SIT
Pret-carte * * * *
Numar inventar * * *
Isbn * * * * * * *
Comision *
Data * * * * * * *
Numar-comanda *
Numar-factura *
Cnp-cititor *
Date-pers cititor *
Operaie imprumut/restituire *
Numar-restantieri *
Numar carti * * * * *

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 comenzi facturi

Figura 1-8: Schema conceptual a bazei de date

20 Informatic Manual pentru clasa a XII-a


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
2  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 antetul tabelului =
familie de caracteristici
COLI
cod nume adresa anul
0111 Liceu Art Pcii 9 1850 linia = realizare de
entitate
0231 Informatic Cminelor 9 1971

nume coloan = caracteristica coloana = domeniul


sau atributul entitii 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
profil, sala, iar cod este cheia unic de clase profesori
identificare. Entitatea Profesori are
atributele cod, nume, specialitatea, iar (Cod, profil, sala) (Cod, nume,
cod este cheia de identificare. Pe baza specialitate)
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
cu tabela Profesori i este un atribut 12c Litere P6 102
unic, deoarece o clas nu poate avea
dect n singur diriginte. PROFESORI
b. tabela PROFESORI(cod, nume, Cod nume specialitate Clasa-Dirig
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
cu o singur linie din tabela Clase. 104 Anania L.Romana 12b

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.

Exemplu 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
nume, adresa, medie, iar cod este clase elevi
cheia de identificare. Pe baza acestei
relaii putem afla pentru o clas X care (Cod, profil, sala) (Cod, nume, medie)
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.

Capitolul 2 Baze de date relaionale 23


Relaia 1-n presupune crearea a dou tabele n modelul relaional:
CLASE(cod, profil, sala, cod-dirig), CLASE
unde cod este codul unic al clasei i
Cod Profil sala Alte-informatii
este cheie primar;
12a Info P2
ELEVI(cod, nume, media, cod-clasa)
unde cod este codul unic al elevului i 12b Stiinte 15
cheie primar, iar cod-clasa este 12c Litere P6
codul clasei unde nva elevul i este
cheie extern pentru c face legtura ELEVI
cu tabela Clase. Valorile acestui atribut Cod Nume Media Cod-clasa
nu sunt unice pentru c o clas poate
1 Ionescu 7.50 12b
avea mai muli elevi.
2 Albulescu 10 12c
Observaie: n SGBDR nu pot fi 3 Enachescu 8.90 12c
reprezentate relaii de tip n-n. Ele vor fi
4 Enache 10 12a
sparte n procesul proiectrii bazei de
date n relaii 1-1 i/sau relaii 1-n. 5 Anania 8.00 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 CLASE PROFIL_ELEVI
nume Codcl codcl Profil nume Profil
Albu 9a 9a Info Albu Info
Barbu 9c 9b Mate Barbu Bio
9c 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 elevi obiecte


profil codcl codcl Codel codo nume

incadrare profesori
codcl codo 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. Care sunt muzicienii autori de romane?
2. Care sunt formaiile americane country?
3. Cte discuri a scos vestita cntrea Sofronia Pdureanca?
4. Ct timp dureaz albumul D jalei i d dor?
5. 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.

S presupunem c tabelul urmtor reine codurile produselor


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

com data furn adr cod1 cod2 cod3 cod4 cant val
006 01.03.98 f1 Bc a23 b66 c33 10 12980
007 01.09.98 f1 Bc c33 12 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 data furn adr codprod cant pret valoare
006 01.03.98 f1 Bc a23 10 100 12980
006 01.03.98 f1 Bc b66 10 200 12980
006 01.03.98 f1 Bc c33 10 150 12980
007 01.09.98 f1 Bc c33 12 150 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 La sosirea unei cri adaug un articol i trec anul
(nr_inventar, titlu_carte, autor, intrrii. La scoaterea din inventar caut n tabel
anul_intrarii, numele_cititorului, cartea i o terg. La mprumutarea unei cri
adresa, telefon, data-imprumutului) 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 La sosirea unei cri adaug o linie n Carti. La
(nr_inventar, titlu, autor, editura, scoaterea din inventar trec anul ieirii crii. La
an_intrare, an_ieire) mprumut caut cartea i completez n tabela
CITITORI Cititori codul crii i data mprumutului. La
(cod_cit, nume, adresa, telefon, restituire caut cititorul i terg codul crii i
nr_inventar, data_imprumutului) 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 La sosirea unei cri adaug o linie n Carti.
(nr_inventar, titlu, autor, editura, La scoaterea din inventar trec anul ieirii crii.
an_intr, an_ies, cod_cititor, La mprumut completez n tabela Carti codul
data_imprumut) cititorului i data mprumutului.
CITITORI La restituire caut cartea i terg valoarea din
(cod, nume, date-pers) 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 La sosirea unei cri adaug o linie n Carti.
(nr-inv, titlu, autor, editura, an_intr, La scoaterea din inventar trec anul ieirii crii.
an_ies) La mprumut completez n operaii un nou
CITITORI articol cu numrul de inventar codul cititorului i
(cod_cit, nume, date_pers) data_mprumutului.
OPERATII La restituire caut n operaii i completez data-
restituirii.
(nr_inv, cod_cit, data_imprumut,
data_restituire) 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 Operaiile de mprumut sunt nregistrate n
(nr-inv, date-despre carte) tabela Imprumuturi odat cu efectuarea lor. La
CITITORI restituire, caut n operaii i mut articolul n
(cod_cit, date_pers) tabela Restituiri.
IMPRUMUTURI
(nr_inv, cod_cit, data_imprumut)
RESTITUIRI
(cod-carte, cod-cititor,
data_imprumut, data-restituire)

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 Cod-elev nume_elev adresa diriginte
11a 1 popa iasi albu
11a 2 iancu bacau 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 specializari sporturi
Popa muzica atletism Un elev poate avea mai multe
specializri i poate practica mai
Popa muzica tenis
multe sporturi. Cheia relaiei poate fi
Lucy foto atletism doar atributul Student.
Lucy film tenis

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 nume_prof nume_elev Nr-ore grad
Astronomie popa albu 100 prof.def
Astronomie popa barbu 100 prof.gr.1
Meteorologie florea doltu 200 lector

4. Normalizai urmtoarea relaie cu situaia nchirierii slilor dintr-un complex


sportiv de ctre diferii clieni.
client nume_sala taxa Un client poate nchiria mai multe
popa biliard 1200 sli; o sal poate fi nchiriat de mai
Ion minigolf 2000 muli clieni.

gaby tenis 3000


popa cafenea 1200

5. Evidena cazrilor turitilor n hotelurile unei staiuni este inut n tabela TURIST.
Este corect evidena?
Turist bi hotel taxa/loc
apopei eduard as123456 lido 1200
dorneanu mihai gf345675 lido 1200
enache sorin bv512345 parc 1400

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


depozit material furnizor stoc
Un depozit poate avea mai multe
d1 suruburi Astra 10 materiale. Un material poate sosi
d1 suruburi Zalau 20 de la mai muli furnizori, dar un
furnizor este specializat pe un
d2 carcase Metalcar 19 anumit material.

32 Informatic Manual pentru clasa a XII-a


Capitolul
Introducere n mediul
3 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 Ashton-
Tate 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
Fereastra de comenzi o tabel deschis. Corespunde
comenzii SET STATUS ON

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
comenzilor; Figura 3-2:

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.

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


Exemplu
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 && deschide ecranul de proiectare
Salarii.prg
DO SALARII && compileaz i execut Salarii.prg
! DIR && afieaz lista fiierelor din
directorul curent
run erase salarii.prg && 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:
 mutare  minimizare
 redimensionare  nchidere
 expandare  deschidere
1. Creai cu un editor de texte oarecare un fiier text denumit APLIC.TXT.
Deschidei fereastra de editare a fiierului APLIC.TXT.
2. Modificai poziia ferestrei de editare; redimensionai fereastra.
3. tergei vechiul coninut; scriei un alt text. Selectai o zon din acest text i
multiplicai-o de 3 ori.
4. Selectai o zon din acest text i tergei-o; duplicai textul, crend un alt fiier,
denumit APLIC2.TXT.
5. Deschidei cele dou fiiere n dou ferestre, prezente simultan pe ecran.

38 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 utilita-
rului afieaz un arbore de
directoare standard, construit
dup natura fiierelor ce pot fi
gestionate:
1. Data conine subdirec-
toare pentru baze de date
(.DBC), tabele izolate
(.DBF), interogri (.QPR).
2. Documents conine sub-
directoare pentru for-
mulare (.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 Efect
SET DEFAULT TO <director> Schimbarea directorului curent.
SET PATH TO <lista dir> Indicarea directoarelor de cutare
DIR [[ON]<disc>] [<dir>] Afiarea coninutului directorului curent sau
[<sablon>] [TO PRINTER/TO a celui specificat n clauza ON.
FILE <fis.txt>] ablonul permite limitarea listei la un grup.
Clauza TO indic destinaia comenzii.
COPY FILE <fis1.*> TO Copierea unui fiier identificat unic prin
<fis2.*> specificatorul de fiier <fis1.*> n alt fiier
identificat prin <fis2.*>.
COPY FILE <fis1.*> TO Copierea unui fiier identificat unic prin
<fis2.*> 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 Poziionare n directorul exempl.
set path to d:\fox, c:\ Deschide tabela elevi. Dac nu se gsete n
use elevi directorul curent, se va cuta n D:\Fox sau c:\.
Dir Afieaz bazele de date din directorul curent
dir *.* Afieaz toate fiierele din directorul curent
dir d:\fox\*.txt Afieaz lista fiierelor text din d:\fox.
set default to c:\fox Schimb directorul curent la c:\fox.
copy file elev.dbf Copiaz fiierul ELEV.DBF din directorul curent
to d:\fox\student.dbf n directorul d:\fox sub numele STUDENT.DBF.
!copy *.txt a: Copiaz toate fiierele text pe dischet.
Erase *.txt terge fiierele text din directorul curent.
rename elevi.dbf to student.txt Schimb numele fiierului.
?curdir() Afieaz numele directorului curent.
Cd getdir() 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 com-
punei 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) rename c:\util\tabel.txt to a:
b) copy file c:\util\tabel.txt to a:\lista.doc
c) delete file c:\util\tabel.txt
d) 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
4 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 Descriere
Numeric 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.
Float n VMSP pe 4 B
Double Pentru valori ntre -4.9E-324 i 1.79E308 n VMDP pe 8 B.
Integer Pentru valori ntregi ntre -2147483647 i +2147483646 pe 4 B.
Currency Valori monetare ntre -9*10**14 i +9*10**14; pe 8 B.

Operatori
Aritmetici +, -, *, /, ** (ridicare la putere), % (modulo)
Relaionali <, >, <=, >=, # sau <>sau != (diferit), = (egal)

Funcii standard matematice uzuale


Funcie Efect
=ABS(n) Valoarea absolut.
Exemplu: ABS(-15)=15.
=ROUND(n1,n2) <n1> este rotunjit la zecimala al crei ordin e dat de <n2>
Exemplu: ROUND(1.7567,3)=1.757;
=MOD(n1,n2) Restul mpririi ntregi a lui n1 la n2.
Exemplu: MOD(5,2)=1
=INT(n) 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


=CEILING(n) 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"

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

44 Informatic Manual pentru clasa a XII-a


=VAL(s) Realizeaz conversia unui ir la numr.
Exemplu: VAL('1433.44')=1433.44
=OCCURS(s1,s2) 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 Specific anul, inclusiv secolul.
SET DATE GERMAN/AMERICAN/... Specific formatul de dat.

Operatori
Aritmetici + (adun) sau - (scade) un numr de zile la o dat
Exemplu: {01.01.2001}+3={04.01.2001}
Relaionali <, <=, >, >=, =, <>, #, !=
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 Efect
=MAX/MIN(e1,e2[,e3...]) Calculeaz extremul dintre valorile <e1>, <e2>,...
Exemple: max(14,3)=14; min(14,3,15,6)=3
=TYPE(eC) Returneaz litera corespunztoare tipului de dat.
Exemplu: TYPE ("12")=N; TYPE("[12]")=C
=IIF(eL,e1,e2) Dac e1=.T. returneaz e1, altfel returneaz e2.
Exemplu: IIF(3=5,"corect","incorect")=
"incorect".
=BETWEEN(e1,e2,e3) Testeaz dac e1 aparine intervalului (e2,e3).
Exemplu: BETWEEN(3,0,20)=.T.
=EMPTY(e) Testeaz dac expresia dat ca parametru este vid.
Exemple: Empty("")=.t.; empty({//})=.t.;
empty(5)=.f.
INLIST(e1,e2[,e3...]) 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 5 f. 5 5 .f. .f. .f. .f.

46 Informatic Manual pentru clasa a XII-a


Funcii standard aplicate tablourilor
Funcie Efect
=alen(t,n) 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 Rezolvare
Inserarea unei linii pe poziia 3 din A =ains(a,3)
Inserarea unui element pe poziia 4 din B =ains(b,4)
Inserarea unei coloane pe poziia 1 din A =ains(a,1,2)
tergerea elementului al 4-lea din B =adel(b,4)
tergerea liniei 3 din A =adel(a,3)
tergerea coloanei 2 din A =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 Efect
=asort(b) B(1, 3, 5, 7, 10) cresctor ntregul tablou
=asort(b,1,5,5) B(10, 7, 5, 3, 1) descresctor ntregul tablou
=asort(b,1,3,1) B(7, 5, 3, 1, 10) descresctor, primele 3 elemente
=asort(b,3,alen(b),0) B(3, 5, 1, 7, 10) cresctor, ncepnd de la poziia 3
=asort(a,3,alen(z),1) sortare descresctoare dup coloana 3
=asort(a,3) sortare cresctoare dup coloana 3
=asort(a,9) 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 Efect
<var>=<expresie> Se atribuie variabilei valoarea expresiei.
/STORE <exp> TO <lista-var> Comanda Store permite atribuiri multiple.
INPUT [<mesaj>] TO <var> Comad de citire. Variabila primete
valoarea i tipul expresiei introduse de la
tastatur.
ACCEPT [<mesaj>] TO <var> Comanda de citire a unei variabile de tip
caracter.
@ <r,c> GET<var> Comanda de editare a unei variabile sau
[PICTURE <sablon>] cmp al unei tabele la execuia comenzii
[DEFAULT<exp>][VALID <cond>] READ. <r,c> specific poziia pe ecran
READ a variabilei. PICTURE specific un ablon
de editare; DEFAULT este valoarea iniial;
VALID este condiia de validare.
? <lista-expresii> AT <col> Permite afiarea expresiilor pe linia curent,
ncepnd din coloana specificat.
@ <r,c> SAY <exp> Afieaz valoarea expresiei <exp>
ncepnd din punctul <r, c>.
RELEASE <lista_var> / tergerea unei liste de variabile sau a
ALL [LIKE/EXCEPT <sablon>] tuturor sau a celor ce verific un ablon.
SAVE TO <fis.mem> Salvarea pe disc n fiierul .mem
[ALL LIKE/EXCEPT <sablon> a variabilelor.
RESTORE FROM <fis.mem> Restaurarea prin suprascriere sau
[ADDITIVE] adugare a variabilelor din fiierul .mem
n zona de lucru.
WAIT [<mesaj>] [TO <var>] Pauz n program cu afiarea unui mesaj
[WINDOWS] [NOWAIT] (eventual ntr-o fereastr); tasta apsat
este transmis variabilei <var>.
=MESSAGEBOX(<mesaj>) Funcie pentru afiarea unui mesaj.

Lucrul cu imprimanta
Sunt disponibile dou comenzi care direcioneaz efectul comenzilor de afiare
ctre imprimant.

Comanda Efect
SET PRINTER ON/OFF Activarea/dezactivarea imprimatei.
SET DEVICE TO PRINTER/ TO SCREEN Direcionarea comenzii ctre imprimat
sau ecran.

48 Informatic Manual pentru clasa a XII-a


Exemple

Comenzi Efect
store 0 to a, b, c Variabilele numerice a, b, c sunt iniializate
b=alfa cu valoarea zero; este modificat
coninutul i tipul variabilei b.
? "a=",a Se afieaz a=0.
x={01. 09. 95} Se creeaz variabila x de tip dat calendaristic.
@ 1,5 say "data="+dtoc(x) Se afieaz din punctul 1,5 expresia
data=01091995.
input "nume?" to nume Pentru citirea unui ir trebuie dai i
delimitatoriii acestuia.
accept "nume?" to nume Nu mai este nevoie de delimitatori.
accept "varsta?" to v Atenie! Vrsta va fi tot de tip caracter.
release all like a* Se terg variabilele care ncep cu a.
save to beta all like a Se salveaz n fiierul beta.mem variabila a.
@ 2,2 get b picture 99.99 Se afieaz o zon de editare i se
default 2.00 valid b<=10.00 ateapt introducerea valorii pentru
read variabila b; iniial variabila b=2.00;
nu se prsete zona de editare dac
valoarea introdus este mai mare ca 10.
set printer on Se direcioneaz efectul comenzii de
? 'text' afiare ? ctre imprimant.
Set device to printer Se direcioneaz efectul comenzii de
Set printer on afiare @ ctre imprimant.
@ 1,5 say 'text'

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' Se atribuie variabilei alfa irul 'Elevi'.


Beta='alfa' Se atribuie variabilei Beta irul 'alfa'.
? beta Se va afia coninutul lui beta, adic 'alfa'.
alfa Se va nlocui variabila beta cu valoarea sa,
? &beta alfa i se va afia coninutul acesteia,
elevi adic 'elevi'.
use alfa Se va deschide fiierul 'alfa'.
use &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 a) Ce se ntmpl dac numrul are zecimale i
b=mod(a,23) parametrul al treilea lipsete?
lung=5 b) Ce se ntmpl dac lungimea indicat este
zecim=3 prea mare? Vor fi adugate spaii?
? str(a,lung,zecim)
? str(a,3) c) Cum trebuie calculat lungimea pentru a repre-
? str(b, lung) zenta i zecimalele?
? str(b,10,zecim) d) Ce se ntmpl dac expresia are zecimale, dar
? str(b,lung) lipsete n funcie parametrul al treilea? Are loc
trunchierea? Se rotunjete la ntreg?
2. Urmrii rezultatul afiat n fiecare caz. Ce efect are comanda SET EXACT?
a='abcd-' ?a<c, a=c, a>c SET EXACT OFF
b='ef-gh' ?b<d, b=d, b>d ?b<e, b=e, b>e
c=a+b+'*' ?a>f, a=f, a<f ?a=f, f=a, a#f, f#a
d=a-b+'*' ?a>d, a=d, a<d ?'abcd'$f
?c, d SET EXACT ON ?f$a, b$a, a$b
e=b-a+'*' ?a<c, a=c, a>c ?g$a, a$"ABCD
f='bc' ?b<d, b=d, b>d
3. Urmrii efectul urmtoarelor comenzi i scriei ce se afieaz:

? min({ 06/09/93}, {05/09/93}) set century on ? cmonth(x)


? x=date() ? year(x), x ? cdow(x)
? day(x), month(x), year(x) ? dmy(x) ? len(month(x)
? mdy(x) ? ymd(x)
4. 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

5 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 antetul tabelei


cod nume med cls ...... = STRUCTURE

101 TOMA 7.04 12a ......


o linie n tabel
102 VLAD 4.50 11b ...... = 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 Cmpul poate
reper index conine valori video

Schimbarea Tipul cmpului se Lungimea i numrul Se pot insera sau


ordinii alege dintr-o list de poziii zecimale terge cmpuri
cmpurilor nchis

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 med adr dn sit
c, 20 c, 20 c, 3 l, 1 n, 2 n, 5, 2 m, 10 d, 8 c, 10
Comanda de creare a acestei tabele este:
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))

Proiectai structura unei tabele care s permit rspunsuri la diferite


Exemple 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 Tabela va trebui s conin numele i prenumele
alfabetic? 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 Putem specifica printr-un cmp Logic dac
este adresa stabil a cminitilor? elevul este sau nu cminist. Pentru adres vom
folosi tipul Memo.

Capitolul 5 Crearea tabelelor 53


3. Care sunt elevii care i Pentru rezolvare va trebui s reinem data
srbtoresc azi ziua de natere naterii (tip dat-calendaristic) a fiecrui elev
i n ce clas sunt ei? i clasa (tip caracter).

4. Care este situaia colar a Putem reine mediile la toate obiectele, iar
elevului POPA ION (promovat, comparnd aceste medii cu 5 s obinem situaia
corigent, repetent)? 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 Prelucrarea tabelei va determina maximul dintre
medie? valorile unui cmp. Media de absolvire va fi
definit ca tip numeric cu 2 zecimale.

6. Ct la sut din totalul absenelor Interogarea necesit reinerea pentru fiecare


sunt nemotivate? 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 Tabela va conine pentru fiecare elev drept cheie
Popa Ion? 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 Zona 2 va contine tabela Profesori.dbf.
use profesori
modify structure Modificarea structurii fiierului din zona curent.

use elevi in 1 alias EL Se deschide Elevi.dbf n zona 3 cu aliasul EL.


Select EL Poziionare pe zona 1 prin aliasul EL.
select 0 Deschiderea primei zone libere.
create student Crearea fiierului Student.dbf n zona liber.
sele student Selectarea zonei prin aliasul fiierului.
accept nume ? to Nume Variabila Nume este creat prin citire.
? EL.Nume, m.Nume 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 S presupunem c biblioteca are un singur exemplar dintr-o
(titlu, autor, editura, editia, carte, deci putem lua drept cheie numrul de inventar. Tabela
pre)? 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 Completm structura Crti cu atributele an-intrare i an-


ieit dup 1994? ieire de tip Dat calendaristic.

3. Lista crilor din colecia Este necesar n tabela Carti atributul colectie de tip ir de
De dragoste. caractere.

3. Lista cititorilor nscrii la Este necesar n tabela Cititori atributul data-naterii, de tip
bibliotec mai mici ca 15 ani. dat calendaristic.

4. Sunt i profesori de la Atributele ocupaie i loc de munc vor fi incluse n tabela


Liceul de Informatic inscrii Cititori. Le vom defini ca iruri de caractere.
la bibliotec?

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 n tabela Operaii ne vom poziiona pe ultimul articol i vom
mprumut nregistrat? Cine afla din tabela Carti titlul i din tabela Cititori numele
a mprumutat i ce carte? 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 data furnizor adr tel valoare


n,5 d,8 c,10 c,10 n,8 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. Cte cazuri de trafic de valut au fost anul acesta comparativ cu anul trecut?
2. Care au fost dosarele n care verdictul a fost achitat?
3. n ce dosare s-a dat pedeapsa maxim?
4. La ce dosare (cazuri) a lucrat persoana X?
5. 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
6 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 Efect
ALL Specific toate articolele fiierului.
NEXT <n> Urmtoarele <n> articole fa de articolul curent.
REST Toate articolele pn la sfritul fiierului.
RECORD <n> 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.

Exemplu 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
# cods numes grupa anul numec
1 1 Dumitru Alina 1 1 info
2 2 Luca Stefan 1 1 mate
3 3 Amarandei Ion 1 2 info
4 4 Alexa Ioana 2 1 engleza
5 5 Nucu Mary 3 2 chineza
Go top && poziionare pe primul articol

Capitolul 6 Vizualizare, cutare, sortare 59


List "*", grupa, "*", numes while anul =1 && afiare ct vreme anul=1
# * grupa * nume
1 * 1 * Dumitru Alina
2 * 1 * Luca Stefan
List "*", grupa, "*", numes for anul =1 &&afiare studeni din anul=1
&& observai rspunsul sistemului
# * grupa * nume numec
1 * 1 * Dumitru Alina info
2 * 1 * Luca Stefan mate
4 * 2 * Alexa Ioana 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 Fie tabela STUDENT.DBF cu urmtorul coninut:


# cods numes grupa anul numec
1 1 Dumitru Alina 1 1 info
2 2 Luca Stefan 1 1 mate

60 Informatic Manual pentru clasa a XII-a


3 3 Amarandei Ion 1 2 info
4 4 Alexa Ioana 2 1 engleza
5 5 Nucu Mary 3 2 chineza
Use student Deschiderea tabelei
? recno() Poziionare pe pe primul articol
1
skip -1 Devans cu o poziie
? bof()
.T. funcia BOF ntoarce true
locate for anul=2 Cutm un student din grupa 2; poziionarea s-a
? eof () facut n interiorul fiierului:
.F. funcia eof() returneaz fals.
display numes
Amarandei Ion Afim articolul cutat
continue
display numes Cutm un alt student din grupa 2
Nucu Mary
continue
End of locate scope
? eof () Mesajul de cutare fr succes; suntem la sfritul
.T. fiierului? Da
?lookup(numes,1,grupa) Aflm numele primului student din grupa 1
Dumitru Alina
Skip 1 Facem saltul peste articolul gsit
?lookup(numes,1,grupa) O nou cutare nu schimb rezultatul
Dumitru Alina

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 rezul-
tatelor 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 sele 1
existente (ordonate sort on autori to man
dup autori)? use man
list titlu,autori,editura,colectia,pret
b) Ce cri au intrat sau sele carti
au ieit dup anul 1994? list titlu, autori for an-intrare>=1994 or;
an-iesire>=1994
c) Care este lista crilor sele carti
din colecia De dragoste? list for colectie=dragoste

d) Care este lista cititorilor sele 2


nscrii care au vrsta sub list for year(date())-year(data-nastere)<15
15 ani?

2 Revedei lecia crearea tabelelor

62 Informatic Manual pentru clasa a XII-a


e) Sunt i profesori de la Sele cititori
Liceul de Informatic nscrii Locate for ocupatie="prof" and;
la bibliotec? loc-munca="informatica"
? 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 sele operatii
mprumut nregistrat? go bottom
Cine a mprumutat i sele carti
ce carte? ? 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)) Conine numele i grupa fiecrei echipe.


JUCATORI (nume C(9), echipa C(9), Este un istoric cu echipe i juctori.
intrare D, iesire D)
CAMPIONAT (e1 C(9), e2 C(9), data D, Pstreaz meciurile campionatului.
loc C(9),p1 N(2), p2 N(2), arbitri M)
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 nca-
seaz 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
7 


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 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.
# cods numes grupa anul numec
1 10 Dumitru Alina 1 1 info
2 2 Luca Stefan 1 1 mate
3* 5 Andrei Sara 5 2 italo

Use studenti Eronat. Condiia dat n clauza FOR este testat


Append from concurs dup plasarea articolului pe noua structur, iar
from admis tabela Student nu are cmpul admis.
use concurs Corect. n mod implicit se preiau date din toate
copy to man for admis cmpurile cu acelai nume Clauza FIELDS
use studenti permite selectarea cmpurilor care vor fi folosite
append from man fields la adugare.
nume,bi,media

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.

use studenti && implicit comutatorul SET DELETED este OFF


Exemplu delete record 3
list && articolul 3 este marcat pentru tergere

use student Deschidem baza de date din exemplul anterior


delete for cods>=5 Marcm articolele cu cods>=5
recall all for grupa # 1 Anulm marcarea celor care au grupa<>1
pack tergem efectiv articolele din grupa 1 cu cod>6.

66 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 Fie tabela STUDENT.DBF cu urmtorul coninut:

# cods numes grupa anul fac


1 11 Dumitru Alina 1 1 info
2 23 Luca Stefan 1 1 mate
3 34 Amarandei Ion 1 2 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!!

# cods Numes grupa anul fac


1 1 Dumitru Alina 1 1 info
2 2 Luca Stefan 4 5 mate
3 3 Amarandei Ion 1 2 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 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 Browse lock 3


3 coloane.

Afiai numai numele i clasa elevilor, browse fields cls'nume:R';


precum i totalul absenelor. absente=absn+absm
Numele nu poate fi modificat!
Afiai numai elevii din clasa a IX-a A. browse for cls= 9a

Afiai primii 20 de elevi, fixnd browse next 20 freeze absm


pentru modificare cmpul Absm.

Afiai elevii clasei a XI-a B, avnd drept Browse fields nume:H


coloane nume_elev, clasa, media.

68 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 anu-
mit 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 compu-
nerea 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 Accept 'nume cititor' to x
retrage.
Se caut n tabela CITITORI i se Sele cititori
reine codul. Cod=lookup(cod_cit, x, nume)
Delete all for nume=X
Pack

Din tabela OPERAII se copiaz Sele operatii


ntr-o singur operaie toate articolele Set filter to cod_cit=y
cititorului care au data_restituirii Copy to man2 for empty(data_rest)
necompletat, pentru a vedea dac Delete all
are restane. Pack

Este afiat un mesaj dac sunt cri Use man2 in 4


nerestituite. ? 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 Select operatii


mprumut. 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 Select operatii


data restituirii. Presupunem c datele Locate for cod_carte=x and cod_cit=Y
sunt corecte, altfel ar trebui folosit and data_rest={//}
structura alternativ, pe care o vom replace data_rest with date()
nva mai trziu!

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


Se citete codul cititorului, numele, accept "cod-cititor" to X
adresa. Accept "nume? " to y
Accept "adresa?" to Z
Accept "data nasterii?" to w

70 Informatic Manual pentru clasa a XII-a


Se caut articolul i se completeaz Select cititori
data restituirii. Presupunem c datele Append blank
sunt corecte, altfel ar trebui folosit replace cod_cit with val(x)
structura alternativ, pe care o vom replace nume with y, adresa with y
nva mai trziu! 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 Select carti
pierdute, care ar trebui trecute n alt delete for uzat
eviden! copy to deterior for deleted()
pack

b) Nu a fost aplicat majorarea replace all pret with pret*125 for


preului cu 25% la toate crile intrate year(dataintr)<=1990
n bibliotec nainte de anul 1990!

c) Editura ALBATROS i-a schimbat set date to german


numele n PINGUIN la 1 septembrie replace editura with 'PINGIUN' for
1992. Nu s-a fcut aceast modificare! editura= 'ALBATROS' and
dataintr>={01.09.92}

d) Numele autorului G. B. SHAW a repl autor with 'G. B. SHAW' for


fost scris greit, sub forma G.B.SOU. autor= 'G.B.SOU'

e) Crile autorului POPA ION ar delete all for upper(autor)=POPA ION


trebui marcate, ntruct s-a dovedit c recall for dataintr<={22.12.89}
este un plagiator, chiar dac numai pack
crile aprute dup revoluie, vor fi
scoase definitiv din eviden!

f) De ce sunt manualele trecute n Use manuale


fiierul Manuale.dbf dac are Replace all alte_inf with "manual"
Use carti
aceeai structur? Concatenai Append from manuale
fiierele de cri i de manuale! Use
Delete file manuale.dbf

g) Nu au fost listate separat Use carti


manualele! List for alte_inf=manual" to print

h) Mutai cartea de cod =200 sfritul Var 2.prg


tabelei Carti. use carti n 1
use carti n 2 again
Vom scrie un program lansnd editorul sele 1
de programe cu Modify Command. locate for cod_carte=200
Vom apela prin DO <nume> sele 2
append blank
Var 1.prg replace b.titlu with a.titlu
use carti replace b.autor with a.autor
copy to man for ....etc se vor copia toate campurile
sele 2
cod_carte=200 use
pack sele 1
append from man delete
erase man.dbf pack

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 use liceu
copy to man for cls=IX dele for between(cls, 9, 12)
use man repl titlu with;
replace all titlu; titlu+cls for deleted()
with alltrim(titlu)+ "cls."+ cls use carti
use carti append from manuale;
append from man for deleted()
erase man.dbf

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, numr-
nopi, suma-spor-noapte, reineri, rest-plat). Se cere:
1. Afiai persoanele care lucreaz n societate.
2. Ce salariu are o persoan al crei nume este introdus de la tastatur?
3. Care sunt persoanele fr copii n funcii de administraie?
4. Alocaia de stat pentru copii se calculeaz ca o sum fix nmulit cu numrul
de copii. Trecei n baza de date alocaia.

72 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 PERSONAL.FPT
nume studii Academia de Sudii Economice
Facultatea de Cibernetic, Bucureti
POPA ADR1
IONEL ADR2
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 propriu-
zise (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 Efect
MODIFY MEMO <lista-cmp> Deschiderea unei ferestre de editare pentru
fiecare cmp Memo dintr-o list dat.

Capitolul 7 Actualizarea datelor 73


Comanda Efect
APPEND MEMO <memo> Introducerea datelor dintr-un fiier text n
FROM <fisier> [OVERWRITE] cmpul Memo. Clauza Overwrite este
necesar cnd dorim suprascrierea coninutului
fiierului text peste vechiul coninut al cmpului
Memo. Operaia implicit este de adugare.
COPY MEMO <memo> TO Extragerea dintr-un cmp Memo a informaiilor
<fis. txt> [ADDITIVE] ntr-un fiier text. Operaia implicit este de
suprascriere. Dac dorim ca vechiul coninut s
nu se piard, trebuie folosit clauza ADDITIVE.

Exemple 1. Fie tabela STUDENT.DBF

# cods numes grupa anul alte_inf


1 1 Dumitru Alina 1 1 Memo
2 2 Luca Stefan 1 1 Memo
3 3 Amarandei Ion 1 2 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 Observai lipsa datelor din
buletin: seria AD, numr 457890
articolul 2?
3 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 Varianta 2
use telefon use telefon
locate for nume="Dumitru Alina" nrtel=lookup(telefon,;
display "tel."+str(telefon); "Dumitru Alina", nume)
to file telef. txt use student
use student repl alte_inf;
locate for numes="Dumitru Alina" with adresa +str(nrtel);
append memo alte_inf; for numes="Dumitru Alina"
from telef. txt

74 Informatic Manual pentru clasa a XII-a


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 copy memo alte_inf to man2
locate for nume="Amarandei" append memo alte_inf ;
copy memo alte_inf to man1 from man1 overwrite
x=recno() goto x
locate for nume="Luca" 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 Id-server
Microsoft Excel Chart grafic ExcelChart
Microsoft Excel foaie de calcul ExcelWorksheet
Microsoft Graph grafic MSGraph
Microsoft Word 6.0 document WordDocument.6
Microsoft Word 6.0 imagine Word.Picture.6
PaintBrush imagine Pbrush
imagine Bitmap StaticDib
Sunet SoundRec
Texte 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 Deschide o
tipul fereastr
obiectului. pentru
alegerea
obiectului.

Figura 7-4: Introducerea interactiv a unui obiect ntr-un cmp General

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


2. Selectai Edit, Insert Object.
3. Alegei tipul obiectului de inserat.
4. Alegei fiierul din fereastra deschis prin butonul File...
5. 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
Alegei tipul obiectului
General

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.

Folosirea cmpului General


Exemple 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) Crearea tabelei
CD GETDIR() Poziionare pe director prin fereastra
de dialog
Nr = ADIR(A, "*.doc") NR=Numr de fiiere copiate
IF nr > 0 Dac avem documente, atunci adugm
FOR i = 1 to nr cte un articol n fiier reinnd numele
APPEND BLANK documentului i coninutul su.
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
8  Indexarea tabelelor
 Cutarea rapid i poziionarea n tabela indexat

Indexarea tabelelor
Indexarea este o metod de accesare rapid, ntr-o manier ordonat, a coninu-
tului 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.

# nume pren cls absn


1 popescu teo 11b 5 cls nume
2 albule geo 11a 4 # cheie # cheie
3 stan ana 11c 6 5 9c 2 albule
4 marinic ion 11d 0 2 11a 5 albule
5 albule ina 9c 7 1 11b 4 marinic
3 11c 1 popescu
4 11d 3 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 Efect
=TAG (<nr-index>) Numele unui reper-index care ocup pozia
<nr_index>
=TAGNO(<nume-reper>) Poziia pe care o ocup un index dat.
=KEY (<nr-index>) Expresia cheii de indexare pentru reperul-index
care ocup poziia <nr-index>
=ORDER([<nr-zona>]) Numele indexului activ.
=TAGCOUNT([<zona>]) Numrul de repere index din multiindex.

Exemple 1. Fie baza de date ELEVI.


Observai comenzile i efectul lor:
nume pren Cls absn admis Dn
popescu teo 11b 5 .T. 11/11/94
albule geo 11a 4 .T. 09/09/95
stan ana 11c 6 .T. 07/11/95
marinic ion 11a 0 .F. 08/09/95
albule ina 11a 7 .F. 09/09/95
index on cls tag cls creare tag cls n fiierul structural elevi.cdx
unique
list acces permis la primul articol al fiecrei clase

80 Informatic Manual pentru clasa a XII-a


# nume pren cls absn admis dn
2 albule geo 11a 4 .T. 09/09/95
1 popescu teo 11b 5 .T. 11/11/94
3 stan ana 11c 6 .T. 07/11/95

index on dtos(dn)+nume crearea reperului Dn n elevi.cdx permite


tag dn ordonare cronologic i alfabetic
index on nume + crearea reperului nume n elevi.cdx
str(abssn)tag x permite ordonare alfabetic i dup absene!
index on nume tag nume crearea reperului nume pentru parcurgerea
alfabetic
use elevi order nume activarea tag-ului nume din Elevi.cdx
sau set order to tag nume
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
use elevi Atenie la
index on &cmp tag &cmp macrosubstituie!
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 Efect
FIND <expC>| SEEK <exp> Comanda de cutare rapid
=SEEK (<exp>) Funcie care caut <exp> i returneaz .T.
dac a gsit un articol.
= FOUND() / =EOF() Funcii care returneaz .T. dac articolul
a fost gsit.

Exemple Fie tabela ELEVI:

# nume pren cls absn admis dn


1 albule geo 11a 4 .T. 09/09/95
2 albule ina 11a 7 .F. 09/09/95
3 marinic ion 11a 0 .F. 08/09/95
4 popescu teo 11b 5 .T. 11/11/94
5 stan ana 12c 6 .T. 07/11/95
6 galeriu sanda 9a 0 .F. / /

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.
var=popescu Dac dorim cutarea cu o variabil, atunci trebuie
find &var s folosim macrosubstituia.
? recno() Afim numrul articolului curent.
4
index on cls tag cls Indexm dup codul clasei.

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


? eof() Cutare euat. Observm funciile EOF (care
.T.
? found() returneaz True) i FOUND (care returneaz
.F. False) pentru eecul cutrii.

82 Informatic Manual pentru clasa a XII-a


find 9a Valoarea cheii de cutare ncepe cu spaiu, deci
? eof() va trebui pus ntre ghilimele. A fost gsit un
.F. articol, deci poziionarea nu este pe eof.
Set order to tag nume Iniializarea variabilei s-a fcut anterior cu valoarea
seek var Popescu. Cutarea prin seek conduce la acelai
? found()
.T. rezultat ca i folosirea comenzii FIND.

? seek(popescu) Observai funcia de cutare, care ntoarce


.T. valoarea adevrat sau fals.

2. Fie baza de date MECIURI care reine toate meciurile unui campionat:

# cod e1 e2 loc data ora


1 dinamo farul constana 08.09.95 10
2 poli corvinul iai 08.09.95 15
3 rapid dinamo bucureti 07.09.95 10
4 steaua rapid bucureti 08.09.95 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 Varianta 2
use meciuri use meciuri
sort on data, loc, ora to man index on
use man dtos(data)+loc+str(ora; tag v
repl all cod with recno() I=1
use scan
erase meciuri. dbf repl cod with i
rename man. dbf to meciuri. i=i+1
dbf 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) ce actori au jucat n filmul Pe aripile vntului?
h) cu cine a mai jucat actorul Ralph Macchio n Karate Kid?
i) lista actrielor n via care n-au depit 30 ani, pe naionaliti;
j) primii 5 veterani ai filmului romnesc.
2. Verificai dac cele dou secvene produc acelai rezultat!
Secvena 1: Secvena 2:
use elevi use elevi
index on cls tag cls index on cls tag cls
find 11a ? iif (seek
? iif (found(), da,nu) (11a,cls).da,nu)

3. Dorim s gsim media elevului Stan Ana din 12C folosind comanda Seek. Care
variant este corect?
use elevi Use elevi
index on cls+nume+pren tag x Index on cls+nume+pren tag x
seek 12CStan Ana Seek Stan Ana 12c
? iif(found(), media,nu este eleva) ? 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;

Imaginai cereri de informaii specifice


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

84 Informatic Manual pentru clasa a XII-a


Capitolul
Relaionarea tabelelor
9  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 Efect
=RELATION(<nr-relatie>) Returneaz expresia relaiei date prin <nr-relatie>.
=TARGET(<nr-relatie>) Returneaz numele tabelei secundare legate prin
relaia <nr-relatie> de fiierul deschis n zona
specificat.

Studiu de caz 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 ELEVI
cls dirig nume pren cls absn admis
9a barbu 1 albule geo 11a 4 .T.
10a carp 2 albule ina 11a 7 .F.
11a doltu 3 Marinic ion 9a 0 .F.
11b nanu 4 popescu teo 11b 5 .T.
5 Stan ana 11c 6 .T.

use elevi in 1 obinem pentru fiecare elev


use clase in 2 order cls numele dirigintelui
sele 1 && fiierul copil trebuie indexat
set relation to cls into B
list a->cls, a->nume, b->dirig

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


CLASE ELEVI
cls dirig nume pren cls absn admis
9a barbu 1 albule geo 11a 4 .T.
10a carp 2 albule ina 11a 7 .F.
11a doltu 3 Marinic ion 11a 0 .F.
11b nanu 4 popescu teo 11b 5 .T.
5 Stan ana 11c 6 .T.
eof

use elevi in 1 order cls obinem pentru fiecare diriginte numele


use clase in 2 primului elev din clasa sa
sele 2 presupunem c indexul cls din ELEVI
set relation to cls into a este creat deja
list a->cls, a->nume, b->dirig

86 Informatic Manual pentru clasa a XII-a


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 sele 1
use clase order cls in 2 set relation to cls into B
use sali order cls in 3 sele b
set relation to cls into C
sele 1
list c.sala for a.nume=x and a.pren=y

# nume pren cls cls dirig cls sala


1 albule geo 11a 9a barbu 11a 1.1
2 albule ina 11a 10a carp 11b 1.2
3 marinic ion 11a 11a doltu 11c 2.1
4 popescu teo 11b 11b nanu 11d 2.2
5 stan ana 11c

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

use clase in 1 Afim ce dirigini au elevii claselor


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

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
# nume cls
1 Albulet Ion 11a cls obiect codp codp nume
2 Albulet Jan 11a 11a mate 1 1 POPA
3 Marinica B 11a 11a fizica 2 2 ALBU
4 Popescu K 11b 11a chim 3 3 NICU
5 stan 11c
use elevi in 1 set skip to b
use obiecte in 2 order cls sele 2
use profesori in 3 order codp set relation to codp into c
sele 1 sele 1
set relation to cls into obiecte 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 set relation to cls into b
use elevi in 2 order cls set relation to codp into c
use profesori in 3 order codp set skip to b
sele 1 list a.obiect, b.nume,c.numep
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

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 Cu un copil Cu mai muli copii
Fr reinere Popescu Ionescu Vasilescu
Cu o singur reinere Ex. CAR Zaharescu Minulescu Albulescu
Cu mai multe reineri. Dobrescu Enachescu Nasuescu
(Ex. CAR, RATE, PENSIE)
Situaia legat de funcii i locuri de munc Muncitor Contabil inginer
Sectia 1 Popescu Ionescu Vasilescu
Sectia 2 Zaharescu Minulescu Albulescu
Sectia 3 Dobrescu Enachescu Nasuescu

Pentru fiecare baz de date proiectai rela-


Sarcini pentru realizarea iile dintre tabele i imaginai interogri pe
unui mini-proiect care s le rezolvai folosind aceste relaii.

Capitolul 9 Relaionarea tabelelor 89


Capitolul
Transferul de date
10 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 Efect
APPEND FROM ARRAY Se adaug la tabela activ liniile dintr-un tablou; fiecare
<tablou> [FOR<cond>] linie corespunde unei nregistrri; coloanele sunt copiate n
[FIELDS <lista-cmp>] 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 Are loc copierea vectorului <tablou> sau a unor variabile
<tablou>/MEMVAR de memorie cu acelai identificator (MEMVAR) n
[FIELDS <lista-cmp>] nregistrarea curent din tabela activ. Copierea se face de
[MEMO] 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> Comanda realizeaz trecerea articolelor din tabela activ
[FIELDS <lista ntr-un tablou, astfel nct fiecare articol devine o linie.
cmpuri>] [<domeniu>] Implicit sunt considerate toate cmpurile. Matricea nu
[FOR<cond>] trebuie s fie declarat anticipat.
[WHILE<cond>]
SCATTER [FIELDS Cmpurile (toate sau cele specificate n FIELDS) din tabela
<lista-cmp>][memo] activ se vor copia ntr-un vector sau n variabilele speciale
TO <tablou>/MEMVAR (clauza MEMVAR).
REPLACE FROM ARRAY Se nlocuiesc cu elementele din tabloul specificat acele
<tablou> [FIELDS<lista valori care corespund cmpurilor din clauza FIELDS
cmpuri>] [<domeniu>] (implicit toate cmpurile). Comanda REPLACE are ca
[FOR <cond>] [WHILE domeniu implicit articolul curent.
<cond>]

90 Informatic Manual pentru clasa a XII-a


Exemple
1. Adugai la tabela ELEVI elementele masivului NOTE.
ELEVI.DBF note [2, 6]
nume rom mat fiz chim x 8 8 7 8 10
ION 10 8 8 6 y 10 9 8 9 10
x 8 8 7 8
y 10 9 8 9 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 note [2, 6]
nume rom mat fiz chim ION 10 8 8 6 .F.
ION 10 8 8 6 POPA 10 9 8 9 .F.
LUCA 8 8 7 8
POPA 10 9 8 9 copy to array note for rom=10
3.
Use elevi Se introduc date despre primul elev n vectorul A.
scatter to array a Numrul de elemente este egal cu numrul de cmpuri.
? nume,a[1], a[2] Putem s ne referim la elemente prin indicii lor.
ION ION 10 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 Observai calificarea variabilelor!


POPA 9 10

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 conca-
tenarea datelor n vederea calculrii tuturor mediilor i afirii tuturor rezultatelor.
nume p1 p2 proiect
albu 8.77 7.63 10 COMISIE1.DBF
andrei 10 10 10 p1 reine nota la romn,
aurel 5.66 6.50 9 iar p2 nota la matematic.

nume mate lrom med


barba 10 9 9.50 COMISIE2.DBF
baciu 10 7 8.50 Numele cmpurilor corespund
bucur 10 7 8.50 obiectelor de examen

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


candidat proba1 proba2 coala
carp 10 4.66 economic
crbune 10 8.99 informatic COMISIE3.DBF
ciurea 10 5 informatic Proba1 = romn,
cocea 10 10 economic 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 sele c
use comisie2 in 2 copy to array c fields
use comisie3 in 3 candidat,;
select 4 proba2, proba1;
create dbf bac (nume C(10),; for scoala=informatic
rom N(5,2),mate N(5,2),; sele d
med N(5,2)) append from array a
sele 1 append from array b
copy to array a append from array c
sele 2 close databases
copy to array b fields nume,; release all
lrom, mate

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 Trecerea datelor din fiierul de tip special n
<tip-fis> tabela activ.
COPY TO <fisier> TYPE <tip-fis> Transferul datelor dintr-o tabel .DBF n alt tip de
fiier.
IMPORT FROM <fisier> TYPE PDOX Conversia unui fiier de alt tip ntr-un fiier .DBF.
/ RPD / WKS / WRK / XLS
EXPORT TO <fisier> FIELDS Conversia unui fiier .DBF n alt tip de fiier.
<lista-cmpuri>][<domeniu>] Tipurile de fiiere sunt indicate n clauza type.
[FOR <cond>] [WHILE <cond>][TYPE] Datele care vor fi convertite pot fi filtrate /selectate.
DIF / MOD / WKS / WRK / XLS

<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 Fie tabela ELEVI, cu urmtorul coninut:

# nume dn cls absn absn m1 m2 m3 an bi


1 popescu 11a 10 15 6 7 8 8
2 ionescu 11a 0 5 9 7 8 8
3 zaharescu 11b 12 1 2 10 10 10
4 fictiv 11b
5 albu 11a 10 10 10 10 10 10
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, , Observai clauza
zaharescu, , , 11B, 12, 1, 2, 10, 10, 10, Delimited!
fictiv, , , 11B, , , , , , , , , ., ., .,
albu, , , 11A, 10, 10, 10, 10, 10, 10, ,

append from xxx delimited Adugarea datelelor din xxx.txt


go 6 Poziionare pe articolul 6
dele rest tergerea celorlalte articole.
pack
copy to zzz type sdf Exportarea bazei sub form standard.
type zzz.txt

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 Secvena 2 Secvena 3 Secvena 4
Use elevi Use elevi Use elevi Use elevi
scatter to memvar scatter memvar go 2 goto 2
accept to nume accept to nume scatter memvar scatter to
input to rom go bottom ?memvar(1) memvar
input to mat fiz=elevi.mat+1 ?m.nume, m.mat
fiz=elevi.fiz append blank
append blank gathr memvar
gather from memvar

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


Capitolul
Prelucrri statistice
11 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 cls absm absn p1 p2
popescu minel 11B 10 5 10 10
albule geo 11A 4 4 10 10 Numrul total de
popescu sile 11C 5 6 10 10 elevi se calculeaz
marinic marin 11C 10 6 10 9 n variabila V
Count to V
ionesco marin 11C 4 6 10 9 ?V
albule dino 11A 0 0 10 9

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 && eroare: numr de variabile
absm +absn to x, v && 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 Proba1 Proba2 Proba3
Popescu 10.00 3.78 8.00
... ... ... ... mediile la aceste probe
Medii 8.75
nota maxim la aceste probe
Nota maxima 10
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 append blank
gather from a fields proba1,; gather from b fields proba1,;
proba2, proba3 proba2, proba3
repl nume with medii 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 4-10 10-20 >20
gr1 10% 25% 30% Numerele reprezint
gr2 ... ... ... sute de RON.
def 5% 15% 20%
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: CREATE TABLE / CREATE
MODIFY / COPY STRUCTURE
SET FIELDS TO, =FIELDS(N)
Deschidere/nchidere USE, CLOSE ALL
SELECT <n>
Afiarea coninutului LIST, DISPLAY afisare continut
SET FILTER TO, =RECNO(), =RECCOUNT()
Cutare i poziionare LOCATE, CONTINUE, FOUND()
FIND / SEEK
Ordonarea coninutului SORT, INDEX
Duplicarea coninutului COPY TO <dbf> / TO TYPE / TO ARRAY
unei tabele SCATTER
Adugarea datelor APPEND / APPEND BLANK
APPEND FROM ARRAY / <dbf> / TYPE
GATHER
tergerea datelor DELETE, RECALL, PACK, ZAP, SET DELETED,
=DELETED()
Corecia datelor REPLACE, BROWSE
Relaionarea tabelelor 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 2. use bancheri 3. use bancheri 4. use bancheri
bancheri.dbf to; sort on nume; copy to array; copy stru to;
ban.dbf to ban; ban ban
copy file field nume
bancheri.fpt to
ban.fpt
5. use bancheri 6. use bancheri 7. use bancheri 8. use bancheri
copy stru to ban copy to ban; sort on nume; index on nume;
copy to array to ban for not to ban tag ban
use ban empty(cod)
append from array ban
release ban
9. use bancheri 10. use 11. use 12. use
list to file; bancheri bancheri bancheri
ban copy stru to ban copy to ban copy file;
use ban bancheri.dbf to;
append from; ban.dbf
bancheri

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 data furnizor produs cant pret term-livr onorat conditii
n, 5 d, 8 c, 20 c, 10 n, 10, 2 n, 10 D, 8 l, 1 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 categorie agentie
n, 5 c, 15 c, 1 n, 2 c, 15

numele unitii de H=hotel Numele ageniei


cazare i staiunea: M=motel care a nchiriat
ex.: mamaia/alfa, V=vil unitatea
eforie/gama C=csue

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 cod_cam data_s data_p nume_pers b_i


n, 4 n, 3 d, 8 d, 8 c, 15 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 dispo-
nibile) 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 Copy to alfa for nume=a
Sort on nume+str(med) to beta Type beta
Index on nume tag delta unique Use delta
List next 5 to file delta Store popa to nume
Save to nume Append memo to fisier
Append from fisier Count to fisier
Sum to fis Do fisier
Rename elev to student Set default to scoala
Restore from date Replace elevi to studenti

102 Informatic Manual pentru clasa a XII-a


B. Care sunt comenzile corespunztoare urmtoarelor operaii?

Editarea unui fiier text Afiarea unui text


tergerea de pe disc a unui fiier Citirea unei variabile
Modificarea lungimii unui cmp Suma valorilor unui cmp din toat tabela
Afiarea unei expresii Afiarea la imprimant a codului surs
a unui program
Crearea unui index Duplicarea coninutului unei tabele
Schimbarea directorului curent Apelul unui subprogram
Adugarea unui articol vid tergerea tuturor variabilelor
Pauz n program pn la Fixarea unei relaii de tip 1-n
apsarea unei taste

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


REPLACE COPY LIST APPEND SUM
CALCULATE CLOSE DELETE FIND SAVE
PACK USE SORT COUNT APPEND
ERASE RESTORE TOTAL ACCEPT 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, numr-
camere, 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
Programarea clasic
12 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> Operaia de ramificare a algoritmului n funcie de valoarea
<secv.1> de adevr a unei expresii logice, cu revenirea, n ambele
[ELSE situaii, ntr-un singur punct, se realizeaz cu structura
<secv.2>] alternativ codificat prin comanda IF.
ENDIF

Structura selectiv i comanda DO CASE...ENDCASE


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

Structura repetitiv i comanda DO WHILE...ENDDO


DO WHILE <cond> Structura repetitiv condiionat anterior (sau
<secv > structura while) se execut astfel: ct vreme
[LOOP] condiia pus n structur <cond> este adevrat, se
[EXIT] repet grupul de comenzi <secv>. n momentul n
ENDDO care condiia a devenit fals, se prsete ciclul.

106 Informatic Manual pentru clasa a XII-a


Structura repetitiv i comanda SCAN...ENDSCAN
SCAN [<domeniu>] Se parcurge baza de date activ, selectnd articolele
[FOR <cond>] prin clauzele <domeniu> FOR<conditie> i
[WHILE <cond>] WHILE <conditie>. Secvena de comenzi <secv>
se va aplica pe articolele selectate. Domeniul implicit
<secv> de aciune al comenzii SCAN este ALL. Se poate fora
ieirea din structura repetitiv SCAN prin comenzile
ENDSCAN EXIT i LOOP.

Structura repetitiv i comanda FOR...ENDFOR


FOR <variabila> = <exp1> Se iniializeaz variabila de control a ciclului cu
TO <exp2> [STEP <exp3>] valoarea <exp1>; se execut corpul de
instruciuni pn cnd variabila de control
<secv > devine mai mare dect <exp2>. La fiecare pas
se modific valoarea variabilei de control a
ENDFOR 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) Crearea tabelei;


CD GETDIR() poziionare pe director
Nr = ADIR(A, *.doc) prin GETDIR.
IF nr > 0 Funcia ADIR copiaz
FOR i = 1 to nr ntr-un masiv informaiile
APPEND BLANK despre fiierele din
REPLACE fisier.Nume WITH A(i,1) directorul curent.
APPEND GENERAL fisier.text FROM A(i,1) NR=Numr de fiiere
ENDFOR copiate n matricea A.
ELSE Dac avem documente,
=MESSAGEBOX(Nu sunt documente!) atunci adugm cte un
ENDIF articol n fiier, reinnd
numele i coninutul
documentului.

Capitolul 12 Programarea clasic n FoxPro 107


2. Utilitatea funciei GetFile
SELECT 0 Se deschide fereastra Open.
FIS = GETFILE(DBF)
Opiuni:
DO CASE
CASE UNTITLED $ FIS 1. Dac a fost apsat butonul New, atunci irul
CREATE (FIS) returnat are valoarea Untitled i se permite
CASE EMPTY(FIS) crearea tabelei;
RETURN 2. Dac a fost apsat tasta Cancel sau Esc
OTHERWISE sau butonul Close, atunci irul returnat este
USE (FIS) vid i nu facem nimic;
BROWSE 3. A fost selectat fiierul i acesta va fi deschis
ENDCASE 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 Mesaj = && initial, sirul vid
for i=1 to nr For i=1 to Nr
y=0 count for p2=i to y
scan for p2=i &&numarare if y=nr-1
y=y+1 locate for p1=I
endscan if .not. found()
if y=nr-1 &&pers i este mesaj=pers+str(i)+;
este calebritate
&&cunoscuta EXIT
seek i Endif
if .not. found() &&nu cunoaste endif
?persoana,i,e celebritate endfor
exit && iesirere fortata if empty(mesaj)
endif ? nu exista celebritate
endif else
endfor ? mesaj
use endif

108 Informatic Manual pentru clasa a XII-a


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


1
3. Fie tabela meciuri, cu rezultatele meciurilor planificate ntr-o etap MECI(e1, e2,
g1, g2). Realizai un clasament pe echipe, dup punctaje i golaveraje.

2
4. 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, moment-
sosire) 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 Urmrii o sugestie de rezolvare la sfritul manualului.


2 Urmrii o sugestie de rezolvare la sfritul manualului.

110 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
Parameters unu, doi Do ex_proc with 15,20,30
If parameters()<2 ? ex_proc(15,20)
=messagebox(prea putini parametri) =ex_proc (15)
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 set udfparms to value set udfparms to reference
parameters x A=5 A=5
x=x+1 ? adun(A) ? adun(A)
return x 6 6
? A ? A
5 6

Cnd un parametru este transmis Cnd un parametru este transmis


prin valoare, orice modificare n prin referin, orice modificare a
unitatea funcional nu este coninutului su este vizibil n
vizibil n exterior. programul apelant.
Exemple
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)
&& criptare && decriptare
replace all adresa; Scan
with cripto(adresa) wsir=
do decripto with elevi.adresa, wsir
replace adresa with wsir
endscan
function cripto procedure decripto
parameters s parameters s,w
w= w=
for i=1 to len(s) i=1
el=substr(s,i,1) do while i<= len(s)
if el $ aAeEiIoOuU el=substr(s,i,1)
el=el+p+el && p+vocala if upper(el) $ AEIOU
endif i=i+2
w=w+el endif
endfor w=w+el
return w i=i+1
enddo

112 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 cod nr1 nr2 nr3 nr4 nr5 nr6
d,8 n,8 n,2 n,2 n,2 n,2 n,2 n,2

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


declare a[6] do generare
input cate buletine ?; repl from array a fields nr1,nr2,nr3,;
to nrb nr4, nr5, nr6
input seria primului ?; endfor
to ns use
for b =1 to nrb return
append blank

&& bingo.prg declare a[10] function verif


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

3. n vederea vnzrii bile-


telor, fiierul LOCURI din aplica-
ia 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 infor-
maii 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 Procedure generare
use locuri in 1 sele 2
use garnitura in 2 scan
opt =3 do gen_loc with 1,b.nr_vag_1,8,6
do while opt# 4 do gen_loc with
@ 1,1 say 1. editare garnituri 2,b.nr_vag_2,10,8
@ 2,1 say 2. generare locuri do gen_loc with
@ 3,1 say 3. vanzare bilete c,b.nr_cusete,6,6
@ 4,1 say 4. terminare program do gen_loc with
@ 5,1 say alegeti get opt d,nr_vag_dormit,6,3
read endscan
do case close all
case opt=1 return
sele 2
browse Procedure gen_loc
case opt=2 parameters t,v,c,l
do generare for i=1 to v
case opt=3 for j=1 to c
do vanzare for k=1 to l
endcase sele 1
enddo append blank
close all 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 urmrii variantele de rezolvare a problemei la sfritul manualului.

114 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 **fiier2.prg **fiier3.prg
procedure unu clear function unu
parameters a do unu parameters a
?a*10 ? doi return a*10
return return procedure doi
function doi parameters a
? a/10 return a/10
return Care este
perechea
**fiier4.prg **fiier5.prg **fiier6.prg corect?
clear procedure unu clear
do unu(5) parameters a ? unu(5)
do doi ?a*10 ?doi(5)
return function doi
?a/10
return .t.

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=de-
panare, 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 respec-
tarea restriciilor metodologice, alegerea notaiilor standardizate sau semnifi-
cative, 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 progra-
mului 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 propriu-
zis 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 ne ntoarcem n programul
return apelant dup selecia fiierului.
case nreroare=38 pointerul este naintea primului articol
goto top
case nreroare=4 pointerul este dup ultimul articol
go bottom
endcase

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
Operaii cu baze de
13 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 tergerea bazei de date specificate de pe disc ea nu
<dbc>[DELETETABLES] 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.
ADD TABLE <dbf> Adugarea unui fiier .DBF n baza activ
REMOVE TABLE tergerea tabelei precizate din baza de date, dar nu i
<dbf> [DELETE] de pe disc clauza DELETE permite tergerea i de
pe disc a fiierului. Atenie! Tabela trebuie s fi fost
nchis anterior comenzii.
DISPLAY DATABASES Afiarea informaiilor despre coninutul bazei de date.
DISPLAY TABLES 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.
Figura 13-2: Meniul
Adaug o tabel Nou View Nou View contextual Database
liber la BD la distan local

Editarea procedurilor stocate


Creare tabel

Legturi ntre BD
Figura 13-3:
Bara de instrumente terge Modific Editarea tabelelor prin Browse
Database Designer

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 Atributul poate conine valori NULL
CHECK <exp> [ERROR <mesaj>] Funcia de validare cu mesajul adecvat
DEFAULT<exp> Valoarea implicit a atributului
PRIMARY KEY Declar atributul cheie primar
REFERENCES <tabela2> [TAG<reper>] 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> Creeaz indexul primar prin specificarea
expresiei i a numelui de reper.
CHECK <exp> [ERROR <MESAJ>] Permite specificarea unor restricii la nivel de
tabel.
FOREIGN KEY<exp> TAG <tag1> Fixeaz drept index o cheie strin i
REFERENCES <dbf> [TAG<tag2>] 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 && Creeaz d1.dbc
CREATE DATABASE D2 && Creeaz d2.dbc
SET DATABASE TO D1 && Fixeaz d1 baz curent
CREATE TABLE T1 (CMP1 n(3)) && Creeaz t1.dbf n baza d1
CLOSE TABLES && nchide fiierul t1.dbf
REMOVE TABLES T1 && terge t1 din baza d1
SET DATABASE TO D2 && Fixeaz d2 baz curent
ADD TABLE T1 && Adaug t1.dbf la baza d2
RENAME TABLE T1 TO T2 && 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

4 Asocierea obiectelor este referit n leciile de proiectare a formularelor.

132 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
Exemplu
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 fe-
reastra de dialog pentru crearea
unei tabele noi: Database, New
Table, Wizard.
3. Vom parcurge paii necesari
alegerii tabelei, selectrii cm-
purilor, 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.

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 Profe-
sori1,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.

5 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 leg-
tur: 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 Efect
MODIFY PROCEDURE Editarea unei proceduri.
APPEND PROCEDURE Adugarea unei proceduri stocate la baza
FROM<fis.txt> [OVERWRITE] de date curent dintr-un fiier <Fis.txt>,
cu sau fr suprascriere.
DISPLAY PROCEDURES Afiarea procedurilor memorate din baza
curent.
COPY PROCEDURE TO <fis.txt> Copierea procedurii stocate ntr-un fiier
[ADDITIVE] 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 creeaz baza de date, care este deschis automat
Create table t1 free (cmp M) tabela temporar
Append blank adaug o linie vid
Replace cmp with procedure; pune n coloana Memo linia de definiie
fictiv+chr(13)+chr(10) a unei proceduri fictive
Copy memo cmp to fis.txt copiaz coninutul cmpului Memo ntr-un fiier
Use nchide tabela temporar t1
Append procedure from; adaug la baz fis.txt ca fiind procedur stocat
fis.txt
Display procedures afieaz procedurile bazei D1

138 Informatic Manual pentru clasa a XII-a


Delete file t1.dbf terge de pe disc manevrele
Delete file t1.fpt
Modify procedure apeleaz editorul pentru modificarea procedurilor
Close database 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 Observaie:
calculate max(elev.cod)to codmax
Fereastra de editare a
if empty(codmax)
procedurilor stocate ntr-o
=messagebox(nu sunt coduri)
baz de date se poate
return 1
deschide i direct,
else
selectnd Database, Edit
=messagebox(codul ultim=+str(codmax))
Stored Procedures.
return codmax+1
endif
endproc
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


Exemplu 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 !

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 deschi-
derea ferestrei de proceduri stocate (selectnd Database, Edit Storage Procedure).

Capitolul 13 Operaii cu baze de date 141


Studiu de caz 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!

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 Bazele informaticii Info 9,10,11,12
Ia Informatic aplicat Info 10,11,12
so Sisteme de operare Info 10

Profesori Orar
P1 Popescu Emilian Mate L 8 bi P2 9a
P2 Zaharescu Vasilache Info L 9 so P2 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
Interogarea bazelor
14 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 Rezolvare
1. Numele tuturor elevilor select nume from elevi
2. Numele claselor (distincte!) din coal select distinct cls as
cod_clasa from elevi
3. Tot coninutul fiierului ELEVI select all from elevi
select * from elevi

Capitolul 14 Interogarea bazelor de date 145


4. Media general a elevilor select avg(med) as med_gen
from elevi
5. Numrul elevilor din coal select count(*) as nr_elelevi
from elevi
6. Numrul claselor din coal 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 Rezolvare
Afiai elevii claselor la imprimant select cls, nume from elevi to print
Copiai numai numele i codul elevilor select cod, nume from elevi;
ntr-o alt tabel 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 Rezolvare
Care sunt elevii cu medii ntre 8 i 10 select nume, med from elevi;
din clasa 12A? where med between 8 and 10 and cls=12A
Care sunt elevii cu media 10 precum select elevi.nume, elevi.cls,
i numele diriginilor lor? clase.diriginte;
from elevi, clase where
elevi.cls=clase.cls; and elevi.med=10
Care sunt elevii dirigintelui X? 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 Rezolvare
Care sunt elevii cu media 10 pentru select elevi.cls, clase.diriginte;
fiecare clas (i numele diriginilor lor)? elevi.nume from elevi, clase;
where elevi.cls=clase.cls and;
elevi.med=10 group by cls

146 Informatic Manual pentru clasa a XII-a


 Clauza HAVING permite introducerea unor restricii de afiare a grupului.
Exemplu:
Cerere Rezolvare
Care este numrul elevilor pe clase, select elevi.cls, count(*) from;
numai de la profilul info? 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 Rezolvare
Lista alfabetic a elevilor select elevi.nume from elevi, clase where;
dirigintelui Popa. 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 nregis-
treaz 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. Aflai prin interogri SELECT:
a. Care sunt furnizorii pentru materialul x?
b. Care este cantitatea total contractat pentru materialul x?
c. Care dintre furnizorii pentru materialul x ofer preul cel mai mic?
d. Cte facturi au fost trimise pentru contractul x?

Capitolul 14 Interogarea bazelor de date 147


e. Care este valoarea total a contractelor ncheiate cu furnizorul X?
f. Exist contracte neonorate la termen sau cantitate?
g. Care sunt furnizorii care nu au facturi?
h. Exist facturi neachitate?
i. 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:


Exemplu
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-pro-
dus, 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.
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 Urmrii alte variante de rezolvare la sfritul manualului.

148 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 priete-
noas, 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).
Meniul Query Figura 14-3:
Meniul contextual

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 Zona de vizualizare
SELECT a tabelelor.
Se deschide prin
fereastra Add Table

Numrul de
valori, dac
sunt distincte;
Legturile dintre Condiii Cmpurile folosite Cmpurile folosite dac este o
tabele clauza de filtrare pentru ordonarea la gruparea
interogare
FROM ON clauza datelor clauza articolelor
WHERE ORDER clauza GROUP BY ncruciat

Figura 14-5: Fereastra de proiectare a interogrii

150 Informatic Manual pentru clasa a XII-a


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 con-
tracte 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 pret-
promis. 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 cm-
purile dorite din tabela
CONTRACTE: numrul
contractului, produsul,
cantitatea. Pentru valoa-
rea contractului folosim
zona de editare a expre-
siilor interogrii.
Dup construirea ex-
presiei 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 Figura 14-11: Expression Builder

152 Informatic Manual pentru clasa a XII-a


(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 Figura 14-16: Cele dou tabele n
Contracte i Facturi, definit la nivelul bazei de date. 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 coloa-
nele 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 ia-
nuarie 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 stoc-


necesar 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
Comunicarea aplicaiei
15 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 carac-


teristicile de design ale
paginii web. Alegem mo-
dalitatea de afiare a
datelor selectate; pe linii,
sub form de etichet sau
pe coloane etc.
Stilul folosit pentru for-
matul paginii web poate fi
selectat prin comutatoa-
rele din lista Visual Styles.
Pentru fiecare confi-
gurare 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 nre-
gistrri 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 PROCEDURE..ENDPROC
funciilor utilizator FUNCTION...ENDFUNC.
RETURN
Comunicarea ntre unitile PUBLIC / PRIVATE/LOCAL
funcionale PARAMETERS
SET UDFPARMS
Definirea unei interogri SELECT...FROM...TOFILE / INTO...
...WHILE...GROUP BY [HAVING]..
Definirea unei tabele CREATE TABLE (<structura>)...
CHECK..FOREIGN KEY..TAG..
REFERENCES...[TAG..]
Utilizarea bazei de date CREATE / DISPLAY DATABASE
OPEN/ CLOSE/ DELETE DATABASE
SET DATABASE TO
Utilizarea tabelelor ntr-o baz ADD/ REMOVE/ DISPLAY TABLES
de date
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 urmtoa-
rele 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
Elemente de programare
16 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 Exemplul 2: O clas pentru cri de
numele Fer1 cu caracteristicile clasei vizit non-vizual.
printe. DEFINE CLASS carti AS CUSTOM
DEFINE CLASS fer1 AS FORM Nume=Popescu
ENDDEFINE 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

1 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

178 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
Proiectarea formularelor
17 

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 proprie-
tile de a putea fi micorat,
mrit sau nchis prin bu-
toanele 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 tradi-
ional sau n modul orientat
spre obiecte) sau n mod
vizual, prin Form Designer i Figura 17-1: Exemplu de formular
Form Wizard.

1 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.

x.scx
procedure init
Do form fis.scx with p_intr to p_ies 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 View classes
Label TextBox
Editbox CommandButton
CommandGroup OptionButton
CheckBox ComboBox
List Spinner
Grid Image
Timer PageFrame
OLE Container Control OLEBound Control
Line Chenare, cercuri, elipse
Container Separator
HyperLink
BuilderLock 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. Prima etap este apelarea utilitarului de proiectare.
2. Definim proprietile i metodele formularului.
3. Deschidem baza de date.
4. Includem obiectele de control i realizm un prototip al formularului.
5. 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 pla-
srii n acelai loc a unor mesaje
diferite i a controlrii momen-
tului 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 CheckBox-
urile (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 Parameters parola= Return
Controlsource=m.parola parola initial 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 Text2 (caminist) Text4 (variabila continuare)


metoda Init controlSource=caminist Value = n
variabila=n metoda Valid ControlSource=
if this.value=.t. m.variabila
thisform.text3.enabled=.t. metoda Valid
Text1 (nume) else if this.value`dD
ControlSource thisform.text3.enabled=.f. if eof()
=elevi.nume endif go bottom
ReadOnly= .T. wait window sunteti
Text3 (taxa) deja la final
Enabled=.t. else
ControlSource=elevi.taxa 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 rs-
punde 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 Form1
Caption=continuti? Metoda init
ControlSource=; Continuare=.F.
m.continuare 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
tabela activ. adugate n formular
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 Cmd2
Caption=continua Caption=gata
Procedure Click Procedure click
Append blank Browse
endproc 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: Figura 17-17: Butoane radio
Option1.Caption=informatica, pe formular
Option2.Caption=sport
Option3.Caption=engleza
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 Rowsourcetype
9a,9b,... Elementele listei =0 none Surs nespecificat; elementele
elevi.dbf Tabela de date listei se vor specifica dinamic la
SELECT.. rularea formularului
A Nume masiv =1 Value Elementele sunt enumerate
Elevi.nume Nume de cmp =2 Alias Se preiau elementele
C:alfa*.db? ablon pentru dintr-o tabel
fiiere =3 SQL Elemente date de comanda SQL
elevi.dbf Numele unei =4 Query Elemente date de un Query
tabele =5 Array Elementele sunt preluate
dintr-un tablou
=6 Fields Elementele sunt preluate din
valorile cmpului
=7 Files Elementele sunt nume de fiiere
care verific ablonul
=8 Structure Lista este alctuit din
cmpurile (structura) tabelei

198 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):
Procedure Lostfocus Poziionare pe tabela destinaie
select fisiere Listcount numrul de elemente din list
for i=1 to thisform.list1.listcount
Selected vectorul asociat listei cu valoare
if thisform.list1.selected[i]
.t.=selectat
append blank
replace nume; List vectorul cu valorile listei
with thisform.list1.list[i] List1 este numele obiectului
endif
endfor
endproc

200 Informatic Manual pentru clasa a XII-a


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 per-
mite precizarea sursei
elementelor, fie intro-
duse manual, fie dintr-
un 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 asis-
tat (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 Form1. init
thisform.refresh if !used(comision)
if mess(Vrei sa inchizi?,36, Inchidere) = 6 use comision in 0
thisform.release endif
else set deleted on
if mess(Vrei sa inchizi?,36,Inchidere)=7
endif Form1. release
endif set deleted off
sele comision
Form1.caption=actualizare pack

Tip_comision.ControlSource=comision.tipcomision Dencomision. lostfocus

Iesire. caption=iesire if thisform.comm1.tag=t


Iesire. click reindex
thisform.release thisform.list_com.refresh
thisform.comm1.tag=f
sterger.click else
sele comision thisform.list_com.refresh
dele
endif
skip-1
thisform.refresh

Procent_comision.click List_comision.click
if thisform.comm1.tag=t sele comision
reindex go top
thisform.list_com.refresh locate for;
thisform.comm1.tag=f tipcomision=val(thisform.list_com.value)
else thisform.tip_com.refresh
thisform.list_com.refresh thisform.den_com.refresh
endif thisform.proc_com.refresh

list_comision Adaugare.click
Rowsource=comision.tipcomision,denco go bottom
mision,; append blank
procent thisform.comm1.tag=t
RowSourceType=fields thisform.refresh
Tabindex=4
Columncount=3
Name=list_com

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.

Form1 Column3
Grid1 Header1
Column1 Text1
Header1 Column4
Text1 Header1
Column2 Spinner1
Header1
Text1
selectare tergere TextBox header Check1

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.

Exemplu 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:
Pentru Grid1: Pentru Column1: Pentru Column2:
ColumnCount=2, Controlsource=elevi.n Controlsource=elevi.c
AllowAddNew=.t. ume lasa
RowSource=elevi
Rowsourcetype=0 Pentru Header1: Pentru Header1:
La Metoda Lostfocus Caption=nume-elev Caption=clasa
Browse

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.

2 Propus de Gabriel i Mihai Dima n Bazele Visual FoxPro 5.0

206 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 Pageframe1.page1.textbox5.setfocus
(presupunem c este al 12-lea obiect sau
pe pagin) cruia i asociem Pageframe1.page[1].controls[12].setfocus
metoda 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 Figura 17-27: Obiect Timer n
denumim Image2) i Command1. formular
2. Scriem proprietile i metodele (conform
tabelului urmtor):
Timer1 Image1 Image2 Command1
(stnga) (dreapta)
Interval=2000 Visible=.t. Visible=.f. Procedure click
Procedure Timer thisform.image1.visible=.f.
thisform.image1.visible=.t. thisform.image2.visible=.t.
thisform.image2.visible=.f.

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 instru-
mente 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;
Figura 17-30: Linii, chenare i cercuri
 Curvature gradul de rotunjire
introduse n formular
(ntre zero i 99 pentru cerc).

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.

3 Bob Grommes, FoxPro 2.5 pag. 395

212 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
1. Realizai un grup de declanatori care permite Case this.value=2
afiarea tabelei Carti pe ecran, la imprimat sau List to print
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 introdu-
cerea unei cri i,
dac autorul respec-
tivei 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 selec-


teze 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


Sarcini pentru realizarea proiectai formularele de vizualizare i
unui mini-proiect 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.

216 Informatic Manual pentru clasa a XII-a


Capitolul
Afiarea datelor sub
18 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).

1 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 Prin deplasarea butonului lateral se pot aduga/terge linii


instrumente

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:
6. Inversm coloanele Cant cu Pret_promis. Tabela CONTRACTE
n Data Environment
7. Selectm File, Page Setup i stabilim caracteristicile
globale ale raportului
Aranjarea
din fereastra care datelor pe
apare. Putem preciza coloane Aranjarea
numrul de coloane (tabel) datelor pe linii
(etichet)
(Number), distana
pn la prima coloan Valorile vor
avea ca
(Left Margins), limea titlu numele Deschide
coloanelor (Width) i de cmp ecranul Fields
distana dintre ele Picker pentru
selectarea
(Spacing). Raportul Cmpurile cmpurilor
poate fi structurat pe vor fi
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 com-
portarea raportului pe setul de
date. Observai bara de instru-
mente asociat. Revenim n
modul de proiectare selectnd
View, Design sau prin nchi-
derea 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 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.

222 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

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.
6. Plasm cmpurile Data, Nume_benef, Clauze pe banda de detaliu prin aceleai
manevre.
7. Stabilim formate corespunztoare fiecrul cmp (ecranul Format).
8. 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.
9. 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

Nu se vor afia liniile goale


Figura 18-9: Fereastra Print When

Tema 3. Utilizarea benzilor de grup


Problema
Pentru fiecare
Fie tabela CONTRACTE beneficiar va fi
din temele anterioare. Se afiat numele
cere un raport care gru- (codul)
peaz toate contractele
pe parteneri. Pentru fie- Vor urma toate
care partener vor fi afiate contractele sale
numerotate, cu
numrul, valoarea fiecrui numrul, data i
contract, iar la sfritul valoarea lor
listei numrul de
contracte i valoarea
total. Raportul va fi afiat La finalul de
grup va fi
n fiierul Grup.txt. specificat
Indicaii: numrul total de
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 multi-
coloan, 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 Figura 18-11: Tabelele CONTRACTE i
terminarea listrii facturilor unui contract se va FACTURI
afia totalul valorii facturate.

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 function contr
conine funcia necesar cvar=
raportului. Se execut select facturi
seek facturi.nr_contr
programul cu
scan while facturi.nr_contr=contracte.nr_contr
DO apel_fff
cvar=cvar+str(nr_fact,5)+ + dtoc(data)+
str(pret*cant)+;
Apel_fff.prg chr(13)+chr(10) && trecerea la un nou rand
report form fff endscan
return 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
Create Label Dimensiunea
zonei de
<nume-eticheta
proiectare
3. Alegem forma de este calculat
etichet din formele automat n
predefinite afiate la funcie de
deschiderea formatul
generatorului. etichetei

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 Pentru excluderea ultimului obiect din
textelor 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 CAMPIONATUL NAIONAL DE FOTBAL


campionatului. Situaie Final
Pentru fiecare echip vor fi Echipa............... pag. x
afiate meciurile jucate i data loc adversar scor
scorul. La finalul raportului va
fi scris totalul golurilor total goluri nscrise......total goluri primite.......
nscrise/primite de echipa total golaveraj......total punctaj.......
respectiv, punctajul.
c) Realizai un raport cu evidena
cronologic a meciurilor pe Lista meciurilor pe stadioane
stadioane. Pentru fiecare Stadionul:................
stadion va fi afiat punctajul data echipa1 echipa2 scor
maxim obinut de o echip
care a jucat n deplasare,
punctaj maxim (rezultat meci) n deplasare:......
respectiv acas. La sfritul punctaj maxim (rezultat meci) acas:.................
raportului se vor calcula nu- numr de meciuri jucate pe stadion:..................
mrul total de meciuri jucate
i numrul total de goluri.
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
Proiectarea meniurilor
19  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 aprovizio-
nare 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
Proiecte i aplicaii
20 

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 Restabilirea mediului
salvare parametri de mediu Do contracte.mpr Pop menu _Msysmenu
OldEx=SET(exclusive) Read Events Set exclusive &OldEx
Oldtalk= SET(talk) Set talk &Oldtalk
Olddel=SET(Deleted) Set deleted &Olddel
Oldpath=SET(Path) ! Cd (Olddir)
Olddir=FULLPATH(CURDIR()) 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 ne-
legem un ansamblu de fiiere
de proceduri, formulare, ra-
poarte, meniuri, care vor fi
folosite n comun pentru crea-
rea unei aplicaii executabile.
Evidena acestui ansam-
blu 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 corespun-
ztor 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 fiier-
machet 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 previ-
zualiza 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 Figura 20-3: Fereastra Project Information
proiectului.

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: restrn-
gerea ferestrei la o bar de
instrumente. Bara poate fi pla-
sat 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 double-
click 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 seg-
mente. 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 apli-
caiei (AppDir) sau n directorul
Windows (WinDir) sau n direc-
torul 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 Ma-
nager 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 avans rest-plat


total sume xxxxxx xxxx xxxx 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
Dezvoltarea profesional
21 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 CV-
ul 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


Sarcini pentru realizarea angajatori, ceilali candidai. Candidaii i vor
unui mini-proiect pregti CV-urile i participarea la interviu, iar anga-
jatorii 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.

Capitolul 20 Proiecte i aplicaii 247


Capitolul
Teme opionale
22  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 Nivel tabel Nivel articol Nivel cmp
Implicit Append Append Memo
Delete All Modi Memo
Recall All Browse/Edit
Replace All Replace Record
Update Delete/Recall Record
Explicit Set Exclusive On Flock() Lock()
Set Lock On 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 conta-
bilizarea 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 copiem n tabloul A structura fiierului elevi
=afields(a)
poz=ascan(a, NUME, 1) cautm n tablou valoarea NUME
if poz# 0 Dac se gsete
a[poz]=PRENUME nlocuim cu valoarea PRENUME
endif
=ASORT(a) sortm tabloul alfabetic dup prima coloan
create table b from array a 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 recall record reccount()
copy to man structure extended pack
use man create nume from man
go 4 use man
dele rest append from elevi
&& observai tabela realizat prin comanda COPY EXTENDED:
# FIELD_NAME FIELD_TYPE FIELD_LEN FIELD_DEC FIELD_IDX
1 NUME C 10 0 Y
2 PREN C 6 0 N
3 CLS C 3 0 Y
4 ABSN N 2 0 N
5 ADMIS L 1 0 N
6 DN D 8 0 N

1 Comanda Copy to cere precizarea cmpurilor care vor fi copiate.

252 Informatic Manual pentru clasa a XII-a


Varianta 2 Varianta 3
use elevi use elevi
for i=1 to 3 =afield(a)&& copiem structura
x=field(i) n=alen(a,1)
set fields to &x for i=1 to n-4
&& lista de campuri =adel(a,4,1)&&stergem coloanele
endfor endfor
copy to man dimension a4,m
&&se va copia structura create table man from array a
use man use man
append from elevi

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 use manevra
set fields to nume, mg copy stru exte to man
input NR. DE PROBE: to n use man
for i=1 to n dele all for field_name #NUME and.;
var=ob+ltrim(str(i, 2)) field_name#MG
set fields to &var input numar probe? to n
endfor for i=1 to n
copy stru to concurs var=OB+ltrim(str(i))
use concurs recall for field_name=var
return endfor
pack
create concurs from man
use concurs
return

procprocedure creare_3 procedure creare_4


create table X(nume C(20), crea table X(nume C(10), mg
mg N(5,2)) N(5,2))
copy stru exte to man copy stru extended to man
use man use man
input numar probe? to n input numar probe? to n
for i=1 to n for i=1 to n
var=ob+ltrim(str(i)) append blank
append blank accept obiect? to field_name
repl field_name with var repl field_type with;
repl field_type with n N, field_len with 2
repl field_len with 5,field_dec endfor
with 2 create concurs from man
endfor use concurs
create concurs from man delete file x.dbf
use concurs delete file man.dbf
erase X.dbf return
erase 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-val
total/zile - Xx xx ... xx xxxxxxx 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. 2
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 Vedei o variant de rezolvare la sfritul crii.

254 Informatic Manual pentru clasa a XII-a


Capitolul
Dezvoltarea unei
23 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 infor-
maional, 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, docu-
mentaiile 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.

1 Dup Ingineria programrii vol. 2, pag. 53

260 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 CV-
urile 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 I
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.

Cine? Ce face? Perioada Poate fi automatizat?

eful Hotrte CE valute se Zilnic Nu, deocamdat.


tranzacioneaz i preurile
de vnzare-cumprare ale
acestora.

Operator Afieaz cursul valutar. Zilnic Da, dac avem informaiile


primite de la ef.

Operator Decide dac un client poate Zilnic Da, tiind c o tranzacie se


fi refuzat; nregistreaz refer numai la valute care
operaiile de vnzare- pot fi comercializate.
cumprare de valut Cantitatea cerut va fi

264 Informatic Manual pentru clasa a XII-a


n documente primare comparat cu stocul de valut
numite buletin de schimb existent; oferta de valut va fi
valutar. comparat cu suma de lei
disponibil.

Operator Afieaz situaii centralizate Zilnic Da, dac sunt memorate toate
pe tipuri de tranzacii, pe datele despre o tranzacie!
valute etc.

Operator ndosariaz copiile dup Zilnic Da, vom salva activitatea unei
buletinele de schimb, cursul zile n istoric.
valutar i situaiile
centralizate n dosarul zilei.

F2. Care sunt documentele?


Ca purttoare de informaii, trebuie s inventariem toate documentele care sunt
primite sau sunt completate n sistemul informatic analizat.

Cod Nume document Volum, tip Observaii


Bc Buletin de schimb 200 exemplare/zi; Elaborat de operator; certific
de ieire. desfurarea tranzaciei;
un exemplar este dat clientului i
unul este pstrat la sediul firmei.
Listt Situaia tranzaciilor 1/zi de ieire; Elaborat de operator; folosete la
se introduce evidena centralizat a tranzaciilor;
n dosarul zilei. este trimis efului.
listv Cursul valutar 2/zi; de ieire; Elaborat de operator; folosete la
unul este afiat, situaia centralizat i la
iar unul se reine informarea clienilor; este
la dosarul zilei. trimis efului.

F3. Cum arat documentele?


Exchange Office Patricia Exchange Office Patricia
Iai, str. Vasile Conta, nr.7 Iai, str. Vasile Conta, nr.7
CURSUL VALUTAR Buletin de schimb
Azi, 1.01.2003 Nr 1234/din 1.01.2003, ora 14:30
Nrcrt Valuta Cumparare vanzare
1 Dolar 30000 3200 Client POPESCU MIRCEA cu CI 123456 a
cumprat cantitatea de 100 dolari la cursul de
2 Euro 28000 29000 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 Este o variant de lucru care exemplific i folosirea variabilelor.

268 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() Form1.init()
SELECT TRANZACTII SET SAFETY OFF
GO BOTTOM set default to d:\manuale\aplicatii
DELETE 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
unei machete prin clic pe butonul Add. Figura S2-2: Proiectarea formularului

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) do meniuadrese.mpr
set path to data\databases,data\queries,; read events
document\forms,documents\reports,; release all
documents\labelscodes\programs,others\menus set talk (oldtalk)
set talk off return
localitate=iasi
telefon=121212
porecla=fat-frumos

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 Distribu-
tion 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
1,44 Mb i Web Setup. Figura S3-1:
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 pic-
togram, 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 opera-
iilor, 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 ver-
siunea optim a distri-
buiei pentru internet (n
fereastra a aptea am
bifat opiunea Gene-
rate a web executable
file!). Prin lansare n
execuie, dezarhiveaz
automat pachetul de
distribuie ntr-un director
temporar, apoi lansea-
z 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:
Copiai pe hard disc cele trei Figura S3-4: Coninutul directorului pentru
dischete i lansai aplicaia instalarea cu dischete
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, schim-
bai numele grupului.
Pentru nceperea
instalrii aplicaiei,
apsai butonul cu
pictogram.
Dac totul a mers
bine, apare confir-
marea 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 m 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 an_e

CITITOR.DBF

cod_cit nume date_pers

OPERATII.DBF
Cod-carte cod_cit di 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), pstreaz meciurile campionatului.
p1 N(2), p2 N(2), arbitri M)

Sarcini Rezolvri
Deschidei cele trei tabele use CAMPIONAT n 1 alias camp
n trei zone. use JUCATORI n 2 alias juc
use ECHIPE in 3 alias ec

Afiai n ce echipe a jucat sele 2


Popescu i cnd. list for nume=Popescu

Afiai arbitrii care au fost la sele camp


primele 3 meciuri. list next 3 alte_inf

Afiai unde a arbitrat sele campion


Popescu, la ce meciuri, cnd. list e1, e2, data for Popescu $ arbitri

Afiai echipele din grupa A. sele ec


list for grupa=A

Afiai componena echipei sele juc


RAPID (ultima dat). list for echipa=Rapid and iesire={//}

Afiai localitile unde a sele camp


jucat sau va juca echipa set filter to e1=Rapid or e2=Rapid
Rapid. list loc, data, e1, e2

Afiai echipele care au sele 1


jucat acas i au pierdut. list e1 for p1<p2

280 Informatic Manual pentru clasa a XII-a


Afiai componena select 1
echipelor care joac la data locate for data={01.06.99} .and. loc=Sportu
{01.06.99}, pe stadionul sele 2
Plaiesilor? Presupunem ? echipa + a->e1+ este formata din :
c este un singur meci. list nume for b->echipa=a->e1
? echipa + a->e2+ este formata din :
list nume for b->echipa=a->e2

Afiai cpitanii celor dou go top in 1


echipe care joac n primul sele 2
meci nregistrat ? capitanul echipei +a->e1, este, lookup
(presupunem c prima (b->nume, a->e1 , b->echipa)
persoan trecut n fiier la ? capitanul echipei +a->e2, este
o echip este cpitanul). ?? lookup(b->nume, a->e2, b->echipa)

Doi prieteni fotbaliti, Albu sele b


i Barbu, se ntlnesc n echipa1=lookup(b->echipa,Albu,b->nume)
campionat de dou ori (tur echipa2=lookup(b->echipa,Barbu,b->nume)
i retur). Aflai data i locul. sele 1
list for A->e1=echipa1 .and. A->e2=echipa2 or
A->e1=echipa2 .and. A->e2=echipa1

Listai programul sele camp


competiional de sptmna sort on data to man for between(data, date(),
viitoare, ordonat cronologic. date()+7)
select 0
use man
list fields e1,e2,data, loc

Afiai meciurile, ordonate Sele camp


dup numele echipelor care Sort on e1,data to man
joac acas, pentru fiecare Select 0
echip dup data Use man
desfurrii. 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 C(8),tp C(8))


Concurs(grupa C(3), start C(5), interval N(2))
1) Procedura de citire a concurenilor
sele concurenti varsta=year(date())-year(dn)
clear replace grupa with
accept nume to m.nume sex+ltrim(str(varsta))
accept data nasterii to dn replace nume with m.nume
accept SEX to sex

2) Procedura de codificare a concurenilor (cmpul Nr)


Varianta 1: Varianta 2:
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: Varianta 4:
use concurenti use concurenti in 1
index on grupa+nume tag xx index on grupa tag xx unique
do while not eof() copy to array A
x=grupa index on grupa+nume tag x
i=0 for i=1 to alen(A,1)
do while grupa=x n=0
i=i+1 locate for grupa=A[i,1]
repl nr with i do while found()
skip n=n+1
enddo replace nr with m.n
enddo continue
enddo
endfor

282 Informatic Manual pentru clasa a XII-a


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:
b.grupa=a.grupa use concurs in 1
dele for b.grupa=a.grupa use concurenti in 2
pack sele 1
x[1,4]=a.start scan
yy=a.interval sele 2
for i=2 to alen(x,1) locate for b.grupa=a.grupa
x[i,4]=timp(x[i-1,4],yy) t1=a.start
endfor t2=0
append from array x function timp do while found()
release x param t,d repl tp with t1
endif o=val(left(t,2)) t1=timp(t1, a.interval)
m=val(right(t,2))+d
sele 1 continue
o=o+int(m/60)
endscan m=mod(m,60) enddo
return return sele 1
str(o,2)+:+str(m,2) endscan
return

4) Procedura de afiare a ctigtorilor 5) Procedura de trecere a momentului


procedure afis de sosire
sele 0 procedure sosire
create table man (grupa C(3), input codul? to x
nr N(3), durata N(6)) accept grupa? to y
append from concurenti select concurenti
sele 1 locate for nr=x and grupa=y
use concurenti if found()
sele 3 replace ts with time()
use man else
set relation to recno() into a wait atentie coduri eronate
repl all c.durata with; endif
diferenta(a.ts,a.tp) return
index on grupa tag gr function diferenta
list c.grupa,a.nr,a.tp,a.ts,c.durata param ts,tp
sort on durata to man2 os=val(left(ts,2))
use man2 ms=val(right(ts,2))
set relation to recno() into a mins=os*60+ms
index on grupa tag x unique op=val(left(tp,2))
list c.grupa, a.nume, a.tp, a.ts, mp=val(right(tp,2))
c.durata minp=op*60+mp
use return mins-minp
erase man.dbf
erase man2.dbf
return

Rspunsuri, comentarii, indicaii 283


Pag. 114. 1. Concurs de frumusee

*programul principal * function f1


set talk off &&verificare completitudine date
public array p[10] public array p[10]
if not f1() if not (file(conc.dbf) and;
&& validare date file(minime.mem) and;
wait date incomplete file(rezult.dbf))
return wait date de plecare incomplete
endif rezult=.F.
do p1 else
&& restore from minime
input criteriul ? to x additive
? punctajul maxim obtinut la; select 1
criteriul ,x,=, f2(x) use rezult
do p2 && verificare corectitudine fisier
&& marcare persoane ce nu intrunesc && rezult
&& minimul cerut la un criteriu nr_criterii=alen(P)
select 2
do p3 use conc
&& lista persoanelor nr_candidat=reccount(2)
castigatoare use
&& pe criterii sele rezult
index on nume+str(criteriu);
sir=f3() tag n unique
&& criteriile unde sunt mai multi count to z
&& castigatori if z # nr_candidat*nr_criterii
rezult=.f.
if not empty(sir) else
? sunt mai multe persoane; rezult=.T.
castigatoare la criteriile +sir endif
else set order to 0
? nu sunt criterii la care sa; && fisierul rezult este lasat
existe mai multe persoane cu; && neordonat
acelasi punctaj maxim delete tag n
endif && stergem reperul index
nr=f4() anterior
&& numarul persoanelor && creat
necalificate endif
&& la un criteriu si cu maxim la return rezult
&& alt criteriu
if nr=0 function f2
? nu sunt persoane cu punctaje; && punctajul maxim la un criteriu
extreme dat
else && ca parametru
for i=1 to nr parameters x
? pers[i] calculate max(punctaj) for;
endfor criteriu=x to y
return y
endif
procedure p3
? clasamentul competitiei && lista castigatorilor pe
do p4 criterii
&& punctajul total pe concurenta. select rezult
&& se va lua in considerare set heading off
&& existenta aceleiasi valori la for i=1 to alen(p)
mai ma=f2(i)
&& mute concurente ?rezultatul cel mai bun la;
criteriul , i
close all list nume, punctaj for
erase total.dbf criteriu=i;
return and punctaj=ma
endfor
set heading on
return

284 Informatic Manual pentru clasa a XII-a


procedure p1 procedure p2
&& trece sub forma de tabel && marcare persoane care nu au
&& rezultatele && punctajul de calificare
select rezult select rezult
index on nume tag nume unique recall all
count to g delete all for
nr_criterii=alen(p) punctaj<p[criteriu]
dimension a[g, nr_criterii+1] copy to manevra for deleted()
copy to array a field nume select 2
delete tag nume use manevra
index on nume tag nume scan
&& fara selectie unica sele 1
text && varianta de rezolvare delete for b.nume=a.nume
scan sele 2
poz=ascan(a, a.nume,1) endscan
a[asubscript(a,poz,1), use
criteriu+1]=punctaj erase manevra.dbf
endscan sele 1
endtext && sfarsit varianta index on nume tag nume unique
list for deleted()
for i=1 to alen(a,1) set order to 0
locate for nume= a[i,1] return
do while found() function f3
a[i,criteriu+1] =punctaj && criteriile unde sunt mai
continue multi
enddo && castigatori
endfor
*afisare tablou* sir=
for i=1 to alen(a,1) for i=1 to alen(p)
? ma=f2(i)
for j=1 to alen(a,2) count for criteriu=i and;
?? a[i,j], punctaj=ma to zz
endfor if zz>1
endfor sir=sir+iif(empty(sir),str(i,3),
return ,+str(i,3))
endif
endfor
return sir

function f4 procedure p4
&& determina persoanele && lista primilor trei clasati*
necalificate sele rezult
&& la un criteriu si castigatoare index on nume tag nume for;
&& la altul not deleted()
public array pers[20] total on nume field punctaj to
nr_caz=0 total
select rezult sele 2
index on nume tag nume use total
do while not eof() index on punctaj tag pct1;
x=nume descending unique
store .f. to bun, rau copy to man_unic
do while not eof() and nume=x index on punctaj tag pct2 desc
rau=deleted() sele 3
if punctaj = f2(criteriu) use man_unic
bun=.T. i=0
endif scan next 3

Rspunsuri, comentarii, indicaii 285


skip i=i+1
if eof() ? premiul , i
exit sele 2
endif list nume for b.punctaj=c.punctaj
enddo sele 3
if bun and rau endscan
nr_caz=nr_caz+1 sele 3
pers[nr_caz]=x use
endif erase man_unic.dbf
enddo return
return nr_caz

Pag. 147
1. Calculul necesarului de aprovizionat Varianta 1:
procedure calcul Se va crea un fiier NEC cu necesarul
create dbf nec (mat n(1), nt n(5), na total (cmpul NT) i necesarul de
n(5)) aprovizionat (cmpul NA) pentru
use stoc in 1 fiecare cod-material (cmpul MAT).
use plan in 2 Ordonm fiierul CONSUM pe
use consum in 3
materiale.
use nec in 4
sele 3 Pentru fiecare material i:
index on mat tag mat facem suma produselor dintre
do while not eof(3) cantitatea unitar necesar pentru
x=mat produsul j i planul pentru produsul j
sum c.cant* cautplan(c.prod) while; generm un articol n fiierul NEC
c.mat=x to y Completm cmpul NA
do adauga_art with x, y Afiare
enddo
sele 4
repl all na with nt-cautstoc(d.mat)
list
return
function cautplan procedure adauga_art function cautstoc
param cod param x, y param x
sele 2 sele 4 sele 1
locate for b.prod=cod append blank locate for a.mat=x
if found() repl mat with x,nt; sele 4
rez=b.cant with y return
else sele 3 iif(found(1),a.cant,0)
rez=0 return
endif
sele 3
return rez

286 Informatic Manual pentru clasa a XII-a


use stoc in 1 order mat Varianta 2:
use plan in 2 order prod 1. Se folosete o tabel de manevr
sele 3 (copie a fiierului CONSUM)
use consum nlocuind cmpul CANT cu
copy to man produsul dintre cantitatea necesar
use man
i planul pentru produsul
repl all c.cant with;
c.cant * cautplan(c.prod) corespunztor.
index on mat tag mat 2. Se face totalizarea pentru acelai
total on mat to nec field cant material n fiierul TOT.
use nec 3. Se poate completa necesarul de
repl all prod with; aprovizionat n cmpul PROD
c.cant - cautstoc(c.mat) (atenie la lungimea codului de
? material, necesar total,; produs!) prin diferena dintre
necesar de aprovizionat necesarul total (aflat n cmpul
set heading off CANT) i stocul din materialul
list c.mat, c.cant, c.prod corespunztor.
close all 4. Se afieaz.
erase man.dbf
return

function cautplan function cautstoc


param x param x
sele 2 sele 3
seek x return iif(seek(x, 1), a.cant, 0)
sele 3
return iif(found(2), b.cant, 0)

sele 2 Varianta 3:
use plan Se folosete relaia dintre fiierul
index on prod tag prod CONSUM i PLAN pe atributul PROD.
sele 3 Se presupune c fiierul STOC are
use consum toate codurile de materiale chiar dac
set relation to prod into b
stocul este zero.
sele 1
create table nec (mat N(5),; Pentru fiecare cod material din stocuri
cant N(5), na N(5)) se scade suma produselor consum
append from stoc unitar i plan
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 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 &&continuare
nmat=det_cod(1) sele 1
nprod=det_cod(2) create dbf nec (mat N(5),nt;
dimension N(5),na N(5))
cs(nmat,nprod),P(nprod),s(nmat),; for i=1 to nmat
nt(nmat), na(nmat) append blank
store 0 to cs, s, p, nt, na repl mat with i,nt with
do incarca with 1 nt[i],;
do incarca with 2 na with na[i]
do incarca with 3 endfor
do calcul_nt && Nt= CS*P delete for nt=0
do afis with nt && afisare vector NT pack &&articole
do calcul_na && NA=NT-S close all &&nefolosite
do afis with na && afisare vector NA return

function det_cod procedure incarca procedure calcul_nt


param cod param x for i=1 to nmat
sele 1 do case nt[i]=0
use consum case x=1 for j=1 to nprod
calculate max(mat), use consum nt[i]=nt[i]+cs[i, j]*P[j]
max(prod) to xm, xp scan for mat#0 and endfor
if cod=1 prod#0 endfor
use stoc CS[mat, prod]=cant return
calculate max(mat) to ym endscan
use case x=2 procedure calcul_na
return max(xm, ym) use plan for i=1 to nmat
else scan for prod#0 NA[i]=NT[i]-S[i]
use plan P[prod]=cant endfor
calculate max(prod) to yp endscan return
use otherwise
return max(xp, yp) use stoc procedure afis
endif scan for mat#0 param v
endif S[mat]=cant ?
endscan for i=1 to alen(v)
endcase if v[i]>0
return ?? str(v[i], 5)
endif
endfor
return

288 Informatic Manual pentru clasa a XII-a