Sunteți pe pagina 1din 13

SUBIECTUL 1

Se consideră o bază de date cu 2 tabele:


- FURNIZORI (id_furnizor, denumire, oras);
- PRODUSE (id_produs, denumire, pret, data_expirarii, id_furnizor)
a) Creați tabelele și populați-le cu date pertinente;
b) Afișați produsul/produsele cu preț minim;
c) Afișați produsele care expiră în luna curentă;
d) Afișați produsele ce provin de la furnizori din Rm. Vâlcea.

Rezolvare :
*Pr1.PRG
SET TALK OFF
CLOSE ALL
CLEAR
*Cerinta b)
USE PRODUSE.dbf
CALCULATE MIN (pret) TO PMIN
LIST FOR pret=PMIN off
USE
*Cerinta c)
USE PRODUSE.dbf
LIST FOR MONTH(data_exp)= MONTH(DATE()) OFF
USE
*Cerinta d)
USE FURNIZORI.dbf IN a
USE PRODUSE.dbf IN b
SELECT a
SELECT b
JOIN WITH FURNIZORI TO PRODUSEE FOR a->idfurnizor=b-
>idfurnizor
USE PRODUSEE.dbf
LIST id_produs,denumire,oras FOR oras='RM.VALCEA' OFF
USE

SUBIECTUL 2
Se consideră o bază de date cu 2 tabele:
- EDITURI (ideditura, denumire, adresa)
- CARTI (id_carte, titlu, autor, ideditura, anul_ap). Dacă o carte are
mai mulți autori se va reține coordonatorul.
a) Creați tabelele și populați-le cu date pertinente;
b) Afișați cartea/cărțile apărute în anul curent;
c) Afișați editura/editurile ce au adresa în Sibiu;
d) Afișați editura/editurile ce au un număr maxim de cărți.

REZOLVARE :

SET TALK OFF


CLOSE ALL
CLEAR
USE EDITURI.dbf IN A
USE CARTI.dbf IN B
*b)
SELECT B
LIST FOR an_ap = YEAR(DATE())
WAIT
*c)
SELECT A
LIST FOR ADRESA = 'SIBIU'
WAIT
*d)
SELECT B

SELECT A
JOIN WITH carti TO biblioteca FOR a->ideditura = b-
>ideditura
USE biblioteca.dbf
ALTER TABLE biblioteca ADD COLUMN nr_carti N(5)
GO TOP
X = ideditura
Y = 0
MX = 0
SCAN
IF Y > MX
MX = Y
ENDIF
IF ( ideditura = X)
Y = Y + 1
ELSE
REPLACE nr_carti WITH Y
X = ideditura
Y = 0
ENDIF
ENDSCAN
LIST FOR nr_carti = MX off
WAIT
CLOSE ALL

SUBIECTUL 3
Să se realizeze o interfață pentru gestionarea cărților dintr-o bibliotecă. Se utilizează
o bază de date cu două tabele având următoarele structuri: tabela CARTI cu
structura: ISBN, COD_AUTOR, TITLUL, ANUL_A, NR_VOL, PRET și tabela AUTORI:
COD_AUTOR, NUME, PRENUME, DATA_N, LOCALITATEA_N. Să se creeze baza de date
și tabelele, introducând 10 înregistrări.
Cerințe:
a) Introduceți o nouă carte în evidența bibliotecii, citind datele de la tastatură;
b) Afișați cărțile care au numărul maxim de volume;
c) Afișați cărțile existente în bibliotecă care au autorul cu numele și prenumele citit de
la tastatură.

REZOLVARE :

*PR3.PRG
SET TALK OFF
CLOSE ALL
CLEAR

*Cerinta a)
USE CARTI.dbf
INPUT'ISBN ' TO X
INPUT'COD_AUTOR ' TO Y
ACCEPT'TITLU ' TO T
INPUT'ANUL_A ' TO A
INPUT'NR_VOL ' TO N
INPUT'PRET ' TO P
APPEND BLANK
REPLACE isbn WITH X
REPLACE cod_autor WITH Y
REPLACE titlu WITH T
REPLACE anul_a WITH A
REPLACE nr_vol WITH N
REPLACE pret WITH P
USE

