Sunteți pe pagina 1din 20

Evidenta Depozit Vopsele Elev: Profesor indrumator

CUPRINS

1)Enunul problemei 2)Scurt istoric

3)Programul propriu-zis

1.1. Prezentarea temei Enunul problemei

Programul a fost scris in limbajul de programare Fox pro sub Windows . FoxPro este un sistem de gestiune a bazelor de date scris de firma de software bine cunoscuta Microsoft.Visual FoxPro 6 ofera un mod de lucru primitor si prin generatoarele de program pe care le include usureaza mult munca programatorilor specializati in baze de date. Astfel nu se mai pierde timpul stand si calculand coordonatele fiecarei linii din interfata program-utilizator, ci aceasta este pur si simplu desenata de programator, fiecare obiect din interfata fiind o variabila pe care programatorul o foloseste pentru a analiza comanda utilizatorului. Interfata programului este creata dintr-un meniu orizontal cu 6 optiuni, iar fiecare are un meniu vertical. Programul pentru evidena unui depozit de vopsele, a fost realizat pentru a permite gestionarea facil a produselor aflate n depozit . Aplicatia are un meniu orizontal :clienti, produs,angajati ,help,iesire. Aplicatia foloseste urmatoarele tabele:angajati.dbf, tva.dbf,marfa.dbf ,clienti si coduri.dbf. Intrarea in aplicatia se face dechizand limbajul Visual fox , din meniul program alegem....optiunea do ...caut in folderul cu atestat meniu11.mpr . Alegerea unei optiuni se face cu mausul . Clienti este un meniu vertical cu optiunile: Clienti noi-se introduc clienti noi adica firmele care cumpara vopsele Sortare dupa- sunt sortati clintii dupa 1) nume firma si 2)data intrarii Cautare- sunt cautati clintii dupa 1) nume firma si 2)data intrarii Inainte de a intra produse trebuie introdus codul respectiv. Ex:introduc codul 6 pentru vopsea acrilica, apoi pot face intrari pentru produsul cu codul 6. In caz ca produsul nu este introdus in baza de date codprodus apare un mesaj in dreapta sus prin care ne anunta ca nu avem un produs cu codul specificat. Angajati cu optiunile: Angajati noi- se introduc angajatii. Inainte de a intra numele trebuie introdus codul respectiv. Ex:introduc codul 6 pentru un angajat, apoi pot face vanzari pentru angajatul cu codul 6. Sortare dupa nume, prenume, buletin, numar de clienti. Cautare dupa nume, prenume, buletin, numar de clienti. Help: Help-o scurta descriere a lucrarii PRODUS Cod produs- se introduce cod PRODUS si denumirea lui. Intrari produs se introduce produsul Afisare stoc- se afiseaza stocul la fiecare produs Afisare contabilitate- sunt afisati vanzatorii cu nr de clienti si valoarea totala a vanzarilor Cautare-dupa data calendaristica . Iesire inchiderea aplicatiei. 1.2. Prezentarea temei Scurt istoric O baz de date este o colecie de date de dimensiuni mari, aflate n interdependen, memorate pe un suport (de regul magnetic) mpreun cu descrierea lor i a legturilor dintre ele. Evoluia

