You are on page 1of 45

Prezentarea sistemului FoxPro

Partea 2
Conf.dr. Conf.dr. Marian CRISTESCU

Elementele de baz ale sistemului FoxPro


Principalele elemente ale mediului FoxPro sunt:


Bara de meniuri Fereastra de comand

Instruc iuni de Intrare/Ie ire(I/O)




 

Instruc iunile de intrare/ie ire sunt cele cu ajutorul c rora limbajul comunic cu mediul exterior. Ele cuprind instruc iuni pentru introducerea datelor i instruc iuni pentru afi area sau tip rirea rezultatelor. A. Instruc iuni de intrare ACCEPT [ expC"] TO nume variabil de memorie"` masiv/tablou" - datele de intrare sunt tip caracter, iar variabila de memorie sau elementul de tablou rezultat este de tip ir de caractere; INPUT [ expC"] TO nume variabil de memorie"` masiv/tablou" - datele de intrare sunt interpretate ca o expresie care este evaluat i memorat ntr-o variabil de ntrmemorie sau ntr-un element al unei matrici tablou. ntrInstruc iunile de intrare n mod linie pot fi considerate instruc iunile care pot pune un program ntr-o bucl de ntra teptare i introduce ntr-o variabil de memorie sau ntrelement al unei matrici valoarea unei taste ap sate sau codul ASCII al tastei. Comanda Wait opre te derularea unui program pn la ap sarea unei taste. Sintaxa instruc iunii este: WAIT [ expC"] TO nume variabil de memorie"` nume element matrice"` [WINDOW] [NOWAIT] [TIMEOUT] expN"]

SAY


 

      

Cele mai utilizate instruc iuni de intrare sunt instruc iunile n mod ecran. Acestea sunt caracterizate de comanda @ . aceast comand afi eaz i introduce informa iile ntr-un ntrpunct desemnat al ecranului. Cursorul poate fi vizibil sau nu pe ecran. Acesta este controlat prin comanda: SET CURSOR ON ` OFF Pozi ia cursorului poate fi aflat folosind func iile ROW () i COL(). Cu comanda SAY se afi eaz datele pe monitorul calculatorului la coordonatele specificate. Cu comanda GET se stabilesc por iuni din ecran unde vor fi introduse date de c tre utilizator. Dup fiecare comand @..SAY..GET sau dup stabilirea tuturor zonelor de pe ecran n care se vor introduce date se folose te comanda READ. Scopul comenzii este de a activa obiectele GET. Sintaxa comenzii SAY: @ linie, coloan " SAY expr" [PICTURE expC1"] [FUNCTION expC2"] [SIZE expN1" , expN1"] [COLOR SCHEME expN"] [COLOR list perechi culori"]

  

 

  