*Cerinta b)
USE CARTI.DBF
CALCULATE MAX(nr_vol) TO MAXX
LIST FOR nr_vol=MAXX OFF
USE

*Cerinta c)
USE carti.dbf IN a
USE autori.dbf IN b
SELECT a
INDEX on COD_AUTOR TO codaut1
SELECT b
INDEX on COD_AUTOR TO codaut2
SELECT a
SET RELATION TO COD_AUTOR INTO b
SELECT b
ACCEPT 'nume autor :' TO X
ACCEPT 'prenume autor :' TO Y
LIST FOR b->nume = X AND b->prenume = Y OFF
WAIT

SUBIECTUL 4
Să se realizeze o interfață utilă pentru o farmacie. Se utilizează o bază de date cu
două tabele având următoarele structuri: tabela Medicamente: ID, DENUMIRE,
COMPENSAT, ID_PROD, PRET și tabela Producători: cu structura ID_PROD,
NUME_PROD, ADRESA, ȚARA. Să se creeze baza de date și tabelele, introducând 10
înregistrări.
Cerințe:
a) Modificați prețul unui medicament, cu denumirea citită de la tastatură;
b) Listați medicamentele care nu beneficiază de compensare;
c) Afișați toate medicamentele din farmacie produse de către un producător citit de
la tastatură.

REZOLVARE : PR4

SET TALK OFF


SET SAFETY OFF
CLEAR
CLOSE ALL
*CERINTA a)
USE MEDICAMENTE.dbf
ACCEPT 'DENUMIRE' TO X
INPUT 'INTRODUCETI VALOAREA CU CARE PRETUL POATE FI
MODIFICAT' TO V
REPLACE PRET WITH V FOR DENUMIRE=X
LIST OFF
USE
WAIT
*CERINTA b)
USE MEDICAMENTE.dbf
LIST FOR COMPENSAT=.F. OFF
USE
WAIT
*CERINTA c)
ACCEPT 'PRODUCATOR : ' TO Y
USE MEDICAMENTE.dbf IN A
USE PRODUCATORI.dbf IN B
SELECT B
JOIN WITH MEDICAMENTE TO FARMACIE.dbf FOR A-
>ID_PROD=B->ID_PROD
USE FARMACIE
DISPLAY ALL FOR NUME_PROD=Y OFF
USE

SUBIECTUL 5
Să se realizeze o interfață pentru gestionarea unei colecții de albume muzicale. Se
utilizează o bază de date cu următoarele tabele: tabela Discuri ID, ID_ARTIST, ALBUM,
AN_AP, SUPORT și tabela Artiști cu structura: ID_ARTIST, NUME, PRENUME. Să se
creeze baza de date introducând 10 înregistrări.
Cerințe:
a) Afișați toate albumele care sunt imprimate pe DVD.
b) Adăugați un album nou al artistului x, cu nume și prenume citit de la
tastatură.
c) Afișați în ordinea apariției (AN_AP), toate albumele unui artist specificat.

REZOLVARE:

*PR5.PRG
SET TALK OFF
CLOSE ALL
CLEAR
*Cerinta a)
USE discuri.dbf
LIST album FOR suport='DVD' OFF
USE
*Cerinta b)
USE artisti.dbf
ACCEPT'Nume Artist' TO NUMEA
ACCEPT'Prenume Artist' TO PRENUMEA
APPEND BLANK
REPLACE nume WITH NUMEA
REPLACE prenume WITH PRENUMEA
USE
*Cerinta c)
USE discuri.dbf IN a
USE artisti.dbf IN b
ACCEPT'NUME ARTIST' TO x
SELECT a
SORT TO discuriord.dbf ON an_ap
USE discuriord.dbf IN c
SELECT b
SELECT c
JOIN WITH artisti TO albume FOR c->id_artist=b->id_artist
USE albume.dbf
LIST album FOR nume=x off
USE

