Sunteți pe pagina 1din 236

Doina FUSARU Zenovic GHERASIM Maria ANDRONIE Adela BRA Petrior STROE

APLICAII ECONOMICE N VISUAL BASIC I ACCESS Ediia a III-a

Descrierea CIP a Bibliotecii Naionale a Romniei Aplicaii economice n Visual Basic i Access. / Doina Fusaru, Zenovic Gherasim, Maria Andronie, Adela Bra, Petrior Stroe Ed. a 3-a Bucureti, Editura Fundaiei Romnia de Mine, 2007 236 p; 24 cm ISBN 978-973-725-773-4 I. Fusaru, Doina II. Gherasim, Zenovic III. Bra, Adela IV. Andronie, Maria V. Stroe, Petrior 004:33(075.8)

Editura Fundaiei Romnia de Mine, 2007

Redactor: Maria CERNEA Tehnoredactori: Maria ANDRONIE Marcela OLARU Coperta: Maria ANDRONIE Bun de tipar: 22.02.2007; Coli tipar: 14,75 Format: 16/70100 Editura Fundaiei Romnia de Mine Bulevardul Timioara nr.58, Bucureti, Sector 6 Tel./Fax: 021/444.20.91; www.spiruharet.ro e-mail: contact@edituraromaniademaine.ro

UNIVERSITATEA SPIRU HARET

Doina FUSARU Zenovic GHERASIM Maria ANDRONIE Adela BRA Petrior STROE

APLICAII ECONOMICE N VISUAL BASIC I ACCESS


Ediia a III-a

EDITURA FUNDAIEI ROMNIA DE MINE Bucureti, 2007

CUPRINS

Cuvnt-nainte .. 1. VISUAL BASIC . Aplicaii rezolvate .... Aplicaii propuse . 2. ACCESS .. Aplicaii rezolvate ... Aplicaii propuse . 3. APLICAII ECONOMICE COMPLEXE .. 4. EXEMPLE DE TESTE GRIL PENTRU EXAMENUL DE LICEN Bibliografie ...

7 9 9 185 189 189 196 197 223 236

CUVNT NAINTE

Lucrarea Aplicaii economice n Visual Basic i Access este destinat studenilor din nvmntul economic care studiaz disciplina Informatic de gestiune (Limbaje i Sisteme de gestiune a bazelor de date). De asemenea, lucrarea este util celor care doresc s se iniieze sau s-i dezvolte abilitile practice n rezolvarea unor probleme economice cu ajutorul limbajului de programare Visual Basic i al sistemului de gestiune a bazelor de date Microsoft Access. Autorii au urmrit atingerea urmtoarelor obiective: fixarea noiunilor de baz din programare, n general, i din programarea orientat pe obiecte (asigurat de mediul de programare Visual Basic), n special; iniierea n folosirea sistemului de gestiune a bazelor de date Microsoft Access, ca baz pentru continuarea de ctre studeni a pregtirii n informatic, din anii de studii urmtori, prin cursurile de Proiectarea sistemelor informatice, Sisteme expert i Audit informatic; cuprinderea unui numr ct mai diversificat de aplicaii economice complementare cursurilor economice. Cursul de fa conine capitole separate destinate aplicaiilor economice simple n Visual Basic i Access, precum i un capitol pentru aplicaii economice complexe. Majoritatea aplicaiilor au detaliate algoritmul de calcul, schema logic, codul, formularul asociat, datele de intrare i rezultatele obinute, toate acestea constituind modele pentru ntocmirea, de ctre studeni, a proiectului prevzut ca obligatoriu n programa analitic a cursului. Au fost avute cu prioritate n vedere structurile de date, obiectele, structurile de control, instruciunile de intrare/ieire, procedurile de baz, unitile standard, elementele specifice ale mediului integrat de dezvoltare Visual Basic. Toate acestea sunt utile att pentru nsuirea bazelor acestui limbaj de programare, ct i pentru folosirea ulterioar, cu particularitile existente, n cadrul sistemului de gestiune a bazelor de date Microsoft Access. Sunt prezentate i cteva elemente de baz ale limbajului SQL. Prin ntregul su coninut, lucrarea este util i pentru pregtirea examenului de licen, motiv pentru care, n finalul acesteia, au fost cuprinse i cteva exemple de teste-gril. Autorii, 2007

1. VISUAL BASIC

APLICAII REZOLVATE

Aplicaia 1.1 Se cere s se realizeze un program pentru calculul profitului brut ca diferen ntre venituri i cheltuieli, a profitului impozabil, a celui net, precum i dividendele acordate la un agent economic. Algoritm de calcul Formularul dispune de dou butoane de comand: un buton pe care se inscripioneaz Demarare program; un buton care dispune de interfaa Parasire program. Se introduc de la tastatur urmtoarele date: denumire societate; veniturile obinute i cheltuielile efectuate. Valorile variabilelor de lucru i finale se calculeaz cu formulele (1.1) i (1.2). Profit brut = Venituri Cheltuieli; Fond de rezerv= 5% * Profit brut Profit impozabil = Profit brut Fond de rezerv Impozit pe profit = 38% * Profit impozabil Profit net = Profit impozabil Impozit pe profit La repartizare: Profit pentru dezvoltare = 50 % * Profit Brut Profit pentru consum = Profit net Profit pentru dezvoltare Impozit pe dividende = 10 % * Profit repartizat pentru consum Dividende = Profit repartizat pentru consum Impozit pe dividende

(1.1)

(1.2)

Se afieaz prin caset de mesaj: Profit brut; Profit Impozabil; Impozit pe profit; Profit net; Profit repartizat pentru consum; Dividende acordate. Se afieaz n formular toate informaiile care au fost vizualizate prin caset de mesaj. Schema logic aferent acestui exemplu este prezentat n fig.1.1.
9

Fig.1.1. Schema logic pentru aplicaia 1.1 10

Date de intrare Den_soc Ven Che Calcule Fond_dezv=Prof_brut*5% Impoz=Prof_impoz*38% Rep_dez=Prof_brut*50% Divid=Rep_cons-(Rep_cons*10%) Date de ieire Prof_brut Impoz

String Variabil Variabil Prof_brut=Ven-Che Prof_impoz=Prof_brut-Fond_dezv Prof_net=Prof_impoz-Impoz Rep_cons=Prof_net-Rep_dez Prof_net Prof_impoz Divid

Secvena de instruciuni n Visual Basic care determin rezolvarea cerinelor din enun este urmtoarea: Dim den_soc As String Dim ven As Variant Dim che As Variant Dim prof_brut As Variant Dim fond_dez As Variant Dim impoz As Variant Dim prof_impoz As Variant Dim prof_net As Variant Dim rep_dez As Variant Dim rep_cons As Variant Dim impoz_divid As Variant Dim divid As Variant Private Sub Buton1_Click() den_soc = InputBox("Tastati denumirea societatii") ven = InputBox("Tastati suma veniturilor obtinute de societate") che = InputBox("Tastati suma cheltuielilor efectuate de societate") prof_brut = ven-he MsgBox ("Profitul brut obtinut este de:" + Str(prof_brut)), 64 fond_dez = prof_brut * 5 / 100 prof_impoz = prof_brut-fond_dez MsgBox ("Profitul impozabil este de:" + Str(prof_impoz)) impoz = prof_impoz * 38 / 100 MsgBox ("Impozitul pe profit (38%) este de:" + Str(impoz)) prof_net = prof_impoz - impoz MsgBox ("Profitul net obtinut este de:" + Str(prof_net)), 64 rep_dez = prof_brut * 50 / 100 rep_cons = prof_net - rep_dez MsgBox ("Profitul repartizat pentru consum este de:" + Str(rep_cons)), 64
11

impoz_divid = rep_cons * 10 / 100 divid = rep_cons - impoz_divid MsgBox ("Dividendele acordate sunt de:" + Str(divid)), 64 Print " S I T U A T I E C A L C U L " Print " -------------------------------" Print " " Print "******************************************" Print "* Denumire societate *", den_soc Print "__________________________________________" Print "Profit brut : ", prof_brut Print "Profit impozabil :", prof_impoz Print "Impozit pe profit:", impoz Print "Profit net: ", prof_net Print "Dividende : ", divid End Sub Private Sub Buton2_Click() End End Sub Rezultatul execuiei formularului Calcul profit i dividende este prezentat n fig.1.2.

Fig.1.2. Rezultatul execuiei formularului Calcul profit i dividende

12

Aplicaia 1.2 Casierul unei bnci trebuie s elibereze unei persoane suma suma (exprimat n lei). S se determine numrul de bancnote de 500.000 lei, 100.000 lei, 50.000 lei, 10.000 lei i 2.000 lei i restul de sum n monede diverse. Algoritm de calcul Tipurile de bancnote se vor grupa ntr-o mulime (m) cu 6 elemente, iar numrul de bancnote ce trebuie pltit de casier n mulimea (nr_m) tot cu 6 elemente. Se mparte suma iniial de plat (suma) la primul tip de bancnot (m(1)). Restul de plat (suma_curenta) se va mpri succesiv la fiecare tip de bancnot (m(i)) (relaiile (1.3), (1.4)). Se folosete \ deoarece este necesar obinerea separat a ctului i restului. nr_m(i) = suma_curenta \ m(i) (1.3) suma_curenta = suma_curenta - nr_m(i) * m(i) (1.4) Se realizeaz un formular (frmPlata) cu dou butoane de comand (fig.1.4): PLATA SUMEI (Caption) pentru procedura de calcul i afiare a numrului de bancnote (cmdPlata) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Caseta de text (Text Box) Etichete (Labels) Casete de text (Text Box) -6 Etichete (Labels) - 6 Proprieti Name: frmPlata Caption: PLATA SUMEI Name: cmdPlata Caption: Plata Name: cmdIesire Caption: Iesire Name: txtSuma Caption: Suma de plata Name: txtX Caption: Bancnote de... lei Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint date de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare din casete-text din formular, iar mulimea tipurilor de bancnote (m) se completeaz cu valorile acestora (500.000 lei, 100.000 lei, 50.000 lei, 10.000 lei 2.000 lei). Iniial, numrul de bancnote din fiecare tip este egal cu 0 (nr_m(i)=0). Pentru calculul i afiarea rezultatelor n casete-text se folosete o structur de control repetitiv de tipul For Next. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.3.
13

Fig. 1.3. Schema logic pentru rezolvarea aplicaiei 1.2 14

Procedurile cmdPlata_Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdPlata_Click() declararea variabilelor de lucru Dim suma As Double Dim m(6) As Double Dim nr_m(6) As Double Dim suma_curenta As Double introducerea datelor de intrare suma = txtSuma.Text se initializeaza multimea tipurilor de bancnote si a numarului acestora m(1) = 500000 m(2) = 100000 m(3) = 50000 m(4) = 10000 m(5) = 2000 m(6) = 1 For i = 1 To 6 nr_m(i) = 0 Next i se calculeaza numarul de bancnote din fiecare tip se utilizeaza o structura repetitiva de tip For Next suma_curenta = suma For i = 1 To 6 nr_m(i) = suma_curenta \ m(i) suma_curenta = suma_curenta - nr_m(i) * m(i) se afiseaza in casete de text numarul de bancnote din fiecare tip txtX(i - 1).Text = nr_m(i) Next i End Sub Private Sub cmdIesire_Click() End End Sub Data de intrare utilizat pentru obinerea rezultatelor din fig. 1.4 este: Suma=1956540. Algoritmul de calcul poate fi modificat astfel, nct numrul tipurilor de bacnote s fie variabil (se propune ca exerciiu).

15

Fig. 1.4. Situaia de ieire pentru aplicaia 1.2

Aplicaia 1.3 O societate comercial desface 50 de produse pentru care se cunosc ca date de intrare: codprod codul produsului, denprod denumirea produsului, cant cantitatea, pret preul. Secvena de program se refer la calculul valorii (valoare) pentru fiecare produs i afiarea pe ecran a acelor produse pentru care valoare <5.500.000 lei. Algoritm de calcul Programul testeaz pentru 50 de produse, n interiorul unui ciclu de tipul ForNext, dac valoarea calculat (cant*pret) este inferioar numrului 5.500.000. n acest caz, se afieaz pe suprafaa formularului denumirea produsului i valoarea respectiv. n caz contrar, nu se execut nici o prelucrare. Pentru testarea programului s-au folosit 50 produse, dintre care 15 au avut valori calculate sub limita de 5.500.000. Datele de intrare sunt: codprod, denprod, pret i cant. Data de ieire este valoarea. Schema logic este prezentat n fig.1.5.

16

DA

NU

Fig.1.5. Schema logic pentru aplicaia 1.3

17

ntregul program este asociat evenimentului clic pe butonul de comand cmdCalcul : Private Sub cmdCalcul_Click() Dim CODPROD As Single Dim DENPROD As String Dim CANT As Integer Dim PRET As Single Dim VALOARE As Single Print Tab(10); "*** PRODUSE CU VALOAREA MAI MICA DE 5,500,000 LEI ***" Print String(45, "=") Print Tab(2); "PRODUSUL"; Tab(33); "VALOAREA" Print String(45, "=") For I = 1 To 50 CODPROD = InputBox("Introduceti codul produsului:") DENPROD = InputBox("Introduceti denumire produsului:") CANT = InputBox("Introduceti cantitatea:") PRET = InputBox("Introduceti pretul:") VALOARE = CANT * PRET If VALOARE < 5500000 Then Print Tab(2); DENPROD; Tab(33); VALOARE End If Next I Print String(45, "=") End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig.1.6.

Fig.1.6 Situaia de ieire pentru aplicaia 1.3 18

Aplicaia 1.4 S se stabileasc categoria de vrst (copil, adolescent, tnr, adult, btrn) a unui cetean, tiind data naterii i data curent. Datele de intrare sunt nume, prenume i data_n. Algoritm de calcul Modul de lucru al programului este urmtorul: pentru fiecare persoan creia se dorete s i se determine categoria de vrst se acioneaz butonul cmdCalcul. Codul asociat evenimentului clic al acestui buton determin introducerea datelor, calcularea categoriei i incrementarea cu 1 a variabilei care ine evidena totalului de persoane aflate n categoria respectiv (nc numr copii, na numr adolesceni, nt numr tineri, nad numr aduli, nb numr btrni). Deoarece intereseaz ca ntre dou apeluri ale procedurii Private Sub cmdCalcul_Click() variabilele nc, na, nt, nad, nb s-i pstreze valorile, acestea se declar cu Static n loc de Dim. Procedura Private Sub cmdStatistica_Click() (care se execut la acionarea butonului cu Caption Statistic) calculeaz procentul de persoane pentru fiecare categorie de vrst, pe baza valorilor luate de variabilele nc1, na1, nt1, nad1, nb1. Aceste variabile sunt declarate n seciunea General Declarations, deci pot fi utilizate n orice modul al aplicaiei, spre deosebire de variabilele ale cror valori le preiau la sfritul procedurii eveniment Private Sub cmdCalcul_Click(). A fost necesar introducerea variabilelor nc1, na1, nt1, nad1, nb1 deoarece variabilele declarate cu Static pot fi folosite numai n interiorul procedurii n care au fost declarate. Se calculeaz pentru nceput vrsta n zile a fiecrei persoane ca diferen ntre data curent, returnat de funcia Date, i data naterii, introdus n variabila data_n: varsta = Date data_n (1.5) Vrsta n ani se obine prin mprirea vrstei calculate ca numr de zile la 365 (neglijm anii biseci): varsta = varsta / 365. (1.6) Instruciunea Select Case care urmeaz selecteaz n funcie de variabila vrst categoria fiecrei persoane; apoi, se incrementeaz cu 1 una dintre variabilele nc, na, nt, nad, nb, iar apoi se afieaz. n final, se transfer valorile variabilelor nc, na, nt, nad, nb n nc1, na1, nt1, nad1, nb1 pentru a le putea folosi n afara procedurii. Urmtorul cod de program mrete suprafaa formularului, la fiecare acionare a butonului cmdCalcul, pn n momentul n care acesta depete 10.000: If Form1.Height > 10.000 Then Exit Sub Form1.Height = Form1.Height + 250 formularul se mrete n jos cu 250 de puncte cmdCalcul.Top = cmdCalcul.Top + 250 butonul cmdCalcul este deplasat n jos cmdExit.Top = cmdExit.Top + 250 cmdStatistica.Top = cmdStatistica.Top + 250 unde Form1.Height nlimea formularului, iar cmdCalcul.Top distana ntre colul din stnga sus al formularului i colul din stnga sus al butonului cmdCalcul. Schema logic e corespunztoare procedurii Private Sub cmdCalcul_Click() este prezentat n fig.1.7.
19

Fig. 1.7. Schema logic pentru aplicaia 1.4. 20

Procedurile Private Sub cmdCalcul_Click(), Private Sub cmdStatistica_Click(), Private Sub cmdExit_Click() i seciunea General Declarations: General Declarations Dim nc1 As Byte, na1 As Byte, nt1 As Byte, nad1 As Byte, nb1 As Byte Private Sub cmdCalcul_Click() 'variabilele declarate cu "Static" nu pot fi declarate in sectiunea General Declarations 'sunt vizibile doar in interiorul procedurii unde au fost declarate cmdStatistica.Enabled = True Static nc As Byte, na As Byte, nt As Byte, nad As Byte, nb As Byte Dim nume As String Dim prenume As String Dim data_n As Date Dim categorie As String nume = InputBox("Introduceti numele:", "Nume", "Popescu") prenume = InputBox("Introduceti prenumele:", "Prenume", "Ion") data_n = InputBox("Introduceti data nasterii in format <<" & Date & ">>:", "Data nasterii", "25.9.1978") varsta = Date - data_n 'neglijam anii bisecti varsta = varsta / 365 Select Case varsta Case Is < 12 categorie = "copil" nc = nc + 1 Case Is < 16 categorie = "adolescent" na = na + 1 Case Is < 25 categorie = "tanar" nt = nt + 1 Case Is < 60 categorie = "adult" nad = nad + 1 Case Else categorie = "batran" nb = nb + 1 End Select Print nume; Tab(25); prenume; Tab(50); categorie total = 0 nc1 = nc na1 = na nt1 = nt
21

nad1 = nad nb1 = nb If Form1.Height > 10000 Then Exit Sub Form1.Height = Form1.Height + 250 cmdCalcul.Top = cmdCalcul.Top + 250 cmdExit.Top = cmdExit.Top + 250 cmdStatistica.Top = cmdStatistica.Top + 250 End Sub Private Sub cmdExit_Click() Unload Me End Sub Private Sub cmdStatistica_Click() Cls total = nc1 + na1 + nt1 + nad1 + nb1 Print "===========" Print "= Statistica =" Print "===========" Print "In cadrul colectivitatii dumneavoastra sunt:" & Chr(13) & _ " -- " & Format(nc1 / total * 100, "fixed") & "% copii;" & Chr(13) & _ " -- " & Format(na1 / total * 100, "fixed") & "% adolescenti;" & Chr(13) & _ " -- " & Format(nt1 / total * 100, "fixed") & "% tineri;" & Chr(13) & _ " -- " & Format(nad1 / total * 100, "fixed") & "% adulti;" & Chr(13) & _ " -- " & Format(nb1 / total * 100, "fixed") & "% batrani," & Chr(13) & _ "in total " & total & " persoane." Print String(40, "=") End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig.1.8. i 1.9.

Fig.1.8. Situaia de ieire 1 pentru aplicaia 1.4

22

Fig.1.9. Situaia de ieire 2 pentru aplicaia 1.4

Aplicaia 1.5 S se realizeze un program care s permita conversia n diferite valute a unei sume exprimate n lei. Algoritm de calcul Se mparte suma n lei (suma_lei) la cursul valutar (curs) i se va obine suma n valut (suma_valuta) conform relaiei (1.7). suma_valuta = suma_lei / curs (1.7) Pentru conversia unei sume exprimate n valut (suma_valuta) i obinerea sumei corespunztoare n lei (suma_lei) se utilizeaz formula: suma_lei=suma_valuta * curs (1.8) Se realizeaz un formular cu dou butoane de comand (fig. 1.11): CURS VALUTAR (Caption) pentru procedura de calcul i afiare a sumei n valut (cmdConversie) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmator:
Formular (Form) Obiect Proprieti Name: frmConversie Caption: CURS VALUTAR Name: cmdConversie Caption: Conversie Name: cmdIesire Caption: Iesire Name: txtSL Caption: Suma in lei Name: txtSV Caption: Suma in valuta Name: txtCurs Caption: Curs valutar Name: cmbValuta List: Dolar, EURO... Text: Valuta Name: optLV Name: optVL Evenimente Click Click

Buton de comand (Command Button) Buton de comand (Command Button) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) List derulant (List Box) Buton de opiune (Option Button) Buton de opiune (Option Button)

23

Utilizarea listei derulante asigur afiarea tuturor tipurilor de valute n care se poate efectua conversia sumei exprimate n lei. Pe formularul de lucru se introduc dou butoane de exprimare a opiunilor utilizatorului (optLV i optVL), care permit alegerea tipului de conversie: din lei n valut (1.7) sau din valut n lei (1.8). Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare din casete de text din formular. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.10.

START

Citete suma_lei, curs

suma_valuta = suma_lei / curs

Afieaz suma_valuta

STOP

Fig. 1.10. Schema logic pentru rezolvarea aplicaiei 1.5

24

Procedurile cmdConversie_Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdConversie_Click() declararea variabilelor de lucru Dim suma_lei As Double Dim curs As Double Dim suma_valuta As Double If optLV.Value = True Then suma_lei = txtSL.Text curs = txtCurs.Text suma_valuta = suma_lei / curs txtSV.Text = suma_valuta Else If optVL.Value = True Then suma_valuta = txtSV.Text curs = txtCurs.Text suma_lei = suma_valuta * curs txtSL.Text = suma_lei End If End If End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate pentru obinerea rezultatelor din fig. 1.11. sunt: suma_lei=250.000, curs=36.549. Se propune, ca exerciiu, s se modifice algoritmul de calcul i schema logic, astfel nct programul s realizeze tabelarea a zece sume convertite (numr curent nrcrt, suma n lei slei, suma n valut svaluta, tip valut tval, curs valutar cval).

25

Fig. 1.11. Situaia de ieire pentru aplicaia 1.5

Aplicaia 1.6 Se cere s se realizeze un program pentru calculul cifrei de afaceri a unei societi. Programul va realiza selecia societilor comerciale n funcie de cifra de afaceri i de rata profitului, ntr-o prim faz, i apoi n funcie de rata profitului raportat la cifra de afaceri, n a doua faz. Se vor afia doar societile care ndeplinesc cumulativ urmtoarele condiii: cifra de afaceri > 1.520.000.000; profit > 500.000.000 i rata profitului > 40%. Algoritm de calcul Formularul dispune de dou butoane de comand: un buton pe care se inscripioneaz Obinere Situaie; un buton care dispune de interfaa Prsire program. Se introduc de la tastatur urmtoarele date: denumire societate; cifra de afaceri i profitul obinut. Se calculeaz rata profitului cu urmtoarea formul: Rata profitului = Profit / Cifra de afaceri (1.9)

Se folosesc structuri alternative de tip If...Then...Else...End If. Se utilizeaz afiarea n formular i prin caseta de mesaj. Schema logic aferent acestui exemplu este prezentat n figura 1.12.

26

Fig.1.12. Schema logic aferent aplicaiei 1.6 27

Declarare variabile Den_soc CA Profit Rata_pr Date de intrare Den_soc CA Profit Calcule Rata_pr=Profit/CA Date de ieire Profit

ir de caractere Variabil Variabil Variabil String Variabil Variabil CA Rata_pr

Secvena de instruciuni n Visual Basic care determin rezolvarea cerinelor din enun este urmtoarea: Dim Den_soc As String Dim CA As Variant Dim Profit As Variant Dim Rata_pr As Variant Private Sub situatie_Click() Den_soc = InputBox("Introduceti denumirea societtii") CA = InputBox("Introduceti cifra de afaceri") Profit = InputBox("Introduceti profitul realizat de societate") If (CA < 1520000000) And (Profit < 500000000) Then MsgBox "Nu ne intereseaz", 64, "Importanta economic" Else MsgBox "Societatea" + Den_soc + "Prezint important", 64, "Importanta economic" Rata_pr = Profit / CA If Rata_pr < 0.4 Then MsgBox "Societatea prezint o rat mic a profitului", 64, "Rata profit" Else MsgBox "Societatea important", 64, "Rata profit" Print "Societatea: ", Den_soc Print "*****************************************" Print "Cifra de afaceri este:", CA Print "Profitul obtinut este:", Profit Print "Rata profitului este:", Rata_pr * 100; "%" End If End If End Sub Private Sub iesire_Click() End End Sub
28

Rezultatul execuiei aplicaiei este prezentat n figura 1.13.

Fig.1.13. Rezultatul execuiei aplicaiei 1.6

Aplicaia 1.7 S se realizeze selecia societilor comerciale (denumire) n funcie de cifra de afaceri, CA (>2 miliarde) i de rata profitului, rata_p (>45%). Algoritm de calcul Programul accept ca date de intrare denumirea societii comerciale (denumire), cifra de afaceri (CA) i rata profitului (rata_p) pentru o societate comercial. Dac rata profitului este mai mare de 45 i cifra de afaceri depete dou miliarde, societatea este considerat corespunztoare, iar datele respective sunt memorate n "D:\coresp.txt", fiier deschis cu numrul 1 la ncrcarea formularului (evenimentul Form_Load); altfel, datele sunt memorate n fiierul deschis cu numrul 2, adic "D:\nucoresp.txt". Interfaa aplicaiei (formularul) cuprinde, pe lng controalele deja menionate, i un control de tip RichTextBox n care este ncrcat unul dintre cele dou fiiere (reprezentnd societile care corespund, respectiv pe cele care nu corespund), dup cum este acionat butonul de comand cmdDa (Caption: Societi care corspund criteriului) sau cmdNu (Caption: Societi care NU corespund criteriului), aa cum se prezint n fig.1.14. De exemplu, butonul cmdDa are asociat urmtorul cod: Private Sub cmdDA_Click() Close #1 'pentru a-i afisa continutul, fisierul trebuie sa fie inchis RichTextBox1.FileName = "D:\coresp.txt" Open "D:\coresp.txt" For Append As #1 End Sub
29