Sintaxa comenzii GET: GET: @ linie, coloan " GET var" [PICTURE expC1"] [FUNCTION expC2"] [DEFAULT expresie"] [ENABLE/DESABLE] [MESSAGE expC3"] [OPEN]WINDOW nume fereastr "] [RANGE expr1"] , [expr2] [VALID expL"] [ERROR expC"] [WHEN expL"] [COLOR SCHEME expN"] [COLOR list perechi culori"] Citirea propriuzis a cmpurilor GET nu se poate face dect folosind comanda READ. Aceasta poate ap rea fie dup fiecare cmp, fie dup mai multe cmpuri GET. Comanda READ preia din zona de memorie n care au fost dfinite cmpurile GET informa iile una cte una i le transfer variabilelor aferente. Dup comanda READ zona de memorare ste goal . Pentru o alt citire este nevoie de o alt comand READ.

 

 

Comanda @...EDIT este asem n toare cu comanda @...GET doar c editeaz text ntrntr-o zon dreptunghiular i ofer posibilit i mai bune de editare. Pentru a trece la cmpul urm tor trebuie ap sat tasta T. Sintaxa comenzii: @ linie, coloan " EDIT variabil " SIZE expN1" , expN2" , expN3"] [FUNCTION expC"] [DEFAULT expC"] [MESSAGE expC"] [VALID expL1" [ERROR expC"] ] [WHEN expL2"] [ENABLE/DISABLE] [NIMODIFY] [ SCROLL] [TAB] [COLOR] [COLOR SCHEME]

Instruc iuni de ie ire


       

    

 

Instruc iunile de ie ire se mpart n instruc iuni de afi are n modul linie i instruc iuni de afi are n mod ecran. Comenzile pentru afi are n modul linie sunt: ?, ??, ??? \, \\ TEXT...ENDTEXT DISPLAY, LIST BROWSE, CHANGE, EDIT Comenzile ?, ??, ??? sunt folosite pentru tip rirea unor expresii. Sintaxa acestor comenzi este: ?/?? [ expresie"] [PICTURE exp"] [FUNCTION exp"] [AT expN"] [ STYLE exp1"] , [expresie] ? introduce nainte de afi are caracterul carriage return n timp ce ?? ncepe afi area din coloana curent a ecranului sau imprimantei. Comenzile \ i \\ se folosesc pentru a afi a linii de text pe ecran sau ntrntrun fi ier. Sintaxa lor este: \ linie text"` \\ linie text" Comanda \ face un salt la un rnd nou nainte de afi area textului pe rnd; comanda \\ nu face salt la rnd nou, tip rirea ncepnd din coloana curent a ecranului. Comanda TEXTENDTEXT este asem n toare cu comenzile anterioare i are sintaxa: TEXT linii text" ENDTEXT

Display, List
 

   

Locul n care apare textul este stabilit de comenzile Set console i Set Printer. Comenzile DISPLAY i LIST se folosesc pentru afi area informa iilor existente n fi ierele de date. Cu aceste comenzi pot fi afi ate fi ierele cu o anumit extensie. Implicit se afi eaz fi ierele cu extensia .DBF. comenzile pot fi folosite i pentru afi area informa iilor despre sistem. Comanda @ ...BOX permite trasarea de chenare n diverse puncte ale ecranului. Sintaxa comenzii este: @ linie1" , coloan 1" TO linie2" , coloan 2" [DOUBLE ` PANEL ` list chenar"] [COLOR list perechi culori"] [COLOR SCHEME expN"] Comanda CLEAR terge complet ecranul. Numai anumite p r i din ecran pot fi terse cu comanda @..CLEAR care are sintaxa: @ linie1" , coloan 1" [CLEAR` CLEAR TO linie2" , coloan 2"] Salvarea ntregului ecran ntr-o variabil de memorie se ntrpoate face cu comanda SAVE SCREEN TO nume variabil " iar aducerea ecranului din memorie se face cu comanda SCREEN FROM nume variabil ".

Instruc iuni de selec ie




      

   

Instruc iunile de selec ie sunt cele care, n func ie de evaluarea unei expresii logice, execut o anumit secven de program. Expresia logic are ca rezultat cuvintele logice TRUE sau FALSE. ntr-o expresie logic se ntrfolosesc operatori rela ioanli i operatori logici. Instruc iunile de selec ie pot fi: cu dou c i de tipul: IF...ELSE...ENDIF IIF() cu mai multe c i de tipul: DO CASE... ENDCASE Instruc iunile de selec ie cu dou c i evalueaz o expresie logic . Structura unei instruc iuni cu dou c i este de forma: IF expL" instr1" ELSE instr2" ENDIF Dou instruc iuni de selec ie se numesc imbricate dac una din instruc iuni se g se te n clauza IF sau n clauza ELSE a celeilalte instruc iuni. Mai multe comenzi IFENDIF pot fi imbricate

           

Instruc iunea de selec ie cu mai multe c i este DOCASEENDCASE care are sintaxa: DO CASE CASE expL1" instruc iuni1" [CASE expL2" instruc iuni2" . CASE expLN" instruc iuniN"] OTHERWISE instruc iuni" ENDCASE Comanda determin execu ia grupului de instruc iuni pentru care expresia logic este adev rat . Instruc iunile DO CASE se folosesc n cazul n care o expresie ia maimulte valori i n func ie de fiecare valoare se execut un anumit set de instruc iuni. Aceste instruc iuni se folosesc frecvent n cazul meniurilor.

Se numesc instruc iuni repetitive, acele instruc iuni care determin un grup de instruc iuni s se execute de un num r de ori ntrntr-un program. Instruc iunile repetitive sunt: cu ciclu nedeterminat sau ciclu condi ionat cu ciclu controlat prin controlori, sau ciclu care se repet de un num r determinat de ori, n func ie de o variabil care ia valori determinate. Un anumit num r de instruc iuni care se repet de un num r nedeterminat de ori, func ie de o anumit condi ie logic , formeaz un ciclu repetitiv nedeterminat sau condi ionat. n cadrul limbajelor de programare exist dou tipuri de cicluri repetitive: cicluri repetitive cu test ini ial cicluri repetitive cu test final La ciclurile repetitive cu test ini ial condi ia logic se g se te nainte de grupul de instruc iuni care formeaz corpul ciclului. Schema logic a ciclului repetitiv cu test ini ial: La ciclurile repetitive cu test final, condi ia logic este pus dup instruc iunile care formeaz corpul ciclului. Schema logic a ciclului repetitiv cu test final:

Instruc iuni condi ionale i repetitive

    

 

   

Instruc iunea pentru  ciclul condi ional cu test ini ial, singurul ciclu existent n FoxPro, este: DO WHILE...ENDDO care WHILE...ENDDO are sintaxa:  DO WHILE expL" instruc iuni" [LOOP] [EXIT] Un tip special de instruc iune repetitiv , folosit doar pentru fi ierele de date este instruc iunea  SCAN...ENDSCAN care are sintaxa:  SCAN [NOOPTIMIZE] [domeniu] [FOR expL1"] [WHILE  expL2"]  instruc iuni" [LOOP] [EXIT] ENDSCAN

Acest comand realizeaz parcurgerea fi ierului de date curent i executarea grupului de instruc iuni entru fiecare nregistrare specificat prin FOR sau WHILE. Ciclurile repetitive sau iterative controlate prin contori se execut de un num r determinat de ori n func ie de valorile pe care le poate lua o variabil numit variabila de control. Acest tip de ciclu repetitiv se realizeaz cu instruc iunea FOR...ENDFOR care are sintaxa: FOR variabila_de_control=valoare_ini ial TO valoare_final [STEP expN"] instruc iuni" [EXIT] [LOOP] ENDFOR/NEXT Comanda determin execu ia repetat a corpului ciclului, cotorizarea num rului de itera ii f cndu-se prin variabila de cnducontrol. Valoarea ini ial a acestei variabile este dat de o expresie numeric , iar valoarea final de o alt expresie numeric . Valoarea ini ial , valoarea final i valoarea numeric se evalueaz la intrarea n bucl , modificarea lor ulterioar influen nd num rul de itera ii.

Func ii i proceduri n FoxPro


Procedurile i func iile sunt programe (subprograme) care se apeleaz n contextul activit ii de programare. Ele sunt de dou tipuri: proprii mediului de programare definite de c tre utilizatori Procedurile i func iile proprii medului de programare au fost proiectate de c tre realizatorii unui anumit limbaj de programare i au un rol binedeterminat n cadrul acestuia. n limbajul FoxPro func iile proprii sistemului se caracterizeaz prin numele func iei urmat de parantez deschis i parantez nchis ca de exemplu: alltrim(), rand(), seek(), iif() etc. Procedurile proprii sistemului FoxPro se caracterizeaz printr-un nume printrpropriu care le individualizeaz n cadrul limbajului. Procedurile i func iile definite de c tre utilizatori sunt scrise de c tre programator cu ajutorul unui anumit limbaj de programare. Ele sunt programe (subprograme) definite n cadrul unui program scrid de c tre utilizator, program care se nume te program principal sau program apelant. n limbajul FoxPro procedurile i func iile sunt definite la sfr itul gene programului principal. n general ntre proceduri i func ii exist cteva deosebiri esen iale: func ia trebuie s returneze ntotdeauna un singur rezultat n tinp ce procedura poate returna: nuci un rezultat, unul sau mai multe rezultate; numele func iei sau un nume sinonim trebuie s apar cel pu in o singur dat n instruc iunile care definesc func ia, n timp ce n cazul procedurilor acest lucru este interzis; procedura apare ca o linie independent de program, n timp ce func ia apare ntr-o expresie oarecare. ntr

O func ie definit de utilizator reprezint un grup independent de instruc iuni, care prime te un set de paramentri de la programul apelant i returneaz acestuia o valoare ca rezultat al prelucr rilor asupra parametrilor transmi i. Definirea unei func ii este aceea i cu cea a unui program, exceptnd faptul c ea este introdus printr-un antet de func ie. printrn limbajul FoxPro antetul func iei este format din cuvntul FUNCTION i un identificator sau nume de func ie. Variabilele cu care lucreaz func ia pot fi definite n cadrul acesteia sau pot fi transmise de la programul principal folosind comanda PARAMETER  Consider m programul:  SET TALK OFF  CLEAR  nr=0  a=0  @ 5, 5 SAY tasteaz num rul: GET nr PICT 99, 9  a=cub (nr)  @ 6, 5 SAY nr*nr*nr = GET a disable  FUNCTION cub  PARAMETERS n  cub=n*n*n  RETURN cub  Se pot folosi i prin casete de dialog :


Func ia se define te la sfr itul unui program i ncepe prin cuvntul rezervat FUNCTON cu sintaxa: FUNCTION <nume func ie> <nume func ie> reprezint numele care se atribuie func iei nou definite i care va fi folosit la fiecare apel al acesteia pentru identificare. Numele func iei, poate fi alc tuit din maximum 10 caractere i poate con ine litere, cifre sau caracterul _. Dup cuvntul rezervat FUNCTION ncep instruc iunile supraramur care se continu pn la ntlnirea unei alte instruc iuni FUNCTION sau PTOCEDURE sau unul din cuvintele de terminare a unui program: RETURN, CANCEL, SUSPEND, QUIT. Apelul func iei se face prin numele acesteia urmat ntre paranteze rotunde de lista parametrilor prin care se comunic cu func ia. PARAMETERS <lista variabilelor locale (lista parametrilor formali)> Lista variabilelor locale care vor prelua parametrii transmi i de la programul apelant. Lista variabilelor transmise ca parametri este stabilit fie prin clauza WITH a comenzii DO n cazul apelului unui subprogram sau a unei proceduri, fie prin lista dintre parantezele rotunde ce urmeaz numelui func iei cnd este un apel de func ie.

Procedura
  

 

Definirea procedurilor se realizeaz analog cu a func iilor folosind comanda: PROCEDURE <nume_procedur > unde <nume_procedur > este numele procedurii i este format din maximum 10 caractere. Comanda PROCEDURE mpreun cu numele procedurii formeaz antetul acesteia. Corpul procedurii este format din totalitatea instruc iunilor cuprinse ntre comanda PROCEDURE i o alt instruc iune PROCEDURE sau FUNCTION sau una dintre instruc iunile RETURN, CANCEL, SUSPEND, QUIT. O procedur este definit , de obicei, dup ultima linie a programului principal. n limbajul FoxPro exist posibilitatea ca toate procedurile aferente unei aplica ii s se g seasc ntr-un fi ier separat cu extensia ntr.PRG. Asocierea unui fi ier format numai din proceduri la programul principal se realizeaz cu comanda: SET PROCEDURE TO <nume_fi ier> unde <nume_fi ier> este numele fi ierului de tip .PRG n care se g sesc procedurile ce nu se afl i n programul apelant. O procedur se apeleaz prin comanda DO. Procedura apelat se caut prima dat n programul apelant, iar dac nu este g sit atunci se apeleaz fi ierul cu proceduri ata at apelat cu comanda SET PROCEDURE. n general, comanda DO de apelare a unei proceduri con ine clauza WITH prin care se transmite o list de parametri procedurii. Ace ti parametri care intervin n apelul procedurii se mai numesc parametri actuali. Paremetrii defini i prin instruc iunea PARAMETER se numesc parametri formali. Trebuie s existe o coresponden bine definit ntre parametrii actuali i parametrii formali. Lista parametrilor formali con ine parametri prin care se transmit datele la procedur i parametri prin care se transmit
datele de la procedur la programul principal.

Tablouri (matrici, masive)




  

Tabloul, masivul sau matricea este probabil structura de date cea mai r spndit . Documenta ia limbajului FoxPro folose te uzual termenul de masiv i tablou. Pentru produsele mai noi din familia Fox se mai folose te i termenul de matrice. n aceast carte se va folosi mai des termenul de tablou, datorit faptului c acest termen este folosit i n alte limbaje de programare, precum i n literatura de specialitate referitoare la structurile de date. Un tablou este o structur omogen constituit din mai multe elemente de tipuri diferite. Tabloul se mai nume te i structur cu acces direct (random - acces) deoarece fiecare dintre elementele structurii sunt accesibile n mod direct. Pentru a preciza o component individual , numelui ntregii structuri i se adaug un indice care selecteaz acea component . Spre deosebire de alte limbaje, n FoxPro tablourile pot fi unidimensionale i bidimensionale. Tabloul bidimensional seam n cu tabelele de date. Prima dimensiune reprezint rndul sau linia, iar cea de-a dedoua dimensiune coloana. Tablourile unidimensionale au un singur indice, pe cnd cele bidimensionale au doi indici, unul pentru linie i unul pentru coloan . Declararea unui tablou presupune urm toarele opera ii: stabilirea tipului (uni sau bidimensional) rezervarea zonei de memorie necesare depozit rii valorilor ce vor fi memorate n tablou n func ie de num rul de elemente ale acestuia atribuirea unui nume tabloului

Un tablou se declar cu una din comenzile DIMENSION sau DECLARE identice ca i func ionare sau sintax : DIMENSION nume tablou1" ( expN1",;[ expN2" ]) [, nume tablou2; ( expN3" [, expN1")]... DIMENSION nume tablou1" ( expN1",;[ expN2" ]) [, nume tablou2; ( expN3" [, expN1")]...

Cu aceste comenzi se pot declara unul sau mai multe tablouri concomitent. Dup declararea unui tablou toate elementele lui vor fi de tip logic avnd valoarea .F. Elementele unui tablou nu trebuie s fie neap rat de acela i tip. Elementele unui tablou se pot ini ializa cu comanda: nume tablou=tip. Dac se m re te num rul de elemente ale tabloului, cele vechi r mn, iar cele noi se ini ializeaz cu valoarea .F. Dac se mic oreaz num rul de elemente al tabloului, elementele care sunt n plus vor fi eliminate, celelalte r mnnd eschimbate. Dac se trece de la un tablou unidimensional la unul bidimensional, completarea tabloului bidimensional se face pe linii, ncepnd cu prima linie i primul element din tablou. Redimensionarea unui tablou bidimensional se face prin alocarea memoriei necesare noului tablou. Citirea i scrierea elementelor unui tablou se face folosind instruc iunea FORENDFOR.

Fereastra reprezint o por iune dreptunghiular a ecranului. Aceasta este tratat ca element unic cu anumite caracteristici ce determin ac iunile ce se pot executa asupra acesteia. Unei ferestre i se asociaz un nume, un chenar, un titlu, o dimensiune i dac este cazul o culoare. O fereastr utilizator se creeaz cu comanda DEFINE WINDOW cu urm toarea sintax : Fiec rei ferestre se atribuie un nume care o individualizeaz . Numele se supune acelora i reguli ca i numele variabilelor de memorie. Clauzele FROM i TO definesc coordonatele de rnd i de coloan . Dimensiunile pot fi specificate cu AT i SIZE. Clauza IN WINDOW define te o fereastr ntr-o ntralt fereastr definit n prealabil. Fereastra definit ntr-o alt fereastr se ntrnume te fereastr copil i preia o serie de caracteristici de la fereastra p rinte. TITLE determin afi area unui ir de caractere specificat pe marginea de sus a ferestrei. FOOTER afi eaz irul de caractere specificat centrat pe marginea de jos a ferestrei. CLOSE` NOCLOSE determin sau nu nchiderea ferestrei. Dup ce o fereastr a fost definit , ea trebuie activat . Toate informa iile de ie ire vor fi direc ionate spre aceast ferastr . Activarea unei ferestre se face cu comanda ACTIVATE WINDOW care are sintaxa: ACTIVATE WINDOW [lista nume ferestre] ` ALL [IN [WINDOW] nume fereastr 3" ` SCREEN] [BOTTOM ` TOP ` SAME] [NOSHOW]

Ferestre
DEFINE WINDOW nume fereastr " FROM linie1, coloan 1" TO linie2, coloan 2" `AT linie3, coloan 3" SIZE linii, coloane" [IN [WINDOW] nume fereastr 2"` SCREEN `IN DESKTOP] [TITLE expC"] [FOOTER expC"] lista de caractere pentru definirea chenarului"] [CLOSE ` NOCLOSE] [FLOAT] [NOFLOAT] [GROW] [NOGROW] [MINIMIZE] [HALFHEIGHT] [SHADOW] [ZOOM] [NOZOOM] [FILL expC"] [COLOR lista perechi culori" COLOR SCHEME expN"

  

  

    

Orice fereastr dezactivat poate fi activat ulterior printr-o printrcomand ACTIVATE WINDOW. Pentru salvarea unei ferestre se folose te comanda SAVE WINDOW care are sintaxa: SAVE WINDOW lista nume ferestre" ` ALL TO nume fi ier" ` TO MEMO cmp memo" Ferestrele se salveaz implicit n fi iere cu extensia .WIN. Readucerea ferestrelor pe ecran dintr-un fi ier sau dintr-un dintrdintrcmp memo se face cu comanda RESTORE WINDOW care are sintaxa: RESTORE WINDOW lista nume ferestre"` ALL FROM nume fi ier" ` FROM MEMO cmp memo" Con inutul unui ecran poate fi salvat ntr-o variabil de ntrmemorie folosind comanda SAVE SCREEN cu sintaxa: SAVE SCREEN [TO variabil de memorie "] Iar restaurarea ecranului poate fi f cut cu comanda: RESTORE SCREEN [FROM nume variabil de memorie "] Modificarea dimensiunilor i a pozi iei unei ferestre utilizator se face cu comanda ZOOM WINDOW care are sintaxa:ZOOM WINDOW nume ferastr " MIN [AUTO] ` MAX ` NORM [AT linie1, coloan 1" ` FROM linie1, coloan 1" [SIZE linie2, coloan 2" ` TO linie2, coloan 2" ] ]

  

 

Unul din instrumentele importante pe care le folose te limbajul FoxPro ca interfa ntre o aplica ie i utilizator este meniul. Prin acesta se ofer utilizatorului posibilitatea select rii unei anumite op iuni dintr-o mul ime dintrde finit de op iuni posibile afi ate pe ecran, total sau par ial, urmnd ca n func ie de selec ia f cut s se declan eze anumite ac iuni. Din punct de vedere al rolului pe care l au, meniurile sunt de dou feluri: meniuri principale sau meniuri sistem; ,meniuri definite de c tre utilizator. Meniul principal apare la lansarea n execu ie a mediului, sub forma unei bare de op iuni. Din fiecare op iune se poate activa ulterior un alt meniu. Meniul principal u ureaz activitatea programatorului din punct de vedere al facilit ilor pe care el le ofer . Meniul definit de utilizator este realizat de c tre programator n cadrul diverselor aplica ii. Rolul s u este de a face aplica ia ct mai u or de exploatat i de n eles. Din punct de vedere constructiv, n limbajul FoxPro meniurile sunt: meniuri bar sau meniuri pad; pad; meniuri verticale sau meniuri popup. popup.

Meniuri

 

Meniurile bar apar sub forma unei linii de ecran n care sunt definite diverse op iuni. Fiecare op iune a meniului poart denumirea de op iune bar sau op iune pad. Meniurile verticale apar pe mai multe linii de ecran, fiecare op iune cu denumirea de op iune popup,scris pe o linie diferit . Meniul sistem FoxPro este format din apte op iuni bar , care pot fi activate sau nu, n func ie de starea momentan a sistemului. Activarea meniului se poate face prin ap sarea tastelor ALT sau F10, iar activarea unei nsemn ri anumite op iuni din meniu prin ap sarea simultan a tastei ALT i tastei corespunz toare primei litere a op iunii respective. Cele apte op iuni ale meniului sunt: System, File, Edit, Database, Record, Program,Window. Meniul System se refer la informa ii despre limbajul FoxPro, despre calculatorul pe care se ruleaz limbajul, despre generarea macrourilor i ofer accesul la unele utilitare cum ar fi de exemplu: un calculator de buzunar, un calendar pe 2000 de ani, o tabel cu caractere speciale, o tabel cu coduri ASCII i utilitarul Filter care are func ii asem n toare cu utilitarul Norton Commander(folosit pentru simularea comenzilor sistemului de operare MS-DOS). MSMeniul File con ine op iuni referitoare la manipularea fi ierelor de diferite tiputi: fi iere de date, fi iere de index, programe, ecrane formatate, rapoarte, etc. Meniul Edit se folose te n editarea unui text ntr-o fereastr sau ntrntrntr-o regiune de editare. Meniul Database con ine op iuni care controleaz lucrul cu fi ierele de date n ansamblu. Meniul Record con ine op iuni pentru manipularea nregistr rilor fi ierului de date. Acest meniu este dezactivat atta timp ct nu exist un fi ier de date activ n zona de lucru curent . Meniul Program-folosit pentu controlul programelor FoxPro. ProgramMeniul Window este folosit pentru manipularea ferestrelor.

      

Meniul Run con ine comenzile pentru lansarea n execu ie a fi ierelor query, screen, report, label sau a aplica iilor. Meniuri utilizator ale c ror instruc iuni de descriere sunt scrise de c tre programator. Definirea unui meniu de tip bar se face cu comanda DEFINE MENU cu sintaxa: DEFINE MENU nume_meniu"[BAR[ATLINE expN"] [IN WINDOW] nume_fereastr " ` IN SCREEN ] [KEY cod_tast "] [MARK expC1"] [MESSAGE expC2"] NOMARGIN] [COLOR list _culoarei" `COLOR SCHEME expN2"]

