Documente Academic
Documente Profesional
Documente Cultură
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 :
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
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ă?
*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
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
*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:
*CERINTA a)
USE ASOCIATIE.dbf
nr=0
DO WHILE(NOT EOF())
IF(RESTANTE>0)
nr=nr+1
ENDIF
SKIP
ENDDO
*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