Pentru afiarea coninutului unui fiier ntr-un control de tip RichTextBox este necesar ca fiierul s fie nchis (Close #1). Proprietatea FileName se refer la un ir de caractere care indic numele i calea ctre fiierul dorit. Dup afiarea coninutului, fiierul poate fi redeschis, pentru adugarea de noi societi comerciale. Codul asociat evenimentului Load al formularului se execut primul (Private Sub Form_Load). Pentru includerea controlului RichTextBox n bara de instrumente se execut urmtoarea succesiune de comenzi: meniul Project/Components (la fel ca la aplicaia 1.21). n continuare, este prezentat codul de program. Liniile considerate deosebite au fost completate cu comentarii. Private Sub cmdDA_Click() Close #1 'pentru a-i afisa continutul, fisierul trebuie sa fie inchis RichTextBox1.FileName = "D:\coresp.txt" Open "D:\coresp.txt" For Append As #1 End Sub Private Sub cmdExit_Click() descarca din memorie formularul curent, declansand si toate evenimentele de inchidere spre deosebire de end Unload Me End Sub Private Sub cmdGoleste_Click() casetele de text sunt deblocate: este permisa editarea lor txtDenumire.Locked = False txtCA.Locked = False txtRP.Locked = False goleste continutul casetelor de text goleste End Sub Private Sub cmdNU_Click() Close #2 RichTextBox1.FileName = "D:\nucoresp.txt" Open "D:\nucoresp.txt" For Append As #2 End Sub Sub goleste() txtDenumire = " " txtCA = " " txtRP = " " End Sub
30

Private Sub cmdSave_Click() If Val(txtCA) > 2000000000 And Val(txtRP) > 45 Then Print #1, txtDenumire, " ", txtCA, " ", txtRP Else Print #2, txtDenumire, " ", txtCA, " ", txtRP End If txtDenumire.Locked = True txtCA.Locked = True txtRP.Locked = True goleste End Sub Private Sub Form_Load() la prima executie fisierul nu exista se trece peste aceast aroare, la linia urmtoare On Error Resume Next se sterg fisierele si se recreeaza la fiecare rulare a aplicatiei Kill "D:\coresp.txt" Kill "D:\nucoresp.txt" Open "D:\coresp.txt" For Append As #1 Open "D:\nucoresp.txt" For Append As #2 se tipareste antetul fisierului Print #1, "Denumire", " ", "CA ", _ " ", "Rata_pr" Print #2, "Denumire", " ", "CA ", _ " ", "Rata_pr" casetele de text sunt blocate: nu este permisa editarea lor txtDenumire.Locked = True txtCA.Locked = True txtRP.Locked = True End Sub Se propune, ca exerciiu, s se modifice algoritmul de calcul, astfel nct programul s realizeze selecia societilor comerciale n funcie de cifra de afaceri (CA) i de localitatea unde i are sediul societatea comercial (localitate).

31

Pentru adugarea de date se acioneaz acest buton care descuie casetele de text (le face editabile)

Fig.1.14. Situaia de ieire pentru aplicaia 1.7

Aplicaia 1.8 S se calculeze penalitile pentru plata furnizorilor la o societate comercial i suma de plat pe factura majorat, tiind valoarea iniial a facturilor i numrul zilelor de ntrziere pentru fiecare dintre facturi. Penalitile se calculeaz astfel: pn la 15 zile ntrziere 5%, ntre 15 i 30 de zile 8%, peste 30 de zile 10%. Algoritm de calcul Informaiile despre facturi se vor grupa n mulimi cu n elemente, n care n reprezint numrul de facturi: numrul i seria facturii: nr_serie(i); numrul de zile: nr_Zile(i); valoarea facturii: Valf(i); suma penalitilor pentru fiecare factur: SumaP(i).
32

Formula de calcul a penalitilor pentru fiecare factur (SumaP(i)), n funcie de numrul de zile (nr_zile(i)), valoarea facturii (Valf(i)) i de procentul aplicat este: SumaP(i) = Valf(i) + Valf(i) * procent / 100 (1.10)

n care procentul va avea valorile 5, 8, 10, n funcie de numrul de zile de ntrziere. Se va calcula suma total de plat (SumaPTotal) pentru toate facturile. Iniial aceast sum va avea valoarea 0, la care se vor aduga penalitile pentru fiecare factur. SumaPTotal = SumaPTotal + SumaP(i) (1.11)

Se realizeaz un formular cu dou butoane de comand (fig.1.16): PENALITATI PENTRU PLATA FACTURILOR (Caption) pentru procedura de calcul i afiare a penalitilor (cmdPenalitati) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:

Obiect Formular (Form)

Proprieti Name: frmPenalitati Caption: PENALITATI PENTRU PLATA FACTURILOR Name: cmdPenalitati Caption: Calculeaza Penalitati Name: cmdIesire Caption: Iesire

Evenimente -

Buton de comand (Command Button) Buton de comand (Command Button)

Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru calculul i afiarea rezultatelor n formular, se folosete o structur de control repetitiv de tipul ForNext, n care n reprezinat numrul de facturi. Pentru selectarea valorii procentului aplicat n funcie de numrul de zile, se utilizeaz o structur alternativ de tipul Select Case. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.15.
33

Fig. 1.15. Schema logic pentru rezolvarea aplicaiei 1.8 34

Procedurile cmdPenalitati_Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdPenalitati _Click() declararea variabilelor de lucru Dim n As Integer Dim nrserie(3) As String Dim Valf(3) As Double Dim SumaP(3) As Double Dim nrZile(3) As Integer Dim SumaPTotal As Double citirea datelor de intrare For i = 1 To 3 nrserie(i) = InputBox("Introduceti numarul si seria facturii:") Valf(i) = InputBox("Valoarea facturii:") nrZile(i) = InputBox("Nr zile intarziere:") Next i calculul penalitatilor SumaPTotal = 0 Print "Nr serie______Valoare_____Zile Intarziere____Penalitati" For i = 1 To 3 Select Case nrZile(i) Case Is < 15 SumaP(i) = Valf(i) + Valf(i) * 5 / 100 Case 15 To 30 SumaP(i) = Valf(i) + Valf(i) * 8 / 100 Case Is >= 30 SumaP(i) = Valf(i) + Valf(i) * 10 / 100 End Select Print nrserie(i), Valf(i), nrZile(i), SumaP(i) SumaPTotal = SumaPTotal + SumaP(i) Next i Print "______________________________________________________" Print "Total penalizari:"; SumaPTotal End Sub Private Sub cmdIesire _Click() End End Sub Datele de intrare utilizate pentru obinerea rezultatelor din fig. 20.2 sunt: n=3, nr_serie(1)=R 123, valf(1)=10000, nr_zile(1)=5 nr_serie(2)=RX 234, valf(2)=20000, nr_zile(2)=20 nr_serie(3)=RX 345, valf(3)=30000, nr_zile(3)=35
35

Fig.1.16. Situaia de ieire pentru aplicaia 1.8

Aplicaia 1.9 S se afieze elementul maxim i elementul minim dintr-o mulime ce reprezint numrul de kilometri parcuri zilnic de un autoturism. Algoritm de calcul Elementul maxim (max) al unei mulimi se determin astfel: Iniial, se consider maximul egal cu primul element al mulimii: max=element(1) (1.12) Se parcurge mulimea ncepnd cu al doilea element, comparnd maximul cu fiecare element. Dac elementul curent este mai mare dect maximul atunci acesta va lua valoarea elementului. Se utilizeaz relaiile: Dac element (i) > max, atunci max= element(i) (1.13) Elementul minim (min) al mulimii se determin n mod asemntor, conform relaiilor: Dac element (i) < min, atunci min= element(i) (1.14) Se realizeaz un formular cu dou butoane de comand (fig.1.18): MAXIM SI MINIM (Caption) i dou butoane de comand: pentru procedura de determinare a maximului, respectiv minimului (cmdMaxMin), i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmMaxMin Caption: MAXIM SI MINIM Name: cmdMaxMin Caption: Calculeaz Maximul i Minimul Name: cmdIesire Caption: Iesire Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru parcurgerea elementelor mulimii se folosete o structur de control repetitiv de tipul For Next, n care n reprezinat numrul de elemente. Pentru comparearea elementelor cu max, respectiv min, se utilizeaz o structur alternativ de tipul If Then Else. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.17.
36

Fig. 1.17. Schema logic pentru rezolvarea aplicaiei 1.9 37

Procedurile cmdMaxMin_Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdIesire_Click() End End Sub Private Sub cmdMaxMin_Click() Dim n As Integer Dim element(10) As Single Dim max As Single Dim min As Single n = InputBox("Numarul de elemente:") For i = 1 To n element(i) = InputBox("Elementul:") Print element(i) Next i max = element(1) min = element(1) For i = 2 To n If element(i) > max Then max = element(i) Else If element(i) < min Then min = element(i) End If End If Next i Print Print "Maximul este:"; max Print "Minimul este:"; min End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig.1.18.

Fig. 1.18. Situaia de ieire pentru aplicaia 1.9

Aplicaia 1.10 Se cere s se ntocmeasc un program n Visual Basic pentru calculul salariului mediu i al abaterilor specifice pentru fiecare salariat al agentului economic. Numrul de salariai al fiecrei secii este de 10. Rezolvare Schema logic aferent acestui exemplu este prezentat n figura 1.19.
38

Fig.1.19. Schema logic aferent aplicaiei 1.10 39

Secvena de instruciuni n Visual Basic care determin rezolvarea cerinelor din enun este urmtoarea: Dim Salariu(10) As Long Dim Abatere(10) As Long Dim Media As Long Dim Suma As Long Dim Marca(10) As String Dim Nume(10) As String Dim I As Byte Private Sub cmdafis_Click() Cls Print "________________________________________________" Print "NR NUME SI PRENUME SALARIUL ABATERE" Print "________________________________________________" For I = 1 To 10 Print I, Nume(I), " "; Salariu(I), Abatere(I) Next I Print "________________________________________________" Print " TOTAL SALARII:", Suma End Sub Private Sub cmdintro_Click() Suma = 0 For I = 1 To 10 Marca(I) = InputBox("Marca salariatului" + Str(I)) Nume(I) = InputBox("Numele si prenumele salariatului" + Str(I)) Salariu(I) = InputBox("Salariul tarifar al angajatului" + Str(I)) Suma = Suma + Salariu(I) Next I Media = CLng(Suma / 10) MsgBox ("Salariul mediu este " + Str(Media)) For I = 1 To 10 Abatere(I) = Salariu(I) - Media Next End Sub Private Sub sfr_Click() End End Sub Rezultatul execuiei formularului Calcul salariu i abateri este prezentat n figura 1.20.
40

Fig.1.20. Rezultatul execuiei formularului Calcul salariu i abateri din aplicaia 1.10

Aplicaia 1.11 O societate comercial vinde un numr de 20 produse zilnic, timp de 5 zile. Se dorete aflarea mediei valorii vnzrilor pe fiecare zi. Se cunosc ca date de intrare: CODP codul produsului, DENP denumirea produsului, VALP valoarea produsului. Algoritm de calcul n acest program se folosesc dou structuri repetitive, dintre care una se afl n interiorul celeilalte (structuri repetitive imbricate). Prima structur este de tipul DoLoop Until, fiind deci condiionat posterior, ceea ce nseamn c se execut cel puin o dat. Aceast structur este folosit pentru a ine evidena zilelor. Cea de-a doua structur repetitiv este de tipul ForNext i se refer la cele 20 de produse vndute zilnic. Variabila TOTP conine totalul valoric al produselor vndute ntr-o zi: TOTP = TOTP + VALP (1.15)

iar variabila TOTALM este media valorilor vnzrilor pe zi, indiferent de produs. TOTALM=TOTP/j, unde j=20 de produse (1.16)

n acest caz, VALP nu mai constituie dat de ieire (nu mai este calculat pe baza cantitii i preului), ci este dat de intrare. Schema logic este prezentat n fig.1.21.
41

Fig.1.21. Schema logic pentru aplicaia 1.21 42

Prelucrarea se execut ca urmare a acionrii unui clic pe butonul cmdCalcul (Caption Vnzri) Private Sub cmdCalcul_Click() Dim CODP As Single Dim DENP As String Dim VALP As Double 'valoarea produsului Dim TOTP As Double 'total produs Dim TOTALM As Double 'vanzarea medie zilnica pe toate produsele Dim i As Byte Print Tab(10); "VANZARILE MEDII ZILNICE" Print String(35, "=") i=1 Do TOTP = 0 For j = 1 To 20 CODP = InputBox("Introduceti codul produsului:", "Ziua " _ & i & ", " & "produsul " & j) DENP = InputBox("Introduceti denumirea produsului:", _ "Ziua " & i & ", " & "produsul " & j) VALP = InputBox("Introduceti valoarea:", "Ziua " & i & _ ", " & "produsul " & j) TOTP = TOTP + VALP Next j TOTALM = TOTP / j Print Tab(2); "ZIUA " & i; Tab(15); Format(TOTALM, "STANDARD") i=i+1 Loop Until i > 5 Print String(35, "=") End Sub Situaia de ieire este prezentat n fig.1.22.

Fig.1.22. Situaia de ieire pentru aplicaia 1.11 43

Aplicaia 1.12 S se ntocmeasc statul de plat a salariului net (sal_net) pentru angajaii unei societi comerciale (fiecare angajat se identific prin marca), tiind salariul brut (sal_brut) i impozitul (impozit) ce se calculeaz conform cu grila de impozitare n vigoare la data ntocmirii statului de salarii (data_intocm). Algoritm de calcul Pentru stabilirea impozitului fiecrui angajat se va utiliza o gril de salarizare n trei trepte, cu limitele L1, L2, L3, astfel: Dac SB<= L1, atunci impozit=0.18 Dac (L1+1)<= SB <=L2, atunci impozit=0.23 Dac (L2+1)<=SB<=L3, atunci impozit=0.34 Dac (L3+1)<=SB, atunci impozit=0.4 Se vor calcula reinerile intermediare: P1 = L1 * 0.18 P2 = P1 + (L2 L1) * 0.23 (1.17) P3 = P1 + P2 + (L3 L2) * 0.34 Informaiile despre fiecare salariat se vor grupa n mulimi cu n elemente, n care n reprezinat numrul de salariai: marca: marca(i) salariul brut: SB(i) salariul net: SN(i) Formula de calcul a salariului net (SN(i)) pentru fiecare salariat (Marca(i)), n funcie de salariul brut (SB(i)), este: Dac SB<= L1, atunci: SN(i) = SB(i) - SB(i) * 0.18 (1.18) Dac (L1+1)<= SB <=L2, atunci SN(i) = SB(i) P1 (SB(i) L1) * 0.23 Dac (L2+1)<=SB<=L3, atunci SN(i) = SB(i) P1 P2 (SB(i) L2) * 0.34 Dac (L3+1)<=SB, atunci SN(i) = SB(i) P1 P2 P3 (SB(i) L3) * 0.4 Se realizeaz un formular cu dou butoane de comand (fig.1.24): SALARII (Caption) pentru procedura de calcul i afiare a penalitilor (cmdSalarii) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Formular (Form) Obiect Proprieti Name: frmSalarii Caption: SALARII Name: cmdSalarii Caption: Salarii Name: cmdIesire Caption: Iesire Evenimente Click Click

Buton de comand (Command Button) Buton de comand (Command Button)

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru calculul i afiarea rezultatelor n formular se folosete o structur de control repetitiv de tipul For Next, n care n reprezinat numrul de salariai. Pentru selectarea valorii impozitului aplicat n funcie de salariul brut, se va utiliza o structur alternativ de tipul Select Case. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.23.
44

Fig. 1.23. Schema logic pentru rezolvarea aplicaiei 1.12

45

Procedurile cmdSalarii_Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdSalarii_Click() declararea variabilelor de lucru Dim marca(5) As String Dim SB(5) As Double Dim SN(5) As Double Dim P1 As Double Dim P2 As Double Dim P3 As Double Dim L1 As Double Dim L2 As Double Dim L3 As Double citirea limitelor L1 = InputBox("Limita 1:") L2 = InputBox("Limita 2:") L3 = InputBox("Limita 3:") calcularea impozitului intermediar P1 = L1 * 0.18 P2 = P1 + (L2 - L1) * 0.23 P3 = P1 + P2 + (L3 - L2) * 0.34 Print "Marca---Salariul brut---Salariul net---" For i = 1 To 5 citirea datelor despre salariati marca(i) = InputBox("Marca salariatului:") SB(i) = InputBox("Salariul Brut:") calculul salariului net Select Case SB(i) Case Is <= L1 SN(i) = SB(i) - SB(i) * 0.18 Case (L1 + 1) To L2 SN(i) = SB(i) - P1 - (SB(i) - L1) * 0.23 Case (L2 + 1) To L3 SN(i) = SB(i) - P1 - P2 - (SB(i) - L2) * 0.34 Case Is > L3 SN(i) = SB(i) - P1 - P2 - P3 - (SB(i) - L3) * 0.4 End Select afisarea rezultatelor Print " "; marca(i); " "; SB(i); " "; SN(i) Next i End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate pentru obinerea rezultatelor din fig.1.24 sunt: L1=2.000.000 L2=5.000.000 L3=10.000.000 n=5, marca(1)=M123, SB(1)= 1.800.000 marca(2)=M234, SB(2)= 2.500.000 marca(3)=M345, SB(3)= 5.700.000 marca(4)=M456, SB(4)= 7.800.000 marca(5)=M567, SB(5)= 15.000.000
46

Fig. 1.24. Situaia de ieire pentru aplicaia 1.12

Aplicaia 1.13 S se sorteze cresctor elementele unei mulimi ce reprezint media ncasrilor sptmnale (med) ale unei societi comerciale. Algoritm de calcul Pentru ordonarea valorilor mulimii, n ordine cresctoare, se procedeaz astfel: se compar primele dou elemente ale mulimii, i, dac nu sunt n ordine cresctoare, atunci se inverseaz poziiile celor dou. Se compar urmtoarele dou elemente nvecinate i se procedeaz ca mai sus, pn la parcurgerea ntregii mulimi. Algoritmul se reia de la nceput, pn se constat c nu mai sunt necesare schimbri ntre elementele mulimii. Pentru monitorizarea schimbrilor intervenite n mulime se utilizeaz o variabil boolean (cu valori true/false) schimb. Dac ntre elementele mulimii s-au produs schimbri, atunci schimb=false, dac nu exist modificri, atunci schimb=true, deci mulimea este sortat. Algoritmul se reia att timp ct schimbe =false. Pentru realizarea permutrilor elementelor se utilizeaz o variabil de transfer (t) ce reine valorile primului element, dup cum urmeaz: t=med(i) med(i)=med(i+1) (1.19) med(i+1)=t Se realizeaz un formular cu dou butoane de comand (fig.1.26): SORTARE (Caption) i dou butoane de comand: pentru procedura de determinare a maximului, respectiv minimului (cmdSortare), i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmSortare Caption: SORTARE Name: cmdSortare Caption: Sortare Name: cmdIesire Caption: Iesire Evenimente Click Click

Dup declararea variabilelor de lucru, ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru parcurgerea elementelor mulimii se folosete o structur de control repetitiv de tipul For Next, n care n reprezinat numrul de elemente. Deoarece algoritmul se reia att timp ct se produc schimbri ntre elementele mulimii, se utilizeaz o structur repetitiv condiionat anterior de tipul: Do While, n care condiia este schimb=false. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.25.
47

Fig. 1.25. Schema logic pentru rezolvarea aplicaiei 1.13 48

Procedurile cmdSortare _Click() i cmdIesire _Click() sunt urmtoarele: Private Sub cmdIesire_Click() End End Sub Private Sub cmdSortare_Click() Dim n As Integer Dim med(10) As Single Dim schimb As Boolean Dim t As Single Print Print "Medii studenti:" Print "_________________" n = InputBox("Introduceti numarul de studenti:") For i = 1 To n med(i) = InputBox("Media studentului:") Print med(i) Next i schimb = False Do While schimb = False schimb = True For i = 1 To (n - 1) If med(i) > med(i + 1) Then t = med(i) med(i) = med(i + 1) med(i + 1) = t schimb = False End If Next i Loop Print Print "Afisarea mediilor in ordine crescatoare:" Print "_________________________________________________" For i = 1 To n Print med(i) Next i End Sub Datele de intrare utilizate, precum fig.1.26. i rezultatele obinute sunt prezentate n
49

Fig. 1.26. Situaia de ieire pentru aplicaia 1.13

Aplicaia 1.14 S se ntocmeasc un program pentru calculul dobnzii aferente unui depozit bancar n funcie de termenul de depunere. Varianta 1 de rezolvare: Datele de intrare sunt suma i termen (termenul de depunere), iar ca rezultat se obine dobnda. Se folosete o structur repetitiv de tip Do Loop i o structur alternativ de tipul Select Case. Schema logic aferent acestui exemplu este prezentat n fig.1.27. Se observ c structura repetitiv este fr contor condiionat anterior. Numrul tipurilor de depozite bancare este limitat la patru. Procedura ,,Introducere asigur introducerea datelor de intrare, iar procedura ,,Calcul realizeaz calculul sumei actuale n funcie de tipul de depozit.

50

Fig.1.27. Schema logic aferent Exemplu calcul dobnd cuvenit din aplicaia 1.14 (varianta 1) 51

Secvena de instruciuni n Visual Basic care determin rezolvarea cerinelor din enun este urmtoarea: Dim Nr_cont As String Dim Nume As String Dim Prenume As String Dim Suma_dep As Variant Dim Tip_Depozit As Byte Dim R As Variant Private Sub execut_Click() R = InputBox("Doriti sa lucrati? (DA/NU)") While UCase(R) = "DA" GoSub Introd GoSub Calcul R = InputBox("Mai Continuati? (DA/NU)") Wend MsgBox "pentru utilizarea acestui program", 64, "Colectivul de autori va multumeste" End Introd: Nr_cont = InputBox("Tastati numarul contului") Nume = InputBox("Tastati numele deponentului") Prenume = InputBox("Tastati prenumele deponentului") Suma_dep = InputBox("Tastati suma depusa") Do Tip_Depozit = InputBox("Tastati 1- depozit 1 luna; 2- depozit 3 luni; 3depozit 6 luni sau 4- depozit 12 luni") Loop Until Tip_Depozit >= 1 And Tip_Depozit <= 4 Return Calcul: Dim Suma_Act As Long Select Case Tip_Depozit Case 1 Suma_Act = Suma_dep + (Suma_dep * 0.52) * 1 / 12 Case 2 Suma_Act = Suma_dep + (Suma_dep * 0.55) * 3 / 12 Case 3 Suma_Act = Suma_dep + (Suma_dep * 0.57) * 6 / 12 Case 4 Suma_Act = Suma_dep + (Suma_dep * 0.6) * 12 / 12 End Select Print "Clientul" + " " + Nume + " " + Prenume + " " + "a avut suma initiala de" + " " + Suma_dep + " " + "si detine suma actuala de" + " "; Str(Suma_Act) Return End Sub
52

Varianta 2 de rezolvare Algoritm de calcul Prelucrarea se condiioneaz n sensul c se execut numai dac se completeaz corect datele de intrare ale problemei: If IsNumeric(txtSuma) And txtNrcont <> " " And txtNume <> " " Then irul de caractere introdus n caseta de text txtSuma trebuie s conin numai caractere numerice; pentru verificare se folosete funcia IsNumeric, care returneaz True daca argumentul este un numr i False n caz contrar. Celelalte casete de text trebuie doar s fie completate (s nu conin irul vid). Instruciunea Select Case execut diverse aciuni n funcie de valoarea luat de variabila termen: dac termen ia valoare 1 se aplic un procent de dobnd de 21%, dac este 2, se aplic 22% etc. Instruciunea Select Case poate fi nlocuit prin IfThenElse. lblDobanda.Visible = True (A) txtDobanda.Visible = True (B) txtDobanda = dob (C) Proprietatea Visible a controalelor (etichete label, casete de text TextBox, butoane de comand CommandButton, casete combinate ComboBox etc) permite afiarea sau inhibarea afirii la execuie a controalelor respective. n cazul de fa, n timpul proiectrii proprietatea Visible a fost setat la valoarea logic FALSE, deci eticheta lblDobanda i caseta de text txtDobanda nu sunt vizibile pe suprafaa formularului dect dup acionarea butonului cmdCalcul, pe evenimentul su clic fiind ataate, printre altele, i liniile de mai sus (A),(B). Etichete lblDobanda i caseta de text txtDobanda sunt folosite pentru afiarea rezultatului, adic a sumei dobnzii. Proprietatea.Text a controlului TextBox este implicit: dac nu se completeaz nici o proprietate, se consider c a fost referit proprietatea text, deci linia urmtoare este echivalent cu (C): TxtDobanda.Text = dob Schema logic a aplicaiei 1.14 (varianta 2) este prezentat n fig.1.28.

53

Fig.1.28. Schema logic pentru aplicaia 1.14 (varianta 2)

54

Primele trei linii de cod de mai jos aparin seciunii General Declarations; n continuare, sunt listate procedurile eveniment Private Sub cmdCalcul_Click() i Private Sub cmdExit_Click(): Dim suma As Double Dim termen As Byte Dim dob As Double Private Sub cmdCalcul_Click() If IsNumeric(txtSuma) And txtNrcont <> " " And txtNume <> " " Then suma = Val(txtSuma) termen = Val(cboTermen.Text) Select Case termen Case 1 dob = (suma * 21 / 100) * 1 / 12 Case 3 dob = (suma * 22 / 100) * 3 / 12 Case 6 dob = (suma * 23 / 100) * 6 / 12 Case Else dob = suma * 24 / 100 End Select lblDobanda.Visible = True txtDobanda.Visible = True txtDobanda = dob Else MsgBox "Nu ati completat corect!", vbOKOnly, "Atentie!" End If End Sub Private Sub cmdExit_Click() Unload Me End Sub Situaia de ieire pentru aplicaia 1.14 (varianta 2 de rezolvare) este prezentat n fig.1.29. Se propune, ca exerciiu, s se modifice algoritmul de calcul, astfel nct nivelul dobnzilor acordate pentru depozitele constituite s fie variabil (s fie introdus ca dat de intrare).

55

Fig.1.29. Situaia de ieire pentru aplicaia 1.14 (varianta 2)

Aplicaia 1.15 Programul urmrete stabilirea TVA (structur repetitiv de tip For-Next). Pe baza datelor de intrare (cantitate i pre) se va calcula, unde este cazul, TVA i se va ntregi valoarea. Se utilizeaz structura repetitiv ForNext care testeaz condiia C, unde C reprezint situaia Da sau Nu pentru existena TVA-ului printr-o structur alternativ If...Then...Else...End If. Rezultatul prelucrrii este afiiat ntr-un fiier TVA.DAT. Schema logic aferent acestui exemplu este prezentat n fig.1.30. Se observ c numrul de produse N este interactiv i este verificat n permanen pentru situaia i < N, unde variabila i reprezint un contor. n continuare se testeaz dac variabila C are valoarea ,,Da (se calculeaz TVA) sau ,,Nu (produsul este scutit de TVA).

56

Fig.1.30. Schema logic aferent Stabilire TVA din aplicaia 1.15 57

Declarare variabile Den_prod Pret Cant C Val I N TVA Data Date de intrare N Den_prod C Pret Cant Calcule Val = Cant * Pret Val = Val + Tva Date de ieire Den denumire Cant cantitate

Variabil Variabil Variabil ir de caractere Variabil Numr ntreg Numr ntreg Variabil Ora de introducere Numr Denumire produs Caz pentru Tva Da/Nu Pret Cantitate Tva = Val * 19 % Pret pretul produsului Val valoare

Secvena de instruciuni n Visual Basic care determin rezolvarea cerinelor din enun este urmtoarea: Dim Den_prod As String Dim Pret As Variant Dim Cant As Variant Dim C As String * 2 Dim Val As Variant Dim I As Integer Dim N As Integer Dim Tva As Variant Dim Data As Date Private Sub Command1_Click() Open "c:\tva.dat" For Append As #1 Print #1, "*************************************************" Data = Date Print #1, " Situatia la data de" + Str(Data) Print #1, "*************************************************" Print #1, "* Denumire * Pret * Cantitate * Valoare *" Print #1, "*--------------*--------*---------------*--------------*" N = InputBox("Tastati numarul de produse") For I = 1 To (N + 1)
58

If I = N + 1 Then End Else Den_prod = InputBox("Denumirea produsului" + Str(I)) C = InputBox("Produsului i se aplica Tva (DA/NU)") If UCase(C) = "DA" Then Pret = InputBox("Pretul produsului" + Den_prod) Cant = InputBox("Cantitatea produsului" + Den_prod) Val = Cant * Pret MsgBox ("Valoarea produsului" + Den_prod + "Fara Tva este:" + Str(Val)), vbOKOnly Tva = Val * 19 / 100 Val = Val + Tva MsgBox ("Valoarea produsului" + Den_prod + "cu Tva este:" + Str(Val)) Else Pret = InputBox("Pretul produsului" + Den_prod) Cant = InputBox("Cantitatea produsului" + Den_prod) Val = Cant * Pret MsgBox ("Valoarea produsului" + Den_prod + " este:" + Str(Val)) End If End If 10 Next Afisari: Print #1, Den_prod; " "; Pret; " "; Cant; " "; Val GoTo 10 Close #1 End Sub Private Sub Command2_Click() End End Sub Rezultatul execuiei formularului Stabilire TVA este prezentat n figura 1.31.

Fig.1.31. Rezultatul execuiei formularului Stabilire TVA din aplicaia 1.15 59

Aplicaia 1.16 Pentru o grup format din 20 de studeni s se calculeze media pe fiecare student n parte i media pe grup, cunoscnd: CODS Codul studentului, NUME Numele i prenumele studentului, NOTA 1 Nota la examenul 1, NOTA2 Nota la examenul 2 i NOTA3 Nota la examenul 3. Algoritm de calcul Pentru fiecare dintre cei 20 de studeni ai grupei se introduc 3 note (NOTA1, NOTA2 i NOTA3) pe baza crora se calculeaz media care este imediat afiat. Media tuturor studenilor se nsumeaz n variabila MEDIEGR care mprit la 20 reprezint media grupei. Secvena: Do .. .. .. .. Loop Until NOTA1 <= 10 And NOTA1 >= 1 And NOTA2 <= 10 And NOTA2 >= 1 And NOTA3 <= 10 And NOTA3 >= 1 valideaz datele la introducere, n sensul c nu sunt acceptate dect valori ntre 1 i 10 inclusiv pentru variabilele NOTA1, NOTA2 i NOTA3; instruciunile din interiorul buclei se execut cel puin o dat, datorit condiionrii posterioare. Al doilea argument al instruciunii InputBox afieaz textul Notele sunt de la 1 la 10! n bara de titlu a casetei InputBox. NOTA1 = InputBox("Introduceti nota 1 pt studentul " & NUME & ":", "Notele sunt de la 1 la 10!") Exemplul este rulat pentru un numr de 4 studeni. Schema logic este prezentat n fig.1.32. Se propune, ca exerciiu, modificarea algoritmului de calcul astfel nct procentul de TVA s fie introdus de la tastatur.
60

Fig.1.32. Schema logic pentru aplicaia 1.16 61

Procedurile Private Sub cmdCalcul_Click() i cmdExit_Click() sunt prezentate n continuare:

Private

Sub

Private Sub cmdCalcul_Click() Dim CODS As Integer, NUME As String, NOTA1 As Byte, _ NOTA2 As Byte, NOTA3 As Byte, MEDIES As Single, _ MEDIEGR As Single MEDIEGR = 0 Print Tab(25); "SITUATIA NOTELOR PENTRU STUDENTII GRUPEI" Print String(55, "=") Print "COD"; Tab(10); "NUME"; Tab(35); "NOTA1"; Tab(45); "NOTA2"; Tab(55); "NOTA3"; Tab(65); "MEDIA" For i = 1 To 20 CODS = InputBox("Introduceti codul studentului:") NUME = InputBox("Introduceti numele studentului:") Do NOTA1 = InputBox("Introduceti nota 1 pt studentul " & NUME & ":", "Notele sunt de la 1 la 10!") NOTA2 = InputBox("Introduceti nota 2 pt studentul " & NUME & ":", "Notele sunt de la 1 la 10!") NOTA3 = InputBox("Introduceti nota 3 pt studentul " & NUME & ":", "Notele sunt de la 1 la 10!") Loop Until NOTA1 <= 10 And NOTA1 >= 1 And NOTA2 <= 10 And NOTA2 >= 1 And NOTA3 <= 10 And NOTA3 >= 1 MEDIES = (NOTA1 + NOTA2 + NOTA3) / 3 MEDIEGR = MEDIEGR + MEDIES Print CODS; Tab(10); NUME; Tab(35); NOTA1; Tab(45); NOTA2; Tab(55); NOTA3; Tab(65); Format(MEDIES, "fixed") Next i Print String(55, "=") Print "MEDIA GRUPEI"; Tab(65); MEDIEGR / 20 Print String(55, "=") End Sub Private Sub cmdExit_Click() End End Sub n fig.1.33 este prezentat situaia de ieire pentru 4 studeni (n loc de 20).

62

Fig.1.33. Situaia de ieire pentru aplicaia 1.16

Aplicaia 1.17 S se ntocmeasc statul de plat a salariului net (sal_net) pentru angajaii unei societi comerciale (fiecare angajat se identific prin marca), tiind numrul orelor lucrate (nr_ore), salariul tarifar orar (sal_tarif) i impozitul (impozit) ce se calculeaz conform cu grila de impozitare n vigoare la data ntocmirii statului de salarii (data_intocm). Algoritm de calcul Informaiile despre fiecare salariat se vor grupa n mulimi cu n elemente, n care n reprezinat numrul de salariai: marca: marca(i); numrul de ore lucrate: nr_ore(i); salariul brut: SB(i); salariul net: SN(i). Se va calcula salariul brut al fiecrui angajat: SB(i) = nr_ore(i) * Sal_tarif (1.20)

Pentru stabilirea impozitului fiecrui angajat se va utiliza o gril de salarizare n trei trepte cu limitele L1, L2, L3, astfel:
63

Dac SB<= L1, atunci impozit=0.18 Dac (L1+1)<= SB <=L2, atunci impozit=0.23 Dac (L2+1)<=SB<=L3, atunci impozit=0.34 Dac (L3+1)<=SB, atunci impozit=0.4 Se vor calcula reinerile intermediare: P1 = L1 * 0.18 P2 = P1 + (L2 L1) * 0.23 (1.21) P3 = P1 + P2 + (L3 L2) * 0.34 Formula de calcul a salariului net (SN(i)) pentru fiecare salariat (Marca(i)), n funcie de salariul brut (SB(i)) este: Dac SB<= L1, atunci: SN(i) = SB(i) SB(i) * 0.18 Dac (L1+1)<= SB <=L2, atunci SN(i) = SB(i) P1 (SB(i) L1) * 0.23 Dac (L2+1)<=SB<=L3, atunci SN(i) = SB(i) P1 P2 (SB(i) L2) * 0.34 Dac (L3+1)<=SB, atunci SN(i) = SB(i) P1 P2 P3 (SB(i) L3) * 0.4 Se realizeaz un formular cu dou butoane de comand (fig.1.35): SALARII (Caption) pentru procedura de calcul i afiare a panalitilor (cmdSalarii) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmSalarii Caption: SALARII Name: cmdSalarii Caption: Salarii Name: cmdIesire Caption: Iesire Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru calculul i afiarea rezultatelor n formular se folosete o structur de control repetitiv de tipul ForNext, n care n reprezinat numrul de salariai. Pentru selectarea valorii impozitului aplicat n funcie de salariul brut, se va utiliza o structur alternativ de tipul Select Case. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.34.
64

Fig. 1.34. Schema logic pentru rezolvarea aplicaiei 1.17 65

Procedurile cmdSalarii_Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdSalarii_Click() declararea variabilelor de lucru Dim marca(5) As String Dim nr_ore(5) As Integer Dim Sal_tarif As Double Dim SB(5) As Double Dim SN(5) As Double Dim P1 As Double Dim P2 As Double Dim P3 As Double Dim L1 As Double Dim L2 As Double Dim L3 As Double citirea salariului tarifar Sal_tarif = InputBox("Salariul tarifar orar:") citirea limitelor de impozitare L1 = InputBox("Limita 1:") L2 = InputBox("Limita 2:") L3 = InputBox("Limita 3:") calcularea impozitului intermediar P1 = L1 * 0.18 P2 = P1 + (L2 - L1) * 0.23 P3 = P1 + P2 + (L3 - L2) * 0.34 Print Print "Salariul tarifar orar:"; Sal_tarif Print Print "Marca---Nr Ore---Salariul brut---Salariul net---" For i = 1 To 5 citirea datelor despre salariati marca(i) = InputBox("Marca salariatului:") nr_ore (i) = InputBox("Numarul de ore lucrate:") calcularea salariului brut si net SB(i) = nr_ore (i) * Sal_tarif Select Case SB(i) Case Is <= L1 SN(i) = SB(i) - SB(i) * 0.18 Case (L1 + 1) To L2 SN(i) = SB(i) - P1 - (SB(i) - L1) * 0.23 Case (L2 + 1) To L3 SN(i) = SB(i) - P1 - P2 - (SB(i) - L2) * 0.34 Case Is >= (L3 + 1) SN(i) = SB(i) - P1 - P2 - P3 - (SB(i) - L3) * 0.4 End Select afisarea rezultatelor Print " "; marca(i); " "; nr_ore(i); " "; SB(i); " "; SN(i) Next i End Sub Private Sub cmdIesire_Click() End End Sub
66

Datele de intrare utilizate pentru obinerea rezultatelor din fig.1.35 sunt: L1=2.000.000 L2=5.000.000 L3=10.000.000 Sal_tarif=70.000 n=5, marca(1)=M123, nr_ore(1)= 15 marca(2)=M234, nr_ore (2)= 20 marca(3)=M345, nr_ore (3)= 100 marca(4)=M456, nr_ore (4)= 150 marca(5)=M567, nr_ore (5)= 250

Fig.1.35. Situaia de ieire pentru aplicaia 1.17

Aplicaia 1.18 Pentru o list cu 10 produse la care se aplic tva, s se calculeze i s se afieze, pentru fiecare produs, taxa pe valoarea adugat TVA i valoarea cu tva (ValCuTVA), tiind: codul produsului codpr, denumirea produsului denpr, cantitatea cant i preul unitar pret. Algoritm de calcul Soluia aleas pentru prezentarea rezultatelor aplicaiei folosete fiierele. Open "c:\tva.dat" For Append As #1 deschide fiierul tva.dat n cazul n care exist; dac nu exist l creeaz. Fiierul este primul deschis (#1). n el vor fi adugate cu ajutorul comenzii Print #1 valorile variabilelor dorite. Print #1, codp; " "; denp; " "; cant; " "; pret; " "; TVA; " "; ValCuTVA Este de menionat faptul c n cazul stocrii datelor n fiiere este posibil folosirea instruciuni Tab pentru organizarea pe coloane. Schema logic este prezentat n fig.1.36.
67

Fig.1.36. Schema logic pentru aplicaia 1.18

68

Interfaa aplicaiei este format dintr-un formular pe care sunt amplasate dou butoane de comand (fig.1.37): cmdCalcul i cmdExit. Codul asociat evenimentelor clic pe aceste butoane este prezentat n continuare: Private Sub cmdCalcul_Click() Dim codp As Integer, denp As String, cant As Double, pret As Double Open "c:\tva.dat" For Append As #1 Print #1, "Valoarea cu TVA" Print #1, String(80, "=") Print #1, "Cod Denumire Cantitate Pret TVA Valoare cu TVA " For i = 1 To 10 codp = InputBox("Introduceti codul produsului:") denp = InputBox("Introduceti denumirea produsului:") cant = InputBox("Introduceti cantitatea:") pret = InputBox("Introduceti pretul:") TVA = cant * pret * 0.19 ValCuTVA = cant * pret * 1.19 Print #1, codp; " "; denp; " "; cant; " "; pret; " "; TVA; " "; ValCuTVA Next i Print #1, String(80, "=") End Sub Private Sub cmdExit_Click() Unload Me End Sub

Fig.1.37. Interfaa aplicaiei 1.18

Rezultatele rulrii programului sunt prezentate n fig.1.38.

69

Fig.1.38. Situaia de ieire (fiierul tva.dat) pentru aplicaia 1.18

Aplicaia 1.19 S se calculeze profitul sau pierderea din vnzri pentru un produs la care se cunosc costul de producie i preul de vnzare. Algoritm de calcul Se completeaz casetele de text corespunztoare costului de producie respectiv preului de vnzare. Daca preul este superior costului se determin un profit, n caz contrar se calculeaz pierderea. Iniial, eticheta i caseta de text utilizate pentru afiarea profitului/pierderii nu sunt vizibile (au proprietile Visible setate pe False). Afiarea lor se realizeaz n momentul acionarii tastei F1 sau a alegerii opiunii Calcul din meniul Afisare. Realizarea meniului ataat aplicaiei s-a realizat cu ajutorul Editorului de meniuri (MenuEditor). Pentru lansarea Editorului de meniuri se acioneaz clic dreapta pe suprafaa formularului i se alege MenuEditor. Pe ecran va aprea fereastra din fig.1.39.
70

Combo pentru stabilirea unei taste scurttur ctre opiunile aflate pe ultimele ramificaii ale meniurilor

Name: mnuCalcul (submeniu al meniului Aplicaie, ca i mnuIeire)

Name: mnuIesire

Sgei pentru deplasarea ntre elementele de meniu i retrogradarea ca submeniuri sau avansarea ca meniuri principale

Fig.1.39. Editorul de meniuri

71

START

Citete txtCost, txtPret

Fig.1.40. Schema logic general pentru aplicaia 1.19

72

Codul asociat evenimentelor clic ale elementelor de meniu mnuCalcul, mnuIesire i mnuAjutor este prezentat n continuare: Private Sub mnuAjutor_Click() MsgBox "Se completeaza costul si pretul in casetele corespunzatoare si se determina profitul sau piererea !", vbOKOnly, "Ajutor" End Sub Private Sub mnuCalcul_Click() If txtCost = " " Or txtPret = " " Then MsgBox "Nu ati completat pretul si/sau costul !", vbOKOnly, "Atentie!" Exit Sub End If lblRezultat.Visible = True txtRezultat.Visible = True If Val(txtCost) > Val(txtPret) Then lblRezultat.Caption = "Pierdere" lblRezultat.ForeColor = vbRed txtRezultat.Text = Format(Val(txtCost) - Val(txtPret), "FIXED") Else txtRezultat.Text = Format(-Val(txtCost) + Val(txtPret), "FIXED") End If End Sub Private Sub mnuIesire_Click() Unload Me End Sub

Top Visible WhatsThisHelpID Width

1920 False 0 1215

Fig.1.41. Interfaa aplicaiei 1.19 n modul de proiectare (Design) 73

Rezultatele rulrii aplicaiei sunt prezentate n fig.1.42.

Fig. 1.42. Situaia de ieire pentru aplicaia 1.19

Aplicaia 1.20 S se ntocmeasc un program pentru stabilirea punctului de echilibru (q_e) la o societate comercial, tiind vnzrile din produsul 1 (v1), vnzrile din produsul 2 (v2), costurile fixe (c_f), costurile cu manopera (c_man), costurile cu materiale (c_mat) i numrul perioadelor de gestiune (n). Formula de calcul este: q_e=c_f/(v1+v2-c_f)*(v1+v2). Algoritm de calcul Punctul de echilibru (q_e) se va calcula astfel: q_e=c_f/(v1+v2-c_f)*(v1+v2) (1.22) Se realizeaz un formular cu dou butoane de comand (fig.1.44): PUNCTUL DE ECHILIBRU (Caption) pentru procedura de calcul i afiare a punctului de echilibru (cmdQE) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Caset de text (Text Box) Etichete (Labels) Casete de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Casete de text (Text Box) Etichete (Labels) Caseta de text (Text Box) Etichete (Labels) Casete de text (Text Box) Etichete (Labels) 74 Proprieti Name: frmQE Caption: PUNCTUL DE ECHILIBRU Name: cmdQE Caption: Punctul de echilibru Name: cmdIesire Caption: Iesire Name: txtV1 Caption: Vanzari 1 Name: txtV2 Caption: Vanzari 2 Name: txtCF Caption: Costuri Fixe Name: txtCMan Caption: Costuri Manopera Name: txtCMat Caption: Costuri Materiale Name: txtQE Caption: Punctul De Echilibru Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare din casete de text din formular. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.43.

Fig.1.43 Schema logic pentru rezolvarea aplicaiei 1.20

Procedurile cmdQE_Click() i cmdIesire_Click() sunt urmatoarele: Private Sub cmdQE_Click() declararea variabilelor de lucru Dim q_e As Double Dim v1 As Double Dim v2 As Double Dim c_f As Double Dim c_man As Double Dim c_mat As Double introducerea datelor de intrare v1 = txtV1.Text v2 = txtV2.Text c_f = txtCF.Text c_man = txtCMan.Text c_mat = txtCmat.Text
75

se calculeaza punctul de echilibru q_e=c_f/(v1+v2-c_f)*(v1+v2) se afiseaza in casete de text rezultatele txtQE.Text = q_e End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate pentru obinerea rezultatelor din fig. 1.44 sunt: V1=500.000 V2=840.000 c_f=50.000 c_man=400.000 c_mat=700.000.

Fig.1.44. Situaia de ieire pentru aplicaia 1.20

76

Aplicaia 1.21 S se calculeze valoarea total (val_tot) a 8 produse perisabile aflate ntrun depozit, dup o perioad de depozitare, cunoscnd coeficienii de perisabilitate specifici (coef_peris), categoriile de produse (definite prin cod_produs) i valoarea acestor produse (val) la nceputul perioadei de depozitare. Algoritm de calcul Cele mai importante prelucrri pe care le efectueaz programul sunt prezentate n secvena urmtoare: For i = 0 To 7 cod_produs(i + 1) = InputBox("Introduceti codul produsului " & i + 1 & ":") coef_peris(i + 1) = InputBox("Introduceti coef de perisabilitate pt produsul " & i + 1 & ":(%)") val(i + 1) = InputBox("Introduceti valoarea produsului " & i + 1 & ":") total_val = total_val + val(i + 1) * (100 - coef_peris(i + 1)) / 100 total_dep = total_dep + val(i + 1) * coef_peris(i + 1) / 100 Next i

Se introduc codul produsului, coeficientul de perisabilitate i valoare pentru fiecare produs. Pe baza lor se calculeaz un total valoric i un total al deprecierii.

Pentru stocarea datelor calculate se vor utiliza variabile de fiiere, cu meniunea c vor fi pstrate numai valorile referitoare la ultima execuie a programului, deoarece fiierul perisabil.txt este ters i recreat de fiecare dat cnd se acioneaz clic pe meniul mnuCalcul (Caption: Calcul Valoare). tergerea i recreerea se fac n liniile urmtoare: Kill "c:\perisabil.txt" Open "c:\perisabil.txt" For Append As #1 n scopul consultrii mai rapide a rezultatelor execuiei programului s-a adugat la proiect formularul FrmShow care este generat vizibil dup terminarea prelucrrilor procedurii mnuCalcul_Click(), n linia FrmShow.Show. Acest
77

formular conine un control de tip RichTextBox cu ajutorul cruia se poate vizualiza coninutul unui fiier de tip.txt sau.dat. Deoarece acest tip de control nu este iniial n bara de instrumente (ToolBox, unde sunt prezente doar controalele elementare cele mai utilizate), este necesar adugarea lui n bar; pentru aceasta, se execut clic dreapta pe bara de instrumente, ntr-un loc unde nu se mai afl nici un control i se alege prima opiune Components. O alta variant const n succesiunea de comenzi n meniul Project/Components. Pe ecran apare fereastra Components (fig.1.45).

Fig.1.45. Fereastra Components

Aa dup cum se observ i n figur, se bifeaz controlul de tip RichTextBox i se acioneaz butonul Apply, rezultatul constnd n apariia pe bara de instrumente a controlului respectiv (fig.1.46).
78

Fig.1.46. Bara de instrumente (ToolBox)

Controlul RichTextBox

Din acest moment controlul poate fi folosit ca oricare altul, prin dispunerea pe suprafaa formularului i stabilirea proprietilor sale. Astfel, la proprietatea FileName se completeaz C:\perisabil.txt, n cazul n care se dorete ca fiierul s fie amplasat direct pe partiia C a harddiskului. Caseta de text extins se configureaz din fereastra Property Pages (se execut clic dreapta cu mouse-ul pe suprafaa casetei Properties). Aplicaia folosete un formular de tip MDI (MDIForm Multiple Document Interface, adic Interfa Document Multiplu) i un formular normal care are proprietatea de MDIChild setat ca True. Aceasta nseamn c formularul copil nu poate fi activat dect dac formularul de tip MDI este deschis; de asemenea, nchiderea formularului MDI implic nchiderea tuturor copiilor si, adic a formularelor avnd setat proprietatea MDIChild ca True. n general, formularele de tip MDI nu pot conine ele nsele controale, dar pot conine meniuri care controleaz deschiderea i nchiderea formularelor subordonate. Linia On Error Resume Next dispus la nceputul codului asociat meniului mnuCalcul pred controlul urmtoarei instruciuni dup cea care a coninut eroarea. Prima execuie a programului furnizeaz o eroare la ntlnirea liniei Kill "c:\perisabil.txt", deoarece fiierul repectiv nu exist. On Error Resume Next pred controlul instruciunii urmtoare care creeaz fiierul respectiv, nesemnaliznd nici o eroare. Schema logic pentru codul asociat mnuCalcul_Click este prezentat n fig.1.47.

79

Fig.1.47. Schema logic pentru aplicaia 1.21 80

Codul asociat meniurilor aplicaiei este urmtorul: Private Sub mnuAfisare_Click() frmShow.RichTextBox1.FileName = "c:\perisabil.txt" frmShow.Show End Sub Private Sub mnuCalcul_Click() On Error Resume Next Dim coef_peris(7) As Byte Dim cod_produs(7) As Integer Dim val(7) As Double Dim total_val As Double Dim total_dep As Double total_val = 0 total_dep = 0 Kill "c:\perisabil.txt" Open "c:\perisabil.txt" For Append As #1 For i = 0 To 7 cod_produs(i + 1) = InputBox("Introduceti codul produsului " & i + 1 & ":") coef_peris(i + 1) = InputBox("Introduceti coef de perisabilitate pt produsul " & i + 1 & ":(%)") val(i + 1) = InputBox("Introduceti valoarea produsului " & i + 1 & ":") total_val = total_val + val(i + 1) * (100 - coef_peris(i + 1)) / 100 total_dep = total_dep + val(i + 1) * coef_peris(i + 1) / 100 Next i Print #1, " Situatia deprecierii produselor" Print #1, String(55, "=") Print #1, "Cod produs"; " "; "Valoarea"; " "; "Deprecierea" Print #1, String(55, "=") For i = 0 To 7 Print #1, cod_produs(i + 1), " "; val(i + 1); " "; val(i + 1) * coef_peris(i + 1) / 100 Next i Print #1, String(55, "=") Print #1, "TOTAL", " "; total_val; " "; total_dep Close #1 End Sub Private Sub mnuIesire_Click() Unload Me End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig.1.48.
81

Fig.1.48. Situaia de ieire pentru aplicaia 1.21

Aplicaia 1.22 S se calculeze valoarea unei facturi, tiind numrul n de produse, preul fiecrui produs (pret(i)) i valoarea cheltuielilor de transport (ch_tp). Algoritm de calcul Informaiile despre fiecare produs se vor grupa n mulimi cu n elemente, n care n reprezint numrul de produse: denumire produs: denp(i); cantitatea: cant(i); preul: pret(i); valoare: val(i). Se va calcula valoarea fiecrui produs: val(i) = cant(i) * pret(i) (1.24) Valoarea total a produselor (valtot) i valoarea facturii (valf) se vor calcula dup formulele: valtot = valtot + val(i) (1.25) valf = valtot ch_tp (1.26 Se realizeaz un formular cu dou butoane de comand (fig.1.50): FACTURI (Caption) pentru procedura de calcul (cmdFacturi) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Formular (Form) Obiect Proprieti Name: frmFacturi Caption: FACTURI Name: cmdFacturi Caption: Facturi Name: cmdIesire Caption: Iesire Evenimente Click Click

Buton de comand (Command Button) Buton de comand (Command Button)

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru calculul i afiarea rezultatelor n formular se folosete o structur de control repetitiv de tipul ForNext, n care n reprezinat numrul de produse. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.49.
82

Fig. 1.49. Schema logic pentru rezolvarea aplicaiei 1.22

83

Procedurile cmdFacturi_Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdFacturi_Click() declararea variabilelor de lucru Dim nrserie As String Dim Ch_Tp As Double Dim denp(3) As String Dim pret(3) As Double Dim cant(3) As Double Dim val(3) As Double Dim valtot As Double Dim valf As Double citirea datelor de intrare nrserie = InputBox("Numarul si seria facturii:") Ch_Tp = InputBox("Cheltuieli de transport:") For i = 1 To 3 denp(i) = InputBox("Denumire produs:") pret(i) = InputBox("Pret:") cant(i) = InputBox("Cantitate:") Next i Print "Numarul si seria facturii:"; nrserie Print "________________________________________" Print "Denumire Pret Cantitate Valoare" initializarea valorii totale a produselor valtot = 0 calcul For i = 1 To 3 val(i) = cant(i) * pret(i) valtot = valtot + val(i) Print denp(i); " "; pret(i); " "; cant(i); " "; val(i) Next i valf = valtot - Ch_Tp Print "__________________________________________" Print "Valoarea facturii:"; valf End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate pentru obinerea rezultatelor din fig. 1.50 sunt: nrserie=RX 123 ch_tp=100.000 n=3, denp(1)=Tastatura, cant(1)= 3, pret(1)=180.000 denp(2)=Mouse, cant(2)= 5, pret(2)=100.000 denp(3)=Modem, cant(3)= 2, pret(3)=550.000
84

Fig.1.50. Situaia de ieire pentru aplicaia 1.22

Aplicaia 1.23 S se determine suma final (F) aflat n contul bancar al unei persoane, tiind depunerea lunar (D), rata dobnzii lunare (I) i numrul de luni (M). Algoritm de calcul Programul folosete o structur repetitiv de tipul For...Next pentru a aduga n fiecare lun la suma final depunerea acelei luni i dobnda aferent: For k = 1 To Val(txtNrLuni) 'F este suma finala 'Pentru a doua luna se acorda dobanda dubla, pentru a treia - tripla samd F = F + D + D * I / 100 * k Next k Datorit unei structuri alternative (If...Then...Else), prelucrrile se execut numai n cazul n care datele de intrare au fost furnizate (au fost completate casetele de text corespunztoare). If txtDepunere <> " " And txtDobLunara <> " " And txtNrLuni <> " " Schema logic este prezentat n fig.1.51, iar schema logic general n fig.1.52.

85

Fig.1.51. Schema logic adaptat pentru Visual Basic pentru aplicaia 1.23 86

DA

Fig.1.52. Schema logic general pentru aplicaia 1.23 87

Prelucrarea se execut ca urmare a acionrii unui clic pe meniul mnuCalcul (Caption Calcul) Private Sub mnuCalcul_Click() Dim F As Double Dim D As Double Dim I As Double F=0 If txtDepunere <> " " And txtDobLunara <> " " And txtNrLuni <> " " Then D = Val(txtDepunere) I = Val(txtDobLunara) M = Val(txtNrLuni) For k = 1 To M 'F este suma finala 'Pentru a doua luna se acorda dobanda dubla, pentru a treia - tripla samd F = F + D + D * I / 100 * k Next k txtSumaFinala = Format(F, "fixed") Else MsgBox "Nu ati completat corect depunerea, dobanda lunara si/sau numarul de luni!" End If End Sub Private Sub mnuIesire_Click() Unload Me End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig. 1.53.

Fig. 1.53. Situaia de ieire pentru aplicaia 1.23 88

Aplicaia 1.24 S se calculeze amortizarea lunar a 12 mijloace fixe, tiind valoarea de inventar i norma de amortizare. Algoritm de calcul Informaiile despre cele 12 mijloace fixe sunt urmtoarele: denumire mijloc fix: denm; valoare inventar: vali; norma de amortizare: norma; amortizare lunar: aml. Se va calcula amortizarea lunar n funcie de norma de amortizare (1.28): aml = norma / 12 (1.28)

Se realizeaz un formular cu dou butoane de comand (fig.1.55): AMORTIZARE (Caption) pentru procedura de calcul i afiare a valorilor (cmdAmortizare) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmAmortizare Caption: AMORTIZARE Name: cmdAmortizare Caption: Amortizare Name: cmdIesire Caption: Iesire Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru calculul i afiarea rezultatelor n formular se folosete o structur de control repetitiv de tipul ForNext. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.54.

89

Fig. 1.54. Schema logic pentru rezolvarea aplicaiei 1.24

90

Procedurile cmdAmortizare _Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdAmortizare_Click() Dim denm As String Dim vali As Single Dim norma As Single Dim aml As Single Print Print "Mijloc fix Valoare Norma Amortizare" Print "_____________________________________________________________" For i = 1 To 12 denm = InputBox("Mijloc fix:") vali = InputBox("Valoare inventar:") norma = InputBox("Norma de amortizare:") aml = norma / 12 Print denm, vali, norma, aml Next i End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig.1.55.

Fig.1.55. Situaia de ieire pentru aplicaia 1.24

Aplicaia 1.25 S se calculeze profitul brut i dividendele la un agent economic, cunoscnd veniturile obinute i cheltuielile efectuate. Algoritm de calcul Interfaa aplicaiei nu conine nici un buton de comand; codul este ataat evenimentului Change (Schimbare) al unui control de tip bar de defilare orizontal (HscrollBar HScroll1). Restul controalelor de pe formular sunt etichete i casete de text. Pornind de la venituri i cheltuieli se determin fie un profit, fie o pierdere; indiferent de semnul rezultatului, aceeai caset de text (txtProfitBrut) afieaz rezultatul, cu precizarea c proprietatea Caption a etichetei ataat casetei de text se va schimba n Pierdere, dac veniturile sunt inferioare cheltuielilor. Evenimentul Change al barei de defilare orizontal se declaneaz ori de cte ori se acioneaz una din sgeile controlului, refcnd toate calculele. Schema logic este prezentat n fig.1.56.
91

Fig.1.56. Schema logic pentru aplicaia 1.25

92

Procedura Private Sub HScroll1_Change() are urmtorul cod: Private Sub HScroll1_Change() If Val(txtVenit) >= Val(txtCheltuieli) Then lblProc = HScroll1 txtProfitBrut = Val(txtVenit) - Val(txtCheltuieli) txtProfitNet = txtProfitBrut * (100 - Val(txtCotaImpozit)) / 100 txtSumaDividende = txtProfitNet * HScroll1 / 100 Else lblProfitBrut = "Pierdere" lblProfitBrut.ForeColor = vbRed txtProfitBrut = Val(txtCheltuieli) - Val(txtVenit) End If End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig.1.57.

Fig.1.57 Situaia de ieire pentru aplicaia 1.25 93

Aplicaia 1.26 S se scrie un program pentru crearea, actualizarea i afiarea unui fiier de tip text. Realizarea interfeei cu utilizatorul: Se realizeaz un formular cu dou butoane de comand (fig.1.59): FISIER TEXT (Caption) pentru procedura de calcul i afiare a sumei n valut (cmdDobanda) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:

Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Buton de comand (Command Button) Buton de comand (Command Button) Buton de comand (Command Button) Caseta de text (Text Box)

Proprieti Name: frmFisier Caption: FISIER TEXT Name: cmdFisNou Caption: Fisier Nou Name: cmdActualizare Caption: Salvare Name: cmdInchide Caption: Inchidere Name: cmdAfisare Caption: Afisare Name: cmdIesire Caption: Iesire Name: txtFis

Evenimente Click Click Click Click Click

Schema logic pentru prelucrarea fiierului este prezentat n fig. 1.58.

94

Fig. 1.58 Schema logic pentru rezolvarea aplicaiei 1.26

95

Public numefis As String Private Sub btnActualizare_Click() Dim TextFis As Variant Open numefis For Output As #1 TextFis = txtFis.Text Print #1, TextFis Close #1 End Sub Private Sub btnAfisare_Click() Dim TextFis As Variant Dim linfis As Variant txtFis.Visible = True txtFis.Text = " " Open numefis For Input As #1 While Not EOF(1) Line Input #1, linfis TextFis = TextFis & linfis Wend txtFis.Text = TextFis Close #1 End Sub Private Sub btnFisNou_Click() Dim denf As String txtFis.Text = " " denf = InputBox("Introduceti numele fisierului:") numefis = App.Path & "\" & denf & ".txt" MsgBox "Fisierul creat este:" & numefis txtFis.Visible = True Open numefis For Output As #1 Close #1 End Sub Private Sub btnInchide_Click() Close #1 txtFis.Visible = False End Sub Private Sub btnIesire_Click() End End Sub Datele de intrare utilizate, precum fig. 1.59.
96

i rezultatele obinute sunt prezentate n

Fig. 1.59 Situaia de ieire pentru aplicaia 1.26

Aplicaia 1.27 S se calculeze valoarea produciei neterminate de la sfritul lunii la o secie de producie a unei societi comerciale. Se cunosc: cheltuielile i costul comenzilor nchise. Prelucrarea se face pe baza contului cheltuieli producie de baz contul 500. n debitul contului sunt reprezentate totalul cheltuielilor lunii, iar n creditul contului se gsete costul comenzilor nchise. Valoarea produciei neterminate rezult din soldul debitor. Algoritm de calcul Numrul de comenzi (nrcom) se va introduce de ctre utilizator. Pentru fiecare comand se vor reine urmtoarele informaii: cheltuieli: Cheltuieli; costul comenzii: Cost. Se va calcula totalul cheltuielilor (TCheltuieli) i totalul costurilor (TCost) nregistrate cu comenzile: TCheltuieli = TCheltuieli + Cheltuieli TCost = TCost + Cost (1.29) (1.30)
97

Valoarea produciei neterminate (ValoareP) se va calcula dup formula: ValoareP = TCheltuieli TCost (1.31)

Se realizeaz un formular cu dou butoane de comand (fig. 1.61): PRODUCTIE NETERMINATA (Caption) pentru procedura de calcul i afiare a valorilor (cmdProductie) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:

Obiect Formular (Form)

Proprieti Name: frmProductie Caption: PRODUCTIE NETERMINATA Name: cmdProductie Caption: Productie Name: cmdIesire Caption: Iesire

Evenimente -

Buton de comand (Command Button) Buton de comand (Command Button)

Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru calculul i afiarea rezultatelor n formular se folosete o structur de control repetitiv de tipul For Next. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.60. n schema logic, se observ c mecanismul de calcul al Tcheltuieli i Tcost se bazeaz pe acumularea succesiv a cheltuielilor i a costurilor pe ramura de ,,Da a structurii alternative cu dou ramuri.

98

Fig.1.60. Schema logic pentru rezolvarea aplicaiei 1.27

99

Procedurile cmdProductie _Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdIesire_Click() End End Sub Private Sub cmdProductie_Click() Dim Cheltuieli As Long Dim Cost As Long Dim TCheltuieli As Long Dim TCost As Long Dim ValoareP As Long Dim nrcom As Integer nrcom = InputBox("Numarul de comenzi:") TCheltuieli = 0 TCost = 0 Print Print "Cheltuieli Costuri comenzi" Print "_________________________________" For i = 1 To nrcom Cheltuieli = InputBox("Valoare cheltuieli:") Cost = InputBox("Costul comenzii:") TCheltuieli = TCheltuieli + Cheltuieli TCost = TCost + Cost Print Cheltuieli, Cost Next i ValoareP = TCheltuieli - TCost Print "__________________________________" Print "Total cheltuieli:"; TCheltuieli Print "Total costuri:"; TCost Print "Valoare productie neterminata:"; ValoareP End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.61.

100

Fig. 1.61. Situaia de ieire pentru aplicaia 1.27

Aplicaia 1.28 S se calculeze suma de plat a energiei electrice, cunoscnd suma de plat la scaden (SumaInit), numrul de zile de ntrziere a plii la scaden (NrZile) i procentul de penalizare (ProcPenaliz). Dac persoana se afl la prima abatere (PrimaAbatere), penalizrile se reduc la jumtate. Algoritm de calcul Se completeaz casetele de text corespunztoare sumei de plat la scadena numrului de zile ntrziere i procentului de penalizare. Dac este prima abatere, se valideaz caseta chkAbatere (Caption: Prima abatere); n meniu, se acioneaz Calculeaz (Name: mnuCalculeaza). Crearea meniului se face astfel: clic dreapta pe suprafaa formularului, MenuEditor .a.m.d. Ulterior, se ataeaz cod evenimentelor click() pe elementele din meniu (de exemplu, Private Sub mnuCalculeaza_Click()). Prelucrrile sunt simple: programul conine o instruciune alternativ (If..End If) pentru a verifica dac persoana se afl la prima abatere. Variabila PrimaAbatere este de tip boolean, deci poate lua una din valorile adevrat (TRUE dac chkAbatere a fost bifat) sau fals (FALSE dac nu a fost bifat). PrimaAbatere = chkAbatere Variabila ProcPenaliz este declarat ca Single deoarece prin mprire la doi poate lua valori nentregi. Schema logic pentru codul ataat evenimentului Click() pe meniul mnuCalculeaza (Caption Calculeaza) este prezentat n fig.1.62.

101

Fig.1.62. Schema logic pentru aplicaia 1.28

102

Codul asociat evenimentelor Click() ale elementelor mnuCalculeaz, mnuIesire i mnuAjutor este urmtorul: Private Sub mnuAjutor_Click() lblHelp.Visible = True End Sub Private Sub mnuCalculeaza_Click() Dim SumaInit As Double, NrZile As Integer, _ ProcPenaliz As Single, SumaFin As Double, _ PrimaAbatere As Boolean SumaInit = Val(txtSuma) NrZile = Val(txtIntarziere) PrimaAbatere = chkAbatere If PrimaAbatere Then ProcPenaliz = Val(txtProcent) / 2 Else ProcPenaliz = Val(txtProcent) End If SumaFin = SumaInit + SumaInit * (ProcPenaliz / 100) * NrZile txtTotal = Format(SumaFin, "Standard") End Sub Private Sub mnuIesire_Click() Unload Me End Sub

de

meniu

Fig.1.63. Situaia de ieire pentru aplicaia 1.28 103

Aplicaia 1.29 S se realizeze un program pentru analiza costurilor pe tipuri de produse. S se determine tipul costului n funcie de factorul de elasticitate (e). Se cunosc: produci (q) n buci i costul n lei. n rezolvarea aplicaiei, se calculeaz i costul marginal al produciei ca raport ntre diferena costurilor (dif_c) i diferena produciei (dif_q), costul unitar ca raport ntre cost i q i coeficientul de elasticitate (e) ca raport ntre costul marginal al perioadei curente i costul unitar al perioadei de baz. Algoritm de calcul Formulele de calcul sunt: Costul unitar: n perioada curent: cu = c / q n perioada de baz: cub = cb / qb Costul marginal: cm = dif_c / dif_q Coeficientul de elasticitate: e = cm / cub

(1.32)

Se realizeaz un formular cu dou butoane de comand (fig.1.65): ANALIZA COSTURILOR (Caption) pentru procedura de calcul i afiare a punctului de echilibru (cmdAnaliza) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) 104 Proprieti Name: frmAnaliza Caption: ANALIZA COSTURILOR Name: cmdAnaliza Caption: Analiza Name: cmdIesire Caption: Iesire Name: txtC Caption: Costul Name: txtCB Caption: Productia Name: txtQ Name: txtQB Caption: Costul Unitar Name: txtCU Name: txtCUB Caption: Costul Marginal Name: txtCM Caption: Coeficientul de elasticitate Name: txtE Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare din casete de text din formular. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.64. START Citete c, cb, q, qb cu = c / q cub = cb / qb dif_c = cu - cub dif_q = q - qb cm = dif_c / dif_q e = cm / cub Afieaz cu, cub, cm, e STOP
Fig. 1.64. Schema logic pentru rezolvarea aplicaiei 1.29

Procedurile cmdAnaliza_Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdAnaliza _Click() declararea variabilelor de lucru Dim c As Double Dim cb As Double Dim q As Double Dim qb As Double Dim cm As Double Dim cu As Double Dim cub As Double Dim dif_c As Double Dim dif_q As Double Dim e As Double introducerea datelor de intrare c = txtC.Text cb = txtCB.Text
105

q = txtQ.Text qb = txtQB.Text se calculeaza costul unitar, costul marginal, coeficientul de echilibru cu = c / q cub = cb / qb dif_c = cu - cub dif_q = q - qb cm = dif_c / dif_q e = cm / cub se afiseaza in casete de text rezultatele txtCU.Text = cu txtCUB.Text = cub txtCM.Text = cm txtE.Text = e End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate pentru obinerea rezultatelor din fig. 1.65 sunt: Cu=550000 Cub=525000 Q=200 Qb=250

Fig. 1.65. Situaia de ieire pentru aplicaia 1.29 106

Aplicaia 1.30 Pentru o societate comercial care produce un numr nedefinit de produse, s se actualizeze preurile acestora n funcie de rata inflaiei pe o durat de ase ani. Date de intrare sunt denumire produs den, pre produs pret, rata inflaiei rinfl. Algoritm de calcul n program s-au folosit dou structuri repetitive, una de tip WhileWend (condiionat anterior), iar cealalt de tip DoLoop Until (condiionat posterior). Logica este urmtoarea: ncepnd cu ase ani n urm, produsele fiecrui an se actualizeaz cu o rat constant, introdus la nceputul programului. Pentru un an se pot introduce oricte produse. Programul nu stocheaz datele ntr-un fiier sau ntr-o baz de date, de aceea numrul de produse pentru care se va calcula preul actualizat este limitat de suprafaa formularului. n scopul mririi acestei suprafee, n meniu s-a plasat opiunea Mrire formular care adaug 500 de pixeli la nlimea formularului, n partea de jos: Me.Height = Me.Height + 500 (1.33)

Se creeaz astfel posibilitatea de a se hotr la momentul execuiei ce suprafa este necesar, n funcie de numrul de produse ce se actualizeaz. Linia n care se face actualizarea este urmtoarea: pret_act = pret + pret * (rinfl / 100) * (7 - i) Schema logic este prezentat n fig.1.66. (1.34)

107

Fig.1.66. Schema logic pentru aplicaia 1.30 108

Codul surs al programului este urmtorul: Private Sub mnuActPret_Click() Print "Situatia preturilor actualizate la inflatie" Print String(45, "=") Print "Denumire"; Tab(25); "Pret"; Tab(35); "Pret" Print "produs"; Tab(25); "initial"; Tab(35); "actualizat" Print String(45, "=") i=1 rinfl = InputBox("Introduceti rata inflatiei in procente (ex:20 pt 20%)") While i <= 6 Print "Produse de acum " & (7 - i) & "ani" Print "***********************************" Do den = InputBox("Introduceti denumire produsului:", "De acum " & (7 - i) & " ani") pret = InputBox("Introduceti pretul produsului:", "De acum " & (7 - i) & " ani") pret_act = pret + pret * (rinfl / 100) * (7 - i) Print den; Tab(25); pret; Tab(35); pret_act Loop Until MsgBox("Continuati cu alt produs ?", vbYesNo, "Produs nou?") = vbNo i=i+1 Wend End Sub Private Sub mnuExit_Click() End End Sub Private Sub mnuMarire_Click() Me.Height = Me.Height + 500 End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig.1.67.

109

Fig.1.67. Situaia de ieire pentru aplicaia 1.30

110

Aplicaia 1.31 S se scrie un program pentru nregistrarea rulajului n conturile de eviden ale unei societi comerciale. nregistrarea valorilor creditoare se va face automat o dat cu nregistrarea valorii debitoare. Algoritm de calcul Numrul de conturi (nrc) se va introduce de ctre utilizator. Pentru fiecare cont se rein urmtoarele date: denumire cont: cont; rulaj debitor: rdebit; rulaj creditor: rcredit. Se realizeaz un formular cu dou butoane de comand (fig. 1.69): RULAJE (Caption) pentru procedura de calcul i afiare a valorilor (cmdRulaje) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:

Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button)