SUBIECTUL 6
Să se realizeze o interfață pentru gestionarea mărfurilor dintr-un depozit de
calculatoare. Se utilizează o bază de date cu următoarele tabele: Produse:
COD_PROD, DENUMIRE, UM, CANTIT și tabela Producători: COD_PROD, NUME,
ADRESA, TELEFON.
Cerințe:
a) Afișați toate mărfurile cu stoc 0;
b) Introduceți noi produse ale unui nou producător, cu numele citit de la
tastatură;
c) Afișați numele producătorilor care produc tastaturi.
*PR6.PRG
SET TALK OFF
CLOSE ALL
CLEAR
*Cerinta a)
USE Produse.dbf
LIST FOR cantit=0 off
USE
*Cerinta b)
USE Producatori.dbf IN a
USE Produse.dbf IN b
SELECT a
SELECT b
JOIN WITH Producatori TO Depozit FOR a->cod_prod=b->cod_prod
USE Depozit.dbf
?'Introduceti datele unui nou producator : '
INPUT 'COD_PROD ' TO X
ACCEPT 'NUME ' TO X1
ACCEPT 'ADRESA ' TO Y1
ACCEPT 'TELEFON ' TO Z1
APPEND BLANK
REPLACE cod_prod WITH X,nume WITH X1,adresa WITH Y1,telefon WITH Z1
?'Introduceti datele unui nou produs : '
ACCEPT 'DENUMIRE ' TO Y
ACCEPT 'UM ' TO Z
INPUT 'CANTIT ' TO W
REPLACE denumire WITH Y,um WITH Z,cantit WITH W
USE
*Cerinta c)
USE Depozit.dbf
LIST nume FOR denumire='TASTATURA' OFF
USE

SUBIECTUL 7
În tabăra cercetașilor din acest an au participat tineri din 6 județe. Fiecare județ a fost
reprezentat de cel puțin o unitate de exploratori și cel puțin o unitate de temerari.
Fiecare unitate este formată din doi cercetași. În cadrul concursului taberei au fost
organizate 3 probe: tir, trasul cu arcul și cățărare. Pentru fiecare participant
organizatorii trebuie să rețină următoarele date: numele și prenumele, județul,
numele unității de cercetași din care provin, categoria (explorator sau temerar),
punctajul obținut (cuprins între 0 și 10 puncte) la fiecare dintre cele trei probe din
cadrul concursului. Organizatorii pregătesc festivitatea de premiere și trebuie să
obțină răspunsuri cât mai rapid la următoarele întrebări:
a) Ce județ a câștigat concursul taberei? (se acumulează punctajele unităților
din fiecare județ)
b) Care sunt numele cercetașilor care au avut punctajele cele mai mari pentru
fiecare probă în parte?
c) Care este județul cu cele mai multe unități participante în tabără?

Propuneți un model de baze de date (tabele, relații etc.) și adăugați înregistrări în


tabele astfel încât organizatorii concursului să găsească mai ușor răspunsul la
întrebările formulate.
CLOSE ALL
SET TALK OFF
SET SAFETY OFF
CLEAR

*a)
USE unitate.dbf IN a
USE participanti.dbf IN b
SELECT a
JOIN WITH participanti TO unit_part FOR a->cod_u=b->cod_u
USE unit_part.dbf IN c
USE probe.dbf IN d
SELECT c
SELECT d
JOIN WITH unit_part TO unit_part_probe FOR c->cod_p=d->cod_p
USE unit_part_probe

SORT TO baza_ord ON judet


