Program Pentru Evidenta Scolara

CUPRINS

Introducere ––––––––––––––––––– 1

Capitolul I: NOȚIUNI GENERALE –––––– 3

1.1 Crearea și funcționarea obiectelor de control –––- 3

1.1.1 Comutatoare ––––––––––– 3

1.1.2 Lista ––––––––––––––––- 3

1.1.3 Lista ascunsă ––––––––––– 4

1.1.4 Declanșatoare ––––––––––– 4

1.1.5 Butoane radio ––––––––––– 5

1.1.6 Regiuni de editare text ––––––––- 5

1.2 Crearea și funcționarea meniurilor ––––––––- 6

1.2.1 Comenzi pentru lucrul cu meniuri –––- 6

Capitolul II: DESCRIEREA PROGRAMULUI –––- 8

2.1 Generalități ––––––––––––––––- 8

2.2 Bazele de date ––––––––––––––––- 8

2.3 Programul ––––––––––––––––- 11

2.4 Codul sursă ––––––––––––––––- 19

Bibliografie ––––––––––––––––––– 41

Cuprins ––––––––––––––––––– 42

=== l ===

INTRODUCERE

Dinamismul si complexitatea societatii moderne antreneaza o crestere continua a volumului si diversitatii informatiilor facand vitala disponibilitatea

si utilizarea pe scara larga a tehnologiilor informatiei. Majoritatea aplicatiilor manipuleaza volume importante de date care trebuiesc culese exact in momentul generarii lor, transportate, prelucrate, pastrate in conditi de maxima eficacitate.

Tehnologia bazelor de date se asimileaza relative usor si este de mare x spectaculozitate prin flexibilitatea proectarii rapide, vizuale a aproape tuturor obiectelor cu care vrem sa lucram intr-o aplicatie .

Complexitatea unui SGBD rezida in dimensiunea sa, reflectata nu numai in multitudinea instructiunilor sale dar si in multimea componentelor, fiind prin complexitate cel putin la nivelul unui sistem de operare (SO).

SGBD lucreaza ca subsistem sub controlul sistemului de operare al calculatorului care constituie suportul hard al bazei de date.

In aceasta calitate, SGBD foloseste selective o serie de functii oferite de SO. Astfel, calitatea SO se repercuteaza corespunzator asupra SGBD. SGBD contine in principal monitor, compilatoare, monitor de inlantuire, programe utilitare.

Monitorul cuprinde module specializate pentru gestionarea bazei de date, a zonelor de memorie interna, a retelei de teletransmisie si mesajelor terminale, fisiere externe, cat si pentru manipularea datelor, proceselor si procesoarelor, asigurarea confidentialitatii, comunicarea cu operatorul SO, coordinator de aplicatie, activarea proceselor distribuitor, etc.

Compilatoarele folosite sunt cele associate limbajelor de descriere si manipulare. Monitorul de inlantuire asigura succesiunea fazelor distincte de prelucrare.

Programele utilitare sunt diverse: editor de texte, generator de rapoarte, module de securitate, reorganizarea fizica, urmarirea performantelor BD prin statistici, etc. O sesiune a unui SGBD decurge in principiu astfel:

Calculatorul functioneaza sub controlul sistemului de operare SO

Un utilizator face apel la SGBD x in sensul ca emite catre SO comanda de lansare in executie a produsului SGBD x

SO analizeaza comanda utilizator si incarca de pe disc monitorul SGBD. Din acest moment intreaga activitate este controlata de programul monitor care va active componentele specifice fiecarei cereri utilizator

Iesirea din programul monitor permite preluarea controlului de catre SO.

CAPITOLUL I

NOȚIUNI GENERALE

Crearea și funcționarea obiectelor de control

S-a constatat că este mult mai ușor și mai plăcut pentru operator să aleagă una

din valorile prezentate pe un ecran, pentru a completa variabila get, decât să se introducă acea valoare caracter cu caracter, în plus, posibilitățile de eroare sunt mult mai mici. Fox prezintă proiectanților de aplicații diferite obiecte de control cum ar fi: comutatoare, liste de valori, liste ascunse, declanșatoare, butoane radio. Obiectele de control se descriu prin comanda GET unde clauzele de format FUNCTION și PICTURE vor conține codul de control corespunzător.

COMUTATOARE

Comutatoarele permit selectarea între două valori posibile (adevărat sau

fals). Apar pe ecran sub forma a două paranteze pătrate cu text explicativ. Comutatoarele se descriu prin codul de control C al clauzei FUNCTION sau prin @*C în clauza PICTURE. Textul explicativ al comutatorului poate fi trecut chiar în clauza unde apare codul de control, separat de un spațiu.

@<r,c>GET<var>FUNCTION ‘*C <text explicativ>’

@<r,c>GET<var>PICTURE ‘@*C <text explicativ>’

@<r,c>GET<var>FUNCTION ‘*C’ PICTURE ‘<text explicativ>’

Memorarea alegerii făcute de utilizator se face în variabila var care trebuie să fie de tip numeric sau logic. Pentru var de tip numeric, valoarea zero semnifică comutator neselectat. Pentru var de tip logic, valoarea .F. semnifică comutator neselectat.

LISTA

Se afișează o listă pe ecran din care utilizatorul poate selecta o valoare prin

apăsarea tastei ENTER. Lista se afișează vertical, total sau parțial și dacă nu încape pe ecran, apare o bară de defilare. Lista este preluată dintr-un vector, din prima coloană a unei matrici sau dintr-un submeniu (meniu de tip popup).

Listele se descriu prin clauzele FUNCTION sau PICTURE în care apare drept cod de control & in FUNCTION sau @& in PICTURE.