Proprieti Name: frmRulaje Caption: RULAJE Name: cmdRulaje Caption: Rulaje Name: cmdIesire Caption: Iesire

Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru calculul i afiarea rezultatelor n formular se folosete o structur de control repetitiv de tipul ForNext, n care nrc reprezinat numrul de conturi. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.68.
111

Fig.1.68. Schema logic pentru rezolvarea aplicaiei 1.31

112

Procedurile cmdRulaje _Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdRulaje_Click() Dim nrc As Integer Dim cont As Integer Dim rdebit As Long Dim rcredit As Long nrc = InputBox("Numarul de conturi:") Print Print For i = 1 To nrc cont = InputBox("Contul:") rdebit = InputBox("Rulaj debit:") rcredit = InputBox("Rulaj credit:") Print "Cont:"; cont Print "Rulaje:"; rdebit, rcredit Next i End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.69.

Fig. 1.69. Situaia de ieire pentru aplicaia 1.31

113

Aplicaia 1.32 S se calculeze vnzrile medii lunare i vnzrile totale anuale, tiindu-se vnzrile zilnice ale unei societi comerciale. Algoritm de calcul Programul calculeaz vnzrile pe fiecare lun, totalul anual, precum i media lunar, pornind de la vnzrile zilnice. Primul formular al aplicaiei cuprinde dou casete combinate (cboZiua i cboLuna) i o caset de text (txtVanzari) pentru preluarea datelor de intrare (Ziua, Luna, Vanzari). Dup introducerea datelor se acioneaz butonul cmdAdaug (Caption Adauga), care realizeaz urmtoarele prelucrri: n cazul n care casetele sunt completate corect, declar variabilele val_lun (tablou de 13 elemente) i val_an cu Static, pentru a-i pstra valorile ntre apelurile procedurii; incrementeaz vnzrile pentru luna aleas cu valoarea completat n txtVanzri: val_luna(luna_crt) = val_luna(luna_crt) + Val(txtVanzari), unde luna_crt ia o valoare cuprins ntre 1 i 12; de asemenea, incrementeaz i variabila val_an cu aceeai valoare. afieaz pe suprafaa formularului Form1 vnzrile lunare, precum i totalul anual i media lunar; deschide fiierul C:\rezultat.txt, n care ine evidena vnzrilor pe zile. Butonul cmdSituatie (Caption Afieaz situaie pe zile) ncarc formularul al doilea al aplicaiei (Form2) care conine un singur control de tip RichTextBox. Acest control ncarc i afieaz fiierul C:\rezultat.txt. (Pentru adugarea unui control de tip RichTextBox n bara de instrumente din meniul Project/Components, se alege Microsoft Rich Textbox Control 6.0 (SP3)). Problema a fost abordat i n aplicaia 1.21, fig.1.45. Codul surs asociat butoanelor formularului Form1 i evenimentului Load al formularului este urmtorul: Private Sub cmdAdauga_Click() If Not Is Numeric(cboZiua) Or Not Is Numeric(cboLuna) Or Not Is Numeric(txtVanzari) Then Exit Sub Cls Static val_luna(12) As Double 'tabloul contine 13 elemente dar vom neglija elementul zero Static val_an As Double Dim luna_crt As Byte luna_crt = Val(cboLuna.Text) val_luna(luna_crt) = val_luna(luna_crt) + Val(txtVanzari) val_an = val_an + Val(txtVanzari)
114