nivelului de dezvoltare tehnologic n industria de software a dus la organizarea bazelor de date dup mai multe modele, unul foarte rspndit fiind modelul relaional. Modelul relaional a fost pus la punct n anii 70, fiind consacrat n practic n anii 80 i 90. Acest model organizeaz datele n relaii sau tabele. O relaie descrie de regul o clas de entiti din lumea real. Clasa de entiti este caracterizat prin nite atribute sau proprieti, ce formeaz coloanele tabelei (n limbaj curent se numesc cmpuri). Pe liniile tabelei se gsesc valori posibile ale atributelor. Atributele (coloanele) compun schema sau structura tabelei (stabil n timp) iar liniile definesc coninutul acestuia (variabil n timp). Un SGBD reprezint o colecie de programe car permit definirea structurii unei baze de date i, ulterior, gestionarea coninutului acesteia. Prin caracteristicile sale, FoxPro (atunci cnd au aprut versiuni i pentru sistemul de operare Windows s-a adugat prefixul Visual) se ncadreaz n categoria SGBD-urilor relaionale. Conform unei concepii rspndite printre cei care lucrez n domeniul bazelor de date pentru calculatoare, FoxPro aparine familiei de programe xBase, numit aa dup programul dBase II. n 1978, C. Wayne Ratliff a pus la punct un mic SGBD dedicat microcalculatoarelor. Microcalculatoarele din acea perioad aveau preuri destul de mari i performane extrem de modeste fa de ceea ce cunoatem noi astzi. Programul se numea Vulcan i ideea de la care s-a pornit scrierea acestuia era clasamentul unui campionat de fotbal. Ratliff a nceput s mediatizeze acest produs i a avut cereri din partea unei firme mici ce calculatoare, firm care a vzut n acest program un instrument ieftin i comod de inere la zi a datelor financiare, contabile, personale, etc. n 1980, Ratliff a primit din partea lui George Tate i Hall Lashlee, patronii unei firme mici, o ofert de colaborare. Ceva mai trziu, cnd Ratliff devine i el colaborator al firmei respective, produsul su a stat la baza programului dBase II. Curnd a nceput s apar i concurena, sub chipul unor firme ca Borland, Microrim, MicroPro i FoxBorland. Produsele tuturor acestor firme erau asemntoare ca arhitectur cu dBase, de unde i reunirea acestora sub numele de xBase. Versiunea dBase IV din 1988 nu a avut succes datorit frecventelor erori ale produsului. Microsoft lanseaz ntre timp SGBD Acces care nu era poate la fel de performant ca dBase dar avea o interfa prietenoas i de o mare uurin n utilizare, fiind proiectat s fie exploatat direct n logica interfeei grafice utilizator specific Windows. Firma Borland a creat versiuni mbuntite ale programului dBase. Fox Software i-a perfecionat produsul care a devenit FoxPro. Versiunea 2.0 a fost un succes comercial al anilor 1991. n acea perioad, Microsoft a ncercat s impun Acces, dar acesta nu era nc foarte avansat. n lume exista un un numr mare de calculatoare mai vechi care nu putea rula sistemul de operare Windows (deci nici programul Acces) dar care erau foarte potrivite pentru programul FoxPro. n plus aplicaiile FoxPro se remarcau printr-o vitez de execuie mare, impresionant fa de dBase. Microsoft a achiziionat n cele din urm firma Fox Software (1992). Din momentul achiziiei, producia a continuat cu versiunile 2.5 i 2.6 (pentru DOS, Windows, Macintosh i UNIX), apoi cu versiunile Visual 3, 5 i 6. Versiunile 2.x ale produsului FoxPro au oferit, pe lng motorul bazei de date, faciliti pentru scrierea i execuia propriilor programe, proiectarea asistat a interfeelor (meniuri, formulare sau machete de prelucrare a datelor n mod caracter, tipic mediului DOS), proiectarea de rapoarte, caracteristici specifice mediilor de dezvoltare a aplicaiilor. Versiunile Visual au introdus i ele o serie de faciliti. Aceste caracteristici au fcut ca FoxPro s evolueze de la un SGBD simplu, cu oarecare faciliti de realizare a aplicaiilor, la un adevrat mediu integrat de dezvoltare un mediu de dezvoltare const dintr-un editor de texte pentru scrierea codului-surs ntr-un limbaj dat, un compilator pentru limbajul respectiv i cteva faciliti de natura depanatoarelor, pentru verificarea aplicaiei. O dat cu perfecionrile n domeniul hardware-ului i cu creterea att a numrului de limbaje i variante ale acestora, ct i a numrului de dezvoltatori de aplicaii, aceste instrumente s-au diversificat i mbuntit, integrnd noi faciliti.

Astzi, printr-un mediu integrat de dezvoltare (IDEInteractive Development Environment) nelegem un cadru completat de un set de instrumente pentru realizarea aplicaiilor. Instrumentele sunt mai ales din categoria generatoarelor de aplicaii, n care utilizatorul construiete aplicaia mai mult prin specificaii declarative dect pirn programare procedural. De exemplu, machetele de introducere a datelor sunt proiectate vizual, programatorul plasnd pe un ecran (formular) diferite obiecte (controale) predefinite, fiecare tiind s interpreteze anumite evenimente ca de pild, un click de mouse sau o apsare de tast. Nu e nevoie a se scrie instruciuni detaliate care s asigure desenarea acelor obiecte de pe ecran la momentul execuiei, generarea codului-surs, pornind de la specificaiile create, cade n sarcina instrumentului respectiv. 2. Aspecte generale definiii O baz de date reprezint o colecie de date persistente. Din acest punct de vedere logic, baza de date este un set de tabele, mpreun cu un set de indeci i cu anumite relaii stabilite ntre tabele. Din punct de vedere fizic, baza de date este un fiier cu o anumit structur, memorat pe disc ntr-un anumit director. n cazul limbajului Fox, tabelele care aparin unei baze de date sunt memorate in fiiere separate, avnd extensia .dbf . Oricrei aciuni executate de calculator i corespunde o comand. Aceste comenzi se scriu pe o singur linie, in ceea ce se numete fereastra de comenzi. Pentru acceptarea comenzii se tasteaza <ENTER>. Astfel, pentru a crea o noua tabel se utilizeaz comanda : CREATE <nume>[.dbf]

