Subiecte pentru atestat - an scolar 2003-2004
~ proba SGBD ~
Sa se construiasca o baza de date Olimp.dbf care contine datele referitoare la olimpiada de informatica, cu urmatoarea structura: Nume( Caracter, 20), Clasa (caracter, 5), Total_p (Numeric, 3), Scoala (Caracter, 15). Se cere:
a. sa se afiseze elevii în ordine descrescatoare a mediilor obtinute (nume si medie);
b. sa se afiseze elevii care nu au obtinut punctajul minim, ci 16416w2214q tit de la tastatura si elevii care au obtinut punctajul maxim;
c. sa se afiseze clasamentul pe clase.
Rezolvare:
clear
set talk off
use olimp
&& pct-ul (a) elevii in ord descr a mediilor obtinute
sort to olimp1.dbf on total_p/d
use olimp1
browse fields nume,total_p
&& pct-ul (b) elevii care nu au obtinut pct min citit de la tastatura
x=0
input 'Dati punctajul minim= ' to x
browse fields nume for total_p<x nomodify
&&(b) elevii care au pct maxim
m=0
calculate max(total_p) to m
browse fields nume for total_p=m
&& (c) clasamentul pe clase
sort to olimp2 on clasa/a, total_p/d
use olimp2
browse
close databases
Sa se creeze o baza de date Examen.dbf, cu urmatoarea structura: Nume (C, 20), Clasa (C,5), Punctaj (N, 3), Varsta (N, 2). Se cere:
a. sa se copieze intr-un alt fisier cu aceeasi structura elevii care au peste 50 puncte, elevi care vor fi stersi din baza de date initiala;
b. sa se afiseze noile baze de date ordonate descrescator dupa punctaj;
c. sa se afiseze numarul de elevi cu punctaj minim
Rezolvare:
clear
set talk off
use examen
recall all
&& (a) sa se copieze in alt fis examen1 elevii>50 pcte elevii copiati vor fi stersi din && baza initiala
copy to exam1.dbf for punctaj>50
use exam1.dbf
browse
use examen
delete for punctaj>50
browse
&& (b) sa se afis noile bd ordonate descr dupa punctaj
set delete on
use examen
sort to auxi on punctaj/d
use auxi.dbf
browse
use exam1
sort to aux1.dbf on punctaj/d
use aux1.dbf
browse
&& (c) nr de elevi cu punctaj minim
use examen
x=0
calculate min(punctaj) to x
y=0
count to y for punctaj=x
? 'nr elevi cu pct minim= '+str(x)+' este '+str(y)
close data
Sa se construiasca o baza de date Geograf.dbfcu urmatoarea structura: Continent (C, 10), Tara (C, 10), Capitala (C, 15), Suprafata (N, 5), Locuitori (N, 10). Se cere:
a. sa se afiseze care este capitala si numarul de locuitori ai tarii X (x citita de la tastatura);
b.
sa
se afiseze in ce continent se afla
c. sa se afiseze tarile dintr-un continent citit de la tastatura, ordonate crescator dupa suprafata.
Rezolvare:
clear
set talk off
use geograf.dbf
&& (a) capitala si nr locuitori ai tarii x (citit de la tastat)
x=' '
accept
'pt ce
browse
fields capitala,locuitori for
&& (b)sa se afis in ce continent se afla
y=0
calculate max(locuitori) to y
browse fields continent for locuitori=y
&&(c)sa se afis tarile dintr-un continent citit de la tast,ord crescator dupa supraf
z=' '
accept 'din ce continent= ' to z
sort to geogra1.dbf on suprafata/a
use geogra1.dbf
browse
fields
close databases
Fie baza de date Carti.dbf cu informatii dintr-o biblioteca structurata astfel: Titlu (C,25), Autor (C, 20), Domeniu (C, 15), Pret (N, 5), An_ap (N, 4). Se cere;
a. determinati câte carti au aparut în anul x (x citit de la tastatura);
b. sa se calculeze câte volume ale autorului z exista în biblioteca si sa se afiseze titlulrile si anul de aparitie pentru fiecare;
c. sa se afiseze valoarea totala a cartilor din biblioteca.
Rezolvare:
clear
set talk off
&&(a) determ cate carti au aparut in anul x (citit de la tast)
x=0
input 'dati anul= ' to x
y=0
count to y for an_ap=x
? 'au aparut ' + str(y)
&&(b)cate volume ale autorului z exista in biblio si sa se afis titlurile si anul de
&& aparitie pt fiecare
z=' '
accept 'dati autorul= ' to z
v=0
count to v for autor=z
? 'nr volume pt autorul dat= '+str(v)
browse fields titlu,an_ap for autor=z
&&(c) sa se afiseze valoarea totala a cartilor din biblioteca
s=0
sum pret to s
? 'valoarea totala= '+str(s)
close databases
Pentru un hotel s-a creat o baza de date care contine urmatoarele informatii: numarul camerei (N, 3), prima zi de închiriere (D, 8), câte zile va fi închiriata camera (N, 2), un câmp care reflecta daca camera a fost sau nu închiriata (L, 1). Se cere:
a. pentru un turist care a venit la hotel sa se afiseze numerele camerelor libere;
b. daca nu exista camera libera sa se afiseze pe ce data se elibereaza prima camera;
c. sa se numere câte camere sunt ocupate si sa se afiseze numarul lor.
Rezolvare:
clear
set talk off
use hotel5.dbf
&& (a) pt un turist sa se afis nr camerelor libere
x=0
count to x for ok=.F.
? 'nr camere libere= '+str(x)
&& (b)daca nu exista cam libera sa se afis pe ce data se elibereaza prima camera
if x=0
replace uzi with pzi + kzi for ok=.t.
sort to libere.dbf on uzi/a
use libere.dbf
s=dtoc(uzi)
? 'se eliber pe data de: ' + s
else
? 'avem camere libere'
endif
&& (c) sa se numere cate camere sant ocupate si sa se afiseze nr lor
y=0
count to y for ok=.t.
? 'nr camere ocupate= '+ str(y)
browse fields nrc for ok=.t.
close databases
Se considera o baza de date Servicii.dbf cu urmatoarea structura: Nume, Zile_lucrate, Total, Bonus, Impozit (va fi initializat cu 0) care face referire la o societate de prestari servicii. Se cere:
a. sa se afiseze toti angajatii, mentionând numele si salariul lor;
b. sa se afiseze persoanele care au mai mult de 30 de zile efectuate, adaugându-se o suma bonus la total (suma va fi citita de la tastatura);
c. sa se afiseze un tabel cu datele: nume, total, bonus, impozit; impozitul fiind calculat astfel: 18% pentru persoanele fara bonus si de 25% pentru persoanele cu bonus.
Rezolvare:
clear
set talk off
use servicii.dbf
&&(a) sa se afiseze toti angajatii, mentionand numele si salariul lor
browse fields nume,total
&& (b) sa se afis pers care au >30 zile efectuate, adaugandu-se o suma bonus la
&& total(citita de la tast)
s=0
input 'care va fi bonusul= ' to s
replace bonus with s for zile_lucr>30
browse fields nume,total,bonus for zile_lucr>30
&& (c) sa se afis un tabel cu: nume,total,bonus,impozit; impozitul fiind calc astfel:
&& 18% pt pers fara bonus si de 25% pentru pers cu bonus
replace impozit with 18/100*(total) for bonus=0
replace impozit with 25/100*(total+bonus) for bonus<>0
browse fields nume,total,bonus,impozit
close databases
Sa se creeze o baza de date Masini.dbf care contine informatii despre masinile dintr-un garaj astfel: denumire, tip, firma producatoare, data achizitiei, numar km parcursi. Se cere:
a. sa se stearga din baza de date masinile care au mai mult de 600.000 km parcursi;
b. sa se afiseze masinile achizitionate într-un anumit an citit de la tastatura;
c. sa se afiseze baza de date ordonata alfabetic dupa denumire.
Rezolvare:
clear
set talk off
use masini.dbf
&& (a) sa se stearga masinile > 600000 km parcursi
delete for nrkm>600000
&& pack
&& in continuare nu tin cont de ce sterg
set delete on
browse
&& (b) sa se afiseze masinile achizitionate intr-un anumit an citit de la tastatura
x=0
input 'Dati anul dorit= ' to x
browse for year(data)=x
&& (c)sa se afiseze baza de date ordonata alfabetic dupa denumire
sort to masini1.dbf on denumire/a
use masini1
browse
close databases
Se considera o baza de date Metro.dbf cu urmatoarele câmpuri: produs, firma producatoare, data expirarii, pret productie, pret vanzare, T.V.A., cantitate. Se cere:
a. sa se calculeze pentru toate produsele valoarea T.V.A.
b. sa se afiseze produsele expirate, dupa care sa se sterga din baza de date;
c. sa se afiseze toate produsele care necesita o comanda urgenta la producator: produse care sunt în cantitatea zero.
Rezolvare:
clear
set talk off
use metro.dbf
recall all
&&(a) sa se calc pt toate prod val TVA
x=0
input 'dati procent T.V.A.= ' to x
replace all tva with pret_p*x/100
browse
&&(b) sa se afiseze prod expirate,dupa care sa se stearga din bd
d=date()
browse fields produs for data_exp<d
delete for data_exp<d
browse
&& pack
&&(c) sa se afis toate prod care necesita o comanda urgenta la producator:cantitatea=0
browse fields produs,firma for cantitate=0
close databases
Se considera doua baze de date Elevi.dbf (Clasa (C, 3), Nume (C, 20), Media (N, 5.2)) si Adrese.dbf (Nume (C, 20), Adresa (C, 40)). Se cere:
a. sa se afiseze pentru un elev citit de la tastatura: clasa, adresa si media;
b. sa se afiseze baza de date cu elevii ordonati descrescator dupa medii;
c. sa se elimine elevii corigenti (din ambele baze de date).
Rezolvare:
clear
set talk off
use elevi.dbf
&& (a) sa se afis pt un elev citit de la tast: clasa,adr si med
x=' '
accept 'pt ce elev afisez datele: ' to x
list fields clasa,media for nume=x
use adrese.dbf
list adresa for nume=x
&& (b) sa se afis baza de date cu elevii ord descr dupa medii
use elevi.dbf
sort to elevi1.dbf on media/d
use elevi1
browse
&& (c) sa se elimine elevii corigenti (din ambele baze de date)
select 1
use elevi.dbf
select 2
use adrese.dbf
select 1
scan for media<5
delete
x=nume
select 2
delete for nume=x
select 1
endscan
browse
select 2
browse
close data
Se da o baza de date Material.dbf (CodM (N, 6), DenM (C, 15);) si un fisier Furnizor.dbf (CodF (N, 6), DenF(C, 15), AdresaF (C, 20), CodM (N, 6), PretM (N, 7.2)). Se cere:
a. sa se afiseze toti furnizorii unui material citit de la tastatura;
b. sa se realizeze suma tuturor preturilor din baza de date furnizor;
c. sa se tipareasca baza de date furnizor ordonata alfabetic dupa denumirea furnizorului.
Rezolvare:
clear
set talk off
use material.dbf
&&(a) sa se afis toti furnizorii unui material citit de la tast
x=' '
y=0
accept 'dati material= ' to x
use material.dbf
scan for denm=x
y=codm
endscan
use furnizor.dbf
browse fields denf for y=codm
&&(b) sa se realizeze suma tuturor preturilor din bd furnizor
use furnizor.dbf
s=0.0
sum pretm to s
? 'suma preturilor= '+str(s)
&&(c) sa se tipareasca bd furnizor ordonata alfabetic dupa denumirea furnizorului
sort to furniz1.dbf on denf/a
use furniz1.dbf
browse
close databases
11. Pentru evidenta biletelor de calatorie vândute la o casa de bilete, fiecare bilet se înregistreaza într-o tabela care are urmatoarea structura: nr_bilet N(6), destinatie C(20), clasa C(1), pret N(10), nr_tren C(6), data_emiterii D. Se cere:
a. vizualizarea tuturor biletelor vândute pentru o destinatie specificata.
b. sa se ordoneze baza de date dupa destinatie;
c. afisarea sumei totale încasate din biletele vândute într-o perioada calendaristica specificata.
Rezolvare:
clear
set talk off
use bilete.dbf
&&(a) vizualiz tuturor biletelor vandute pt o destinatie specificata
x=' '
accept 'pt ce destinatie= ' to x
browse for destinatie=x
&&(b) sa se ordoneze bd dupa destinatie
sort to bilete1.dbf on destinatie/a
use bilete1.dbf
browse
&&(c) afis sumei totale incasate din biletele vandute intr-o perioada calendaristica
&& specificata
accept 'de la ce data= ' to data_i
datai=CTOD(data_i)
accept 'pana la ce data= ' to data_f
dataf=ctod(data_f)
s=0
scan
if (data_em>datai) .and. (data_em<dataf)
s=s+pret
endif
endscan
? 'suma totala= '+str(s)
close databases
12. Pentru evidenta ocuparii camerelor unui hotel, se organizeaza o tabela cu urmatoarea structura: nr_camera N(3), nume C(30), telefon L, televizor L, nr_paturi N(3), nr_zile N(3), pret N(8). Se cere:
a. sa se vizualizeze situatia tuturor camerelor ocupate din hotel;
b. vizualizarea persoanelor care au solicitat o camera pentru o perioada de mai mult de 10 zile si pretul platit de acestia
c. eliminarea din tabela a informatiilor despre o camera specificata prin numarul sau
Rezolvare:
clear
set talk off
use hotel.dbf
&& (a) sa se vizualizeze situatia tuturor cam coupate din hotel
browse for nume=' '
&& (b) vizualiz pers nrz>10 si pretul platit de acestia
browse fields nume,nr_zile,pret for nr_zile>10
&& (c) eliminarea unei camere specif prin nr sau
y=0
input 'ce camera doriti sa eliminati= ' to y
delete for nr_camera=y
&& pack
browse
close data
13. Pentru evidenta persoanelor arondate unui medic de familie, se organizeaza o tabela "PERSOANE.DBF" cu urmatoarea structura: cod_numeric C(13), nume C(30), data_nasterii D, adresa C(40). Fiecare consultatie a unui pacient este memorata în tabela "REGISTRU.DBF", care are urmatoarea structura: cod_numeric C(13), diagnostic C(40), data_consultatiei D. Se cere:
a. introducerea datelor unei persoane care solicita o înscrierea la medicul de familie
b. vizualizarea persoanelor arondate la medicul de familie care au fost consultate cel putin o data
în decursul lunii curente
c. eliminarea din tabela a unei persoane specificate prin codul numeric personal. Odata cu
eliminarea persoanei vor fi eliminate din tabela "REGISTRU.DBF" toate înregistrarile aferente
persoanei în cauza.
Rezolvare:
clear
set talk off
use persoane.dbf
&&(a) introd datelor unei pers care solicita inscrierea la medicul de familie
append
&&(b) vizualiz pers arondate la medicul de fam care au fost consultate cel putin odata && in decursul lunii curente
use persoane.dbf in 1
use registru.dbf in 2
d=date()
select 2
scan for month(data_cons)=month(d)
x=cod_n
select 1
list nume for cod_n=x
select 2
endscan
&&(c) elim din tabela a unei pers specif prin codul num pers odata cu elimin pers vor fi && eliminate din tabela registru.dbf toate inreg aferente pers in cauza
use persoane.dbf in 1
use registru.dbf in 2
y=' '
accept 'ce cod elimin= ' to y
select 1
scan for cod_n=y
delete
select 2
delete for cod_n=y
select 1
endscan
select 1
browse
select 2
browse
close databases
14. Pentru gestionarea produselor dintr-o magazie se utilizeaza o tabela cu urmatoarea structura: cod_produs N(4), denumire C(15), um C(4), cantitate N(6), pret_unitar N(7). Se cere:
a. afisarea tuturor produselor existente în magazie, în ordinea crescatoare a codurilor.
b. afisarea tuturor produselor care se gasesc într-o cantitate cuprinsa între doua limite date de la
tastatura
c. realizarea unei tabele cu aceeasi structura cu tabela data, dar care sa contina acele materiale
din magazie care au pretul unitar mai mare decât pretul mediu al tuturor produselor din magazie.
Rezolvare:
clear
set talk off
use magazin
&& (a) afis tut prod existente in mag, in ord cresc a codurilor
sort to maga1 on cod_p/a
use maga1
browse
&& (b) afis tut prod care se gasesc intr-o cant cuprinsa intre 2 limite date de la tast
lim1=0
lim2=0
input 'dati cantitatea limita 1= ' to lim1
input 'dati cantitatea limita 2= ' to lim2
browse for (cantitate>lim1) .and. (cantitate<lim2)
&& (c) reliz unei tabele cu aceeasi struct cu tab data,dar care sa contina acele
&& materiale din mag care au pretul unitar > pretul mediu al tuturor prod
x=0.0
average pret_u to x
? x
copy to maga2 for pret_u >x
use maga2
browse
close data
15. O agenda contine urmatoarele date structurate în tabela "AGENDA.DBF": nume C(20), data_nasterii D,
locul_nasterii C(10), adresa C(30), telefon N(6). Se cere:
a. eliminarea din tabela a informatiilor despre o persoana specificata prin numele sau
b. afisarea persoanelor nascute intr-o anumita luna pentru o localitate data.
c. cautarea unei persoane dupa numarul de telefon si afisarea datelor sale.
Rezolvare:
clear
set talk off
use agenda
recall all
&&(a)elimin din tabela a informatiilor despre o pers specif prin numnele sau
x=' '
accept 'ce pers elimin= ' to x
delete for nume=x
browse
&&(b)afis pers nascute intr-o anumita luna pt o local data
y=' '
accept 'localitate= ' to y
z=0
input 'din ce luna= ' to z
browse fields nume for (month(data_n)=z) .and. (locul_n=y)
&&(c) cautarea pers dupa nr de tel si afisarea datelor sale
nr=0
input 'ce nr tel caut= ' to nr
browse for telefon=nr
close data
16. Într-o unitate militara se pastreaza situatia angajatilor într-o baza de date cu numele ARMATA cu urmatoarea structura : NUME, GRAD, INDICE, SALAR. Se cere:
a. calculul numarului de ofiteri angajati;
b. afisarea mediei salariului din unitatea militara;
c. cautarea unei persoane angajate si afisarea informatiilor despre ea.
Rezolvare:
clear
set talk off
use armata
&&(a)calculul nr de ofiteri angajati
x=0
count to x for grad='ofiter'
nr ofiteri = '+ str(x)
&&(b)afisarea mediei salarului din unit militara
med=0.0
average salar to med
? ' salar mediu= '+str(med)
&& med cu zecimale
? med
&&(c)cautarea unei pers angajate si afis inform despre ea
y=' '
accept 'ce pers caut= ' to y
browse for nume=y
close data
17. Într-un spital se pastreaza evidenta bolnavilor într-o baza de date cu numele SPITAL cu urmatoarea structura BOLNAV, SECTIE, NRZILE, PLATA.Construiti o aplicatie care sa corespunda urmatoarelor cerinte:
a. calculul mediei nr de zile de spitalizare la fiecare sectie în parte
b. calculul sumei de bani obtinuta de spital de la toti bolnavii
c. afisarea bolnavului cu perioada de spitalizare cea mai lunga
Rezolvare:
clear
set talk off
use spital
&&(a) calc mediei nr de zile de spitaliz la fiecare sectie in parte
sort to spital1 on sectie/a
use spital1
total to grup on sectie
use grup
scan
? sectie + , ,
?? nrzile/nr
endscan
&&(b)calc sumei de bani obtinuta de spital de la toti bolnavii
y=0
sum plata to y
? 'suma= ' + str(y)
&&(c)afis bolnavului cu perioada de spitaliz cea mai lunga
z=0
calculate max(nrzile) to z
? 'perioada de spitaliz maxima= ' + str(z)
close data
18. Sa se scrie un program care sa tina evidenta abonatilor telefonici din judeul Maramures.
Programul va crea baza de date necesara (nume, prenume, localitate, adresa, nrtelefon).
a. sa afiseze numarul de telefon si adresa unui abonat introdus de la tastatura
b. sa se afiseze abonatul telefonic (nume, prenume, adresa) pentru un numar de telefon introdus
de la tastatura.
c. sa se stearga abonatii dintr-o anumita localitate data de la tastatura.
Rezolvare:
clear
set talk off
use abtel
&& (a) nr de tel si adresa unui abonat introd de la tastatura
x=' '
y=' '
accept 'Dati nume = ' to x
accept 'Dati prenume ' to y
browse fields nrtelefon,adresa for (nume=x) and (prenume=y)
&& (b) sa se afiseze abonatul tel (nume,pren,adr) pt un nr tel introd de la tastatura && de ex nr=111111
z=0
input 'Ce numar cautati= ' to z
browse fields nume,prenume,adresa for nrtelefon=z
&& (c) sa se stearga abonatii dintr-o localit data de la tast
v=' '
accept 'din ce localitate stergem= ' to v
delete for localitate=v
&& pack
browse
close databases
19. Sa se scrie un program care sa gestioneze cursantii înscrisi la o scoala de soferi. (nume, prenume, nr. total ore de conducere , punctaj realizat la testul scris final, data când s-a realizat punctajul ). Se cere:
a. sa se afiseze toti cursantii care au efectuate cel putin 28 de ore de conducere.
b. sa se afiseze toti cursantii care trebuie sa repete cursul teoretic. (au obtinut mai putin de 22 de
puncte la testul final)
c. sa se afiseze toti cursantii care nu au terminat orele de practica. (nu au cel putin 28 de ore de
conducere.
Rezolvare:
clear
set talk off
use soferi
&&(a) sa se afis toti cursantii care au efectuat cel putin 28 ore de conducere
browse fields nume,prenume,nrore for nrore>=28
&&(b)sa se afis toti cursantii care tb sa repete cursul teoretic<22 pcte la test final
browse fields nume,prenume,punctaj for punctaj <22
&&(c)sa se afis toti cursantii care nu au terminat orele de practica
&& nu au cel putin 28 ore de conducere
browse fields nume,prenume,nrore for nrore<28
close data
20. Sa se scrie un program care sa rezolve problema serviciului pe scoala a elevilor. (nume_elev, prenume elev, clasa, data când se va efectua serviciul). Se cere:
a. sa se listeze toti elevii care sunt de servici pe scoala pentru o data citita de la tastatura
b. pentru un elev citit de la tastatura sa se afiseze data în care este de servici pe scoala
c. sa se afiseze lista elevilor de serviciu in ordine alfabetica.
Rezolvare:
clear
set talk off
use scoala
&&(a)sa se listeze toti elevii care sunt de servici pe scoala
&& pt o data citita de la tastatura (ex 03.03.2004)
x=0
y=0
z=0
input 'dati luna = ' to x
input 'dati zi = ' to y
input 'dati anul = ' to z
browse for (month(data)=x) .and. (day(data)=y) .and. (year(data)=z)
&&(b)pt un elev citit de la tast sa se afis data in care este de servici pe scoala
n=' '
p=' '
accept 'nume elev = ' to n
accept 'prenume elev= ' to p
browse for (nume=n) .and. (prenume=p)
&&(c)sa se afis lista elevilor de serviciu in ordine alfabetica
sort to scoala1 on nume/a,prenume/a
use scoala1
browse
close data
|