For i = 1 To 12 Print "Luna "; i; Tab(15); val_luna(i) Next i Print Print "Total an:"; Tab(15); val_an Print "Media lunara:"; Tab(15); Format(val_an / 12, "#####.00") Open "c:\rezultat.txt" For Append As #1 Print #1, "Ziua "; cboZiua; " "; "Luna "; cboLuna; " "; _ txtVanzari Close #1 End Sub Private Sub cmdSituatie_Click() Form2.Show End Sub Private Sub Form_Load() On Error Resume Next Kill "c:\rezultat.txt" End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig.1.70 i fig.1.71.

La fiecare acionare a butonului ADAUGA datele sunt nregistrate i afiate n partea stng a formularului

Clic aici determin afiarea formularului Form2 (fig.1.71)

Fig.1.70. Situaia de ieire pentru aplicaia 1.32 (Form1) 115

Control RichTextBox afind coninutul fiierului C:\rezultat.txt Fig.1.71. Situaia de ieire pentru aplicaia 1.32 (Form2)

Aplicaia 1.33 S se ntocmeasc balana de verificare, tiind simbol cont, denumire cont, sold iniial, tip cont, rulaj debitor i rulaj creditor. Balana de verificare va avea forma: simbol cont, denumire cont, sold iniial, rulaje, total sume, sold final. Algoritm de calcul Pentru ntocmirea balanei de verificare, se rein urmtoarele date despre cont: denumire cont: cont; simbol cont: nrc; tip cont: tipc; sold iniial: soldi; rulaj debitor: rdebit; rulaj creditor: rcredit; total sume debitoare: tsd; total sume creditoare: tsc; sold final: soldf. Se va calcula totalul sumelor debitoare (tsd) i totalul sumelor creditoare (tsc): tsd = tsd + rdebit (1.37) tsc = tsc + rcredit (1.38) Soldul final al contului (soldf) se va calcula n funcie de tipul contului (tipc), dup formula: Dac tipc =D, atunci soldf = tsd tsc altfel: soldf = tsc tsd (1.39) Se realizeaz un formular cu dou butoane de comand (fig.1.73): BALANTA (Caption) pentru procedura de calcul i afiare a valorilor (cmdBalanta) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmBalanta Caption: BALANTA Name: cmdBalanta Caption: Balanta Name: cmdIesire Caption: Iesire Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru calculul i afiarea rezultatelor n formular se folosete o structur de control repetitiv de tipul ForNext, iar pentru verificarea tipului de cont se utilizeaz o structur de control alternativ de tipul If Then ElseEnd if. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.72
116

Fig.1.72. Schema logic pentru rezolvarea aplicaiei 1.33

117

Procedurile cmdBalanta _Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdBalanta_Click() Dim nrc As Integer Dim cont As String Dim tipc As String Dim rdebit As Long Dim rcredit As Long Dim tsd As Long Dim tsc As Long Dim soldf As Long Dim soldi As Long Print Print nrc = InputBox("Numar cont:") cont = InputBox("Contul:") tipc = InputBox("Tip cont (D/C):") soldi = InputBox("Sold initial:") tsd = 0 tsc = 0 Print "Nr cont:"; nrc Print "Cont:"; cont Print "Tip cont:"; tipc Print "Sold initial:"; soldi Print "Rulaje:" For i = 1 To 3 rdebit = InputBox("Rulaj debit:") rcredit = InputBox("Rulaj credit:") tsd = tsd + rdebit tsc = tsc + rcredit Print rdebit, rcredit Next i Print "Total suma debitoare:"; tsd Print "Total suma creditoare:"; tsc If tipc = "D" Then soldf = tsd - tsc Else soldf = tsc - tsd End If Print "Sold final:"; soldf End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.73.
118

Fig. 1.73. Situaia de ieire pentru aplicaia 1.33

Aplicaia 1.34 La un service de telefonie mobil se ine evidena produselor pentru care se acord garanie. Se cunosc: nume client (nume), denumire produs/operaie (den_prod), data intrrii n garanie (data_incep), numr de zile pentru care se acord garani (zile_gar). Se cere s se afieze numele clienilor i denumirea produsului pentru care termenul de garanie a expirat. Algoritm de calcul n cazul n care adugnd la data nceperii garaniei numrul de zile oferite garanie obinem o dat anterioar celei curente, se consider c garania a expirat i se tipresc numele clientului i cel al produsului respectiv. If data_incep + zile_gar < Date Then Print nume; Tab(20); den_prod Dei enunul problemei nu prevede, s-a calculat numrul produselor pentru care garania a expirat cu ajutorul variabilei total care este incrementat cu 1 numai dac se evalueaz ca fiind adevrat condiia din If. De asemenea, se utilizeaz funcia (nu instruciunea!) MsgBox, care returneaz valoarea vbYes sau vbNo, dup cum s-a acionat butonul Yes sau No n caseta MsgBox; variabila rasp preia una dintre aceste valori i programul se ncheie numai dac rasp are valoare vbNo (nu se mai dorete continuarea). rasp = MsgBox("Continuati cu alt produs?", vbYesNo, "rasp") Loop Until rasp = vbNo Proprietatea Default a butonului de comand cmdGarantii este setat la valoarea True: dac se tasteaz Enter cnd formularul aplicaiei este activ, va fi declanat procedura eveniment asociat acestui buton, ca i cum s-ar face clic pe buton. Proprietatea Cancel a butonului de comand cmdExit este setat tot la valoarea True: tastarea Escape este echivalent cu acionarea acestui buton, executndu-se codul asociat butonului, deci se prsete aplicaia. Schema logic corespunztoare procedurii Private Sub cmdGarantii_Click() este prezentat n fig.1.74.
119

Fig.1.74. Schema logic pentru aplicaia 1.34

120

ntregul program este asociat evenimentului Click() pe butonul de comand cmdGaranii, iar pentru ieirea din aplicaie s-a folosit butonul cmdExit: Private Sub cmdGarantii_Click() Dim nume As String Dim den_prod As String Dim data_incep As Date Dim zile_gar As Integer, total As Integer Print " Situatia garantiilor expirate" Print "Nume cl"; Tab(20); "Produs" total = 0 Do nume = InputBox("Numele clientului:", "Nume client", "Nastase Marin") den_prod = InputBox("Denumirea produsului:", "Denumire produs", "Nokia 8989") data_incep = InputBox("Data inceperii perioadei de garantie:", _ "Data inceput", Date) zile_gar = InputBox("Garantia (nr de zile):", "Perioada de garantie", 365) If data_incep + zile_gar < Date Then Print nume; Tab(20); den_prod total = total + 1 End If rasp = MsgBox("Continuati cu alt produs?", vbYesNo, "rasp") Loop Until rasp = vbNo Print "_______________________________" Print Print "A expirat garantia pentru "; total; "produse" End Sub Private Sub cmdExit_Click() Unload Me End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig.1.75.

Fig.1.75. Situaia de ieire pentru aplicaia 1.34 121

Aplicaia 1.35 S se calculeze riscul pentru creditul acordat de o banc unui client, pentru achiziionarea unui autoturism, tiind suma mprumutat (s_i), valoarea garaniei (gar), rata de diminuare a garaniei (rata) i probabilitatea de realizare a pierderii (p). Algoritm de calcul Se calculeaz valoarea diminuat a garaniei (gar_dim) cu ajutorul formulei (1.40): gar_dim = gar * (1 rata) (1.40) Riscul pentru creditul acordat de banc unui client (r) se calculeaz astfel: r = (s_i gar_dim) * p (1.41) Se realizeaz un formular cu dou butoane de comand (fig. 1.77): RISC CREDIT (Caption) pentru procedura de calcul i afiare a sumei n valut (cmdRisc) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Proprieti Name: frmRisc Caption: RISC CREDIT Name: cmdRisc Caption: Risc credit Name: cmdIesire Caption: Iesire Name: txtNume Caption: Nume Name: txtS_i Caption: Suma imprumutata Name: txtGar Caption: Garantie Name: txtRata Caption: Rata de diminuare Name: txtP Caption: Probabilitatea de realizare a pierderii Name: txtR Caption: Risc Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare din casete de text din formular. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.76.
122

START

Citete s_i, gar, rata, p

gar_dim = gar * (1 - rata) r = (s_i - gar_dim) * p

Afieaz r

STOP

Fig. 1.76. Schema logic pentru rezolvarea aplicaiei 1.35

Procedurile cmdRisc_Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdRisc_Click() declararea variabilelor de lucru Dim nume As String Dim s_i As Double Dim gar As Double Dim rata As Double Dim p As Double Dim gar_dim As Double Dim r As Double citirea datelor nume = txtNume.Text s_i = txtS_i.Text gar = txtGar.Text rata = txtRata.Text p = txtP.Text calcul risc
123

rata = rata / 100 gar_dim = gar * (1 - rata) r = (s_i - gar_dim) * p afisarea in casete de text txtR.Text = r End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate pentru obinerea rezultatelor din fig. 1.77 sunt: Nume: Popescu Vasile Suma mprumutat: 120.000.000 Garania: 130.000.000 Rata: 25% Probabilitatea: 0.01

Fig. 1.77. Situaia de ieire pentru aplicaia 1.35 124

Aplicaia 1.36 Pentru o grup de studeni se cunosc: numrul de studeni n grup=10, numele (nume) i notele obinute de fiecare la 2 examene (nota1 i nota2). Se cere: s se calculeze media fiecrui student, s se afieze numele studenilor bursieri (medie>=9) i ale studenilor care obin burse de merit (medie=10). Algoritm de calcul Pentru fiecare dintre cei 10 studeni se introduc numele, nota1, nota2 pe baza crora se calculeaz media; n funcie de medie, utiliznd o instruciune Select...End Select se determin tipul bursei: Select Case media Case 10 tip_bursa = "de merit" variabila tip_bursa accept date de tip ir de caractere Case Is >= 9 tip_bursa = "de studiu" Case Else tip_bursa = " - - - " End Select Schema logic este prezentat n fig.1.78.

125

Fig.1.78. Schema logic pentru aplicaia 1.36 126

Procedurile Private Sub cmdExit_Click() au urmtorul cod:

cmdSituatie_Click() i

Private

Sub

Private Sub cmdSituatie_Click() Dim nume As String Dim nota1 As Single 'pentru cazul in care se introduc zecimale Dim nota2 As Single Dim media As Single Dim tip_bursa As String Print "Nume"; Tab(25); "Media"; Tab(40); "Tip bursa" Print String(40, "=") For i = 1 To 10 nume = InputBox("Introduceti numele studentului " & i, "Nume", "Popescu") nota1 = InputBox("Introduceti nota 1 pentru studentul " & nume, "Nume", 10) nota2 = InputBox("Introduceti nota 2 pentru studentul " & nume, "Nume", 10) media = (nota1 + nota2) / 2 Select Case media Case 10 tip_bursa = "de merit" Case Is >= 9 tip_bursa = "de studiu" Case Else tip_bursa = " - - - " End Select Print nume; Tab(25); media; Tab(40); tip_bursa Next i Print String(40, "=") End Sub Private Sub cmdExit_Click() End End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig.1.79.

127

Fig.1.79. Situaia de ieire pentru aplicaia 1.36