@<l,c>GET<var-get>FROM <tablou>[RANGE<n1>[,<n2>]/POPUP<submeniu> FUNCTION’&’/PICTURE’@&’

Dacă este prezentă clauza RANGE, lista este afișată doar cu o parte din elementele vectorului: cele cuprinse între limitele indicate în clauză.

LISTA ASCUNSĂ

Acest element, foarte folosit în FoxPro, este asemănător listei simple, dar,

dacă la lista simplă apare pe ecran lista întreagă, în cazul acesta apare un dreptunghi în care este trecut elementul curent din listă, restul fiind ascuns. Selectarea se face tot cu tasta ENTER pe dreptunghiul listei. În acest moment apare lista și se poate alege un element al listei cu enter. Funcția care realizează acest obiect este ^ in clauza FUNCTION sau &^ in clauza PICTURE.

@<r,c>GET<var-get>FUNCTION’^’PICTURE’<elem1>[;<elem2>]…’

@<r,c>GET<var-get>FUNCTION’^<elem1>[;<elem2>]…’

@<r,c>GET<var-get>FUNCTION’<elem1>[;<elem2>]…’PICTURE ‘@^’

@<r,c>GET<var-get>PICTURE’@^<elem1>[;<elem2>]…’

Elementele listei ascunse pot fi enumerate în continuarea codului prin separarea de acesta cu un spațiu.

DECLANȘATOARE

Declanșatorul este un obiect de control prin care se determină pornirea

imediată a unei acțiuni. Apare pe ecran cu textul explicativ între paranteze unghiulare. De exemplu: <sfarsit> <continua>.

Selectarea unui declansator determina o actiune, si se vizualizeaza prin schimbarea culorilor folosite pentru acel obiect. Functia care defineste declansatorul este * in FUNCTION, sau @* in PICTURE.

@<r,c>GET<var-get>FUNCTION’*<text1>[;<text2>]…’/ PICTURE’@*<text1>;…’

Printr-o comandă pot fi definite mai multe declanșatoare, primul fiind poziționat la punctul de coordonate r, c iar celelalte în continuare.

Memorarea opțiunii utilizatorului se face în variabila-get care poate fi numerică(întoarce numărul de ordine al declanșatorului selectat) sau de tip caracter (întoarce numele declanșatorului așa cum a fost el definit ca nume).

BUTOANE RADIO

Un alt obiect util și care face dialogul cu operatorul foarte prezentabil, este

butonul radio. Este important de reținut că selectarea unei opțiuni determină deselectarea automată a tuturor celorlalte opțiuni; deci, la un moment dat poate fi selectat un singur obiect. Butoanele apar pe ecran prin paranteze rotunde alăturate textului opțiunii. Pentru opțiunea selectată apare un punct între paranteze rotunde. Funcția care realizează acest obiect este R în FUNCTION sau @R in PICTURE. Textele explicative pot fi puse în continuarea codului de funcție, separate de un spațiu față de cod și separate între ele prin punct și virgulă.

@<r,c>GET<var-get>FUNCTION’*R<text1>[;<text2>]…’/

PICTURE’@*R<text1>;…’

REGIUNI DE EDITARE TEXT

Sintaxa este următoarea:

@<r,c>GET<memvar>/<field>

[FUNCTION<expC1>]

[PICTURE<expC2>]

[FONT<expC3>[,<expN1>]]

[STYLE<expC4>]

[DEFAULT<expr1>]

[ENABLE/DISABLE]

[MESSAGE<expC5>]

[[OPEN]WINDOW<window name>]

[RANGE[<expr2>][,<expr3>]]

[SIZE<expN2>,<expN3>]

[VALID<expL1>/<expN4>[ERROR<expC6>]]

[WHEN<expL2>]

[COLOR SCHEME<expN5>/COLOR<color pair list>]

Open Window este inclus pentru a realiza compatibilitatea cu versiunile mai vechi ale limbajului. Se poate folosi @<r,c>EDIT<memvar>/<field>. Comanda @EDIT permite modificarea unui sir de caractere intr-o zona dreptunghiulara de editare.

Crearea și funcționarea meniurilor

COMENZI PENTRU LUCRUL CU MENIURI

Asigurarea unei interfețe prietenoase cu utilizatorii unei aplicații dezvoltate

sub mediul oricărui sistem de gestiune a bazelor de date, este o preocupare constantă a programatorilor. Utilizarea de ferestre sau meniuri ușurează prezentarea diferitelor acțiuni ale programului și conferă un aspect atractiv aplicației.

Prin meniu înțelegem un element de interfață prin care se oferă utilizatorului posibilitatea selectării unei anumite opțiuni, dintr-o mulțime finită, afișată pe ecran, total sau parțial, urmând ca, în funcție de selectarea făcută, să se declanșeze anumite acțiuni.

Meniurile sunt de două tipuri: meniuri “menu”(bară) – folșosite de obicei ca meniuri principale ale aplicației, cu lista de opțiuni fără încadrare în chenar – și meniuri “popup”(verticale) – cu lista de opțiuni încadrată standard într-o bandă invers-video, folosite de obicei ca submeniuri.

Meniuri tip bară:

Definirea barei-meniu cu atzribuirea unui nume se face prin comanda:

DEFINE MENU <meniu>[MESSAGE<mesaj>]

Comanda permite și afișarea unui mesaj pe ultima linie a ecranului.

Definirea opțiunilor dintr-un meniu se face prin comanda:

DEFINE PAD<optiune>OF<meniu>PROMPT<sir>[AT<r,c>] [MESSAGE<mesaj>]

Precizarea acțiunii de executat la selectarea unei opțiuni:

ON SELECTION PAD<optiune>OF<meniu><comanda>

Activarea unui meniu bara:

ACTIVATE MENU<meniu>[PAD<optiune>]

Dezactivarea unui meniu:

DEACTIVATE MENU

Stergerea meniurilor din memorie se face cu comanda:

DEACTIVATE MENU<lista-meniuri>

Meniuri de tip popup:

Meniurile de tip popup prezintă mai multe opțiuni sub formă de listă verticală încadrată printr-o bandă invers-video.

Definirea meniului popup se face astfel:

DEFINE POPUP <submeniu> FROM<r1,c1> [TO<r2,c2>] [PROMPT STRUCTURE/FIELD<camp>/FILES[LIKE<masca>]][MESSAGE<mesaj>]

Comanda definește numele, poziția unui meniu popup precum și tipul opțiunilor acestui meniu. Opțiunile dintr-un meniu popup pot fi:

O listă de cerințe definite de utilizator

O listă de câmpuri din structura bazei active de date(Prompt structure)

O listă de valori ale unui câmp din baza activă de date, valori ale articolelor filtrate sau nu (Prompt Field)

O listă de fișiere care verifică o mască(Prompt Files Like)

Dacă meniul va conține o listă de opțiuni utilizator, acestea vor fi definite în continuare prin comenzile DEFINE BAR.

Definirea opțiunilor utilizator într-un meniu popup sunt:

DEFINE BAR<nr-linie>OF<submeniu>PROMPT<sir1>[MESSAGE<mesaj>] [SKIP[FOR<cond>]]

Comanda stabilește opțiunea de pe linia cu număr nr-linie, definind textul opțiunii. Dacă se folosește SKIP, atunci se afișează sir1, dar nu se permite selecția opțiunii. Dacă se folosește SKIP FOR atunci se afișează sir1, dar se va permite selecția numai dacă este îndeplinită condiția cond.

Stabilirea acțiunii de executat la selecția meniului se face prin comanda:

ON SELECTION POPUP<submeniu>/ALL<comanda>

Exista o singura comanda pentru un submeniu popup, spre deosebire de meniuri bara unde se precizeaza actiunea pentru fiecare optiune in parte.

Activarea meniului popup si afisarea lui pe ecran se poate face prin comanda:

ACTIVATE POPUP<submeniu>

Activarea submeniului direact dintr-o optiune a meniului apelant se face prin:

ON PAD<optiune>OF<meniu>ACTIVATE POPUP<submeniu>

Stergerea de pe ecran a meniului popup:

DEACTIVATE POPUP

Stergerea din memorie a submeniurilor:

RELEASE POPUP<lista-submeniuri>

CAPITOLUL II

DESCRIEREA PROGRAMULUI

2.1 Generalități

Programul IMOBIL, program care este descris în cele ce urmează, din punct de vedere structural, conține programul principal și următoarele 14 proceduri:

Pr1

Pr2

Pr3

Pr4

Pr5

Pr6

Pr7

Pr8

Pr9

Pr10

Pr11

Pr12

Final1

Final2

Aplicația gestionează datele stocate în două baze de date, și anume:

Cumpărat.dbf

Vândut.dbf

2.2 Bazele de date

Programul Imobil oferă posibilitatea consultării și prelucrării datelor privitoare la casele, apartamentele, terenurile intravilane și terenurile agricole cumpărate și vândute de către firma imobiliară.

Prelucrarea acestor date oferă informațiile necesare personalului care lucrează în cadrul companiei la care este implementată această aplicație.

Datele respective sunt stocate în două tabele, CUMPĂRAT.DBF și VÂNDUT.DBF.

Structura bazei de date: CUMPARAT.DBF

Structura bazei de date: VANDUT.DBF

2.3 Programul

Programul prezentat în această lucrare conține în jur de 1.100 de linii de program.

Execuția unui program din interiorul altui program, folosind comanda DO, reprezintă un pas important în structurarea aplicațiilor de dimensiuni mai mari. Pe măsură ce crește dimensiunea unei aplicații, testarea și depanarea acesteia devine din ce în ce mai dificilă, datorită numărului mare de variabile folosite, datorită numărului mare de instrucțiuni și a legăturilor dintre acestea. O rezolvare la această problemă poate fi gruparea unor instrucțiuni în module separate, aceste module fiind independente între ele. Comunicarea lor cu celelalte module se face prin intermediul unor parametrii, variabile de comunicare, care realizează interfața modulului cu exteriorul.

Module de acest tip pot fi create chiar în interiorul fișierului ce conține programul, formând așa numitele “proceduri și funcții definite de utilizator”.

Astfel, aplicația prezentată conține programul principal și un număr de 14 proceduri, toate create în interiorul unui fișier sursă numit imobil.prg.

Programul principal crează prin instrucțiuni specifice meniul IMOBIL, iar prin selectarea opțiunilor din submeniurile acestuia se apelează procedurile specificate.

PROGRAMUL PRINCIPAL

În programul principal are loc inițializarea variabilei “exit” cu valoarea “false”,

apoi se deschid bazele de date “cumparat.dbf” în zona 1 de lucru și “vandut.dbf” în zona 2 de lucru.

Tot în programul principal se definește meniul IMOBIL cu opțiunile bară:

Vanzari

Cumparari

Rapoarte

Iesire

În continuare se vor defini următoarele submeniuri, cu opțiunile specificate:

Pop1 Case

Apartamente

Terenuri

Modi / Sterge

Pop2 Case

Apartamente

Terenuri

Modi / Sterge

Pop3 Cumparari

Vanzari

Pop4 Intravilane

Agricole

Pop5 Intravilane

Agricole

Pop6 FoxPro

Sistemul de operare

Se va intra apoi într-o buclă “do while” care va executa o secvență de activare a meniului și a elementelor acestuia (pad-uri, popup-uri) atâta timp cât expresia “not exit” este “true”.

PROCEDURA PR1

Procedura Pr1 este apelată de către programul principal și corespunde opțiunilor

de meniu Vanzari Case.

Se va selecta prin program zona de lucru 1, zonă în care este deschisă baza de date cumparat.dbf, apoi se vor inițializa o serie de variabile.

În continuare se va crea un masiv prin instrucțiunea DIMENSION, masiv ce va avea ca elemente șiruri de caractere formate prin concatenarea unor subșiruri obținute din câmpuri ale bazei de date, câmpuri ce corespund înregistrărilor referitoare doar la case (nu și cele ce se referă la apartamente, terenuri intravilane sau terenuri agricole). Selecția înregistrărilor se face prin instrucțiunea SCAN FOR casa=.T.

Elementele masivului mat1 se formează astfel:

Mat1(x) = (str(nr_camere) + ’ ‘ + adresa + ’ ‘ + str(pret_cump + (pret_cump*5) / 100 + ’ ‘)

Pret_cump + (pret_cump*5)/100 reprezintă prețul de vânzare al imobilului, calculat din prețul cu care acesta a fost cumpărat de către firmă la care este adăugat un procent de 5 la sută, care reprezintă beneficiul firmei.

Pe ecran va fi afișată o listă din care utilizatorul, un angajat al firmei, va alege imobilul solicitat de către client. Apoi, prin intermediul unor obiecte de control, va introduce în baza de date vandut.dbf date referitoare la client: nume, prenume, buletin de identitate, adresa, numărul de telefon.

PROCEDURA PR2

Această procedură oferă posibilitatea procesării datelor necesare vânzării unui

apartament către un anumit client.

Procedura Pr2 este apelată atunci când utilizatorul selectează din meniul principal opțiunile Vanzari Apartamente.

Această procedură determină apariția acelorași evenimente ca și procedura pr1, cu diferența că elementele masivului mat1 se vor forma din câmpuri corespunzătoare doar înregistrărilor ce se referă la apartamente, adică înregistrări pentru care condiția apartament=.T. este adevărată. Această condiție se testează tot prin intermediul unei instrucțiuni SCAN.

PROCEDURA PR3

Este apelată atunci când operatorul alege Cumparari Case.

Procedura Pr3 crează mai multe obiecte de control prin intermediul cărora, în

final, se vor introduce în baza de date cumparat.dbf informații referitoare la imobilele cumparate de către firmă, imobile cumpărate cu scopul de a fi revândute apoi cu un preț mai mare.

Prin intermediul obiectelor de control disponibile aici se vor introduce de la tastatură:

Date referitoare la imobil:

Adresa imobilului

Număr de camere

Prețul la care a fost cumpărat

Date referitoare la proprietar:

Nume

Prenume

Buletin de identitate

Număr de telefon

În partea de jos a ecranului vor fi apoi afișate două declanșatoare:

Cumpără

Ieșire

Odată cu selectarea primului dintre acestea, la baza de date cumparat.dbf va fi

adăugată o nouă înregistrare, în care vor fi depuse informațiile introduse de către utilizator.

Selectarea celui de-al doilea declanșator are ca urmare curățarea ecranului și activarea meniului principal.

PROCEDURA PR4

Alegerea opțiunilor Cumparari Apartamente duca la apelul procedurii pr4, unde, prin intermediul obiectelor de control create și afișate pe ecran, utilizatorul va introduce în tabela cumparat.dbf datele referitoare la apartamentele cumpărate de către firmă.

Vor fi introduse în câmpurile de editare corespunzătoare adresa apartamentului, numărul de camere pe care acesta le conține, prețul la care a fost achiziționat, numele, prenumele, seria și numărul buletinului de identitate al fostului proprietar, cât și numărul acestuia de telefon.

Apoi această procedură crează și afișează declanșatoarele “Cumpără” și “Ieșire”, declanșatoare care au funcții identice cu cele create în procedura pr3.

PROCEDURA PR5

Corespunde opțiunilor de meniu Rapoarte Cumparari.

Procedura selectează zona 1 de lucru, zonă în care este deschisă baza de date cumparat.dbf . În această procedură se listează imobilele / terenurile care au fost cumpărate de firmă într-o perioadă dată de timp.

Utilizatorul își poate defini intervalul de timp pentru care se va face listarea, introducând data minimă și data maximă. Apoi poate selecta destinația afișării (pe ecran sau la imprimantă), folosind butoane radio. În final se poate alege tipul de imobil(casă sau apartament) sau teren(intravilan sau agricol) tot prin intermediul unor butoane radio.

După ce s-a realizat selecția, se sortează baza de date cumparat.dbf după câmpurile data_c, nume_v și pren_v, obținându-se astfel fișierul sortat cump.dbf, care se deschide în zona 3 de lucru, apoi se lansează în execuție raportul rep1.frx, prin comanda REPORT FORM rep1.frx. Acest raport conține toate informațiile necesare despre imobilele / terenurile care au fost cumpărate de firmă în perioda: data minimă – data maximă, precum și suma plătită de firmă pentru achiziționarea lor. La închiderea raportului fișierul cump.dbf este șters din memorie.

PROCEDURA PR6

Corespunde opțiunilor de meniu Rapoarte Vanzari.

Procedura selectează zona 2 de lucru, zonă în care este deschisă baza de date vandut.dbf . În această procedură se listează imobilele / terenurile care au fost vândute de firmă într-o perioadă dată de timp.

Utilizatorul își poate defini intervalul de timp pentru care se va face listarea, introducând data minimă și data maximă. Apoi poate selecta destinația afișării (pe ecran sau la imprimantă), folosind butoane radio. În final se poate alege tipul de imobil(casă sau apartament) sau teren(intravilan sau agricol) tot prin intermediul unor butoane radio.

După ce s-a realizat selecția, se sortează baza de date vandut.dbf după câmpurile data_v, nume_c și pren_c, obținându-se astfel fișierul sortat vand.dbf, care se deschide în zona 3 de lucru, apoi se lansează în execuție raportul rep2.frx, prin comanda REPORT FORM rep2.frx. Acest raport conține toate informațiile necesare despre imobilele / terenurile care au fost vândute de firmă în perioda: data minimă – data maximă, precum și beneficiul obținut de firmă în urma vânzărilor (diferența dintre prețul de vânzare și prețul de achiziție). La închiderea raportului fișierul vand.dbf este șters din memorie.

PROCEDURA PR7

Procedura Pr7 este apelată de către programul principal și corespunde opțiunilor de meniu Vanzari Terenuri Intravilane.

Se va selecta prin program zona de lucru 1, zonă în care este deschisă baza de date cumparat.dbf, apoi se vor inițializa o serie de variabile.

În continuare se va crea un masiv prin instrucțiunea DIMENSION. Acest masiv va avea ca elemente șiruri de caractere formate prin concatenarea unor subșiruri obținute din câmpuri ale bazei de date, câmpuri ce corespund înregistrărilor referitoare doar la terenuri intravilane. Selecția înregistrărilor se face prin instrucțiunea SCAN FOR intravilan=.T.

Elementele masivului mat1 se formează astfel:

Mat1 ( x ) = ( suprafata + ‘ ‘ + adresa + ‘ ‘ + str ( pret_cump + ( pret_cump*5 ) /100 + ‘ ‘)

Pret_cump + (pret_cump*5)/100 reprezintă prețul de vânzare al terenului intravilan ales, calculat din prețul cu care acesta a fost cumpărat de către firmă la care este adăugat un procent de 5 la sută, care reprezintă beneficiul firmei.

Pe ecran va fi afișată o listă din care utilizatorul, un angajat al firmei, va alege terenul intravilan solicitat de către client. În continuare, prin intermediul unor obiecte de control, se vor introduce în baza de date vandut.dbf date referitoare la client: nume, prenume, buletin de identitate, adresa, numărul de telefon.

PROCEDURA PR8

Această procedură este identică cu procedura Pr7, diferența constând în faptul că este apelată atunci când utilizatorul alege următoarea opțiune de meniu:

Vanzari Terenuri Agricole, iar elementele listei din care clienții vor avea posibilitatea de a alege un anumit teren agricol pentru a-l cumpăra, vor fi create din înregistrările tabelei cumparat.dbf pentru care agricol=.T. .

PROCEDURA PR9

Corespunde opțiunii de meniu Cumparari Terenuri Intravilane.

Procedura Pr9 crează mai multe obiecte de control prin intermediul cărora, în final, se vor introduce în baza de date cumparat.bdf informații referitoare la terenurile intravilane cumpărate de către firmă, terenuri cumpărate pentru a fi revândute apoi cu un preț mai mare.

Prin intermediul a mai multor obiecte de control disponibile utilizatorul va introduce de la tastatură următoarele informații:

Date referitoare la teren:

Adresa la care se află terenul

Suprafața terenului

Prețul la care a fost cumpărat

Date referitoare la proprietar:

Nume

Prenume

Buletin de identitate

Număr de telefon

În partea de jos a ecranului vor fi apoi afișate două declanșatoare:

Cumpara

Iesire

Odată cu selectarea primului dintre acestea, la baza de date cumparat.dbf va fi adăugată o nouă înregistrare, utilizându-se în acest scop comanda APPEND BLANK, înregistrare în care vor fi depuse informațiile introduse de către utilizator.

Selectarea celui de-al doilea declanșator are ca efect curățarea ecranului și activarea meniului principal, de unde operatorul va putea alege o altă opțiune sau va putea ieși din program.

PROCEDURA PR10

Alegerea opțiunilor Cumparari Terenuri Agricole duce la apelul procedurii Pr10, unde, prin intermediul obiectelor de control create și afișate pe ecran, utilizatorul va introduce în tabela cumparat.dbf informațiile referitoare la terenurile agricole cumpărate de către firmă.

Vor fi introduse în câmpurile de editare corespunzătoare locația terenului, suprafața acestuia exprimată în metri pătrați, prețul la care a fost achiziționat, numele, prenumele, seria și numărul buletinului de identitate al fostului proprietar, cât și numărul acestuia de telefon.

Apoi această procedură crează și afișează declanșatoarele Cumpara și Iesire , declanșatoare care au funcții identice cu cele create în procedura Pr9.

PROCEDURA PR11

În această procedură, utilizatorul are posibilitatea de a modifica sau a șterge anumite înregistrări din tabela vandut.dbf , adică să opereze asupra imobilelor sau terenurilor vândute de firmă.

La început se poate selecta prin intermediul unor butoane radio tipul acțiunii: modificări sau ștergeri.

Dacă s-a ales opțiunea de modificări, pe ecran apare un obiect de control de tip listă, unde sunt afișate adresele imobilelor / terenurilor vândute de firmă. După selectarea unei adrese, pe ecran vor apărea toate informațiile despre imobilul / terenul vândut de firmă, iar utilizatorul are posibilitatea, prin deplasarea de pe un câmp pe altul, să modifice unde este cazul. La sfârșit, înregistrarea din baza de date vandut.dbf va fi modificată, după selectarea declanșatorului OK.

Dacă s-a ales opțiunea de ștergeri, pe ecran apare din nou un obiect de control de tip listă, unde sunt afișate adresele imobilelor / terenurilor vândute de firmă. După selectarea unei adrese, utilizatorul are opțiunea de a decide ștergerea înregistrării, prin acționarea declanșatorului STERGE, sau renunțarea la ștergere, prin acționarea declanșatorului IESIRE.

PROCEDURA PR12

În această procedură, utilizatorul are posibilitatea de a modifica sau a șterge anumite înregistrări din tabela cumparat.dbf , adică să opereze asupra imobilelor sau terenurilor cumpărate de firmă.

La început se poate selecta prin intermediul unor butoane radio tipul acțiunii: modificări sau ștergeri.

Dacă s-a ales opțiunea de modificări, pe ecran apare un obiect de control de tip listă, unde sunt afișate adresele imobilelor / terenurilor cumpărate de firmă. După selectarea unei adrese, pe ecran vor apărea toate informațiile despre imobilul / terenul cumpărat de firmă, iar utilizatorul are posibilitatea, prin deplasarea de pe un câmp pe altul, să modifice unde este cazul. La sfârșit, înregistrarea din baza de date cumparat.dbf va fi modificată, după selectarea declanșatorului OK.

Dacă s-a ales opțiunea de ștergeri, pe ecran apare din nou un obiect de control de tip listă, unde sunt afișate adresele imobilelor / terenurilor cumpărate de firmă. După selectarea unei adrese, utilizatorul are opțiunea de a decide ștergerea înregistrării, prin acționarea declanșatorului STERGE, sau renunțarea la ștergere, prin acționarea declanșatorului IESIRE.

PROCEDURA FINAL1

Această procedură asigură ieșirea din program în mediul de programare FoxPro.

PROCEDURA FINAL2

Această procedură asigură ieșirea din program în sistemul de operare.

2.4 Codul sursă

*LUCRARE DE ATESTAT

*PROGRAM PENTRU AGENTII IMOBILIARE

CLEAR ALL

CLOSE ALL

SET TALK OFF

SET STATUS OFF

SET SYSMENU OFF

SET DATE TO DMY

SET CENTURY ON

SET ESCAPE OFF

SET BORDER TO DOUBLE

STORE .F. TO EXIT

USE cumparat IN 1

USE vandut IN 2

DEFINE MENU Imobil

DEFINE PAD pad1 OF Imobil PROMPT ' VANZARI ' COLOR SCHEME 3

DEFINE PAD pad2 OF Imobil PROMPT ' CUMPARARI ' AT 0, 11 COLOR SCHEME 3

DEFINE PAD pad3 OF Imobil PROMPT ' RAPOARTE ' AT 0, 24 COLOR SCHEME 3

DEFINE PAD pad4 OF Imobil ;

PROMPT ' IESIRE ' ;

AT 0, 36 COLOR SCHEME 3

DEFINE POPUP pop1 FROM 1, 0 SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF pop1 PROMPT 'CASE'

DEFINE BAR 2 OF pop1 PROMPT 'APARTAMENTE'

DEFINE BAR 3 OF pop1 PROMPT 'TERENURI'

DEFINE BAR 4 OF pop1 PROMPT 'MODI/STERGE'

DEFINE POPUP pop2 FROM 1, 11 SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF pop2 PROMPT 'CASE'

DEFINE BAR 2 OF pop2 PROMPT 'APARTAMENTE'

DEFINE BAR 3 OF pop2 PROMPT 'TERENURI'

DEFINE BAR 4 OF pop2 PROMPT 'MODI/STERGE'

DEFINE POPUP pop3 FROM 1, 24 SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF pop3 PROMPT 'CUMPARARI'

DEFINE BAR 2 OF pop3 PROMPT 'VANZARI'

DEFINE POPUP pop4 FROM 4, 13 SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF pop4 PROMPT 'INTRAVILANE'

DEFINE BAR 2 OF pop4 PROMPT 'AGRICOLE'

DEFINE POPUP pop5 FROM 4, 24 SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF pop5 PROMPT 'INTRAVILANE'

DEFINE BAR 2 OF pop5 PROMPT 'AGRICOLE'

DEFINE POPUP pop6 FROM 1,36 SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF pop6 PROMPT 'FOXPRO'

DEFINE BAR 2 OF pop6 PROMPT 'SISTEMUL DE OPERARE'

ON PAD pad1 OF Imobil ACTIVATE POPUP pop1

ON PAD pad2 OF Imobil ACTIVATE POPUP pop2

ON PAD pad3 OF Imobil ACTIVATE POPUP pop3

ON BAR 3 OF pop1 ACTIVATE POPUP pop4

ON BAR 3 OF pop2 ACTIVATE POPUP pop5

ON PAD pad4 OF Imobil ACTIVATE POPUP pop6

ON SELECTION BAR 1 OF pop1 DO pr1

ON SELECTION BAR 2 OF pop1 DO pr2

ON SELECTION BAR 1 OF pop2 DO pr3

ON SELECTION BAR 2 OF pop2 DO pr4

ON SELECTION BAR 1 OF pop3 DO pr5

ON SELECTION BAR 2 OF pop3 DO pr6

ON SELECTION BAR 1 OF pop4 DO pr7

ON SELECTION BAR 2 OF pop4 DO pr8

ON SELECTION BAR 1 OF pop5 DO pr9

ON SELECTION BAR 2 OF pop5 DO pr10

ON SELECTION BAR 4 OF pop1 DO pr11

ON SELECTION BAR 4 OF pop2 DO pr12

ON SELECTION BAR 1 OF pop6 DO final1

ON SELECTION BAR 2 OF pop6 DO final2

DO WHILE NOT exit

CLEAR

FOR i=17 TO 61

@7,i SAY"*"

@15,i SAY"*"

ENDFOR

FOR i=8 TO 14

@i,17 SAY"*"

@i,61 SAY"*"

ENDFOR

@10,22 SAY'PROGRAM PENTRU TRANZACTII IMOBILIARE' COLOR gr+/b

@12,20 SAY'VANZARI – CUMPARARI IMOBILE SI TERENURI' COLOR gr+/b

ACTIVATE MENU Imobil

ENDDO

RELEASE MENU Imobil

CLOSE ALL

RETURN

*–––––––

PROCEDURE PR1

*Firma lucreaza cu un comision de 5%

hide popup all

clear

store space(10) to nu1, pre1

store 0 to x, cl1

l=space(55)

tel1=space(10)

adr1=space(50)

bi1 =space(8)

ss =space(6)

ss1 =space(50)

store 0 to cc1, cc2

@2,32 say'Vanzari de case' color g+/b

@3,31 say'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' color g+/b

@4,27 say'Date referitoare la imobil' color gr+/b

select 1

go top

scan for casa=.T.

x=x+1

endscan

do case

case x=0

dimension mat1(1)

@6,27 say' Nu sunt de vanzare case ' color gr+/bg+

case x<>0

dimension mat1(x)

x=1

go top

scan for casa=.T.

mat1(x)=(str(nr_camere) + ' ' + adresa + ' ';

+ str(pret_cump + (pret_cump*5)/100) + ' ')

x=x+1

endscan

l=mat1(1)

@5, 3 say'Nr. camere'

@5,16 say'Adresa imobil'

@5,71 say'Pret'

@6 ,1 get l from mat1 function '&' size 6,78

@12,38 get cl1 function '*TV Ok' size 1, 4

read cycle

if cl1=1

@13,25 say'Date referitoare la cumparator' color gr+/b

@14, 20, 20, 59 box 'ÚÄ¿³ÙÄÀ³'

@15,23 say'Nume'

@16,23 say'Prenume'

@17,23 say'Buletin de identitate'

@18,23 say'Adresa actuala'

@19,23 say'Numar telefon'

@15,45 edit nu1 size 1, 12, 10 color scheme 1

@16,45 edit pre1 size 1, 12, 10 color scheme 1

@17,45 edit bi1 size 1, 12, 8 color scheme 1

@18,45 edit adr1 size 1, 12, 50 color scheme 1

@19,45 edit tel1 size 1, 12, 10 color scheme 1

@22,36 get cc1 function '*TV Vinde;\?Iesire' size 1, 8

read cycle

do case

case cc1=1

dv=date()

ss =substr(l, 69, 6)

ss1=substr(l, 14, 50)

sele 1

go top

locate for adresa=ss1

if found()

nrc=nr_camere

adr=adresa

pret=pret_cump

nu=nume_v

pre=pren_v

tel=tel_v

bi=bi_v

dc=data_c

@21,24say'Baza de date a fost actualizata' color r+/b

sele 2

append blank

replace nume_c with upper(nu1), pren_c with upper(pre1),;

tel_c with tel1,bi_c with upper(bi1), adresa with upper(adr),;

pret_vand with val(ss),casa with .T., apartament with .F.,;

intravilan with .F.,agricol with .F.,adresa_c with upper(adr1),;

pret_cump with pret, nume_v with upper(nu),;

pren_v with upper(pre), tel_v with tel, bi_v with upper(bi),;

nr_camere with nrc,data_v with dv,data_c with dc

sele 1

delete

pack

endif

case cc1=2

clear

deactivate popup all

return

endcase

endif

endcase

@22, 34 clear to 23, 43

@23, 36 get cc2 function '*TV Iesire' size 1, 8

read cycle

if cc2=1

clear

deactivate popup all

return

endif

*–––––––

PROCEDURE PR2

*Firma lucreaza cu un comision de 5%

hide popup all

clear

store space(10) to nu1, pre1

store 0 to x, cl1

l=space(55)

tel1=space(10)

adr1=space(50)

bi1 =space(8)

ss =space(6)

ss1 =space(50)

store 0 to cc1, cc2

@2,31 say'Vanzari de apartamente' color g+/b

@3,31 say'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' color g+/b

@4,27 say'Date referitoare la imobil' color gr+/b

sele 1

go top

scan for apartament=.T.

x=x+1

endscan

do case

case x=0

dimension mat1(1)

@11,21say' Nu sunt de vanzare apartamente ' color gr+/bg+

case x<>0

dimension mat1(x)

x=1

go top

scan for apartament=.T.

mat1(x)=(str(nr_camere) + ' ' + adresa + ' ';

+ str(pret_cump + (pret_cump*5)/100) + ' ')

x=x+1

endscan

l=mat1(1)

@5, 3 say'Nr. camere'

@5,16 say'Adresa imobil'

@5,71 say'Pret'

@6 ,1 get l from mat1 function '&' size 6,78

@12,38 get cl1 function '*TV Ok' size 1,4

read cycle

if cl1=1

@13,25 say'Date referitoare la cumparator' color gr+/b

@14, 20, 20, 59 box 'ÚÄ¿³ÙÄÀ³'

@15,23 say'Nume'

@16,23 say'Prenume'

@17,23 say'Buletin de identitate'

@18,23 say'Adresa actuala'

@19,23 say'Numar telefon'

@15,45 edit nu1 size 1, 12, 10 color scheme 1

@16,45 edit pre1 size 1, 12, 10 color scheme 1

@17,45 edit bi1 size 1, 12, 8 color scheme 1

@18,45 edit adr1 size 1, 12, 50 color scheme 1

@19,45 edit tel1 size 1, 12, 10 color scheme 1

@22,36 get cc1 function '*TV Vinde;\?Iesire' size 1, 8

read cycle

do case

case cc1=1

dv=date()

ss =substr(l, 69, 6)

ss1=substr(l, 14, 50)

sele 1

go top

locate for adresa=ss1

if found()

nrc=nr_camere

adr=adresa

pret=pret_cump

nu=nume_v

pre=pren_v

tel=tel_v

bi=bi_v

dc=data_c

@21,24say'Baza de date a fost actualizata' color r+/b

sele 2

append blank

replace nume_c with upper(nu1), pren_c with upper(pre1),;

tel_c with tel1,bi_c with upper(bi1), adresa with upper(adr),;

pret_vand with val(ss),casa with .F., apartament with .T.,;

intravilan with .F., agricol with .F.,adresa_c with adr1,;

pret_cump with pret, nume_v with nu, pren_v with pre,;

tel_v with tel, bi_v with bi, nr_camere with nrc;

data_c with dc,data_v with dv

sele 1

delete

pack

endif

case cc1=2

clear

deactivate popup all

return

endcase

endif

endcase

@22, 34 clear to 23, 43

@23, 36 get cc2 function '*TV Iesire' size 1, 8

read cycle

if cc2=1

clear

deactivate popup all

return

endif

*–––––––

PROCEDURE PR3

hide popup all

clear

store space(10) to nu, pre

store 0 to cc1, cc2

nrc =space(2)

pret=space(6)

adr =space(50)

bi =space(8)

tel =space(10)

@2,31 say'Cumparari de case' color g+/b

@3,30 say'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' color g+/b

@5,27 say'Date referitoare la imobil' color gr+/b

@ 6, 20, 10, 59 box 'ÚÄ¿³ÙÄÀ³'

@ 7,26 say'Adresa'

@ 8,26 say'Numar camere'

@ 9,26 say'Pret'

@ 7,40 edit adr size 1, 14, 50 color scheme 1

@ 8,40 edit nrc size 1, 14, 2 color scheme 1

@ 9,40 edit pret size 1, 14, 6 color scheme 1

@ 9,55 say'USD'

@12,25 say'Date referitoare la proprietar' color gr+/b

@13, 20, 18, 59 box 'ÚÄ¿³ÙÄÀ³'

@14,23 say'Nume'

@15,23 say'Prenume'

@16,23 say'Buletin de identitate'

@17,23 say'Numar telefon'

@14,47 edit nu size 1, 10, 10 color scheme 1

@15,47 edit pre size 1, 10, 10 color scheme 1

@16,47 edit bi size 1, 10, 8 color scheme 1

@17,47 edit tel size 1, 10, 10 color scheme 1

@22,35 get cc1 function '*TV Cumpara;\?Iesire' size 1, 9

read cycle

do case

case cc1=1

dc=date()

@19,24say'Baza de date a fost actualizata' color r+/b

sele 1

append blank

replace casa with .T., apartament with .F., intravilan with .F.,;

agricol with .F., nr_camere with val(nrc), adresa with upper(adr),;

pret_cump with val(pret),nume_v with upper(nu),pren_v with upper(pre),;

tel_v with tel, bi_v with upper(bi),data_c with dc

case cc1=2

clear

deactivate popup all

return

endcase

@22, 34 clear to 23, 43

@23, 36 get cc2 function '*TV Iesire' size 1, 8

read cycle

if cc2=1

clear

deactivate popup all

return

endif

*–––––––

PROCEDURE PR4

hide popup all

clear

store space(10) to nu, pre

store 0 to cc1, cc2

nrc =space(2)

pret=space(6)

adr=space(50)

bi =space(8)

tel=space(10)

@2,28 say'Cumparari de apartamente' color g+/b

@3,27 say'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' color g+/b

@5,27 say'Date referitoare la imobil' color gr+/b

@ 6, 20, 10, 59 box 'ÚÄ¿³ÙÄÀ³'

@ 7,26 say'Adresa'

@ 8,26 say'Numar camere'

@ 9,26 say'Pret'

@ 7,40 edit adr size 1, 14, 50 color scheme 1

@ 8,40 edit nrc size 1, 14, 2 color scheme 1

@ 9,40 edit pret size 1, 14, 6 color scheme 1

@ 9,55 say'USD'

@12,25 say'Date referitoare la proprietar' color gr+/b

@13, 20, 18, 59 box 'ÚÄ¿³ÙÄÀ³'

@14,23 say'Nume'

@15,23 say'Prenume'

@16,23 say'Buletin de identitate'

@17,23 say'Numar telefon'

@14,47 edit nu size 1, 10, 10 color scheme 1

@15,47 edit pre size 1, 10, 10 color scheme 1

@16,47 edit bi size 1, 10, 8 color scheme 1

@17,47 edit tel size 1, 10, 10 color scheme 1

@22,35 get cc1 function '*TV Cumpara;\?Iesire' size 1, 9

read cycle

do case

case cc1=1

dc=date()

@19,24say'Baza de date a fost actualizata' color r+/b

sele 1

append blank

replace casa with .F.,apartament with .T.,intravilan with .F.,;

agricol with .F.,nr_camere with val(nrc),adresa with upper(adr),;

pret_cump with val(pret),nume_v with upper(nu),pren_v with upper(pre),;

tel_v with tel,bi_v with upper(bi),data_c with dc

case cc1=2

clear

deactivate popup all

return

endcase

@22, 34 clear to 23, 43

@23, 36 get cc2 function '*TV Iesire' size 1, 8

read cycle

if cc2=1

clear

deactivate popup all

return

endif

*–––––––

PROCEDURE PR5

clear

hide popup all

select 1

d1={//}

d2={//}

ok=0

varx='CASA'

vary='PE ECRAN'

@3,20say"IMOBILE SI TERENURI CUMPARATE DE FIRMA"

@4,20say"======================================"

@6,10 say"INTRODUCETI DATA MINIMA:" get d1 function'd'

@7,10 say"INTRODUCETI DATA MAXIMA:" get d2 function'd'

@9,10 say"SELECTATI DESTINATIA AFISARII:"

@11,10 get vary ;

picture'@*rnv PE ECRAN;LA IMPRIMANTA'

@14,10 say"SELECTATI TIPUL DE IMOBIL SAU TEREN:"

@16,10 get varx;

picture'@*rnv CASA;APARTAMENT;TEREN INTRAVILAN;TEREN AGRICOL'

@21,31 get ok function'*h OK;IESIRE'

read cycle

do case

case ok=1

w=0

if varx='CASA'

v='CASE'

sort to cump on data_c,nume_v,pren_v

use cump in 3

select 3

if vary='PE ECRAN'

report form rep1.frx;

for (casa=.t.)and((d1<=data_c) and (data_c<=d2)) preview

use

erase cump.dbf

clear

deactivate popup all

endif

if vary='LA IMPRIMANTA'

report form rep1.frx ;

for (casa=.t.)and((d1<=data_c)and(data_c<=d2)) to printer ;

noconsole

use

erase cump.dbf

clear

deactivate popup all

endif

endif

if varx='APARTAMENT'

v='APARTAMENTE'

sort to cump on data_c,nume_v,pren_v

use cump in 3

select 3

if vary='PE ECRAN'

report form rep1.frx ;

for (apartament=.t.)and((d1<=data_c)and(data_c<=d2)) preview

use

erase cump.dbf

clear

deactivate popup all

endif

if vary='LA IMPRIMANTA'

report form rep1.frx ;

for (apartament=.t.)and((d1<=data_c)and(data_c<=d2)) to printer;

noconsole

use

erase cump.dbf

clear

deactivate popup all

endif

endif

if varx='TEREN INTRAVILAN'

v='TERENURI INTRAVILANE'

sort to cump on data_c,nume_v,pren_v

use cump in 3

select 3

if vary='PE ECRAN'

report form rep1.frx;

for (intravilan=.t.)and((d1<=data_c)and(data_c<=d2)) preview

use

erase cump.dbf

clear

deactivate popup all

endif

if vary='LA IMPRIMANTA'

report form rep1.frx ;

for (intravilan=.t.)and((d1<=data_c)and(data_c<=d2)) to printer;

noconsole

use

erase cump.dbf

clear

deactivate popup all

endif

endif

if varx='TEREN AGRICOL'

v='TERENURI AGRICOLE'

sort to cump on data_c,nume_v,pren_v

use cump in 3

select 3

if vary='PE ECRAN'

report form rep1.frx ;

for (agricol=.t.)and((d1<=data_c)and(data_c<=d2)) preview

use

erase cump.dbf

clear

deactivate popup all

endif

if vary='LA IMPRIMANTA'

report form rep1.frx ;

for (agricol=.t.)and((d1<=data_c)and(data_c<=d2)) to printer;

noconsole

use

erase cump.dbf

clear

deactivate popup all

endif

endif

case ok=2

clear

deactivate popup all

return

endcase

*–––––––

PROCEDURE PR6

clear

hide popup all

select 2

d1={//}

d2={//}

ok=0

varx='CASA'

vary='PE ECRAN'

@3,20say"IMOBILE SI TERENURI VANDUTE DE FIRMA"

@4,20SAY"===================================="

@6,10 say"INTRODUCETI DATA MINIMA:" get d1 function'd'

@7,10 say"INTRODUCETI DATA MAXIMA:" get d2 function'd'

@9,10 say"SELECTATI DESTINATIA AFISARII:"

@11,10 get vary ;

picture'@*rnv PE ECRAN;LA IMPRIMANTA'

@14,10 say"SELECTATI TIPUL DE IMOBIL SAU TEREN:"

@16,10 get varx;

picture'@*rnv CASA;APARTAMENT;TEREN INTRAVILAN;TEREN AGRICOL'

@21,31 get ok function'*h OK;IESIRE'

read cycle

do case

case ok=1

w=0

if varx='CASA'

v='CASE'

sort to vand on data_v,nume_c,pren_c

use vand in 3

select 3

if vary='PE ECRAN'

report form rep2.frx ;

for (casa=.t.)and((d1<=data_v)and(data_v<=d2)) preview

use

erase vand.dbf

clear

deactivate popup all

endif

if vary='LA IMPRIMANTA'

report form rep2.frx ;

for (casa=.t.)and((d1<=data_v)and(data_v<=d2)) to printer;

noconsole

use

erase vand.dbf

clear

deactivate popup all

endif

endif

if varx='APARTAMENT'

v='APARTAMENTE'

sort to vand on data_v,nume_c,pren_c

use vand in 3

select 3

if vary='PE ECRAN'

report form rep2.frx ;

for (apartament=.t.)and((d1<=data_v)and(data_v<=d2)) preview

use

erase vand.dbf

clear

deactivate popup all

endif

if vary='LA IMPRIMANTA'

report form rep2.frx ;

for (apartament=.t.)and((d1<=data_v)and(data_v<=d2)) to printer;

noconsole

use

erase vand.dbf

clear

deactivate popup all

endif

endif

if varx='TEREN INTRAVILAN'

v='TERENURI INTRAVILANE'

sort to vand on data_v,nume_c,pren_c

use vand in 3

select 3

if vary='PE ECRAN'

report form rep2.frx ;

for (intravilan=.t.)and((d1<=data_v)and(data_v<=d2)) preview

use

erase vand.dbf

clear

deactivate popup all

endif

if vary='LA IMPRIMANTA'

report form rep2.frx ;

for (intravilan=.t.)and((d1<=data_v)and(data_v<=d2)) to printer;

noconsole

use

erase vand.dbf

clear

deactivate popup all

endif

endif

if varx='TEREN AGRICOL'

v='TERENURI AGRICOLE'

sort to vand on data_v,nume_c,pren_c

use vand in 3

select 3

if vary='PE ECRAN'

report form rep2.frx ;

for (agricol=.t.)and((d1<=data_v)and(data_v<=d2)) preview

use

erase vand.dbf

clear

deactivate popup all

endif

if vary='LA IMPRIMANTA'

report form rep2.frx ;

for (agricol=.t.)and((d1<=data_v)and(data_v<=d2)) to printer;

noconsole

use

erase vand.dbf

clear

deactivate popup all

endif

endif

case ok=2

clear

deactivate popup all

return

endcase

*–––––––

PROCEDURE PR7

hide popup all

clear

store space(10) to nu1, pre1

store 0 to x, cl1

l=space(55)

tel1=space(10)

adr1=space(50)

bi1 =space(8)

supr=space(6)

ss =space(6)

ss1 =space(50)

store 0 to cc1, cc2

@2,24 say'Vanzari de terenuri intravilane' color g+/b

@3,23 say'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' color g+/b

@4,27 say'Date referitoare la teren' color rb+/b

sele 1

go top

scan for intravilan=.T.

x=x+1

endscan

do case

case x=0

dimension mat1(1)

@11,19say' Nu sunt de vanzare terenuri intravilane ' color gr+/bg+

case x<>0

dimension mat1(x)

x=1

go top

scan for intravilan=.T.

mat1(x)=(suprafata + ' ' + adresa + ' ';

+ str(pret_cump + (pret_cump*5)/100) + ' ')

x=x+1

endscan

l=mat1(1)

@5, 2 say'Supr.(mý)'

@5,12 say'Adresa'

@5,67 say'Pret(USD)'

@6 ,1 get l from mat1 function '&' size 6,78

@12,38 get cl1 function '*TV Ok' size 1,4

read cycle

if cl1=1

@13,25 say'Date referitoare la cumparator' color gr+/b

@14, 20, 20, 59 box 'ÚÄ¿³ÙÄÀ³'

@15,23 say'Nume'

@16,23 say'Prenume'

@17,23 say'Buletin de identitate'

@18,23 say'Adresa actuala'

@19,23 say'Numar telefon'

@15,45 edit nu1 size 1, 12, 10 color scheme 1

@16,45 edit pre1 size 1, 12, 10 color scheme 1

@17,45 edit bi1 size 1, 12, 8 color scheme 1

@18,45 edit adr1 size 1, 12, 50 color scheme 1

@19,45 edit tel1 size 1, 12, 10 color scheme 1

@22,36 get cc1 function '*TV Vinde;\?Iesire' size 1, 8

read cycle

do case

case cc1=1

dv=date()

ss =substr(l, 65, 6)

ss1=substr(l, 10, 50)

sele 1

go top

locate for adresa=ss1

if found()

adr =adresa

pret=pret_cump

nu =nume_v

pre =pren_v

tel =tel_v

bi =bi_v

supr=suprafata

dc=data_c

@21,24say'Baza de date a fost actualizata' color r+/b

sele 2

append blank

replace nume_c with upper(nu1), pren_c with upper(pre1),;

tel_c with tel1,bi_c with upper(bi1),adresa with upper(adr),;

pret_vand with val(ss),casa with .F.,apartament with .F.,;

intravilan with .T.,agricol with .F.,adresa_c with adr1,;

pret_cump with pret, nume_v with nu, pren_v with pre,;

tel_v with tel, bi_v with bi, suprafata with supr;

data_c with dc,data_v with dv

sele 1

delete

pack

endif

case cc1=2

clear

deactivate popup all

return

endcase

endif

endcase

@22, 34 clear to 23, 43

@23, 36 get cc2 function '*TV Iesire' size 1, 8

read cycle

if cc2=1

clear

deactivate popup all

return

endif

*–––––––

PROCEDURE PR8

hide popup all

clear

store space(10) to nu1, pre1

store 0 to x, cl1

l=space(55)

tel1=space(10)

adr1=space(50)

bi1 =space(8)

supr=space(6)

ss =space(6)

ss1 =space(50)

store 0 to cc1, cc2

@2,26 say'Vanzari de terenuri agricole' color g+/b

@3,25 say'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' color g+/b

@4,27 say'Date referitoare la teren' color rb+/b

sele 1

go top

scan for agricol=.T.

x=x+1

endscan

do case

case x=0

dimension mat1(1)

@11,21say' Nu sunt de vanzare terenuri agricole ' color gr+/bg+

case x<>0

dimension mat1(x)

x=1

go top

scan for agricol=.T.

mat1(x)=(suprafata + ' ' + adresa + ' ';

+ str(pret_cump + (pret_cump*5)/100) + ' ')

x=x+1

endscan

l=mat1(1)

@5, 2 say'Supr.(mý)'

@5,12 say'Adresa'

@5,67 say'Pret(USD)'

@6 ,1 get l from mat1 function '&' size 6,78

@12,38 get cl1 function '*TV Ok' size 1, 4

read cycle

if cl1=1

@13,25 say'Date referitoare la cumparator' color gr+/b

@14, 20, 20, 59 box 'ÚÄ¿³ÙÄÀ³'

@15,23 say'Nume'

@16,23 say'Prenume'

@17,23 say'Buletin de identitate'

@18,23 say'Adresa actuala'

@19,23 say'Numar telefon'

@15,45 edit nu1 size 1, 12, 10 color scheme 1

@16,45 edit pre1 size 1, 12, 10 color scheme 1

@17,45 edit bi1 size 1, 12, 8 color scheme 1

@18,45 edit adr1 size 1, 12, 50 color scheme 1

@19,45 edit tel1 size 1, 12, 10 color scheme 1

@22,36 get cc1 function '*TV Vinde;\?Iesire' size 1, 8

read cycle

do case

case cc1=1

dv=date()

ss =substr(l, 65, 6)

ss1=substr(l, 10, 50)

sele 1

go top

locate for adresa=ss1

if found()

adr =adresa

pret=pret_cump

nu =nume_v

pre =pren_v

tel =tel_v

bi =bi_v

supr=suprafata

dc=data_c

@21,24say'Baza de date a fost actualizata' color r+/b

sele 2

append blank

replace nume_c with upper(nu1),pren_c with upper(pre1),;

tel_c with tel1,bi_c with upper(bi1),adresa with upper(adr),;

pret_vand with val(ss),casa with .F.,apartament with .F.,;

intravilan with .F.,agricol with .T.,adresa_c with adr1,;

pret_cump with pret, nume_v with nu, pren_v with pre, ;

tel_v with tel, bi_v with bi, suprafata with supr;

data_c with dc,data_v with dv

sele 1

delete

pack

endif

case cc1=2

clear

deactivate popup all

return

endcase

endif

endcase

@22, 34 clear to 23, 43

@23, 36 get cc2 function '*TV Iesire' size 1, 8

read cycle

if cc2=1

clear

deactivate popup all

return

endif

*–––––––

PROCEDURE PR9

hide popup all

clear

store space(10) to nu, pre

store 0 to cc1, cc2

supr=space(6)

pret=space(6)

adr =space(50)

bi =space(8)

tel =space(10)

@2,23 say'Cumparari de terenuri intravilane' color g+/b

@3,22 say'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' color g+/b

@5,27 say'Date referitoare la teren' color gr+/b

@ 6, 20, 10, 59 box 'ÚÄ¿³ÙÄÀ³'

@ 7,26 say'Adresa'

@ 8,26 say'Suprafata'

@ 9,26 say'Pret'

@ 7,40 edit adr size 1, 14, 50 color scheme 1

@ 8,40 edit supr size 1, 14, 6 color scheme 1

@ 9,40 edit pret size 1, 14, 6 color scheme 1

@ 8,55 say'Mý'

@ 9,55 say'USD'

@12,25 say'Date referitoare la proprietar' color gr+/b

@13, 20, 18, 59 box 'ÚÄ¿³ÙÄÀ³'

@14,23 say'Nume'

@15,23 say'Prenume'

@16,23 say'Buletin de identitate'

@17,23 say'Numar telefon'

@14,47 edit nu size 1, 10, 10 color scheme 1

@15,47 edit pre size 1, 10, 10 color scheme 1

@16,47 edit bi size 1, 10, 8 color scheme 1

@17,47 edit tel size 1, 10, 10 color scheme 1

@22,35 get cc1 function '*TV Cumpara;\?Iesire' size 1, 9

read cycle

do case

case cc1=1

dc=date()

@19,24say'Baza de date a fost actualizata' color r+/b

sele 1

append blank

replace casa with .F.,apartament with .F.,intravilan with .T.,;

agricol with .F.,adresa with upper(adr),pret_cump with val(pret),;

nume_v with upper(nu),pren_v with upper(pre),tel_v with tel,;

bi_v with upper(bi), suprafata with supr,data_c with dc

case cc1=2

clear

deactivate popup all

return

endcase

@22, 34 clear to 23, 43

@23, 36 get cc2 function '*TV Iesire' size 1, 8

read cycle

if cc2=1

clear

deactivate popup all

return

endif

*–––––––

PROCEDURE PR10

hide popup all

clear

store space(10) to nu, pre

store 0 to cc1, cc2

supr=space(6)

pret=space(6)

adr =space(50)

bi =space(8)

tel =space(10)

@2,25 say'Cumparari de terenuri agricole' color g+/b

@3,24 say'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ' color g+/b

@5,27 say'Date referitoare la teren' color gr+/b

@ 6, 20, 10, 59 box 'ÚÄ¿³ÙÄÀ³'

@ 7,26 say'Adresa'

@ 8,26 say'Suprafata'

@ 9,26 say'Pret'

@ 7,40 edit adr size 1, 14, 50 color scheme 1

@ 8,40 edit supr size 1, 14, 6 color scheme 1

@ 9,40 edit pret size 1, 14, 6 color scheme 1

@ 8,55 say'Mý'

@ 9,55 say'USD'

@12,25 say'Date referitoare la proprietar' color gr+/b

@13, 20, 18, 59 box 'ÚÄ¿³ÙÄÀ³'

@14,23 say'Nume'

@15,23 say'Prenume'

@16,23 say'Buletin de identitate'

@17,23 say'Numar telefon'

@14,47 edit nu size 1, 10, 10 color scheme 1

@15,47 edit pre size 1, 10, 10 color scheme 1

@16,47 edit bi size 1, 10, 8 color scheme 1

@17,47 edit tel size 1, 10, 10 color scheme 1

@22,35 get cc1 function '*TV Cumpara;\?Iesire' size 1, 9

read cycle

do case

case cc1=1

dc=date()

@19,24say'Baza de date a fost actualizata' color r+/b

sele 1

append blank

replace casa with .F.,apartament with .F.,intravilan with .F.,;

agricol with .T.,adresa with upper(adr),pret_cump with val(pret),;

nume_v with upper(nu),pren_v with upper(pre),tel_v with tel,;

bi_v with upper(bi), suprafata with supr,data_c with dc

case cc1=2

clear

deactivate popup all

return

endcase

@22, 34 clear to 23, 43

@23, 36 get cc2 function '*TV Iesire' size 1, 8

read cycle

if cc2=1

clear

deactivate popup all

return

endif

*–––––––

PROCEDURE PR11

clear

hide popup all

sele 2

varx='MODIFICARI'

ok=0

go top

x=adresa

@2,5 to 20,70 double

@3,24say"MODIFICARI/STERGERI DE IMOBILE-TERENURI"

@7,28 say"ALEGETI TIPUL ACTIUNII:"

@9,28 get varx picture'@*rnv MODIFICARI;STERGERI'

@15,28 get ok function'*h OK;IESIRE'

read cycle

do case

case ok=1

clear

if varx='MODIFICARI'

ok1=0

oko=0

@2,5 to 22,70

@3,23say"MODIFICARI DE IMOBILE-TERENURI"

@5,10 say"SELECTATI ADRESA CARE SE MODIFICA:"

define popup lista prompt field adresa scroll

@6,10 get x popup lista function'&'size 12,52

@19,10 get oko function'*h MODIFICA;IESIRE'

read cycle

clear

do case

case oko=1

locate for adresa=x

if found()=.t.

scatter memvar

@1,5say"ADRESA IMOBILULUI/TERENULUI VANDUT"

@2,10 get m.adresa ;

picture"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

function"!"

if m.casa=.t.

va='CASA'

endif

if m.apartament=.t.

va='APARTAMENT'

endif

if m.intravilan=.t.

va='TEREN INTRAVILAN'

endif

if m.agricol=.t.

va='TEREN AGRICOL'

endif

@3,10 say"Tipul achizitiei:" get va;

function'*rnv CASA;APARTAMENT;TEREN INTRAVILAN;TEREN AGRICOL'

@7,10 say"Numar camere:" get m.nr_camere function"99";

when (va='CASA')or(va='APARTAMENT')

@8,10 say"Suprafata:"get m.suprafata function"xxxxxx";

when (va='TEREN INTRAVILAN')or(va='TEREN AGRICOL')

@9,5say"DATE DESPRE FOSTUL PROPRIETAR:"

@10,10 say"Numele:" get m.nume_v;

picture"xxxxxxxxxx" function"!"

@11,10 say"Prenumele:" get m.pren_v;

picture"xxxxxxxxxx" function"!"

@12,10 say"Buletinul de identitate:" get m.bi_v picture"xxxxxxxx";

function"!"

@13,10 say"Telefonul:"get m.tel_v picture"xxxxxxxxxx"

@14,5say"DATE DESPRE ACTUALUL PROPRIETAR:"

@15,10say"Numele:" get m.nume_c picture"xxxxxxxxxx" function"!"

@16,10say"Prenumele:" get m.pren_c picture"xxxxxxxxxx" function"!"

@17,10say"Buletinul de identitate:" get m.bi_c picture"xxxxxxxx";

function"!"

@18,10say"Telefonul:" get m.tel_c picture"xxxxxxxxxx"

@19,10say"Adresa veche:"get m.adresa_c ;

picture"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

function"!"

@20,5 say"Data cumpararii de catre firma:"get m.data_c function'd'

@21,5 say"Pretul de cumparare:" get m.pret_cump picture"999999"

@22,5 say"Data vanzarii de catre firma:"get m.data_v function'd'

@23,5say"Pretul de vanzare:" get m.pret_vand picture"999999"

@24,30 get ok1 function'*h OK'

read cycle

gather memvar

deactivate popup all

clear

return

else

deactivate popup all

clear

return

endif

case oko=2

deactivate popup all

clear

return

endcase

endif

if varx='STERGERI'

ok1=0

clear

@2,5 to 22,70

@3,23 say"STERGERI DE IMOBILE-TERENURI"

@5,10 say"SELECTATI ADRESA CARE SE STERGE:"

define popup lista prompt field adresa scroll

@6,10 get x popup lista function'&'size 12,52

@20,10 get ok1 function'*h STERGE;IESIRE'

read cycle

do case

case ok1=1

locate for adresa=x

if found()=.t.

delete

pack

deactivate popup all

clear

return

else

deactivate popup all

clear

return

endif

case ok1=2

deactivate popup all

clear

return

endcase

endif

case ok=2

clear

deactivate popup all

clear

return

endcase

*–––––––

PROCEDURE PR12

clear

hide popup all

sele 1

varx='MODIFICARI'

ok=0

go top

x=adresa

define window wind from 2,2 to 22,77;

title'MODIFICARI/STERGERI DE IMOBILE-TERENURI' double

activate window wind

@4,28 say"ALEGETI TIPUL ACTIUNII:"

@6,28 get varx picture'@*rnv MODIFICARI;STERGERI'

@10,28 get ok function'*h OK;IESIRE'

read cycle

do case

case ok=1

clear

if varx='MODIFICARI'

ok1=0

okk=0

@2,10 say"SELECTATI ADRESA CARE SE MODIFICA:"

define popup lista prompt field adresa scroll

@3,10 get x popup lista function'&'size 12,52

@17,20 get okk function'*h MODIFICA;IESIRE'

read cycle

do case

case okk=1

clear

locate for adresa=x

scatter memvar

@2,10 say"Numele fostului proprietar:" get m.nume_v;

picture"xxxxxxxxxx" function"!"

@3,10 say"Prenumele fostului proprietar:" get m.pren_v;

picture"xxxxxxxxxx" function"!"

@4,10 say"Buletinul:" get m.bi_v picture"xxxxxxxx" function"!"

@5,10 say"Telefonul:"get m.tel_v picture"xxxxxxxxxx"

@6,10 say"Data cumpararii de catre firma:"get m.data_c function'd'

@7,10 say"Pretul:" get m.pret_cump picture"999999"

if m.casa=.t.

va='CASA'

endif

if m.apartament=.t.

va='APARTAMENT'

endif

if m.intravilan=.t.

va='TEREN INTRAVILAN'

endif

if m.agricol=.t.

va='TEREN AGRICOL'

endif

@8,10 say"Tipul achizitiei:" get va;

function'*rnv CASA;APARTAMENT;TEREN INTRAVILAN;TEREN AGRICOL'

@12,10 say"Numar camere:" get m.nr_camere function"99";

when (va='CASA')or(va='APARTAMENT')

@13,10 say"Suprafata:"get m.suprafata function"xxxxxx";

when (va='TEREN INTRAVILAN')or(va='TEREN AGRICOL')

@15,10 say"ADRESA:" get m.adresa;

picture"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

function"!"

@17,31 get ok1 function'*h OK'

read cycle

gather memvar

deactivate popup all

deactivate window wind

release window wind

return

case okk=2

deactivate popup all

deactivate window wind

release window wind

return

endcase

endif

if varx='STERGERI'

ok1=0

clear

@2,10 say"SELECTATI ADRESA CARE SE STERGE:"

define popup lista prompt field adresa scroll

@3,10 get x popup lista function'&'size 12,52

@17,10 get ok1 function'*h STERGE;IESIRE'

read cycle

do case

case ok1=1

locate for adresa=x

delete

pack

deactivate popup all

deactivate window wind

release window wind

return

case ok1=2

deactivate popup all

deactivate window wind

release window wind

return

endcase

endif

case ok=2

clear

deactivate popup all

deactivate window wind

release window wind

return

endcase

*–––––––

PROCEDURE FINAL1

exit=.t.

clear

deactivate menu imobil

return

*–––––––

PROCEDURE FINAL2

close all

quit

return

*–––-SFARSIT PROGRAM–––-

BIBLIOGRAFIE

“ FoxPro 2.5, 2.6 pentru DOS ”

autori: Gabriel Dima, Mihai Dima

“ Bazele Visual FoxPro 5.0 “

autori: Gabriel Dima, Mihai Dima

“ Manual de informatică – Baze de date “

autori: Mariana Panțiru, Ionuț Panțiru

“ Informatică economică “

autori: Cătălin Frâncu

“ Microsoft FoxPro “

autori: Leon Țâmbulea

Similar Posts

  • Lumea Fabricatiei 3d

    LUCRARE DE LICENȚĂ “Lumea Fabricației 3D” Cuprins Introducere Capitolul 1. Fabricația 3D Concepte,evoluții,principii Tehnologii de fabricație 3D Aplicații și dispositive necesare fabricației 3D Domenii de aplicabilitate 3D Avatajele si riscurile fabricației 3D Tradițional VS 3D Capitolul 2. Piața forței de muncă și producția 3D 2.1 Influența producției 3D asupra forței de muncă 2.2 Producția 3D…

  • Proiectarea Si Realizarea Unui Sistem Informatic Pentru Activitatea DE Aprovizionare

    CUPRINS: INTRODUCERE…………………………………………………………………………………………………………….4 CAPITOLUL 1 STUDIUL ȘI ANALIZA SISTEMULUI EXISTENT 1.1. Rolul și poziția societății în cadrul economico-social național, internațional și în ramura de activitate………………………………………………………………5 1.1.1. Scurt istoric asupra înființării societății : ………………………………………………………….5 1.1.2. Locul în sfera economică :….…………………………………………………………………………. 6 1.1.3. Analiza activității societății comerciale : …………………………………………………………..6 1.2. Investigarea mediului actual ( studiul caracteristicilor generale, studiul…

  • Mvc Versus Webforms

    Cuprins Introducere Capitolul 1. Framework-ul ASP.NET MVC 1.1 Model-View-Controller 1.2 Routing 1.3 Action Filters si Data Annotations Razor View Engine Security. Authentication.Authorization. Membership. Deployment Capitolul 2. MVC vs WebForms 2.1 Prezentare scurta ASP.NET WebForms 2.2 ASP.NET MVC vs ASP.NET Web Forms Capitolul 3. Librarii externe folosite in dezvoltarea aplicatiei 3.1 Entity Framework 3.2 Twitter bootstrap…

  • Platforme Educationale de Tip E Learning Folosite In Invatamantul Preuniversitar

    INTRODUCERE…………………………………………………………………………………… pag.4 CAPITOLUL I E-LEARNING: CONCEPTE, TENDINTE, PERSPECTIVE………………………pag.6 DEFINIȚIE…………………………………………………………………………………..pag.6 SCURT ISTORIC E-LEARNING…………………………………………………….pag.9 PARADIGME EDUCATIONALE IN E-LEARNING………………………….pag.11 AVANTAJELE SISTEMULUI E-LEARNING……………………………………pag.15 DEZAVANTAJELE SISTEMULUI E-LEARNING……………………………..pag.16 CAPITOLUL II PLATFORME EDUCATIONALE DE TIP E-LEARNING…………………………pag.18 2.1 PRINCIPALELE PLATFORME E-LEARNING IN LUME……………………pag.19 2.2 PRINCIPALELE PLATFORME E-LEARNING IN ROMANIA……………..pag.24 PLATFORMA AEL………………………………………………………………………….pag.26 2.3.1 Ce este AeL? ……………………………………….………………..…..pag.26 2.2.2 Elemente componente………………………………….…………………pag.28 2.3.3 ASM – AeL…

  • Utilizarea Aplicatiilor Intranet In Activitatea Unei Firme

    1. ASPECTE GENERALE Conceptul de intranet a apărut și s-a dezvoltat odată cu apariția și mai ales, dezvoltarea Internet-ului. Internetul este o rețea internațională de rețele de calculatoare care cunoaște o amploarea deosebită datorită unor standarde care fac ca informația să poată circula între calculatoarele conectate în rețea din toată lumea într-un timp foarte scurt….

  • Aplicarea Modelelor Functional Stochastice Folosite la Compensarea Retelelor Geodezice Planimetrice

    APLICAREA MODELELELOR FUNCȚIONAL-STOCHASTICE FOLOSITE LA COMPENSAREA REȚELELOR GEODEZICE PLANIMETRICE -STUDIU COMPARATIV- Prefață Lucrarea de față se dorește a fi un studiu asupra mai multor modele de compensare utilizate la prelucrarea rețelelor geodezice planimetrice. La finalul acestui studiu, dorim să putem emite anumite aprecieri asupra oportunității utilizării unui model sau altul în calculele de compensare a…