Baze de date
Lucrare - informatica, baze de dateINTRODUCERE 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:
CAPITOLUL I NOTIUNI GENERALE Crearea si functionarea obiectelor de control S-a constatat ca este mult mai usor si mai placut pentru operator sa aleaga una din valorile prezentate pe un ecran, pentru a completa variabila get, decat sa se introduca acea valoare caracter cu caracter, in plus, posibilitatile de eroare sunt mult mai mici. Fox prezinta proiectantilor de aplicatii diferite obiecte de control cum ar fi: comutatoare, liste de valori, liste ascunse, declansatoare, butoane radio. Obiectele de control se descriu prin comanda GET unde clauzele de format FUNCTION si PICTURE vor contine codul de control corespunzator. COMUTATOARE Comutatoarele permit selectarea intre doua valori posibile (adevarat sau fals). Apar pe ecran sub forma a doua paranteze patrate cu text explicativ. Comutatoarele se descriu prin codul de control C al clauzei FUNCTION sau prin C in clauza PICTURE. Textul explicativ al comutatorului poate fi trecut chiar in clauza unde apare codul de control, separat de un spatiu. @<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 facute de utilizator se face in variabila var care trebuie sa fie de tip numeric sau logic. Pentru var de tip numeric, valoarea zero semnifica comutator neselectat. Pentru var de tip logic, valoarea .F. semnifica comutator neselectat. LISTA Se afiseaza o lista pe ecran din care utilizatorul poate selecta o valoare prin apasarea tastei ENTER. Lista se afiseaza vertical, total sau partial si daca nu incape pe ecran, apare o bara de defilare. Lista este preluata dintr-un vector, din prima coloana a unei matrici sau dintr-un submeniu (meniu de tip popup). Listele se descriu prin clauzele FUNCTION sau PICTURE in 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’@&’ Daca este prezenta clauza RANGE, lista este afisata doar cu o parte din elementele vectorului: cele cuprinse intre limitele indicate in clauza. LISTA ASCUNSA Acest element, foarte folosit in FoxPro, este asemanator listei simple, dar, daca la lista simpla apare pe ecran lista intreaga, in cazul acesta apare un dreptunghi in care este trecut elementul curent din lista, restul fiind ascuns. Selectarea se face tot cu tasta ENTER pe dreptunghiul listei. In acest moment apare lista si se poate alege un element al listei cu enter. Functia care realizeaza 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 in continuarea codului prin separarea de acesta cu un spatiu. DECLANSATOARE Declansatorul este un obiect de control prin care se determina pornirea imediata a unei actiuni. Apare pe ecran cu textul explicativ intre 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 comanda pot fi definite mai multe declansatoare, primul fiind pozitionat la punctul de coordonate r, c iar celelalte in continuare. Memorarea optiunii utilizatorului se face in variabila-get care poate fi numerica(intoarce numarul de ordine al declansatorului selectat) sau de tip caracter (intoarce numele declansatorului asa cum a fost el definit ca nume). BUTOANE RADIO Un alt obiect util si care face dialogul cu operatorul foarte prezentabil, este butonul radio. Este important de retinut ca selectarea unei optiuni determina deselectarea automata a tuturor celorlalte optiuni; deci, la un moment dat poate fi selectat un singur obiect. Butoanele apar pe ecran prin paranteze rotunde alaturate textului optiunii. Pentru optiunea selectata apare un punct intre paranteze rotunde. Functia care realizeaza acest obiect este R in FUNCTION sau R in PICTURE. Textele explicative pot fi puse in continuarea codului de functie, separate de un spatiu fata de cod si separate intre ele prin punct si virgula. @<r,c>GET<var-get>FUNCTION’*R<text1>[;<text2>] . ’/ PICTURE’@*R<text1>; . ’ REGIUNI DE EDITARE TEXT Sintaxa este urmatoarea: @<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 si functionarea meniurilor COMENZI PENTRU LUCRUL CU MENIURI Asigurarea unei interfete prietenoase cu utilizatorii unei aplicatii dezvoltate sub mediul oricarui sistem de gestiune a bazelor de date, este o preocupare constanta a programatorilor. Utilizarea de ferestre sau meniuri usureaza prezentarea diferitelor actiuni ale programului si confera un aspect atractiv aplicatiei. Prin meniu intelegem un element de interfata prin care se ofera utilizatorului posibilitatea selectarii unei anumite optiuni, dintr-o multime finita, afisata pe ecran, total sau partial, urmand ca, in functie de selectarea facuta, sa se declanseze anumite actiuni. Meniurile sunt de doua tipuri: meniuri “menu”(bara) – folsosite de obicei ca meniuri principale ale aplicatiei, cu lista de optiuni fara incadrare in chenar – si meniuri “popup”(verticale) – cu lista de optiuni incadrata standard intr-o banda invers-video, folosite de obicei ca submeniuri. Meniuri tip bara: Definirea barei-meniu cu atzribuirea unui nume se face prin comanda: DEFINE MENU <meniu>[MESSAGE<mesaj>] Comanda permite si afisarea unui mesaj pe ultima linie a ecranului. Definirea optiunilor dintr-un meniu se face prin comanda: DEFINE PAD<optiune>OF<meniu>PROMPT<sir>[AT<r,c>] [MESSAGE<mesaj>] Precizarea actiunii de executat la selectarea unei optiuni: 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 prezinta mai multe optiuni sub forma de lista verticala incadrata printr-o banda 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 defineste numele, pozitia unui meniu popup precum si tipul optiunilor acestui meniu. Optiunile dintr-un meniu popup pot fi: O lista de cerinte definite de utilizator O lista de campuri din structura bazei active de date(Prompt structure) O lista de valori ale unui camp din baza activa de date, valori ale articolelor filtrate sau nu (Prompt Field) O lista de fisiere care verifica o masca(Prompt Files Like) Daca meniul va contine o lista de optiuni utilizator, acestea vor fi definite in continuare prin comenzile DEFINE BAR. Definirea optiunilor utilizator intr-un meniu popup sunt: DEFINE BAR<nr-linie>OF<submeniu>PROMPT<sir1>[MESSAGE<mesaj>] [SKIP[FOR<cond>]] Comanda stabileste optiunea de pe linia cu numar nr-linie, definind textul optiunii. Daca se foloseste SKIP, atunci se afiseaza sir1, dar nu se permite selectia optiunii. Daca se foloseste SKIP FOR atunci se afiseaza sir1, dar se va permite selectia numai daca este indeplinita conditia cond. Stabilirea actiunii de executat la selectia 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 Generalitati Programul IMOBIL, program care este descris in cele ce urmeaza, din punct de vedere structural, contine programul principal si urmatoarele 14 proceduri: Pr1 Pr2 Pr3 Pr4 Pr5 Pr6 Pr7 Pr8 Pr9 Pr10 Pr11 Pr12 Final1 Final2 Aplicatia gestioneaza datele stocate in doua baze de date, si anume: Cumparat.dbf Vandut.dbf 2.2 Bazele de date Programul Imobil ofera posibilitatea consultarii si prelucrarii datelor privitoare la casele, apartamentele, terenurile intravilane si terenurile agricole cumparate si vandute de catre firma imobiliara. Prelucrarea acestor date ofera informatiile necesare personalului care lucreaza in cadrul companiei la care este implementata aceasta aplicatie. Datele respective sunt stocate in doua tabele, CUMPARAT.DBF si VANDUT.DBF Structura bazei de date: CUMPARAT.DBF
Structura bazei de date: VANDUT.DBF
2.3 Programul Programul prezentat in aceasta lucrare contine in jur de 1.100 de linii de program. Executia unui program din interiorul altui program, folosind comanda DO, reprezinta un pas important in structurarea aplicatiilor de dimensiuni mai mari. Pe masura ce creste dimensiunea unei aplicatii, testarea si depanarea acesteia devine din ce in ce mai dificila, datorita numarului mare de variabile folosite, datorita numarului mare de instructiuni si a legaturilor dintre acestea. O rezolvare la aceasta problema poate fi gruparea unor instructiuni in module separate, aceste module fiind independente intre ele. Comunicarea lor cu celelalte module se face prin intermediul unor parametrii, variabile de comunicare, care realizeaza interfata modulului cu exteriorul. Module de acest tip pot fi create chiar in interiorul fisierului ce contine programul, formand asa numitele “proceduri si functii definite de utilizator” Astfel, aplicatia prezentata contine programul principal si un numar de 14 proceduri, toate create in interiorul unui fisier sursa numit imobil.prg Programul principal creaza prin instructiuni specifice meniul IMOBIL, iar prin selectarea optiunilor din submeniurile acestuia se apeleaza procedurile specificate. q PROGRAMUL PRINCIPAL In programul principal are loc initializarea variabilei “exit” cu valoarea “false”, apoi se deschid bazele de date “cumparat.dbf” in zona 1 de lucru si “vandut.dbf” in zona 2 de lucru. Tot in programul principal se defineste meniul IMOBIL cu optiunile bara: Vanzari Cumparari Rapoarte Iesire In continuare se vor defini urmatoarele submeniuri, cu optiunile 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 intr-o bucla “do while” care va executa o secventa de activare a meniului si a elementelor acestuia (pad-uri, popup-uri) atata timp cat expresia “not exit” este “true”. q PROCEDURA PR1 Procedura Pr1 este apelata de catre programul principal si corespunde optiunilor de meniu Vanzari Case. Se va selecta prin program zona de lucru 1, zona in care este deschisa baza de date cumparat.dbf, apoi se vor initializa o serie de variabile. In continuare se va crea un masiv prin instructiunea DIMENSION, masiv ce va avea ca elemente siruri de caractere formate prin concatenarea unor subsiruri obtinute din campuri ale bazei de date, campuri ce corespund inregistrarilor referitoare doar la case (nu si cele ce se refera la apartamente, terenuri intravilane sau terenuri agricole). Selectia inregistrarilor se face prin instructiunea SCAN FOR casa=.T. Elementele masivului mat1 se formeaza astfel: Mat1(x) = (str(nr_camere) + ’ ‘ + adresa + ’ ‘ + str(pret_cump + (pret_cump*5) / 100 + ’ ‘) Pret_cump + (pret_cump*5)/100 reprezinta pretul de vanzare al imobilului, calculat din pretul cu care acesta a fost cumparat de catre firma la care este adaugat un procent de 5 la suta, care reprezinta beneficiul firmei. Pe ecran va fi afisata o lista din care utilizatorul, un angajat al firmei, va alege imobilul solicitat de catre client. Apoi, prin intermediul unor obiecte de control, va introduce in baza de date vandut.dbf date referitoare la client: nume, prenume, buletin de identitate, adresa, numarul de telefon. q PROCEDURA PR2 Aceasta procedura ofera posibilitatea procesarii datelor necesare vanzarii unui apartament catre un anumit client. Procedura Pr2 este apelata atunci cand utilizatorul selecteaza din meniul principal optiunile Vanzari Apartamente. Aceasta procedura determina aparitia acelorasi evenimente ca si procedura pr1, cu diferenta ca elementele masivului mat1 se vor forma din campuri corespunzatoare doar inregistrarilor ce se refera la apartamente, adica inregistrari pentru care conditia apartament=.T. este adevarata. Aceasta conditie se testeaza tot prin intermediul unei instructiuni SCAN. q PROCEDURA PR3 Este apelata atunci cand operatorul alege Cumparari Case. Procedura Pr3 creaza mai multe obiecte de control prin intermediul carora, in final, se vor introduce in baza de date cumparat.dbf informatii referitoare la imobilele cumparate de catre firma, imobile cumparate cu scopul de a fi revandute apoi cu un pret mai mare. Prin intermediul obiectelor de control disponibile aici se vor introduce de la tastatura: Date referitoare la imobil: T Adresa imobilului T Numar de camere T Pretul la care a fost cumparat Date referitoare la proprietar: T Nume T Prenume T Buletin de identitate T Numar de telefon In partea de jos a ecranului vor fi apoi afisate doua declansatoare: v Cumpara v Iesire Odata cu selectarea primului dintre acestea, la baza de date cumparat.dbf va fi adaugata o noua inregistrare, in care vor fi depuse informatiile introduse de catre utilizator. Selectarea celui de-al doilea declansator are ca urmare curatarea ecranului si activarea meniului principal. q PROCEDURA PR4 Alegerea optiunilor Cumparari Apartamente duca la apelul procedurii pr4, unde, prin intermediul obiectelor de control create si afisate pe ecran, utilizatorul va introduce in tabela cumparat.dbf datele referitoare la apartamentele cumparate de catre firma. Vor fi introduse in campurile de editare corespunzatoare adresa apartamentului, numarul de camere pe care acesta le contine, pretul la care a fost achizitionat, numele, prenumele, seria si numarul buletinului de identitate al fostului proprietar, cat si numarul acestuia de telefon. Apoi aceasta procedura creaza si afiseaza declansatoarele “Cumpara” si “Iesire”, declansatoare care au functii identice cu cele create in procedura pr3. q PROCEDURA PR5 Corespunde optiunilor de meniu Rapoarte Cumparari. Procedura selecteaza zona 1 de lucru, zona in care este deschisa baza de date cumparat.dbf . In aceasta procedura se listeaza imobilele / terenurile care au fost cumparate de firma intr-o perioada data de timp. Utilizatorul isi poate defini intervalul de timp pentru care se va face listarea, introducand data minima si data maxima. Apoi poate selecta destinatia afisarii (pe ecran sau la imprimanta), folosind butoane radio. In final se poate alege tipul de imobil(casa sau apartament) sau teren(intravilan sau agricol) tot prin intermediul unor butoane radio. Dupa ce s-a realizat selectia, se sorteaza baza de date cumparat.dbf dupa campurile data_c, nume_v si pren_v, obtinandu-se astfel fisierul sortat cump.dbf, care se deschide in zona 3 de lucru, apoi se lanseaza in executie raportul rep1.frx, prin comanda REPORT FORM rep1.frx. Acest raport contine toate informatiile necesare despre imobilele / terenurile care au fost cumparate de firma in perioda: data minima – data maxima, precum si suma platita de firma pentru achizitionarea lor. La inchiderea raportului fisierul cump.dbf este sters din memorie. q q PROCEDURA PR6 Corespunde optiunilor de meniu Rapoarte Vanzari. Procedura selecteaza zona 2 de lucru, zona in care este deschisa baza de date vandut.dbf . In aceasta procedura se listeaza imobilele / terenurile care au fost vandute de firma intr-o perioada data de timp. Utilizatorul isi poate defini intervalul de timp pentru care se va face listarea, introducand data minima si data maxima. Apoi poate selecta destinatia afisarii (pe ecran sau la imprimanta), folosind butoane radio. In final se poate alege tipul de imobil(casa sau apartament) sau teren(intravilan sau agricol) tot prin intermediul unor butoane radio. Dupa ce s-a realizat selectia, se sorteaza baza de date vandut.dbf dupa campurile data_v, nume_c si pren_c, obtinandu-se astfel fisierul sortat vand.dbf, care se deschide in zona 3 de lucru, apoi se lanseaza in executie raportul rep2.frx, prin comanda REPORT FORM rep2.frx. Acest raport contine toate informatiile necesare despre imobilele / terenurile care au fost vandute de firma in perioda: data minima – data maxima, precum si beneficiul obtinut de firma in urma vanzarilor (diferenta dintre pretul de vanzare si pretul de achizitie). La inchiderea raportului fisierul vand.dbf este sters din memorie. q PROCEDURA PR7 Procedura Pr7 este apelata de catre programul principal si corespunde optiunilor de meniu Vanzari Terenuri Intravilane. Se va selecta prin program zona de lucru 1, zona in care este deschisa baza de date cumparat.dbf, apoi se vor initializa o serie de variabile. In continuare se va crea un masiv prin instructiunea DIMENSION. Acest masiv va avea ca elemente siruri de caractere formate prin concatenarea unor subsiruri obtinute din campuri ale bazei de date, campuri ce corespund inregistrarilor referitoare doar la terenuri intravilane. Selectia inregistrarilor se face prin instructiunea SCAN FOR intravilan=.T. Elementele masivului mat1 se formeaza astfel: Mat1 ( x ) = ( suprafata + ‘ ‘ + adresa + ‘ ‘ + str ( pret_cump + ( pret_cump*5 ) /100 + ‘ ‘) Pret_cump + (pret_cump*5)/100 reprezinta pretul de vanzare al terenului intravilan ales, calculat din pretul cu care acesta a fost cumparat de catre firma la care este adaugat un procent de 5 la suta, care reprezinta beneficiul firmei. Pe ecran va fi afisata o lista din care utilizatorul, un angajat al firmei, va alege terenul intravilan solicitat de catre client. In continuare, prin intermediul unor obiecte de control, se vor introduce in baza de date vandut.dbf date referitoare la client: nume, prenume, buletin de identitate, adresa, numarul de telefon. q PROCEDURA PR8 Aceasta procedura este identica cu procedura Pr7, diferenta constand in faptul ca este apelata atunci cand utilizatorul alege urmatoarea optiune de meniu: Vanzari Terenuri Agricole, iar elementele listei din care clientii vor avea posibilitatea de a alege un anumit teren agricol pentru a-l cumpara, vor fi create din inregistrarile tabelei cumparat.dbf pentru care agricol=.T. . q PROCEDURA PR9 Corespunde optiunii de meniu Cumparari Terenuri Intravilane. Procedura Pr9 creaza mai multe obiecte de control prin intermediul carora, in final, se vor introduce in baza de date cumparat.bdf informatii referitoare la terenurile intravilane cumparate de catre firma, terenuri cumparate pentru a fi revandute apoi cu un pret mai mare. Prin intermediul a mai multor obiecte de control disponibile utilizatorul va introduce de la tastatura urmatoarele informatii: Date referitoare la teren: T Adresa la care se afla terenul T Suprafata terenului T Pretul la care a fost cumparat Date referitoare la proprietar: T Nume T Prenume T Buletin de identitate T Numar de telefon In partea de jos a ecranului vor fi apoi afisate doua declansatoare: v Cumpara v Iesire Odata cu selectarea primului dintre acestea, la baza de date cumparat.dbf va fi adaugata o noua inregistrare, utilizandu-se in acest scop comanda APPEND BLANK, inregistrare in care vor fi depuse informatiile introduse de catre utilizator. Selectarea celui de-al doilea declansator are ca efect curatarea ecranului si activarea meniului principal, de unde operatorul va putea alege o alta optiune sau va putea iesi din program. q PROCEDURA PR10 Alegerea optiunilor Cumparari Terenuri Agricole duce la apelul procedurii Pr10, unde, prin intermediul obiectelor de control create si afisate pe ecran, utilizatorul va introduce in tabela cumparat.dbf informatiile referitoare la terenurile agricole cumparate de catre firma. Vor fi introduse in campurile de editare corespunzatoare locatia terenului, suprafata acestuia exprimata in metri patrati, pretul la care a fost achizitionat, numele, prenumele, seria si numarul buletinului de identitate al fostului proprietar, cat si numarul acestuia de telefon. Apoi aceasta procedura creaza si afiseaza declansatoarele Cumpara si Iesire , declansatoare care au functii identice cu cele create in procedura Pr9. q PROCEDURA PR11 In aceasta procedura, utilizatorul are posibilitatea de a modifica sau a sterge anumite inregistrari din tabela vandut.dbf , adica sa opereze asupra imobilelor sau terenurilor vandute de firma. La inceput se poate selecta prin intermediul unor butoane radio tipul actiunii: modificari sau stergeri. Daca s-a ales optiunea de modificari, pe ecran apare un obiect de control de tip lista, unde sunt afisate adresele imobilelor / terenurilor vandute de firma. Dupa selectarea unei adrese, pe ecran vor aparea toate informatiile despre imobilul / terenul vandut de firma, iar utilizatorul are posibilitatea, prin deplasarea de pe un camp pe altul, sa modifice unde este cazul. La sfarsit, inregistrarea din baza de date vandut.dbf va fi modificata, dupa selectarea declansatorului OK. Daca s-a ales optiunea de stergeri, pe ecran apare din nou un obiect de control de tip lista, unde sunt afisate adresele imobilelor / terenurilor vandute de firma. Dupa selectarea unei adrese, utilizatorul are optiunea de a decide stergerea inregistrarii, prin actionarea declansatorului STERGE, sau renuntarea la stergere, prin actionarea declansatorului IESIRE. q PROCEDURA PR12 In aceasta procedura, utilizatorul are posibilitatea de a modifica sau a sterge anumite inregistrari din tabela cumparat.dbf , adica sa opereze asupra imobilelor sau terenurilor cumparate de firma. La inceput se poate selecta prin intermediul unor butoane radio tipul actiunii: modificari sau stergeri. Daca s-a ales optiunea de modificari, pe ecran apare un obiect de control de tip lista, unde sunt afisate adresele imobilelor / terenurilor cumparate de firma. Dupa selectarea unei adrese, pe ecran vor aparea toate informatiile despre imobilul / terenul cumparat de firma, iar utilizatorul are posibilitatea, prin deplasarea de pe un camp pe altul, sa modifice unde este cazul. La sfarsit, inregistrarea din baza de date cumparat.dbf va fi modificata, dupa selectarea declansatorului OK. Daca s-a ales optiunea de stergeri, pe ecran apare din nou un obiect de control de tip lista, unde sunt afisate adresele imobilelor / terenurilor cumparate de firma. Dupa selectarea unei adrese, utilizatorul are optiunea de a decide stergerea inregistrarii, prin actionarea declansatorului STERGE, sau renuntarea la stergere, prin actionarea declansatorului IESIRE. q PROCEDURA FINAL1 Aceasta procedura asigura iesirea din program in mediul de programare FoxPro. q PROCEDURA FINAL2 Aceasta procedura asigura iesirea din program in sistemul de operare. 2.4 Codul sursa *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 ' 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'AAAAAAAAAAAAAAAAA' 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 'ÚAs³ÙAÀ³' @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'AAAAAAAAAAAAAAAAAAAAAA' 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 'ÚAs³ÙAÀ³' @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'AAAAAAAAAAAAAAAAAAA' color g+/b @5,27 say'Date referitoare la imobil' color gr+/b @ 6, 20, 10, 59 box 'ÚAs³ÙAÀ³' @ 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 'ÚAs³ÙAÀ³' @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'AAAAAAAAAAAAAAAAAAAAAAAAAA' color g+/b @5,27 say'Date referitoare la imobil' color gr+/b @ 6, 20, 10, 59 box 'ÚAs³ÙAÀ³' @ 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 'ÚAs³ÙAÀ³' @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'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' 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 'ÚAs³ÙAÀ³' @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'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' 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 'ÚAs³ÙAÀ³' @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'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' color g+/b @5,27 say'Date referitoare la teren' color gr+/b @ 6, 20, 10, 59 box 'ÚAs³ÙAÀ³' @ 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 'ÚAs³ÙAÀ³' @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'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' color g+/b @5,27 say'Date referitoare la teren' color gr+/b @ 6, 20, 10, 59 box 'ÚAs³ÙAÀ³' @ 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 'ÚAs³ÙAÀ³' @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 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 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 informatica – Baze de date “ autori: Mariana Pantiru, Ionut Pantiru “ Informatica economica “ autori: Catalin Francu “ Microsoft FoxPro “ autori: Leon Tambulea
|