Aplicaia 1.37 O banc primete solicitarea de acordare de credite pentru doi clieni care prezint urmtorii indicatori financiari: active cu lichiditate imediat (a), datorii eligibile imediat (d), capital propriu (cp), datorii totale (dt) i profit net (pn). S se evalueze bonitatea firmelor cu ajutorul indicatorului lichiditii (il) cu limita minim il_min, indicatorul solvabilitii (is) i indicele de rentabilitate (ir) cu limita minim ir_min. Algoritm de calcul Indicatorul lichiditii (il) pentru fiecare client (i) se calculeaz cu formulei (1.42): il(i) =a(i)/d(i) Indicatorul solvabilitii (is): isol(i) = cp(i) / (cp(i) + dt(i)) Indicele de rentabilitate: ir(i) = pn(i) / cp(i) ajutorul (1.42) (1.43) (1.44)

Se realizeaz un formular cu dou butoane de comand (fig.1.81): CREDITARE CLIENTI (Caption) pentru procedura de calcul i afiare a sumei n valut (cmdCreditare) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
128

Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Caset de text (Text Box) 2 Etichete (Labels) Caset de text (Text Box) 2 Etichete (Labels) Caset de text (Text Box) 2 Etichete (Labels) Caset de text (Text Box) 2 Etichete (Labels) Caset de text (Text Box) 2 Etichete (Labels) Caset de text (Text Box) 2 Etichete (Labels) Caset de text (Text Box) 2 Etichete (Labels) Caset de text (Text Box) 2 Etichete (Labels) Caset de text (Text Box) 2 Etichete (Labels)

Proprieti Name: frmCreditare Caption: CREDITARE CLIENTI Name: cmdCreditare Caption: Creditare Name: cmdIesire Caption: Iesire Name: txtNume Caption: Nume Name: txtA Caption: Active Imediate Name: txtD Caption: Datorii Imediate Name: txtCP Caption: Capital Propriu Name: txtDT Caption: Datorii Totale Name: txtPN Caption: Profit Net Name: txtIL Caption: Indicator Lichiditate Name: txtIS Caption: Indicator Solvabilitate Name: txtIR Caption: Indice Rentabilitate

Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetelor de text. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.80.

129

Fig.1.80. Schema logic pentru rezolvarea aplicaiei 1.37

130

Private Sub btnCreditare_Click() Dim DenC(2) As String Dim a(2) As Single Dim d(2) As Single Dim cp(2) As Single Dim dt(2) As Single Dim pn(2) As Single Dim il(2) As Double Dim isol(2) As Double Dim ir(2) As Double For i = 1 To 2 DenC(i) = txtNume(i).Text a(i) = txtA(i).Text d(i) = txtD(i).Text cp(i) = txtCP(i).Text dt(i) = txtDT(i).Text pn(i) = txtPN(i).Text il(i) = a(i) / d(i) isol(i) = cp(i) / (cp(i) + dt(i)) ir(i) = pn(i) / cp(i) txtIL(i).Text = il(i) txtIS(i).Text = isol(i) txtIR(i).Text = ir(i) Next i End Sub Private Sub btnIesire_Click() End End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.81.

Fig. 1.81. Situaia de ieire pentru aplicaia 1.37 131

Aplicaia 1.38 Se dau: numr de studeni=20. Valoarea taxei de colarizare=300 $. Pentru fiecare student se cunoate: numele (nume) i suma achitat (suma_ach). S se afiseze studenii care nu au achitat taxa de scolarizare i suma pe care trebuie s o achite. Algoritm de calcul Programul conine o instruciune repetitiv For...Next i una alternativ IfEnd If. Pentru cei 20 de studeni se introduc numele i valoarea achitat din tax (variabila suma_ach); dac suma_ach este inferioar valorii taxei (nu a fost achitat integral, 300 USD) se calculeaz ct mai are de achitat: suma_rest = 300 suma_ach (1.45)

Butoanele de comand au ataate Help contextual: dac se oprete mouse-ul deasupra lui cmdCalcul se va afia textul Clic pentru lansarea aplicatiei (fig.1.82). Pentru aceasta s-a folosit proprietatea ToolTipText a butonului de comand.

Fig.1.82. Ajutor contextual pentru un buton de comand

Schema logic este prezentat n fig.1.83.

132

Fig.1.83. Schema logic pentru aplicaia 1.38

133

Procedurile Private Sub cmdExit_Click() au urmtorul cod:

cmdCalcul_Click() i

Private

Sub

Private Sub cmdCalcul_Click() Dim nr As Byte Dim nume As String Dim suma_ach As Single Dim suma_rest As Single Const taxa = 300 Print " Situatia taxei de scolarizare" Print "Nume"; Tab(20); "Suma achitata"; Tab(40); "Suma de achitat" Print String(50, "=") For i = 1 To 20 nume = InputBox("Introduceti numele studentului " & i, "Nume", "Popescu") suma_ach = InputBox("Introduceti suma achitata de studentul " & nume, "Suma achitata", 300) If suma_ach < taxa Then suma_rest = taxa - suma_ach Print nume; Tab(20); suma_ach; Tab(40); suma_rest nr = nr + 1 End If Next i Print String(50, "=") Print "Nr studenti cu taxa neachitata integral: "; nr End Sub Private Sub cmdExit_Click() Unload Me End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig.1.84.

Fig. 1.84. Situaia de ieire pentru aplicaia 1.38 134

Aplicaia 1.39 O banc primete un certificat de depozit de s lei, cu o dobnd de db% pentru o perioad de p zile. Deintorul certificatului l vinde la burs dup t luni, cu o dobnd de db%. S se calculeze dobnda la depozitul bancar constituit (dc), preul de vnzare al certificatului dup t luni (ps) i rata dobnzii la care se cumpr certificatul (d2). Algoritm de calcul Formulele de calcul sunt urmtoarele (1.46): d_c = s * d * t / 36000 p_s = ((1 + d * t / 36000) / (1 + d_b * t1 / 36000)) * s d2 = ((s + d_c p_s) / p_s) * 36000 / t1

(1.46)

Se realizeaz un formular cu dou butoane de comand (fig. 1.84): CERTIFICAT DE DEPOZIT (Caption) pentru procedura de calcul i afiare a sumei n valut (cmdDobanda) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmator:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) 2 Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Caset de text (Text Box) Etichete (Labels) Proprieti Name: frmDobanda Caption: CERTIFICAT DE DEPOZIT Name: cmdDobanda Caption: Dobanda Name: cmdIesire Caption: Iesire Name: txtS Caption: Valoare nominala Name: txtD Caption: Rata dobanzii Name: txtT Caption: Perioada de emisiune Name: txtT1 Caption: Perioada pana la scadenta Name: txtD_B Caption: Rata dobanzii (vanzare) Name: txtD_C Caption: Dobanda depozit Name: txtP_S Caption: Pretul de vanzare Name: txtD2 Caption: Rata dobanzii (cumparare) Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetelor de text. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.85.
135

START

Citete s, d, t, t1, d_b,

d_c = s * d * t / 36000 p_s = ((1 + d * t / 36000) / (1 + d_b * t1 / 36000)) * s d2 = ((s + d_c - p_s) / p_s) * 36000 / t1

Afieaz d_c, p_s, d2

STOP

Fig. 1.85. Schema logic pentru rezolvarea aplicaiei 1.39

136

Private Sub btnDobanda_Click() Dim s As Double Dim d As Double Dim t As Integer Dim t1 As Integer Dim d_b As Double Dim d_c As Double Dim d2 As Double Dim p_s As Double s = txtS.Text d = txtD.Text t = txtT.Text t1 = txtT1.Text d_b = txtD_B.Text d_c = s * d * t / 36000 p_s = ((1 + d * t / 36000) / (1 + d_b * t1 / 36000)) * s d2 = ((s + d_c - p_s) / p_s) * 36000 / t1 txtD_C.Text = d_c txtP_S.Text = p_s txtD2.Text = d2 End Sub Private Sub btnIesire_Click() End End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig.1.86.

Fig.1.86. Situaia de ieire pentru aplicaia 1.39 137

Aplicaia 1.40 Pentru o societate care are filiale n 10 orae ale rii se cunosc: denumirea localitii (den) i volumul vnzrilor nregistrate de fiecare filial la sfritul anului. S se sorteze n ordine cresctoare filialele n funcie de volumul vnzrilor (vz).

Algoritm de calcul Pentru sortarea datelor este necesar ca acestea s fie memorate ca elemente ale unui vector. ntruct utilizm pe lng vnzri i denumirile localitilor, sunt necesari doi vectori de cte 10 elemente: vectori au de fapt 11 elemente, de la 0 la 10 dar utilizm doar 10 Dim vz(10) As Double Dim den(10) As String Primul ciclu For se ocup de introducerea datelor i calcularea totalului vnzrilor, care va fi afiat la sfrit. Urmeaz dou cicluri For imbricate, care sorteaz prin interschimbare elementele celor doi vectori; dac s-ar fi sortat numai vnzrile, denumirile localitilor ar fi rmas neschimbate i nu ar mai fi corespuns datelor iniiale ale problemei. n final, se afieaz vnzrile sortate, precum i totalul calculat pe msur ce s-au introdus datele (primul ciclu For). Schema logic este prezentat n fig.1.87 i 1.88.

138

Fig.1.87. Schema logic pentru aplicaia 1.40 (partea I) 139

Fig.1.88. Schema logic pentru aplicaia 1.40 (partea a II-a)

140

Procedurile Private Sub mnuVanzari_Click() mnmuExit_Click() au urmtorul cod: Private Sub mnuVanzari_Click() Dim vz(10) As Double Dim den(10) As String Dim total As Double Dim elem As Single Dim str As String Print "Sortare crescatoare dupa vnzri" Print String(30, "=") Print "Denumire"; Tab(30); "Vanzari" 'introducerea datelor For i = 1 To 10 den(i) = InputBox("Introduceti denumirea localitatii " & i) vz(i) = InputBox("Introduceti vnzrile din " & den(i)) total = total + vz(i) Next i 'sortarea prin interschimbare For i = 1 To 10 For j = i + 1 To 10 If vz(j) < vz(i) Then elem = vz(j) vz(j) = vz(i) vz(i) = elem str = den(j) den(j) = den(i) den(i) = str End If Next j Next i 'afisarea crescatoare For i = 1 To 10 Print den(i); Tab(30); vz(i) Next i Print String(30, "=") Print "TOTAL"; Tab(30); total Print String(30, "=") End Sub Private Sub mnmuExit_Click() End End Sub

Private

Sub

Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.89.

141

Fig. 1.89. Situaia de ieire pentru aplicaia 1.40

Aplicaia 1.41 S se calculeze anuitile trimestriale i s se ntocmeasc tabelul de rambursare a mprumutului pentru un credit cu convenie de rambursare n rate constante, tiind: suma creditului (suma credit), dobnda anual (da), data acordrii creditului (data credit), durat (durata). Rambursarea se efectueaz n anuiti trimestriale, iar dobnda se pltete trimestrial. Algoritm de calcul Formulele de calcul sunt urmtoarele: rata_trim = suma_credit / durata (1.47) Pentru fiecare lun avem: dobanda(i) = si * d_a / 12 Dac este sfrit de trimestru (i Mod 3 = 0) (1.48) atunci sr = sr rata_trim anuitate(i) = dobanda(i) + rata_trim si = si sr Altfel: anuitate(i) = dobanda(i) total_plata = total_plata + anuitate(i) (1.49) Se realizeaz un formular cu dou butoane de comand (fig.1.91): CREDITARE CLIENTI (Caption) pentru procedura de calcul i afiare a sumei n valut (cmdCreditare) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Caset de text (Text Box) 2 Etichete (Labels) Proprieti Name: frmCreditare Caption: CREDITARE CLIENTI Name: cmdCreditare Caption: Calculeaza Anuitati Name: cmdIesire Caption: Iesire Name: txtIR Caption: Indice Rentabilitate Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a datelor InputBox. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.90.
142

Fig.1.90. Schema logic pentru rezolvarea aplicaiei 1.41 143

Private Sub btnCredit_Click() Dim suma_credit As Double Dim d_a As Double Dim data_credit As Date Dim durata As Integer Dim rata_trim As Double Dim vali(12) As Double Dim valf(12) As Double Dim dobanda(12) As Double Dim anuitate(12) As Double Dim i As Double Dim sr As Double Dim total_plata As Double Cls suma_credit = InputBox("Suma creditului:") d_a = InputBox("Rata anuala:") durata = InputBox("Durata creditului (in trimestre):") rata_trim = suma_credit / durata n = durata * 3 si = suma_credit sr = suma_credit total_plata = 0 For i = 1 To n vali(i) = si dobanda(i) = i * d_a / 12 If (i Mod 3 = 0) Then sr = sr rata_trim anuitate(i) = dobanda(i) + rata_trim i = i sr Else anuitate(i) = dobanda(i) End If valf(i) = sr total_plata = total_plata + anuitate(i) Next i Print "Luna - Valoare Initiala Valoare ramasa - Rata - Dobanda - Anuitate --" For i = 1 To n Print "_______________________________________________________________" Print " "; i; " "; vali(i); " "; valf(i); " "; rata_trim; " "; dobanda(i); " "; anuitate(i) Next i Print "________________________________________________________________" Print "Total de plata:"; total_plata End Sub Private Sub btnIesire_Click() End End Sub
144

Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.91.

Fig. 1.91. Situaia de ieire pentru aplicaia 1.41

Aplicaia 1.42 S se calculeze suma elementelor de pe liniile unei matrice cu n linii i m coloane, reprezentnd vnzrile zilnice pe tipuri de produse ale unei societi comerciale. Algoritm de calcul Informaiile despre vnzri se pot grupa n urmtorul tabel:
Produs P1 ... Pi Pn Z1 ... Zj... Zm Total (volumvz (i)) 1

Algoritmul de calcul presupune parcurgerea fiecrui produs, produs(i), la fiecare realizndu-se nsumarea vnzrilor zilnice, vanzariz(j), pentru aflarea volumului total al vnzrilor, volumvz(i). La fiecare produs, iniial volumul vnzrilor va fi egal cu 0. La acesta se adun vnzrile zilnice: volumvz(i) = volumvz (i) + vanzariz(j), j=1, m i i=1, n (1.50)
145

Se realizeaz un formular cu dou butoane de comand (fig.1.93): VANZARI (Caption) pentru procedura de calcul i afiare a penalitilor (cmdVanzari) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:

Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button)

Proprieti Name: frmVanzari Caption: VANZARI Name: cmdVanzari Caption: Calculeaza vnzri Name: cmdIesire Caption: Iesire

Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru parcurgerea produselor i a vnzrilor zilnice se folosete o structur de control repetitiv de tipul For...Next imbricat: FOR i = 1 TO n FOR j=1 TO m NEXT j NEXT i Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.92. - pentru produse - pentru vnzrile zilnice prelucrri

146

Fig. 1.92. Schema logic pentru rezolvarea aplicaiei 1.42 147

Procedurile cmdVanzari _Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdIesire_Click() End End Sub Private Sub cmdVanzari_Click() Dim nrprod As Integer Dim nrzile As Integer Dim denp(10) As String Dim vnzriz(10) As Single Dim volumvz(10) As Single nrprod = InputBox("Numarul de produse:") nrzile = InputBox("Numarul de zile:") Print "Denumire Volum Vanzari" Print "_______________________________________" For i = 1 To nrprod denp(i) = InputBox("Denumire produs:") volumvz(i) = 0 For j = 1 To nrzile vnzriz(j) = InputBox("Vanzari:") volumvz(i) = volumvz(i) + vnzriz(j) Next j Print denp(i), volumvz(i) Next i End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.93.

Fig. 1.93. Situaia de ieire pentru aplicaia 1.42 148

Aplicaia 1.43 S se calculeze media elementelor de pe coloanele unei matrice cu n linii i m coloane, reprezentnd valorile rezultate n urma unui sondaj statistic n n orae ale rii. Algoritm de calcul Informaiile rezultate n urma sondajului se pot grupa n urmtorul tabel:
Orae O1 ... Oi On Medie Var1 ... Var j... Var m 2 Medie 1 Medie j 1 Medie m

Algoritmul de calcul presupune parcurgerea fiecrei variabile, var(j), la fiecare realizndu-se nsumarea rezultatelor fiecrui ora, oras(i), iar pentru aflarea mediei, medie(j), se utilizeaz relaiile: suma(j) = sum (j) + rezoras(i), j=1,m i i=1,n (1.51) medie(j) = sum (j) / n (1.52) Se realizeaz un formular cu dou butoane de comand (fig. 1.95): MEDIE SONDAJ (Caption) pentru procedura de calcul i afiare a penalitilor (cmdMedie) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmator:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmMedie Caption: MEDIE SONDAJ Name: cmdMedie Caption: Calculeaza media Name: cmdIesire Caption: Iesire Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru parcurgerea variabilelor i a oraelor se folosete o structur de control repetitiv de tipul For...Next imbricat: For j = 1 To m pentru variabile For i=1 To n pentru orae prelucrri Next i Next j Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.94.
149

Fig. 1.94. Schema logic pentru rezolvarea aplicaiei 1.43 150

Procedurile cmdMedie _Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdIesire_Click() End End Sub Private Sub cmdMedie_Click() Dim n As Integer Dim m As Integer Dim var(10) As String Dim suma(10) As Single Dim medie(10) As Single Dim rezoras(10) As Single n = InputBox("Numarul de orase:") m = InputBox("Numarul de variabile:") Print Print "Variabila Suma Medie" Print "___________________________________________" For j = 1 To m var(j) = InputBox("Denumire variabila:") suma(j) = 0 For i = 1 To n rezoras(i) = InputBox("Rezultate inregistrate:") suma(j) = suma(j) + rezoras(i) Next i medie(j) = suma(j) / n Print var(j), suma(j), medie(j) Next j End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.95.

Fig. 1.95. Situaia de ieire pentru aplicaia 1.43 151

Aplicaia 1.44 La o bibliotec cititorii au posibilitatea cutrii unui titlu n funcie de cota crii dorite. S se realizeze un program ce permite introducerea de la tastatur a cotei i cutarea acesteia n mulimea titlurilor existente. Algoritm de calcul Informaiile despre crile existente n bibliotec se vor grupa n mulimi cu n elemente, n care n reprezinat numrul de cri: cota: cota(i); titlul: titlul(i); autori: autori(i). Algoritmul de cutare a unei valori ntr-o mulime presupune parcurgerea acesteia i compararea fiecrui element cu valoarea cutat. n cazul bibliotecii, cititorul introduce cot (cotadorita), iar programul realizeaz compararea acesteia cu fiecare cot (cota(i)) existent n bibliotec. Se utilizeaz o variabil boolean (cu valori true/false) gasit n care se reine rezultatul cutrii: dac este gsit cota, variabila gasit are valoarea true, altfel are valoarea false i se continu cutarea pn la epuizarea titlurilor. Se realizeaz un formular cu dou butoane de comand (fig.1.97): BIBLIOTECA (Caption) pentru procedura de calcul i afiare a valorilor (cmdCauta) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmBiblioteca Caption: BIBLIOTECA Name: cmdCauta Caption: Cauta Name: cmdIesire Caption: Iesire Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Se va utiliza o structur repetitiv condionat anterior de tipul Do While. Condiia de ciclare va fi: gasit=false OR i>n Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig.1.96.
152

Fig.1.96. Schema logic pentru rezolvarea aplicaiei 1.44 153

Procedurile cmdCarti _Click(), cmdCauta_Click() i cmdIesire_Click() sunt urmtoarele: Dim cota(10) As String Dim titlul(10) As String Dim autori(10) As String Dim n As Integer Private Sub cmdCarti_Click() n = InputBox("Numarul de carti:") For i = 1 To n cota(i) = InputBox("Cota cartii:") titlul(i) = InputBox("Titlul:") autori(i) = InputBox("Autori:") Next i End Sub Private Sub cmdCauta_Click() Dim cotadorita As String Dim gasit As Boolean cotadorita = txtCota.Text gasit = False i=1 Do While (gasit = False) And (i < n) If cota(i) = cotadorita Then gasit = True txtTitlul.Text = titlul(i) txtAutori.Text = autori(i) End If i=i+1 Loop End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.97.

Fig. 1.97. Situaia de ieire pentru aplicaia 1.44 154

Aplicaia 1.45 S se stabileasc algoritmul i s se fac schema logic pentru urmtoarea problem: O societate comercial scoate la vnzare 1.000 de aciuni. Acestea sunt cumprate de 15 persoane pentru care se cunosc numele (nume) i numrul de aciuni cumprate (nr). Se cere s se calculeze procentul obinut de fiecare acionar (prop) i s se stabileasc acionarul majoritar (maj). Algoritm de calcul Variabila verif este iniializat cu 1.000, adic numrul de aciuni care se vnd. Pe msura ce aciunile sunt introduse ca vndute ctre acionari, din valoarea lui verif se scade numrul de aciuni vndute, iar valoarea rezultat este propus ca DefaultValue (valoarea prin lips) n caseta InputBox de introducere a numrului de aciuni vndute. nr = InputBox("Introduceti nr de actiuni cumparate:", "Nr de actiuni:", verif) verif = verif nr Dac verif devine negativ, se afieaz un mesaj (s-au cumprat mai multe aciuni dect trebuia 1.000) i se trece printr-o instruciune de salt necondiionat la introducerea din nou a numrului de aciuni cumprate de fiecare persoan. Programul realizeaz i un test pentru determinarea acionarului majoritar: If prop >= 51 / 100 Then maj = nume verif = verif nr care trebuie deci s dein cel puin 51% din aciuni. La ieirea din bucl, n cazul n care s-a determinat un acionar majoritar, acesta este afiat. If maj <> " " Then Print "Actionarul majoritar este "; maj; "." Schema logic a problemei este prezentat n figurile 1.98 i 1.99.

155

Fig.1.98. Schema logic pentru aplicaia 1.45 (partea I) 156

Fig.1.99. Schema logic pentru aplicaia 1.45 (partea a-II-a)

Fig. 1.100. Situaia de ieire pentru aplicaia 1.45

Aplicaia 1.46 Se cunoate numrul total de sisteme (nr_tot) de calcul vndute ntr-un an n ar. Pentru fiecare ora se dau numrul de calculatoare vndute (nr_ora). S se stabileasc repartii (procentul) de calculatoare vndute pe fiecare ora. (Se consider numrul de orae =10). Algoritm de calcul naintea intrrii n structur repetitiv a programului se introduc numrul total al sistemelor vandute (nr_tot) i numrul de orae n care s-a vndut sistemul (n). Pentru fiecare ora se introduc denumirea i numrul de sisteme vndute, iar apoi se calculeaz proporia care este i afiat, sub form procentual. Schema logic a problemei este prezentat n fig.1.101.
157

Fig.1.101. Schema logic pentru aplicaia 1.46

158

Procedurile Private Sub cmdIesire_Click() cmdSisteme_Click() sunt urmtoarele: Private Sub cmdIesire_Click() Unload Me End Sub Private Sub cmdSisteme_Click() Dim nr As Single Dim n As Integer Dim tot As Double Print "ORASUL"; Tab(30); "PROPORTIE VANZARI" nr_tot = InputBox("Care este nr total al sistemelor vandute ?") n = InputBox("In cate orase ati vandut sisteme?")

Private

Sub

For i = 1 To n den = InputBox("Introduceti denumirea orasului:") nr_oras = InputBox("Introduceti numarul de sisteme vandute in orasul respectiv:") prop = nr_oras / nr_tot * 100 Print den; Tab(30); Format(prop, "FIXED") & "%" Next i End Sub

Fig.1.10. Situaia de ieire pentru aplicaia 1.46

159

Aplicaia 1.47 Pentru o factur fiscal se cunosc urmtoarele date: numrul de produse (n), denumire produs, cantitate, pre. Se cere: s se calculeze pentru fiecare produs valoarea, TVA, valoarea total a produsului. S se calculeze valoarea facturii. Algoritm de calcul Informaiile despre fiecare produs se grupeaz n mulimi cu n elemente, n care n reprezint numrul de produse: denumire produs: denp(i); cantitatea: cant(i); preul: pret(i); valoare: val(i); TVA: TVA(i); valoare total produs: valtp(i). Se calculeaz valoarea, TVA i valoarea total a fiecrui produs: val(i) = cant(i) * pret(i) TVA(i) = val(i) * 0.19 valtp(i) = val(i) + TVA (i) Valoarea total a facturii (valtot) se calculeaz dup formula: valtot = valtot + valtp(i) (1.56) Se realizeaz un formular cu dou butoane de comand (fig. 1.104): FACTURI (Caption) pentru procedura de calcul i afiare a valorilor (cmdFacturi) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmFacturi Caption: FACTURI Name: cmdFacturi Caption: Facturi Name: cmdIesire Caption: Iesire Evenimente Click Click

(1.53) (1.54) (1.55)

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru calculul i afiarea rezultatelor n formular se folosete o structur de control repetitiv de tipul For Next, n care n reprezinat numrul de produse. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.103.
160

Fig. 1.103. Schema logic pentru rezolvarea aplicaiei 1.47

161

Procedurile cmdFacturi Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdFacturi_Click() Dim n As Integer Dim nrserie As String Dim denp(10) As String Dim cant(10) As Single Dim pret(10) As Single Dim val(10) As Single Dim TVA(10) As Single Dim valtp(10) As Single Dim valtot As Single n = InputBox("Introduceti numarul de produse:") For i = 1 To n denp(i) = InputBox("Denumire:") cant(i) = InputBox("Cantitatea:") pret(i) = InputBox("Pretul:") Next i valtot = 0 Print Print "Denumire Cantitate Pret Valoare TVA Valoare totala" Print "________________________________________________________________" For i = 1 To n val(i) = cant(i) * pret(i) TVA(i) = 0.19 * val(i) valtp(i) = TVA(i) + val(i) valtot = valtot + valtp(i) Print denp(i), cant(i), pret(i), val(i), TVA(i), valtp(i) Next i Print "________________________" Print "Valoarea totala a facturii: "; valtot End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.104.

162

Fig. 1.104. Situaia de ieire pentru aplicaia 1.47

Aplicaia 1.48 La examenul de admitere ntr-o universitate se cunosc: numrul de faculti=10, numrul de locuri scoase la concurs n fiecare facultate, numrul de candidai nscrii. Se cere: s se afieze facultile la care au rmas locuri neocupate i numrul de locuri disponibile, numrul de candidai pe loc la fiecare facultate, totalul candidailor nscrii la Universitate. Algoritm de calcul Datele de intrare sunt: den (denumirea facultii), locuri (numrul de locuri scoase la concurs la fiecare facultate), nscrieri (numrul de nscrieri de la fiecare facultate). Pentru cele 10 faculti ale Universitii, dac numrul de locuri depete numrul de nscrieri, se calculeaz un disponibil (disp); dac nu, disp rmne la valoarea zero i va fi afiat cu aceast valoare, nsemnnd c toate locurile la facultatea respectiv s-au ocupat. Tot_inscrieri este variabila care nsumeaz nscrierile de la toate facultile i este afiat la ieirea din ciclul For. Instruciunea InputBox sugereaz n aceast form (al treilea parametru al su) o valoare de 255 pentru numrul de nscrieri i 300 pentru numrul de locuri. Schema logic a aplicaiei este prezentat n fig.1.105.

163

Fig.1.105. Schema logic pentru aplicaia 1.48 164

Procedura ataat evenimentului clic al butonului de comand cmdCalcul este: Private Sub cmdCalcul_Click() Dim den As String Dim locuri As Integer Dim inscrieri As Integer Dim tot_inscrieri As Single Cls Print "SITUATIA LOCURLOR DISPONIBILE" Print "=================================================" Print "FACULTATEA"; Tab(30); "LOCURI"; Tab(45); "CANDIDATI" Print Tab(30); "DISPONIBILE"; Tab(45); "PE LOC" Print "=================================================" tot_inscrieri = 0 For i = 1 To 10 den = InputBox("Introduceti denumirea facultatii:", , "MFC") locuri = InputBox("Introduceti nr de locuri la " & den & ":", , 300) inscrieri = InputBox("Cati candidati s-au inscris la " & den & ":", , 255) tot_inscrieri = tot_inscrieri + inscrieri disp = 0 If locuri > inscrieri Then disp = locuri - inscrieri End If Print den; Tab(32); disp; Tab(46); Format(inscrieri / locuri, "STANDARD") Next i Print "=================================================" Print Print "Totalul candidati inscrisi: "; tot_inscrieri End Sub Rezultatele rulrii aplicaiei sunt prezentate n fig.1.106.

