Lucrarea 3

Consultarea Bazelor de Date. Instructiuni de ciclare.

 1. Listarea informatiilor. Selectarea înregistrarilor

Exemplu:
DISP NEXT 5
DISP ALL
LIST
LIST RECORD 3
DISP FOR DELETED()
DISP FOR RECNO()<10
DISP FOR nume = "POP"

2. Instructiuni de intrare iesire la consola. Fisiere de program

3. Gestionarea informatiei din câmpurile MEMO

Exemplu:
Adaugati câmpul CV(de la curriculum vitae) de tip MEMO la tabela STUD.DBF creata anterior. Completati din fereastra BROWSE informatie în acest câmp pentru câteva înregistrari.
USE stud
DISP
LIST
GO TOP
DISP "CV:"+cv
SET MEMOWIDTH TO 3
? MEMLINES (cv)
? MLINE (cv, 1)
? MLINE (cv, 2)
SET MEMOWIDTH TO 20
? MEMLINES (cv)
? MLINE (cv, 1)
? MLINE (cv, 2)

 4. Instructiuni de calcul secvential în tabele

Exemplu:
USE stud
COUNT FOR Bursa<>0 TO nSB && calcul studenti bursieri
COUNT FOR .NOT. ISBLANK(bursa) .AND. bursa = 0 TO nSNB
&& clacul studenti nebursieri
SUM bursa TO nBursaTotal && calculul sumei burselor
AVEREGE bursa FOR .NOT. ISBLANK(bursa) TO nBMed
&& clacul bursa medie
CALCULATE MAX(bursa),MIN(bursa) FOR .NOT.ISBLANK(bursa) TO nMa,nMi
&& calcul bursa maxima / minima
? "stud. sursieri:", nSB," stud. nebursieri:",nSNB
? "Burse - suma, medie, minima si maxima:", nBursaTotal,nBMed,nMA,nMi

5. Instructiuni conditionale si de ciclare.

Exemplu:
* fisierul L31.prg
SET TALK OFF
USE stud
CLEAR
? "Secventa SCAN de afisare a studentilor bursieri"
? "Studentul Numele"+REPL(" ",11)+"Bursa"
SCAN FOR bursa>0
? "Studentul: "+LEFT(nume,16)+" "+STR(bursa,6,0)
ENDSCAN
WAIT "Apasati o tasta pentru a continua!"
CLEAR
GO TOP
? "Secventa DO WHILE de afisare a studentilor bursieri"
? "Studentul Numele"+REPL(" ",11)+"Bursa"
DO WHILE .NOT. EOF()
IF bursa>0
? "Studentul: "+LEFT(nume,16)+" "+STR(bursa,6,0)
ENDIF
SKIP
ENDDO
WAIT "Apasati o tasta pentru a continua!"
CLEAR
GO TOP
? "Secventa DO UNTIL de afisare a studentilor cu o bursa"
INPUT "bursa cautata: " TO nBursa
LOCATE FOR bursa = nBursa
IF .NOT. FOUND()
? "nu exista"
ELSE
? "Studentul Numele"+REPL(" ",11)+"Bursa"
DO
? "Studentul: "+LEFT(nume,16)+" "+STR(bursa,6,0)
CONTINUE
UNTIL .NOT. FOUND()
ENDIF
RETURN

6. Probleme propuse

P1. Rulati exemplele prezentate în acest capitol.

P2. Folosind comenzi de calcul secvential calculati câti studenti au bursa între 500.000 si 800.000 lei, apoi valoarea media a burselor cuprinse în acest interval, în doua moduri, prin SUM si COUNT respectiv AVERAGE.

P3. Comparati timpul de executie pentru calculul numarului, sumei, si bursei medii a studentilor bursieri prin secventa COUNT, SUM si AVERAGE respectiv prin instructiunea CALCULATE CNT, SUM, AVG. Pentru aceasta populati automat tabela stud cu 1000 studenti rulând programul urmator:
USE stud EXCLUSIVE
ZAP
FOR i=1 to 10
FOR j=1 TO 10
FOR k=1 TO 10
APPEND BLANK
REPLACE nume WITH CHR(64+i)+CHR(96+j)+CHR(96+k)
IF RANDOM()>0.5
REPLACE bursa WITH RANDOM()*1000000
ENDIF
ENDFOR
ENDFOR
ENDFOR
USE
RETURN

Timpul de executie se va calcula cu ajutorul functiei sistem TIME() sau SECONDS().

P4. Implementati structurile ciclice din ultimul exemplu prezentat folosind comanda FOR. Folositi instructiunile de calcul secvential pentru a afla numarul de pasi necesari.

s.l. dr. ing. Dan Pescaru '2004