Se va preciza n comand numele noului fiier, iar la executarea comenzii suntem invitai printr-o fereastr de dialog s precizam structura tabelei respective. Dup creare, suntem ntrebai dac dorim s introducem imediat nregistrri n noua tabel. Acest lucru poate fi facut acum sau mai trziu. Pentru a introduce ulterior alte nregistrri, vom folosi comanda : APPEND Se deschide o fereastr de adugare, n care suntem invitai s tastm noi date. n momentul n care nu mai dorim s introducem date, vom apsa tastele <CTRL> + <END>. pentru a afia sau modifica datele introduse avem la dispoziie comanda BROWSE. Aceasta poate avea mai muli parametri. Formatul general al comenzii i principalii si parametri sunt urmatorii : BROWSE [FIELDS <cmp1><:R><:dim1>... <cmp calculat1>=<exp1] [FOR <condiie>]

[LOCK <nr>] [WIDTH <exp>] [NOAPPEND] [NOEDIT] [NODELETE] Informaiile din cmpuri se vor afia pe vertical. Prin opiunea FIELDS este posibil afiarea doar a unei liste reduse de cmpuri. Mai mult, printre acestea pot apare i cmpuri care nu sunt memorate efectiv n baza de date. Acestea din urm poart denumirea de cmpuri calculate, iar valorile prezentate acolo se pot determina pornind de la informaiile deja existente. Pentru fiecare cmp se poate preciza lungimea de afiare (WIDTH) i dac datele pot fi modificate sau nu (LOCK). De asemenea, se poate preciza lungimea maxim de afiare a tuturor cmpurilor. Prin clauza FOR se vor afia numai acele nregistrari care respect condiia dat. n sfarit, putem anula posibilitatea aciunilor de adugare (NOAPPEND), modificare (NOEDIT), tergere (NODELETE). Exemple concrete de utilizare a comenzii : browse fields nume, prenume for camin==.T. browse fields nume :R :3 , media browse noedit, noappend browse for camin==.T. width 10

Odat deschis fereastra de browse, pentru adugarea de noi nregistrri folosim combinaia <CTRL> + <N>. La salvarea modificrilorefectuate se apas <CTRL> + <END>. Iat cum va arta ecranul n urma unei comenzi simple BROWSE : Dupa ce a fost creat o tabel, aceasta se afl n starea de deschis. Aceasta nseamna c fiierul respectiv este deschis i se pot efectua operaii (adaugare, modificare, afiare etc.) asupra datelor respective. Pentru a deschide o tabela deja existent, folosim commanda : USE <nume>[.dbf] iar pentru a o nchide, comanda : USE Listarea pe ecran a informaiilor cominute n tabel se efectueaz cu comanda : LIST Iat cum apar aceste date pe ecran :

Informaiile globale referitoare la tabela curent pot fi afiate cu ajutorul comenzii comutator : SET STATUS ON / OFF Acestea cuprind printre altele : numele tabelei, numrul total de nregistrri i numele nregistrrii curente. La deschiderea bazei de date nregistrarea curent este prima nregistrare. Putem lucra ntr-un director personal prin utilizarea comenzii : SET DEFAULT TO <cale>, unde <cale> reprezint un drum de tip DOS. Variabile Pe lng memorarea datelor sub form n baze de date (tabele) n cadrul unor fiiere speciale pe harddisc, se impune i posibilitatea memorrii temporare a acestor date n memoria intern. Acest lucru se realizeaz n principal prin folosirea variabilelor. Variabila este un obiect definit prin 4 caracteristici: a) un tip de dat anumit; b) un nume (identificator); c) o valoare (curent); d) o adres de memorie. Putem figura toate acestea n felul urmtor: Identificator Memoria intern Valoare tipul ntreg

:
Adres

1. 2.