USE baza_ord
x = ''
GO TOP
SCAN
maxx = 0
k = cod_u
nr = 1
i = judet
s = 0
DO WHILE ( judet = i AND NOT EOF())
s = s + p1 + p2 + p3
IF cod_u != k
k = cod_u
nr = nr + 1
ENDIF
SKIP
ENDDO
SKIP -1
IF nr > maxx
maxx = nr
x = judet
ENDIF

REPLACE p_total WITH s


ENDSCAN

CALCULATE MAX(p_total) TO y
? 'Judetul / judetele cu punctaj maxim: '
LIST judet for p_total = y OFF
WAIT

*b)
CALCULATE MAX (p1) TO aa
?'Cei care au obtinut punctajele cele mai mari la proba tir (proba 1) sunt:
'
LIST nume FOR p1 = aa OFF
WAIT
CALCULATE MAX (p2) TO bb
?'Cei care au obtinut punctajele cele mai mari la proba arc (proba 2) sunt:
'
LIST nume FOR p2 = bb OFF
WAIT
CALCULATE MAX (p3) TO cc
?'Cei care au obtinut punctajele cele mai mari la proba catarare (proba 3)
sunt: '
LIST nume FOR p3 = cc OFF
WAIT

*c)
?'Judetul cu cele mai multe unitati este: ', x

SUBIECTUL 8
La un concurs de dans perechile de dansatori se pot înregistra la una din cele două
probe: salsa sau tango. Știind că participanții pot fi din mai multe orașe, realizați un
model de baze de date astfel încât juriul să poată ține evidența participanților
împreună cu punctajele obținute la probele de dans (între 0 și 10).
Răspundeți la următoarele cerințe:
a) Afișați clasamentul perechilor pentru fiecare probă;
b) Care este orașul din care au fost înscriși cei mai mulți dansatori?
c) Care dintre cele două probe de dans a avut participanți mai mulți?
SET SAFETY OFF
SET TALK OFF
CLOSE ALL
CLEAR

*!* USE participanti.dbf IN a


*!* USE echipe.dbf IN b
*!* SELECT b
*!* JOIN WITH participanti TO concurs FOR a->id_echipa=b->id_echipa
*!* USE concurs

*a)
USE echipe
INDEX ON punctaj TAG ord1 DESCENDING
SET ORDER TO TAG ord1
? ' Clasamentul perechilor pentru fiecare proba '
LIST FOR proba='Salsa' OFF
WAIT
LIST FOR proba='Tango' OFF
WAIT

*b)
CLOSE ALL
USE participanti
INDEX ON oras TAG ord2
SET ORDER TO TAG ord2
GO TOP
nr=0
SCAN
i=oras
x=0
DO WHILE NOT EOF() AND oras=i
x=x+1
SKIP
ENDDO
IF x>nr
nr=x
ENDIF
SKIP -1
REPLACE numar WITH x
ENDSCAN
? 'Cei mai multi dansatori dintr-un oras au fost: ', nr
? 'Orasul / Orasele din care au fost înscrisi cei mai multi dansatori
'
LIST oras FOR numar=nr OFF
WAIT