Editarea ecranului
  

Editarea ecranului se face prin alegerea unuia dintre obiectele dorite. Obiectul text se realizeaz prin tastarea oric rui caracter alfanumeric i se folose te pentru explicitarea ecranului care se construie te. Obiectul cmp este cel mai uzual obiect ce se folose te la construirea unui ecran. Poate fi apelat din meniul Screen sau cu combina ia de taste Ctrl+F. Acest obiect se folose te pentru vizualizarea informa iilor din fi ierele cu extensia .DBF sau sau din diverse variabile . Tipul cmpului se alege din zona Field, denumirea cmpului de la butonul Get iar formatul de la butonul Format. Butoanele sau obiectele Push Button sunt folosite de obicei pentru a declan a o ac iune. Acestea se definesc prin apelarea op iunii cu acela i nume din meniul Screen sau din combina ia de taste Ctrl+H. Obiectele de tip butoane radio rprezint un grup de butoane dispuse pe orizontal sau pe vertical , n func ie de op iunea aleas i din care doar unul este activ la un moment dat. ntre parantezele butonului apare un punct dac acesta nu este activat; dac butonul este activat, punctul dispare. Fereastra de dialog corespunz toare acestui tip de butoane apare prin selectarea op iunii cu acela i nume din meniul Screen sau cu tastele Ctrl+N. Obiectele de tip popup sau list ascuns permit utilizatorului s selecteze unul dintre elementele listei. Ini ial, pe ecran apare un singur element. Prin selectarea acestui element sau prin ap sarea tastei Space, lista devine activ i se poate alege elementul dorit. Pentru apelarea ferestrei de dialog corespunz toare acestui obiect se apeleaz op iunea Popup din meniul Screen sau combina ia de taste Ctrl+O. Op iunile listei se pot ob ine din regiunea List Popup prin tastarea numelui op iunii sau op iunilor dorite, sau dintr-un tablou dintrdefinit n prealabil, cu op iunea Array Popup.