putem face abstracie de adresa de memorie a variabilei; acest lucru este gestionat numai de calculator. n limbajul Fox, tipul de dat al unei variabile nu este fixat la nceput; el poate fi modificat printr-o simpl atribuire ulterioar.

Citirea variabilelor

Operaia de citire se execut n mod simplu prin comanda INPUT. Forma general a comenzii este urmtoarea: INPUT <mesaj> TO <nume_variabil> Spre exemplu: input a= to a input numar= to nr Citirea datelor numerice cu comanda input se realizeaz tastnd cifr cu cifr valoarea dorit, iar n final apsndu-se tasta ENTER. n cazul datelor de tip ir de caractere se vor tasta n plus, la nceput i la sfrit, caracterele delimitatorii: (apostrof) sau (ghilimele). La fel, pentru citirea datelor de tip dat calendaristic se vor utiliza perechile de acolade i delimitatorii de forma: / . Atribuirea Asupra variabilelor declarate se pot efectua calcule, spre exemplu calculele aritmetice prin operaiile: + (adunare), - (scdere), * (nmulire), / (mprire). Rezultatul acestor calcule se va depune n cele mai multe cazuri tot ntr-una din aceste variabile. Astfel, prin atribuirea: a=b+c n variabila a se va depune valoarea sumei dintre valorile coninute n variabilele b i c. Similar, atribuirea a=a+1 va avea ca efect creterea cu o unitate a valorii variabilei a. Forma general a comenzii de atribuire este urmtoarea: <variabila>=<expresie> nsi declararea unei variabile se poate face printr-o prim atribuire a unei valori iniiale. Pentru primul caz putem scrie secvena de atribuiri: b=1 c=2 a=b+c O variabil poate fi declarat printr-o comand de citire. Spre exemplu, putem scrie succesiv comenzile: input a= to a a=a+1. Scrierea datelor Putem scrie pe ecran valoarea curent a unei expresii, iar ca un caz particular a unei variabile. Pentru aceasta, se utilizeaz comanda ? cu urmtorul format general: ?<lista_expresii> Expresiile din list se despart prin virgul. Spre exemplu: ?a ?(a+b)*c ?a,b,c ?rezultatul=,c Programe Pn acum comenzile erau executate prin tastarea lor n fereastra de comenzi, urmat de apsarea tastei <ENTER>. n acelai mod se proceda i n cazul n care era necesar o ntreag secven de comenzi. Exist i o modalitate mult mai elegant i mai general: scrierea respectivei secvene de comenzi ntr-un fiier special, urmat de compilarea si executarea fiierului respectiv. Aceste fiiere poart numele de fiiere program sau fiiere comenzi. Comenzile scrise acolo se vor executa secvenial n ordinea n care au fost scrise. Mai mult, prin utilizarea de fiiere program este posibil folosirea unor structuri specifice de control al fluxului de execuie al respectivelor comenzi.

Fiierele program poart extensia .prg . Editarea programului Editarea unui fiier se realizeaz prin comanda: MODIFY COMMAND <nume_fiier> Spre exemplu: modi comm unu.prg Presupunem c dorim ca programul respectiv s citeasc dou numere ntregi, s calculeze i s tipreasc suma lor. Atunci, n fereastra nou deschis se vor tipri pe linii separate urmtoarele comenzi: input a= to a input b= to b c=a+b ?c Ca regul general, pentru a inhiba afiarea pe ecran a unor mesaje din partea sistemului Fox n cadrul execuiei programului, se utilizeaz comanda comutator: SET TALK ON / OFF Astfel, primul nostru program va arta n modul urmtor: set talk off input a= to a input b= to b c=a+b ?c Iar urmtoarea figur arat modul n care apar pe ecran aceste lucruri:

Compilarea

Urmtoarea etap n folosirea unui program o reprezint operaia de compilare. Compilarea se execut cu ajutorul opiunii COMPILE din submeniu. Acum se verific dac comenzile programului au fost scrise sintactic corect i se genereaz un fiier obiect cu acelai nume, dar cu extensia .fxp. Tot acum, prin compilare, se salveaz i coninutul fiierului surs editat. Nu mai este necesar salvarea programului prin intermediul opiunii SAVE din submeniul FILE. Execuia n sfrit, un program compilat poate fi lansat n execuie. Acest lucru se realizeaz prin comanda DO, cu urmtoarea form general: DO <nume_fiier>

