Documente Academic
Documente Profesional
Documente Cultură
1. Runceanu Adrian
Coperta şi design:
Silviu Runceanu
http://savepotatoes.com/
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 1
A. Consideraţii teoretice
1
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Fişier raport - .FRX
Fişier raport memo - .FRT
Fişier program - .PRG
Fişier program compilat- .PRG
Fişier program executabil - .EXE
Fişier backup - .BAK
Fişier meniu - .MNT
Fişier program meniu generat - .MPR
Fişier program meniu compilat - .MPX
Fişier proiect - .PJX
Fişier erori - .ERR
Fişier aplicaţie generală - .APP
Fişier document raport - .DOC
2
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Optiune din
Efect
meniu
Se deschide o fereastra de dialog, care ofera cateva
optiuni cu ajutorul carora se pot crea diferite fisiere:
fisiere de tip proiect ; fisiere de tip baze de date ; fisiere
de tip tabela; fisiere de tip interogare ; fisiere de tip
New . . .
views; fisiere de tip formular ; fisiere de tip program;
fisiere de tip rapoarte ; fisiere de tip etichete ; fisiere de
tip clase; fisiere de tip meniu;
fisiere de tip text
Se deschide o fereastra de dialog care permite
Open . . . deschiderea orcarui tip de fisier şi care se afla pe
calculator sau in retea
Close Inchide fereastra activa
Deschide o fereastra de dialog pentru a salva
Save informatiile din fisierul curent, sau salveaza modificarile
efectuate pana in acel moment
Se foloseste pentru crearea unei copii a fisierului curent
Save as . . .
sub o alta denumire specificata de utilizator
Save as HTML . . . Salveaza fisierul sub format HTML
3
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
4
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Optiune din
Efect
meniu
Anuleaza un numar nelimitat de schimbari facute in
sesiunea de editare curenta. Schimbarile facute dupa
Undo
ultima salvare, pe durata aceleiasi sesiuni de lucru, sunt
ireversibile.
Este efectul invers al optiunii Undo (reface ceea ce a
Redo
fost anulat cu Undo)
Muta textul selectat sau obiectul din documentul current
Cut
sil il plaseaza in Clipboard
Efectueaza o copiere a unui text selectat anterior sau a
Copy
unui obiect, plasandu-l in Clipboard
Copiaza continutul din Clipboard in locul unde este
Paste
plasat cursorul in acel moment
Este folosit la inserarea obiectelor OLE dîntr-o alta
Paste Special . . .
aplicatie intr-un câmp general.
Clear Sterge textul selectat fara copierea lui in Clipboard
Selecteaza toate obiectele din fereastra cuirenta.
Aceasta optiune este utilizata in modul de lucru Form
Select All
Designer şi Raport Designer pentru a muta sau a
formata toate obiectele in acelasi timp
Afiseaza caseta de dialog “Find” care este utilizata la
localizarea unui text intr-un fisier. Aceasta optiune ofera
Find . . . posibilitatea cautarii unui text fara a face diferentieri
intre litere mari şi mici, de la inceputul documentului
pana la sfarsit şi invers.
Permite reluarea cautarii de unde a ramas pozitionat
Find Again cursorul pentru acelasi cuvant care indeplineste aceleasi
conditii de cautare
Afiseaza caseta de dialog “Replace” care este utlizata la
Replace . . . localizarea şi inlocuirea textului respectiv in fisierul
curent.
Permite deplasarea la o anumita linie intr-un fisier
Go to line . . .
program
Similar cu Paste Special, exceptand cazul cand nu este
Insert Object . . . preluat un obiect deja existent şi cand este memorat in
Clipboard.
5
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
6
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Optiune din
Efect
meniu
Permite selectarea fontului şi a caracteristicilor acestuia,
Font . . .
in cadrul editarii unui program
Enlarge Font Permite marirea fontului utilizat in fereastra curenta
Reduce Font Permite reducerea fontului utilizat in fereastra curenta
Seteaza un singur spatiu intre randurile de text prezente
Single Space
in fereastra activa
Seteaza o linie şi jumatate ca spatiu intre randurile de
1 ½ Space
text prezente in fereastra activa
Seteaza doua linii ca spatiu intre randurile de text
Double Space
prezente in fereastra activa
Adăuga un numar de spatii inaintea liniei curente sau a
Indent
liniilor selectate din cadrul ferestrei active
Unindent Este efectul invers a optiunii Indent
Transforma linia curenta sau cele selectate in comentarii,
Comment
fiind ignorate la lansarea in executie a programului
Uncomment Anuleaza efectul optiunii Comment
Deschide optiunile de aliniere a obiectelor selctate atunci
Align
cand se luicreaza cu formulare şi rapoarte
Deschide optiunile de stabilire a marimii obiectelor
Size
selectate din cadrul formularelor şi a rapoartelor
Horizontal Furnizeaza optiuni de ajustare a spatiului, pe orizontala,
Spancing intre obiectele selectate
Vertical Furnizeaza optiuni de ajustare a spatiului, pe verticala,
Spacing intre obiectele selectate
Muta obiectele selectate inaintea obiectelor dintr-un
Bring to Front
formular sau raport
Muta obiectele selectate in spatele obiectelor dintr-un
Send to Back
formular sau raport
Grupeaza o selectie de obiecte dintr-un formular într-o
Group entitate, avand astfel posibilitatea prelucrarii simultate a
acestora
Ungroup Este efectul invers al optiunii Group
7
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Optiune
Efect
din meniu
Listeaza şi permite accesul la asistentii Visual Fozpro care
Wizards
creeaza tabele, formulare, rapoarte, interogari, etichete, etc.
Spelling . . . Permite verificarea ortografica a canpurilor text şi memo
Macros . . . Defineste şi intretine macrocomenzile asociate tastaturii
Examineaza continutul oricarei clase pentru vizualizarea
Class
proprietatilor şi metodelor ei sau codul actual utilizxat la
Browser
crearea obiectului
8
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Optiune
Efect
din meniu
Lanseaza in executie programul selectat din caseta de dialog
Do . . .
ce se activeaza
Cancel Anuleaza executia programului curent
Reia executia programului curent din starea in care a fost
Resume
suspendata aceasta executie
Opreste executia programului curent, dar nu il elimina din
Suspend
memorie
Compile . . . Converteste fisierul sursa in cod obiect
Lanseaza in executie programul curent (apare sub forma
Run
Do nume.prg)
9
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Optiune
Efect
din meniu
Aranjeaza ferestrele deschise sub forma unor dreptunghiuri
Arrange All
adiacente pe intreaga suprafata a ecranului
Hide Ascunde fereastra activa, insa nu o elimina din memorie
Sterge textul din spatiul de lucru al unei aplicatii in
Clear momentul lansarii ei inexecutie sau din fereastra de iesire
curenta şi anume fereastra Command
Cycle Trece de la o fereastra activa la alta, activand-o pe ultima
Command Activeaza fereastra de comanda şi o afiseaza deasupra
Window celorlalte
Activeaza fereastra Data Session şi o afiseaza deasupra
celorlalte. Aceasta fereasta serveste ca instrument de
Data Session
evaluare pentru monitorizarile tabelelor care sunt deschise
in fiecare ddin cele 32767 zone de lucru
10
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Optiune din
Efect
meniu
Afiseaza informatii de asistenta prin intermediul unui format
Contents
de structura
Technical Furnizeaza o lista de resurse Microsoft disponibile pentru
Support obtinerea de informatii suplimentare de asistenta.
About Afiseaza ecranul copyright dedicat produsului, care contine şi
Microsoft informatii despre posesorul licentei, data versiunii, numele
Visual Foxpro . fisierului de resurse, direcorul prestabilit şi indicativul
.. produsului (ID)
11
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 2
A. Consideratii teoretice
12
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
13
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
B. Probleme rezolvate
1. Comanda BROWSE
Considerăm tabela STUDENT.DBF (Matricol N(4),
Exemplu 1.1. Nume C(20), Prenume C(20), Cnp C(13), Grupa C(4),
Media N(5,2)). Să se efectueze următoarele operaţii:
BROWSE LOCK 3
2. Cautare şi pozitionare
14
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
3. Sortare şi duplicare
USE STUDENT
SORT TO STUD1 ON GRUPA/D, MEDIA/A FOR CNP >=
‘1212121212121’
USE
USE STUD1
BROWSE
15
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
4. Comenzi de actualizare
USE PERSONAL
DELETE ALL FOR SALARIU <= 2500000
PACK
LIST
Problema 2
Să se construiască tabela ANGAJATI.DBF cu
următoarele câmpuri:
COD N(4), NUME C(15),PRENUME C(15), NUMAR_BULETIN C(8),
SALARIU N(8), FUNCTIE C(12), DATA_N D(8), NR_COPII N(2),
ALOCATIA N(7), COSTUL_ORA_NOAPTE N(7), NUMAR_NOPTI N(2),
RETINERI N(7), REST_PLATA N(8), SPOR_NOAPTE N(6). Se cer:
să se introducă cel putin 20 înregistrări în tabelă
să se afişeze persoanele care lucrează în societate
care sunt persoanele fără copii în funcţii de administraţie?
alocaţia de stat pentru copii se calculează ca o sumă fixă înmulţită
cu numărul de copii. Treceţi în baza de date alocaţia.
modificaţi salariul prin majorare cu 15% la toţi lucrătorii în funcţii
de contabilitate, cu 30% la cei în funcţii de administraţie.
17
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
treceţi codul unei persoane ca fiind chiar numărul articolului
current
să se afişeze pentru fiecare persoană suma de primit, ştiind că
reţinerile se scad, iar sporurile şi alocaţia se adună la salariu
treceţi sporul de noapte ca fiind calculat după formula: spor noapte
= salariu/zi*nr. nopti *0.17
să se afişeze persoanele care au rest de plată <=0
toate persoanele care lucrează în funcţii de administraţie, au copii
şi sunt în vârstă de peste 60 ani, se vor pensiona (marcare
ştergere)
se vor afişa posturile vacante după pensionarea personalului
afişati care este numele persoanei care are codul 4
înaintea persoanei (cu codul 4) inseraşi o înregistrare vidă apoi
completaţi cu date
completaţi acelaşi salariu cu al primei persoane la toate celelalte
care au acceaţi funcţie
18
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 3
A. Consideraţii teoretice
19
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Exemplu 1.3.
B. Probleme rezolvate
2. Indexarea tabelelor
USE STUDENT
INDEX ON STR(MATRICOL)+NUME TAG INDEX1
LIST
Exemplu 2.2.
Considerăm tabela MECIURI.DBF cu următoarea
structură: Cod N(3), Echipa1 C(12), Echipa2 C(12) ,
Localitate C(15), Data D(8), Ora N(2). Să se completeze codul fiecărui
meci cu o informaţie care să conţină numărul înregistrării respective, iar
informaţiile din tabelă să apară în ordine alfabetică după localitatea unde
se desfăşoară meciurile.
Rezolvare:
USE MECIURI
INDEX ON LOCALITATE TAG LOC
REPLACE ALL COD WITH RECNO()
LIST
20
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Rezolvare:
USE CARTE
INDEX ON RTRIM(TITLU) TAG TITLU FOR
BETWEEN(AN_AP,1990,2000)
LIST
Rezolvare:
USE CARTE
INDEX ON STR(PRET)+STR(AN_AP,4) TAG INDEX1 FOR
UPPER(EDITURA)=”L&S INFORMAT”
LIST
21
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Problema 1
Să se construiască tabela CONTRACTE.DBF
create la data de 1 noiembrie 2002 cu toate
contractele încheiate de o societate comercială cu diverşi furnizori
pentru livrarea produselor necesare producţiei sale.Tabela are
următoarea structură:
NRC N(5), DATA D(8), FURNIZOR C(20), PRODUS C(10), CANT N(10,2),
PRET N(10), TERM_LIVR D(8). , ONORAT L(1).Unde NRC = număr
contract, DATA = data semnării contractului, TERM_LIVR = termenul de
livrare, ONORAT = arată dacă contractul a fost sau nu onorat.
Se cer:
1. să se introducă cel puţin 20 înregistrări în tabelă
2. să se afişeze toate contractele încheiate cu “SC COSTICA SRL”
anul trecut
3. aflaţi care este valoarea fiecărui contract (presupunând că pe un
contract este un singur produs) al furnizorului X (citit de la
tastatură)
4. aflaţi contractele cu termenul de livrare depăşit
5. afişati ultimele 5 înregistrări din tabelă
6. aflaţi câte contracte are furnizorul X (citit de la tastatură)
7. aflaţi dacă există vreun contract cu furnizorul X. Dacă da, afişaţi
numărul şi data acestui contract. Cum am putea afla şi
următorul contract al aceluiaşi furnizor?
8. să se indexeze descrescător înregistările tabelei după data
contractelor
9. să se identifice rapid toate contractele onorate până la data de
1 ianuarie 2004
23
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 4
A. Consideraţii teoretice
Se cer următoarele:
25
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
26
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 5
A. Consideraţii teoretice
use personal
set talk off
clear
scan
?"salariul initial este ",SALARIU," "
??"pentru persoana ",NUME
?"Salariul indexat este ",SALARIU*0.1+SALARIU
endscan
wait ‘apasa o tasta pentru terminare’
use
use personal
set talk off
clear
scan
if salariu>=1000000 and salariu<=2500000
?nume+' '+str(salariu,8)+' '+functie
endif
endscan
wait ‘apasa o tasta pentru terminare’
use
27
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Rezolvare:
USE PERSONAL
SET TALK OFF
LIST
WAIT 'TABELA INAINTE DE MODIFICARE'
SCAN
LOCATE FOR MARCA=1234
IF FOUND()
REPLACE SALARIU WITH SALARIU+SALARIU*15/100
REPLACE PRENUME WITH 'ION'
DISPLAY
WAIT
ELSE
WAIT 'LIPSA MARCA IN TABELA'
ENDIF
ENDSCAN
LIST
WAIT 'TABELA DUPA MODIFICARE'
USE
28
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
29
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
&& punctul b)
use studenti
?"Lista studentilor restantieri"
delete all for (nota1<5.00) or (nota2<5.00) or (nota3<5.00) or
(nota4<5.00) or (nota5<5.00) or (nota6<5.00)
list fields nume,prenume,nota1,nota2,nota3,nota4,nota5,nota6 for
(nota1<5.00) or (nota2<5.00) or (nota3<5.00) or (nota4<5.00) or
(nota5<5.00) or (nota6<5.00)
wait "apasa o tasta pentru trecerea la punctul urmator"
&& punctul c)
?"Lista studentilor admisi"
use studenti
list fields nume,prenume,media for media>=5.00
wait "apasa o tasta"
?"Lista studentilor restantieri"
scan
if media<5.00
display fields nume,prenume,media
endif
endscan
wait"apasa o tasta pentru terminare"
use
30
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Problema 2
Fie tabela PRODUSE.DBF cu următoarea structură:
Cod_produs N(5), Cod_magazin N(5), Cantitate N(5),
Pret N(5), cu produsele vândute la o societate comercială:
a) care este cantitatea totală din produsul x (citit de la tastatură)?
b) câte magazine are societatea respectivă?
c) afişaţi valoarea totală a vânzărilor pentru fiecare magazin.
31
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 6
Rezolvare:
În funcţie de alegerea unei opţiuni dintr-un meniu dat, se execută
operaţia selectată. Astfel:
Operaţia de adăugare - se citeşte codul unui produs şi se caută
acesta în tabelă. Dacă nu se gaseşte, atunci se citesc informaţiile
care trebuie depuse în tabelă şi se adăugă acestea la sfârşitul
tabelei. Dacă este găsit, atunci se presupune că se realizează o
intrare în stoc, astfel se citeşte doar cantitatea şi se adăugă la
stocul deja existent.
Operaţia de modificare – se citeşte codul unui produs şi se
caută în tabelă. Dacă nu este găsit, atunci se afişeaza un mesaj
corespunzător. Dacă este găsit, atunci se afişeaza valorile tuturor
câmpurilor existente în tabelă şi apoi se citesc noile valori ale
câmpurilor care vor fi asociate codului respectiv.
Operaţia de ştergere - se citeşte codul unui produs şi se caută în
tabelă. Dacă nu este găsit, atunci se afişează un mesaj
corespunzător. Dacă este găsit, atunci se afişează valorile celorlate
câmpuri ale tabelei pentru înregistrarea al cărui cod de produs a
fost citit, iar utilizatorul hotărăşte dacă îl şterge sau nu.
Operaţia de vizualizare – se afişează conţinutul tabelei făcându-
se o pauză după fiecare ecran plin de informaţii
Terminarea programului şi întoarcerea în mediul Visual Foxpro.
32
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
case optiune="A"
&& operatia de adăugare
clear
use stocuri order cod_prod
opt='D'
do while upper(opt)='D'
clear
store 0 to vcod_prod,vcant
store space(20) to vden_prod
store space(5) to vum
@10,10 say "Dati codul produsului care urmeaza sa
fie adăugat " get vcod_prod picture "99999"
read
seek vcod_prod
if not found()
@15,10 say "Dati denumirea produsului " get vden_prod function "!"
@16,10 say "Dati cantitatea " get vcant picture "999999999"
@17,10 say "Dati unitatea de masura " get vum function "!"
read
append blank
replace cod_prod with vcod_prod, den_prod
with vden_prod, stoc with vcant, um with vum
else
@20,10 say " Produsul deja exista, vom adăuga cantitatea "
@21,10 say "Dati cantitatea " get vcant picture "999999999"
read
replace stoc with stoc+vcant
33
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
endif
opt=space(1)
@40,15 say "Doriti sa continuati? [D/N]" get opt function "!"
read
enddo
use
case optiune="M"
&& operatia de modificare
clear
use stocuri order cod_prod
opt='D'
do while upper(opt)='D'
clear
store 0 to vcod_prod
@10,10 say "Dati codul produsului pe care doriti sa-l modificati " get
vcod_prod pict "99999"
read
seek vcod_prod
if not found()
@15,10 say "Produsul nu exista in tabela"
wait "apasa o tasta pentru continuare"
else
@21,25 say "denumire "
@21,45 say den_prod
@22,25 say "stoc "
@22,45 say stoc
@23,25 say "um "
@23,45 say um
store space(20) to vden_prod
store space(5) to vum
store 0 to vstoc
@33,10 say "Introduceti noile valori: "
@34,10 say "Dati denumirea produsului " get
vden_prod
@35,10 say "Dati stocul " get vstoc
@36,10 say "Dati unitatea de masura " get
vum
read
replace den_prod with vden_prod, stoc with
vstoc, um with vum
endif
@40,15 say "Doriti sa continuati? [D/N]" get opt
function "!"
read
34
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
enddo
use
case optiune="S"
clear
&& operatia de stergere
use stocuri order cod_prod
opt="D"
do while upper(opt)="D"
clear
store 0 to vcod_prod
@10,10 say "Dati codul produsului pe care doriti sa-l
stergeti " get vcod_prod pict "99999"
read
seek vcod_prod
if not found()
@15,10 say "Produsul nu exista in tabela"
wait "apasa o tasta pentru continuare"
else
@21,25 say "denumire "
@21,45 say den_prod
@22,25 say "stoc "
@22,45 say stoc
@23,25 say "um "
@23,45 say um
store space(1) to opt1
@30,10 say "Doriti sa stergeti? [D/N]" get
opt1 function "!"
read
if upper(opt1)="D"
delete
endif
endif
store space(1) to opt
@40,15 say "Doriti sa continuati? [D/N]" get opt
function "!"
read
enddo
use
case optiune="V"
clear
&& operatia de vizualizare
use stocuri order cod_prod
@15,10 say "==== LISTA STOCURI ============"
35
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
@16,10 say "--------------------------------------------------"
@17,10 say "|COD |DENUMIRE | STOC | UNITATE |"
@18,10 say "| PRODUS | PRODUS | | DE MASURA |"
@19,10 say "--------------------------------------------------"
go top
k=20
do while not eof()
@k,15 say cod_prod picture "99999"
@k,35 say den_prod picture
"XXXXXXXXXXXXXXXXXXXX"
@k,50 say stoc picture "999999999"
@k,55 say um picture "XXXXX"
k=k+1
if k>40
wait "Pentru continuare apasati o tasta"
k=20
@6,1 clear to 24,79
endif
skip
enddo
use
case optiune="T"
EXIT
otherwise
?"A-ti ales o optiune gresita"
loop
endcase
enddo
Rezolvare:
clear
set talk off
USE STUDENTI
nr=0
@10,10 say "Dati numarul de studenti care vreti sa-i introduceti " get
nr
read
for i=1 to nr
vgrupa=space(4)
vnume=space(20)
vprenume=space(20)
valgebra=0
vbaze=0
vanaliza=0
vts=0
vlimbaje=0
@11,10 say "Grupa " get vgrupa
@12,10 say "Numele " get vnume
@13,10 say "Prenumele " get vprenume
@14,10 say "Nota la algebra " get valgebra
@15,10 say "Nota la baze de date " get vbaze
@16,10 say "Nota la analiza matematica " get vanaliza
@17,10 say "Nota la teoria sistemelor " get vts
@18,10 say "Nota la limbaje de programare " get vlimbaje
read
append blank
replace grupa with vgrupa, nume with vnume, prenume with
vprenume, n_algebra with valgebra, n_baze with vbaze, n_analiza
with vanaliza, n_ts with vts, n_limbaje with vlimbaje
endfor
37
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
@10,10 say "Dati numele studentului care urmeaza a fi adăugat " get
vnume
read
seek vnume
if not found()
vgrupa=space(4)
vprenume=space(20)
valgebra=0
vbaze=0
vanaliza=0
vts=0
vlimbaje=0
@11,10 say "Grupa " get vgrupa
@13,10 say "Prenumele " get vprenume
@15,10 say "Nota la algebra " get valgebra
@17,10 say "Nota la baze de date " get vbaze
@19,10 say "Nota la analiza matematica " get vanaliza
@21,10 say "Nota la teoria sistemelor " get vts
@23,10 say "Nota la limbaje de programare " get vlimbaje
read
append blank
replace grupa with vgrupa, nume with vnume, prenume
with vprenume, n_algebra with valgebra, n_baze with vbaze,
n_analiza with vanaliza, n_ts with vts, n_limbaje with vlimbaje
else
@27,10 say " Studentul deja exista "
wait
endif
opt=space(1)
@40,15 say "Doriti sa continuati? [D/N]" get opt function "!"
read
enddo
use
&& Vizualizarea conţinutului tabelei
clear
@10,10 say "Lista studentilor "
use STUDENTI
do while not eof()
?" "+grupa+" "+nume+" "+prenume+" " +
str(n_algebra,2)+ "" + str(n_baze,2)
+""+str(n_analiza,2)+""+str(n_ts,2)+""+str(n_limbaje,2)+""+str(
media,2,2)
skip
enddo
wait
38
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 7
B. Probleme rezolvate
40
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
procedure ADĂUGARE
clear
append blank
@30,20 say "Titlu: " get titlu
@35,20 say "Autor " get autor
@40,20 say "An aparitie" get an_apar
read
return
procedure ELIMINARE
clear
an={//}
@40,20 say "Dati anul " get an
read
delete for an_apar=an
pack
return
procedure IESIRE
clear
use
set talk on
clear all
cancel
return
do while a<>b
if a>b
a=a-b
else
if a<b
b=b-a
endif
endif
enddo
return a
43
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 8
Rezolvare
m2='D'
set status off
set talk off
do while m2 $ 'Dd'
clear
m1=0
&& meniu orizontal
@1,2 say "FISIERELE: "
DEFINE MENU men1 BAR AT LINE 4
DEFINE PAD pad1 OF men1 PROMPT "1 - produse"
DEFINE PAD pad2 OF men1 PROMPT "2 - beneficiari"
DEFINE PAD pad3 OF men1 PROMPT "3 - contracte"
DEFINE PAD pad4 OF men1 PROMPT "4 - iesire"
44
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
ON SELECTION MENU men1 DO select_meniu
close all
deactivate menu men1
deactivate popup pop1
deactivate window f1
procedure select_meniu
use
do case
case PAD()="pad1"
USE PRODUSE
case PAD()="pad2"
USE BENEF
case PAD()="pad3"
45
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
USE CONTRAC
case PAD()="pad4"
m1=1
endcase
return
procedure select_popup
do case
case BAR() = 1
do adaug
case BAR() = 2
do modif
case BAR() = 3
do sterg
case BAR() = 4
DEACTIVATE POPUP pop1
endcase
return
procedure adaug
procedure modif
procedure sterg
return
2,5
Raport1 Raport2
Raport3 Raport4
Mustar Inghetata
Maioneza Papanasi
Pizza Italiana
Masline
Siciliana
pepperoni
procedure alegere
activate window f1
clear
do case
case popup()="burger"
@0,0 say "Comanda: "+popup()
@1,0 say "S-a comandat un burger cu
"+lower(prompt())
case popup()="pizza"
@0,0 say "Comanda: "+popup()
@1,0 say "S-a comandat pizza cu
"+lower(prompt())
48
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
case popup()="masline"
@0,0 say "Comanda: "+popup()
@1,0 say "S-a comandat pizza cu
"+lower(prompt()) + "masline"
case popup()="desert"
@0,0 say "Comanda: "+popup()
@1,0 say "S-a comandat
"+lower(prompt())
endcase
wait window
deactivate window f1
return
Problema 1
Să se construiască meniul următor:
1,2
lista1
lista2
lista3
20,20
adăugare stergere
modificare iesire
49
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Adăugare
20,50
Modificare
Optiunea nu
Stergere este activa
Iesire
30,75
50
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 9
Limbajul SQL
1. Submeniul Actualizări
2. Submeniul Interogări
3. Submeniul Ieşire
51
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Opţiunea Adăugari
Opţiunea Modificări
Opţiunea Ştergeri
52
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Opţiunea Interogare1
Opţiunea Interogare2
53
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Opţiunea Interogare3
Opţiunea Interogare4
54
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Opţiunea Interogare5
Opţiunea Interogare6
55
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Opţiunea Interogare7
Opţiunea Interogare8
56
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
PROCEDURE Pact
DO CASE
CASE BAR()=1
DO adaug
CASE BAR()=2
DO modif
CASE BAR()=3
DO sterg
ENDCASE
RETURN
PROCEDURE Pinterog
DO CASE
CASE BAR()=1
&& interogare salariu intre 1000000 şi 2000000
SELECT nume, sectia, salariu
FROM angajati
WHERE salariu BETWEEN 1000000 AND 2000000
CASE BAR()=2
&& interogare
use
use sectii
SELECT sectia, n_sectie
FROM sectii ORDER BY nr_dept
use
58
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
CASE BAR()=3
&& interogare
use angajati
SELECT * FROM angajati
WHERE nr_dept IN (1,2) ORDER BY nume
CASE BAR()=4
&& interogare
SELECT nume, salariu
FROM angajati
WHERE functie = 'inginer' AND nr_dept = 2
CASE BAR()=5
&& interogare
SELECT nume, salariu
FROM angajati
WHERE nume LIKE '%POP%' OR nume LIKE '%ION%'
CASE BAR()=6
&& Afisati lista angajatilor şi salariile marite cu 15%
SELECT nr_dept, nume, round(salariu*1.15,2) sal_nou
FROM angajati
CASE BAR()=7
&& Gasiti salariul minim, salariul maxim şi salariul mediu al
tuturor angajatilor
SELECT MAX(salariu), MIN(salariu), AVG(salariu)
FROM angajati
CASE BAR()=8
&& Afisati salariul mediu pentru fiecare tip de functie
SELECT functie, AVG(salariu) AVERAGE
FROM angajati
GROUP BY functie
ENDCASE
RETURN
PROCEDURE Piesire
DO CASE
CASE BAR()=1
CLEAR
DEACTIVATE MENU
CANCEL
CASE BAR()=3
QUIT
ENDCASE
RETURN
59
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
&& -------------------------------------
procedure adaug
&& adăugarea a mai multor înregistrări noi
set status off
clear
&& indexam tabela dupa câmpul MARCA ca sa putem accesa
rapid fiecare înregistrare
index on marca tag marca
vmarca=0
vnume=space(10)
vpren=space(10)
vfunc=space(10)
vsal=0
vsect=0
vdept=0
optiune="D"
@2,2 say "Program de adăugare"
do while optiune="D"
&& se citeste o înregistrare care eventual va fi adăugata
@5,25 say "dati marca care va fi adăugata " get vmarca
pict "9999"
read
seek vmarca
if found()
wait "înregistrarea cu aceasta marca deja exista"
else
@10,25 say "dati numele persoanei " get vnume
@11,25 say "dati prenumele persoanei " get vpren
@12,25 say "dati functia " get vfunc
@13,25 say "dati salariu " get vsal
@14,25 say "dati sectia " get vsect
@15,25 say "dati numarul departamentului " get vdept
read
append blank
replace marca with vmarca
replace nume with vnume
replace prenume with vpren
replace functie with vfunc
replace salariu with vsal
replace sectia with vsect
replace nr_dept with vdept
60
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
@17,25 say "Mai doriti adăugare? [D/N] " get optiune
read
if optiune="N"
cancel
endif
endif
clear
enddo
return
&& -------------------------------------
procedure modif
browse
return
&& -------------------------------------
procedure sterg
&& stergerea unei înregistrări
set status off
clear
&& indexam tabela dupa câmpul MARCA ca sa putem accesa
&& rapid fiecare înregistrare
index on marca tag marca
vmarca=0
optiune="D"
@2,2 say "Program de stergere"
do while optiune="D"
&& se citeste o înregistrare care eventual va fi stearsa
@5,25 say "dati marca care va fi stearsa " get vmarca pict
"9999"
read
seek vmarca
if found()
delete
pack
wait "înregistrarea a fost stearsa!"
else
wait "înregistrarea nu exista in tabela!"
@27,25 say "Mai doriti stergere? [D/N] " get optiune
read
if optiune="N"
cancel
endif
endif enddo return
61
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 10
==========MACHETA==========
* NRAUTO:
* MARCA AUTO:
* CAPACITATE CILINDRU:
==========================
REZOLVARE :
62
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
read
seek vnr
if found()
wait “numar auto existent deja!!!!!!”
else
append blank
replace nrauto with vnr, marca with vmarca, capcil
with vcap
endif
@20,2 say “Continuati incarcarea? (d/n)” get optiune
read
enddo
close all
63
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
REZOLVARE :
*********************************************************
* *
* AGENDA DE TELEFON *
* PROGRAMUL SIMULEAZA O AGENDA ELECTRONICA DE TELEFOANE *
* *
************************************************
2007
endtext
wait' '
deactivate window f1
64
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
procedure proc_meniu
do case
case bar()=1
do p_actu
case bar()=2
do p_modi
case bar()=3
do p_caut
case bar()=4
do p_exit
endcase
retu
&&=====================================
proc p_actu
CLEAR
use agenda
@ 1,1 to 11,52 double
store " " to a_nume, a_prenume,
a_adresa, a_nr_tel, a_data, A_ORAS
@ 3,2 SAY " NUME " get a_nume picture "!!!!!!!!!!!!!!!!!!!!"
@ 4,2 say " PRENUME " get a_prenume picture "!!!!!!!!!!!!!!!!!!!!"
@ 5,2 say " ADRESA " get a_adresa picture
"STR.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
@ 6,2 say " Nr TELEFON " get a_nr_tel picture "999/9999999"
@ 7,2 say " DATA NASTERII " get a_data picture "99/99/9999"
@ 8,2 SAY " ORASUL " GET A_ORAS PICTURE "!!!!!!!!!!!!!!!!!!!!"
read
@ 10,2 say " DORITI SALVAREA DATELOR PE DISC "
65
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
define popup act from 7,35
defi bar 1 of act prompt " YES "
defi bar 2 of act prompt " NO "
on selec popup act do act
acti popup act
retu
&&=====================================
procedure act
use agenda
do case
case bar()=1
n=reccount()
a_datan=ctod(a_data)
if a_datan > date() .or. val(left (a_data,2)) > 31 .or.
val(substr(a_data,4,2)) > 12
@ 10,2 say " IMPOSIBIL "
wait ""
clear
deact popup
endif
i=1
do while i<=n
if a_nume=nume .and. a_prenume = prenume .and.
a_datan = data_nas
@ 10,2 say " ACEASTA DATA MAI EXISTA IN ACESTA BAZA
DE DATE "
wait ""
clear
deacti popup
endif
go i
i=i+1
enddo
go bottom
append blank
replace nume with a_nume
replace prenume with a_prenume
replace adresa with a_adresa
replace nrtel with a_nr_tel
replace data_nas with a_datan
REplace oras with a_oras
66
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
do sort
deac popup
case bar()=2
clear
deacti popup
endcase
return
&&=====================================
proc p_modi
USE AGenda
browse
do sort
return
&&=====================================
proc p_caut
clear
defi popup caut from 0,0
defi bar 1 of caut prompt " NUME "
DEfi bar 2 of caut prompt " PRENUME "
defi bar 3 of caut prompt " ADRESA "
defi bar 4 of caut prompt " DATA NASTERII "
defi bar 5 of caut prompt " Nr. TELEFON "
on selec popup caut do caut1
activate popup caut
retur
&&=====================================
proc caut1
do case
case bar()=1
do nume
case bar()=2
do prenume
case bar()=3
do adresa
case bar()=4
do data_nase
case bar()=5
do nr
endcase
67
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
return
&&=====================================
proc nume
use agenda
clear
@ 10,0 say " CALCULATORUL CAUTA TOATE PERSOANELE CU
NUMELE INTRODUS DE D-VOASTRA "
NUM1=" "
?
?
@ 12,2 SAY " INTRODUCETI NUMELE " GET num1 PICTURE
"!!!!!!!!!!!!!!!!!!!!"
READ
n=reccount()
clear
i=0
wqw=1
z=0
q=0
k=0
define window ert from 10,10 to 32,100 panel color g+/bg
activate wind ert
do while i<n
i=i+1
go i
if k/6=int(k/6) .AND. K<>0
wait "APASATI O TASTA PENTRU PAGINA URMATOARE DE
INREGISTRARI"
clear
k=0
Q=0
endif
if nume=num1
do scc
endif
enddo
wait "APASATI O TASTA PENTRU A CONTINUA"
CLEAR WIND
DEACT WIND ERT
clear
if z=0
68
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
@ 11,1 say " NU S-A GASIT NICI O PERSOANA CU NUMELE
INTRODUS DE D-VOASTRA"
wait ""
ENDIF
clear
deactivate popup
return
&&=====================================
proc sort
clear
use agenda
!del aged.dbf
sort to aged on nume /a,prenume /a
use
!del agenda.dbf
use aged
sort to agenda on nume /a ,prenume /a
close all
retu
&&=====================================
PROC scc
@ 0,30 say " GASITI "
@ 2+q,3 get nume
@ 3+q,3 get prenume
@ 2+q,30 get adresa
@ 3+q,30 get data_nas
@ 3+q,50 get nrtel
@ 2+q,0 get wqw picture "99"
@ 4+q,30 get oras picture "!!!!!!!!!!!!!!!!!!!!"
k=k+1
q=q+3
wqw=wqw+1
z=z+1
retu
&&=====================================
proc prenume
use agenda
clear
69
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
@ 10,0 say " CALCULATORUL CAUTA TOATE PERSOANELE CU
PRENUMELE INTRODUS DE D-VOASTRA"
pren1=" "
@ 12,2 say " INTRODUCETI PRENUMELE " GET PREN1 picture
"!!!!!!!!!!!!!!!!!!!!"
read
n=reccount()
clear
i=0
q=0
k=0
wqw=1
z=0
define window zxc from 10,10 to 32,100 panel color g+/bg
acti wind zxc
go top
do while i<n
i=i+1
goto i
if k/6=int(k/6) .and. k<>0
wait "APASATI O TASTA PENTRU PAGINA URMATOARE"
CLEAR
k=0
Q=0
endif
if pren1=prenume
do scc
endif
enddo
wait "APASA O TASTA PENTRU A CONTINUA "
CLEAR WIND
deactivate wind zxc
clear
if z=0
@ 11,1 say "NU S-A GASIT NICI O PERSOANA CU PRENUMELE
INTRODUS DE D-VOASTRA"
wait ""
ENDIF
clear
deact popup
retu
70
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
&&=====================================
proc adresa
use agenda
clear
@ 10,0 say " CALCULATORUL CAUTA PERSOANELE CARE
LOCUIESC PE STRADA INTRODUSA DE D-VOASTRA "
ADRESA1=" "
@ 12,2 say " INTRODUCETI NUMELE STRAZII " GET ADRESA1
PICTURE "!!!!!!!!!!!!!!!!!!!!"
READ
n=reccount()
qu=" "
ss=" "
clear
ww=1
do while ww<=20
if substr (adresa1,ww,1)=" "
ss=substr(adresa1,1,ww-1)
exit
endif
ww=ww+1
enddo
i=0
q=0
k=0
wqw=1
z=0
define window mnb from 10,10 to 32,100 panel color g+/bg
acti wind mnb
do while i<n
i=i+1
go i
if k/5=int(k/5) .and. k<>0
wait " APASATI O TASTA PENTRU PAGINA URMATOARE "
CLEAR
k=0
Q=0
endif
qq=5
ass=upper(adresa)
do while qq<=20
71
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
if substr(ass,qq,1)=" "
qu=substr(ass,5,qq-5)
exit
endif
qq=qq+1
enddo
if ss=qu .and. len(qu)=len(ss)
do scc
endif
enddo
wait " APASA O TASTA PENTRU A CONTINUA "
CLEAR WIND
deac wind mnb
clear
if z=0
@ 11,1 say " NU S-A GASIT NICI O PERSOANA CU NUMELE
STRAZII INTRODUS DE D-VOASTRA"
WAIT ""
ENDIF
clear
deact popup
retu
&&=====================================
proc data_nase
use agenda
clear
@ 10,0 say " CALCULATORUL VA CAUTA TOATE PERSOANELE CU
DATA DE NASTERE INTRODUSA DE D-VOASTRA"
DATA=" "
@ 12,2 SAY "INTRODUCETI DATA DE NASTERE "GET DATA
PICTURE "99/99/9999"
READ
N=reccount()
clear
i=0
q=0
k=0
wqw=1
z=0
define window asd from 10,10 to 32,100 panel color g+/bg
acti wind asd
72
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
do while i<n
i=i+1
go i
if k/5=int(k/5) .and. k<>0
wait " APASATI O TASTA PENTRU PAGINA URMATOARE "
CLEAR
K=0
endif
qaz=DTOC(data_NAS)
if data=QAZ
do scc
endif
enddo
wait " APASA O TASTA PENTRU A CONTINUA "
CLEAR
DEACT WIND ASD
CLEAR
IF Z=0
@ 11,1 SAY " NU S-A GASIT NICI O PERSOANA CU DATA DE
NASTERE INTRODUSA DE D-VOASTRA"
WAIT ""
CLEAR
ENDIF
DEACT POPUP
RETU
&&=====================================
PROC NR
use agenda
clear
@ 10,0 say " CALCULATORUL CAUTA TOATE PERSOANELE CARE
AU NR. DE TELEFON INTRODUS DE D-VOASTRA"
NR=" "
@ 12,2 SAY " INTRODUCETI NUMARUL " GET NR PICTURE
"999/9999999"
READ
N=RECCOUNT()
CLEAR
I=0
Q=0
K=0
WQW=1
73
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Z=0
define window wsx from 10,10 to 32,100 panel color g+/bg
ACTI WIND WSX
DO WHILE I<N
I=I+1
GO I
IF K/5=INT(K/5) .AND. K<>0
WAIT " APASA O TASTA PENTRU PAGINA URMATOARE "
CLEAR
K=0
ENDIF
IF NR=NRTEL
DO SCC
ENDIF
ENDDO
WAIT " APASA O TASTA PENTRU A CONTINUA "
CLEAR
DEACT WIND WSX
CLEAR
IF Z=0
@ 11,1 SAY " NU S-A GASIT NICI O PERSOANA CU NR DE
TELEFON INTRODUS DE D-VOASTRA"
WAIT ""
CLEAR
ENDIF
DEACT POPUP
RETU
&&=====================================
PROC P_EXIT
CLEAR
CLOSE ALL
DEFI POPUP Y FROM 10,50
DEFI BAR 1 OF Y PROMPT " PARASIREA FOXPRO-ULUI "
DEFI BAR 2 OF Y PROMPT " PARASIREA PROGRAMULUI "
ON SELECT POPUP Y DO EW
ACTI POPUP Y
DEACT POPUP
RETU
74
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
&&=====================================
PROC EW
DO CASE
CASE BAR()=1
QUIT
CASE BAR()=2
DEACT POPUP
ENDCASE
RETURN
Se cer următoarele :
1. Să se afişeze numărul de persoane care au acelaşi nume cu cel
precizat de utilizător de la tastatură;
2. Să se afişeze numele şi prenumele persoanei al cărui număr de
telefon este citit de utilizător de la tastatură;
3. Să se ordoneze tabela după câmpurile nume şi prenume.
75
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Lucrarea 11
Probleme recapitulative
76
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
3. Sa se inregistreze un student nou; se citesc numele studentului si
denumirile cursurilor.
79
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
80
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Problema 20
Sa se construiasca pe ecran meniul urmator:
a) Selectarea
meniului
principal,
optiunea Hamburger:
b) Selectarea
meniului
principal,
optiunea Pizza:
c) Selectarea
meniului
desert:
81
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
82
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
84
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Bibliografie
85
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
86
Baze de date – Visual Foxpro 6.0
Marian Popescu Adrian Runceanu
Cuprins
87