Documente Academic
Documente Profesional
Documente Cultură
Module 1-6 FoxPro
Module 1-6 FoxPro
FACULTATEA DE INFORMATICA
MANAGERIALA
Prof. univ. dr. Virgil Chichernea
Lect. univ. drd. Gabriel Eugen Garais
Maria Titrade
BAZE DE DATE I
SUPORT DE CURS
Baze de date si programarea aplicatiilor
economice
ANUL II
Semestrul 1
Bucuresti 2010
1
INFORMATII GENERALE
1.1. Date de identificare a titularilor de curs si seminar
Nume titular curs: Prof. Univ. Dr. Virgil Chichernea
E-mail:
chichernea.virgil@profesor.rau.ro
Consultatii:
saptamanal vineri ora 12 -14 (sala 501) sau prin e-mail
Nume titulari
Lect. Univ Drd. Gabriel-Eugen Garais
laborator:
garais.gabriel@profesor.rau.ro
Asist. Univ. Drd. Cristina Maria Titrade
1.2. Conditionari si prerechizite obligatorii
Acest curs presupune parcurgerea cursurilor Arhitectura calculatoarelor si
sisteme de operare si Algoritmi de calcul si bazele programarii din anul I.
Pentru cele doua materii se recomanda revederea bibliografiei obligatorii
propuse in anul I.
1.3. Descrierea cursului
In orice domeniu de activitate, din economia mondiala globalizata, se cer
informatii exacte obtinute in timp util. Aceste informatii se obtin din datele
primare, culese si organizate sub forma unor Baze de Date (BD), in urma unor
procese ample de prelucare si transmitere de date, efectuate cu ajutorul
produselor software complexe numite Sisteme de Gestiune a Bazelor de Date
(SGBD). In acest Suport de curs insusirea si utilizarea notiunilor si conceptelor
referitoare la BDR/SGBDR este organizata pe urmatoarele nivele :
1. Utilizatori baze de date i SGBD (Modulul 1 si 2);
2. Programatori n limbaje de programare 4 GL (Modulul 3 si 4);
3. Insusirea MTI disponibile pentru proiectarea BDR (Modulul 5 si 6);
Pentru partea practica, in cadrul suportului de curs sunt date exemple dupa care
trebuie intocmite proiectele de semestru, iar in partea finala se afla Pliantul cu
sintaxa comenzilor SGBDR.
1.4. Materiale bibliografice obligatorii
- V. Chichernea, G. Garais: Baze de Date - Sistemul FoxPro/Visual FoxPro;
Univ. Romno-American. Editura PROUNIVERSALIS, Bucureti 2009
- David M. Kroenke: Database Processing: Fundamentals Design
and Implementation.; 6th Edition, Pretice Hall, 1997
- I.Lungu, N. Muat, M. Velicanu: FoxPro, Prezentare i aplicaii; Editura
ALL, Bucureti 1997
- David M. Kroenke:
Textbook: Database Processing: Fundamentals,
Design, and Implementation, , 6th Edition, Prentice Hall, 1997
CUPRINS:
MODULUL I
ARHITECTURA BAZELOR DE DATE RELAIONALE ....................... 6
1.1. Noiuni si concepte utilizate n organizarea datelor ................................ 6
1.2. Modele conceptuale pentru Sisteme de Gestiune a Bazelor de Date ...... 12
1.3 Relaii (tabele) .......................................................................................... 13
1.4 Tipuri de chei i identificarea nregistrrilor prin chei ............................ 13
1.5. Diagrama (modelul) entitate - legtur (asociere) (DEA) ...................... 15
Tema nr. 2 ......................................................................................................... 18
Tema nr. 3 ...................................................................................................... 19
1.6. Tipuri de restricii i integritatea restriciilor .......................................... 19
1.7. Dependene i determinri n mulimea atributelor (cmpurilor) .......... 21
1.8 Anomalii intalnite in proiectarea Tabelelor ............................................. 23
1.9 NORMALIZAREA - Ameliorarea succesiva a schemei conceptuale a BD
........................................................................................................................ 24
1.10 Etape in realizarea aplicatiilor informatice cu baze de date ................... 26
MODULUL II
PREZENTAREA SGBD-ULUI FOXPRO ................................................... 28
2.1. Componentele funcionale ale sistemului............................................ 28
2.2. Lansarea i modul de lucru sub SGBD Foxpro ................................... 30
2.3. Tipuri de fiiere n FOXPRO ................................................................. 33
2.4. Consideraii generale privind comenzile Foxpro .................................... 34
Semnificaie....................................................................................................... 35
ALL ................................................................................................................ 35
Comanda acioneaz asupra tuturor nregistrrilor din tabela activ ............. 35
2.5. Elemente ale limbajului de descriere i interogare a bazei de date ..... 36
2.5.1. Constante ...................................................................................... 36
2.5.2. Variabile ........................................................................................... 36
2.5.3. Operatori .......................................................................................... 37
2.5.4. Expresii ............................................................................................ 39
2.5.5. Funcii .............................................................................................. 39
2.5.5.1. Funcii destinate lucrului cu baze de date i fiiere asociate: .. 39
2.5.5.2. Funcii destinate prelucrrii datelor numerice: ........................ 40
2.5.5.3. Funcii destinate prelucrrii irurilor de caractere .................... 41
2.5.5.4. Funcii de tip dat calendaristic ............................................... 42
2.5.5.5. Funcii financiare ...................................................................... 43
2.5.5.6. Funcii cu caracter general ........................................................ 43
2.5.5.7. Funcii utilizator ........................................................................ 43
MODULUL III
3
MODULUL I
ARHITECTURA BAZELOR DE DATE
RELAIONALE
n informatica de gestiune sunt preferate bazele de date relaionale,
datorit performanelor oferite de acest tip de organizare. Prin utilizarea pe
scar larg a calculatoarelor personale (PC) utilizatorii au posibilitatea de a
realiza rapid operaiile de ntreinere i regsire a datelor coninute n acest tip
de baze de date. Pentru a putea utiliza i mai ales pentru a putea proiecta astfel
de baze de date relaionale este necesar s ne nsuim mai nti o serie de
termeni i concepte.
Din punct de vedere tehnic o baz de date este format din unul sau mai
multe fiiere n care datele sunt memorate ntr-o structur de date specific
software-ului utilizat la crearea bazei de date.. O baz de date grupeaz un
ansamblu de fiiere corelate.
O baz de date este un ansamblu de date ce poate fi manipulat de mai
muli utilizatori n viziuni diferite asupra datelor
Structura acestui ansamblu de date se realizeaz prin schema bazei de
date. Schema bazei de date, n sens CODASYL, descrie toate datele i
structurile luate n eviden n cadrul unei baze de date.
D5: Schema BD reprezint structura global a bazei de date
(unii autori o numesc structur global, alii structur virtual).
Subschema BD reprezinta viziunea particulara a fiecrui
utilizator. n exploatarea bazei de date fiecare utilizator are propria viziune
asupra structurrii datelor relevante pentru el. De fapt fiecare utilizator va avea
acces la o baz de date particular, n realitate fictiv, iar descrierea acestei baze
de date particulare se numete subschema bazei de date.
Constituirea SCHEMEI BD se realizeaz n patru etape dup cum
urmeaz:
Etapa 1: Identificarea mulimilor de entiti din cadrul sistemului
Etapa 2: Identificarea asocierilor (legturilor) care exist ntre
mulimile de entiti
Etapa 3: Determinarea condiiilor care se impun asocierilor identificate
Etapa 4: Determinarea caracteristicilor (atributelor) entitilor i
asocierilor care au rezultat n urma etapelor precedente.
D6: Sistemul de Gestiune a Bazelor de date (SGBD)
este format dintr-un Sistem de programe care permite construirea unor
baze de date, ncrcarea datelor i dezvoltarea de aplicaii privind
valorificarea datelor memorate n bazele de date. SGBD-ul este n fond o
interfa ntre utilizatori i sistemul de oparare.
- Orice SGBD conine un limbaj de descriere a datelor (LDD), care permite
descrierea structurii unei baze de date i un limbaj de cereri (LC) sau limbaj de
prelucrare a datelor (LPD)ce permite efectuarea de operaii asupra datelor aflate
n baza de date cum ar fi:
crearea; actualizarea; interogarea;listarea si intretinerea bazei de date.
S.G.B.D. este un sistem de programe care asigur independena
programelor aplicative fa de modul de structurare a datelor.
7
SISTEM INFORMAIONAL
SISTEM INFORMATIC
Subsistem BANCA DE DATE
Baza
de date
8
Echip.
SGBD de calcul
Proceduri
Pentru descrierea unei activiti pentru care s-au cules deja datele
se folosete aa numitul MODEL ENTITATE-LEGTUR (MEL).
n cadrul modelului entitate-legtur sunt puse n eviden
componentele importante ale sistemului (entitile), proprietile acestor
componente (atributele) i legturile dintre entiti (asocierile).
Asociere 1:m
Asociere m:n
Asocieri exclusive
Asocieri recursive
11
Telefon
6305643
6267892
3128867
3245276
si
numele atributelor (prima liter din numele atributului este liter mare).
Atributele subliniate din parantez reprezint chei primare, iar cheile externe
din relaie, se scriu imediat dup paranteza care definete relaia. Folosind
aceasta metod relaiile folosite mai sus se pot scrie astfel:
Capitala
1
1
Ora
Localizat
M
ara
Aflat n
Transportmaritim
Producia
N
Culturi
sau relaie. Totui o diagrama entitate-relaie tipic are de regul un numr mare
de entiti i relaii aa c includerea i a atributelor n aceast diagram poate
provoca mai degrab confuzii dect aduce anumite clariti.
Teme de laborator:
Tema nr. 1
I. Pentru evidenta consumului de materii prime aferent comenzilor de
produse lansate in fabricatie se cunosc urmatoarele:
1. In comanda se precizeaza sectia de productie si cantitatea de fabricat
din produsul respectiv;
2. Eliberarea materiilor prime pentru consum se face pe baza bonului
de consum in care se precizeaza: Nr-bon; Dta; Gestiunea; Nr-Cda;
Cod-mat; Cant-mat; pret-mat;
3. Orice produs din nomenclatorul de fabricatie se defineste prin: Codp; Den-P; Pret-livrare;
4. Materiile prime se definesc prin: Cod_mat; Den_mat; UM;
Gestiunea in care se depoziteaza;
5. Intrarile de materii prime in gestiune se face pe baza de NIR in care
se consemneaza: Nr-NIR; Data; Furnizor; Gestiune-primitoare; Matprima-receptionata; Cantitatea; Pret-aprov.
Restrictii:
Se cere:
-
Tema nr. 2
O firma are ca obiect de activitate comercializarea de produse (
achizitionare produse de la furnizorori, depozitarea lor si vanzarea lor catre
clienti).
Stiind ca:
-Marfurile sunt stocate in mai multe depozite si fiecare depozit are un singur
gestionar;
18
3.
a. Restrictii asupra domeniului de valori ale atributelor (Reguli de
validare pentru un atribut
Nume_cultura,
Cod_judet,
Nume_judet,
Nume jude
1
Nume cultura
PU-export
O relatie este in FN3 daca este in FN2 daca orice camp determinant este
un camp candidat la cheie primara.
Pentru a aduce o relatie in FN3 trebuie sa inlaturam atributele care
depind de determinantii care nu candideaza la cheie si sa plasam aceste atribute
intr-o noua relatie care are atributul determinant ca si cheie primara.
In tabela CLIENTI atributele CodClCodFirmaNumeFirmasunt
tranzitivesi atunci transformam tabela CLIENTI in doua tabele care sa nu mai
contina atribute tranzitive:
Celelalte tabele nu contin atribute transitive
Rezulta: CLIENTI (CodCl, NumeCl, CodFirma)
FIRME( CodFirma, NumeFirma)
Cheie externa: CodFirma pentru legatura cu CLIENTI
COPII (CodCl, NumeCopil)
Cheie externa: CodCl pentru legatura cu tabela CLIENTI
ANIMALE(CodCl,CodPet, NumepPet, Animal)
Cheie externa : CodCl pentru legatura cu CLIENTI
Cele 4 tabele nu mai au anomalii
27
MODULUL 2:
PREZENTAREA SGBD-ULUI FOXPRO
FOXPRO este un Sistem de Gestiune a Bazelor de Date (SGBD) de tip
relaional. El este un instrument performant pentru toate aplicaiile de gestiune
cu baze de date. Pentru a marca cateva date semnificative din evolutia
sistemului FOXPRO amintim ca la sfarsitul anilor 70 firma Asthon-Tate a
realizat produsl dBASE II care a constituit punctul de plecare al SGBD-urilor
din gama xBASE. In anii 80 se dezvolta produsul FOX , produs
pseudorelational dar deosebit de rapid, dezvoltat de catre firma Fox Software.
In anul 1991 apare FoxPro 2.0 care devine lider autoritar al produselor de acest
gen. In anul 1992, firma Fox Software este preluata de catre Microsoft, care a
dezvoltat versiunile 2.5 si 2.6 ale produsului FoxPro sub MS-DOS, Windows,
Mac si UNIX, utilizate pe microcalculatoare ca statii de lucru individuale sau in
retea locala LAN. In anul 1995, Microsoft lanseaza versiunea Visual Foxpro 3,
care a fost urmata in 1997 de versiunea 5 si in anul 1998 apare versiunea
Visual FoxPro 6 ca parte componenta a pachetului Visual Studio 6.0, alaturi de
alte produse de tip Visual ca: Basic, C++, Java++, InterDev. Toate aceste
produse ofera compilari rapide, depanare eficienta si interactiva, HTML ca
interfata pentru aplicatii tip multimedia si compatibilitate cu toate produsele din
pachetele VISUAL STUDIO si OFFICE precum si dezvoltarea aplicatiilor in
retea structurata pe trei nivele (date, procese, interfata utilizator). Evolutia
Sistemelor de Gestiune a Bazelor de date este prezentata schematic in fig. nr. 1.
2.1.
Hierarchical DBMS
Relational Database Systems
Query Language: SQL, etc
2.2.
30
31
33
specifica, atunci cnd se cere, doar numele fiierului, tipul acestuia fiind
automat gestionat de sistem. Dac ns utilizatorul va specifica nume.tip pentru
fiierul cerut, atunci acesta va fi luat n considerare i va trebui precizat de
fiecare dat cnd se face referire la fiierul respectiv.
Semnificaie
Comanda acioneaz asupra tuturor nregistrrilor din
tabela activ
Comanda acioneaz asupra urmtoarelor n nregistrri,
ncepnd cu cea curent, din tabela activ
Comanda acioneaz asupra nregistrrii cu numrul n
(specificat) din tabela activ
Comanda acioneaz asupra tuturor nregistrrilor rmase,
de la cea curent i pn la sfrit, din tabela activ
2.5.1. Constante
Constantele sunt entiti cu valoare invariabil, autodefinit. Foxpro
utilizeaz urmtoarele tipuri de constante:
- constante numerice ( ex. numere 7 5.4 -452.85);
- constante de tip ir de caractere, cuprise ntre ghilimele, apostroafe
sau paranteze drepte, ca delimitatori (exemplu: 'PROGRAM DE
GESTIUNE A STOCURILOR')
- constante logice cu valorile logice:
.T. (True), .Y. (Yes) - pentru Adevrat
.F. (False), .N. (No) - pentru Fals.
- constante de tip dat calendaristic, cuprinse ntre paranteze de tip
acolad ca delimitatori ( ex 10/30/99)
2.5.2. Variabile
Sub SGBD-ul Foxpro, variabilele de memorie sunt de 2 tipuri:
- variabile de memorie create de utilizator
- variabile de memorie sistem
Variabilele create de utilizator pot fi:
cmpuri de date din nregistrrile tabelelor active (create odat cu
tabelele i descrise n structura acestora)
variabile de memorie (independente)
Variabilele de memorie sunt entiti a cror valoare poate fi
modificat, servind pentru memorarea temporar a datelor. Spre deosebire de
36
2.5.3. Operatori
Principalele tipuri de operaii efectuate sub Foxpro sunt:
37
- matematice
- de comparare
- logice
- pe iruri de caractere
fiecrui tip corespunzndu-i operatori specifici.
Astfel, operatorii matematici sunt:
+
adunare
scdere
*
nmulire
/
mprire
**
ridicare la putere
()
gruparea operaiilor, dac este cazul.
Ordinea de prioritate a acestor operatori n expresii este: ridicarea la
putere, nmulirea i mprirea, adunarea i scderea.
Operatorii de comparare sunt utilizai pentru compararea expresiilor
de tip logic, caracter, numeric sau dat calendaristic. Cele dou expresii
trebuie s fie de acelai tip, iar rezultatul va fi de tip logic, adevrat (.T) sau fals
(.F).
Operatorii de comparare sunt:
<
mai mic
>
mai mare
=
egal
<> sau #
diferit de
<=
mai mic sau egal
>=
mai mare sau egal
$
operator de subir, cu urmtoarea definire: Dac A i B
sunt de tip caracter, A$B este adevrat, dac A este
identic cu B sau A este inclus n B.
Operatorii logici sunt:
.AND.
i logic
.OR.
Sau logic
.NOT.
Negare
()
pentru gruparea operaiilor n cadrul expresiilor
Ordinea de prioritate la evaluarea expresiilor este: .NOT., .AND., .OR.,
iar rezultatul este de tip logic.
Operatori pentru iruri de caractere se utilizeaz pentru concatenarea
mai multor iruri de caractere ntr- unul singur, astfel:
+
pentru concatenare cu meninerea spaiilor de la sfritul fiecrui
ir
38
2.5.4. Expresii
O expresie se constituie din combinaii de elemente din urmtoarea list:
nume de cmpuri din structura nregistrrilor de date din tabela activ, variabile
de memorie, elemente de tablou, constante, funcii, operatori, variabile de
sistem.
O expresie poate fi simpl sau complex (compus). Expresia complex
este format din mai multe expresii simple, legate ntre ele prin operatorii logici
AND, OR sau NOT.
2.5.5. Funcii
Funciile sunt prelucrri predefinite, care pot fi utilizate n expresii,
asemntor operatorilor. O funcie returneaz ntotdeauna o valoare, care
reprezint rezultatul ei. Dup natura acestui rezultat, funciile pot fi de tip:
- numeric
- ir de caractere
- logic
- dat calendaristic.
Funciile cele mai utilizate sub Foxpro se pot grupa dup cum urmeaz:
2.5.5.1. Funcii destinate lucrului cu baze de date i fiiere asociate:
ALLIAS() sau ALLIAS(expN)
Are ca rezultat alias-ul bazei de date deschise n zona de lucru
specificat sau, dac expN lipsete , alias-ul zonei de lucru curente.
DBF() sau DBF( <alias> )
Returneaz numele tabelei de date deschis n zona de lucru specificat.
Dac nu exist nici o tabel de date deschis, funcia ntoarce fiierul nul.
EOF() sau EOF ( <alias> )
Returneaz valoarea logic True dac este ntlnit sfritul de fiier i
False n caz contrar. Ea este poziionat pe valoarea logic de True dac n urma
unei comenzi de cutare a unei anumite nregistrri (Locate, Find, Continue sau
Seek) nregistrarea cutat nu a fost gsit i False n caz contrar. De aceea,
aceast funcie se folosete n programe pentru a asigura utilizatorul dac
39
TIME()
Returneaz ora curent din sistem n formatul hh:mm:ss.
2.5.5.5. Funcii financiare
FV(<depunere>,<dobnd>,<perioad>)
Calculeaz valoarea viitoare a unei investiii.
PAYMENT(expN1,expN2,expN3)
Calculeaz plata regulat cerut pentru amortizarea unui credit, unde
expN1 este valoarea iniial a creditului, expN2 este dobnda iar expN3 este
numrul perioadelor.
PV(<expN1,expN2,expN3)
Returneaz valoarea prezent a unei investiii sau suma care trebuie
investit pentru a atinge o anumit valoare viitoare. ExpN1 este plata facut n
fiecare perioad, expN2 este dobnda, iar expN3 este numrul de perioade.
2.5.5.6. Funcii cu caracter general
& Macrosubstituia
Funcia de macrosubstituie este utilizat pentru specificarea unei
variabile de memorie n locul unei valori concrete ateptate . Se utilizeaz n
comenzile FIND, USE, GO i n alte comenzi care cer precizat o valoare.
Funcia servete pentru a da un grad mai mare de generalizare a problemei
rezolvate (parametrizarea unor informaii).
TRANSFORM(expr, expC)
Formeaz iruri de caractere sau numere cu opiuni PICTURE fr
folosirea comenzii @...SAY. Variabila sau cmpul care va fi formatat se
declar prin expr, iar expresia care conine clauza PICTURE prin exprC.
TYPE (<exp>)
Returneaz unul din caracterele N,C,L,D corespunztor tipului
rezultatului evalurii expresiei specificate.
USER()
Afiaz numele utilizatorului conectat la sistemul protejat.
2.5.5.7. Funcii utilizator
SGBD Foxpro permite utilizatorului s-i defineasc funcii proprii. O
funcie const dintr-o procedur care ncepe cu comanda FUNCTION i care
returneaz o valoare.
43
MODULUL 3
COMENZI FOXPRO PENTRU CREAREA SI
GESTIONAREA BAZEI DE DATE
3.1. Comenzi pentru crearea bazei de date
SGBDR-ul FoxPro permite crearea tabelelor unei baze de date
relationale in care se stocheaza structura si datele acestor tabele. Se prezinta in
continuare implementarea LDD in FoxPro.
CREATE DATABASE [ <nume_ baza_ de_ date>] | ?
unde:
- nume_ baza_ de_ date specifica numele bazei de date care va fi
creata. Fisierul bazei de date are extensia .DBC;
- ? afiseaza o fereastra de dialog in care se specifica numele
bazei de date care va fi creata.
MODIFY STRUCTURE
Dac n zona de lucru curent exist o tabel de date deschis, atunci
comanda se va referi la aceasta, altfel pe ecran va apare o fereastr de dialog
care va permite utilizatorului s-i deschid tabela dorit. Acesta va putea
actualiza apoi structura afiat pe ecran n regim interactiv. Ieirea din editare
cu salvarea noii structuri pe disc se face fie cu tastele Ctrl/W , fie acionnd
butonul Save.
Precizm c sistemul va aduce coninutul tabelei la noua sa structur,
lsnd poziionate pe valori nule cmpurile nou definite.
Structura unei tabele poate fi i copiat simplu, dintr-o alt tabel
existent, cu comanda:
COPY TO nume_tabel STRUCTURE [FIELDS nume_cmp1,
nume_cmp2..]
Ca efect, se copiaz din tabela activ ntr-o tabel cu numele specificat
ntreaga structur sau numai cmpurile precizate prin clauza Fields. Practic, se
poate crea astfel o nou tabel pe baza structurii uneia existente.
Dac se dorete afiarea pe ecran a structurii tabelei active, se pot folosi
comenzile:
DISPLAY STRUCTURE [IN nr_zon] [TO PRINTERTO FILE
nume_fis] [NO CONSOLE]
LIST STRUCTURE [IN nr_zon] [TO PRINTERTO FILE
nume_fis] [NO CONSOLE]
unde:
- Nr_zon specific numrul zonei de lucru n care se afl tabela
dorit
- To Printer solicit afiarea la imprimant, iar To File precizeaz
numele fiierului de tip text n care s fie memorat structura tabelei,
n vederea afirii ei ulterioare sau a prelucrrii ei cu un editor de
texte.
- No Console inhib afiarea structurii la ecran
46
- REPLACE.
Comenzile EDIT i CHANGE au format i aciune asemntoare, astfel c
le vom trata mpreun; ele se prezint astfel:
EDIT [FIELDS <list cmpuri>] [ scope] [FOR <exp_logic>]
[WHILE <exp_logic>] [FREEZE cmp] [NOAPPEND] [NOMODIFY]
[NOCLEAR] [NODELETE] [NOOPTIMIZE] [NOWAIT] [ REST]
[SAVE] [TITLE nume_fer] [VALID exp] [ERROR exp_C] [WIDTH
exp_N] [ WINDOWS nume_fer IN SCREEN] [COLOR SCHEME
exp_C]
CHANGE [FIELDS <list cmpuri>] [ scope] [FOR <exp_logic>]
[WHILE <exp_logic>] [FREEZE cmp] [NOAPPEND] [NOMODIFY]
[NOCLEAR] [NODELETE] [NOOPTIMIZE] [NOWAIT] [ REST]
[SAVE] [TITLE nume_fer] [VALID exp] [ERROR exp_C] [WIDTH
exp_N] [ WINDOWS nume_fer IN SCREEN] [COLOR SCHEME
exp_C]
Domeniul implicit de aciune este nregistrarea curent, pe care o
afieaz pe ecran, pemind utilizatorului s modifice valorile din cmpurile
dorite. Semnificaia clauzelor ce pot apare n formatul comenzii este
urmtoarea:
- FIELDS specific numele cmpurilor care s fie afiate i deci
disponibile pentru a fi modificate, dac se dorete acest lucru;
- Scope - precizeaz domeniul de aciune dorit, altul dect
nregistrarea curent;
- FOR specific condiia de selectare a nregistrrilor la care se
dorete accesul pentru modificare, dac este cazul;
- WHILE introduce condiia ca aceast comand s acioneze doar
atta timp ct ea este ndeplinit;
- FREEZE precizeaz cmpul unic care s poat fi modificat;
- NOAPPEND nu permite adugarea de noi nregistrri cu ajutorul
acestei comenzi;
- NOMODIFY nu permite efectuarea de modificri n tabela activ
i afiat;
- NOCLEAR nu permite marcarea nregistrrilor din tabel pentru
tergere;
- NOOPTIMIZE inhib tehnologia Rushmore
- NOWAIT este folosit doar n programe, pentru a cere continuarea
execuiei programului dup ce fereastra de editare a fost deschis;
49
?? <expresie>
Dac se dorete direcionarea afirii ctre imprimant, atunci aceasta
trebuie s fie mai nainte activat, printr-o comand de forma:
SET PRINTER ON
Cnd se dorete revenirea la ecran pentru comanda ? sau ??, se va
specifica o comand de forma:
SET PRINTER OFF
Exemple:
Fiind dat tabela STUDENT, s se scrie secvenele de comenzi prin care
se satisfac urmtoarele cerine:
1. S se afieze studenii de la facultatea de Informatic.
USE STUDENT
LIST FOR FACULT=INF
sau, pentru a ne asigura c identificarea se face corect, indiferent de modul n
care au fost introduse datele n tabel:
USE STUDENT
LIST FOR UPPER(FACULT)= INF
2. S se afieze studenii din facultatea de Informatic, anul II, grupa 620.
USE STUDENT
LIST FOR UPPER(FACULT)= INF AND AN1=1 AND GRUPA1=601
3. S se afieze la imprimant studenii nscui n 30 noiembrie 1979.
USE STUDENT
LIST FOR DATAN={11/30/79} TO PRINT
4. S se afieze studenii nscui n anul 1980 (condiie compus).
USE STUDENT
LIST FOR DATAN>={01/01/80} AND DATAN<={12/31/80}
sau, utiliznd funciile Foxpro:
USE STUDENT
LIST FOR SUBSTR(DTOC(DATAN),7,2))=80
sau
LIST FOR val(SUBSTR(DTOC(DATAN),7,2)))=80
5. S se identifice, pentru a fi corectat, nregistrarea corespunztoare
studentului ZAVOI.
USE STUDENT
LOCATE FOR UPPER(NUME)=ZAVOI
EDIT
sau, n programe
USE STUDENT
LOCATE FOR UPPER(NUME)=ZAVOI
56
IF NOT EOF()
EDIT
ELSE
? nregistrarea cu studentul dorit nu exist
ENDIF
6. S se tearg din tabela STUDENT toi studenii de la Informatic i s se
creeze cu ei o tabel separat numit INFORM.
USE STUDENT
COPY TO INFORM STRUCTURE
&Se copiaz structura pentru INFORM
USE INFORM
&Se deschide noua tabel INFORM
APPE FROM STUDENT FOR UPPER(FACULT)= INF
&Se preiau datele din STUDENT
USE STUDENT
&Se deschide tabela STUDENT
DELETE FOR UPPER(FACULT)= INF
&Se marcheaz pentru tergere nreg.din STUDENT
PACK
&Se terg fizic nregistrrile din STUDENT
CLOSE ALL
&Se nchid toate fiierele
7. S se afieze toate nregistrrile marcate pentru tergere din tabela
STUDENT.
USE STUDENT
LIST FOR DELETED()
8. S se afieze, pentru corecii, toi studenii (biei) de la facultatea de
TURISM. Ne intereseaz n mod deosebit numele, marca, data naterii i
media.
USE STUDENT
EDIT FOR UPPER(FACULT)= TURISM AND UPPER(SEX)= B
sau
USE STUDENT
EDIT FOR UPPER(FACULT)= TURISM AND UPPER(SEX)= B
FIELDS MARCA, NUME, PRENUME, DATAN, MEDIA
&Se afieaz doar cmpurile cerute
9. S se recalculeze media de absolvire a studenilor, tiind c media existent
se mrete cu 0.50 pentru toi cei care au media peste 5 i devine 10 pentru
cei care aveau ntre 9 i 10.
USE STUDENT
57
3.5.
61
64
3.8.
Aplicaii rezolvate:
APLICATIA 1:
Fie baza de date cu evidenta creditelor acordate de filiala unei banci, cu
urmatoarea structura:
BANCA (SUCURSALA C(10), BENEFICIAR C(15), VAL_CREDIT N(8),
VAL_ACHIT N(8), TERMEN N(2), DATA_ACORDARII D)
-
Cerinte:
1. Sa se introduca 8 inregistrari
2. Sa se caute beneficiarii cu numele Popa
3. Sa se afiseze beneficiarii care au de achitat creditul in mai putin de 24
luni
4. Sa se verifice daca la sucursala Militari sunt acordate credite mai mari
de 500.000 lei. Sa se afiseze numarul curent al primei inregistrari gasite
si continutul acesteia
5. Sa se caute beneficiarii care nu au achitat nici o suma si sa se afiseze
6. Sa se afiseze beneficiarii care au achitat mai mult de jumatate din
credit, de la sucursala Titan
7. Sa se stearg logic toi beneficiarii care au achitat creditul
8. Sa se afiseze toti beneficiarii cu Val_credit mai mica de 10.000 lei.
9. Sa se afiseze inregistrarile marcate pentru stergere si apoi sa se
renunte la marcaj
10. Sa se afiseze creditele acordate cu vechime mai mare de 3 ani
11. Sa se afiseze creditele acordate in ultima luna
12. Sa se marcheze pentru stergere creditele acordate in lunile august si
octombrie si sa se stearga definitive aceste inregistrari.
Rezolvare:
2. LOCATE FOR BENEFICIAR = Popa
DISPLAY
CONTINUE
DISPLAY
3. LIST FOR TERMEN < 24
4. LOCATE FOR SUCURSALA = Militari AND VAL_CREDIT > 500000
?FOUND()
?RECNO()
DISPLAY
5. LOCATE FOR VAL_ACHIT=0
69
DISPLAY
CONTINUE
DISPLAY
6. LIST FOR VAL_ACHIT>VAL_CREDIT/2 AND SUCURSALA = Titan
70
Cerinte:
1. Introduceti 8 inregistrari in baza de date
2. Sa se indexe baza de date dupa campul COD
3. Sa se calculeze totalul pentru cantitatea intrata si pentru cantitatea
iesita
4. Sa se calculeze pretul mediu
5. Determinati cel mai mare stoc intrat si cel mai mic stoc iesit
6. Afisati numarul produselor al caror stoc final este mai mare de 100
7. Determinate numarul de produse al caror pret este cuprins intre 10 si
100 lei
8. Sa se afiseze primele trei produse in ordinea descrescatoare a
preturilor
9. Sa se calculeze valoarea produselor din depozit
10. Afisati numele produsului care se afla in cantitatea cea mai mare in
depozit
2.
3.
4.
5.
6.
7.
8.
9.
10.
Rezolvare:
INDEX ON COD TAG COD OF IND_COD
SUM CANTITATE_INTRATA TO A
?CANTITATEA INTRATA ESTE,A
SUM (CANTITATE_IESITA)
AVERAGE (PRET)
CALCULATE MAX(STOC_INITIAL)
CALCULATE MIN(STOC_FINAL)
CALCULATE CNT() FOR STOC_FINAL > 100
CALCULATE CNT() FOR PRET>=10 AND PRET <= 100
SORT TO STOCURI1 ON PRET/D
USE STOCURI1
GO TOP
LIST NEXT 3
CALCULATE SUM (STOC_FINAL*PRET) TO VAL
?VALOAREA PRODUSELOR DIN DEPOZIT ESTE, VAL
CALCULATE MAX (STOC_FINAL)
APLICATIA 3:
Fie baza de date cu evidenta salariilor angajatilor unei patiserii, cu
structura alaturata:
SALARIATI (COD_ANGAJ N(3), NUME C(20), FUNCTIA C(10),
SALARIU N(8), INDEXARE N(3), SAL_IND N(8), PRIMA_ANG N(8),
NR_ORE N(5))
-
Cerinte:
1. Sa se realizeze completarea automata a campului Indexare cu
valoarea 5, ce reprezinta procentul cu care va fi indexat salariul
angajatilor
2. Completarea automata a campului Sal_ind ce reprezinta salariul
dupa indexare
3. Completarea campului Prima_ang astfel: pentru cei care au 200 ore
lucrate cu valoarea 400, iar pentru cei care au 150 ore cu valoarea 200
4. Sa se marcheze pentru stergere cei cu functia de sofer, sa se afiseze
baza de date si apoi sa se renunte la marcaj
5. Sa se sorteze angajatii cu functia de sofer dupa campul Salariu
crescator si dupa campul Prima_ang descrescator
6. Sa se caute inregistrarea cu codul 12 si sa se afiseze
71
Rezolvare:
1. REPLACE ALL INDEXARE WITH 5
2. REPLACE ALL SAL_IND WITH SALARIU+(SALARIU*INDEXARE)/100
Observaie:
Pentru c tabela PERS nu conine cmpul IMPOYIT, se va modifica
nti structura acesteia, dup care se va proceda la calcul.
3. S se afieze rapid suma fondului de salarii (suma cmpului SAL)
dup indexare i suma impozitului cuvenit.
4. S se calculeze i s se afieze salariul mediu pentru un salariat al
instituiei.
5. S se afieze toi salariaii, n ordinea alfabetic a numelui lor.
6. S se afieze toi salariaii care au salariu sub salariul mediu pe
instituie i apoi cei care au un salariu sub salariul mediu pe
economie (presupunem c salariul mediu pe economie este de
1600000 lei).
7. S se afieze fondul de salarii aferent salariailor cu salariu sub
salariul mediu pe instituie.
8. S se afieze salariaii (brbai) care sunt ingineri i sunt cstorii.
9. S se afieze toi salariaii, pe locuri de munc i n ordine
alfabetic.
10. S se afieze toi salariaii din secia cu codul 4211, n ordinea
descresctoare a salariilor lor.
11. S se afieze salariul minim i salariul maxim din cadrul societii.
12. S se afieze, pentru corectarea unor date personale(nume, adresa,
telefon) toi salariaii cu numele POPESCU.
13. S se determine numrul salariailor de sex feminin, necstorii.
14. S se calculeze salariul mediu al salariailor de sex masculin (M) i
respectiv de sex feminin (F), pentru a se face o analiz a acestor
date.
15. S se afieze pentru salariaii cu salariul mai mic dect 700000 lei,
doar numele, locul de munc, salariul, data naterii i starea civil la
ecran i imprimant.
73
MODULUL 4
LIMBAJUL DE PROGRAMARE FOXPRO
4.1. Realizarea i gestionarea programelor sub Foxpro
Sistemul Foxpro ofer un mediu integrat i deosebit de performant de
programare, care asist utilizatorul pe tot parcursul activitii de realizare i
dezvoltare a programelor, cuprinznd etapele:
- scrierea i corectarea (editarea) programului surs;
- compilarea;
- execuia;
- depanarea i testarea .
Un program reprezint o succesiune de comenzi Foxpro, memorat pe
disc ca un fiier, prin care se descrie un algoritm de rezolvare a unei probleme
date. De aceea, un program Foxpro se mai numete fiier de comenzi i este
salvat cu extensia implicit .PRG.
Sub Foxpro au fost implementate toate cele trei tipuri de structuri
fundamentale ale programrii structurate i modulare, i anume:
structura secvenial
structura alternativ
structura repetitiv
unde:
nume_fiier este numele fiierului surs care se va crea sau al celui
care se va afia pe ecran pentru editare
NOEDIT permite vizualizarea fiierului de comenzi fr a permite
modificarea lui
NOWAIT permite derularea n continuare a execuiei programului,
fr a ine seama de afiarea lui n fereastra de editare
RANGE <expN1>,<expN2> cere selectarea i deci afiarea n fereastra
de editare, numai a poriunii din text cuprins ntre poziia indicat prin expN1
i cea specificat prin expN2.
WINDOW <nume_fer1>] determin afiarea ferestrei cu numele
specificat, ca fereastr de editare
IN [WINDOW] <nume_fer2>SCREEN face ca fereastra de
editare s apar n interiorul ferestrei cu numele specificat prin nume_fer2 sau
pe ecran (SCREEN).
SAVE face ca fereastra de editare s rmn afiat pe ecran chiar i
dup ieirea din fereastra de editare.
Execuia unui program poate fi cerut n orice moment n dou moduri:
- cu comanda DO
- prin intermediul meniului Foxpro
Comanda Do are formatul general:
DO <nume_fiier><nume_procedur>
[WITH <list_parametri>] [IN <fiier>]
Comanda cere execuia programului sau a procedurii cu numele
specificat. Dac fiierul nu are extensia specificat, atunci comanda va cuta pe
disc fiierul cu numele respectiv i, n ordine, cu extensia: .EXE; .APP;
.FXP; .PRG
Opiunea WITH ofer posibilitatea transmiterii parametrilor
programului. Opiunea IN permite execuia unei proceduri din fiierul cu
numele specificat (practic specific fiierul n carea fost memorat procedura,
pentru a grbi execuia).
Deschiderea unui program existent n vederea corectrii se poate face
fie:
- cu comanda MODIFY COMMAND
- activnd opiunea OPEN din submeniul FILE, alegnd apoi tipul de
fiier PROGRAM i apoi selectnd fiierul cu numele cutat.
Efectul acestor aciuni similare va fi deschiderea ferestrei de editare n
cadrul creia este afiat coninutul programului dorit, utilizatorul putnd efectua
orice corecie crede de cuviin.
Compilarea programelor
75
Comanda IF
Formatul general al comenzii este:
IF <expL>
<comenzi1>
[ELSE
<comenzi2>]
ENDIF
Comanda funcioneaz astfel: Se evalueaz condiia.
Dac este adevrat, se execut toate comenzile care urmeaz,
pn la ELSE sau pn la ENDIF (dac lipsete ELSE) i apoi se sare la prima
comand de dup ENDIF.
Dac este fals, se execut toate comenzile care urmeaz dup
ELSE, pn la ENDIF i apoi se trece mai departe, la urmtoarea comand.
Exemplu:
IF OPT=A
DO ADAUG
ELSE
IF OPT =M
DO MODIF
ELSE
IF OPT =S
DO STERG
ELSE
?OPTIUNE ERONATA
ENDIF
ENDIF
ENDIF
Acelai exerciiu se poate scrie i astfel:
IF OPT=A
DO ADAUG
77
ENDIF
IF OPT=M
DO MODIF
ENDIF
IF OPT=S
DO STERG
ENDIF
Comanda DO CASE
Are formatul general:
DO CASE
CASE <expresie1>
<comenzi1>
CASE <expresie2>
<comenzi2>
.
.
[OTHERWISE
<comenziN>
ENDCASE
Comanda funcioneaz astfel:
Se evalueaz prima expresie care urmeaz clauzei CASE.
Dac aceasta este adevrat, se execut secvena de comenzi
care i urmeaz, pn la urmtorul CASE, dup care se trece la prima comand
de dup ENDCASE.
Dac aceasta nu este adevrat, se trece i se evalueaz
expresia2, corespunztoare urmtorului CASE i se procedeaz la fel i aa
mai departe.
Dac nici una din condiii (expresii) nu este adevrat se execut
secvena de comenzi care succede fraza OTHERVISE (dac aceasta exist),
sau se transfer controlul dup ENDCASE. Oricum, se va executa doar
secvena de comenzi aferent condiiei adevrate, dup care se va trece dup
ENDCASE.
Se observ deci, c la prima expresie gsit adevrat se execut
comenzile corespunztoare dup care se iese din comand i se continu
programul cu prima comand de dup ENDCASE.
Acest lucru nseamn c expresiile, condiiile trebuie s fie formulate
corect, trebuie s se exclud reciproc. Dac mai multe condiii ataate clauzelor
CASE sunt adevrate, se execut doar grupul de comenzi aferent primeia dintre
78
ele, n ordinea n care efectiv au fost scrise - ceea ce probabil c nu este foarte
corect.
Exemplu:
DO CASE
CASE OPT=A
DO ADAUG
CASE OPT=M
DO MODIF
CASE OPT=S
DO STERG
OTHERWISE
? OPIUNE ERONAT
ENDCASE
<secven_de_comenzi>
[EXIT]
[LOOP]
ENDFORNEXT
unde:
Variabil este o variabil de memorie cu rol de contor, care va
numra de cte ori se execut ciclul cuprins ntre FOR i ENDFOR. Contorul
va fi iniializat automat prin valoarea precizat prin exp1 i va fi mrit, dup
fiecare execuie a ciclului, cu o valoare egal cu cea precizat prin exp3
(valoare numit pas).
Pasul este opional, deci poate lipsi; atunci el este considerat
automat egal cu 1.
Exp2 precizeaz valoarea final a contorului i deci stabilete
pn cnd are loc reluarea ciclului.
Comanda funcioneaz astfel:
- Se iniializeaz (variabila cu valoarea iniial, precizat prin exp1.
- Se compar valoarea contorului cu cea final, definit prin exp3.
- Dac este mai mic sau egal se va executa secvena de comenzi
cuprins ntre FOR i ENDFOR sau NEXT.
- Dac este mai mare dect valoarea final, atunci execuia comenzii
FOR nceteaz i se continu cu urmtoarea comand din program de dup
ENDFOR sau NEXT.
- Opiunea EXIT cere ieirea forat din ciclu, indiferent de valoarea
contorului
Opiunea LOOP determin reluarea comenzii FOR , fr a mai
executa restul comenzilor cuprinse ntre LOOP i ENDFOR.
Exemplu:
1. S se calculeze suma primelor 20 de numere naturale .
CLEAR
S=0
FOR I=1 TO 20
S=S+I
ENDFOR
?SUMA PRIMELOR 20 NUMERE NATURALE ESTE
?? S
2. S se calculeze suma salariilor pentru primele 20 de persoane din
tabela PERS.
CLEAR
82
USE PERS
S=0
FOR I=1 TO 20
S=S+SAL
SKIP
ENDFOR
?SUMA SALARIILOR PENTRU PRIMELE 20 PERSOANE ESTE
?? S
CLOSE ALL
c). Structura specific sistemului Foxpro, care parcurge automat o
tabel de date, n mod condiionat
Comanda SCAN
Are sintaxa:
SCAN [NOOPTIMIZE] [<Scop>] [FOR <expL1>] [WHILE
<expL2>]
<secven_de_comenzi>
[EXIT]
[LOOP]
ENDSCAN
Ca efect al acestei comenzi, se parcurge tabela activ executndu-se
secvena de comenzi cuprins ntre SCAN i ENDSCAN pentru fiecare
nregistrare sau numai pentru cele din domeniul specificat prin Scope sau numai
pentru cele care ndeplinesc condiia specificat prin FOR sau WHILE.
Comanda SCAN incrementeaz automat pointerul de nregistrare cu 1 i
asigur astfel automat trecerea la urmtoarea nregistrare.
Opiunea LOOP cere reluarea execuiei comenzii SCAN fr a mai
parcurge comenzile cuprinse ntre SCAN i ENDSCAN.
Opiunea EXIT asigur ieirea forat din ciclul realizat cu SCAN.
Exemplu:
S se afieze din tabela PERS , pentru persoanele care au salariul mai
mare de 3000000, numele i salariul.
USE PERS
SCAN
IF SAL>3000000
? nume
??
??sal
83
ENDIF
ENDSCAN
Cod
A
W
N
X
Y
9
#
!
$
*
86
.
,
numerelor
precizeaz poziia punctului zecimal
Separ, dac se dorete, grupele de cte 3 cifre de la ntregi.
92
ACTIV=.T.
@ 2,5 GET ACTIV FUNCTION *C Activ
READ
Sau
@ 2,5 GET ACTIV PICTURE @*C Activ
READ
Sau
@ 2,5 GET ACTIV FUNCTION *C PICTURE Activ
READ
Butonul list sau pe scurt, lista este un element similar unei liste
obinuite, care permite selectarea unui singur element dintr-o list
afiat total sau parial pe ecran, n interiorul unui cadran, avnd
elementele dispuse n plan vertical.
Dac lista e parial, n dreapta apare o bar de defilare, care va permite
defilarea listei n cadran. n acest caz, comanda @ se prezint astfel:
@ L,C GET <variabil><cmp> FROM <masiv> [POPUP
<nume_submeniu>] [PICTURE <exprC1>] [FUNCTION <exprC2>]
[DEFAULT <exp1>] [ENABLEDISABLE] [MESSAGE <exprC3>] [SIZE
<expN1>,<expN2>] [VALID <expL1><expN3>] [WHEN <expL2>]
[COLOR SCHEME <expN4>COLOR <list_culori>]
READ
unde:
L,C reprezint coordonatele punctului din stnga sus al cadranului n
care se va afia lista
Elementele listei pot fi preluate fie dintr-un masiv, caz n care se
folosete opiunea FROM masiv, fie dintr-un submeniu, caz n care se utilizeaz
opiunea POPUP nume_submeniu.
Variabila sau cmpul de date precizate la GET servesc pentru a
memora selecia fcut de utilizator i trebuie s fie de tip numeric sau ir de
caractere.
Dac este de tip numeric, va memora poziia din list a elementului
selectat. Dac este de tip ir de caractere, va memora chiar textul elementului
selectat.
Opiunile specifice:
- FUNCTION &T
sau &N pentru list Terminat sau
Neterminat;
- PICTURE @&T sau @&N pentru list Terminat sau
Neterminat;
94
Exemple:
Dintr-o list de opiuni posibile, s se scrie secvena de comenzi pentru
alegerea unei opiuni. Realizai o list ascuns cu opiunile respective.
CLEAR
DIMENSION OPTIUNI[4]
OPTIUNI[1]= Adaugare
OPTIUNI[2]= Modificare
OPTIUNI[3]= Stergere
OPTIUNI[4]= Terminare
OPT=Terminare
@ 10,2 SAY Alegei opiunea dorit: GET OPT FUNCTION & FROM
OPTIUNI SIZE 20,2 MESSAGE OPTIUNI
READ
CLEAR
@ 15,10 SAY OPTIUNEA ALEASA ESTE
@ 15,33 SAY OPT
Buton popup sau Lista ascuns este asemntor listei simple, cu
deosebirea c pe ecran apare afiat, n orice moment dinaintea
activrii, elementul curent selectat, cuprins ntr-un chenar cu
marginea inferioar dubl. La activare, lista se prezint sub forma
unui meniu vertical, din care elementul dorit se selecteaz cu tastele
Enter sau Space.
Formatul comenzii se prezint astfel:
@ L,C GET <variabil> [PICTURE <exprC1>] [FUNCTION
<exprC2>] [DEFAULT <exp1>] [FROM <masiv>] [ENABLEDISABLE]
[MESSAGE <exprC3>] [SIZE <expN1>,<expN2>] [VALID
<expL1><expN3>] [WHEN <expL2>] [COLOR SCHEME
<expN4>COLOR <list_culori>]
READ
unde:
- L,C - reprezint coordonatele colului din stnga sus al listei
- variabila poate fi o variabil de memorie, un element al unui masiv
sau un cmp de date din tabela activ, n care se va memora fie poziia
elementului selectat n list fie chiar textul corespunztor al acestuia,
dup cum este de tip numeric sau ir de caractere.
Opiuni specifice:
- FUNCTION ^
95
PICTURE @^
Exemple:
1. List ascuns terminal
CLEAR
terge ecranul
n=1
@ 5,5 GET n FUNCTION ^T Luni,Mari,Miercuri,Joi,Vineri
READ
2. List ascuns neterminal
CLEAR
terge ecranul
a=Luni
@ 5,5 GET a FUNCTION ^N Luni,Mari,Miercuri,Joi,Vineri
READ
3. List ascuns neterminal cu taste directe de selectare
CLEAR
terge ecranul
a=Luni
@ 5,5 GET a PICTURE @^N
\<Luni,\<Mari,Mie\<rcuri,\<Joi,\<Vineri
READ
4 List ascuns cu dou elemente dezactivate (Miercuri i Joi)
CLEAR
terge ecranul
a=Luni
@ 5,5 GET a PICTURE @^N Luni,Mari,\Miercuri,\Joi,Vineri
READ
Butonul PUSH sau declanator are ca efect declanarea unei aciuni
i apare pe ecran sub forma a dou paranteze unghiulare care ncadreaz
un text explicativ. Pot fi definite mai multe declanatoare, pentru care se
precizeaz atributele cu ajutorul opiunilor PICTURE i FUNCTION. n
plus, un declanator poate fi:
- declanator implicit , care este selectat n mod automat la apsarea
tastelor Ctrl/Enter i care apare pe ecran marcat ntre paranteze
unghiulare duble <<text>>.
- declanator Escape, care se prezint ca unul normal, dar care este
selectat automat la acionarea tastei Escape.
96
98
unde:
nume_fer1 este fereastra care se activeaz; eventual i
nume_fer2,etc sau toate dac s-a specificat ALL
- IN WINDOW numele ferestrei printe, n care se afieaz
fereastra acum activat ( sau pe ecran dac este SCREEN)
- TOP sau BOTTOM specific dac fereastra se va afia n faa
tuturor ferestrelor existente pe ecran (TOP) sau n spatele acestora.
- NOSHOW- fereastra este activat, exist, dar nu apare pe ecran
Afiarea unei ferestre, fr a afecta locul de transmitere a comenzilor de
ieire Foxpro se va face cu comanda:
SHOW WINDOW <nume_fer1> [,<nume_fer2>...] [ALL]
[IN WINDOW <nume_fer>IN SCREEN] [TOPBOTTOM]
unde:
nume_fer1,nume_fer2.. sunt numele ferestrei/ferestrelor care se vor
afia, fr a deveni ns ferestre active de lucru.
Opus comenzii SHOW deoarece elimin de pe ecran una sau mai multe
ferestre, dup cum dorim, fr a le terge ns din memorie, este comanda
HIDE WINDOW, cu formatul:
-
104
*************************************************************
FOXPRO:
APLICAIA NR. 2
ap2.prg
*************************************************************
Baza de date PERSONAL(NUME, ADRESA, TELEFON, DATA_ANGAJ)
se afl pe discul C *n directorul STUDIU. Scriei un program care s listeze:
numele, adresa i numrul de telefon al persoanelor angajate n ultimul an.
*************************************************************
setari iniiale
set talk off
set status off
set scoreboard off
set color to gr+/n
set clock off
clear all
*
nr=0
use personal in 1
scan for data_angaj>date() - 365
display nume, adresa, telefon
nr=nr+1
endscan
?
? "Exista " +LTRIM(STR(NR))+"muncitori angajai n ultimul an"
?
wait
clear
*************************************************************
FOXPRO:
APLICAIA NR. 3
ap3.prg
*************************************************************
Proiectai i scriei un program DBASE care s permit listarea nregistrrilor
bazei de date PERSONAL.DBF ordonate dup un cmp specificat.
* *************************************************************
SET TALK OFF
CLEAR
CLOSE ALL
ACCEPT " Tastai numele bazei de date: " to bd
USE &bd IN 1
R=""
DO WHILE .T.
109
CLEAR
* afisare meniu
@1,1 SAY "1). Nume"
@2,1 SAY "2). Varsta"
@3,1 SAY "3). Vechime"
@4,1 SAY "4). Salar"
@5,1 SAY "5). Terminare"
optiune=1
@7,5 SAY " Tastai numr opiune:" get optiune PICTURE "9"
RANGE1,5
READ
CLEAR
* analiz opiune tastata
DO CASE
CASE optiune=1
cmp="NUME"
CASE opiune=2
cmp="VARSTA"
CASE opiune=3
cmp="VECHIME"
CASE opiune=4
cmp="SALAR"
OTHERWISE
CANCEL
CLEAR
ENDCASE
* indexare dup cmpul indexat
INDEX ON &camp TAG &camp
LIST OFF
WAIT
CLEAR
@3,3 SAY " Dorii o alt listare? (D/N) " GET R PICTURE "A"
* VALID UPPER(R) = "D" .OR. UPPER(R) = "N"
READ
* continuare listri
IF UPPER(R) ="D"
LOOP
* terminare listri
ELSE
CLEAR
110
RETURN
ENDIF
ENDDO
* *************************************************************
* FOXPRO: APLICAIA NR. 4 : AP4.PRG
* *************************************************************
* Baza de date PRODUSE.DBF are structura: SORTIM, FIRMA, PRE,
BUCI Scriei un program care mrete preurile la macaroane"Spaghette"
cu 20%, la Ulei Msline cu 65% i la *igrile "Marlboro" cu 78%. Preul
celorlalte sortimente, indiferent de firm, cu 150 lei. Se cere *valoarea mrfii
existente n stoc nainte i dup mrirea preurilor
* *************************************************************
SET TALK OFF
CLEAR
USE PRODUSE
* calcularea valorii stocului de marfa nainte de scumpire
SUM(PRET * BUCATI) TO valinit all
? "VALOAREA INITIALA A STOCULUI :"
? valinit
WAIT " "
* majorri
REPLACE ALL PRET WITH PRET + 150
REPLACE ALL FOR SORTIM = "Macaroane" .AND. FIRMA ="Spaghette";
PRET WITH (PRET - 150)*1.2
REPLACE ALL FOR SORTIM = "Ulei" .AND. FIRMA = "Masline";
PRET WITH (PRET - 150)*1.65
REPLACE ALL FOR SORTIM = "Tigari" .AND. FIRMA ="Marlboro";
PRET WITH (PRET - 150) * 1.78
LIST
WAIT " "
* Calculul valorii stocului dup majorri
SUM (PRET*BUCATI) TO valfinala ALL
? " VALOAREA FINALA = :"
? valfinal
?
? " MAJORAREA VALORII = :"
?? valfinal - valinit
WAIT " "
CLOSE ALL
111
* *************************************************************
* FOXPRO: APLICAIA NR. 5
ap5.prg
*************************************************************
* Baza de date PERS.DBF are structura: NUME, ADRES, TELEFON Scriei
un program care *creaz un nou fiier baza de date numit PERS1.DBF care are
aceleai cmpuri cu PERS.DBF dar *cu lungimea egal cu lungimea maxim
exitent n cmpurile memorate. Copiai nregistrrile din *fiierul iniial i
apoi tergei fiierul PERS.DBF
* ****************************************
SET TALK OFF
CLEAR
USE pers
COPY STRUCTURE EXTENDED TO pers1.dbf
USE pers1
* STERGERE BAZA DE DATE
ZAP
USE pers
DO calc_lun
* SE CALCULEAZ LUNGIMEA MAXIM A NREGISTRRILOR I SE
INLOCUIETE
* LUNGIMEA CMPURILOR
USE PERS1
APPEND BLANK
REPLACE FIELD_NAME WITH "Nume", FIELD_TYPE WITH "C",
FIELD_LEN;
WITH MaxN
APPEND BLANK
REPLACE FIELD_NAME WITH "Adresa", FIELD_TYPE WITH "C",
FIELD_LEN;
WITH MaxA
APPEND BLANK
REPLACE FIELD_NAME WITH "Telefon", FIELD_TYPE WITH "N",
FIELD_LEN;
WITH MaxT
CREATE pers1 FROM pers
LIST STRUCTURE
APPEND FROM pers
LIST
WAIT
DELETE FILE baza.dbf
112
SET CURSOR ON
PROCEDURE calc_lun
PUBLIC MaxN, MaxA, MaxT
STORE 0 TO MaxN, MaxA, MaxT
SCAN
IF MaxN < LEN(LTRIM(RTRIM(NUME)))
MaxN= LEN(LTRIM(RTRIM(NUME)))
ENDIF
IF MaxA < LEN(LTRIM(RTRIM(ADRESA)))
MaxA= LEN(LTRIM(RTRIM(ADRESA)))
ENDIF
IF MaxT < LEN(LTRIM(RTRIM(TELEFON)))
MaxT= LEN(LTRIM(RTRIM(TELEFON)))
ENDIF
ENDSCAN
RETURN
*************************************************************
* FOXPRO: APLICAIA NR. 6 ap6.prg
*************************************************************
* n directorul STOCURI exist bazele de date STOC.dbf i TRANZACTII.dbf
* Listai structura acestor fiiere i scriei un program pentru realizarea
tranzaciilor zilnice. Dialogul cu utilizatorul trebuie proiectat corespunztor (
adic codurile de material se selecteaz din STOC.DBF iar restul cmpurilor
se introduc prin intermediul unui videoformat)
********************************************************
set talk off
public cod1
clear
@3,15 say "MISCARE MATERIALE DIN STOC"
@4,16 SAY "(CREARE FISIER TRANZACTII)"
sele 1
use stoc
define popup ferestr1 from 5,5 to 10,65 prompt field stoc->den
on sele popup ferestr1 do salv1
sele 2
use tranzact
sele 1
activate popup ferestr1
close data
113
procedure salv1
store 0 to mag1, i_e1,cant1,data1,pu1
store space(4) to um1
store space(6) to data1
sele 2
append blank
sele 1
loca for den=prompt()
cod1=codm
pu1=pu
repl tranzact->codmt with cod1
repl tranzact->put with pu1
SELE 2
brow
@14, 12 SAY "UNITATE DE MASURA(xxxx) ="
@14,37 GET um1
@14,44 SAY "COD MAGAZIE(n) ="
@14,62 GET MAG1 pict '9'
@16,12 SAY "INTRARI/IESIRI(1,2) ="
@16,34 GET I_E1 PICT '9'
@16, 36 SAY "DATA (ZZLLAA)="
@16,56 GET DATA1 PICT '999999'
@18,12 SAY "CANTITATE ="
@18,56 GET CANT1 PICT '999999'
read
repl umt with um1
repl magt with mag1
repl i_e with i_e1
repl data with data1
repl cant with cant1
sele 1
return
*************************************************************
* FOXPRO: APLICAIA NR. 7
ap7.prg
*************************************************************
* Modul de lucru cu meniuri orizontale i verticale
*************************************************************
SET TALK OFF
CLEAR
114
DO def
ACTI MENU m1
RETURN
* MENIURI ORIZONTALE
procedure def
defi menu m1
defi pad v1 of m1 prom 'FISIERUL STOC.DBF ' AT 5,20
on sele pad v1 of m1 acti popup mv1
* MENIURI VERTICALE
@2,5 TO 18,79 DOUBLE
defi popup mv1 from 6,20 mess ' '
defi bar 1 of mv1 prom 'HELP '
defi bar 2 of mv1 prom 'CREERE FISIER'
defi bar 3 of mv1 prom 'ACTUALIZARE FISIER'
defi bar 4 of mv1 prom 'LISTARE'
defi bar 5 of mv1 prom 'QUIT'
on sele popup mv1 do mv1
*
PROCEDURE mv1
if bar()=1
do s1
endif
if bar()=2
do s2
endif
if bar()=3
do s3
endif
if bar()=4
do s2
endif
if bar()=5
quit
endif
*
procedure s1
clear
? "procedura nr.1"
return
procedure s2
115
clear
? "procedura nr.2"
return
procedure s3
clear
? "procedura nr.3"
return
procedure s4
clear
? "procedura nr.4"
return
*************************************************************
*FOXPRO: APLICAIA NR. 8
ap8.prg
*************************************************************
ACEST PROGRAM ESTE O VERSIUNE A LUI AP7.PRG SI
LUCREAZ CU MENIURI
* ORIZONTALE I VERTICALE I DETALIAZ O PARTE DIN
PROCEDURI
*************************************************************
set talk off
clear
do def
acti menu m1
retu
procedure def
defi menu m1
defi pad v1 of m1 prom "FISIERUL STOC.DBF
" at 5,20
on sele pad v1 of m1 acti popup mv1
*
@2,5 to 18,79 double
defi popup mv1 from 6,20 mess ' '
defi bar 1 of mv1 prom "HELP "
defi bar 2 of mv1 prom "CREARE FISIER"
defi bar 3 of mv1 prom "ACTUALIZARE (ADAUGARI INREG."
defi bar 4 of mv1 prom "ACTUALIZARE (MODIFICARI INREG.)"
defi bar 5 of mv1 prom "LISTARE"
defi bar 6 of mv1 prom "QUIT"
*
on sele popup mv1 do mv1
116
*
PROCEDURE mv1
if bar()=1
do s1
endif
if bar()=2
do s2
endif
if bar()=3
do s3
endif
if bar()=4
do s4
endif
if bar()=5
do s5
endif
if bar()=6
quit
endif
*
procedure s1
? "procedura nr.1"
return
*
procedure s2
CREATE STOC.DBF
? "procedura nr.2"
return
*
procedure s3
CLEAR
STORE 0 TO CODMM,PUM,MAGM,STOCM
STORE SPACE(20) TO DENM
STORE SPACE(4) TO UMM
USE STOC
APPEND BLANK
@6,6 SAY "ACTUALIZARE FISIER STOC.DBF (ADAUGARE DE
INREGISTRARI)"
@8,3 SAY "COD MATERIAL"
117
122
MODULUL 5
GENERATOARE AUTOMATE
Sistemul de generatoare automate poate fi apelat atat utilizand facilitati
wizzard cat si prin lansarea mediilor de proiectare a spatiului de lucru pentru
fiecare din elementele enumerate mai sus. Meniul de acces la facilitatile
wizzard pentru generatoare automate se prezinta figura urmatoare.
Tipuri de rapoarte
Datele pot fi aezate n coloane distincte, ntr-un format tabelar precum foile de
calcul sau grilele (fig.10.1), sau datele unei nregistrri pot fi afiate de sus n
jos (fig.10.2). Datele se pot afia ca atare sau pot fi grupate, totalizate sau
subtotalizate. Se pot include grafice reprezentative pentru valori diferite. La
rularea raportului, datele subliniaz valori din tabele, vederi, interogri sau
cursori, dar i cmpuri calculate, ca rezultat al unor funcii definite de utilizator.
Se alege opiunea New din meniul File, click pe butonul Report, apoi
click pe New Report
- din Project Manager, click pe extensia Documents, se selecteaz
pictograma Report din list i click pe butonul New, apoi se selecteaz
New Report.
- Din fereastra de comand, se tasteaz Create Report sau Modify Report
numenou
- Se creaz raportul cu utilitarul Report Wizard, se salveaz i se revine
pentru modificare
Indiferent de modalitate, Visual FoxPro va lansa Report Designer (fig.10.4)
-
126
expresii sau a unei funcii definit de utilizator; acest lucru se face prin
selectarea controlului textbox/field din caseta de unelte Report Controls i
click n zona de lucru canvas. Apare o caset de dialog ca n fig.10.5 ce
poate fi apelat i ulterior, prin click dreapta pe control i selectarea opiunii
Properties.
-
127
128
129
Caseta de dialog Text pentru stabilirea stilului i aciunii unui obiect text
Prin click pe butonul Print When se revine la caseta de dialog Print When
descris n figura anterioar. Prin caseta de dialog Text se poate aplica
acelai control asupra textului sau figurii la fel cum s-a aplicat i asupra
cmpurilor. Acelai lucru este valabil i pentru poziia unui obiect text sau
figur prin utilizarea proprietilor din caseta de opiuni Object Position.
Controalele linie i dreptunghi au n plus cteva opiuni. Prin dubluclick pe o
linie din raport se poate indica extinderea acesteia fa de zona n care se
afl. Opiunea No Stretch inhib extinderea vertical a liniilor sau
dreptunghiurilor. Opiunea Stretch Relative to Tallest Object in Group
permite extinderea pe vertical a unei linii sau a unui dreptunghi pn la
dimensiunea cea mai mare dintre obiectele grupului, iar opiunea Stretch
Relative to Height of Band permite extinderea pe vertical a liniei sau
dreptunghiului, proporional cu nlimea zonei.
131
Execuia rapoartelor
Se poate imprima ntregului raport prin urmtoarele metode:
Din Project Manager, click pe extensia Documents, click pe un raport i
click pe butonul Print din bara Standard
Din fereastra de comand, sau din codul surs, se tasteaz comanda Report
Form care are sintaxa:
REPORT FORM numeraport TO PRINT | PREVIEW | TO numefiier | FOR
expresia de filtrare
Rapoartele sunt formatate pentru a rula pe imprimanta implicit selectat, iar
dac acelai raport se ruleaz pe o alt imprimant, aliniamentul i spaierea
vor diferi, dac cele dou imprimante nu au acelai standard.
Alegerea destinaiei
Folosind comanda Report Form, ieirea poate fi direcionat ctre diferite
destinaii. Pentru imprimarea raportului se utilizeaz comanda:
REPORT FORM MyReport TO PRINT
Pentru previzualizarea pe ecran a raportului se utilizeaz comanda:
REPORT FORM MyReport TO PRINT PREVIEW
Iar pentru salvarea raportului ntr-un fiier text, n format ASCII se utilizeaz
comanda:
REPORT FORM MyReport TO FILE MyFile.txt ASCII
Descriere
Caset de validare ce afieaz starea On/Off.
Caset combinat - un control sub form de list . Este
afiat numai valoarea curent selectat, restul listei
poate fi extins de utilizator .
Command button
Buton de comand pe care utilizatoul d click pentru a
induce o aciune.
Command button group Un grup de butoane de comand ce funcioneaz
mpreun.
Edit box
Caset de editare ce permite utilizatorului sa introduc
informaii sub form de ir de caractere.
Grid
Grila este un control ce deschide o tabel ntr-un
formular.
134
Image
Label
Line
List box
OLE bound control
OLE container control
Option group
Page frame
Shape
Spinner
Text box
Timer
136
137
care sunt plasate ntr-un format dorit date extrase din nregistrrile unei baze de
date. Fiierul care memoreaz informaiile privind eticheta va avea extensia
.LBX. Practic, pentru a realiza o etichet, se parcurg urmtorii pai:
1. Pornirea generatorului de etichete
2. Definirea obiectelor n fereastra de descriere a ecranului i stabilirea
proprietilor acestora
3. Obinerea, la ecran sau imprimant, a etichetelor proiectate, pe baza
datelor din tabelele active
139
CREATE
MENU
[<nume_fiier_menu
>?]
[WINDOW
<nume_fer >] [IN WINDOW <nume_fer >IN SREEN]
unde nume_fiier_menu reprezint numele fiierului n care se vor
memora opiunile utilizatorului legate de meniul definit, care se creaz ( cu
extensia.MNX).
- Prin intermediul meniului principal, activnd submeniul FILE i
apoi opiunea NEW, cu tipul de fiier selectat din lista afiat MENU i OK.
Pornirea generatorului pentru modificarea unui meniu existent,
anterior creat, se poate face n dou moduri, astfel:
- Cu comanda Foxpro:
MODIFY
MENU
[<nume_fiier_menu
>?]
[WINDOW
<nume_fer >] [IN WINDOW <nume_fer >IN SREEN] [NOWAIT]
unde nume_fiier_menu reprezint numele fiierului de tip menu, care
se modific.
- Prin intermediul meniului principal, activnd submeniul FILE i
apoi opiunea OPEN, cu tipul de fiier selectat din lista afiat MENU i
alegerea fiierului dorit.
n ambele cazuri, pe ecran apare fereastra de definire a meniului, avnd
specificat, n partea de sus a ecranului, numele fiierului indicat sau numele
generic UNTITLED. MNX care va putea fi schimbat la salvarea fiierului cu
opiunea SAVE AS.
145
146
149
MODULUL 6
PROGRAMARE ORIENTATA PE OBIECTE IN
VISUAL FOXPRO
-Instrumentele RAD faciliteaz scurtarea timpul de dezvoltare i efortul printrun editor de cod cu culori i depanator intuitiv de genul sistemului de
dezvoltare Microsoft Visual C++.
- Integrarea Microsoft Visual SourceSafe cu sistemul de control Visual
SourceSafe permite o mai bun gestionare a codului surs, indiferent dac
proiectul se lucreaz n echip sau independent.
Componenta Gallery uureaz regsirea, i utilizarea componentelor precum
biblioteci de clase , formulare, rapoarte i cod. Se pot muta rapid clasele din
Component Gallery n formulare i rapoarte prin drag&drop.
- Sunt extinse controale de tip ActiveX n clasele VisualFoxpro; se pot aduga
i schimba proprieti i metode pentru atribuirea caracteristicilor controalelor.
6.2.1 Proprietile
Datele dintr-un obiect se numesc proprieti. O proprietate (n termeni
Visual FoxPro) este o variabil de memorie care este ataat unui obiect.
Valoarea poate fi interogat i modificat folosind numele obiectului urmat de
un punct (.) i de numele proprietii (proprietile mai sunt numite i variabile
membru n unele texte). Proprietile pot avea date de orice tip care sunt valide
pentru variabilele de memorie Visual FoxPro. O proprietate exist atta timp ct
obiectul cruia i este ataat exist.
De exemplu, daca avem o proprietate denumit lIsNew care este ataat
unui obiect numit oCust, am putea interoga valoarea proprietii scriind
urmatoarea linie:
? oCust.lIsNew
153
6.2.2 Metodele
n afar de posibilitatea de a avea date ataate, obiectele trebuiesc s
desfaoare aciuni. Aceste aciuni sunt codate sub form de proceduri care sunt
ataate obiectului, denumite metode. Exist puine diferene ntre o procedur
obinuit i o metoda cu excepia modului prin care sunt chemate. O metod
este chemat scriind numele obiectului urmat de un punct i apoi numele
metodei. Spre exemplu, urmtoarea linie ilustreaz modul de apelare a metodei
denumit Print ataat fiind de obiectul oCust:
oCust.Print()
Tehnic vorbind, parantezele de la sfritul numelui metodei este
necesar dac se ateapt ntoarcerea unei valori sau dac se apeleasa metoda cu
parametrii. E de sftuit folosirea ntotdeauna a parantezelor pentru consisten,
i se menioneaz i faptul c se apeleaz o metod.
6.2.3 Evenimentele
Evenimente sunt elemente care se ntmpl. Spre exemplu apsarea pe
mouse este un eveniment. Evenimentele pot fi cauzate de aciunea unui
utilizator (ca i apsarea pe mouse) sau de nsui sistemul (ca atunci cnd apare
o eroare). Cnd se creeaz o clas (asemeanea unui buton) n Visual FoxPro, se
pot ataa cod (metode) evenimentelor . Cnd evenimentul are loc, metoda
asociat (metoda de click) este apelat automat. Se poate ataa cod chiar i
evenimentelor care se execut automat cnd obiectul este creat (evenimentul
Init) i cnd evenimentul este ters (evenimentul Destroy).
6.2.4 Clasele
n programare orientat obiect, obiectele nu sunt niciodat codate, n
locul acestora se folosete o variant mbuntit denumit clas de obiecte.
Dup aceea obiectele sunt instaniate (create) din acea clas. Toat programarea
se face la nivelul clasei. Odat ce obiectul a fost instaniat dintr-o clas tot ce
ramne de fcut este s se interacioneze cu el. Nu se vor aduga metode sau
modifica cele existente dintr-un obiect, ci mai degrab se vor aduga sau
schimba metode ntr-o clas.
Exemplu:
DEFINE CLASS myClass AS Custom
cName = ""
cType = ""
154
lIsNew = .F.
PROCEDURE ShowVals
? this.cName
? this.cType
IF this.lIsNew
? "I'M NEW"
ELSE
? "I'M OLD"
ENDIF
ENDPROC
ENDDEFINE
Paragrafele urmtoare vor descrie codul de mai sus.
Define Class myClass as Custom
Aceast linie de cod transmite programului Visual FoxPro faptul c se definete
o clas nou denumit MyClass care se bazeaz pe o alt clas denumit
Custom, care va fi descris mai tarziu n acest capitol.
cName = ""
cType = ""
lIsNew = .F.
Aceste linii de cod sunt cunoscute sub numele de cod de declaraie. n
aceast parte a definirii clasei, se listeaz variabilele membre (proprietile) ale
obiectului i ale datelor iniiale. Dac unul dintre variabilele membre este un
vector, partea de DECLARE va fi amplasat aici
PROCEDURE ShowVals
? this.cName
? this.cType
IF this.lIsNew
? "I'M NEW"
ELSE
? "I'M OLD"
ENDIF
ENDPROC
Aceasta este definiia unei metode. Apelarea unei metode execut tot
codul surs ncepnd cu PROCEDURE i terminnd cu ENDPROC. O metod
155
este similar unei proceduri FoxPro 2.x, cu excepia c metoda este apelat prin
intermediul obiectului su.
PROCEDURE Toggle
IF this.status = "OFF"
this.status = "ON"
ELSE
this.status = "OFF"
ENDIF
ENDPROC
ENDDEFINE
n exemplul clasei Light, se creaz un obiect care practic are o singur
proprietate i o metod. Aceasta funcioneaz perfect pentru ntreruptoare care
doar sting i aprind lumina, dar s presupunem c am dori s crem un
ntreruptor care s i diminueze lumina. ntreruptorul este nc aplicabil:
lumina putnd nc s fie aprins i stins. Ceea ce ne trebuie este o variant
modificat a clasei Light care s aiba aceleai capabiliti ca i clasa Light i n
plus capacitatea de a diminua lumina.
Pentru aceast ilustrare se vor stabili urmtoarele reguli: cnd se va
ncerca folosirea diminuatorului, se va trece de la lumin maxim la lumin
slab i apoi lumin maxim. Pentru a stinge sau aprinde totui lumina se va
folosi metoda ntreruptorului de baz.
Astfel se poate realiza acest lucru folosind modelul OOP:
DEFINE CLASS dimmer AS light
intensity = "FULL"
PROCEDURE DimmIt
IF this.status = "OFF"
RETURN
ENDIF
this.intensity = IIF(this.intensity = "FULL", ;
"HALF", "FULL")
WAIT WINDOW "Lights are now "+this.intensity+" power."
ENDPROC
ENDDEFINE
n originalul DEFINE al clasei (clasa Light), s-a folosit Custom ca o
clas de baz. Custom este clasa de baz cea mai simpl care este montat n
FoxPro; aceasta se folosete cnd se creaz obiecte de la zero. n DEFINE cel
157
6.2.9 Polimorfismul
Polimorfism este capacitatea de a oferi metodelor sau proprietilor din
clase diferite chiar dac ele semnific lucruri distincte.
De exemplu, s considerm exemplul cu obiectele clasei Light, care
toate au o metod numit Toggle (ntreruptor), care aprind i opresc lumina.
Acum s presupunem c trebuie s crem un cu totul alt obiect denumit
telephone (telefon). Obiectul Telephone ar putea s nu aib legtura deloc cu
obiectul Light, dar exist o metod ataat acesteia numit Toggle.
S comparm urmtoarele comenzi:
oLight = CREATEOBJECT("Light")
oPhone = CREATEOBJECT("Telephone")
oLight.Toggle() &&Runs the Toggle method from
&&the Light object
oPhone.Toggle() &&Runs the Toggle method from
&&the Phone object
S observm ct demult se aseaman oLight i oPhone. Putem apela
metoda Toggle din oricare obiect ntr-un mod similar chiar dac ar putea face
lucruri distincte.
Polimorfismul ne d posibilitatea sa stabilim standarde n loc de metode
care fac acelai lucru. De exemplu, putem avea o metod Show pentru diferite
obiecte care este desemnat s apeleze poriunea de afiare a obiectului (de ex.,
oCust.Show() ar putea afia formularul clientului, pe cnd oInv.Show() ar putea
afia formularul de factur). Frumuseea acestui lucru deriv din viziunea
utilizatorului. nseamn c putem folosi obiectele cu o mult mai mare uurin
pentru c putem realiza o interfa consistent pentru lucrul cu clase.
160
163
Container Icon
OLE Public
Scale Units
Description
Class Name
Parent Class
Class Library
164
165
Clasele pot fi bazate pe cele coninute deja n Visual FoxPro sau pe cele
create ulterior de programator. Pentru a baza clasa nou creat pe una de baz
creat tot de ctre programator se d click pe butonul (...). O fereastr de dialog
va permite indicarea unei clase care este necesar.
166
ANEXA NR. 1
PROIECT
la disciplina
BAZE DE DATE I SISTEME DE GESTIUNE
A BAZELOR DE DATE
I. CUPRINS CADRU ORIENTATIV AL PROIECTULUI:
1. Tema proiectului
2. Obiective (Prezentarea principalelor funciuni ale aplicaiei);
3. Definirea i proiectarea logic i fizic a ieirilor (machete ale
rapoartelor de ieire: ex. L1: Listare tabela 1; L2: listare tabela 2; L3:
Listare din ambele tabele.etc.);
4. Definirea i proiectarea logic i fizic a intrrilor (macheta ecranelor de
preluare date de intrare);
5. Definirea i proiectarea logic i fizic a bazei de date
. Proiectarea conceptual a bazei de date (DEA)
. Structura tabelelor bazei de date
6. Definirea i proiectarea meniurilor aplicaiei
7. Schema bloc a aplicaiei
8. Anexe: - Listarea programului surs
- Situaii de ieire cu date de test semnificative.
9. Bibliografie
II. ETAPE DE REALIZARE A PROIECTULUI (Model orientativ)
Etapa I-a: Analiza i prezentarea cerinelor aplicaiei:
- Denumirea aplicaiei;
- Prezentarea principalelor funciuni ale aplicaiei;
- Identificarea coleciilor de date i modelarea conceptual i
logic a bazei de date;
- Specificarea cerinelor funcionale i a restriciilor de realizare a
aplicaiei informatice cu baze de date.
Etapa a II-a: Proiectarea aplicaiei:
- Identificarea componentelor aplicaiei: ieiri, intrri, baze de date,
fluxul de prelucrri:
167
1.
Aprovizionarea cu materii prime i materiale
- Evidena stocurilor de materii prime i materiale (fie de gestiune:
intrri;consumuri; stoc final)
- Calculul necesarului de aprovizionat n funcie de planul de producie i de
stocul existent
- Recepia materialelor de la furnizori;
- Elaborarea NIR pentru marf intrat i evidena abaterilor;
- ncheierea contractelor de aprovizionare cu furnizorii de materiale pentru
acoperirea necesarului;
- Urmrirea realizrii contractelor:(evidena facturi pe furnizori-contractemateriale- cantiti- diferene de penalizat)
- Elaborarea unui grafic de aprovizionare (intrri materiale furnizori- date
calendaristice)
- Evidena intrrilor pe categorii de materiale i furnizori
2.
Activitatea de Producie:
- Elaborarea planului anual de producie n funcie de capaciti (produse
cantiti estimarea potenialului pietei);
- Defalcarea planului anual pe uniti de producie i perioade de timp;
- Repartizarea sarcinilor de plan pe posturi de lucru (produs-reper-operaiecantiti)
- Calculul ncrcrii utilajelor
- nregistrarea produciei realizate (post de lucru- produs/reper realizat- cantitate
evidena rebuturi)
- Urmarirea realizrii planului de fabricaie pe secii i sectoare de activitate.
3. Activitatea comercial (Desfacerea produciei):
- Gestiunea stocurilor de produse finite pe gestiuni (intrri-ieiri produse)
- Repartiia produselor pentru vnzare la diferite magazine;
- Acoperirea planului de productie cu contracte de desfacere;
- Evidena contractrilor pe beneficiari;
- Elaborarea graficului de desfacere a produselor n funcie de termenele de
livrare contractate;
- Urmrirea contractelor de desfacere pe beneficiari (sesizare intrzieri)
4.Evidena mijloacelor fixe
169
170
ANEXA NR 2
Comenzi PLIANT
1. Comenzi pentru crearea, modificarea si afisarea structurii bazei de date:
CREATE nume_fisier
MODIFY STRUCTURE
DISPLAY STRUCTURE
LIST STRUCTURE [TO PRINT][TO FILE fis][IN ALIAS nume]
COPY STRUCTURE TO fisier [FIELDS lista_cmpuri]
171
[ASCENDING/
172
UPDATE cmp cheie FROM alias REPLACE cmp1 WITH expresie [cmp2
expresie2 ] [RANDOM]
WITH
9 accepta doar cifre pentru datele caracter sau cifre si semn pentru datele
numerice
# accepta numai cifre, blank-uri si semne;
A accepta numai litere;
L accepta numai date logice;
N accepta numai litere si cifre;
X accepta folosirea oricarui caracter;
Y accepta numai caracterele Y,y,N,n;
! converteste literele in majuscule corespunzatoare;
$ afiseaza caracterul $ in locul zerourilor initiale;
. specifica o pozitie zecimala
, afiseaza virgula in pozitia specificata.
READ SAVE
?/?? [expresie [PICTURE "clauza"] [FUNCTION "lista_functii] [AT expN] [STYLE font]
??? expC
LIST [[FIELDS] exp_list] [OFF] [domeniu] [FOR cond] [WHILE cond] [TO PRINT FILE
fis]
DISPLAY [[FIELDS expr_list] [domeniu] [lista_cmp] [FOR cond] [WHILE cond] [OFF]
[TO PRINT/TO FILE fis]
8. Comenzi de calcul
AVERAGE [lista_cmpuri] [domeniu] [FOR cond] [WHILE cond] [TO lista_var/TO
ARRAY nume-sir]
CALCULATE [domeniu] optiuni [FOR cond] [WHILE cond] [TO lista_var/ TO ARRAY
nume_sir]
174
175