Este bine ca nainte de execuie fereastra cu fiierul surs s fie nchis. Lucrarea este alcatuita din meniu.mpr in care este descris meniul .

Listare program
* * * * * * * * * * * * * * * * * * * * * * ********************************************************* * * 02/27/06 MENIU.MPR 15:43:20 * ********************************************************* * * Author's Name * * Copyright (C) 2006 Company Name * Address * City, Zip * * Description: * This PROGRAM was automatically generated BY GENMENU. * ********************************************************* ********************************************************* * * Menu Definition * *********************************************************

SET SYSMENU TO SET SYSMENU AUTOMATIC DEFINE PAD _1qs0xp5iv OF _MSYSMENU PROMPT "CLIENTI" COLOR SCHEME 3 ; KEY ALT+C, "" DEFINE PAD _1qs0xp5jn OF _MSYSMENU PROMPT "ANGAJATI" COLOR SCHEME 3 ; KEY ALT+A, "" DEFINE PAD _1qs0xp5jo OF _MSYSMENU PROMPT "PRODUSE" COLOR SCHEME 3 ; KEY ALT+B, "" DEFINE PAD _1qs0xp5jq OF _MSYSMENU PROMPT "HELP" COLOR SCHEME 3 ; KEY ALT+H, "" DEFINE PAD _1qs0xp5jr OF _MSYSMENU PROMPT "IESIRE" COLOR SCHEME 3 ; KEY ALT+I, "" ON PAD _1qs0xp5iv OF _MSYSMENU ACTIVATE POPUP clienti ON PAD _1qs0xp5jn OF _MSYSMENU ACTIVATE POPUP angajati ON PAD _1qs0xp5jo OF _MSYSMENU ACTIVATE POPUP depozit ON PAD _1qs0xp5jq OF _MSYSMENU ACTIVATE POPUP newitem ON PAD _1qs0xp5jr OF _MSYSMENU ACTIVATE POPUP iesire

DEFINE POPUP clienti MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF clienti PROMPT "CLIENTI NOI" DEFINE BAR 2 OF clienti PROMPT "SORTARE DUPA .." DEFINE BAR 3 OF clienti PROMPT "CAUTARE DUPA .." ON SELECTION BAR 1 OF clienti DO ADAUGC.PRG ON BAR 2 OF clienti ACTIVATE POPUP sortaredup ON BAR 3 OF clienti ACTIVATE POPUP cautaredup DEFINE POPUP sortaredup MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF sortaredup PROMPT "Nume Firma" DEFINE BAR 2 OF sortaredup PROMPT "DATA INTRARII" ON SELECTION BAR 1 OF sortaredup DO SNRM.PRG ON SELECTION BAR 2 OF sortaredup DO SDI DEFINE POPUP cautaredup MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF cautaredup PROMPT "NUMA FIRMA" DEFINE BAR 2 OF cautaredup PROMPT "DATA INTRARII" ON SELECTION BAR 1 OF cautaredup DO CNRM.PRG ON SELECTION BAR 2 OF cautaredup DO CDI.PRG DEFINE POPUP angajati MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF angajati PROMPT "ANGAJATI NOI" DEFINE BAR 2 OF angajati PROMPT "SORTARE DUPA .." DEFINE BAR 3 OF angajati PROMPT "CAUTARE DUPA .." ON SELECTION BAR 1 OF angajati DO ANGAJATI.PRG ON BAR 2 OF angajati ACTIVATE POPUP _1qs0x1ohk ON BAR 3 OF angajati ACTIVATE POPUP _1qs0x48u6 DEFINE POPUP _1qs0x1ohk MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF _1qs0x1ohk PROMPT "COD" DEFINE BAR 2 OF _1qs0x1ohk PROMPT "NUME" DEFINE BAR 3 OF _1qs0x1ohk PROMPT "PRENUME" DEFINE BAR 4 OF _1qs0x1ohk PROMPT "BULETIN" DEFINE BAR 5 OF _1qs0x1ohk PROMPT "NR CLIENTI" ON SELECTION BAR 1 OF _1qs0x1ohk DO SCODA.PRG ON SELECTION BAR 2 OF _1qs0x1ohk DO SNUME ON SELECTION BAR 3 OF _1qs0x1ohk DO SPRENUME ON SELECTION BAR 4 OF _1qs0x1ohk DO SBI.PRG ON SELECTION BAR 5 OF _1qs0x1ohk DO SNRC.PRG DEFINE POPUP _1qs0x48u6 MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF _1qs0x48u6 PROMPT "COD" DEFINE BAR 2 OF _1qs0x48u6 PROMPT "NUME" DEFINE BAR 3 OF _1qs0x48u6 PROMPT "PRENUME" DEFINE BAR 4 OF _1qs0x48u6 PROMPT "BULETIN" ON SELECTION BAR 1 OF _1qs0x48u6 DO CCODA.PRG ON SELECTION BAR 2 OF _1qs0x48u6 DO CNUME.PRG ON SELECTION BAR 3 OF _1qs0x48u6 DO CPRENUME.PRG ON SELECTION BAR 4 OF _1qs0x48u6 DO CBI.PRG DEFINE POPUP benzinarie MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF benzinarie PROMPT "COD PRODUS " DEFINE BAR 2 OF benzinarie PROMPT "INTRARI PRODUS" DEFINE BAR 3 OF benzinarie PROMPT "AFISARE STOC" DEFINE BAR 4 OF benzinarie PROMPT "AFISARE CONTABILITATE" DEFINE BAR 5 OF benzinarie PROMPT "CAUTARE" DEFINE POPUP newitem MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF newitem PROMPT "HELP" ON SELECTION BAR 1 OF newitem DO HELP.PRG DEFINE POPUP iesire MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF iesire PROMPT "TERMINARE" DEFINE BAR 2 OF iesire PROMPT "IESIRE FOX" ON SELECTION BAR 1 OF iesire DO TERMINAR.PRG ON SELECTION BAR 2 OF iesire DO IESIRE.PRG ************************* * DEFINIRE FERESTRE *************************** DEFINE WIND PR_IN from 0,0 TO 70,150 ; IN screen; TITLE 'BAR'; FONT 'ROMAN' , 13 STYLE 'B'; SYSTEM CLOSE ; grow MINIMIZE ZOOM; FILL FILE 'bar.bmp' DEFINE WIND LUCRU FROM 0,5 TO 24,85 IN WIND pr_in ; FONT 'ROMAN' STYLE 'B' close; FILL FILE 'FUNDAL.bmp'; title ' Bar ' define wind e_rr from 5,5 to 15,85 in wind pr_in color b/bg ACTI WIND pr_in MOVE WINDOW pr_in CENTER define window fervand from 4,4 to 20,74 double title 'VANZARI' shadow; FILL FILE 'fundal.bmp' activate window fervand move wind fervand center rasp='D' do while rasp='D' sele 3 use clienti scatter memvar blank SELE 4 use angajati order cod sele 3 @ 1,2 say 'COD ANGAJAT '