*c)
CLOSE ALL
USE echipe
CALCULATE CNT() TO nr_salsa FOR proba='Salsa'
CALCULATE CNT() TO nr_tango FOR proba='Tango'
DO CASE
CASE nr_salsa>nr_tango
?'Proba cu cei mai multi participanti este salsa.'
CASE nr_salsa<nr_tango
?'Proba cu cei mai multi participanti este tango.'
OTHERWISE ?'Ambele probe au un numar egal de participanti.'
ENDCASE
WAIT
USE
SUBIECTUL 9
Ioana Popescu a preluat librăria „Cartea fantastică” de la mătușa sa care s-a
pensionat anul trecut. Deoarece vânzările au crescut destul de mult, Ioana nu mai
poate continua afacerea ca până acum și are nevoie de o bază de date în care să țină
inventarul cărților și situația vânzărilor: autor, titlul cărții, anul apariției, editura,
numărul exemplarelor, prețul cărții, categorie (SF, poezie, biografie, tehnică etc.),
data la care s-a efectuat vânzarea, cărțile vândute, cantitatea. Ajutați-o pe Ioana să
construiască o bază de date care să-i permită administrarea librăriei. Construiți 3
întrebări la care Ioana trebuie să răspundă (de exemplu: căutarea după autori, titluri
de cărți, editura sau tipuri de literatură, clasamentul editurilor cu cele mai multe cărți
din librărie, autorul cu cele mai mari vânzări etc.)
*PR9.PRG
SET TALK OFF
CLOSE ALL
CLEAR
*Cerinta a)
USE INVENTAR.dbf
?'Cartile aparute dupa 2010 : '
LIST titlu,autor FOR an_ap>2010 OFF
WAIT
USE
*Cerinta b)
USE INVENTAR.dbf
?'Cea mai scumpa carte : '
CALCULATE MAX(pret) TO MAXX
LIST titlu,autor,pret FOR pret=MAXX OFF
WAIT
USE
*Cerinta c)
?'Clasamentul dupa numarul de exemplare : '
USE INVENTAR.dbf
SORT TO INVENTARORD.dbf ON nr_e /D
USE INVENTARORD.dbf
LIST titlu, autor, nr_e, pret OFF
USE

SUBIECTUL 10
Să se realizeze o bază de date capabilă să gestioneze produsele dintr-un magazin de
piese auto care cumpără de la diverși producători interni piese și echipamente. Baza
de date va răspunde următoarelor cerințe:
a) Afișați producătorii din orașul x, citit de la tastatură, de la care firma
cumpără produse;
b) Afișați toate produsele care au preț maxim și se află în stoc de mai mult de
un an;
c) Micșorați prețul produselor achiziționate de la producătorii din București cu
5% și afișați pe ecran noile prețuri.
*PR10.PRG
SET TALK OFF
CLOSE ALL
CLEAR
*Cerinta a)
USE MAGAZIN.dbf
ACCEPT 'Introduce-ti orasul : ' TO X
LIST producator, oras, pret FOR oras=X OFF
WAIT
USE
*Cerinta b)
USE MAGAZIN.dbf
CALCULATE MAX(pret) TO MAXX FOR YEAR(DATE())-an_in>1
? ' Produsele care au pret maxim si se afla în stoc de mai mult de un an:'
LIST producator, pret, an_in FOR pret=MAXX AND YEAR(DATE())-an_in>1 OFF
WAIT
USE
*Cerinta c)
USE MAGAZIN.dbf
SCAN
IF(oras='BUCURESTI')
REPLACE pret WITH pret-(0.05*pret)
ENDIF
ENDSCAN
? ' Noile preturi dupa ce producatorii din BUCURESTI au redus cu 5% :'
LIST producator, pret, oras OFF
USE

SUBIECTUL 11
Să se creeze tabelele necesare memorării informațiilor despre angajații unei
societăți, organizați ierarhic pe departamente. Fiecare departament trebuie să aibă
cel puțin un angajat. Fiecare departament are un șef.
Se cere:

a) Să se afișeze departamentele al căror nume începe cu ‘M’ sau ‘P’;


