Baze de date
Subprograme - organizarea fisierelor programORGANIZAREA fisierelor program Proceduri si functii definite de utilizator DO - poate fi folosita si in interiorul unui program =>modularizarea programelor complexe (de dimensiuni mari) Grupuri de instructiuni pot fi folosite independent (separate de programul principal). Comunicarea cu programul principal se realizeaza prin PARAMETRII. Modulele pot fi: exteriore si in interiorul fisierului program. Programul care apeleaza un modul: program apelant. Programul apelat de programul principal: program apelat, sau subprogram. Un subprogram poate fi apelat de mai multe ori. program apelant apel subprogram -------------> program apelat <----| ------------- | ------------- | <---- ------------- Un subprogram este: procedura sau functie. Procedura: un grup de instructiuni care primeste de la progr.apelant un grup de parametrii, realizeaza anumite prelucrari si reda controlul programului apelant. Functia: un grup de instructiuni independente care primeste de la progr. apelant un grup de parametrii, realizeaza anumite prelucrari si DAR RETURNEAZA O VALOARE. Organizarea fisierelor program: Caz1. Fiecare program este intr-un fisier separat: Program de actualizare: Functiuni: adaugare,modificare,stergere,vizualizare,listare. C:programactual.prg -program principal Programe apelate: C:programadaug.prg -functiune de adaugare C:programmodif.prg -functiune de modificare C:programsterg.prg -functiune de sterg C:programvizual.prg -functiune de vizualizare C:programlist.prg -functiune de listare Dezavantaj: Toate apelurile deschid fisiere care raman deschise simultan,prin apelari succesive Caz2. Fisierul program contine programul principal si programele apelate in acelasi fisier. instructiuni do adaug do modif do sterg do vizual do list procedure adaug instructiuni return function modif instructiuni return -reda cooontrolul programului principal ** ** ******** s.a.m.d. Caz3. Mai multe subprograme sunt grupate intr-un fisier de proceduri si functii cu caracter general. C:programutile.prg -program de proceduri procedure adaug instructiuni return actual.prg -program principal SET PROCEDURE TO UTILE - DESCHIDE fisierul de proceduri do adaug SET PROCEDURE TO CANCEL PROCEDURI SI FUNCTII - definire si apelare Proceduri Definire Apel PROCEDURE <nume_procedura> DO <nume_procedura> RETURN Comanda RETURN RETURN TO MASTER -la program principal RETURN TO nume_procedura EXEMPLU:
modi comm utile procedure p1 clear ?'Inceput procedura p1' do p2 wait ?'Sfarsit procedura p1' return procedure p2 clear ?'Inceput procedura p2' do p3 wait ?'Sfarsit procedura p2' return procedure p3 clear ?'Inceput procedura p3' do p4 wait ?'Sfarsit procedura p3' return TO p2 procedure p4 clear ?'Inceput procedura p4' ?'Fara apel' wait ?'Sfarsit procedura p4' return to master cancel Tema: programul CURSMOD de modificat,folosind proceduri. Capul de tabel este realizat cu o procedura, care se apeleaza la trecerea pe o pagina noua. FUNCTII UTILLLIZATOR Definire Apel FUNCTION <nume_functie> <nume_functie>() RETURN <expresie> Exemplu: afiseaza data curenta sub forma: Vineri_14_sseptembrie_2001 FUNCTII folosite: DATE()-data curenta DAY(data)-ziua MONTH(data)-luna YEAR(data)-an DOW(data)-nr.zilei din sapt.( 1-duminica) ?'Data curenta:' + dat_rom() FUNC DAT_ROM DO CASE CASE DOW(DATE())=1 ZI='DUMINICA' CASE DOW(date())=2 ZI='LUNI' ENDCASE DO CASE CASE MONTH(DATE())=1 LUNA='IANUARIE' ENDCASE RETURN ZI+', '+STR(DAY(DATE())+' '+LUNA+STR(YEAR(DATE())) Domeniul de vizibilitate al variabilelor Variabile: globale(publice) si locale(private) Definirea variabilelor: <nume_variabila> = <valoare> *Variabilele globale sunt accesibile si pot fi modificate in modulul curent si in orice alt modul. *Variabilele locale sunt accesibile doar in modulul curent si in cele subordonate si nu pot fi modificate in orice modul. Comenzile de declarare a variabilelor: PRIVATE <lista_variabile> <nume_variabila> = <valoare> PUBLIC <lista_variabile> <nume_variabila> = <valoare> Implicit sunt subordonate. Exemplu: modi comm exvar.prg clear priv a public b a=1 b=2 do test ?'a = ' a ?'b = ' b ?'Variabila c nu se poate afisa' ?'Este o variabila locala a procedurii test !' ?'d = ' d wait wind 'Terminat testul pentru variabile!' procedure test priv c public d c=3 d=4 ?'a = ' a ?'b = ' b ?'c = ' c ?'d = ' d return cancel Pentru aplicatii complexe care includ mai multe procedduri,functii se recomanda folosirea variabilelor locale iar comunicarea sa se faca prin parametrii. Apelul unei proceduri cu parametrii: DO <nume_procedura> WITH <lista_parametrii> In interiorul proccedurii dupa PROCEDURE <nume_procedura> este: PARAMETERS <lista_variabile_locale> <lista_parametrii> este identica cu <lista_parametrii> Transmiterea parametrilor pt. o functie : <nume_functie>(<lista_parametrii>) Ex.: MODI COMM PROG CLEAR INPUT 'PRIMUL NR. ' TO N1 INPUT 'AL DOILEA NR. ' TO N2 N3=0 DO VALOARE WITH N1, N2, N3 ?'VALOAREA PRODUSULUI: ',N3 PROCEDURE VALOARE PARAMETERS P1, P2, P3 P3=P1*P2 RETURN MODI COMM IMPOZIT CLEAR SET PROCEDURE TO UTILE INPUT 'INRODUCERE SALRIU: ' TO MSAL ? 'IMPOZITUL CALCULAT ESTE: ', IMP(MSAL) FUNC IMP PARAMETERS S DO CASE CASE S<=750000 IMPOZIT = 0.18*S CASE S<=1500000 IMPOZIT = 300000 0.2 *S) OTHERWISE IMPOZIT = 0.4*S ENDCASE CANCEL MODI COMM DATA ACCEPT 'DATA NASTERII' TO DATAN ?? DAT_ROM (DATAN) FUNC DAT_ROM2 PARAMETERS DATA DO CASE CASE DOW(DATA))=1 ZI='DUMINICA' CASE DOW(DATA)=2 ZI='LUNI' ENDCASE DO CASE CASE MONTH(DATA)=1 LUNA='IANUARIE' ENDCASE RETURN ZI+', '+STR(DAY(DATA))+' '+LUNA+' '+STR(YEAR(DATA))) EDITAREA DATELOR - TREBUIESC CONSTRUITE ECRANE PENTRU EDITAREA DATELOR: se face cu comanda @ SAY GET Comanda SAY @ <rand,coloana> SAY ‘<expresie>’ - tipareste la ecran expresia ipe randul si coloana specificata ; Comanda GET -afiseaza in vederea editarii continutul unui Sintaxa generala: @ <rand,coloana> SAY <expresie_doar_afisata> GET <camp/variabila> (-> se creaza un obiect GET) Comanda READ activeaza obiectele GET create anterior. Exemplu: say 'Nume si Prenume: ' @2,25get nume read MODI COMM GETURI USE REG_CAT MNUME=SPACE(30) MDATAN=SPACE(10) MLOCN=SPACE(12) SAY 'NUME SI PRENUMELE: ' GET MNUME SAY 'DATA NASTERII: ' GET MDATAN SAY 'LOCALITATEA: ' GET MLOCN READ APPE BLANK REPL NUME WITH MNUME,DATAN WITH MDATAN, LOCN WITH MLOCN GO BOTT BROW CLEAR Comanda get Editarea datelor: @<rand,coloana> SAY <expresie> GET <variabila/camp> READ READ - activeaza GET READ activeaza toate geturile de deasupra lui Clauze pentru SAY si GET PICTURE <sablon> '9999999.99', 'xxxxxxxxxx' FUNCTION <functie de afisare>: FUNC 'M lista_optiuni' ex.: say 'Tipul actualizarii:' GET tip FUNC 'M A,M,S' Clauza pentru GET DEFAULT <expr> - creaza o variabila de memorie si ii atribuie valoarea expresiei say 'Tipul actualizarii:' GET tip FUNC 'M A,M,S' DEFAULT 'A' (echivalent cu tip='A') say 'Continuati ? ' GET rasp FUNC 'M DA,NU' '!' DEFAULT 'NU' VALID <nume_functie> VALID codcurs() - se foloseste pentru validarea continutului obiectului GET la orice tentativa de mutare a cursorului de pe obiectul GET Clauza VALID returneaza true .T. sau false .F. say 'Codcurs ? ' GET mcodcurs VALID vcodcurs() FUNC VCODCURS use cursuri seek mcodcurs if found() ret=.T. else ret=.F. wait wind 'Cod curs inexistent. Cursuri posibile: AJUT,PROG,OPER' endif return ret 0 = F (nu va afisa INVALID INPUT) 1 = T MODI COMM VAL *VALID-se mai foloseste pentru reafisarea obiectelor SAY: defi wind f from 1,1 to 10,50 title 'clauza VALID' mpret= mcant= ACTI WIND f say 'Pret ? ' GET mpret VALID calcval() *executa comenzile din calcval() inainte de parasirea obiectului GET say 'Cantitate ? ' GET mcant VALID calcval() say 'Valoare : '+ STR(valoare,5) READ FUNC calcval() valoare=mpret*mcant say 'Valoare : '+ STR(valoare,5) -specifica un interval in care variabila numerica poate lua valori RANGE [<exprnum1>,<exprnum2>] say 'Nota ? ' Clauza SIZE -specifica dimensiunea de afisare a ob. GET say 'CURS ? ' GET mcodcurs SIZE 1,4 if lastkey()=27 ***TASTA Esc RETURN endif MODI COMM
|