Fig.1.106. Situaia de ieire pentru aplicaia 1.48 165

Aplicaia 1.49 Pentru un numr de n facturi se cunosc urmtoarele date: numrul i seria facturii, valoarea facturii, stare (A achitat sau N neachitat). S se calculeze: numrul total de facturi neachitate (nrfn), suma toatal neachitat (valtotn) i s se afieze facturile neachitate. Algoritm de calcul Informaiile despre fiecare factur se vor grupa n mulimi cu n elemente, n care n reprezinat numrul de facturi: numrul i seria facturii: nrserie(i); valoarea facturii: valf(i); starea: stare(i). n funcie de starea facturii se va calcula valoarea total neachitat (valtotn) i numrul de facturi neachitate (nrfn): valtotn = valtotn * valf(i) nrfn = nrfn +1 (1.57) (1.58)

Iniial valtotn =0 i nrfn=0. Se realizeaz un formular cu dou butoane de comand (fig. 1.108): FACTURI (Caption) pentru procedura de calcul i afiare a valorilor (cmdFacturi) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmator:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmFacturi Caption: FACTURI Name: cmdFacturi Caption: Facturi Name: cmdIesire Caption: Iesire Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru calculul i afiarea rezultatelor n formular, se folosete o structur de control repetitiv de tipul For...Next, n care n reprezinat numrul de produse, iar pentru verificarea strii fiecrei facturi se utilizeaz structura alternativ If...Then...Else. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.107.
166

Fig. 1.107. Schema logic pentru rezolvarea aplicaiei 1.49 167

Procedurile cmdFacturi _Click() i cmdIesire _Click() sunt urmtoarele: Private Sub cmdFacturi_Click() Dim n As Integer Dim nrserie(10) As String Dim stare(10) As String Dim valf(10) As Single Dim valtotn As Single Dim nrfn As Integer n = InputBox("Introduceti numarul de facturi:") For i = 1 To n nrserie(i) = InputBox("Numarul i seria facturii:") valf(i) = InputBox("Valoarea:") stare(i) = InputBox("Stare (A/N):") Next i valtotn = 0 nrfn = 0 Print Print "Numar Serie Valoare Stare" Print "_______________________________________" For i = 1 To n If (stare(i) = "N") Then nrfn = nrfn + 1 valtotn = valtotn + valf(i) Print nrserie(i), valf(i), stare(i) End If Next i Print "________________________" Print "Valoarea totala neachitata: "; valtotn Print "Numarul da facturi neachitate: "; nrfn End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.108.

Fig. 1.108. Situaia de ieire pentru aplicaia 1.49 168

Aplicaia 1.50 Pentru un numr n de facturi se cunosc urmtoarele date: numrul i seria facturii, valoarea. S se sorteze n ordine cresctoare facturile n funcie de valoarea lor. Algoritm de calcul Datele referitoare la facturi se rein n mulimi de n elemente, n reprezentnd numrul de facturi. numrul i seria facturii: nrserie(i); valoarea: val(i). Pentru ordonarea facturilor n ordine cresctoare, se procedeaz astfel: se compar primele dou facturi i, dac nu sunt n ordine cresctoare, atunci se inverseaz poziiile celor dou. Se compar urmtoarele dou facturi nvecinate i se procedeaz ca mai sus, pn la parcurgerea tuturor facturilor. Algoritmul se reia de la nceput, pn se constat c nu mai sunt necesare schimbri. Pentru monitorizarea schimbrilor intervenite se utilizeaz o variabil boolean (cu valori true/false) schimb. Dac ntre facturi s-au produs schimbri, atunci schimb=false, dac nu exist modificri, atunci schimb=true, deci mulimea este sortat. Algoritmul se reia att timp ct schimbe=false. Sunt necesare schimbri att ntre valoarile facturilor, ct i ntre elementele mulimii ce reine numrul i seria acestora. Pentru realizarea permutrilor elementelor, se utilizeaz o variabil de transfer (t) ce reine valorile primului element, dup cum urmeaz: t=val(i) val(i)=val(i+1) (1.59) val(i+1)=t t=nrserie(i) nrserie (i)= nrserie (i+1) (1.60) nrserie (i+1)=t Se realizeaz un formular cu dou butoane de comand (fig.1.110): SORTARE FACTURI (Caption) i dou butoane de comand: pentru procedura de determinare a maximului, respectiv minimului (cmdSortareF) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmator:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmSortare Caption: SORTARE FACTURI Name: cmdSortareF Caption: Sortare Facturi Name: cmdIesire Caption: Iesire Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Pentru parcurgerea facturilor, se folosete o structur de control repetitiv de tipul For...Next, n care n reprezinat numrul de facturi. Deoarece algoritmul se reia att timp ct se produc schimbri, se utilizeaz o structur repetitiv condiionat anterior de tipul: Do While, n care condiia este schimb=false. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.109.
169

Fig. 1.109. Schema logic pentru rezolvarea aplicaiei 1.50

170

Procedurile cmdSortareF Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdIesire_Click() End End Sub Private Sub cmdSortareF_Click() Dim n As Integer Dim nrserie(10) As String Dim val(10) As Single Dim t As Variant Dim schimb As Boolean n = InputBox("Introduceti numarul de facturi:") For i = 1 To n nrserie(i) = InputBox("Numarul i seria facturii:") val(i) = InputBox("Valoarea:") Next i schimb = False Do While schimb = False schimb = True For i = 1 To (n - 1) If val(i) > val(i + 1) Then t = val(i) val(i) = val(i + 1) val(i + 1) = t t = nrserie(i) nrserie(i) = nrserie(i + 1) nrserie(i + 1) = t schimb = False End If Next i Loop Print "Afisare facturi sortate crescator:" Print Print "Numar Serie Valoare" Print "__________________________" For i = 1 To n Print nrserie(i), val(i) Next i End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.110.
171

Fig. 1.110. Situaia de ieire pentru aplicaia 1.50

Aplicaia 1.51 Pentru 10 filiale ale unei societi se dau: denumirea localitii (den), veniturile (ven) i cheltuielile nregistrate pe un an (ch). S se calculeze profitul brut pe fiecare filial, s se stabileasc filialele care au nregistrat cel mai mic, respectiv, cel mai mare profit (min, max). Algoritm de calcul Se vor utiliza 4 variabile de tip tablou, dou structuri repetitive i dou structuri alternative. Dup introducerea veniturilor i cheltuielilor, calculul profitului brut i stocarea n variabilele de tip tablou (cu maxim 10 elemente, de la 0 la 9) corespunztoare, att profitul maxim ct i cel minim sunt iniializate cu primul profit brut - pb(0). pmin = pb(0) pmax = pb(0) n ciclul For urmtor se testeaz dac profiturile urmtoare sunt mai mici dect minimul (caz n care minimul devine profit) sau mai mari dect maximul (iar aici maximul ia valoarea profitului respectiv, n cazul n care condiia se verific). If pb(i) < pmin Then pmin = pb(i) If pb(i) > pmax Then pmax = pb(i) La nceputul procedurii este dispus instruciunea Cls, care terge suprafaa formularului i este util pentru cazul n care se acioneaz cmdCalcul de mai multe ori. Schema logic a problemei este prezentat n fig.1.111.
172

Fig.1.111. Schema logic pentru aplicaia 1.51 173

Procedura ataat evenimentului clic al butonului de comand cmdCalcul: Private Sub cmdCalcul_Click() Dim den(9) As String Dim ven(9) As Double Dim ch(9) As Double Dim pb(9) As Double Dim pmin As Double Dim pmax As Double Cls i=0 Print "DENUMIRE"; Tab(25); "PROFIT BRUT" While i <= 9 den(i) = InputBox("Introduceti denumirea localitatii " & i + 1) ven(i) = InputBox("Introduceti veniturile pentru " & den(i) & ":") ch(i) = InputBox("Introduceti cheltuielile pentru " & den(i) & ":") pb(i) = ven(i) - ch(i) Print den(i); Tab(25); pb(i) i=i+1 Wend pmin = pb(0) pmax = pb(0) For i = 0 To 9 If pb(i) < pmin Then pmin = pb(i) If pb(i) > pmax Then pmax = pb(i) Next i Print String(40, "=") Print Print "Profitul maxim este " & pmax Print "Profitul minim este " & pmin End Sub

Fig. 1.112. Situaia de ieire pentru aplicaia 1.51 174

Aplicaia 1.52 Pentru un sistem de calcul se cunosc: numrul de componente achiziionate, denumirea, valoarea, termenul de garanie al fiecrei componente, data achiziionrii sistemului. Se cere s se afieze componentele care au ieit din garanie i s se calculeze valoarea ntregului sistem de calcul. Algoritm de calcul Datele legate de componentele sistemului se vor grupa n mulimi cu n elemente, n care n reprezint numrul total de componente: denumire: den(i); valoare: val(i); termen de garanie: termeng(i). Se vor parcurge toate componentele sistemului, iar pentru fiecare component se verific dac a depit termenul de garantie, comparnd data la care aceasta expir (dataachiz+termeng(i)) cu data curent extras cu ajutorul funciei date(): dataachiz+termeng(i) < date() (1.61)

Dac aceast condiie este adevrat, atunci se afieaz denumirea i valoarea componentei. Valoarea total (valtot) a sistemului de calcul se calculeaz dup formula: valtot=valtot+val(i) (1.62)

Se realizeaz un formular cu dou butoane de comand (fig. 1.114): SISTEM DE CALCUL (Caption) pentru procedura de calcul i afiare a valorilor (cmdGarantie) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:
Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button) Proprieti Name: frmSistem Caption: SISTEM DE CALCUL Name: cmdGarantie Caption: Garantie Name: cmdIesire Caption: Iesire Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Se va utiliza o structur repetitiv de tipul For...Next. Condiia de depire a termenului de garanie se verific utiliznd o structur alternativ de tipul If...Then...Else. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.113.
175

Fig. 1.113. Schema logic pentru rezolvarea aplicaiei 1.52

176

Procedurile cmdGarantie _Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdGarantie_Click() Dim n As Integer Dim den(10) As String Dim val(10) As Single Dim termeng(10) As Integer Dim dataachiz As Date Dim valtot As Single dataachiz = InputBox("Data achizitionarii sistemului:") n = InputBox("Introduceti numarul de componente:") For i = 1 To n den(i) = InputBox("Denumire:") val(i) = InputBox("Valoarea:") termeng(i) = InputBox("Termen garantie:") Next i valtot = 0 Print "Denumire Valoare Termen" Print "____________________________________" For i = 1 To n If (dataachiz + termeng(i) < Date) Then Print den(i), val(i), termeng(i) End If valtot = valtot + val(i) Next i Print "__________________________" Print "Valoare totala sistem de calcul:"; valtot End Sub Private Sub cmdIesire_Click() End End Sub

Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.114.

177

Fig. 1.114. Situaia de ieire pentru aplicaia 1.52

Aplicaia 1.53 Pentru 10 filiale ale unei bnci se cunoate profitul brut nregistrat de fiecare n decursul unui an. S se calculeze profitul brut (pb) i profitul net (pn = pb Impozit) nregistrate de banc i s se repartizeze acestea astfel: Fond de dezvoltare (50 % din pn), dividende (40% din pn), fondul de participare a salariailor la profit ( 10% din pn). Algoritm de calcul Pentru cele 10 filiale ale bncii se introduc i se afieaz denumirea i profitul brut, se face totalul profitului brut cu ajutorul variabilei tot_pb (totalul profitului brut): tot_pb = tot_pb + pb (1.63)

Dup ieirea din ciclul se introduce cota de impozit, necesar pentru calculul profitului net, dup formula: pn = pb * (100 ci) / 100 (1.64)

unde pn este profitul net, iar pb este profitul brut. n final, se calculeaz i afieaz concomitent valorile fondului de dezvoltare, ale dividendelor i participrii salariailor la profit. Se face meniunea c al doilea argument al instruciunii InputBox precizeaz textul de afiat n bara de titlu a casetei de dialog, iar al treilea furnizeaz o valoare pentru cazul n care utilizatorul nu introduce un (Default Value semnific valoare prin lips), fiind util n faza de proiectare pentru testarea mai rapid a programului. Schema logic este prezentat n fig.1.115.
178

Fig.1.115. Schema logic pentru aplicaia 1.53 179

Procedura ataat evenimentului clic al butonului de comand cmdCalcul este: Private Sub cmdCalcul_Click() Dim den As String Dim pb As Double, ci As Double Dim tot_pb As Double Cls Print "Situatia profitului pe filiale" & Chr(13) & " i pe total" Print String(40, "*") Print "Filiala"; Tab(25); "Profit brut" tot_pb = 0 For i = 1 To 10 den = InputBox("Introduceti denumirea filialei", "Filiala", "Alexandria") pb = InputBox("Introduceti profitul brut al filialei " & den & ":", "Profit brut", "5000000") tot_pb = tot_pb + pb Print den; Tab(25); pb Next i ci = InputBox("Introduceti cota de impozit (10,20, etc):", "Cota impozit") pn = pb * (100 - ci) / 100 Print String(40, "*") Print Print "Repartizarea profitului (lei)" Print String(25, "*") Print "Profit net total:" & Format(tot_pb, "fixed") Print "Fondul de dezvoltare:" & Format(pn * 0.5, "fixed") Print "Dividende:" & Format(pn * 0.4, "fixed") Print "Fondul de participare al salariatilor la profit:" & Format(pn * 0.1, "fixed") Print String(25, "*") End Sub

180

Fig.1.116. Situaia de ieire pentru aplicaia 1.53

Aplicaia 1.54 Pentru n cititori ai unei biblioteci se cunosc: numrul permisului, cota crii mprumutate, titlul, data mprumutului, numrul de zile pentru care se face mprumutul. Se cere s se afieze toate crile nerestituite i s se calculeze numrul acestora. Algoritm de calcul Informaiile despre cititori existente n bibliotec se vor grupa n mulimi cu n elemente, n care n reprezinat numrul de cititori: numrul permisului: nrpermis(i); cota: cota(i); titlul: titlul(i); data mprumutului: dataimp(i); numrul de zile de mprumut: nrzileimp(i).
181

Pentru fiecare cititor se verific dac a depit termenul de mprumut, comparnd data la care trebuia s se restituie crile (dataimp(i)+nrzileimp(i)) cu data curent extras cu ajutorul funciei date(): dataimp(i)+nrzileimp(i)<date() (1.65)

Dac aceast condiie este adevrat atunci se afieaz cota i titlul crii i se incrementeaz numrul total de cri nerestituite: nrcartin=nrcartin+1 (1.66)

Se realizeaz un formular cu dou butoane de comand (fig.1.118): BIBLIOTECA (Caption) pentru procedura de calcul i afiare a valorilor (cmdCartiN) i pentru ieirea din program (cmdIesire). Obiectele adugate n formular sunt prezentate n tabelul urmtor:

Obiect Formular (Form) Buton de comand (Command Button) Buton de comand (Command Button)

Proprieti Name: frmBiblioteca Caption: BIBLIOTECA Name: cmdCartiN Caption: Carti Nerestituite Name: cmdIesire Caption: Iesire

Evenimente Click Click

Dup declararea variabilelor de lucru ce reprezint datele de intrare, datele intermediare i rezultatele calculelor, se preiau datele de intrare cu ajutorul casetei de introducere a textului InputBox(). Se va utiliza o structur repetitiv de tipul For...Next. Condiia de depire a termenului de mprumut se verific utiliznd o structur alternativ de tipul If...Then...Else. Schema logic pentru rezolvarea aplicaiei n conformitate cu algoritmul de calcul de mai sus este prezentat n fig. 1.117.

182

Fig. 1.117. Schema logic pentru rezolvarea aplicaiei 1.54 183

Procedurile cmdCartiN _Click() i cmdIesire_Click() sunt urmtoarele: Private Sub cmdCartiN_Click() Dim n As Integer Dim nrpermis(10) As String Dim cota(10) As String Dim titlul(10) As String Dim dataimp(10) As Date Dim nrzileimp(10) As Integer Dim nrcartin As Integer n = InputBox("Introduceti numarul de cititori:") For i = 1 To n nrpermis(i) = InputBox("Numar permis:") cota(i) = InputBox("Cota:") titlul(i) = InputBox("Tilul:") dataimp(i) = InputBox("Data imprumut:") nrzileimp(i) = InputBox("Numar zile imprumut:") Next i nrcartin = 0 Print "Nr Permis Cota Tilul" Print "____________________________________" For i = 1 To n If (dataimp(i) + nrzileimp(i) < Date) Then Print nrpermis(i), cota(i), titlul(i) nrcartin = nrcartin + 1 End If Next i Print "__________________________" Print "Numar de carti nerestituite:"; nrcartin End Sub Private Sub cmdIesire_Click() End End Sub Datele de intrare utilizate, precum i rezultatele obinute sunt prezentate n fig. 1.118.

Fig. 1.118. Situaia de ieire pentru aplicaia 1.54 184

APLICAII PROPUSE

Aplicaia 1.55 Pentru un numr de 5 facturi se cunosc urmtoarele date: numrul i seria facturilor, numrul de produse pe fiecare factur (4), la fiecare produs se cunosc denumire produs, cantitate, pre. Se cere s se determine: Pentru fiecare produs: valoarea, TVA i valoare total; Pentru fiecare factura: valoarea total a facturii; Pentru cele 5 facturi: totalul de plat. Aplicaia 1.56 Pentru un numr de 10 facturi se cunosc urmtoarele date: numrul i seria facturilor, valoare factur, stare cu valorile Achitat/Neachitat (A/N). Se cere s se afieze facturile ce depesc o anumit valoare (prag) i s se calculeze numrul total de facturi ce depesc valoarea de prag (nrf_prag). Aplicaia 1.57 Pentru un numr de 10 facturi se cunosc urmtoarele date: numrul i seria facturilor, valoare factur, stare (A/N). Se cere s se afieze facturile neachitate ce depesc o anumit valoare (prag) i s se calculeze numrul total de facturi ce depesc valoarea de prag (nrfn_prag). Aplicaia 1.58 Pentru un numr de 10 facturi se cunosc urmtoarele date: numrul i seria facturilor, data emiterii facturii, valoare factur, stare (A/N). Se cere s se afieze facturile restante ce depesc 30 de zile i s se calculeze numrul lor. Aplicaia 1.59 Pentru un numr de 10 facturi se cunosc urmtoarele date: numrul i seria facturilor, data emiterii facturii, valoarea facturii, stare (A/N). Se cere s se afieze facturile restante ce depesc 30 de zile i s se aplice majorri n funcie de numrul de zile.

185

Aplicaia 1.60 Pentru un numr de 10 facturi se cunosc urmtoarele date: numrul i seria facturilor, denumirea furnizorului, valoarea facturii, stare (A/N). Se cere s se afieze facturile neachitate care aparin unui anumit furnizor ce se va citi de la tastatura. Aplicaia 1.61 Pentru 10 cititori ai unei biblioteci se cunosc: numrul permisului, cota crilor mprumutate, titlul, data mprumutului, numrul de zile pentru care se face mprumutul. Se cere s se aplice penalizri pentru crile nerestituite i s se calculeze suma total de plat (penalizarea/zi este de 1.000 lei). Aplicaia 1.62 Pentru 10 cititori ai unei biblioteci se cunosc: numrul permisului, cota crilor mprumutate, titlul, data mprumutului, numrul de zile pentru care se face mprumutul. Se cere s se aplice penalizri pentru crile nerestituite i s se calculeze suma total de plat, astfel: Dac nrzile <= 10, atunci penalizare=1.000 lei/zi Dac 10<nrzile<=20, atunci penalizare=2.000 lei/zi Dac nrzile>20, atunci penalizare=3.000 lei/zi. Aplicaia 1.63 Pentru 10 cititori ai unei biblioteci se cunosc: numrul permisului, cota crilor mprumutate, titlul, data mprumutului, numrul de zile pentru care se face mprumutul. S se afieze toate crile nerestituite, n funcie de permisul cititorului (se va citi de la tastatur). S se aplice penalizri pentru acest cititor i s se calculeze suma total de plat. (penalizare/zi=1.000 lei). Aplicaia 1.64 Se cunoate numrul de studeni din grup ca fiind 20. La fiecare student se cunoate numele i media obinut n sesiune. S se sorteze n ordine descresctoare studenii n funcie de media obinut la exemene. Aplicaia 1.65 Pentru o societate care are filiale n 10 orae ale rii se cunosc: pentru fiecare filial: denumirea localitii, volumul vnzrilor nregistrate la sfritul anului. S se calculeze volumul total al vnzrilor nregistrate de societate i procentul de vnzri pe fiecare filial.

186

Aplicaia 1.66 Se cunoate numrul total de utilizatori Internet din ar. Pentru fiecare ora se cunoate numrul de utilizatori Internet. S se stabileasc repartii (procentul) de utilizatori Internet pe fiecare ora (se consider numrul de orae =20). Aplicaia 1.67 n urma examenului de licen se cunosc: numrul de absolventi=25, numele i notele obtinute de fiecare candidat la cele 2 probe (nota1 i nota2). Se cere s se calculeze media obinut de candidai (nota1>=5 i nota2>=5). S se afieze candidaii declarai admii i cei respini. Aplicaia 1.68 Pentru 10 filiale ale unei societi se dau: denumirea localitii, veniturile i cheltuielile nregistrate pe un an. S se calculeze veniturile i cheltuielile nregistrate de ntreaga societate, profitul brut pe fiecare filial i pe societate. S se afieze filialele care nregistreaz pierderi. Aplicaia 1.69 Pentru 10 filiale ale unei societi se dau: denumirea localitii, veniturile i cheltuielile nregistrate pe un an. S se calculeze profitul brut obinut de fiecare filial i s se sorteze n ordine descresctoare filialele n funcie de profitul brut nregistrat. Aplicaia 1.70 Pentru 10 filiale ale unei societi se dau: denumirea localitii, stocurile existente n luna curent. La nivelul societii se cunosc stocul existent (stocul_existent(i)) n depozitul central i stocul limit (stoc_sigurant). S se afieze filialele care necesit aprovizionare (stoc_existent(i) stoc_siguranta<=0) i s se afieze cantitatea minim necesar (stoc_siguranta stoc_existent(i)). S se calculeze totalul de aprovizionat pe ntreaga societate (total_aprov) i s se verifice dac aceast cantitate nu depete stocul existent n depozitul central (total_aprov>stoc_central). Aplicaia 1.71 Pentru o societate de turism (reea hotelier) se cunosc: numrul de hoteluri i vile, numrul de camere disponibile n fiecare hotel/vil, numrul de cereri de rezervare pentru fiecare hotel/vil, numrul total de locuri n fiecare hotel/vil. Se cere s se calculeze gradul de ocupare al camerelor n fiecare
187

hotel/vil i pe ntreaga societate (grad_ocup(i)=loc_ocup(i)/nr_loc(i)). S se sorteze n ordine descresctoare n funcie de gradul de ocupare. Aplicaia 1.72 Pentru o agenie de transport se cunosc: numrul de maini, numrul de rezervri pentru fiecare main, numrul de locuri n fiecare main. S se calculeze numrul de locuri libere rmase i gradul de ocupare al locurilor n fiecare main (grad_ocup(i) =loc_ocup(i) / nr_loc(i)). S se sorteze n ordine descresctoare n funcie de gradul de ocupare. Aplicaia 1.73 n cazul unui spital se cunosc: numrul de secii, numrul de paturi n fiecare secie, numrul de bolnavi n fiecare secie. S se calculeze numrul de paturi libere rmase i gradul de ocupare al acestora n fiecare secie (grad_ocup(i) =loc_ocup(i) / nr_loc(i)). S se sorteze n ordine descresctoare n funcie de gradul de ocupare. Aplicaia 1.74 n cazul aplicaiei 1.7, se cere s se determine care sunt modificrile de efectuat n codul programului, pentru a valida la introducere denumirea societii (denumire), cifra de afaceri (CA) i rata profitului (rata_p), astfel nct n cazul n care casetele de text nu sunt completate s se opreasc execuia i s se afieze un mesaj care s cear completarea lor.

188

2. ACCESS

APLICAII REZOLVATE

Pentru magazinul de autoturisme VITEMAX SRL se impune realizarea unei baze de date care s gestioneze autoturismele de diferite modele, provenite de la mai muli furnizori, care se vnd ctre mai muli clieni (persoane fizice i juridice). Baza de date AUTO va conine mai multe entiti, cuprinse in tabelele FURNIZORI, MAGAZIN, CLIENTI, AUTOTURISME, FACTURA1, LINIE FACTURA1, FACTURA2, LINE FACTURA2. Aplicaia 2.1 S se creeze tabelul AUTOTURISME care s conin datele despre caracteristicile de baz ale fiecrui model de autoturism din depozitul magazinului. Rezolvare: Tabelul AUTOTURISME va avea urmtoarea structur: cod auto, den auto (denumire autoturism), cod mag (codul magazinului VITEMAX SRL), model, culoare, cap cil (capacitate cilindric), vit max (viteza maxim), consum (consumul de carburant la 100 de km), pret unitar. Tabelul AUTOTURISME se creeaz prin parcurgerea urmtorilor pai: n fereastra Database se alege modul de creare a tabelului cu ajutorul ferestrei de proiectare Create Table in Design View; se acioneaz cu mouse-ul pe opiunea New (Table); n fereastra New Table se alege opiunea Design View (OK); n fereastra Table (fig.2.1), n partea de sus, se specific numele cmpului (Field Name), tipul de dat (Data Type) i, opional, o descriere a coninutului cmpului (Description); astfel, pentru cmpurile tabelului AUTOTURISME, se specific urmtoarele tipuri de date: cod auto Number, den auto Text, cod mag Number, model Text, culoare Text, cap cil Number, vit max Number, consum Number, pret unitar Number; n fereastra Table, n partea de jos, pe eticheta General, se definesc restriciile referitoare la tipul de dat sau la domeniul de valori, acionndu-se pentru modificarea valorilor implicite; astfel, pentru cmpurile tabelului AUTOTURISME, se specific urmtoarele restricii pentru dimensiunile cmpurilor (Field Size): cod auto Integer, den auto 15, cod mag Integer,
189

model 10, culoare 10, cap cil Integer, vit max Integer, consum Single, pret unitar Double; se stabilete cheia primar prin selectarea cmpului cod auto i acionarea, n meniul de pe butonul din partea dreapt a mouse-ului, cu butonul stng al mouse-ului pe opiunea Primary Key; n dreptul cmpului cod auto va aprea simbolul de cheie primar; se salveaz tabelul cu numele AUTOTURISME prin succesiunea de comenzi: Meniul principal, File, Save As.

Fig.2.1. Fereastra de creare a tabelului AUTOTURISME pentru aplicaia 2.1 190

Aplicaia 2.2 S se creeze tabelul MAGAZIN, care s conin datele de identificare ale magazinului de autoturisme VITEMAX SRL. Rezolvare: Tabelul MAGAZIN va avea urmtoarea structur: cod mag (codul magazinului VITEMAX SRL), den mag (denumirea magazinului), adresa mag (adresa magazinului), cod fiscal mag, banca mag, cont mag (contul bancar al magazinului). Tabelul MAGAZIN se creeaz prin parcurgerea pailor prezentai n problema 2.1 pentru tabelul AUTOTURISME. Pentru cmpurile tabelului MAGAZIN, se specific urmtoarele tipuri de date: cod mag Number, den mag Text, adresa mag Text, cod fiscal mag Text, banca mag Text, cont mag Number. De asemenea, se specific urmtoarele restricii pentru dimensiunile cmpurilor (Field Size): cod mag Integer, den mag 20, adresa mag 50, cod fiscal mag 20, banca mag 20, cont mag Double. Se stabilete cheia primar prin selectarea cmpului cod mag. Se salveaz tabelul cu numele MAGAZIN prin succesiunea de comenzi: Meniul principal, File, Save As. Aplicaia 2.3 Se cere s se realizeze relaia dintre tabelele MAGAZIN i AUTOTURISME ale bazei de date AUTO. Rezolvare: Relaia dintre dou tabele ale unei baze de date relaionale se realizeaz prin stabilirea unei legturi dintre un cmp ce reprezint cheia primar dintr-un tabel i acelai cmp ce reprezint cheie extern n cellalt tabel. Pentru aceasta, se parcurg urmtorii pai: cu baza de date AUTO deschis, se alege opiunea Relationships (Relaii) din meniul principal Tools (Instrumente); n fereastra Relationships, se adaug succesiv tabelele MAGAZIN i AUTOTURISME acionnd comanda Add din subfereastra Show Table cu eticheta Tables selectat, dup marcarea prealabil a tabelului de adugat; dup aceste operaiuni, se acioneaz butonul Close (nchidere) al subferestrei Show Table; prin tehnica Drag and Drop, se ncepe editarea legturii prin marcarea (acionare buton stnga mouse) cheii primare cod mag din tabelul MAGAZIN i eliberarea butonului mouse-ului peste cheia extern cod mag din tabelul AUTOTURISME; la apariia ferestrei de editare a relaiilor (Edit Relationship), se foreaz integritatea referenial (Enforce Referential Integrity) cu bif n partea stng executat cu mouse-ul, dup care se apas pe butonul de creare (Create) (fig.2.2); dac cmpurile corespunztoare nu prezint acelai tip de dat i nu au aceeai dimensiune, nu se poate fora integritatea referenial. Aspectul ferestrei Relationships cu relaia stabilit ntre tabelele MAGAZIN i AUTOTURISME este prezentat n fig.2.3.
191