b) Să se afișeze toți angajații grupați pe departamente, ordonați alfabetic după
nume;
c) Să se afișeze departamentele care au doar x angajați, x citit de la tastatură.
*PR11.PRG
SET TALK OFF
CLOSE ALL
CLEAR
*Cerinta a)
? ' Departamentele al căror nume începe cu ‘M’ sau ‘P’ : '
USE DEPARTAMENT.dbf
LIST FOR ASC(denumire)=ASC('M') OR ASC(denumire)=80 OFF
WAIT
USE
*Cerinta b)
USE DEPARTAMENT.dbf IN a
USE ANGAJATII.dbf IN b
SELECT a
SELECT b
JOIN WITH DEPARTAMENT TO SOCIETATE FOR a->cod_d=b->cod_d
USE SOCIETATE.dbf
SORT TO SOCIETATEORD.dbf ON cod_d,nume
USE SOCIETATEORD.dbf
? ' Angajatii grupati pe departamente, ordonati dupa nume : '
LIST cod_d, nume, functie, denumire OFF
WAIT
USE
*Cerinta c)
? ' Departamentele care au doar x angajati : '
SELECT a
INPUT 'X : ' TO X
LIST denumire FOR nr_a=x OFF
USE
SUBIECTUL 12
Creați baza de date călătorii formată din tabelele destinații (IDD, DENUMIRE, ȚARA,
DESCRIERE) și clienți (COD_C, NUME, PRENUME, ADRESA, TELEFON) și un al treilea
tabel care să rețină preferințele clienților în materie de destinații.
Construiți tabelele și completați cu minim 3 înregistrări tabela destinații și minim 5
tabela clienți.
a) Afișați clienții cu numele x, citit de la tastatură;
b) Afișați destinațiile din România.
c) Afișați pentru fiecare destinație, numărul clienților, care au preferat-o.
*PR12.PRG
SET TALK OFF
CLOSE ALL
CLEAR
*Cerinta a)
USE clienti.dbf
? ' Clientii care au numele citit de la tastatura '
ACCEPT 'Introduce-ti numele clientului : ' to X
LIST FOR nume=X OFF
WAIT
USE
*Cerinta b)
USE destinatii.dbf
? ' Destinatii din Romania : '
LIST idd,denumire,tara FOR tara='ROMANIA' OFF
WAIT
USE
*Cerinta c)
USE clienti.dbf IN a
USE destinatii.dbf IN b
SELECT a
SELECT b
JOIN WITH clienti TO calatorii FOR a->idd=b->idd
USE calatorii.dbf
SORT TO calatoriiord.dbf ON idd
USE calatoriiord.dbf
GO TOP
DO WHILE(NOT EOF())
I=idd
NR=0
DO WHILE(I=idd)AND(NOT EOF())
NR=NR+1
SKIP
ENDDO
SKIP-1
REPLACE nr_c WITH NR
SKIP
ENDDO
? ' Pentru fiecare destinatie, numarul clientilor, care au preferat-o '
LIST idd,denumire,tara,nr_c FOR nr_c > 0 OFF
WAIT
USE
SUBIECTUL 13
Creați o bază de date care să păstreze informațiile despre locatarii unei asociații de
proprietari și care să răspundă următoarelor interogări:
a) Numărul apartamentelor care au restanțe în luna curentă;
b) Care este familia cu restanțe ce depășesc o sumă x dată și care este numele
tuturor membrilor săi;
c) Să se afișeze locatarii și numărul apartamentului lor, care lucrează în același
loc de muncă cu cel citit de la tastatură.
SET TALK OFF
SET SAFETY OFF
CLEAR
CLOSE ALL

*CERINTA a)
USE ASOCIATIE.dbf
nr=0
DO WHILE(NOT EOF())
IF(RESTANTE>0)
nr=nr+1
ENDIF
SKIP
ENDDO

? ' Numărul apartamentelor care au restante în luna curentă: ', nr


WAIT
USE

*CERINTA b)
USE ASOCIATIE.dbf IN a
USE LOCATARI.dbf IN b
SELECT a
SELECT b
JOIN WITH ASOCIATIE TO BAZA FOR b->apart=a->apart
? ' Familia / Familiile cu restante ce depasesc o suma data : '
INPUT 'SUMA : ' TO x
USE BAZA.dbf
LIST nume,nr_loc, restante FOR restante > x OFF
WAIT
USE
*CERINTA c)
USE LOCATARI.dbf
? ' Nume si nr apartament, al carui membru lucreaza în acelasi '
? ' loc de munca cu cel citit de la tastatura '
ACCEPT 'Loc de munca : ' TO Y
LIST nume, apart, loc_munca FOR loc_munca=Y OFF
WAIT
USE

S-ar putea să vă placă și