@ 1,19 get m.cod_angaj picture '@z 999' READ var=m.cod_angaj SELE 4 seek var if not found() DO sunet wait 'ANGAJAT INEXISTENT !!!' window else replace all nr_clienti with nr_clienti+1 for cod=var sele 3 use clienti scatter memvar blank sele 2 use marfa order cod_prod @ 2,2 say 'COD PRODUS ' @ 2,19 get m.cod_prod picture '@z 9999' read sele 2 seek m.cod_prod if not found() OR stoc=0 DO sunet wait " COD INEXISTENT LA PRODUS SAU STOC ZERO!!! " window else scatter memvar

sele 3 @ 3,2 say 'PRODUS

'

@ 4,2 say 'STOC ' @ 5,2 say 'CANTITATE ' @ 6,2 say 'PRET VANZARE ' @ 7,2 say 'DATA VANZARII ' @ 8,2 say 'VALOARE VANZARE ' @ 9,2 say 'NUME FIRMA ' @ 3,19 SAY m.den_prod COLOR r+*/n

@ 4,19 SAY m.stoc COLOR r+*/n

@ 5,19 GET m.cantitate VALID m.cantitate<>0 AND m.cantitate<=m.stoc ERROR' NUMAR DIFERIT DE ZERO SI MAI MIC SAU EGAL CU STOCUL' PICTURE '@z 9999999999' read m.pret_t=m.pret_vanz*m.cantitate VAR2=M.CANTITATE VAR1=M.PRET_T @ 8,19 SAY m.pret_t COLOR r+*/n @ 9,19 GET m.nr_masina FUNCTION'!' read append blank gather memvar replace COD_ANGAJ with VAR sele 2 replace all stoc with m.stoc-m.cantitate for cod_prod=m.cod_prod SELE 4 REPLACE ALL PRET_T WITH PRET_T+VAR1 FOR COD=VAR REPLACE ALL CANT WITH CANT+VAR2 FOR COD=VAR ENDIF ENDIF @ 11,10 say 'MAI INTRODUCETI DATE ? [D/N]' @ 11,38 get rasp picture '!' read clear enddo deactivate window fervand CLOSE DATA

