Subiectul nr. 1
Se da fisierul de date
Elevi.dbf
Nr_matricol C(6)
Nume C(20)
Adresa C(40)
Clasa C(3)
Medie N(5,2)
a) Se cauta un elev pe baza nr.matricol (citit de la tastatura) si se afiseaza clasa, numele, adresa, media
b) Sa se creeze un nou fisier, cu aceeasi structura, pentru toti elevii dintr-o clasa citita de la tastatura.
SET TALK OFF
CLEA
USE ELEVI
INPUT [numar matricol=] TO n
LOCATE FOR NR_MATRICO=n
IF FOUND()
?nume, adresa, clasa, medie
ELSE
?[numar matricol incorrect!]
ENDIF
USE
WAIT
USE ELEVI
COPY STRU TO ELEVI2
USE ELEVI2
INPUT[dati clasa:] TO vclasa
APPE FROM ELEVI FIEL nume, nr_matrico, adresa, clasa, medie for clasa= vclasa
LIST
USE
Subiectul nr.2
O agentie de turism detine hoteluri in mai multe statiuni. Presupunem ca agentia utilizeaza (printre altele) urmatorul fisier:
Hoteluri.dbf
Statiune C(20)
Hotel C(20)
Categorie C(2)
Pret camera cu un pat N(6)
Pret camera cu 2 paturi N(6)
Pret pensiune N(6)
Observatii:
1.In momentul rularii programului fisierul Hoteluri se presupune complet.
2.Pentru simplificare, presupunem ca prin agentie exista camere libere, indiferent de hotelul solicitat de client
a) Sa se afiseze hotelurile dintr-o statiune cu o anumita categorie (statiune, hotel si preturi)
b) Sa se calculeze rezervarea facuta de un client: se citeste numarul de zile, hotelul dorit, tipul camerei, daca opteaza pentru pensiune sau nu si se afiseaza costul total.
SET TALK OFF
CLEA
USE HOTELURI
INPUT[statiune=] TO s
INPUT[categorie=] TO cat
go top
LOCATE FOR (statiune=s) .and. (categorie=cat)
IF FOUND()
LIST FIEL statiune, pretc1pat, pretc2pat, pretpens FOR (categorie=cat) .and.(statiune=s)
ELSE
?[statiunea nu exista in nomenclator!]
CONTINUE
ENDIF
waIT
zile=0
numehot=[ ]
cam=0
pens=[ ]
?[Rezervare pentru un client:]
input[numar de zile solicitat=] to zile
input[hotelul dorit=] to numehot
input[tip camera 1/2] to cam
input[pensiune da/nu] to pens
loca for hotel=numehot
IF FOUND()
?[costuri camera]
v=pretc1pat
w=pretc2pat
u=pretpens
if cam=1
p=zile*v
?[costul=],p
else
p=zile*w
?[costul=], p
endif
if pens=[da]
?[cost final cu pensiune=], u*zile+p
endif
ELSE
?[numele hotelului nu exista!]
ENDIF
USE
Subiectul nr.3
Se da fisierul:
Apart.dbf
Nr_apart
Familia
Nr_pers
Suprafata
Obs. Baza de date Apart.dbf trebuie sa contina inregistrari si pentru apartamentele goale (de exemplu, daca exista o inregistrare pentru apartamentul 20, trebuie sa existe cate o inregistrare pentru toate apartamentele de la 1 la 19, continand nr_apart si suprafata).
a) Sa se mute o persoana in/din apartament
Obs: Dintr-un apartament se pot muta maxim atatea persoane cate exista, iar daca un apartament ramane gol se va sterge numele familiei.
b) Dandu-se factura de incalzire (cheltuielile pentru incalzire se calculeaza in functie de suprafata, in metri patrati , a apartamentului) sa se afiseze lista cu cheltuielile lunare pentru incalzire pentru fiecare apartament.
set talk off
clea
clos all
defi menu meniu
defi pad opt1 of meniu prompt [mutari]
defi pad opt2 of meniu prompt [cheltuieli]
defi pad opt3 of meniu prompt [exit]
defi popup mutari from 1,0
defi bar 1 of mutari prompt [plecari]
defi bar 2 of mutari prompt [intrari]
on sele bar 1 of mutari do iesire
on sele bar 2 of mutari do intrare
on sele pad opt1 of meniu activate popup mutari
on sele pad opt2 of meniu do cheltuieli
on sele pad opt3 of meniu deac menu meniu
activate menu meniu
procedure intrare
clea
hide menu meniu
hide popup all
use apart alias xx
input [numarul apartamentului] to x
locate for nr_apart=x
if not found()
?[nu exista!]
else
if xx.nr_pers=0
clea
@5,1 say [nr. pers.:]
@5,20 get xx.nr_pers
@7,1 say [numele de familie noua:]
@7,20 get xx.familia
read
gather memvar
else
?[apartamentul este ocupat]
endi
endi
list
close all
wait
retu
procedure iesire
clea
hide menu meniu
hide popup all
use apart alias xx
input [numarul apartamentului :] to x
locate for nr_apart=x
if not found()
?[nu exista!]
else
repl xx.nr_pers with 0
endi
clos all
wait
retu
procedure cheltuieli
clea
hide menu meniu
hide popup all
b1=0
b2=0
b3=0
b4=0
b5=0
use apart alias xx
input [factura apa rece] to a
input [factura apa calda] to b
input [factura chirie] to d
input [factura incalzire] to c
sum xx.nr_pers to v1
ar=a/v1
ac=a/v1
sum xx.suprafata to v2
incalzire=c/v2
sup=d/v2
go top
?[nr_apart,nr_pers,suprafata, ac, ar, incalzire,chirie,total]
?[-------------------------------------------------------------]
do while not eof()
a1=ar*xx.nr_pers
a2=ac*xx.nr_pers
a3=incalzire*xx.suprafata
a4=sup*xx.suprafata
?nr_apart,[ ],xx.suprafata,str(a1,9),str(a2,9),str(a3,9,2),str(a4,7,2)
a5=a1+a2+a3+a4
??[ ],str(a5,7,2)
skip
endd
use
wait
retu
Subiectul nr.4
Fie fisierul:
Carti.dbf
Autor C(15)
Titlu C(20)
Editura C(10)
Cota N(6)
Imprumutat L
Data_imp D
a) Sa se achizitioneze o noua carte.
b) Sa se afiseze toate cartile ale unui anumit autor (al carui nume se introduce de la tastatura) care nu sunt imprumutate.
SET TALK OFF
CLEA
CLOSE ALL
DEFINE MENU meniu
DEFI PAD opt1 OF meniu PROMPT [ACHIZITIONARE]
DEFI PAD opt2 OF meniu PROMPT [AFISARE]
DEFI PAD opt3 OF meniu PROMPT [EXIT]
ON SELE PAD opt1 OF meniu DO p1
ON SELE PAD opt2 OF meniu DO p2
ON SELE PAD opt3 OF meniu DEAC MENU meniu
ACTI MENU meniu
CLOSE ALL
PROCEDURE p1
CLEA
HIDE MENU meniu
HIDE POPUP ALL
USE carti
APPE
LIST
WAIT
RETU
PROCEDURE p2
HIDE MENU meniu
HIDE POPUP ALL
USE carti
INPUT[nume autor=] TO x
Go top
LOCA FOR ((AUTOR=x) .and. (IMPRUMUTAT=.F.))
IF FOUND()
LIST FIEL autor, titlu For ((LOWER(AUTOR)=x) .AND. (IMPRUMUTAT=.f.))
else
?[nu avem carti in stoc de acest autor!!!]
ENDIF
WAIT
CLEA
CLOSE ALL
RETU
Subiectul nr. 5
Fie baza de date FILME.DBF care cuprinde principalele producţii cinematografice din secolul XX, cu următoarea structură:
Nume_film C(30)
Gen C(20)
Ţara C(10)
An N(4)
Regizor C(20)
a) Sa se afiseze filmele produse în România intr-un anumit an;
b) Care sunt filmele de de un anumit gen (citit de la tastatura) produse în România ?
c) Sa se creeze un nou fisier cu lista filmelor regizate de un anumit regizor.
SET TALK OFF
CLEAR
IF NOT FILE ([filme.dbf])
CREATE TABLE filme(Nume_film c(20), Gen c(20), Tara c(10), An n(4), Regizor c(20))
APPEND
ELSE
USE filme.dbf
ENDIF
LIST OFF
?[ a)]
INPUT[dati anul de productie=] to a
X=[romania]
LIST Nume_film, Gen FOR TARA=x .AND. An=a OFF
?[ b)]
INPUT[genul cautat=] TO g
LIST FIEL Nume_film, Regizor FOR ((Tara=x) .AND. (Gen=g))
?[ c)]
INPUT[numele regizorului=] TO r
COPY STRU TO filme2.dbf
USE FILME2
APPE FROM filme FOR Regizor=r
LIST
USE
Subiectul nr. 6
Biroul de vanzari al unei unitati utilizeaza urmatorul fisier care contine informatii despre clientii firmei:
Clienti.dbf
Nrcrt C(5)
Client C(20) - nume client
Adresac C(40) - adresa client
Denp C(5) - denumire produs
Data D - data livrarii
Cant_livrata N(6)
a) Sa se afiseze cantitatea livrata unui client (citit) dintr-un anumit produs (citit)
b) Sa se afiseze produsele livrate in ultimele 10 zile
SET TALK OFF
SET DATE TO BRIT
CLEA
USE clienti
INPUT[dati numele clientului=] TO n
INPUT[dati produsul=] TO p
SUM cant_livra FOR (Client=n .AND. Denp=p) TO total
?[Clientul], n, [a primit produsul], p, [in CANTITATE totala de], total
WAIT
?[livrarile pe ultimele 10 zile:]
BROW FIEL Denp FOR Data>(DATE()-10)
WAIT
USE
Subiectul nr. 7
La un oficiu postal se tine evidenta abonamentelor la reviste utilizand fisierul:
Abonament.dbf
Nr_crt N(3)
Nume_abonat C(20)
Adresa C(40)
Nume_rev C(15)
Pret N(6)
Data D
Nr_luni N(2)
unde Pret reprezinta pretul unei reviste Nume_rev, pentru fiecare abonament nou existand cate o inregistrare, iar Data reprezinta data debutului abonamentului
a) Sa se afiseze cheltuiala facuta de o anumita persoana (persoana poate aparea de mai multe ori, cu diferite abonamente, la diferite reviste)
b) Sa se inregistreze un abonament nou
c) Sa se afiseze la ce reviste a fost facut abonament in ultimele 15 zile
SET DATE TO BRIT
CLEA
USE abonament
APPE
LIST
WAIT
CLEA
n=[ ]
@2,1 SAY [numele abonatului=] GET n SIZE 1,15
READ
LOCATE FOR nume_abona=n
IF FOUND()
?[cheltuiala abonatului:] , pret*nr_luni
ELSE
?[abonatul nu a fost gasit]
ENDIF
WAIT
IF (DATE()-15)>data
BROW FIEL nume_rev
ELSE
?[nu s-au facut abonamente in perioada ceruta]
ENDI
USE
Subiectul nr. 8
Dandu-se fisierul:
Vanat.dbf
Denumire C(20)
Cod_arma C(4)
Data_1 D
Data_2 D
unde Cod_arma contine codul armei cu care este permisa vanatoarea iar Data_1 si Data_2 delimiteaza perioada in care este interzisa vanarea speciei respective (Denumire); se cere:
a) Sa se afise pentru o data specificata ce se poate vana
b) Sa se afiseze tot ce se poate vana cu un anumit tip de arma;
c) Sa se adauge un nou vanat in fisier
Obs.Perioada in care este interzisa vanarea unui animal este aceeasi in fiecare an. Se considera ca perioada Data_1 si Data_2 sunt in acelasi an.
Rezolvare 8
*Se creaza si se completeaza tabelele
*data se introduce in {^ / / } datele de tip caracter intre []
set talk off
set date to japa
set mark to[/]
set cent on
clea
?[Rezolvare punct a)]
use vanat
d={ / / }
input[data cautata] to d
brow fiel Denumire for ((d>Data_1) .and. (d<Data_2))
?[Rezolvare punct b)]
input [codul armei] to t
brow fiel Denumire for Cod_arma=t
?[Rezolvare punct c)]
Input[denumire=] to d
Input[Codul armei=] to c
Input[Vanatoare interzisa din data de=] to d1
Input[Vanatoare interzisa pana in data de =] to d2
Appe blank
Replace Denumire with d, Cod_arma with c, Data_1 with d1, Data_2 with d2
List
wait
use
Subiectul nr. 9
Pentru evidenta productiei si a exportului realizat de unitatile din judet, se utilizeaza si urmatorul fisier:
Livrari.dbf
Cod N(3)
Denumire articol C(20)
Cantitate N(5)
Pret unitar N(5)
Domeniu C(10)
Data livrarii D
Tip L (True pt. produsele livrate in tara si False pt. produsele livrate la export).
a) Sa se inregistreze o noua livrare (fara validari)
b) Sa se calculeze balanta pentru un anumit domeniu introdus de la tastatura:
Denumire articol Val. totala tara Val. totala export Balanta
(Balanta = diferenta dintre valoarea livrata in tara si la export)
Rezolvare
*OPTIUNEA 1 rezolva punctul a, opt 2 punctul b.
set talk off
clea
SET DATE TO BRIT
input [optiunea:] to opt
if opt=1
use livrari
m.cod=0
m.denumart=[ ]
m.cant=0
m.pretu=0
m.dom=[ ]
m.data={ / / }
m.tip=[ ]
NOTE la tip se scrie cu y sau n si afiseaza t sau f
@2,1 say [codul:] get m.cod size 1,3
@3,1 say [denumire articol] get m.denumart size 1,20
@4,1 say [cantitate:] get m.cant size 1,5 defa 0
@5,1 say [pret unitar:] get m.pretu size 1,5 defa 0
@6,1 say [domeniu:] get m.dom size 1,10 defa [ ]
@7,1 say [data livrarii:] get m.data picture [ / / ]
@8,1 say [tipul:] get m.tip size 1,3 picture [Y]
read
appe blank
gather memvar
repl cantitate with m.cant, pretunitar with m.pretu,domeniu with m.dom, datalivr with m.data
list
use
else
use livrari
input [domeniul] to d
te=0
ti=0
sum cantitate*pretunitar for (domeniu=d) .and. (tip=.t.) to te
sum cantitate*pretunitar for (domeniu=d) .and. (tip=.f.) to ti
?[total export:],te
?[DENUMIRE ARTICOL], [VAL.TOTALA TARA],[VAL.TOTALA EXPORT],[BALANTA]
?d,te,ti,te-ti
endi
use
Subiectul nr. 10
Pentru a realiza monografia liceului se foloseste urmatorul fisier:
Absolventi.dbf
Nume C(20)
Promotia N(4)
Clasa C(1)
Diriginte C(20)
Studii superioare L (da - TRUE/nu- FALSE)
Se cer urmatoarele situatii:
a) afisarea elevilor unei clase dintr-o anumita promotie
b) sa se creeze un nou fisier cu structura: nume, promotie, clasa, studii superioare, continand fostii elevi ai unui diriginte
REZOLVARE
set talk off
clea
use absolventi
pr=0
@2,1 say [promotia cautata] get pr size 1,6
read
brow fiel nume,clasa,diriginte,studiisup for promotia=pr
wait
Input[dati dirigintele clasei=] to k
copy stru to absolventi2 fields Nume, Promotia, Clasa,Diriginte, Studiisup
use absolventi2
appe from absolventi for Diriginte=k
list
clos all
Subiectul nr.11
Sa se scrie o aplicatie care realizeaza asistenta computerizata a unei olimpiade scolare (faza nationala) Fiecare participant trebuie sa se inscrie in momentul sosirii, datele fiind pastrate in fisierul:
Candidati.dbf
CNP C(13)
Numele C(10)
Judetul C(10)
Scoala C(20)
Clasa N(2)
Punctaj1 N(3)
Punctaj2 N(3)
Total N(3)
In cadrul olimpiadei sunt 2 probe, notate cu 100 puncte fiecare. Punctajele vor fi depuse in campurile Punctaj1 si Punctaj2 (initial nule) iar campul Total contine punctajul obtinut la ambele probe (initial 0).
a) Sa se afiseze concurentii in ordine alfabetica si pe clase (nume, judet)
b) Sa introduca punctajele obtinute de toti candidatii si sa se calculeze campul Total
c) Sa se afiseze clasamentul pentru o clasa, in ordinea descrescatoare a punctajului total (nume,total puncte, judet)
Rezolvare
*** se creaza tabelul si se introduc elevii fara punctaje
*** se ruleaza candidati.prg si se introduc punctajele
*** se sorteaza tabelul candidat.dbf in COMMAND si
*** rezulta tabelul tab_sortat.dbf cu comenzile:
***sort to tab_sortat on clasa/a, numele/a
***use tab_sortat si apoi LIST
set talk off
clea
use candidati
for i=1 to reccount() do
m.p1=0
m.p2=0
c=[ ]
input [numele candidatului] to c
@3,1 say [punctaj1] get m.p1 size 1,3 defa 0
@4,1 say [punctaj2] get m.p2 size 1,3 defa 0
read
locate for numele=c
if found()
repl punctaj1 with m.p1, punctaj2 with m.p2;
total with m.p1+m.p2
else
?[candidatul nu a fost gasit]
endi
endfor
list
wait
input[dati clasa=] to c
list fiel numele, Judetul, scoala, total for Clasa=c
use
Subiectul nr. 12
Pentru gestionarea stocului de medicamente dintr-o farmacie se foloseste si fisierul:
Medicam.dbf
Denumire C(10)
Cod C(3)
Pret N(6)
Cantitate N(5)
Data D - data intrarii pe stoc
La o aprovizionare se adauga cate o inregistrare in fisier.
a) Sa se aprovizioneze farmacia
b) Sa se afiseze stocul dintr-un anumit medicament identificat dupa cod.
c) Sa se afiseze aprovizionarile pentru o anumita perioada introdusa de la tastatura.
*** se ruleaza medicam.prg
*** optiunea 1 face aprovizionarea cu noi medicam
*** optiunea 2 afiseaza stocul unui medicament
*** cautat dupa cod
*** punctul c --se ruleaza medicaM.prg
set talk off
set date to brit
clea
input [optiunea:] to opt
if opt=1
use medicam
m.den=[ ]
m.cod=[ ]
m.pret=0
m.data={ / / }
@2,1 say [denumire:] get m.den size 1,10
@3,1 say [cod:] get m.cod size 1,3 defa [ ]
@4,1 say [pret:] get m.pret size 1,6
@5,1 say [cantitatea:] get m.cant size 1,5 defa 0
@6,1 say [data facturii:] get m.data picture [ / / ]
read
appe blank
gather memvar
repl denumire with m.d
repl cantitate with m.cant
list
use
else
if opt=2
use medicam
ccod=[ ]
input [ce cod cautati?] to ccod
locate for cod=ccod
if found()
?[stocul este:],cantitate
else
?[EROARE]
endi
endi
WAIT
?[PUNCTUL C) aprovizionarile]
INPUT[DATA DE INCEPUT=] TO D1
INPUT[DATA DE SFARSIT=] TO D2
LIST ALL FOR ((DATA>D1) .AND. (DATA <D2))
use
endi
Subiectul nr. 13
O agentie care se ocupa cu plasarea somerilor in noi locuri de munca utilizeaza fisierul:
Someri.dbf
Nume C(20)
Data nasterii D
Sex C(1)
Specialitatea C(10)
Ani de munca N(2)
Studii N(1)
Pentru studii se foloseste conventia:
fara studii 1
cu studii medii 2
cu studii superioare 3
a) Sa se afiseze toate persoanele cu studii medii pe sexe
b) Sa se afiseze persoanele cu o anumita specialitate, cu cel putin zece ani de munca si cu varsta sub 45 ani.
* OPTIUNI: 1 pentru a) si 2 pentru b)
set talk off
clea
input [optiunea:] to opt
if opt=1
use someri
input [dati sexul persoanei:]to s
if s=[b]
brow fiel nume for sex=s .and. studii=2
else
brow fiel nume for sex =s .and. studii=2
endi
use
else
use someri
input [specialitatea cautata] to sp
brow fiel nume for specialit=sp .and. animunca>=10 .and. ;
(year(date())-year(datanast))<45
endi
use
Subiectul nr. 14
Fie un fisier cu cartile dintr-o biblioteca avand urmatoarea structura:
Cod N(5)
Autor C(20)
Titlu C(20)
Domeniu C(20)
An aparitie N(4)
Editura C(20)
Sa se scrie un program care sa realizeze urmatoarele cerinte:
a) Cautarea unei carti dupa titlu.
b) Adaugarea unei inregistrari in fisier..
c) Afisarea tuturor cartilor unei edituri care au aparut intr-un anumit an, in ordinea alfabetica a autorilor.
SET TALK OFF
CLEA
IF NOT FILE ('BIBL.DBF')
CREATE TABLE BIBL (AUTOR C(20),;
TITLU C(20),DOMENIU C(20), ANAPARITIE N(10),;
EDITURA C(20))
APPE
ELSE
USE BIBL.DBF
ENDIF
LIST OFF
?[ b)]
INPUT[TITLUL CARTII CAUTATE:] TO Z
LOCATE FOR TITLU=Z
IF FOUND()
?AUTOR, DOMENIU, ANAPARITIE, EDITURA,[INREGISTRAREA=], RECNO()
ELSE
?[CARTEA CAUTATA NU EXISTA IN BIBLIOTECA !!]
ENDI
WAIT
?[ c)]
APPE
?[ d)]
INPUT[EDITURA CAUTATA:] TO Y
INPUT[ANUL DORIT=] TO K
SORT TO BIBL2 ON AUTOR/A, TITLU FOR (EDITURA=Y .AND. ANAPARITIE=K)
USE BIBL2
LIST
WAIT
CLOSE ALL
DELE FILE BIBL2.DBF
RETU
Subiectul nr. 15
Se da un fisier care sa contina informatii despre mijloacele fixe dintr-o societate comerciala:
-denumire C(20)
-nr_inventar N(9)
-an_fabricatie N(4)
-durata_functionare(in ani) N(2)
-valoare_initiala N(10)
-valoare_ramasa N(10)
Sa se scrie un program care sa realizeze intretinerea fisierului (adaugare, stergere si modificare).
Valoare ramasa se calculeaza cu formula:
val_ramasa= val_initiala - (val_initiala/durata_fuctionare) * (an_fabricatie - an curent - 1)
Rezolvare subiectul 15
Set talk off
Clea
Defi menu m
Defi pad opt1 of m prompt [adaugare]
Defi pad opt2 of m prompt [stergere]
Defi pad opt3 of m prompt [modificare]
On sele pad opt1 of m do adaugare
On sele pad opt3 of m do stergere
On sele pad opt3 of m do modificare
Acti menu m
Clear menus
Procedure adaugare
@2,2 say [denumire] get m.denumire defa [ ]
@3,2 say [nr. Inventar] get m.nr_inventa defa 0
@4,2 say [an fabric] get m.an_fabrica defa 0
@5,2 say [durata fuct] get m.durata_func defa 0
@6,2 say [valoarea inv] get m.valoare_in defa 0
Read cycle
Use inventar
Appe blank
Gather memvar
Replace all valoare_ra with (valoare_in-(valoare_in/durat_func)*(an_fabrica ;
-year(date())-1))
Retu
Procedure stergere
Use inventar
Go top
Input[nr. De inventar ce trebuie sters :] to n
Locate for nr_inventa=n
If found()
Dele
Pack
Else
?[nu exista !]
Endi
List
Retu
Procedure modificare
Use inventar
Brow
Wait
List
retu
Subiectul nr. 16.
Se da o baza de date Stoc.dbf cu structura:
- CODP N(4) : codul unui produs
- U_M C(3) : unitatea de masura a produsului
- DENP C(20) :denumirea produsului
- PRET_UNIT N(6) : pretul unitatii de produs
- CANTITATE N(6) :cantitatea existenta a produsului.
Stiind ca:
- codp este unic in baza de date
- denp se poate repeta cu semnificatia ca acelasi produs exista cu mai multe preturi, deci cu mai multe coduri, se cer urmatoarele:
1) Pretul unitar mediu al unui produs al carui nume se introduce de la tastatura;
2) Cantitatea disponibila pentru fiecare produs;
3) Adaugarea unui produs in stoc;
Rezolvare subiectul 16
SET TALK OFF
CLEA
IF NOT FILE ('STOC16.DBF')
CREATE TABLE STOC16 (CODP N(5), DENP C(10), ;
U_M C(3), PRET_UNIT N(5), CANTITATE N(5))
APPE
ELSE
USE STOC16.DBF
ENDIF
?[ 1)]
INPUT[PRODUSUL CAUTAT:] TO X
GO TOP
PMED=0
NR=0
FOR I=1 TO RECCOUNT()
IF DENP=X
PMED=PMED+PRET_UNIT
NR=NR+1
SKIP
ELSE
SKIP
ENDIF
ENDFOR
IF PMED=0
?[PRODUSUL CAUTAT NU EXISTA IN STOC]
ENDI
?[PRETUL UNITAR MEDIU AL PRODUSULUI CAUTAT:]
?PMED/NR
?[ 2)]
?[LISTA PRODUSELOR CU PRETURI UNITARE MAXIMALE:]
SORT TO S_STOC16 ON DENP, PRET_UNIT/D
USE S_STOC16
INDEX ON DENP TO S_STOC16 UNIQUE
LIST
WAIT
DELETE FILE S_STOC16
USE STOC16
?[LISTA PRODUSELOR CU PRETURI UNITARE MINIMALE:]
SORT TO S_STOC16 ON DENP, PRET_UNIT/A
USE S_STOC16
INDEX ON DENP TO S_STOC16 UNIQUE
LIST
WAIT
DELETE FILE S_STOC16
USE
?[ 3)]
USE STOC16
LIST OFF
?[ 4)]
APPE
Subiectul nr. 17.
Fie o baza de date Abonati.dbf cu structura:
- nume C(20)
- telefon N(6)
- adresa C(25)
- abonament N(3)
- minute N(4) =IMPULSURI
- Valoare N(5)
unde:
- valoare : valoarea in lei a abonamentului, calculata dupa urmatorul algoritm:
- minute<=100 => valoare =abonament
- minute>100 => valoare =abonament+(minute-100)*0.5
Sa se scrie un program care sa realizeze urmatoarele cerinte:
1) Adaugarea de noi inregistrari in baza de date cu validarile respective (nu se poate adauga un nou abonat cu acelasi numar de telefon)
2) Afisarea valorii totale a abonamentului pentru un abonat
Rezolvare subiect 17
set talk off
clea
?[punctul 1]
use abonati
go top
valoare=0
do while not eof()
do case
case impulsuri<100
replace valoare with abonament
case ((impulsuri>=100) .and. (impulsuri<200))
repl valoare with (abonament+(impulsuri-100)*150)
case ((impulsuri>=200) .and. (impulsuri<300))
repl valoare with (abonament+100*150+(impulsuri-200)*200)
case ((impulsuri>=300) .and. (impulsuri<500))
repl valoare with (abonament+100*150+100*200+(impulsuri-300)*300)
otherwise
repl valoare with (abonament+100*150+100*200+100*300+(impulsuri-500)*500)
endcase
skip
enddo
list
wait
?[punctul 2]
go top
input[numele cautat:] to n
locate for nume=n
if found()
?nume,adresa, telefon, abonament, impulsuri, valoare
else
?[numele cautat nu exista!!!]
endif
wait
clea
?[punctul 3]
@2,2 say [nume=] get m.nume defa [ ]
@3,2 say [telefon=] get m.telefon defa 0 valid dublura()
@4,2 say [adresa] get m.adresa defa [ ]
@5,2 say [abonament] get m.abonament defa 0
@6,2 say [impulsuri] get m.impulsuri defa 0
read
procedure dublura
use abonati
go top
locate for telefon=m.telefon
if found()
@10,10 say [numarul exista deja!!!]
else
appe blank
gather memvar
Endif
Retu
Subiectul nr. 18
I Se consideră fisierul Elevi.dbf cu elevii unei clase care contine cimpurile:
Nume si prenume C(20)
Limba romana N(5,2)
Matematica N(5,2)
. pentru fiecare materie cite un cimp
Purtare N(5,2)
Medie generala N(5,2)
Sa se realizeze:
1) calculul mediilor generale ale tuturor elevilor care nu sint corigenti la nici o materie si au situatia incheiata la toate materiile
2) sa se afiseze o lista cu elevii promovati in ordine descrescatoare a mediilor;
3) crearea unei baze de date cu elevii corigenti
Rezolvare subiectul 18
set talk off
clea
use elevi
?[Punctul 1-calculare medii)]
Go top
Do while not EOF()
If ((romana>=5 .and. romana<>0 .and. (mate>=5) .and. (purtare>=5. and. ;
Purtare<>0))
Repl medie with (romana+mate+purtare)/3
Endif
Skip
Endd
List
Wait
Copy stru to elevi2
?[punctul 2-clasament descrescator dupa medii]
Use elevi2
Appe from elevi fiel nume_pren, romana, mate, purtare, medie for medie>=5
Sort to elevi3 on medie desc
Use elevi3
List
Wait
?[punctul 3-corigenti]
Use elevi
Copy strtu to elevi4
Use elevi4
Appe from elevi fiel nume_pren, romana, mate, purtare, medie for ;
((romana<5 .and. romana>0) .or. mate<5 .and. mate>0) .or. (purtare<5 ;
.and. purtare >0))
List
retu
Subiectul nr. 19
I În baza de date ENEL Timişoara fiecare consumator casnic de energie electrică figurează cu :
Nume C(20)
Cod N(6)
Adresa C(25)
Index vechi N(5)
Index nou N(5)
Data scadentă D
Fiecare consumator îşi citeşte contorul (index nou ) şi se prezintă la caserie pentru plată.
Să se scrie o aplicaţie care realizează :
a) eliberarea notei de plată pentru o persoană, identificată prin nume sau cod
calculul sumei de plată se face astfel :
(Index _nou - Index _vechi)*0.3
b) introducerea unui nou abonat
c) afisarea abonatilor restantieri (care au intarziat plata cu mai mult de 60 de zile)
Rezolvare subiect 19
Set talk off
Clea
Use conel
Input[codul consumatorului=] to c1
Input[citirea contorului=] to c2
Loca for cod=c1
If found()
N=indexnou
Repl indexnou with c2
Repl indexvechi with n
If (day(date())-day(datascaden))>5
D=(day(date())-day(datascaden))
?[aveti intarziere], d, [zile]
Suma=(indexnou-indexvechi)*2500
Sumafin=suma+suma*0.1/100
?[suma de plata=], sumafin
Else
Suma=(indexnou-indexvechi)*2500
?[suma de plata=], suma
Endif
Else
?[nu exista acest cod !]
Endi
?[punctul b)]
Use conel
Appe
Wait
List
retu
Subiectul nr. 20
I La un oficiu poştal se ţine evidenţa abonamentelor la reviste utilizând fişierul:
Reviste.dbf
CNP Nume_abonat Nume_rev Pret Nr Data Nr_luni
C(13) C(20) C(15) N(6) N(1) D N(2)
unde: Pret reprezintă preţul unei reviste;
Nr reprezintă numărul de apariţii lunare.
Data indică data la care a fost făcut abonamentul; abonamentul va fi onorat de la începutul lunii următoare;
Nr_luni reprezintă numărul de luni pentru care a fost făcut abonamentul.
Se cere:
a) Să se adauge o inregistrare in baza de date
b) Să se afişeze numele revistelor la care este abonată o anumită persoană;
c) Să se calculeze valoarea totală pe luna în curs a abonamentelor la o anumită revistă al cărui nume se citeşte.
Rezolvare subiect 20
SET TALK OFF
CLEA
?[PUNCTUL A) ]
USE REVISTE
@5,5 SAY [NUME ABONAT:] GET M.NUME_ABON SIZE 1,20 DEFA [ ]
@6,5 SAY [NUME REVISTA:] GET M.NUME_REV SIZE 1,15 DEFA [ ]
@7,5 SAY [PRET=] GET M.PRET SIZE 1,6 DEFA 0
@8,5 SAY [NUMERE LUNAR=] GET M.NR SIZE 1,2 DEFA 0
@9,5 SAY [DATA ABONARII:] GET M.DATA SIZE 1,12 DEFA { / / }
@10,5 SAY [NUMAR LUNI=] GET M.NR_LUNI SIZE 1,2 DEFA 0
READ
APPE BLANK
GATHER MEMVAR
LIST
WAIT
CLEA
?[PUNCTUL B)]
@11,5 SAY [DATI NUMELE ABONATULUI CAUTAT :]
INPUT[NUMELE ] TO N
BROW FIEL NUME_REV FOR NUME_ABON=N
WAIT
CLEA
?[PUNCTUL C)]
INPUT[NUMELE REVISTEI:] TO REV
CALCULATE SUM(NR*PRET) FOR NUME_REV=REV TO P
?[VALOAREA ESTE=],P
Subiectul nr. 21
Fie baza de date ABONAT. DBF care conţine informaţii despre abonaţii unei televiziuni prin cablu, cu următoarea structură :
CNP C(13)
Nume C(20)
Adresa C(20)
NrPrograme N(4)
PreţLună N(6)
Achitat L (True/False)
a) sa se afişeze continutul bazei de date ordonat crescator dupa numele abonatilor;
b) sa se introduca noi abonaţi;
c) sa se afiseze abonatii care au plata facturii mai mare decat o anumita valoare, citita de la tastatura.
Rezolvare subiect 21
Use abonat
Clea
?[punctul a)]
Sort to abonat2 on nume
List
Delete file abonat2.dbf
?[punctul b)]
Use abonat
Appe
Wait
List
?[punctul c)]
Input[valoarea cautata=] to val
Brow fiel nume, adresa, cod for pretluna>val
Wait
retu
Subiectul nr. 22
I Avand fisierul:
Bebe.dbf:
Nume Prenume Data_nasterii Sex Den_spital Localitate
C(15) C(15) D C(1) C(15) C(15)
a) sa se afişeze toti copiii nãscuti în luna x si anul y (citite de la tastaturã) din toate localitãtile ;
b) sa se afiseze o situatie statisticã cu numãrul de copii nãscuti pe o perioadã de timp datã (interval de date):
Den. spital Localitate Nr. copii
Rezolvare subiect 22
set talk off
clea
SET DATE TO BRIT
USE BEBE
?[PUNCTUL A)]
?[AFISARE TOTI COPII DIN LUNA DORITA:]
INPUT[DATI LUNA=] TO L
BROW FIEL NUME, PRENUME,SEX,LOCALITATE FOR MONTH(DATA_NAST)=L
WAIT
CLEA
?[PUNCTUL B)]
?[AFISARE COPII NASCUTI INTRE DATA1 SI DATA2:]
D1={ / / }
D2={ / / }
INPUT[DATA1=] TO D1
INPUT[DATA2=] TO D2
COPY STRU TO BEBE2
USE BEBE2
APPE FROM BEBE
NOTE ((DATA_NAST >= D1) .AND. (DATA_NAST <= D2))
DELETE FOR DATA_NAST<D1
PACK
DELETE FOR DATA_NAST>D2
PACK
SELE DEN_SPITAL, LOCALITATE, COUNT(NUME) FROM BEBE2 GROUP BY LOCALITATE
WAIT
USE
Subiectul nr. 23
I Operatiile monetare realizate într-o bancã necesitã o accesare simplã a următoarelor informatii:
– evidenta conturilor deschise;
– evidenta operatiilor realizate în conturi (depunere/extragere din cont, creare/lichidare de cont).
Pentru aceasta se utilizează următorul fişier:
banca.dbf
Cod_titular Titular Adresa_titular Suma Cod operatie Data
C(13) C(20) C(20) N(7) C(1) D
unde
Cod_titular contine codul numeric personal dacă contul e deschis de o persoană fizică, respectiv codul fiscal în cazul unei persoane juridice, iar Suma reprezintă suma curentă existentă în cont;
Cod_operaţie este D,E,C sau L (depunere, extragere, creare sau lichidare), Data reprezinta data la care s-a efectuat operatia
Sã se creeze o aplicatie care sã realizeze înregistrarea unei operaţii (depunere, extragere, creare sau lichidare) şi actualizarea sumelor curente din conturi
Rezolvare subiect 23
SET TALK OFF
CLEA
SET DATE TO BRIT
USE BANCA
?[CE DORITI SA EFECTUATI?]
INPUT[COD OPERATIE=] TO OP
INPUT[COD TITULAR=] TO CT
GO TOP
LOCA FOR COD_TIT=CT
IF FOUND()
DO CASE
CASE OP=[D]
INPUT[SUMA DEPUSA=] TO A
REPL SUMA WITH (SUMA+(A-0.1*A/100)), DATA WITH DATE(), COD_OPER WITH OP
CASE OP=[E]
INPUT[SUMA EXTRASA=] TO B
REPL SUMA WITH (SUMA-(B+0.1*B/100)), DATA WITH DATE(), COD_OPER WITH OP
CASE OP=[L]
?[SUMA RESTITUITA=], (SUMA-SUMA*0.1/100)
DELE
PACK
ENDCASE
ELSE
?[PERSOANA CAUTATA NU ARE CONT!!]
ENDI
IF OP=[C]
@10,10 SAY [SUMA=] GET M.SUMA SIZE 1,7 DEFA 0
@11,10 SAY [TITULAR:] GET M.TITULAR SIZE 1,20 DEFA [ ]
@12,10 SAY [COD TITULAR:] GET M.COD_TIT SIZE 1,13 DEFA [ ]
@13,10 SAY [ADRESA TITULAR:] GET M.ADRESA_TIT SIZE 1,20 DEFA [ ]
READ
APPE BLANK
REPL SUMA WITH (M.SUMA-M.SUMA*0.1/100), TITULAR WITH M.TITULAR,;
COD_TIT WITH M.COD_TIT, ADRESA_TIT WITH M.ADRESA_TIT, COD_OPER WITH OP,;
DATA WITH DATE()
ENDI
LIST
Subiectul nr. 24
Fie baza de date MUZICA.DBF care cuprinde CD-urile cu producţii muzicale, cu următoarea structură:
Cod CD N(4)
Interpret C(20)
Nume_piesa C(30)
Gen C(20)
Lungime piesa N(2)
Ţara C(10)
An N(4)
a) Sa se afiseze interpretii din România dintr-un anumit an cu numele piesei cantate si genul ei;
b) Sa se introduca un CD nou;
c) Sa se afiseze piesele cu o lungime mai mare de x minute, unde x se citeste
Rezolvare subiect 24
Set talk off
Clea
Use muzica
?[punctul a)]
List fiel interpret,Nume_piesa, Gen for tara=[Romania]
Wait
?[punctul b)]
Appe
?[punctl c)]
Input[lungimea piesei=] to x
Brow fiel interpret, nume_piesa, lungimepiesa for lungime piesa>x
Wait
retu
Subiectul nr. 25
O societate de telecomunicaţii reţine în tabela telecom.dbf următoarea structură::
Ntel (nr. tel. al apelantului) C(8)
Ntela (nr. tel. al persoanei apelate) C(8)
Durata (durata convorbirii) N(3)
Zona (zona de distanţă) C(3)
Data (data apelului) D
Să se afişeze pentru un abonat introdus de la tastatură:
1) lista numerelor persoanelor apelate
2) durata convorbirilor în perioada d1 – d2, unde d1 şi d2 sunt două date calendaristice introduse de la tastatură.
Rezolvare subiect 25
Set talk off
Clea
Use telecom
?[punctul 1)]
Input[numele abonatului=] to n
List fiel Ntela for Ntel=n
Wait
?[punctul 2)]
Input[data de inceput a perioadei=] to d1
Input[data de sfarsit a perioadei=] to d2
Sele sum(durata) from telecom for Ntel=n
retu
Subiectul nr. 26
Se consideră un fişier personal.dbf ce conţine date despre angajaţii unei societăţi:
Cod N(3)
Nume C(20)
Funcţia C(15)
Data nasterii D
Adresa C(15)
Secţia N(1)
Salariul orar N(5)
Nr ore lucrate N(3)
Se cere: să se calculeze
a) salariul unui angajat (salariul se calculează ca produsul dintre orele lucrate şi salariul orar)
b) lista cu totalurile de plata pentru fiecare secţie
Rezolvare subiect 26
SET TALK OFF
CLEA
USE PERSONAL
?[PUNCTUL A)]
BROW FIEL NUME, FUNCTIA, SECTIA, SAL_ORAR, ORE_LUCR,;
SALARIU=SAL_ORAR*ORE_LUCR
WAIT
?[PUNCTUL B)]
SELE SECTIA, SUM(SAL_ORAR*ORE_LUCR) FROM PERSONAL GROUP BY SECTIA
WAIT
?[PUNCTUL C)]
SELE SECTIA, AVG(SAL_ORAR*ORE_LUCR) FROM PERSONAL GROUP BY SECTIA
WAIT
RETU
|
fox_2013.doc Size : 163 Kb Type : doc |