Generatorul de rapoarte


Generatorul de rapoarte este cel mai vechi dintre instrumentele de performan ale FoxPro. Acesta a existat n diferite forme nc din timpurile sistemului FoxBase, dar a fost mbun t it substan ial mai nti la lansarea produsului FoxPro i apoi odat cu versiunea 2.0 a acestuia. Informa iile referitoare la un raport sunt memorate ntr-o tabel , cu ntraceea i structur ca un fi ier DBF cu extensia FRX. Fi ierele cu extensia FRX i FRT, se pot copia n fi iere cu acela i nume cu extensiile DBF, respectiv FPT, dup care fi ierul cu extensia DBF poate fi eploatat ca i un fi ier obi nuit. Avantajul major al acestui instrument FoxProconst n faptul c roate rapoartele care trebuie prezentate n timpul unei aplica ii sau la sfr itul acesteia pot fi realizate mult mai simplu f r a scrie cod program. Modul de realizare se face interactiv, avnd tot timpul imaginea colii de hrtie pe care se va scrie raportul.

Crearea unui raport nou se face fie cu comanda CREATE REPORT fie din meniul pricipal, op iunea FILE, submeniul NEW, submeniul REPORT. Elementele de baz ale unui raport sunt: text, linii, chenare; cmuri, variabile i rutie definite de utilizator; benzi de raport. Textul, liniile i chenarul sun elemente de baz ale raportului, rolul lor este de a explicita informa iile din fi iere care vor apare n report. Cmpurile pot con ine diverse informa ii care pot fi introduse n raport. Pentru a putea fi introduse n raport, variabilele sunt definite n prealabil n program. Benzile de raport sunt mp r ite in trei:  benzi de antet, folosite pentru introducerea de informa ii n partea superioar a antet, paginii;  benzi de detaliu, folosite pentru introducerea informa iilor din fi iere; detaliu,  benzi de subsol de pagin , folosite pentru introducerea de informa ii n partea inferioar a paginii. Crearea obiectelor unui raport se face folosind meniul REPORT din meniul principal, op iune care apare la lansarea unei comenzi de creare a unui raport. Un raport poate fi construit astfel nct s corespud oric rei structuri de pagin . Definirea caracteristicilor de pagin se face prin op iunea PAGE LAYOUT a meniului REPORT. n fereastra de dialog Page Layout se define te lungimea paginii n num r de rnduri,marginea de sus i de jos, coloanele din stnga i din dreapta. Generatorul de rapoarte ofer i posibilitatea de a alege driverul de imprimant . Benzile care pot apare ntr-un raport: ntr Title  Summary  Header  Footer  Detail Afi area unui raport poate fi introdus n orice punct al unei aplica ii prin folosirea comenzii Report. Aceast comand permite transmiterea unui raport, care este un fi ier cu extensia Frx. Pentru a testa diferite condi ii referitoare la cmpuri sau variabile este util a se folosi func ia IIF().