define window fervand from 4,4 to 20,74 double title 'VANZARI' shadow; FILL FILE 'fundal.bmp' activate window fervand move wind fervand center rasp='D' do while rasp='D' sele 1 use clienti @ 1,2 say 'COD ANGAJAT ' @ 1,19 get cod_angaj picture '@z 9999' read var=cod_angaj

SELE 3 use angajati order cod seek var if not found() DO sunet wait 'ANGAJAT INEXISTENT !!!' window else replace all nr_clienti with nr_clienti+1 for cod=var sele 1 use clienti scatter memvar blank sele 2 use marfa order cod_prod @ 2,2 say 'COD PRODUS ' @ 2,19 get m.cod_prod picture '@z 9999' read sele 2 seek m.cod_prod if not found() OR stoc=0 DO sunet wait " COD INEXISTENT LA PRODUS SAU STOC ZERO!!! " window else scatter memvar

sele 1 @ 3,2 say 'PRODUS

'

@ 4,2 say 'STOC ' @ 5,2 say 'CANTITATE ' @ 6,2 say 'PRET VANZARE ' @ 7,2 say 'DATA VANZARII ' @ 8,2 say 'VALOARE VANZARE ' @ 9,2 say 'NUME FIRMA ' @ 3,19 SAY m.den_prod COLOR r+*/n

@ 4,19 SAY m.stoc COLOR r+*/n @ 5,19 GET m.cantitate VALID m.cantitate<>0 AND m.cantitate<=m.stoc ERROR' NUMAR DIFERIT DE ZERO SI MAI MIC SAU EGAL CU STOCUL' PICTURE '@z 9999999999' @ 6,19 SAY m.pret_vanz @ 7,19 get m.data valid m.data<=date() error "DATA VANZARII NU TREBUIE SA DEPASEASCA DATA CURENTA !" read

m.pret_t=m.pret_vanz*m.cantitate @ 8,19 SAY m.pret_t COLOR r+*/n @ 9,19 GET m.nr_masina FUNCTION'!' read append blank gather memvar sele 2 replace all stoc with m.stoc-m.cantitate for cod_prod=m.cod_prod ENDIF endif @ 11,10 say 'MAI INTRODUCETI DATE ? [D/N]' @ 11,38 get rasp picture '!' read clear close data enddo deactivate window fervand

CLEAR rasp='D' DO WHILE rasp="D" define window rap from 4,4 to 20,74 double title 'INTRODUCERE DATE-ANGAJATI '; FILL FILE 'fundal.bmp' activate window rap move wind rap center USE angajati ORDER cod SCATTER MEMVAR BLANK @5,5 SAY"COD ANGAJAT" @5,30 GET m.cod VALID m.cod<>0 ERROR'COD DIFERIT DE ZERO' PICTURE "@Z 999" READ SEEK m.cod IF FOUND() DO sunet WAIT "DUBLURA" WINDOW ELSE @6,5 SAY"NUME " @6,30 GET m.nume FUNCTION'!' @7,5 SAY"PRENUME " @7,30 GET m.prenume FUNCTION'!' READ @8,5 SAY"BULETIN " @8,30 GET m.buletin FUNCTION'!' READ APPEND BLANK GATHER MEMVAR

ENDIF @ 10,10 SAY 'MAI INTRODUCETI DATE ? [D/N]' @ 10,38 GET rasp picture '!' READ CLEAR DEACTIVATE WINDOW rap ENDDO CLOSE DATA close databases define window cevad from 4,4 to 26,74 double title "STOC PRODUS " FOOTER "[Esc]=Iesire" shadow color scheme 1; FILL FILE 'fundal.bmp' activate window cevad move wind cevad center define window cevad1 from 6,6 to 24,72 none color scheme 1; FILL FILE 'fundal.bmp' activate window cevad1 move wind cevad1 center select 1 USE MARFA go top brow field cod_prod :h='COD',; den_prod :h='PRODUS',; STOC :h='STOC' ; noedit deactivate windows cevad,cevad1 close DATABASES close databases define window cevad from 4,4 to 26,74 double title "TOTAL CLIENTI PE ANGAJAT " FOOTER "[Esc]=Iesire" shadow color scheme 1; FILL FILE 'fundal.bmp' activate window cevad move wind cevad center define window cevad1 from 6,6 to 24,72 none color scheme 1; FILL FILE 'fundal.bmp' activate window cevad1 move wind cevad1 center select 1 USE ANGAJATI go top brow field cod :h='COD',; NUME :h='NUME',; PRET_T :h='TOTAL VANZARI' ,;

