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 fox_2013.doc
Size : 163 Kb
Type : doc
 
Make a Free Website with Yola.