Fig.2.2. Crearea relaiei dintre tabelele MAGAZIN i AUTOTURISME pentru aplicaia 2.3

Fig.2.3. Relaia dintre tabelele MAGAZIN i AUTOTURISME pentru aplicaia 2.3 192

Aplicaia 2.4 Se cere s se construiasc un formular asociat tabelului AUTOTURISME pentru introducerea datelor. Rezolvare: Cnd un formular este asociat unui tabel al unei baze de date, el servete pentru introducerea datelor ce reprezint nregistrrile acelui tabel. Pentru crearea formularului asociat tabelului AUTOTURISME, se parcug urmtorii pai: n fereastra Database, se apas pe butonul Forms (Formulare); se alege modul de creare a formularului cu ajutorul ghidului, Create form by using wizard; se apas butonul New (un nou formular); la apariia ferestrei New Form (formular nou), se alege opiunea Form Wizard, iar n subfereastra derulant de selecie a tabelului (Choose the table or query where the objects data comes from:), se marcheaz AUTOTURISME; se apas OK;

Fig. 2.4. Aspectul formularului AUTOTURISME creat n aplicaia 2.4

la apariia ferestrei Form Wizard (ghid pentru crearea formularului), se transfer cmpurile disponibile (subfereastra din stnga: Available Fields) n subfereastra pentru cmpuri selectate (subfereastra din dreapta: Selected Fields) cu ajutorul sgeii duble (>>); se apas butonul Next; n cea de-a doua apariie a ferestrei Form Wizard, se alege interfaa de prezentare a formularului prin selecia (de exemplu) a opiunii de coloan (Columnar); se apas butonul Next;
193

n cea de-a treia apariie a ferestrei Form Wizard, se opteaz pentru stilul de reprezentare a formularului prin selecia (de exemplu) a opiunii SandStone; se apas butonul Next; n cea de-a patra apariie a ferestrei Form Wizard, se scrie numele formularului n subfereastra de sus (AUTOTURISME), apoi se alege opiunea de deschidere a formularului pentru introducerea datelor (Open the form to view or enter information); se apas butonul Finish (terminare); la apariia formularului AUTOTURISME astfel proiectat, se introduc, pe rnd, nregistrrile n tabelul AUTOTURISME al bazei de date AUTO; numrul nregistrrii curente este afiat n partea de jos a formularului (fig.2.4). Aplicaia 2.5 Se cere s se realizeze o interogare de selecie (Select Query) care s prezinte situaia autoturismelor din depozitul magazinului VITEMAX, care au preuri unitare cuprinse ntre 100.000.000 i 200.000.000 lei. Rezolvare: Folosind formularul creat n problema 2.4 sau direct, cu opiunea Open (deschide) se populeaz cu nregistrri cele dou tabele: MAGAZIN (o nregistrare) i AUTOTURISME (apte nregistrri). Pentru realizarea interogrii de selecie cerute (Query 1), se parcurg urmtorii pai: n fereastra Database, se acioneaz pe eticheta Queries (Interogri), dup care se apas pe butonul New (o nou interogare); dup apariia ferestrei New Query (o nou interogare), se alege modul de lucru cu fereastra de proiectare (Design View); se apas butonul OK; n fereastra Show Table (selecia tabelelor de lucru), se adaug succesiv (Add) tabelele MAGAZIN i AUTOTURISME; n fereastra Select Query, se selecteaz cmpurile (cod auto, den auto i pret unitar) care vor aprea n situaie; pentru aceasta, se execut dublu click cu mouse-ul pe denumirile acestora; vor aprea succesiv n grila de proiectare (Design Grid) care se gsete n partea de jos a ferestrei Select Query; pentru cmpul cod auto, n linia Sort se alege, din subfereastra derulant, opiunea Ascending (ordonare cresctoare a codurilor auto); pentru cmpul pre unitar, n linia Criteria se scrie Between 100000000 And 200000000, adic nregistrrile selectate vor avea preurile unitare cuprinse ntre 100.000.000 i 200.000.000 lei; se salveaz interogarea cu succesiunea de comenzi: File, Save As, cu numele Query 1. Aspectul ferestrei Select Query din acest moment este prezentat n fig.2.5; n fereastra Database, cu Open, se obine vizualizarea rezultatelor obinute (fig.2.6) pentru interogarea Query 1.

194

Fig. 2.5. Aspectul ferestrei Select Query n aplicaia 2.5

Fig. 2.6. Rezultatele obinute prin interogarea Query 1 n aplicaia 2.5

195

Aplicaia 2.6 S se construiasc un formular pentru vizualizarea rezultatelor interogrii Query 1 obinut n problema 2.5. Rezolvare: Cnd un formular este asociat unei interogri, el servete pentru vizualizarea rezultatelor acelei interogri. Pentru crearea formularului asociat interogrii Query 1 obinut n problema 2.5, se parcurg aceiai pai ca la problema 2.4, cu deosebirea c n subfereastra derulant de selecie a tabelului (Choose the table or query where the objects data comes from:) se marcheaz Query 1. Aplicaia 2.7 Se cere s se afieze pe ecran un raport asociat interogrii Query 1 obinut n problema 2.5. Rezolvare: Pentru ntocmirea raportului solicitat, se parcurg urmtorii pai: n fereastra Databases se acioneaz asupra etichetei Reports; se alege modul de creare a raportului cu ajutorul ghidului (Create report by using wizard) i apoi se apas pe butonul New (un nou raport); la apariia ferestrei New Report (un nou raport), se alege opiunea Form Wizard, iar n subfereastra derulant de selecie a tabelului (Choose the table or query where the objects data comes from:), se marcheaz Query 1; se parcurg n continuare paii prevzui de ghid, pn se obine raportul asociat interogrii Query 1. APLICAII PROPUSE 2.8. S se creeze tabelul CLIENTI care s conin datele de identificare ale clienilor magazinului de autoturisme VITEMAX SRL. 2.9. Se cere s se realizeze relaia dintre tabelele AUTOTURISME i CLIENTI ale bazei de date AUTO (cod auto este cheie primar n tabelul AUTOTURISME i cheie extern n tabelul CLIENTI). 2.10. Se cere s se construiasc un formular asociat tabelului CLIENTI pentru introducerea datelor. 2.11. Se cere s se realizeze o interogare de selecie (Select Query) care s prezinte situaia autoturismelor din depozitul magazinului VITEMAX care au culoarea negru. 2.12. S se construiasc un formular pentru vizualizarea rezultatelor interogrii de selecie obinut n problema anterioar. 2.13. Se cere s se afieze pe ecran un raport asociat tabelului CLIENTI.
196

3. APLICAII ECONOMICE COMPLEXE

Aplicaia 3.1 S se calculeze cheltuielile totale de transport (ch_totale) pentru cinci curse, cunoscnd cheltuielile de transport specifice (ch_tp) categoriei de distan (dist_tp). Algoritm de calcul Aplicaia folosete o baz de date creat n Access pentru a asigura persistena datelor. n baza de date se introduc sau se extrag datele dup caz. Pentru cerinele aplicaiei a fost suficient crearea unei baze de date care s conin un singur tabel (Table) i dou obiecte de tip cerere de interogare (Query).

Modul Design Modul Open Fig.3.1. Tabelul CHELTUIELI n modul Design (proiectare) i Open (Adugare nregistrri)

197

n prima cerere de interogare (tot_linie) se nmulesc cheltuielile specifice cu distana corespunztoare pentru fiecare traseu, iar n cea de-a doua cerere de interogare (total) se efectueaz totalul cheltuielilor, pornind de la prima cerere de interogare. Se prezint n continuare codul SQL corespunztor celor dou cereri de interogare: SELECT cheltuieli.ch_spec, cheltuieli.distanta, [ch_spec]*[distanta] AS Tot_linie FROM cheltuieli; SELECT Sum(tot_linie.Tot_linie) AS total FROM tot_linie; Interfaa aplicaiei 3.1 (formularul Form1) este prezentat n figura 3.2.

txtChelt (Name) txtDist (Name )

txtChTot (Name) Fig. 3.2. Aspectul formularului pentru aplicaia 3.1

n momentul n care se dorete adugarea datelor, se acioneaz butonul Adaug (Caption), care activeaz casetele de text din partea superioar a formularului; n felul acesta, casetele de text se pot completa. Dup completare, butonul cu caption-ul Salveaz scrie datele n baza de date, n tabelul CHELTUIELI. Cu ajutorul butoanelor de navigare se execut deplasarea printre nregistrrile tabelului CHELTUIELI pentru a vizualiza cheltuielile de transport specifice i distanele corespunztoare. Rezolvarea propriu-zis a cerinelor aplicaiei se realizeaz la acionarea butonului cu Caption Cheltuieli totale care determin afiarea totalului cheltuielilor n caseta de text alturat.
198

n detaliu, algoritmul de calcul este urmtorul: n seciunea General Declarations se declar i se instaniaz trei obiecte pentru acces la date ActiveX (ADO Access Data Object): cn de tip conexiune (Connection), rs de tip set de nregistrri (Recorset) i cmd de tip comand (Command), precum i o variabil de tip ir de caractere numit sql. Pentru a putea folosi aceste obiecte de acces la date ActiveX (ADO) ctre biblioteca de obiecte care le conine, trebuie inclus o referin n proiectul curent, astfel: n meniul Project/References se bifeaz Microsoft ActiveX Data Objects 2.0 (figura 3.3).

Fig.3.3. Fereastra References

Dim sql As String Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim cmd As New ADODB.Command Urmtoarea secven de program care se execut este cea ataat evenimentului Load (ncrcare) al formularului. La lansarea n execuie, evenimentul Form_Load este primul care se declaneaz. Codul din interiorul procedurii dezactiveaz casetele de text care vor fi activate numai dac se dorete s se adauge date n baza de date (la acionarea butonului de adugare). n continuare, se definete proprietatea ConnectionString a obiectului cn (de tip Connection).
199

Private Sub Form_Load() txtChelt.Enabled = False txtDist.Enabled = False cn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source = D:\Program Files\Microsoft Visual Studio\VB98\APLICATII ECONOMICE IN VISUAL BASIC\PRIMELE\7transport.mdb;Persist Security Info=False" cn.Open rs.ActiveConnection = cn rs.Open "select * from cheltuieli;", , adOpenDynamic, adLockBatchOptimistic rs.MoveFirst afisare End Sub n urma execuiei acestei secvene de program, obiectul rs va fi populat cu nregistrri preluate din tabelul CHELTUIELI cu ajutorul clauzei sql. Pentru popularea obiectului rs cu alt set de nregistrri este necesar mai nti nchiderea sa i deschiderea din nou, dar transmindu-i ca parametru alt cod sql. Aceast clauz extrage totalul cheltuielilor din cererea total, dup care l afieaz n caseta de text txtChTot. Private Sub cmdChTot_Click() rs.Close rs.Open "select * from total;" rs.MoveFirst txtChTot = rs.Fields("total") End Sub Butoanele de navigare permit deplasarea ntre nregistrrile tabelului numai cu condiia ca s nu se depeasc sfritul setului de nregistrri (EOF End Of File) la deplasarea ctre nainte sau nceputul fiierului (BOF Begining Of File) n caz contrar. Private Sub cmdInainte_Click() rs.MoveNext If Not rs.EOF Then afisare Else rs.MoveLast End If End Sub Private Sub cmdInapoi_Click() rs.MovePrevious If Not rs.BOF Then afisare Else rs.MoveFirst End If End Sub
200

Butonul cmdSave insereaz n baza de date, prin codul asociat, coninutul textbox-urilor txtChelt i txtDist. Private Sub cmdSave_Click() cmd.ActiveConnection = cn cmd.CommandText = "insert into cheltuieli(ch_spec,distanta) values (" & txtChelt & "," & txtDist & ");" cmd.Execute txtChelt.Enabled = False txtDist.Enabled = False End Sub Se prezint, n continuare, ntregul program de calcul: Dim sql As String Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim cmd As New ADODB.Command Private Sub cmdAdauga_Click() txtChelt.Enabled = True txtDist.Enabled = True End Sub Private Sub cmdChTot_Click() rs.Close rs.Open "select * from total;" rs.MoveFirst txtChTot = rs.Fields("total") End Sub Private Sub cmdInainte_Click() rs.MoveNext If Not rs.EOF Then afisare Else rs.MoveLast End If End Sub Private Sub cmdInapoi_Click() rs.MovePrevious If Not rs.BOF Then afisare Else rs.MoveFirst End If End Sub
201

Private Sub cmdPrimul_Click() rs.MoveFirst afisare End Sub Private Sub cmdSave_Click() cmd.ActiveConnection = cn cmd.CommandText = "insert into cheltuieli(ch_spec,distanta) values (" & txtChelt & "," & txtDist & ");" cmd.Execute txtChelt.Enabled = False txtDist.Enabled = False End Sub Private Sub cmdUltimul_Click() rs.MoveLast afisare End Sub Private Sub Form_Load() txtChelt.Enabled = False txtDist.Enabled = False cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = D:\Program Files\Microsoft Visual Studio\VB98\APLICATII ECONOMICE IN VISUAL BASIC\PRIMELE\7transport.mdb;Persist Security Info=False" cn.Open rs.ActiveConnection = cn rs.Open "select * from cheltuieli;", adOpenDynamic, adLockBatchOptimistic rs.MoveFirst afisare End Sub Sub afisare() txtChelt = rs.Fields("ch_spec") txtDist = rs.Fields("distanta") End Sub Rezultatele obinute la rularea aplicaiei sunt prezentate n fig.3.4.

202

Fig.3.4. Situaia de ieire pentru aplicaia 3.1

Aplicaia 3.2 S se memoreze, pe categorii de vrst (copii pn la 13 ani, adolesceni cu vrsta ntre 13 i 18 ani, tineri cu vrsta ntre 18 i 35 de ani, aduli cu vrsta ntre 35 i 62 de ani, pensionari cu vrsta peste 62 de ani), veniturile locatarilor unui bloc. Algoritm de calcul Deoarece interfaa aplicaiei (formularul Form1) este destul de ncrcat, se prezint mai nti aceasta, cu cteva explicaii despre modul de funcionare.

203

Fig.3.5. Interfaa aplicaiei 3.2 (Form1)

Aplicaia 3.2 funcioneaz dup logica aplicaiei 3.1: datele sunt introduse n baza de date aplic9.mdb; butonul Adauga golete coninutul celor dou casete de text pentru a permite completarea ulterioar a lor, iar butonul Salveaza scrie n baza de date numele, venitul i categoria de varsta a persoanei (care nu se mai completeaz printr-o caset de text, ci cu ajutorul butoanelor de opiune din cadrul (frame) Categorie varsta. La acionarea butonului cu proprietatea Caption Afiseaza situatie este ncrcat i apare formularul Form2, responsabil cu afiarea rezultatelor propriuzise, calculate pe baza datelor introduse de utilizator (figura 3.6). Toate consideraiile referitoare la includerea bibliotecii de obiecte ActiveX n proiect enunate n cadrul aplicaiei 3.1 sunt valabile i aici. Baza de date conine un singur tabel (fig.3.6).

204

Fig.3.6. Tabelul PERSOANE

Codul SQL aferent cererii suma_pe_categ_varsta este: SELECT persoane.categ_varsta, Sum(persoane.venit) AS venit FROM persoane GROUP BY persoane.categ_varsta; Secvena de program care introduce datele n baza de date (la acionarea butonului cu Caption Salveaz) este: rs.AddNew rs.Fields("nume") = txtNume rs.Fields("venit") = Val(txtVenit) If Option1.Value = True Then rs.Fields("categ_varsta") = Option1.Caption ElseIf Option2.Value = True Then rs.Fields("categ_varsta") = Option2.Caption ElseIf Option3.Value = True Then rs.Fields("categ_varsta") = Option3.Caption ElseIf Option4 = True Then rs.Fields("categ_varsta") = Option4.Caption Else rs.Fields("categ_varsta") = Option5.Caption End If rs.UpdateBatch
205

Codul surs complet asociat controalelor formularului Form1 este: seciunea General Declarations Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim sqlstring As String Dim opt As String Private Sub cmdAdauga_Click() txtNume = " " txtVenit = " " Option1 = False Option2 = False Option3 = False Option4 = False Option5 = False End Sub Private Sub cmdAfiseaza_Click() Dim cn1 As New ADODB.Connection Dim rs1 As New ADODB.Recordset cn1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = D:\Program Files\Microsoft Visual Studio\VB98\APLICATII ECONOMICE IN VISUAL BASIC\aplic9.mdb;Persist Security Info=False" cn1.Open rs1.ActiveConnection = cn1 rs1.Open "select * from suma_pe_categ_varsta;" rs1.MoveFirst Form2.Label1 = "Persoane " & rs1("categ_varsta") Form2.Text1 = rs1("venit") rs1.MoveNext Form2.Label2 = "Persoane " & rs1("categ_varsta") Form2.Text2 = rs1("venit") rs1.MoveNext Form2.Label3 = "Persoane " & rs1("categ_varsta") Form2.Text3 = rs1("venit") rs1.MoveNext Form2.Label4 = "Persoane " & rs1("categ_varsta") Form2.Text4 = rs1("venit") rs1.MoveNext Form2.Label5 = "Persoane " & rs1("categ_varsta") Form2.Text5 = rs1("venit") Form2.Show End Sub

206

Private Sub cmdIesire_Click() End End Sub Private Sub cmdInainte_Click() rs.MoveNext If rs.EOF Then rs.MoveLast End If afisare End Sub Private Sub cmdInapoi_Click() rs.MovePrevious If rs.BOF Then rs.MoveFirst End If afisare End Sub Private Sub cmdSalveaza_Click() If txtNume <> " " And txtVenit <> " " And (Option1 = True Or Option2 = True Or Option3 = True Or Option4 = True Or Option5 = True) Then rs.AddNew rs.Fields("nume") = txtNume rs.Fields("venit") = Val(txtVenit) If Option1.Value = True Then rs.Fields("categ_varsta") = Option1.Caption ElseIf Option2.Value = True Then rs.Fields("categ_varsta") = Option2.Caption ElseIf Option3.Value = True Then rs.Fields("categ_varsta") = Option3.Caption ElseIf Option4 = True Then rs.Fields("categ_varsta") = Option4.Caption Else rs.Fields("categ_varsta") = Option5.Caption End If rs.UpdateBatch Else MsgBox "Nu ati completat toate campurile!" Exit Sub End If txtNume = " " txtVenit = " " Option1 = False Option2 = False
207

Option3 = False Option4 = False Option5 = False End Sub Private Sub Form_Load() cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = D:\Program Files\Microsoft Visual Studio\VB98\APLICATII ECONOMICE IN VISUAL BASIC\aplic9.mdb;Persist Security Info=False" cn.Open rs.LockType = adLockBatchOptimistic rs.ActiveConnection = cn sqlstring = "select * from persoane;" rs.Open sqlstring rs.MoveFirst afisare End Sub Sub afisare() txtNume = rs.Fields("nume") txtVenit = rs.Fields("venit") End Sub

Determin apariia lui Form2 (fig.3.8)

Fig.3.7. Situaia de intrare pentru aplicaia 3.2 (Form1) 208

Fig.3.8. Situaia de ieire pentru aplicaia 3.2 (Form2)

Aspectul formularului la introducerea datelor este prezentat n fig.3.7, iar rezultatele obinute la acionarea butonului Afiseaza situatie sunt prezentate n fig.3.8. Aplicaia 3.3 S se calculeze salariul mediu i abaterile specifice pentru fiecare salariat la o societate comercial, cunoscnd marca, numele, prenumele i salariul lunar al salariailor. Algoritm de calcul Aplicaia lucreaz cu o baz de data numit 12 care este realizat cu ajutorul Sistemului de Gestiune a Bazelor de Date Relaionale (SGBDR) SQL Server al firmei Microsoft. Fereastra principal a SGBDR SQL Server se numete Entreprise Manager (fig.3.9) i gestioneaz, printre altele, crearea tabelelor, a cererilor (Views), a procedurilor stocate (Stored Procedures) .a.m.d. SQL Server este un SGBD mai puternic dect Access, pentru c, dei se folosete mai greu, nedispunnd de sistemul de asisteni (Wizards) ai Access-ului, este mult mai flexibil i mai rapid n condiiile gestionrii unui volum mare de date de ctre mai muli utilizatori.
209

Fig.3.9. Fereastra Entreprise Manager

Baza de date folosit conine numai un tabel tblSalariat. Crearea unui tabel se realizeaez prin clic dreapta asupra nodului Tables din stnga ferestrei, dup care se alege opiunea New Table (un nou tabel). Fereastra care apare este destul de asemntoare cu fereastra de creare a tabelelor din Access (fig.3.10). Tabelul tblSalariat este ultimul listat n partea din dreapta a ferestrei Entreprise Manager, celelalte fiind tabele sistem (care conin prefixul sys).

210

tblSalariat, fereastra de proiectare

tblSalariat, fereastra de introducere date

Fig.3.10. Tabelul tblSalariat

Baza de date cuprinde, de asemenea, pe lng tabelul tblSalariat i dou cereri de interogare al cror cod SQL este prezentat n continuare: vwAbatere: SELECT dbo.tblSalariat.*, dbo.vwSalMediu.[Salariu mediu] AS [Salariu mediu], dbo.tblSalariat.salariu - dbo.vwSalMediu.[Salariu mediu] AS Abatere FROM dbo.tblSalariat CROSS JOIN dbo.vwSalMediu vwSalMediu: SELECT AVG(salariu) AS [Salariu mediu] FROM dbo.tblSalariat Se menioneaz c dbo este posesorul obiectelor, adic baza de date curent. Interfaa aplicaiei conine dou formulare: Form1 permite navigarea printre nregistrrile tabelului tblSalariat, introducerea de noi date n acest tabel i deschiderea lui Form2 care afieaz salariul mediu i abaterile, adic ceea ce s-a sintetizat n cererea de interogare vwAbatere. La rularea aplicaiei, iniial este ncrcat formularul Form1. Pentru aceasta, se completeaz n meniul Project/Properties la ComboBox-ul StartUp Form1. Dup ncrcare, formularul afieaz prima nregistrare din tabela tblSalariat, datorit codului asociat evenimentului Load:
211

Private Sub Form_Load() conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security = SSPI;Persist Security Info=False;Initial Catalog=12;Data Source=(local)" conn.Open recs.ActiveConnection = conn recs.CursorType = adOpenDynamic recs.Open "select * from dbo.tblSalariat;" recs.MoveFirst afisareeste o procedura al carei continut este listat mai jos End Sub Se precizeaz c obiectele ActiveX conn (de tip conexiune) i recs (de tip set de nregistrri) au fost declarate i instaniate n seciunea General Declarations pentru a fi vizibile i n celelalte module ale aplicaiei: 'declararea (dim) si instantierea (new) unei conexiuni si ale unui set de inregistrari Dim conn As New ADODB.Connection Dim recs As New ADODB.Recordset

Fig.3.11. Situaia de intrare (Form1) pentru aplicaia 3.3 212

Acionarea meniului Salariu mediu i abateri determin apariia formularului Form2, care conine un control de tip Microsoft Hierarchical FlexGrid Control 6.0 i un control Microsoft DataGrid Control 6.0. Aceste controale afieaz aceleai date ca i casetele de text din partea inferioar a formularului. S-au folosit toate variantele n scop didactic pentru evidenierea alternativelor de prezentare a datelor n cazul utilizrii design-erului (proiectant) DataEnvironment.

n cazul folosirii numai a acestei alternative de afiare a datelor este necesar plasarea unor butoane de navigare ntre nregistrri!

Fig.3.12. Situatia de ieire (Form2) pentru aplicaia 3.3 213

Pentru adugarea unui designer DataEnvironment se procedeaz ca n fig.3.13.

Fig.3.13. Adugarea designer-ului DataEnvironment

Dup ce designer-ul DataEnvironment a fost adugat la proiect, i se stabilesc proprietile: se leag DataEnvironment1 de baza de date 12 creat cu SQL Server, ca n fig.3.14.

214

Pas 1

Pas 2
Fig.3.14. Proprietile lui DataEnvironment1

Designer-ul DataEnvironment poate conine obiecte de tip Connection i Command, care au la rndul lor proprieti. Cu ajutorul acestor proprieti se poate realiza conectarea la un anumit obiect din interiorul bazei de date, respectiv la cererea (View) vwAbatere, care trebuie afiat n Form2. DataEnvironment1 conine un obiect de tip Connection ale crui proprieti se seteaz identic ca n fig.3.14 i un obiect Command (fig.3.15).

215

Fig.3.15. Coninutul designer-ului DataEnvironment1

Proprietile pentru Command1 se stabilesc prin clic buton dreapta mouse, iar apoi n fereastra prezentat n fig.3.16 se specific tipul obiectului din baza de date la care se conecteaz, conexiunea utilizat (Connection1) sau codul SQL care se va executa asupra bazei de date.

Fig.3.16. Proprietile lui Command1 216

Afiarea coninutului cererii de interogare vwAbatere pe formularul Form2 se realizeaz foarte uor, prin tehnica Drag and Drop: se trage obiectul comand n Form2, inndu-se apsat butonul drept al mouse-ului; la eliberarea acestuia se alege din meniul contextual aprut modul de afiare (DataGrid/ Hierarchical FlexGrid /Bound Controls/Cancel) fig.3.17.

Fig.3.17. Crearea de controale legate la date prin tehnica Drag and Drop

n continuare, este prezentat codul complet al aplicaiei. Liniile considerate deosebite au fost completate cu comentarii. 'declararea (dim) si instantierea (new) 'unui obiect de conectare la date de tip Conexiune Dim conn As New ADODB. Connection 'declararea (dim) si instantierea (new) 'unui obiect de conectare la date de tip Set de Inregistrari Dim recs As New ADODB.Recordset Private Sub cmdInregNoua_Click() goleste End Sub Private Sub cmdPrecedentul_Click() If recs.BOF = False Then recs.MovePrevious afisare End If End Sub

217

Private Sub cmdPrimul_Click() recs.MoveFirst afisare End Sub Private Sub cmdSave_Click() Dim recs1 As New ADODB.Recordset recs1.ActiveConnection = conn If IsNumeric(txtmarca) And txtnume <> " " And txtprenume <> " " And IsNumeric(txtsalariu) Then recs1.Open "insert into dbo.tblSalariat(marca,nume,prenume,salariu) values (" & txtmarca & "," & txtnume & "," & txtprenume & " " & txtsalariu & ");" MsgBox "S-a salvat!", vbOKOnly, "Succes" End If MsgBox "Nu s-a salvat deoarece nu ati completat corect !" End Sub Private Sub cmdUltimul_Click() recs.MoveLast afisare End Sub Private Sub cmdUrmatorul_Click() If recs.EOF = False Then EOF este sfarsitul fisierulu iar BOF inceputul recs.MoveNext afisare End If End Sub Private Sub Form_Load() conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security = SSPI;Persist Security Info=False;Initial Catalog=12;Data Source=(local)" conn.Open recs.ActiveConnection = conn recs.CursorType = adOpenDynamic recs.Open "select * from dbo.tblSalariat;" recs.MoveFirst afisare End Sub Private Sub Form_Unload(Cancel As Integer) la inchiderea lui Form1 se distrug obiectele de conectare la date Set conn = Nothing Set recs = Nothing Set recs1 = Nothing End Sub
218

Private Sub mnuSalMediu_Click() Form2.Show End Sub Sub afisare() 'daca nu poate afisa, sa treaca mai departe On Error Resume Next txtmarca = recs.Fields("Marca") txtnume = recs.Fields("Nume") txtprenume = recs.Fields("Prenume") txtsalariu = recs.Fields("Salariu") End Sub Sub goleste() txtmarca = " " txtnume = " " txtprenume = " " txtsalariu = " " End Sub

Aplicaia 3.4 Un magazin de autoturisme are mai muli furnizori societi comerciale de producie autoturisme i clieni persoane fizice i juridice. Magazinul ofer spre vnzare mai multe modele de autoturisme. Datele despre aceste modele de autoturisme, solicitate de clieni, se refer la culoare, capacitate cilindric, viteza maxim, consum de carburant la 100 km, pre de vnzare. Se definesc entitile (ntr-un model simplificat): MAGAZIN (cod_mag, den_mag, adresa_mag, cod_fiscal_mag, banca_mag, cont_mag), AUTOTURISME (cod_auto, den_auto, cod_mag, model, culoare, cap_cil, vit_max, consum, pret_unitar), CLIENTI (cod_client, den_client, adresa_client, cod_fiscal_client, banca_client, cont_client, cod_auto), FACTURA, LINIE FACTURA, FURNIZORI. n urma analizei i proiectrii bazei de date AUTO, structura acestei baze de date este prezentat n fig.3.18.
219

Fig.3.18. Structura bazei de date AUTO

Prin folosirea clauzelor SQL, de exemplu, tabelul AUTOTURISME se construiete astfel: CREATE TABLE Autoturisme (cod_auto INTEGER CONSTRAINT FieldConstraint PRIMARY KEY, den_auto TEXT NOT NULL, model TEXT NOT NULL, culoare TEXT NOT NULL cap_cil INTEGER, vit_max INTEGER, consum SINGLE, pret_unitar DOUBLE); Instruciunile SQL permit execuia unor operaiuni specifice asupra unor nregistrri din baza de date AUTO ce ndeplinesc criterii prestabilite. a) S se afieze denumirile de autoturisme, preul unitar i cantitatea vndut unor clieni din Bucureti, cu denumirile sortate n ordine alfabetic. S se calculeze preul unitar prognozat pentru fiecare tip de autoturism, tiind c procentul de cretere pentru anul n curs este de 15%. SELECT den_auto, pret_unitar, cantitate, [pret_unitar]*1.15 AS pret_unitar_prognozat FROM autoturisme, factura, clienti, linie factura WHERE adresa_client="Bucuresti" ORDER BY den_auto ASC; b) S se afieze lista cu autoturismele ale cror denumiri ncep cu litera D i au preuri unitare cuprinse ntre 100.000.000 i 300.000.000 lei. SELECT den_auto, pret_unitar FROM autoturisme WHERE adresa_auto LIKE D* AND pret_unitar BETWEEN 100000000 AND 300000000 ORDER BY den_auto ASC;
220