CANT :h='CANTITATE VANDUTA' ,; NR_CLIENTI :h='NR CLIENTI' ; noedit deactivate windows cevad,cevad1 close DATABASES

CLEAR rasp='D' DO WHILE rasp="D" define window rap from 4,4 to 20,74 double title 'INTRODUCERE DATE - COD PRODUS'; FILL FILE 'fundal.bmp' activate window rap move wind rap center USE coduri ORDER cod_prod SCATTER MEMVAR BLANK @5,5 SAY"COD PRODUS" @5,30 GET m.cod_prod VALID m.cod_prod<>0 ERROR'COD DIFERIT DE ZERO' PICTURE "@Z 999" READ SEEK m.cod_prod IF FOUND() DO sunet WAIT "DUBLURA" WINDOW ELSE @6,5 SAY"DENUMIRE PRODUS" @6,30 GET m.den_prod FUNCTION'!' READ APPEND BLANK GATHER MEMVAR ENDIF @ 10,10 SAY 'MAI INTRODUCETI DATE ? [D/N]' @ 10,38 GET rasp picture '!' READ CLEAR DEACTIVATE WINDOW rap ENDDO CLOSE DATA define window fermarfa from 4,4 to 20,74 double title 'PRODUS'; FILL FILE 'fundal.bmp' activate window fermarfa move wind fermarfa center

rasp='D' do while rasp='D' @ 1,2 say 'COD PRODUS ' @ 2,2 say 'DENUMIRE PRODUS ' @ 3,2 say 'PRET UNITAR ' @ 4,2 say 'DATA INTRARII ' @ 5,2 say 'CANTITATE ' @ 6,2 SAY 'ADAOS COMERCIAL(%) ' @ 7,2 SAY 'VALOARE ADAOS ' @ 8,2 say 'VALOARE TVA ' @ 9,2 say 'PRET VANZARE ' sele 1 use marfa order cod_prod sele 2 use tva scatter memvar sele 3 use coduri order cod_prod sele 1 scatter memvar blank @ 1,25 get m.cod_prod valid m.cod_prod<>0 error 'COD DIFERIT DE ZERO' picture '@z 999' read sele 3 seek m.cod_prod if not found() DO sunet wait 'PRODUS INEXISTENT! INTRODUCETI INTAI CODUL!!' window else scatter memvar sele 1 @ 2,25 say m.den_prod COLOR W+/N @ 3,25 get m.pret_unit PICTURE '@z 9999999999' @ 4,25 get m.data_int @ 5,25 get m.CANTITATE valid m.CANTITATE<>0 error 'NUMAR DIFERIT DE ZERO' PICTURE "@Z 99999999999" read @ 6,25 get m.adaos_com picture'@z 999' READ m.val_adaos=m.pret_unit*m.adaos_com/100 @ 7,25 say m.val_adaos COLOR r+*/n m.val_tva=m.pret_unit*m.procent/100 m.pret_vanz=m.pret_unit+m.val_tva+m.val_adaos @8,25 SAY m.val_tva COLOR r+*/n @9,25 SAY m.pret_vanz COLOR r+*/n append blank gather memvar replace all stoc with stoc+m.CANTITATE for cod_prod=m.cod_prod

endif @ 13,10 say 'MAI INTRODUCETI DATE ? [D/N]' @ 13,40 get rasp picture '!' read clear enddo close data deactivate window fermarfa close databases define window cevad from 4,4 to 26,74 double title "SORTARE PRENUME ANGAJATI " FOOTER "[Esc]=Iesire" shadow color scheme 1; FILL FILE 'fundal.bmp' activate window cevad move wind cevad center define window cevad1 from 6,6 to 24,72 none color scheme 1; FILL FILE 'fundal.bmp' activate window cevad1 move wind cevad1 center select 1 use ANGAJATI sort to f1 on prenume USE SELECT 2 USE F1 go top brow field NUME :h='NUMELE',; PRENUME :h='PRENUME',; BULETIN :h='BULETIN' ; noedit deactivate windows cevad,cevad1 close DATABASES ERASE F1.DBF