Implementarea limbajului SQL n FoxPro




Proiectan ii sistemului Foxpro au introdus comenzi SQL pentru a mbun t i performan ele sistemului. Aceste comenzi sunt: SELECT se ob in informa ii din unul sau mai multe fi iere de date; CREATE CURSOR creeaz u fi oier de date temporar; CREATE TABLE creeaz un nou fi ier de date care se poate terge ulterior cu o comand specific ; INSERT adaug o nregistrare la sfr itul fi ierului de date existent; mpreun cu comanda trebuie specificate datele respective sau sursa de unde pot fi specificate.

Comanda SELECT are sintaxa: SELECT [ALL ` DISTINCT] [ alias". ] elem_select" [AS nume_coloan "] [,[ alias".] elem_select" [AS nume_coloan "]...] ` * FROM fi ier" [ alias_local"] [, fi ier" [ alias_local"]...] [ [INTO destina ie"] ` [TO FILE fi ier" [ADDITIVE] ` TO PRINTER [PROMPT] ` TO SCREEN] ] [PREFERENCE name" [NOCONSOLE] [PLAIN] [NOWAIT] [WHERE condi ie_unire" [AND condi ie_unire"...] [AND ` OR condi ie_filtru" [AND ` OR condi ie_filtru"...] ] ] [GROUP BY coloana_grupare" [, coloana_grupare"...] ] [HAVING condi ie_filtru"] [UNION [ALL] comand _SELECT"] [ORDER BY element_ordonare" [ASC ` DESC] [, element_ordonare" [ASC ` DESC]...] ]

      

Comanda CREATE TABLE creeaz un fi ier cu extensia DBF. Sintaxa comenzii este: CREATE TABLE ` DBF nume_fi ier" ( nume_cmp1" tip" [ ( precizie"], scal "] ) [, nume_cmp2" tip"...] ) ` FROM ARRAY matrice" Comanda CREATE CURSOR creeaz , spre deosebire de comanda CREATE TABLE, un fi ier DBF temporar care dispare n momentul n care este nchis. Comanda INSERT INTO adaug o nou nregistrare la sfr itul unui fi ier DBF, specificnd datele acesteia. Sintaxa comenzii este: INSERT INTO nume_fi ier" [( nume_cmp1", [ nume_cmp2"...] ] ) VALUES exp1",[ exp2,[...] ] ] ) [FROM ARRAY nume_matrice"] [FROM MEMVAR]

 

    

Baz e at i r grame e ate rel r ri legate e evi en a r il r intrintr-o i li tec . liotec


Descrierea temei proiectului :  Pentru c r ile dintr-o bibliotec dintrse constituie un fi ier cu structura:  codul c r ii  anul apari iei  editura  autorul  titlul  nr. Volume  Pentru o carte identificat prin primele cinci cmpuri ale articolului de achizi ionare s se modifice num rul de volume dac mai exist , sau s se creeze un nou articol n caz contrar.


Descrierea schemei de concep ie a proiect rii i a rezolv rii :


 

      

Ne propunem o gestiune simpl a c r ilor dintr-o bibliotec . n program, n dintrconformitate cu cerin ele acestuia, s-au prev zut facilit i de consultare a sbazei de date precum i de ad ugare n baza de date. Astfel, meniurile vor fi: Ad ugare, Listare i Ie ire. Aceste meniuri sunt realizate n cadrul unei bucle infinite: Do While, .True., permi ndu-se astfel ndureluarea unor op iuni de cte ori se dore te. Ie irea din bucl se face prin op iunea de ie ire, dup ce s-au nchis seventualele fi iere deschise i dup ce s-a cur at ecranul. sAlegerea op iunilor se face prin tastarea num rului corespunz tor meniului ales (num r ce va fi atribuit variabilei op iune, i care va selecta prelucrarea dorit ). n acest fel, dac se alege Ad ugare, programul principal SAB.PRG. apeleaz programul modul Ad ugare, care trateaz ad ug ri n baza de date. Toate prelucr rile se fac asupra bazei de date FI IER.dbf. acesta con ine urm toarele cmpuri: COD identific n mod unic o carte ANAPARI IE anul apari iei c r ii TITLU titlul c r ii AUTOR autorul c r ii EDITURA editura n care a ap rut cartea NRVOL num rul de volume de acela i fel existente Programul Ad ugare se desf oar tot n cadrul unei bucle infinite din dorin a de a permite reveniri n cazul unor gre eli.

Din ini ializ rile variabilelor corespunz toare cmpurilor din Fi ier.dbf, se cere specificarea codului pentru cartea ce se vrea ad ugat . n cazul n care nu s-a stastat nimic se afi eaz mesaj de ie ire i de reveniren meniul principal din SAB.PRG. astfel se caut neindexat (cu Locate For) prin Fi ier.dbf pentru eventualitatea existen ei codului tastat. n cazul g sirii codului, se cere introducerea de la tastatur a titlului, autorului, anului apari iei i a editurii. Dac cel pu in una din aceste date citite nu coincide cu datele corespuz toare din fi ier, se tip re te mesajul: acest cod exist dar identific o alt carte. n cazul coiciden ei perfecte, num rul de volume cre te cu unu. n cazul n care codul introdus de la tastatur nu este g sit, se introduc toate datele interactiv prin completarea de la tastatur . Este prev zut i o op iune de neacceptare n cazul unor gre eli de tip rire. n acest caz, instruc iunea Loop permite reluarea buclei de la nceput. Op iunea de listare apeleaz programul modul LISTARE.PRG. Acest program, conceput tot ntr-o bucl infinit , va genera un nou set de meniuri permi nd ntrlistarea dup oricare din cmpurile din FI IER.DBF, sau a tuturor nregistr rilor din fi iere. Exemplu: se dore te o listare dup un anumit autor. Se preia ntr-o variabil numele autorului dorit, se face o c utare simpl , neindexat , ntrprin nregistr rile din FI IER.DBF. Dac se g sesc nregistr ri ce con in n cmpul AUTOR exact autorul pe care l c ut , programul va afi a toate nregistr rile, cu toate datele, care au ca autor autorul c utat de noi. Bucla folosit a fost de forma DO WHILE FOUND (), astfel c au fost luate n considerare toate nregistr rile cu acela i autor. Dac se introduce un autor inexistent, se revine prin ap sarea unei taste oarecare n meniul de listare. Dac se dore te o listare integral a fi ierului, se pozi ioneaz GO TOP pe prima nregistrare i apoi, ntr-o bucl DO WHILE.NOT.EOF pentru o afi are a fiec rei ntrnregistr ri. trecerea pe urm toare nregistrare este asigurat de instruc iunea SKIP. Listarea se termin n clipa n care se ajunge pe EOF (sfr it de fi ier). i n acest meniu exist o op iune de ie ire ce permite revenirea n meniul principal.

BIBLIOTECA.PRG set exact on set exact off set scoarboard off set confirm on use fi ier do while .I. clear op iune=0 @3, 3 to 20,68 double @ 7,28 SAY =======MENIU======= @10,30 SAY 1.AD UGARE @11,30 SAY 2.LISTARE @12.30 SAY 3.IE IRE @13,10 SAY Ap sa i tasta conform op iunii. Apoi tasta i ENTER": @13,64 SAY get op iune picture 9 read do case case op iune=1 do AD UGARE case op iune=2 do LISTARE case op iune=3 *procedure IE IRE* close all clear cancel return endcase enddo

Pro ramele surs :


          

     

ADAUGARE.PRG do while .t. clear vc=space(8) vanap=0 ved=space(25) vt=space(25) va=space(25) vnrvol=0 @ 3, 3 to 20,58 double @ 2,10 say Ad ugarea unei nregistr ri n fi ier @ 5,5 say Specifica i codul: get vc @ 21,5 say Pentru ie ire apas ENTER" ! read if vc=space(8) use clear return endif

use fi ier go top locate for cod=vc if found() @ 8,5 say Acest cod exist deja! @10,5 say titlul: get vt @12,5 say Preciza i autorul: get va @14,5 say Anul apari iei: get vanap @16,5 say Editura:2 get ved read go top locate for titlu=vt .and.; cod=vc .and. autor=va .and.; editura=ved .and. anapari ie=vanap if found() vnrvol=nrvol vnrvol=vnrvol+1 @18,5 say A mai ap rut un volum! @19,5 say Num r volume: ger vnrvol wait replace nrvol with vnrvol else

@18,5 say Acest cod exista, dar identifica alt carte! wait endif else @ 10,7 say Titlul: get vt @ 11,7 say Autorul: get va @ 12,7 say Nr. Volume: get vnrvol picture 999999 @ 13,7 say Anul apari iei: get vanap @ 14,7 say Editura: get ved read rasp=z wait Date introduse corect? (y/n) to rasp if rasp$Yy rasp$Yy append blank replace cod with vc, autor with va, titlu with vt, nrvol with vnrvol replace anapari ie with vanap, editura with ved else loop endif endif enddo return

LISTARELISTARE-IESIRE.PRG
use fi ier do while .T. clear vc=space(8) vt=space(25) va=space(25) ved=space(25) vanap=0 vnrvol=0 opt=0 clear @ 2,28 SAY 1.DUP TITLU @ 4,28 SAY 2.DUP AUTOR @ 6,28 SAY 3.DUP COD @ 8,28 SAY 4.DUP NRVOL @ 10,28 SAY 5.DUP AN APARI IE @ 12,28 SAY 6.DUP EDITUR @ 14,28 SAY 7.TOATE @ 16,28 SAY 8.IE IRE @ 18,10 SAY Ap sa i tasta conform op iunii. Apoi ap sa i ENTER": @ 18,64 SAY get opt picture 9 read

clear do case case opt=1 *procedure listare1* @ 3,3 to 20,76 double @ 2,10 say listarea unor nregistr ri fi ier dup titlu @ 5,5 say Specifica i titlul c r ii: get vt @ 21,5 say Ap sa i tasta ENTER" pentru ie ire! read clear if vt=space(8) return endif use fi ier locate for titlu=vt if .not.found() @ 17,7 say Cartea cu acest titlu nu exist ! wait return endif do while found() vc=cod va=autor ved=editura vanap=anapari ie

:+vc @ 9,7 say Titlu :+vt @ 10,7 say Autor :+va @ 11,7 say Editura :+ved @ 12,7 say An apari ie:+str(vanap,8) @ 13,7 say Num r volume :+str(nrvol,8) wait clear continue enddo return ***************************** case opt=2 *procedure listare2* @ 3,3 to 20,76 double @ 2,10 say listarea unor nregistr ri fi ier dup autor @ 5,5 say Specifica i autorul c r ii: get va @ 21,5 say Ap sa i tasta ENTER" pentru ie ire! read clear if va=space(8) return endif use fi ier locate for autor=va if .not.found() @ 17,7 say Cartea cu acest autor nu exist ! wait endif do while found() vt=titlu

8,7 say Cod

vc=cod ved=editura vanap=anapari ie @ 8,7 say Cod :+vc @ 9,7 say Titlu :+vt @10,7 say Autor :+va @11,7 say Editura :+ved @12,7 say An apari ie:+str(vanap,8) @13,7 say Num r volume :+str(nrvol,8) continue wait clear enddo return *************************************************** case opt=3 *procedure listare3* @ 3,3 to 20,76 double @ 2,10 say listarea unor nregistr ri fi ier @ 5,5 say Specifica i codul c r ii: get vc @ 21,5 say Ap sa i tasta ENTER" pentru ie ire! read clear if vc=space(8) return endif

use fi ier locate for cod=vc if .not.found() @ 17,7 say Cartea cu acest cod nu exist ! wait endif do while found() vt=titlu va=autor ved=editura vanap=anapari ie @ 8,7 say Cod :+vc @ 9,7 say Titlu :+vt @10,7 say Autor :+va @11,7 say Editura :+ved @12,7 say An apari ie:+str(vanap,8) @13,7 say Num r volume :+str(nrvol,8) continue wait clear enddo return ***************************************************

*procedure listare4* @ 3,3 to 20,76 double @ 2,10 say listarea unor nregistr ri fi ier dup nr. vol @ 5,5 say Specifica i nr vol ale c r ii: get vnrvol @ 21,5 say Ap sa i tasta ENTER" pentru ie ire! ENTER" read clear if vnrvol=0 return endif use fi ier locate for nrvol=vnrvol if .not.found() @ 17,7 say Nu exist c r i n attea volume! wait endif do while found() vt=titlu va=autor ved=editura vanap=anapari ie @ 8,7 say Cod :+vc @ 9,7 say Titlu :+vt @10,7 say Autor :+va @11,7 say Editura :+ved @12,7 say An apari ie:+str(vanap,8) @13,7 say Num r volume :+str(nrvol,8) continue wait clear enddo return ***************************************************

case opt=4

*procedure listare5* @ 3,3 to 20,76 double @ 2,10 say listarea unor nregistr ri fi ier dup an apari ie @ 5,5 say Specifica i anul apari iei: get vanap @ 21,5 say Ap sa i tasta ENTER" pentru ie ire! ENTER" read clear if vanap=0 return endif use fi ier locate for anapari ie=vanap if .not.found() @ 17,7 say Nu exist c r i din acest an! wait endif do while found() vt=titlu va=autor vnrvol=nrvol ved=editura vc=cod @ 8,7 say Cod :+vc @ 9,7 say Titlu :+vt @10,7 say Autor :+va @11,7 say Nr volume :+str(nrvol,8) @12,7 say An apari ie:+str(vanap,4) @13,7 say Editura :+ved wait clear continue enddo return ***************************************************

case opt=5

case opt=6

*procedure listare5* @ 3,3 to 20,76 double @ 2,10 say listarea unor nregistr ri fi ier dup editur @ 5,5 say Specifica i editura: get ved @ 21,5 say Ap sa i tasta ENTER" pentru ie ire! ENTER" read clear if ved=space(8) return endif use fi ier locate for editura=ved if .not.found() @ 17,7 say Nu exist c r i n editura aceasta! wait endif do while found() vt=titlu va=autor vnrvol=nrvol vanap=anapari ie vc=cod @ 8,7 say Cod :+vc @ 9,7 say Titlu :+vt @10,7 say Autor :+va @11,7 say Nr volume :+str(nrvol,8) @12,7 say An apari ie:+str(vanap,8) @13,7 say Editura :+ved wait clear continue enddo return

return case opt=7 *procedure listare7* go top do while .not. eof() @ 3,3 to 20,76 double @ 2,10 say listarea nregistr rilor din fi ier @ 8,7 say Cod :+cod @ 9,7 say Titlu :+titlu @10,7 say Autor :+autor @11,7 say Editura :+ editura @12,7 say Anul apari iei:+str(anapari ie,8) @13,7 say Nr volume :+str(nrvol,8) wait skip clear enddo return *************************************************** case opt=8 *procedure ie ire* clear return endcase enddo return ***************************************************

Gata Gata !

Poate ar fi mai bine s mergem n Dumbrava la o bere sau un vin fiert ............... ?!

La revedere la cursul urm tor !

You might also like