c) La magazinul de autoturisme sosete reprezentantul firmei Alfa SRL din Constana, str.N.Iorga, nr.25, cu codul fiscal R425570, cu contul 321004326672 deschis la BCR care dorete s cumpere autoturisme Daewwo, model Cielo, de culoare roie. Adugarea nregistrrii pentru acest client se face n tabela CLIENTI prin folosirea instruciunii INSERT: INSERT INTO clienti VALUES (1221, "Alfa SRL","Constanta, str.N.Iorga, nr.25", "R425570", "BCR",321004326672); Oferta de autoturisme Daewwo este obinut cu: SELECT den_auto, model, culoare, pret_unitar FROM autoturisme WHERE den_auto="DAEWWO" AND model="Cielo" AND culoare="rosu" ORDER BY den_auto ASC; d) Magazinul promite clientului Alfa SRL un discount la vnzare de 10% pentru fiecare autoturism, dac acesta cumpr cel puin cinci autoturisme Daewwo, model Cielo. Se ntocmete o list cu noile preuri ale autoturismelor Daewwo, model Cielo: SELECT den_auto, model, pret_unitar, (pret_unitar*0.9) pret_unitar_nou FROM autoturisme WHERE den_auto=DAEWWO AND model=Cielo ORDER BY den_auto ASC; e) Un client al magazinului dorete un autoturism de culoare neagr cu consum minim de carburant. SELECT den_auto, model, culoare, consum FROM autoturisme WHERE culoare=negru HAVING Min(consum); O interogare mai simpl se construiete astfel: SELECT Min(consum) FROM autoturisme WHERE culoare=negru; Min(consum)
221

f) Se dorete actualizarea codului autoturismului Dacia: UPDATE autoturisme SET cod_auto=1234 WHERE den_auto="Dacia"; g) Magazinul dorete s renune la clienii din provincie i s tearg nregistrrile din baza de date referitoare la acetia. DELETE FROM clienti WHERE adresa<>"Bucuresti*"; h) Pentru un studiu statistic, se dorete calculul deviaiei standard (abaterii) preurilor unitare ale autoturismelor nregistrate n baza de date AUTO. SELECT STDDEV (pret_unitar) FROM autoturisme; i) Se cere calculul numrului de autoturisme care au pre unitar mai mic dect 300.000.000 lei. SELECT COUNT (*) FROM autoturisme WHERE pret_unitar<300000000.

222

4. EXEMPLE DE TESTE GRIL PENTRU EXAMENUL DE LICEN la specializarea Contabilitate i informatic de gestiune pentru partea de Informatic de gestiune (Limbaje i SGBD)

4.1. Tipurile de structuri de date sunt: a. b. c. d. e. structura punctual, reea, relaional; structura punctual, liniar, arborescent; structura relaional, reea, punctual, liniar; structura punctual, liniar, arborescent, reea, relaional; structura punctual, liniar, relaional.

4.2. S se stabileasc care variant este corect pentru urmtoarea secven de program scris pentru problem: O societate comercial desface 80 de produse, pentru care se cunosc ca date de intrare: codprod codul produsului, denprod denumirea produsului, cant cantitatea, pret preul. Secvena de program se refer la calculul valorii pentru fiecare produs i afiarea pe ecran a acelor produse pentru care valoarea (val)<3.750.000 lei. a) For i =1 To 80; val=cant*pret Print codprod, denprod, cant, pret, val Next i b) For i =1 To 80; val=cant*pret If val<3750000 Then Print codprod, denprod, cant, pret, val End If Next i c) For i =1 To n; val=cant*pret If val<3750000 Then Print codprod, denprod, cant, pret, val Next i d) For i =1 To 80; val=cant*pret If val<3750000 Then Print codprod, denprod, cant, pret, val Next i
223

e) For i =1 To 80; val=cant*pret If val<3750000 Then Print codprod, denprod, cant, pret, val End If 4.3. Formularele n Access sunt destinate: a. pentru introducerea datelor n baza de date, cnd formularul este asociat unui tabel b. pentru introducerea datelor n baza de date, cnd formularul este asociat unui tabel, pentru vizualizarea datelor ntr-o baz de date, atunci cnd formularul este asociat unei interogri; c. pentru introducere de date; d. pentru vizualizare de date; e. pentru introducere i vizualizare de date, precum i pentru vizualizarea rezultatelor finale obinute prin prelucrarea informaiilor coninute de baza de date. 4.4. Un sistem de gestiune al bazelor de date orientate pe obiecte conine: a. un constructor de tip ir, un constructor de tip secven i un constructor de tip nregistrare care intr n compunerea unui sistem de date concrete; b. funcii i un constructor de tip reuniune ce nu permit conectarea limbajelor din generaia a patra; c. un sistem de date abstracte, un constructor de tip ir, un constructor de tip secven, un constructor de tip nregistrare, un constructor de tip set, funcii, un constructor de tip reuniune i o compunere recursiv a elementelor anterioare; d. un sistem de date abstracte, un constructor de tip ir, unul de tip secven, unul de tip nregistrare, unul de tip set, funcii, constructor de tip reuniune, toate acestea ntrnd n compunerea interfeei-utilizator; e. un sistem de tip constructor ir care genereaz n permanen mesaje ctre utilizator. 4.5. S se stabileasc care variant este corect pentru urmtoarea secven de program scris pentru problema: O societate comercial vinde un numr de 10 produse, timp de 7 zile. Se dorete aflarea vnzrii medii pe zi la toate produsele. Se cunosc ca date de intrare: codp codul produsului, denp denumirea produsului, valp valoarea produsului, totp total produs, totalm vnzarea medie zilnic pe toate produsele. a. totp = 0 totm=0 For i= 1 To 7 For j=1 To 10 totp = totp + valp Next j Next i totm = totp/7
224

totp = 0 For i= 1 To 7 For j=1 To 10 codp=InputBox(cod produs) denp=InputBox(denumire produs) valp=InputBox(valoarea produsului) totp = totp + valp Next j Next i totm = totp/7 c. For i= 1 To 7 For j=1 To 10 codp=InputBox(cod produs) denp=InputBox(denumire produs) totp = totp + valp Next j Next i totm = totp/7 d. totp = 0 totm = 0 For i= 1 To 7 For j=1 To 10 codp=InputBox(cod produs) denp=InputBox(denumire produs) valp=InputBox(valoarea produsului) totp = totp + valp Next i totm = totp/7 e. totp = 0 For j=1 To 10 For i= 1 To 7 codp=InputBox(cod produs) denp=InputBox(denumire produs) valp=InputBox(valoarea produsului) totp = totp + valp Next j Next i totm = totp/7 4.6. Tipurile de obiecte care formeaz baza de date n Access sunt: a. tabelul, interogarea, raportul, macro-ul, modulul; b. tabelul, interogarea, formularul, raportul, modulul; c. tabelul, modulul, macro-ul, formularul, pagini Web; d. tabelul, interogarea, formularul, raportul, pagini Web, macro-ul, modulul; e. tabelul, raportul, pagini Web, modulul, formularul.

b.

225

4.7. Proprietile unei chei primare pentru o baz de date relaional sunt: a. nu exist valori identice ale atributelor, valoarea lor nu poate fi NULL; b. nu exist valori identice ale atributelor, valoarea lor nu poate fi NULL, valoarea unei chei primare nu se modific ntr-o scurt perioad de timp; c. dimensiunea unei chei primare trebuie s fie ct mai mic; d. nu exist valori identice ale atributelor, valoarea ei nu poate fi NULL, valoarea unei chei primare nu se modific ntr-o scurt perioad de timp, dimensiunea cheii primare trebuie s fie ct mai mic; e. valoarea unei chei primare nu trebuie s fie NULL, s aib dimensiune ct mai mic. 4.8. S se stabileasc care variant este corect pentru urmtoarea secven de program scris pentru problema: Pentru o grup care are 25 de studeni, s se calculeze media pe fiecare student n parte i media pe grup, cunoscnd: cods codul studentului, nume numele i prenumele studentului, nota1 nota la examenul 1, nota2 nota la examenul 2 i nota3 nota la examenul 3 a. totmg = 0 totg =1 For i= 1 To 25 meds=(n1+n2+n3)/3 Print meds totg=totmg/25 Next i b. totmg = 0 For i= 1 To 25 meds=(n1+n2+n3)/3 totmg=totmg+meds Print cods, nume, n1, n2, n3, meds totg=totmg/25 Print "media grupei este = ",totmg Next i c. totmg = 0 For i= 1 To 25 meds=(n1+n2+n3)/3 totmg=totmg+meds Print cods, nume, n1, n2, n3, meds Next i totg=totmg/25 Print "media grupei este = ",totmg d. For i= 1 To 25 meds=(n1+n2+n3)/3 Print cods, nume, n1, n2, n3, meds Next i totg=totmg/25 Print "media grupei este = ",totmg e. For i= 1 To 25 totmg=totmg+meds
226

Print cods, nume, n1, n2, n3, meds Next i totg=totmg/25 4.9. Un tabel n Access este utilizat pentru: a. introducere de date; b. ntrebri selective asupra datelor existente n baza de date; c. obinere de situaii finale; d. stocare de date; e. definete o serie de comenzi pe care Access-ul le execut automat la apariia unui eveniment. 4.10. Arhitectura bazei de date cuprinde: a. baza de date propriu-zis, analiza sistemului, proiectarea structurii bazei de date, ncrcarea datelor, exploatarea i ntreinerea bazei de date; b. baza de date propriu-zis, sistemul de gestiune al bazei de date, set de proceduri manuale i automate, dicionar al bazei de date, mijloace hard i personal implicat; c. baza de date propriu-zis, sistemul de gestiune al bazei de date, ncrcarea datelor, exploatarea i ntreinerea bazei de date; d. baza de date propriu-zis, proiectarea structurii bazei de date, ncrcarea datelor, exploatarea i ntreinerea bazei de date; e. baza de date propriu-zis, set de proceduri manuale i automate, ncrcarea datelor, dicionar al bazei de date, mijloace hard i personal implicat. 4.11. S se stabileasc care variant este corect pentru urmtoarea secven de program scris pentru problema: Pentru o lista cu 15 produse la care se aplic tva, s se calculeze i s se afieze, pentru fiecare produs, taxa pe valoare adugat tva i valoarea cu tva val, tiind: codul produsului codpr, denumirea produsului denpr, cantitatea cant i preul unitar pret_u. a. For i = 1 To 15 val=cant*pret_u tva=val*19/100 val=cant+tva Print codpr, denprod, cant, pret_u, val, tva Next i b. For i = 1 To 15 val=cant*pret_u tva=val*19/100 val=val+tva Print codpr, denprod, cant, pret_u, val, tva c. For i = 1 To 15 val=cant*pret_u tva=val*19/100 val=val+tva Print codpr, denprod, cant, pret_u, val, tva Next i
227

d.

For i = 1 To n val=cant*pret_u tva=val*19/100 val=val+tva Print codpr, denprod, cant, pret_u, val, tva Next i For i = 1 To 15 val=cant*pret_u tva=val*19/100 val=val+tva Print codpr, denprod, cant, pret_u, val Next i

e.

4.12. O interogare n Access permite, ntre altele: a. vizualizarea sau modificarea atributelor, precum i sortarea nregistrrilor ntr-o ordine specificat; b. vizualizarea sau modificarea datelor, precum i modificarea structurii bazei de date; c. vizualizarea sau modificarea datelor, precum i proiectarea bazei de date; d. vizualizarea sau modificarea datelor, precum i sortarea nregistrrilor ntr-o ordine specificat; e. vizualizarea sau modificarea datelor, precum i introducerea evenimentelor ntr-o baz de date. 4.13. Nivelurile de structurare a componentelor unei baze de date, n funcie de clasa de utilizatori, sunt: a. baza de date propriu-zis, sistemul de gestiune al bazei de date, set de proceduri manuale i automate, dicionar al bazei de date, mijloace hard i personal implicat; b. nivelul logic, nivelul de analiz a sistemului i nivelul de proiectare a structurii bazei de date; c. nivelul logic, nivelul de analiz i nivelul fizic; d. nivelul logic, nivelul conceptual sau global i nivelul de exploatare a bazei de date; e. nivelul logic, nivelul conceptual sau global i nivelul fizic. 4.14. S se stabileasc care variant este corect pentru urmtoarea secven de program scris pentru problema: S se calculeze profitul sau pierderea din vnzri pentru un produs la care se cunosc costul de producie i preul de vnzare. a. Dim pret As Integer Dim profit As Integer cost=InputBox("Costul; este: ") pret=InputBox("Pretul este: ") profit = pret cost Then If pret > profit MsgBox "Profitul este: " &profit Else MsgBox "Pierderea este: "&(-profit)
228

b. Dim pret As Integer Dim profit As Integer cost=InputBox("Costul; este: v) pret=InputBox("Pretul este: ") profit = pret - cost If pret > profit Then MsgBox "Profitul este: " &profit Else MsgBox Pierderea este: &(-profit) End If c. Dim pret As Integer Dim profit As Integer cost=InputBox("Costul; este: ") pret=InputBox("Pretul este: ") profit = pret - cost If pret > profit Then MsgBox "Profitul este: " &profit Or MsgBox "Pierderea este: " &(-profit) End If d. Dim pret As Integer Dim profit As Integer cost=InputBox("Costul; este: ") pret=InputBox("Pretul este: ") profit = pret - cost Daca pret > profit Atunci MsgBox "Profitul este: " &profit Altfel MsgBox "Pierderea este: " &(-profit) End Daca e. Dim pret As Integer Dim profit As Integer cost=InputBox("Costul; este: ") pret=InputBox("Pretul este: ") profit = pret - cost If pret > profit MsgBox "Profitul este: " &profit Else MsgBox "Pierderea este: " &(-profit) End If 4.15. n Access, afiarea proprietilor unui obiect se face: a. pe grupe de proprieti, fiecare grup de proprieti aflndu-se pe cte o fi; b. pe grupe de activiti, fiecare grup de activiti avnd semnificaia descris printr-un simbol; c. pe grupe de sarcini, fiecare sarcin avnd precizate numere de ordine;
229

d. pe grupe de proprieti, fiecare grup de proprieti indicnd formatul unui obiect; e. pe grupe de proprieti, fiecare grup de proprieti indicnd o list de aciuni la care este posibil a rspunde obiectul cruia i sunt asociate, ca urmare a apariiei unor evenimente. 4.16. Structura arborescent a unei colecii de date este caracterizat de existena: a. unei relaii de ordine ntre elementele coleciei de date; b. unei relaii de ordine ntre elementele sistemului ierarhic superior i elementele sistemului ierarhic inferior; c. unei structuri punctuale ntre elementele coleciei de date; d. unei structuri reea ntre elementele coleciei de date; e. unei structuri liniare ntre elementele coleciei de date. 4.17. S se stabileasc care variant este corect pentru urmtoarea secven de program scris pentru problema: S se calculeze valoarea total (val_tot) a 10 produse perisabile aflate ntr-un depozit, dup o perioad de depozitare, cunoscnd coeficienii de perisabilitate specifici (coef_peris), categoriile de produse (definite prin cod_produs) i valoarea acestor produse (val) la nceputul perioadei de depozitare. a. val_tot = 0 For i=0 To 10 cod_produs(i)=InputBox ("Cod produs: ") val(i)=InputBox("Valoare: ") Select Case cod_produs(i) Case Is < 1000 coef_peris=0 Case Is < 2000 coef_peris=5/100 Case Is < 3000 coef_peris=10/100 Case Is >=3000 coef_peris=50/100 val_f(i) = val(i)*(1-coef_peris) val_tot=val_tot+val_f(i) Next i b. val_tot = 0 For i=0 To 10 cod_produs(i)=InputBox ("Cod produs: ") val(i)=InputBox("Valoare: ") Select Case cod_produs(i) Case Is < 1000 coef_peris=0 Case Is < 2000 coef_peris=5/100 Case Is < 3000 coef_peris=10/100
230

Case Is >=3000 coef_peris=50/100 End Select val_f(i) = val(i)*(1-coef_peris) val_tot=val_tot+val_f(i) c. val_tot = 0 For i=0 To 10 cod_produs(i)=InputBox ("Cod produs: ") val(i)=InputBox("Valoare: ") Select Case cod_produs(i) Case Is < 1000 coef_peris=0 Case Is < 2000 coef_peris=5/100 Case Is < 3000 coef_peris=10/100 Case Is <=3000 coef_peris=50/100 End Select val_f(i) = val(i)*(1-coef_peris) val_tot=val_tot+val_f(i) Next i d. val_tot = 0 For i=0 To 10 cod_produs(i)=InputBox ("Cod produs: ") val(i)=InputBox("Valoare: ") Select Case cod_produs(i) Case Is < 1000 coef_peris=0 Case Is < 2000 coef_peris=5/100 Case Is < 3000 coef_peris=10/100 Case Is >=3000 coef_peris=50/100 End Select val_f(i) = val(i)*(1-coef_peris) val_tot=val_tot+val_f(i) Next i e. val_tot = 0 For i=0 To N cod_produs(i)=InputBox ("Cod produs: ") val(i)=InputBox("Valoare: ") Select Case cod_produs(i) Case Is < 1000 coef_peris=0 Case Is < 2000 coef_peris=5/100
231

Case Is < 3000 coef_peris=10/100 Case Is >=3000 coef_peris=50/100 End Select val_f(i) = val(i)*(1-coef_peris) val_tot=val_tot+val_f(i) Next i 4.18. n Access, funciile Sum, Min, Max, Avg i Count asigur efectuarea interogrilor: a. de aciune; b. asupra unei anumite date; c. de grup; d. de tergere; e. de adugare. 4.19. Modelul de date relaional se caracterizeaz printr-o singur structur de date denumit: a. relaie sau nregistrare; b. relaie sau atribut; c. relaie sau tabel; d. relaie sau cmp de date; e. relaie sau ierarhie. 4.20. S se stabileasc care variant este corect pentru urmtoarea secven de program scris pentru problema: S se calculeze cheltuielile totale de transport (ch_totale) pentru cinci curse, cunoscnd cheltuielile de transport specifice (ch_tp) categoriei de distan (dist_tp). a. ch_totale = 0 For i=1 To N dist_tp=InputBox("Distanta de transport: ") Select Case dist_tp(i) Case Is <50 ch_tp=100000 Case Is <100 ch_tp=600000 Case Is<200 ch_tp=900000 Case Is>=200 ch_tp=2000000 End Select ch_totale=ch_totale+ch_tp Next i b. ch_totale = 0 For i=1 To 5 dist_tp=InputBox("Distanta de transport: ") Select Case dist_tp(i)
232

Case Is <50 ch_tp=100000 Case Is <100 ch_tp=600000 Case Is<200 ch_tp=900000 Case Is>=200 ch_tp=2000000 End Select ch_totale=ch_totale+ch_tp c. ch_totale = 0 For i=1 To 5 dist_tp=InputBox("Distanta de transport: ") Select Case dist_tp(i) Case Is <50 ch_tp=100000 Case Is <100 ch_tp=600000 Case Is<200 ch_tp=900000 Case Is>=200 ch_tp=2000000 ch_totale=ch_totale+ch_tp Next i d. ch_totale = 0 For i=1 To 5 dist_tp=InputBox("Distanta de transport: ") Select Case dist_tp(i) Case Is <50 ch_tp=100000 Case Is <100 ch_tp=600000 Case Is<200 ch_tp=900000 Case Is>=200 ch_tp=2000000 End Select ch_totale=ch_totale+ch_tp Next i e. ch_totale = 0 For i=1 To 5 dist_tp=InputBox("Distanta de transport: ") Select Case dist_tp(i) Case Is <50 ch_tp=100000 Case Is <100 ch_tp=600000 Case Is>200
233

ch_tp=900000 Case Is>=200 ch_tp=2000000 End Select ch_totale=ch_totale+ch_tp Next i 4.21. Categoriile de evenimente care pot avea loc ntr-o baz de date n Access sunt: a. evenimente care fac referire la date, evenimente de focalizare, evenimente asociate deranjamentelor din sistem i evenimente asociate cu alte evenimente; b. evenimente care fac referire la date, evenimente de focalizare, evenimente asociate butoanelor de la tastatur i evenimente asociate mouse-ului; c. evenimente care fac referire la date, evenimente asociate cu alte evenimente, evenimente asociate butoanelor de la tastatur i evenimente asociate mouse-ului; d. evenimente care fac referire la date, evenimente de focalizare, evenimente asociate imprimantei i evenimente asociate mouse-ului; e. evenimente care fac referire la date, evenimente de focalizare, evenimente asociate tuturor dispozitivelor periferice de intrare/ieire. 4.22. Programele pe calculator reprezint: a) Algoritmi; b) Structuri de date; c) Date n cod main; d) Informaii selectate dup o anumit cheie; e) Algoritmi i structuri de date. 4.23. n sistemele de gestiune a bazelor de date orientate pe obiecte, motenirea reprezint o caracteristic conform creia: a. clasele sunt aranjate ntr-o ierarhie i se definete posibilitatea de a masca atributele proprii ale unui obiect i modul n care se execut operaiile; b. clasele sunt aranjate ntr-o ierarhie i se permite invocarea pentru obiecte de diferite tipuri a operaiilor cu acelai nume, dar cu semantic i implementare diferite; c. clasele sunt aranjate ntr-o ierarhie i fiecare clas motenete toate atributele i metodele clasei din care face parte; d. clasele sunt aranjate ntr-o ierarhie i fiecare operaie se comport n mod diferit, n funcie de clasa de obiecte creia i aparine; e. clasele sunt aranjate ntr-o ierarhie i evenimentele sunt generate de click-ul mouse-ului. 4.24. n sistemele de gestiune a bazelor de date orientate pe obiecte, metoda nseamn: a. un program care reprezint structura unui obiect; b. un program care reprezint atribute;
234

c. un program care gestioneaz instruciunile limbajului de programare Visual Basic; d. un program care manipuleaz i modific integritatea datelor; e. un program care manipuleaz obiectul sau indic starea sa. 4.25. O interogare SQL este o comand care nu execut una din aciunile urmtoare: a. s construiasc sau s tearg o baz de date; b. s insereze, s modifice sau s tearg linii sau cmpuri; c. s caute n tabele o anumit informaie i s returneze rezultatele ntr-o anumit ordine; d. s construiasc un formular n Access; e. s modifice securitatea informaiilor. Rspunsuri: 1-d; 2-b; 3-b; 4-c; 5-b; 6-d; 7-d; 8-c; 9-d; 10-b; 11-c; 12-d; 13-e; 14-b; 15-a; 16-a; 17-d; 18-c; 19-c; 20-d; 21-b; 22-e; 23-c; 24-e; 25-d.

235

BIBLIOGRAFIE

Fnaru, L.; Brava, I., Visual Basic. Primii pai i urmtorii, Editura Polirom, Iai, 2001. Florescu, V.; Stanciu, V., i colectiv, Baze de date, Editura Economic, Bucureti, 1999. Fusaru, D., Arhitectura bazelor de date Mediul SQL, Editura Fundaiei Romnia de Mine, Bucureti, 2002. Fusaru, D.; Mare, M.D.; Mihai, G., Visual Basic i Access, Editura Fundaiei Romnia de Mine, Bucureti, 2001. Fusaru, D.; Udric, M.; Cocianu, C.L., Programarea orientat pe obiecte, Editura Fundaiei Romnia de Mine, Bucureti, 1999. Gardarin, G., Bases de dones: Object & relationne, Eyrolles, Paris, 2001. Lungu, I. i colectiv, Baze de date: organizare, proiectare i implementare, Editura All, Bucureti, 1995. Nstase P. i colectiv, Tehnologia bazelor de date. Access 2000, Editura Teora, Bucureti, 2000. Ptru, B., Aplicaii n Visual Basic, Editura Teora, Bucureti, 2002. Popa, Gh.; Iliescu, M., Udric, M., Baze de date Access. Culegere de probleme, Editura Cison, Bucureti, 2001. Popa, Gh.; Iliescu, M.; Berbec, F.; Ivancenco, V.; Andronache, V., Visual Basic, Editura Cison, Bucureti, 1999. Popa, Gh.; Tama, I.; Fril, L.; Cozdarea, A; Fril, R., Aplicaii informatice. Gestiune, Contabilitate, Finane, Bnci, Editura Cison, Bucureti, 2001. Rahmel, D., Sams Teach Yourself Database Programming with Visual Basic 6 in 24 Hours, Sams Publishing, New York, 1999. Sandor, K., Programarea interfeelor cu Visual Basic 6.0 elemente de baz, Editura Albastr, Cluj-Napoca, 2002. Stanciu, V., Proiectarea sistemelor informatice de gestiune, Editura Cison, Bucureti, 2000. Udric, M.; Fusaru, D., Informatic de gestiune, Culegere de probleme, Editura EDEN 78 LTD, Bucureti, 1999. Winemiller, E.; Roff, J.T.; Heymann, B., Groom, R., Visual Basic Databases How-To, Sams Publishing, New York, USA, 1998. *** Microsoft Press, Microsoft Visual Basic 6.0. Ghidul programatorului, Editura Teora, Bucureti, 2002. *** Baze de date Fundamente teoretice i practice, Grupul BDASEIG Editura Infomega, Bucureti, 2002.
236