aplicatii ec in visual basic

236
Doina FUSARU Zenovic GHERASIM Maria ANDRONIE Adela BÂRA Petrişor STROE APLICAŢII ECONOMICE ÎN VISUAL BASIC ŞI ACCESS Edi ţia a III-a

Upload: tavirossi81

Post on 05-Jul-2015

2.524 views

Category:

Documents


14 download

TRANSCRIPT

Page 1: Aplicatii Ec in Visual Basic

Doina FUSARU Zenovic GHERASIM Maria ANDRONIE

Adela BÂRA Petrişor STROE

APLICAŢII ECONOMICE ÎN VISUAL BASIC ŞI ACCESS

Ediţia a III-a

Page 2: Aplicatii Ec in Visual Basic

Descrierea CIP a Bibliotecii Naţionale a României

Aplicaţii economice în Visual Basic şi Access. / Doina Fusaru, Zenovic Gherasim, Maria Andronie, Adela Bâra, Petrişor Stroe – Ed. a 3-a -Bucureşti, Editura Fundaţiei România de Mâine, 2007

236 p; 24 cm

ISBN 978-973-725-773-4 I. Fusaru, Doina

II. Gherasim, Zenovic III. Bâra, Adela IV. Andronie, Maria V. Stroe, Petrişor

004:33(075.8)

© Editura Fundaţiei România de Mâine, 2007

Redactor: Maria CERNEA

Tehnoredactori: Maria ANDRONIE Marcela OLARU

Coperta: Maria ANDRONIE

Bun de tipar: 22.02.2007; Coli tipar: 14,75 Format: 16/70×100

Editura Fundaţiei România de Mâine Bulevardul Timişoara nr.58, Bucureşti, Sector 6

Tel./Fax: 021/444.20.91; www.spiruharet.ro e-mail: [email protected]

Page 3: Aplicatii Ec in Visual Basic

UNIVERSITATEA SPIRU HARET

Doina FUSARU Zenovic GHERASIM Maria ANDRONIE

Adela BÂRA Petrişor STROE

APLICAŢII ECONOMICE ÎN VISUAL BASIC ŞI ACCESS

Ediţia a III-a

EDITURA FUNDAŢIEI ROMÂNIA DE MÂINE

Bucureşti, 2007

Page 4: Aplicatii Ec in Visual Basic
Page 5: Aplicatii Ec in Visual Basic

5

CUPRINS Cuvânt-înainte ………………………………………….…………………. 7

1. VISUAL BASIC ………………………………………………………. 9

Aplicaţii rezolvate ………………………………………….……………... 9

Aplicaţii propuse ………………………………………….……………… 185

2. ACCESS ………………………………………….……………………. 189

Aplicaţii rezolvate ………………………………………….…………….. 189

Aplicaţii propuse ………………………………………….……………… 196

3. APLICAŢII ECONOMICE COMPLEXE ………………………….. 197

4. EXEMPLE DE TESTE GRILĂ PENTRU EXAMENUL DE LICENŢĂ 223

Bibliografie ………………………………………….…………………….. 236

Page 6: Aplicatii Ec in Visual Basic

6

Page 7: Aplicatii Ec in Visual Basic

7

CUVÂNT ÎNAINTE

Lucrarea Aplicaţii economice în Visual Basic şi Access este destinată studenţilor din învăţământul 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 iniţieze sau să-şi dezvolte abilităţile 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 urmărit atingerea următoarelor obiective: fixarea noţiunilor de bază din programare, în general, şi din programarea orientată pe obiecte (asigurată de mediul de programare Visual Basic), în special; iniţierea în folosirea sistemului de gestiune a bazelor de date Microsoft Access, ca bază pentru continuarea de către studenţi a pregătirii în informatică, din anii de studii următori, prin cursurile de Proiectarea sistemelor informatice, Sisteme expert şi Audit informatic; cuprinderea unui număr cât mai diversificat de aplicaţii economice complementare cursurilor economice. Cursul de faţă conţine capitole separate destinate aplicaţiilor economice simple în Visual Basic şi Access, precum şi un capitol pentru aplicaţii economice complexe. Majoritatea aplicaţiilor au detaliate algoritmul de calcul, schema logică, codul, formularul asociat, datele de intrare şi rezultatele obţinute, toate acestea constituind modele pentru întocmirea, de către studenţi, a proiectului prevăzut ca obligatoriu în programa analitică a cursului. Au fost avute cu prioritate în vedere structurile de date, obiectele, structurile de control, instrucţiunile de intrare/ieşire, procedurile de bază, unităţile standard, elementele specifice ale mediului integrat de dezvoltare Visual Basic. Toate acestea sunt utile atât pentru însuşirea bazelor acestui limbaj de programare, cât şi pentru folosirea ulterioară, cu particularităţile existente, în cadrul sistemului de gestiune a bazelor de date Microsoft Access. Sunt prezentate şi câteva elemente de bază ale limbajului SQL.

Prin întregul său conţinut, lucrarea este utilă şi pentru pregătirea examenului de licenţă, motiv pentru care, în finalul acesteia, au fost cuprinse şi câteva exemple de teste-grilă.

Autorii, 2007

Page 8: Aplicatii Ec in Visual Basic

8

Page 9: Aplicatii Ec in Visual Basic

9

1. VISUAL BASIC APLICAŢII REZOLVATE

Aplicaţia 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 inscripţionează Demarare program; un buton care dispune de interfaţa Parasire program. Se introduc de la tastatură următoarele date: denumire societate; veniturile obţinute ş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ă (1.1) 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 (1.2) Impozit pe dividende = 10 % * Profit repartizat pentru consum Dividende = Profit repartizat pentru consum – Impozit pe dividende

Se afişează prin casetă de mesaj: Profit brut; Profit Impozabil; Impozit pe profit; Profit net; Profit repartizat pentru consum; Dividende acordate. Se afişează în formular toate informaţiile care au fost vizualizate prin casetă de mesaj. Schema logică aferentă acestui exemplu este prezentată în fig.1.1.

Page 10: Aplicatii Ec in Visual Basic

10

Fig.1.1. Schema logică pentru aplicaţia 1.1

Page 11: Aplicatii Ec in Visual Basic

11

Date de intrare Den_soc String Ven Variabil Che Variabil Calcule Prof_brut=Ven-Che Fond_dezv=Prof_brut*5% Prof_impoz=Prof_brut-Fond_dezv Impoz=Prof_impoz*38% Prof_net=Prof_impoz-Impoz Rep_dez=Prof_brut*50% Rep_cons=Prof_net-Rep_dez Divid=Rep_cons-(Rep_cons*10%) Date de ieşire Prof_net Prof_brut Prof_impoz Impoz Divid

Secvenţa de instrucţiuni în Visual Basic care determină rezolvarea cerinţelor

din enunţ este următoarea:

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

Page 12: Aplicatii Ec in Visual Basic

12

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 execuţiei formularului Calcul profit şi dividende este prezentat în

fig.1.2.

Fig.1.2. Rezultatul execuţiei formularului Calcul profit şi dividende

Page 13: Aplicatii Ec in Visual Basic

13

Aplicaţia 1.2

Casierul unei bănci trebuie să elibereze unei persoane suma suma (exprimată în lei). Să se determine numărul 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 mulţime (m) cu 6 elemente, iar numărul de bancnote ce trebuie plătit de casier în mulţimea (nr_m) tot cu 6 elemente.

Se împarte suma iniţială de plată (suma) la primul tip de bancnotă (m(1)). Restul de plată (suma_curenta) se va împărţi succesiv la fiecare tip de bancnotă (m(i)) (relaţiile (1.3), (1.4)). Se foloseşte „ \” deoarece este necesară obţinerea separată a câtului ş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 afişare a numărului de bancnote (cmdPlata) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmPlata

Caption: PLATA SUMEI -

Buton de comandă (Command Button) Name: cmdPlata Caption: Plata

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

Click

Caseta de text (Text Box) Name: txtSuma Etichete (Labels) Caption: Suma de plata Casete de text (Text Box) -6 Name: txtX Etichete (Labels) - 6 Caption: Bancnote de... lei

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 mulţimea tipurilor de bancnote (m) se completează cu valorile acestora (500.000 lei, 100.000 lei, 50.000 lei, 10.000 lei 2.000 lei). Iniţial, numărul de bancnote din fiecare tip este egal cu 0 (nr_m(i)=0).

Pentru calculul şi afişarea rezultatelor în casete-text se foloseşte o structură de control repetitivă de tipul For … Next.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.3.

Page 14: Aplicatii Ec in Visual Basic

14

Fig. 1.3. Schema logică pentru rezolvarea aplicaţiei 1.2

Page 15: Aplicatii Ec in Visual Basic

15

Procedurile cmdPlata_Click() şi cmdIesire_Click() sunt următoarele:

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 obţinerea rezultatelor din fig. 1.4 este: Suma=1956540. Algoritmul de calcul poate fi modificat astfel, încât numărul tipurilor de bacnote să fie variabil (se propune ca exerciţiu).

Page 16: Aplicatii Ec in Visual Basic

16

Fig. 1.4. Situaţia de ieşire pentru aplicaţia 1.2

Aplicaţia 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 – preţul. Secvenţa de program se referă la calculul valorii (valoare) pentru fiecare produs şi afişarea 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 For…Next, dacă valoarea calculată (cant*pret) este inferioară numărului 5.500.000. În acest caz, se afişează pe suprafaţa 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 ieşire este valoarea.

Schema logică este prezentată în fig.1.5.

Page 17: Aplicatii Ec in Visual Basic

17

Fig.1.5. Schema logică pentru aplicaţia 1.3

NU

DA

Page 18: Aplicatii Ec in Visual Basic

18

Î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 rulării aplicaţiei sunt prezentate în fig.1.6.

Fig.1.6 Situaţia de ieşire pentru aplicaţia 1.3

Page 19: Aplicatii Ec in Visual Basic

19

Aplicaţia 1.4

Să se stabilească categoria de vârstă (copil, adolescent, tânăr, adult, bătrân) a unui cetăţean, ştiind data naşterii şi data curentă.

Datele de intrare sunt nume, prenume şi data_n.

Algoritm de calcul

Modul de lucru al programului este următorul: pentru fiecare persoană căreia se doreşte să i se determine categoria de vârstă se acţionează butonul cmdCalcul. Codul asociat evenimentului clic al acestui buton determină introducerea datelor, calcularea categoriei şi incrementarea cu 1 a variabilei care ţine evidenţa totalului de persoane aflate în categoria respectivă (nc – număr copii, na – număr adolescenţi, nt – număr tineri, nad – număr adulţi, nb – număr bătrâni). Deoarece interesează ca între două apeluri ale procedurii Private Sub cmdCalcul_Click() variabilele nc, na, nt, nad, nb să-şi păstreze valorile, acestea se declară cu Static în loc de Dim.

Procedura Private Sub cmdStatistica_Click() (care se execută la acţionarea butonului cu Caption Statistică) calculează procentul de persoane pentru fiecare categorie de vârstă, pe baza valorilor luate de variabilele nc1, na1, nt1, nad1, nb1. Aceste variabile sunt declarate în secţiunea General Declarations, deci pot fi utilizate în orice modul al aplicaţiei, spre deosebire de variabilele ale căror valori le preiau la sfârşitul 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 vârsta în zile a fiecărei persoane ca diferenţă între data curentă, returnată de funcţia Date, şi data naşterii, introdusă în variabila data_n:

varsta = Date – data_n (1.5)

Vârsta în ani se obţine prin împărţirea vârstei calculate ca număr de zile la 365 (neglijăm anii bisecţi):

varsta = varsta / 365. (1.6)

Instrucţiunea Select Case care urmează selectează în funcţie de variabila vârstă categoria fiecărei persoane; apoi, se incrementează cu 1 una dintre variabilele nc, na, nt, nad, nb, iar apoi se afişează. Î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.

Următorul cod de program măreşte suprafaţa formularului, la fiecare acţionare a butonului cmdCalcul, până în momentul în care acesta depăşeşte 10.000: If Form1.Height > 10.000 Then Exit Sub Form1.Height = Form1.Height + 250 ‘formularul se măreşte î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 – înălţimea formularului, iar cmdCalcul.Top – distanţa între colţul din stânga sus al formularului şi colţul din stânga sus al butonului cmdCalcul.

Schema logică e corespunzătoare procedurii Private Sub cmdCalcul_Click() este prezentată în fig.1.7.

Page 20: Aplicatii Ec in Visual Basic

20

Fig. 1.7. Schema logică pentru aplicaţia 1.4.

Page 21: Aplicatii Ec in Visual Basic

21

Procedurile Private Sub cmdCalcul_Click(), Private Sub cmdStatistica_Click(), Private Sub cmdExit_Click() şi secţiunea 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

Page 22: Aplicatii Ec in Visual Basic

22

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 rulării aplicaţiei sunt prezentate în fig.1.8. şi 1.9.

Fig.1.8. Situaţia de ieşire 1 pentru aplicaţia 1.4

Page 23: Aplicatii Ec in Visual Basic

23

Fig.1.9. Situaţia de ieşire 2 pentru aplicaţia 1.4

Aplicaţia 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 obţine

suma în valută (suma_valuta) conform relaţiei (1.7).

suma_valuta = suma_lei / curs (1.7)

Pentru conversia unei sume exprimate în valută (suma_valuta) şi obţinerea sumei corespunzătoare î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 afişare a sumei în valută (cmdConversie) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul urmator:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmConversie

Caption: CURS VALUTAR -

Buton de comandă (Command Button) Name: cmdConversie Caption: Conversie

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

Click

Casetă de text (Text Box) Name: txtSL Etichete (Labels) Caption: Suma in lei Casetă de text (Text Box) Name: txtSV Etichete (Labels) Caption: Suma in valuta Casetă de text (Text Box) Name: txtCurs Etichete (Labels) Caption: Curs valutar Listă derulantă (List Box) Name: cmbValuta

List: Dolar, EURO... Text: Valuta

Buton de opţiune (Option Button) Name: optLV Buton de opţiune (Option Button) Name: optVL

Page 24: Aplicatii Ec in Visual Basic

24

START

Citeşte suma_lei, curs

suma_valuta = suma_lei / curs

Afişează suma_valuta

STOP

Utilizarea listei derulante asigură afişarea 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 opţiunilor 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 aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.10.

Fig. 1.10. Schema logică pentru rezolvarea aplicaţiei 1.5

Page 25: Aplicatii Ec in Visual Basic

25

Procedurile cmdConversie_Click() şi cmdIesire_Click() sunt următoarele: 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 obţinerea rezultatelor din fig. 1.11. sunt: suma_lei=250.000, curs=36.549. Se propune, ca exerciţiu, să se modifice algoritmul de calcul şi schema logică, astfel încât programul să realizeze tabelarea a zece sume convertite (număr curent – nrcrt, suma în lei – slei, suma în valută – svaluta, tip valută – tval, curs valutar – cval).

Page 26: Aplicatii Ec in Visual Basic

26

Fig. 1.11. Situaţia de ieşire pentru aplicaţia 1.5 Aplicaţia 1.6 Se cere să se realizeze un program pentru calculul cifrei de afaceri a unei

societăţi. Programul va realiza selecţia societăţilor comerciale în funcţie de cifra de afaceri şi de rata profitului, într-o primă fază, şi apoi în funcţie de rata profitului raportată la cifra de afaceri, în a doua fază. Se vor afişa doar societăţile care îndeplinesc cumulativ următoarele condiţii: 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 inscripţionează Obţinere Situaţie; un buton care dispune de interfaţa Părăsire program. Se introduc de la tastatură următoarele date: denumire societate; cifra de afaceri şi profitul obţinut. Se calculează rata profitului cu următoarea formulă:

Rata profitului = Profit / Cifra de afaceri (1.9)

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

Page 27: Aplicatii Ec in Visual Basic

27

Fig.1.12. Schema logică aferentă aplicaţiei 1.6

Page 28: Aplicatii Ec in Visual Basic

28

Declarare variabile Den_soc Şir de caractere CA Variabil Profit Variabil Rata_pr Variabil Date de intrare Den_soc String CA Variabil Profit Variabil Calcule Rata_pr=Profit/CA Date de ieşire CA Profit Rata_pr

Secvenţa de instrucţiuni în Visual Basic care determină rezolvarea cerinţelor din enunţ este următoarea:

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 societãtii") 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

Page 29: Aplicatii Ec in Visual Basic

29

Rezultatul execuţiei aplicaţiei este prezentat în figura 1.13.

Fig.1.13. Rezultatul execuţiei aplicaţiei 1.6

Aplicaţia 1.7

Să se realizeze selecţia societăţilor comerciale (denumire) în funcţie de cifra de afaceri, CA (>2 miliarde) şi de rata profitului, rata_p (>45%).

Algoritm de calcul

Programul acceptă ca date de intrare denumirea societăţii 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 depăşeşte două miliarde, societatea este considerată corespunzătoare, iar datele respective sunt memorate în "D:\coresp.txt", fişier deschis cu numărul 1 la încărcarea formularului (evenimentul Form_Load); altfel, datele sunt memorate în fişierul deschis cu numărul 2, adică "D:\nucoresp.txt".

Interfaţa aplicaţiei (formularul) cuprinde, pe lângă controalele deja menţionate, şi un control de tip RichTextBox în care este încărcat unul dintre cele două fişiere (reprezentând societăţile care corespund, respectiv pe cele care nu corespund), după cum este acţionat butonul de comandă cmdDa (Caption: Societăţi care corspund criteriului) sau cmdNu (Caption: Societăţi care NU corespund criteriului), aşa cum se prezintă în fig.1.14.

De exemplu, butonul cmdDa are asociat următorul 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

Page 30: Aplicatii Ec in Visual Basic

30

Pentru afişarea conţinutului unui fişier într-un control de tip RichTextBox este necesar ca fişierul să fie închis (Close #1). Proprietatea FileName se referă la un şir de caractere care indică numele şi calea către fişierul dorit. După afişarea conţinutului, fişierul poate fi redeschis, pentru adăugarea de noi societăţi comerciale.

Codul asociat evenimentului Load al formularului se execută primul (Private Sub Form_Load). Pentru includerea controlului RichTextBox în bara de instrumente se execută următoarea succesiune de comenzi: meniul Project/Components (la fel ca la aplicaţia 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

Page 31: Aplicatii Ec in Visual Basic

31

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 următoare 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 exerciţiu, să se modifice algoritmul de calcul, astfel încât programul să realizeze selecţia societăţilor comerciale în funcţie de cifra de afaceri (CA) şi de localitatea unde îşi are sediul societatea comercială (localitate).

Page 32: Aplicatii Ec in Visual Basic

32

Fig.1.14. Situaţia de ieşire pentru aplicaţia 1.7

Aplicaţia 1.8 Să se calculeze penalităţile pentru plata furnizorilor la o societate

comercială şi suma de plată pe factura majorată, ştiind valoarea iniţială a facturilor şi numărul zilelor de întârziere pentru fiecare dintre facturi. Penalităţile se calculează astfel: până la 15 zile întârziere – 5%, între 15 şi 30 de zile – 8%, peste 30 de zile – 10%.

Algoritm de calcul

Informaţiile despre facturi se vor grupa în mulţimi cu n elemente, în care n reprezintă numărul de facturi:

− numărul şi seria facturii: nr_serie(i); − numărul de zile: nr_Zile(i); − valoarea facturii: Valf(i); − suma penalităţilor pentru fiecare factură: SumaP(i).

Pentru adăugarea de date se acţionează acest buton care ”descuie” casetele de text (le face editabile)

Page 33: Aplicatii Ec in Visual Basic

33

Formula de calcul a penalităţilor pentru fiecare factură (SumaP(i)), în

funcţie de numărul 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 funcţie de numărul de zile de

întârziere. Se va calcula suma totală de plată (SumaPTotal) pentru toate facturile.

Iniţial această sumă va avea valoarea 0, la care se vor adăuga penalităţile 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 afişare a penalităţilor (cmdPenalitati) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmPenalitati Caption: PENALITATI PENTRU PLATA FACTURILOR

-

Buton de comandă (Command Button)

Name: cmdPenalitati Caption: Calculeaza Penalitati

Click

Buton de comandă (Command Button)

Name: cmdIesire Caption: Iesire

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 afişarea rezultatelor în formular, se foloseşte o structură de control repetitivă de tipul For…Next, în care n reprezinată numărul de facturi. Pentru selectarea valorii procentului aplicat în funcţie de numărul de zile, se utilizează o structură alternativă de tipul Select Case.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig.1.15.

Page 34: Aplicatii Ec in Visual Basic

34

Fig. 1.15. Schema logică pentru rezolvarea aplicaţiei 1.8

Page 35: Aplicatii Ec in Visual Basic

35

Procedurile cmdPenalitati_Click() şi cmdIesire_Click() sunt următoarele: 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 obţinerea 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

Page 36: Aplicatii Ec in Visual Basic

36

Fig.1.16. Situaţia de ieşire

pentru aplicaţia 1.8

Aplicaţia 1.9

Să se afişeze elementul maxim şi elementul minim dintr-o mulţime ce reprezintă numărul de kilometri parcurşi zilnic de un autoturism.

Algoritm de calcul

Elementul maxim (max) al unei mulţimi se determină astfel: Iniţial, se consideră maximul egal cu primul element al mulţimii:

max=element(1) (1.12)

Se parcurge mulţimea începând cu al doilea element, comparând maximul cu fiecare element. Dacă elementul curent este mai mare decât maximul atunci acesta va lua valoarea elementului. Se utilizează relaţiile:

Dacă element (i) > max, atunci max= element(i) (1.13)

Elementul minim (min) al mulţimii se determină în mod asemănător, conform relaţiilor:

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 ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmMaxMin

Caption: MAXIM SI MINIM -

Buton de comandă (Command Button)

Name: cmdMaxMin Caption: Calculează Maximul şi Minimul

Click

Buton de comandă (Command Button)

Name: cmdIesire Caption: Iesire

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 mulţimii se foloseşte o structură de control repetitivă de tipul For …Next, în care n reprezinată numărul de elemente. Pentru comparearea elementelor cu max, respectiv min, se utilizează o structură alternativă de tipul If …Then … Else.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig.1.17.

Page 37: Aplicatii Ec in Visual Basic

37

Fig. 1.17. Schema logică pentru rezolvarea aplicaţiei 1.9

Page 38: Aplicatii Ec in Visual Basic

38

Procedurile cmdMaxMin_Click() şi cmdIesire_Click() sunt următoarele:

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 obţinute sunt prezentate în fig.1.18.

Fig. 1.18. Situaţia de ieşire pentru aplicaţia 1.9

Aplicaţia 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.

Numărul de salariaţi al fiecărei secţii este de 10.

Rezolvare

Schema logică aferentă acestui exemplu este prezentată în figura 1.19.

Page 39: Aplicatii Ec in Visual Basic

39

Fig.1.19. Schema logică aferentă aplicaţiei 1.10

Page 40: Aplicatii Ec in Visual Basic

40

Secvenţa de instrucţiuni în Visual Basic care determină rezolvarea cerinţelor din enunţ este următoarea:

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 execuţiei formularului „Calcul salariu şi abateri” este prezentat în

figura 1.20.

Page 41: Aplicatii Ec in Visual Basic

41

Fig.1.20. Rezultatul execuţiei formularului „Calcul salariu şi abateri” din aplicaţia 1.10

Aplicaţia 1.11

O societate comercială vinde un număr de 20 produse zilnic, timp de 5 zile. Se doreşte aflarea mediei valorii vânzărilor 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 Do…Loop Until, fiind deci condiţionată posterior, ceea ce înseamnă că se execută cel puţin o dată. Această structură este folosită pentru a ţine evidenţa zilelor. Cea de-a doua structură repetitivă este de tipul For…Next şi se referă la cele 20 de produse vândute zilnic.

Variabila TOTP conţine totalul valoric al produselor vândute într-o zi:

TOTP = TOTP + VALP (1.15) iar variabila TOTALM este media valorilor vânzărilor pe zi, indiferent de produs.

TOTALM=TOTP/j, unde j=20 de produse (1.16)

În acest caz, VALP nu mai constituie dată de ieşire (nu mai este calculată pe baza cantităţii şi preţului), ci este dată de intrare.

Schema logică este prezentată în fig.1.21.

Page 42: Aplicatii Ec in Visual Basic

42

Fig.1.21. Schema logică pentru aplicaţia 1.21

Page 43: Aplicatii Ec in Visual Basic

43

Prelucrarea se execută ca urmare a acţionării unui clic pe butonul cmdCalcul (Caption – „Vânzări”)

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

Situaţia de ieşire este prezentată în fig.1.22.

Fig.1.22. Situaţia de ieşire pentru aplicaţia 1.11

Page 44: Aplicatii Ec in Visual Basic

44

Aplicaţia 1.12

Să se întocmească statul de plată a salariului net (sal_net) pentru angajaţii unei societăţi 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 fiecărui 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 reţinerile intermediare: P1 = L1 * 0.18 P2 = P1 + (L2 – L1) * 0.23 (1.17) P3 = P1 + P2 + (L3 – L2) * 0.34

Informaţiile despre fiecare salariat se vor grupa în mulţimi cu n elemente, în care n reprezinată numărul de salariaţi:

− 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 funcţie 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 afişare a penalităţilor (cmdSalarii) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmSalarii

Caption: SALARII -

Buton de comandă (Command Button) Name: cmdSalarii Caption: Salarii

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 afişarea rezultatelor în formular se foloseşte o structură de control repetitivă de tipul For Next, în care n reprezinată numărul de salariaţi. Pentru selectarea valorii impozitului aplicat în funcţie de salariul brut, se va utiliza o structură alternativă de tipul Select Case.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig.1.23.

Page 45: Aplicatii Ec in Visual Basic

45

Fig. 1.23. Schema logică pentru rezolvarea aplicaţiei 1.12

Page 46: Aplicatii Ec in Visual Basic

46

Procedurile cmdSalarii_Click() şi cmdIesire_Click() sunt următoarele:

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 obţinerea 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

Page 47: Aplicatii Ec in Visual Basic

47

Fig. 1.24. Situaţia de ieşire pentru aplicaţia 1.12

Aplicaţia 1.13

Să se sorteze crescător elementele unei mulţimi ce reprezintă media încasărilor săptămânale (med) ale unei societăţi comerciale.

Algoritm de calcul

Pentru ordonarea valorilor mulţimii, în ordine crescătoare, se procedează astfel: se compară primele două elemente ale mulţimii, şi, dacă nu sunt în ordine crescătoare, atunci se inversează poziţiile celor două. Se compară următoarele două elemente învecinate şi se procedează ca mai sus, până la parcurgerea întregii mulţimi. Algoritmul se reia de la început, până se constată că nu mai sunt necesare schimbări între elementele mulţimii. Pentru monitorizarea schimbărilor intervenite în mulţime se utilizează o variabilă booleană (cu valori true/false) – schimb. Dacă între elementele mulţimii s-au produs schimbări, atunci schimb=false, dacă nu există modificări, atunci schimb=true, deci mulţimea este sortată. Algoritmul se reia atât timp cât schimbe =false. Pentru realizarea permutărilor elementelor se utilizează o variabilă de transfer (t) ce reţine 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 ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmSortare

Caption: SORTARE -

Buton de comandă (Command Button) Name: cmdSortare Caption: Sortare

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 mulţimii se foloseşte o structură de control repetitivă de tipul For Next, în care n reprezinată numărul de elemente. Deoarece algoritmul se reia atât timp cât se produc schimbări între elementele mulţimii, se utilizează o structură repetitivă condiţionată anterior de tipul: Do While, în care condiţia este schimb=false.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig.1.25.

Page 48: Aplicatii Ec in Visual Basic

48

Fig. 1.25. Schema logică pentru rezolvarea aplicaţiei 1.13

Page 49: Aplicatii Ec in Visual Basic

49

Procedurile cmdSortare _Click() şi cmdIesire _Click() sunt

următoarele: 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 şi rezultatele obţinute sunt prezentate în fig.1.26.

Page 50: Aplicatii Ec in Visual Basic

50

Fig. 1.26. Situaţia de ieşire pentru aplicaţia 1.13 Aplicaţia 1.14 Să se întocmească un program pentru calculul dobânzii aferente unui depozit

bancar în funcţie de termenul de depunere. Varianta 1 de rezolvare: Datele de intrare sunt suma şi termen (termenul de depunere), iar ca rezultat

se obţine dobânda. Se foloseşte 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 fără contor condiţionată anterior. Numărul tipurilor de depozite bancare este limitat la patru. Procedura ,,Introducere” asigură introducerea datelor de intrare, iar procedura

,,Calcul” realizează calculul sumei actuale în funcţie de tipul de depozit.

Page 51: Aplicatii Ec in Visual Basic

51

Fig.1.27. Schema logică aferentă „Exemplu calcul dobândă cuvenită”

din aplicaţia 1.14 (varianta 1)

Page 52: Aplicatii Ec in Visual Basic

52

Secvenţa de instrucţiuni în Visual Basic care determină rezolvarea cerinţelor din enunţ este următoarea:

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; 3-

depozit 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

Page 53: Aplicatii Ec in Visual Basic

53

Varianta 2 de rezolvare

Algoritm de calcul

Prelucrarea se condiţionează î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ă conţină

numai caractere numerice; pentru verificare se foloseşte funcţia IsNumeric, care returnează True daca argumentul este un număr şi False în caz contrar. Celelalte casete de text trebuie doar să fie completate (să nu conţină şirul vid).

Instrucţiunea Select Case execută diverse acţiuni în funcţie de valoarea luată de variabila termen: dacă termen ia valoare 1 se aplică un procent de dobândă de 21%, dacă este 2, se aplică 22% etc. Instrucţiunea Select Case poate fi înlocuită prin If…Then…Else.

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 afişarea sau inhibarea afişării la execuţie a controalelor respective. În cazul de faţă, în timpul proiectării proprietatea Visible a fost setată la valoarea logică FALSE, deci eticheta lblDobanda şi caseta de text txtDobanda nu sunt vizibile pe suprafaţa formularului decât după acţionarea butonului cmdCalcul, pe evenimentul său clic fiind ataşate, printre altele, şi liniile de mai sus (A),(B).

Etichete lblDobanda şi caseta de text txtDobanda sunt folosite pentru afişarea rezultatului, adică a sumei dobânzii. Proprietatea.Text a controlului TextBox este implicită: dacă nu se completează nici o proprietate, se consideră că a fost referită proprietatea text, deci linia următoare este echivalentă cu (C): TxtDobanda.Text = dob

Schema logică a aplicaţiei 1.14 (varianta 2) este prezentată în fig.1.28.

Page 54: Aplicatii Ec in Visual Basic

54

Fig.1.28. Schema logică pentru aplicaţia 1.14 (varianta 2)

Page 55: Aplicatii Ec in Visual Basic

55

Primele trei linii de cod de mai jos aparţin secţiunii 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 Situaţia de ieşire pentru aplicaţia 1.14 (varianta 2 de rezolvare) este prezentată în fig.1.29.

Se propune, ca exerciţiu, să se modifice algoritmul de calcul, astfel încât nivelul dobânzilor acordate pentru depozitele constituite să fie variabil (să fie introdus ca dată de intrare).

Page 56: Aplicatii Ec in Visual Basic

56

Fig.1.29. Situaţia de ieşire pentru aplicaţia 1.14 (varianta 2) Aplicaţia 1.15

Programul urmăreşte 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ă For…Next care testează condiţia C, unde C reprezintă situaţia „Da” sau „Nu” pentru existenţa TVA-ului printr-o structură alternativă If...Then...Else...End If. Rezultatul prelucrării este afişiat într-un fişier TVA.DAT. Schema logică aferentă acestui exemplu este prezentată în fig.1.30. Se observă că numărul de produse N este interactiv şi este verificat în permanenţă pentru situaţia 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).

Page 57: Aplicatii Ec in Visual Basic

57

Fig.1.30. Schema logică aferentă „Stabilire TVA” din aplicaţia 1.15

Page 58: Aplicatii Ec in Visual Basic

58

Declarare variabile Den_prod Variabil Pret Variabil Cant Variabil C Şir de caractere Val Variabil I Număr întreg N Număr întreg TVA Variabil Data Ora de introducere Date de intrare N Număr Den_prod Denumire produs C Caz pentru Tva Da/Nu Pret Pret Cant Cantitate Calcule Val = Cant * Pret Tva = Val * 19 % Val = Val + Tva Date de ieşire Den – denumire Pret – pretul produsului Cant – cantitate Val – valoare

Secvenţa de instrucţiuni în Visual Basic care determină rezolvarea cerinţelor

din enunţ este următoarea:

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)

Page 59: Aplicatii Ec in Visual Basic

59

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 execuţiei formularului „Stabilire TVA” este prezentat în figura 1.31.

Fig.1.31. Rezultatul execuţiei formularului Stabilire TVA din aplicaţia 1.15

Page 60: Aplicatii Ec in Visual Basic

60

Aplicaţia 1.16

Pentru o grupă formată din 20 de studenţi să se calculeze media pe fiecare student în parte şi media pe grupă, cunoscând: 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 studenţi ai grupei se introduc 3 note (NOTA1, NOTA2 şi NOTA3) pe baza cărora se calculează media care este imediat afişată. Media tuturor studenţilor se însumează în variabila MEDIEGR care împărţită la 20 reprezintă media grupei.

Secvenţa: 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 decât valori între 1 şi 10 inclusiv pentru variabilele NOTA1, NOTA2 şi NOTA3; instrucţiunile din interiorul buclei se execută cel puţin o dată, datorită condiţionării posterioare.

Al doilea argument al instrucţiunii InputBox afişează 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 număr de 4 studenţi. Schema logică este prezentată în fig.1.32.

Se propune, ca exerciţiu, modificarea algoritmului de calcul astfel încât procentul de TVA să fie introdus de la tastatură.

Page 61: Aplicatii Ec in Visual Basic

61

Fig.1.32. Schema logică pentru aplicaţia 1.16

Page 62: Aplicatii Ec in Visual Basic

62

Procedurile Private Sub cmdCalcul_Click() şi Private Sub

cmdExit_Click() sunt prezentate în continuare: 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ă situaţia de ieşire pentru 4 studenţi (în loc de 20).

Page 63: Aplicatii Ec in Visual Basic

63

Fig.1.33. Situaţia de ieşire pentru aplicaţia 1.16

Aplicaţia 1.17 Să se întocmească statul de plată a salariului net (sal_net) pentru angajaţii

unei societăţi comerciale (fiecare angajat se identifică prin marca), ştiind numărul 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 Informaţiile despre fiecare salariat se vor grupa în mulţimi cu n elemente,

în care n reprezinată numărul de salariaţi: − marca: marca(i); − numărul de ore lucrate: nr_ore(i); − salariul brut: SB(i); − salariul net: SN(i).

Se va calcula salariul brut al fiecărui angajat:

SB(i) = nr_ore(i) * Sal_tarif (1.20) Pentru stabilirea impozitului fiecărui angajat se va utiliza o grilă de

salarizare în trei trepte cu limitele L1, L2, L3, astfel:

Page 64: Aplicatii Ec in Visual Basic

64

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 reţinerile 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 funcţie 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 afişare a panalităţilor (cmdSalarii) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmSalarii Caption: SALARII

-

Buton de comandă (Command Button) Name: cmdSalarii Caption: Salarii

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 afişarea rezultatelor în formular se foloseşte o structură de control repetitivă de tipul For…Next, în care n reprezinată numărul de salariaţi. Pentru selectarea valorii impozitului aplicat în funcţie de salariul brut, se va utiliza o structură alternativă de tipul Select Case.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig.1.34.

Page 65: Aplicatii Ec in Visual Basic

65

Fig. 1.34. Schema logică pentru rezolvarea aplicaţiei 1.17

Page 66: Aplicatii Ec in Visual Basic

66

Procedurile cmdSalarii_Click() şi cmdIesire_Click() sunt următoarele:

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

Page 67: Aplicatii Ec in Visual Basic

67

Datele de intrare utilizate pentru obţinerea 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. Situaţia de ieşire pentru aplicaţia 1.17

Aplicaţia 1.18

Pentru o listă cu 10 produse la care se aplică tva, să se calculeze şi să se afişeze, pentru fiecare produs, taxa pe valoarea adăugată – TVA şi valoarea cu tva (ValCuTVA), ştiind: codul produsului – codpr, denumirea produsului – denpr, cantitatea – cant şi preţul unitar – pret.

Algoritm de calcul

Soluţia aleasă pentru prezentarea rezultatelor aplicaţiei foloseşte fişierele. Open "c:\tva.dat" For Append As #1 deschide fişierul tva.dat în cazul în care există; dacă nu există îl creează. Fişierul este primul deschis (#1). În el vor fi adăugate cu ajutorul comenzii Print #1 valorile variabilelor dorite.

Print #1, codp; " "; denp; " "; cant; " "; pret; " "; TVA; " "; ValCuTVA

Este de menţionat faptul că în cazul stocării datelor în fişiere este posibilă folosirea instrucţiuni Tab pentru organizarea pe coloane.

Schema logică este prezentată în fig.1.36.

Page 68: Aplicatii Ec in Visual Basic

68

Fig.1.36. Schema logică pentru aplicaţia 1.18

Page 69: Aplicatii Ec in Visual Basic

69

Interfaţa aplicaţiei 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. Interfaţa aplicaţiei 1.18 Rezultatele rulării programului sunt prezentate în fig.1.38.

Page 70: Aplicatii Ec in Visual Basic

70

Fig.1.38. Situaţia de ieşire (fişierul „tva.dat”) pentru aplicaţia 1.18

Aplicaţia 1.19

Să se calculeze profitul sau pierderea din vânzări pentru un produs la care se cunosc costul de producţie şi preţul de vânzare.

Algoritm de calcul

Se completează casetele de text corespunzătoare costului de producţie respectiv preţului de vânzare. Daca preţul este superior costului se determină un profit, în caz contrar se calculează pierderea. Iniţial, eticheta şi caseta de text utilizate pentru afişarea profitului/pierderii nu sunt vizibile (au proprietăţile Visible setate pe False). Afişarea lor se realizează în momentul acţionarii tastei F1 sau a alegerii opţiunii Calcul din meniul Afisare.

Realizarea meniului ataşat aplicaţiei s-a realizat cu ajutorul Editorului de meniuri (MenuEditor). Pentru lansarea Editorului de meniuri se acţionează clic dreapta pe suprafaţa formularului şi se alege MenuEditor. Pe ecran va apărea fereastra din fig.1.39.

Page 71: Aplicatii Ec in Visual Basic

71

Fig.1.39. Editorul de meniuri

Name: mnuCalcul (submeniu al meniului Aplicaţie, ca şi mnuIeşire)

Name: mnuIesire

Săgeţi pentru deplasarea între elementele de meniu şi retrogradarea ca submeniuri sau avansarea ca meniuri principale

Combo pentru stabilirea unei „taste scurtătură” către opţiunile aflate pe ultimele ramificaţii ale meniurilor

Page 72: Aplicatii Ec in Visual Basic

72

Fig.1.40. Schema logică generală pentru aplicaţia 1.19

START

Citeşte txtCost, txtPret

Page 73: Aplicatii Ec in Visual Basic

73

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 1920 Visible False WhatsThisHelpID 0 Width 1215

Fig.1.41. Interfaţa aplicaţiei 1.19 în modul de proiectare (Design)

Page 74: Aplicatii Ec in Visual Basic

74

Rezultatele rulării aplicaţiei sunt prezentate în fig.1.42.

Fig. 1.42. Situaţia de ieşire pentru aplicaţia 1.19

Aplicaţia 1.20

Să se întocmească un program pentru stabilirea punctului de echilibru (q_e) la o societate comercială, ştiind vânzările din produsul 1 (v1), vânzările din produsul 2 (v2), costurile fixe (c_f), costurile cu manopera (c_man), costurile cu materiale (c_mat) şi numărul 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 afişare a punctului de echilibru (cmdQE) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmQE

Caption: PUNCTUL DE ECHILIBRU

-

Buton de comandă (Command Button) Name: cmdQE Caption: Punctul de echilibru

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

Click

Casetă de text (Text Box) Name: txtV1 Etichete (Labels) Caption: Vanzari 1 Casete de text (Text Box) Name: txtV2 Etichete (Labels) Caption: Vanzari 2 Casetă de text (Text Box) Name: txtCF Etichete (Labels) Caption: Costuri Fixe Casete de text (Text Box) Name: txtCMan Etichete (Labels) Caption: Costuri Manopera Caseta de text (Text Box) Name: txtCMat Etichete (Labels) Caption: Costuri Materiale Casete de text (Text Box) Name: txtQE Etichete (Labels) Caption: Punctul De Echilibru

Page 75: Aplicatii Ec in Visual Basic

75

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 aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig.1.43.

Fig.1.43 Schema logică pentru rezolvarea aplicaţiei 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

Page 76: Aplicatii Ec in Visual Basic

76

‘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 obţinerea 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. Situaţia de ieşire pentru aplicaţia 1.20

Page 77: Aplicatii Ec in Visual Basic

77

Aplicaţia 1.21

Să se calculeze valoarea totală (val_tot) a 8 produse perisabile aflate într-un depozit, după o perioadă de depozitare, cunoscând coeficienţii 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 prelucrări pe care le efectuează programul sunt prezentate în secvenţa următoare: 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

Pentru stocarea datelor calculate se vor utiliza variabile de fişiere, cu

menţiunea că vor fi păstrate numai valorile referitoare la ultima execuţie a programului, deoarece fişierul perisabil.txt este şters şi recreat de fiecare dată când se acţionează clic pe meniul mnuCalcul (Caption: Calcul Valoare). Ştergerea şi recreerea se fac în liniile următoare: Kill "c:\perisabil.txt" Open "c:\perisabil.txt" For Append As #1

În scopul consultării mai rapide a rezultatelor execuţiei programului s-a adăugat la proiect formularul FrmShow care este generat vizibil după terminarea prelucrărilor procedurii mnuCalcul_Click(), în linia FrmShow.Show. Acest

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.

Page 78: Aplicatii Ec in Visual Basic

78

formular conţine un control de tip RichTextBox cu ajutorul căruia se poate vizualiza conţinutul unui fişier de tip.txt sau.dat. Deoarece acest tip de control nu este iniţial în bara de instrumente (ToolBox, unde sunt prezente doar controalele elementare cele mai utilizate), este necesară adăugarea 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 opţiune 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

Aşa după cum se observă şi în figură, se bifează controlul de tip RichTextBox şi se acţionează butonul Apply, rezultatul constând în apariţia pe bara de instrumente a controlului respectiv (fig.1.46).

Page 79: Aplicatii Ec in Visual Basic

79

Fig.1.46. Bara de instrumente (ToolBox)

Din acest moment controlul poate fi folosit ca oricare altul, prin dispunerea

pe suprafaţa formularului şi stabilirea proprietăţilor sale. Astfel, la proprietatea FileName se completează „C:\perisabil.txt”, în cazul în care se doreşte ca fişierul să fie amplasat direct pe partiţia C a harddiskului. „Caseta de text extinsă” se configurează din fereastra Property Pages (se execută clic dreapta cu mouse-ul pe suprafaţa casetei – Properties).

Aplicaţia foloseşte 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 decât dacă formularul de tip MDI este deschis; de asemenea, închiderea formularului MDI implică închiderea tuturor „copiilor” săi, adică a formularelor având setată proprietatea MDIChild ca True. În general, formularele de tip MDI nu pot conţine ele însele controale, dar pot conţine meniuri care controlează deschiderea şi închiderea formularelor subordonate.

Linia On Error Resume Next dispusă la începutul codului asociat meniului mnuCalcul predă controlul următoarei instrucţiuni după cea care a conţinut eroarea. Prima execuţie a programului furnizează o eroare la întâlnirea liniei Kill "c:\perisabil.txt", deoarece fişierul repectiv nu există. On Error Resume Next predă controlul instrucţiunii următoare care creează fişierul respectiv, nesemnalizând nici o eroare.

Schema logică pentru codul asociat mnuCalcul_Click este prezentată în fig.1.47.

Controlul RichTextBox

Page 80: Aplicatii Ec in Visual Basic

80

Fig.1.47. Schema logică pentru aplicaţia 1.21

Page 81: Aplicatii Ec in Visual Basic

81

Codul asociat meniurilor aplicaţiei este următorul: 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 rulării aplicaţiei sunt prezentate în fig.1.48.

Page 82: Aplicatii Ec in Visual Basic

82

Fig.1.48. Situaţia de ieşire pentru aplicaţia 1.21

Aplicaţia 1.22

Să se calculeze valoarea unei facturi, ştiind numărul n de produse, preţul fiecărui produs (pret(i)) şi valoarea cheltuielilor de transport (ch_tp).

Algoritm de calcul

Informaţiile despre fiecare produs se vor grupa în mulţimi cu n elemente, în care n reprezintă numărul de produse:

− denumire produs: denp(i); − cantitatea: cant(i); − preţul: pret(i); − valoare: val(i).

Se va calcula valoarea fiecărui 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 ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmFacturi

Caption: FACTURI -

Buton de comandă (Command Button) Name: cmdFacturi Caption: Facturi

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 afişarea rezultatelor în formular se foloseşte o structură de control repetitivă de tipul For…Next, în care n reprezinată numărul de produse.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.49.

Page 83: Aplicatii Ec in Visual Basic

83

Fig. 1.49. Schema logică pentru rezolvarea aplicaţiei 1.22

Page 84: Aplicatii Ec in Visual Basic

84

Procedurile cmdFacturi_Click() şi cmdIesire_Click() sunt următoarele:

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 obţinerea 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

Page 85: Aplicatii Ec in Visual Basic

85

Fig.1.50. Situaţia de ieşire pentru aplicaţia 1.22

Aplicaţia 1.23

Să se determine suma finală (F) aflată în contul bancar al unei persoane, ştiind depunerea lunară (D), rata dobânzii lunare (I) şi numărul de luni (M).

Algoritm de calcul

Programul foloseşte o structură repetitivă de tipul For...Next pentru a adăuga în fiecare lună la suma finală depunerea acelei luni şi dobânda 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), prelucrările se execută numai în cazul în care datele de intrare au fost furnizate (au fost completate casetele de text corespunzătoare). If txtDepunere <> " " And txtDobLunara <> " " And txtNrLuni <> " "

Schema logică este prezentată în fig.1.51, iar schema logică generală în fig.1.52.

Page 86: Aplicatii Ec in Visual Basic

86

Fig.1.51. Schema logică adaptată pentru Visual Basic pentru aplicaţia 1.23

Page 87: Aplicatii Ec in Visual Basic

87

Fig.1.52. Schema logică generală pentru aplicaţia 1.23

DA

Page 88: Aplicatii Ec in Visual Basic

88

Prelucrarea se execută ca urmare a acţionării 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 rulării aplicaţiei sunt prezentate în fig. 1.53.

Fig. 1.53. Situaţia de ieşire pentru aplicaţia 1.23

Page 89: Aplicatii Ec in Visual Basic

89

Aplicaţia 1.24

Să se calculeze amortizarea lunară a 12 mijloace fixe, ştiind valoarea de inventar şi norma de amortizare.

Algoritm de calcul

Informaţiile despre cele 12 mijloace fixe sunt următoarele: − denumire mijloc fix: denm; − valoare inventar: vali; − norma de amortizare: norma; − amortizare lunară: aml.

Se va calcula amortizarea lunară în funcţie 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 afişare a valorilor (cmdAmortizare) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmAmortizare Caption: AMORTIZARE

-

Buton de comandă (Command Button) Name: cmdAmortizare Caption: Amortizare

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 afişarea rezultatelor în formular se foloseşte o structură de control repetitivă de tipul For…Next.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig.1.54.

Page 90: Aplicatii Ec in Visual Basic

90

Fig. 1.54. Schema logică pentru rezolvarea aplicaţiei 1.24

Page 91: Aplicatii Ec in Visual Basic

91

Procedurile cmdAmortizare _Click() şi cmdIesire_Click() sunt următoarele:

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 obţinute sunt prezentate în fig.1.55.

Fig.1.55. Situaţia de ieşire pentru aplicaţia 1.24

Aplicaţia 1.25

Să se calculeze profitul brut şi dividendele la un agent economic, cunoscând veniturile obţinute şi cheltuielile efectuate.

Algoritm de calcul

Interfaţa aplicaţiei nu conţine nici un buton de comandă; codul este ataşat 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, aceeaşi casetă de text (txtProfitBrut) afişează rezultatul, cu precizarea că proprietatea Caption a etichetei ataşată casetei de text se va schimba în „Pierdere”, dacă veniturile sunt inferioare cheltuielilor.

Evenimentul Change al barei de defilare orizontală se declanşează ori de câte ori se acţionează una din săgeţile controlului, refăcând toate calculele.

Schema logică este prezentată în fig.1.56.

Page 92: Aplicatii Ec in Visual Basic

92

Fig.1.56. Schema logică pentru aplicaţia 1.25

Page 93: Aplicatii Ec in Visual Basic

93

Procedura Private Sub HScroll1_Change() are următorul 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 rulării aplicaţiei sunt prezentate în fig.1.57.

Fig.1.57 Situaţia de ieşire pentru aplicaţia 1.25

Page 94: Aplicatii Ec in Visual Basic

94

Aplicaţia 1.26

Să se scrie un program pentru crearea, actualizarea şi afişarea unui fişier de tip text.

Realizarea interfeţei cu utilizatorul: Se realizează un formular cu două butoane de comandă (fig.1.59): FISIER

TEXT (Caption) pentru procedura de calcul şi afişare a sumei în valută (cmdDobanda) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmFisier Caption: FISIER TEXT

-

Buton de comandă (Command Button)

Name: cmdFisNou Caption: Fisier Nou

Click

Buton de comandă (Command Button)

Name: cmdActualizare Caption: Salvare

Click

Buton de comandă (Command Button)

Name: cmdInchide Caption: Inchidere

Click

Buton de comandă (Command Button)

Name: cmdAfisare Caption: Afisare

Click

Buton de comandă (Command Button)

Name: cmdIesire Caption: Iesire

Click

Caseta de text (Text Box) Name: txtFis

Schema logică pentru prelucrarea fişierului este prezentată în fig. 1.58.

Page 95: Aplicatii Ec in Visual Basic

95

Fig. 1.58 Schema logică pentru rezolvarea aplicaţiei 1.26

Page 96: Aplicatii Ec in Visual Basic

96

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 şi rezultatele obţinute sunt prezentate în fig. 1.59.

Page 97: Aplicatii Ec in Visual Basic

97

Fig. 1.59 Situaţia de ieşire pentru aplicaţia 1.26 Aplicaţia 1.27

Să se calculeze valoarea producţiei neterminate de la sfârşitul lunii la o secţie de producţie a unei societăţi comerciale. Se cunosc: cheltuielile şi costul comenzilor închise. Prelucrarea se face pe baza contului cheltuieli producţie de bază – contul 500. În debitul contului sunt reprezentate totalul cheltuielilor lunii, iar în creditul contului se găseşte costul comenzilor închise. Valoarea producţiei neterminate rezultă din soldul debitor.

Algoritm de calcul

Numărul de comenzi (nrcom) se va introduce de către utilizator. Pentru fiecare comandă se vor reţine următoarele informaţii: − cheltuieli: Cheltuieli; − costul comenzii: Cost.

Se va calcula totalul cheltuielilor (TCheltuieli) şi totalul costurilor (TCost) înregistrate cu comenzile:

TCheltuieli = TCheltuieli + Cheltuieli (1.29) TCost = TCost + Cost (1.30)

Page 98: Aplicatii Ec in Visual Basic

98

Valoarea producţiei 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 afişare a valorilor (cmdProductie) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmProductie Caption: PRODUCTIE NETERMINATA

-

Buton de comandă (Command Button) Name: cmdProductie Caption: Productie

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 afişarea rezultatelor în formular se foloseşte o structură de control repetitivă de tipul For … Next.

Schema logică pentru rezolvarea aplicaţiei î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.

Page 99: Aplicatii Ec in Visual Basic

99

Fig.1.60. Schema logică pentru rezolvarea aplicaţiei 1.27

Page 100: Aplicatii Ec in Visual Basic

100

Procedurile cmdProductie _Click() şi cmdIesire_Click() sunt următoarele:

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 obţinute sunt prezentate în fig. 1.61.

Page 101: Aplicatii Ec in Visual Basic

101

Fig. 1.61. Situaţia de ieşire pentru aplicaţia 1.27

Aplicaţia 1.28

Să se calculeze suma de plată a energiei electrice, cunoscând suma de plată la scadenţă (SumaInit), numărul de zile de întârziere a plăţii la scadenţă (NrZile) şi procentul de penalizare (ProcPenaliz). Dacă persoana se află la prima abatere (PrimaAbatere), penalizările se reduc la jumătate.

Algoritm de calcul

Se completează casetele de text corespunzătoare sumei de plată la scadenţa numărului de zile întârziere şi procentului de penalizare. Dacă este prima abatere, se validează caseta chkAbatere (Caption: Prima abatere); în meniu, se acţionează „Calculează” (Name: mnuCalculeaza). Crearea meniului se face astfel: clic dreapta pe suprafaţa formularului, MenuEditor ş.a.m.d. Ulterior, se ataşează cod evenimentelor click() pe elementele din meniu (de exemplu, Private Sub mnuCalculeaza_Click()).

Prelucrările sunt simple: programul conţine o instrucţiune 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 adevărat (TRUE – dacă chkAbatere a fost bifată) sau fals (FALSE – dacă nu a fost bifată). PrimaAbatere = chkAbatere

Variabila ProcPenaliz este declarată ca Single deoarece prin împărţire la doi poate lua valori neîntregi.

Schema logică pentru codul ataşat evenimentului Click() pe meniul mnuCalculeaza (Caption – Calculeaza) este prezentată în fig.1.62.

Page 102: Aplicatii Ec in Visual Basic

102

Fig.1.62. Schema logică pentru aplicaţia 1.28

Page 103: Aplicatii Ec in Visual Basic

103

Codul asociat evenimentelor Click() ale elementelor de meniu mnuCalculează, mnuIesire şi mnuAjutor este următorul:

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

Fig.1.63. Situaţia de ieşire pentru aplicaţia 1.28

Page 104: Aplicatii Ec in Visual Basic

104

Aplicaţia 1.29 Să se realizeze un program pentru analiza costurilor pe tipuri de produse.

Să se determine tipul costului în funcţie de factorul de elasticitate (e). Se cunosc: producţiă (q) în bucăţi şi costul în lei. În rezolvarea aplicaţiei, se calculează şi costul marginal al producţiei ca raport între diferenţa costurilor (dif_c) şi diferenţa producţiei (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 (1.32)

Costul marginal: cm = dif_c / dif_q Coeficientul de elasticitate: e = cm / cub

Se realizează un formular cu două butoane de comandă (fig.1.65):

ANALIZA COSTURILOR (Caption) pentru procedura de calcul şi afişare a punctului de echilibru (cmdAnaliza) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmAnaliza

Caption: ANALIZA COSTURILOR

-

Buton de comandă (Command Button) Name: cmdAnaliza Caption: Analiza

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

Click

Casetă de text (Text Box) Name: txtC Etichete (Labels) Caption: Costul Casetă de text (Text Box) Name: txtCB Etichete (Labels) Caption: Productia Casetă de text (Text Box) Name: txtQ Casetă de text (Text Box) Name: txtQB Etichete (Labels) Caption: Costul Unitar Casetă de text (Text Box) Name: txtCU Casetă de text (Text Box) Name: txtCUB Etichete (Labels) Caption: Costul

Marginal

Casetă de text (Text Box) Name: txtCM Etichete (Labels) Caption: Coeficientul

de elasticitate

Casetă de text (Text Box) Name: txtE

Page 105: Aplicatii Ec in Visual Basic

105

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 aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.64.

Fig. 1.64. Schema logică pentru rezolvarea aplicaţiei 1.29

Procedurile cmdAnaliza_Click() şi cmdIesire_Click() sunt următoarele:

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

START

Citeşte 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

Afişează cu, cub, cm, e

STOP

Page 106: Aplicatii Ec in Visual Basic

106

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 obţinerea rezultatelor din fig. 1.65 sunt: Cu=550000 Cub=525000 Q=200 Qb=250

Fig. 1.65. Situaţia de ieşire pentru aplicaţia 1.29

Page 107: Aplicatii Ec in Visual Basic

107

Aplicaţia 1.30

Pentru o societate comercială care produce un număr nedefinit de produse, să se actualizeze preţurile acestora în funcţie de rata inflaţiei pe o durată de şase ani.

Date de intrare sunt denumire produs – den, preţ produs – pret, rata inflaţiei – rinfl.

Algoritm de calcul

În program s-au folosit două structuri repetitive, una de tip While…Wend (condiţionată anterior), iar cealaltă de tip Do…Loop Until (condiţionată posterior). Logica este următoarea: începând cu şase ani în urmă, produsele fiecărui an se actualizează cu o rată constantă, introdusă la începutul programului. Pentru un an se pot introduce oricâte produse.

Programul nu stochează datele într-un fişier sau într-o bază de date, de aceea numărul de produse pentru care se va calcula preţul actualizat este limitat de suprafaţa formularului. În scopul măririi acestei suprafeţe, în meniu s-a plasat opţiunea „Mărire formular” care adaugă 500 de pixeli la înălţimea formularului, în partea de jos: Me.Height = Me.Height + 500 (1.33)

Se creează astfel posibilitatea de a se hotărî la momentul execuţiei ce suprafaţă este necesară, în funcţie de numărul de produse ce se actualizează.

Linia în care se face actualizarea este următoarea: pret_act = pret + pret * (rinfl / 100) * (7 - i) (1.34)

Schema logică este prezentată în fig.1.66.

Page 108: Aplicatii Ec in Visual Basic

108

Fig.1.66. Schema logică pentru aplicaţia 1.30

Page 109: Aplicatii Ec in Visual Basic

109

Codul sursă al programului este următorul: 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 rulării aplicaţiei sunt prezentate în fig.1.67.

Page 110: Aplicatii Ec in Visual Basic

110

Fig.1.67. Situaţia de ieşire pentru aplicaţia 1.30

Page 111: Aplicatii Ec in Visual Basic

111

Aplicaţia 1.31

Să se scrie un program pentru înregistrarea rulajului în conturile de evidenţă ale unei societăţi comerciale. Înregistrarea valorilor creditoare se va face automat o dată cu înregistrarea valorii debitoare.

Algoritm de calcul

Numărul de conturi (nrc) se va introduce de către utilizator. Pentru fiecare cont se reţin următoarele 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 afişare a valorilor (cmdRulaje) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmRulaje Caption: RULAJE

-

Buton de comandă (Command Button) Name: cmdRulaje Caption: Rulaje

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 afişarea rezultatelor în formular se foloseşte o structură de control repetitivă de tipul For…Next, în care nrc reprezinată numărul de conturi.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.68.

Page 112: Aplicatii Ec in Visual Basic

112

Fig.1.68. Schema logică pentru rezolvarea aplicaţiei 1.31

Page 113: Aplicatii Ec in Visual Basic

113

Procedurile cmdRulaje _Click() şi cmdIesire_Click() sunt următoarele: 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 obţinute sunt prezentate în fig. 1.69.

Fig. 1.69. Situaţia de ieşire pentru aplicaţia 1.31

Page 114: Aplicatii Ec in Visual Basic

114

Aplicaţia 1.32

Să se calculeze vânzările medii lunare şi vânzările totale anuale, ştiindu-se vânzările zilnice ale unei societăţi comerciale.

Algoritm de calcul

Programul calculează vânzările pe fiecare lună, totalul anual, precum şi media lunară, pornind de la vânzările zilnice.

Primul formular al aplicaţiei 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 acţionează butonul cmdAdaugă (Caption – Adauga), care realizează următoarele prelucrări:

în cazul în care casetele sunt completate corect, declară variabilele val_lună (tablou de 13 elemente) şi val_an cu Static, pentru a-şi păstra valorile între apelurile procedurii; incrementează vânzările pentru luna aleasă cu valoarea completată în

txtVanzări: 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 aceeaşi valoare. afişează pe suprafaţa formularului Form1 vânzările lunare, precum şi

totalul anual şi media lunară; deschide fişierul „C:\rezultat.txt”, în care ţine evidenţa vânzărilor pe zile.

Butonul cmdSituatie (Caption – Afişează situaţie pe zile) încarcă formularul al doilea al aplicaţiei (Form2) care conţine un singur control de tip RichTextBox. Acest control încarcă şi afişează fişierul C:\rezultat.txt. (Pentru adăugarea 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 aplicaţia 1.21, fig.1.45.

Codul sursă asociat butoanelor formularului Form1 şi evenimentului Load al formularului este următorul:

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)

Page 115: Aplicatii Ec in Visual Basic

115

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 rulării aplicaţiei sunt prezentate în fig.1.70 şi fig.1.71.

Fig.1.70. Situaţia de ieşire pentru aplicaţia 1.32 (Form1)

Clic aici determină afişarea formularului Form2 (fig.1.71)

La fiecare acţionare a butonului ADAUGA datele sunt înregistrate şi afişate în partea stângă a formularului

Page 116: Aplicatii Ec in Visual Basic

116

Fig.1.71. Situaţia de ieşire pentru aplicaţia 1.32 (Form2)

Aplicaţia 1.33

Să se întocmească balanţa de verificare, ştiind simbol cont, denumire cont, sold iniţial, tip cont, rulaj debitor şi rulaj creditor. Balanţa de verificare va avea forma: simbol cont, denumire cont, sold iniţial, rulaje, total sume, sold final.

Algoritm de calcul

Pentru întocmirea balanţei de verificare, se reţin următoarele date despre cont: − denumire cont: cont; − simbol cont: nrc; − tip cont: tipc; − sold iniţial: 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 funcţie 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 afişare a valorilor (cmdBalanta) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmBalanta

Caption: BALANTA -

Buton de comandă (Command Button) Name: cmdBalanta Caption: Balanta

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 afişarea rezultatelor în formular se foloseşte o structură de control repetitivă de tipul For…Next, iar pentru verificarea tipului de cont se utilizează o structură de control alternativă de tipul If …Then …Else…End if.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.72

Control RichTextBox afişând conţinutul fişierului „C:\rezultat.txt”

Page 117: Aplicatii Ec in Visual Basic

117

Fig.1.72. Schema logică pentru rezolvarea aplicaţiei 1.33

Page 118: Aplicatii Ec in Visual Basic

118

Procedurile cmdBalanta _Click() şi cmdIesire_Click() sunt următoarele: 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 obţinute sunt prezentate în fig. 1.73.

Page 119: Aplicatii Ec in Visual Basic

119

Fig. 1.73. Situaţia de ieşire pentru aplicaţia 1.33

Aplicaţia 1.34

La un service de telefonie mobilă se ţine evidenţa produselor pentru care se acordă garanţie. Se cunosc: nume client (nume), denumire produs/operaţie (den_prod), data intrării în garanţie (data_incep), număr de zile pentru care se acordă garanţiă (zile_gar). Se cere să se afişeze numele clienţilor şi denumirea produsului pentru care termenul de garanţie a expirat.

Algoritm de calcul

În cazul în care adăugând la data începerii garanţiei numărul de zile oferite garanţie obţinem o dată anterioară celei curente, se consideră că garanţia a expirat şi se tipăresc numele clientului şi cel al produsului respectiv.

If data_incep + zile_gar < Date Then Print nume; Tab(20); den_prod

Deşi enunţul problemei nu prevede, s-a calculat numărul produselor pentru care garanţia a expirat cu ajutorul variabilei total care este incrementată cu 1 numai dacă se evaluează ca fiind adevărată condiţia din If. De asemenea, se utilizează funcţia (nu instrucţiunea!) MsgBox, care returnează valoarea vbYes sau vbNo, după cum s-a acţionat 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 doreşte 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 când formularul aplicaţiei este activ, va fi declanşată 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 acţionarea acestui buton, executându-se codul asociat butonului, deci se părăseşte aplicaţia.

Schema logică corespunzătoare procedurii Private Sub cmdGarantii_Click() este prezentată în fig.1.74.

Page 120: Aplicatii Ec in Visual Basic

120

Fig.1.74. Schema logică pentru aplicaţia 1.34

Page 121: Aplicatii Ec in Visual Basic

121

Întregul program este asociat evenimentului Click() pe butonul de comandă cmdGaranţii, iar pentru ieşirea din aplicaţie 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 rulării aplicaţiei sunt prezentate în fig.1.75.

Fig.1.75. Situaţia de ieşire pentru aplicaţia 1.34

Page 122: Aplicatii Ec in Visual Basic

122

Aplicaţia 1.35

Să se calculeze riscul pentru creditul acordat de o bancă unui client, pentru achiziţionarea unui autoturism, ştiind suma împrumutată (s_i), valoarea garanţiei (gar), rata de diminuare a garanţiei (rata) şi probabilitatea de realizare a pierderii (p).

Algoritm de calcul

Se calculează valoarea diminuată a garanţiei (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 afişare a sumei în valută (cmdRisc) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmRisc Caption: RISC CREDIT

-

Buton de comandă (Command Button) Name: cmdRisc Caption: Risc credit

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

Click

Casetă de text (Text Box) Name: txtNume Etichete (Labels) Caption: Nume Casetă de text (Text Box) Name: txtS_i Etichete (Labels) Caption: Suma imprumutata Casetă de text (Text Box) Name: txtGar Etichete (Labels) Caption: Garantie Casetă de text (Text Box) Name: txtRata Etichete (Labels) Caption: Rata de diminuare Casetă de text (Text Box) Name: txtP Etichete (Labels) Caption: Probabilitatea de

realizare a pierderii

Casetă de text (Text Box) Name: txtR Etichete (Labels) Caption: Risc

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 aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.76.

Page 123: Aplicatii Ec in Visual Basic

123

Procedurile cmdRisc_Click() şi cmdIesire_Click() sunt următoarele: 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

START

Citeşte s_i, gar, rata, p

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

Afişează r

STOP

Fig. 1.76. Schema logică pentru rezolvarea aplicaţiei 1.35

Page 124: Aplicatii Ec in Visual Basic

124

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 obţinerea rezultatelor din fig. 1.77 sunt:

Nume: Popescu Vasile Suma împrumutată: 120.000.000 Garanţia: 130.000.000 Rata: 25% Probabilitatea: 0.01

Fig. 1.77. Situaţia de ieşire pentru aplicaţia 1.35

Page 125: Aplicatii Ec in Visual Basic

125

Aplicaţia 1.36

Pentru o grupă de studenţi se cunosc: numărul de studenţi în grupă=10, numele (nume) şi notele obţinute de fiecare la 2 examene (nota1 şi nota2). Se cere: să se calculeze media fiecărui student, să se afişeze numele studenţilor bursieri (medie>=9) şi ale studenţilor care obţin burse de merit (medie=10).

Algoritm de calcul

Pentru fiecare dintre cei 10 studenţi se introduc numele, nota1, nota2 pe baza cărora se calculează media; în funcţie de medie, utilizând o instrucţiune 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.

Page 126: Aplicatii Ec in Visual Basic

126

Fig.1.78. Schema logică pentru aplicaţia 1.36

Page 127: Aplicatii Ec in Visual Basic

127

Procedurile Private Sub cmdSituatie_Click() şi Private Sub cmdExit_Click() au următorul cod: 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 rulării aplicaţiei sunt prezentate în fig.1.79.

Page 128: Aplicatii Ec in Visual Basic

128

Fig.1.79. Situaţia de ieşire pentru aplicaţia 1.36

Aplicaţia 1.37 O bancă primeşte solicitarea de acordare de credite pentru doi clienţi care

prezintă următorii 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 lichidităţii (il) cu limita minimă il_min, indicatorul solvabilităţii (is) şi indicele de rentabilitate (ir) cu limita minimă ir_min.

Algoritm de calcul Indicatorul lichidităţii (il) pentru fiecare client (i) se calculează cu ajutorul

formulei (1.42): il(i) =a(i)/d(i) (1.42) Indicatorul solvabilităţii (is): isol(i) = cp(i) / (cp(i) + dt(i)) (1.43) Indicele de rentabilitate: ir(i) = pn(i) / cp(i) (1.44)

Se realizează un formular cu două butoane de comandă (fig.1.81):

CREDITARE CLIENTI (Caption) pentru procedura de calcul şi afişare a sumei în valută (cmdCreditare) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Page 129: Aplicatii Ec in Visual Basic

129

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmCreditare Caption: CREDITARE CLIENTI

-

Buton de comandă (Command Button) Name: cmdCreditare Caption: Creditare

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

Click

Casetă de text (Text Box) 2 Name: txtNume Etichete (Labels) Caption: Nume Casetă de text (Text Box) 2 Name: txtA Etichete (Labels) Caption: Active Imediate Casetă de text (Text Box) 2 Name: txtD Etichete (Labels) Caption: Datorii Imediate Casetă de text (Text Box) 2 Name: txtCP Etichete (Labels) Caption: Capital Propriu Casetă de text (Text Box) 2 Name: txtDT Etichete (Labels) Caption: Datorii Totale Casetă de text (Text Box) 2 Name: txtPN Etichete (Labels) Caption: Profit Net Casetă de text (Text Box) 2 Name: txtIL Etichete (Labels) Caption: Indicator

Lichiditate

Casetă de text (Text Box) 2 Name: txtIS Etichete (Labels) Caption: Indicator

Solvabilitate

Casetă de text (Text Box) 2 Name: txtIR Etichete (Labels) Caption: Indice

Rentabilitate

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 aplicaţiei în conformitate cu algoritmul

de calcul de mai sus este prezentată în fig.1.80.

Page 130: Aplicatii Ec in Visual Basic

130

Fig.1.80. Schema logică pentru rezolvarea aplicaţiei 1.37

Page 131: Aplicatii Ec in Visual Basic

131

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 obţinute sunt prezentate în fig. 1.81.

Fig. 1.81. Situaţia de ieşire pentru aplicaţia 1.37

Page 132: Aplicatii Ec in Visual Basic

132

Aplicaţia 1.38

Se dau: număr de studenţi=20. Valoarea taxei de şcolarizare=300 $. Pentru

fiecare student se cunoaşte: numele (nume) şi suma achitată (suma_ach). Să se afiseze studenţii care nu au achitat taxa de scolarizare şi suma pe care trebuie să o achite.

Algoritm de calcul

Programul conţine o instrucţiune repetitivă For...Next şi una alternativă If…End If. Pentru cei 20 de studenţi 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ă cât mai are de achitat: suma_rest = 300 – suma_ach (1.45)

Butoanele de comandă au ataşate Help contextual: dacă se opreşte mouse-ul deasupra lui cmdCalcul se va afişa 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.

Page 133: Aplicatii Ec in Visual Basic

133

Fig.1.83. Schema logică pentru aplicaţia 1.38

Page 134: Aplicatii Ec in Visual Basic

134

Procedurile Private Sub cmdCalcul_Click() şi Private Sub cmdExit_Click() au următorul cod: 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 rulării aplicaţiei sunt prezentate în fig.1.84.

Fig. 1.84. Situaţia de ieşire pentru aplicaţia 1.38

Page 135: Aplicatii Ec in Visual Basic

135

Aplicaţia 1.39

O bancă primeşte un certificat de depozit de s lei, cu o dobândă de db% pentru o perioadă de p zile. Deţinătorul certificatului îl vinde la bursă după t luni, cu o dobândă de db%. Să se calculeze dobânda la depozitul bancar constituit (dc), preţul de vânzare al certificatului după t luni (ps) şi rata dobânzii la care se cumpără certificatul (d2).

Algoritm de calcul

Formulele de calcul sunt următoarele (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 afişare a sumei în valută (cmdDobanda) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul urmator:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmDobanda

Caption: CERTIFICAT DE DEPOZIT

-

Buton de comandă (Command Button)

Name: cmdDobanda Caption: Dobanda

Click

Buton de comandă (Command Button)

Name: cmdIesire Caption: Iesire

Click

Casetă de text (Text Box) Name: txtS Etichete (Labels) Caption: Valoare nominala Casetă de text (Text Box) Name: txtD Etichete (Labels) Caption: Rata dobanzii Casetă de text (Text Box) Name: txtT Etichete (Labels) Caption: Perioada de emisiune Casetă de text (Text Box) Name: txtT1 Etichete (Labels) Caption: Perioada pana la

scadenta

Casetă de text (Text Box) Name: txtD_B Etichete (Labels) Caption: Rata dobanzii

(vanzare)

Casetă de text (Text Box) 2 Name: txtD_C Etichete (Labels) Caption: Dobanda depozit Casetă de text (Text Box) Name: txtP_S Etichete (Labels) Caption: Pretul de vanzare Casetă de text (Text Box) Name: txtD2 Etichete (Labels) Caption: Rata dobanzii

(cumparare)

După declararea variabilelor de lucru ce reprezintă datele de intrare, datele inter-mediare şi rezultatele calculelor, se preiau datele de intrare cu ajutorul casetelor de text.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig.1.85.

Page 136: Aplicatii Ec in Visual Basic

136

Fig. 1.85. Schema logică pentru rezolvarea aplicaţiei 1.39

START

Citeşte 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

Afişează d_c, p_s, d2

STOP

Page 137: Aplicatii Ec in Visual Basic

137

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 obţinute sunt prezentate în fig.1.86.

Fig.1.86. Situaţia de ieşire pentru aplicaţia 1.39

Page 138: Aplicatii Ec in Visual Basic

138

Aplicaţia 1.40

Pentru o societate care are filiale în 10 oraşe ale ţării se cunosc: denumirea localităţii (den) şi volumul vânzărilor înregistrate de fiecare filială la sfârşitul anului. Să se sorteze în ordine crescătoare filialele în funcţie de volumul vânzărilor (vz).

Algoritm de calcul

Pentru sortarea datelor este necesar ca acestea să fie memorate ca elemente ale unui vector. Întrucât utilizăm pe lângă vânzări şi denumirile localităţilor, sunt necesari doi vectori de câte 10 elemente:

’ vectori au de fapt 11 elemente, de la 0 la 10 dar utilizăm doar 10 Dim vz(10) As Double Dim den(10) As String

Primul ciclu For se ocupă de introducerea datelor şi calcularea totalului vânzărilor, care va fi afişat la sfârşit. Urmează două cicluri For imbricate, care sortează prin interschimbare elementele celor doi vectori; dacă s-ar fi sortat numai vânzările, denumirile localităţilor ar fi rămas neschimbate şi nu ar mai fi corespuns datelor iniţiale ale problemei.

În final, se afişează vânzările sortate, precum şi totalul calculat pe măsură ce s-au introdus datele (primul ciclu For).

Schema logică este prezentată în fig.1.87 şi 1.88.

Page 139: Aplicatii Ec in Visual Basic

139

Fig.1.87. Schema logică pentru aplicaţia 1.40 (partea I)

Page 140: Aplicatii Ec in Visual Basic

140

Fig.1.88. Schema logică pentru aplicaţia 1.40 (partea a II-a)

Page 141: Aplicatii Ec in Visual Basic

141

Procedurile Private Sub mnuVanzari_Click() şi Private Sub mnmuExit_Click() au următorul 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 vânzări" 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 vânzările 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

Datele de intrare utilizate, precum şi rezultatele obţinute sunt prezentate în fig. 1.89.

Page 142: Aplicatii Ec in Visual Basic

142

Fig. 1.89. Situaţia de ieşire pentru aplicaţia 1.40

Aplicaţia 1.41

Să se calculeze anuităţile trimestriale şi să se întocmească tabelul de rambursare a împrumutului pentru un credit cu convenţie de rambursare în rate constante, ştiind: suma creditului (suma credit), dobânda anuală (da), data acordării creditului (data credit), durată (durata). Rambursarea se efectuează în anuităţi trimestriale, iar dobânda se plăteşte trimestrial.

Algoritm de calcul

Formulele de calcul sunt următoarele: rata_trim = suma_credit / durata (1.47) Pentru fiecare lună avem: dobanda(i) = si * d_a / 12 Dacă este sfârşit 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 afişare a sumei în valută (cmdCreditare) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmCreditare

Caption: CREDITARE CLIENTI -

Buton de comandă (Command Button)

Name: cmdCreditare Caption: Calculeaza Anuitati

Click

Buton de comandă (Command Button)

Name: cmdIesire Caption: Iesire

Click

Casetă de text (Text Box) 2 Name: txtIR Etichete (Labels) Caption: Indice Rentabilitate

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 aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig.1.90.

Page 143: Aplicatii Ec in Visual Basic

143

Fig.1.90. Schema logică pentru rezolvarea aplicaţiei 1.41

Page 144: Aplicatii Ec in Visual Basic

144

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

Page 145: Aplicatii Ec in Visual Basic

145

Datele de intrare utilizate, precum şi rezultatele obţinute sunt prezentate în fig. 1.91.

Fig. 1.91. Situaţia de ieşire pentru aplicaţia 1.41

Aplicaţia 1.42

Să se calculeze suma elementelor de pe liniile unei matrice cu n linii şi m coloane, reprezentând vânzările zilnice pe tipuri de produse ale unei societăţi comerciale.

Algoritm de calcul Informaţiile despre vânzări se pot grupa în următorul tabel:

Produs Z1 ... Zj... Zm Total (volumvz (i)) P1 ... Pi Pn

Algoritmul de calcul presupune parcurgerea fiecărui produs, produs(i), la

fiecare realizându-se însumarea vânzărilor zilnice, vanzariz(j), pentru aflarea volumului total al vânzărilor, volumvz(i). La fiecare produs, iniţial volumul vânzărilor va fi egal cu 0. La acesta se adună vânzările zilnice:

volumvz(i) = volumvz (i) + vanzariz(j), j=1, m şi i=1, n (1.50)

1

2

Page 146: Aplicatii Ec in Visual Basic

146

Se realizează un formular cu două butoane de comandă (fig.1.93):

VANZARI (Caption) pentru procedura de calcul şi afişare a penalităţilor (cmdVanzari) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmVanzari Caption: VANZARI

-

Buton de comandă (Command Button)

Name: cmdVanzari Caption: Calculeaza vânzări

Click

Buton de comandă (Command Button)

Name: cmdIesire Caption: Iesire

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 vânzărilor zilnice se foloseşte o structură de control repetitivă de tipul For...Next imbricată:

FOR i = 1 TO n - pentru produse FOR j=1 TO m - pentru vânzările zilnice prelucrări NEXT j NEXT i Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul

de calcul de mai sus este prezentată în fig. 1.92.

Page 147: Aplicatii Ec in Visual Basic

147

Fig. 1.92. Schema logică pentru rezolvarea aplicaţiei 1.42

Page 148: Aplicatii Ec in Visual Basic

148

Procedurile cmdVanzari _Click() şi cmdIesire_Click() sunt următoarele: 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 vânzăriz(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 vânzăriz(j) = InputBox("Vanzari:") volumvz(i) = volumvz(i) + vânzăriz(j) Next j Print denp(i), volumvz(i) Next i End Sub Datele de intrare utilizate, precum şi rezultatele obţinute sunt prezentate în fig. 1.93.

Fig. 1.93. Situaţia de ieşire pentru aplicaţia 1.42

Page 149: Aplicatii Ec in Visual Basic

149

Aplicaţia 1.43

Să se calculeze media elementelor de pe coloanele unei matrice cu n linii şi m coloane, reprezentând valorile rezultate în urma unui sondaj statistic în n oraşe ale ţării.

Algoritm de calcul

Informaţiile rezultate în urma sondajului se pot grupa în următorul tabel:

Oraşe Var1 ... Var j... Var m O1 ... Oi On Medie Medie 1 Medie j Medie m

Algoritmul de calcul presupune parcurgerea fiecărei variabile, var(j), la

fiecare realizându-se însumarea rezultatelor fiecărui oraş, oras(i), iar pentru aflarea mediei, medie(j), se utilizează relaţiile:

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 afişare a penalităţilor (cmdMedie) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul urmator:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmMedie

Caption: MEDIE SONDAJ -

Buton de comandă (Command Button)

Name: cmdMedie Caption: Calculeaza media

Click

Buton de comandă (Command Button)

Name: cmdIesire Caption: Iesire

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 oraşelor se foloseşte o structură de control repetitivă de tipul For...Next imbricată:

For j = 1 To m – pentru variabile For i=1 To n – pentru oraşe prelucrări Next i Next j Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul

de calcul de mai sus este prezentată în fig. 1.94.

2

1

Page 150: Aplicatii Ec in Visual Basic

150

Fig. 1.94. Schema logică pentru rezolvarea aplicaţiei 1.43

Page 151: Aplicatii Ec in Visual Basic

151

Procedurile cmdMedie _Click() şi cmdIesire_Click() sunt următoarele: 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 obţinute sunt prezentate în fig. 1.95.

Fig. 1.95. Situaţia de ieşire pentru aplicaţia 1.43

Page 152: Aplicatii Ec in Visual Basic

152

Aplicaţia 1.44 La o bibliotecă cititorii au posibilitatea căutării unui titlu în funcţie de cota

cărţii dorite. Să se realizeze un program ce permite introducerea de la tastatură a cotei şi căutarea acesteia în mulţimea titlurilor existente.

Algoritm de calcul Informaţiile despre cărţile existente în bibliotecă se vor grupa în mulţimi

cu n elemente, în care n reprezinată numărul de cărţi: − cota: cota(i); − titlul: titlul(i); − autori: autori(i).

Algoritmul de căutare a unei valori într-o mulţime presupune parcurgerea acesteia şi compararea fiecărui element cu valoarea căutată. Î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 reţine rezultatul căutării: dacă este găsită cota, variabila gasit are valoarea true, altfel are valoarea false şi se continuă căutarea până la epuizarea titlurilor.

Se realizează un formular cu două butoane de comandă (fig.1.97): BIBLIOTECA (Caption) pentru procedura de calcul şi afişare a valorilor (cmdCauta) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmBiblioteca Caption: BIBLIOTECA

-

Buton de comandă (Command Button) Name: cmdCauta Caption: Cauta

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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ă condiţonată anterior de tipul Do … While. Condiţia de ciclare va fi: gasit=false OR i>n

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig.1.96.

Page 153: Aplicatii Ec in Visual Basic

153

Fig.1.96. Schema logică pentru rezolvarea aplicaţiei 1.44

Page 154: Aplicatii Ec in Visual Basic

154

Procedurile cmdCarti _Click(), cmdCauta_Click() şi cmdIesire_Click() sunt următoarele: 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 obţinute sunt prezentate în fig. 1.97.

Fig. 1.97. Situaţia de ieşire pentru aplicaţia 1.44

Page 155: Aplicatii Ec in Visual Basic

155

Aplicaţia 1.45

Să se stabilească algoritmul şi să se facă schema logică pentru următoarea problemă: O societate comercială scoate la vânzare 1.000 de acţiuni. Acestea sunt cumpărate de 15 persoane pentru care se cunosc numele (nume) şi numărul de acţiuni cumpărate (nr). Se cere să se calculeze procentul obţinut de fiecare acţionar (prop) şi să se stabilească acţionarul majoritar (maj).

Algoritm de calcul

Variabila verif este iniţializată cu 1.000, adică numărul de acţiuni care se vând. Pe măsura ce acţiunile sunt introduse ca vândute către acţionari, din valoarea lui verif se scade numărul de acţiuni vândute, iar valoarea rezultată este propusă ca DefaultValue (valoarea prin lipsă) în caseta InputBox de introducere a numărului de acţiuni vândute.

nr = InputBox("Introduceti nr de actiuni cumparate:", "Nr de actiuni:", verif) …

verif = verif – nr

Dacă verif devine negativ, se afişează un mesaj (s-au cumpărat mai multe acţiuni decât trebuia – 1.000) şi se trece printr-o instrucţiune de salt necondiţionat la introducerea din nou a numărului de acţiuni cumpărate de fiecare persoană.

Programul realizează şi un test pentru determinarea acţionarului majoritar:

If prop >= 51 / 100 Then maj = nume verif = verif – nr

care trebuie deci să deţină cel puţin 51% din acţiuni.

La ieşirea din buclă, în cazul în care s-a determinat un acţionar majoritar, acesta este afişat.

If maj <> " " Then Print "Actionarul majoritar este "; maj; "."

Schema logică a problemei este prezentată în figurile 1.98 şi 1.99.

Page 156: Aplicatii Ec in Visual Basic

156

Fig.1.98. Schema logică pentru aplicaţia 1.45 (partea I)

Page 157: Aplicatii Ec in Visual Basic

157

Fig.1.99. Schema logică pentru aplicaţia 1.45 (partea a-II-a)

Fig. 1.100. Situaţia de ieşire pentru aplicaţia 1.45

Aplicaţia 1.46 Se cunoaşte numărul total de sisteme (nr_tot) de calcul vândute într-un an

în ţară. Pentru fiecare oraş se dau numărul de calculatoare vândute (nr_oraş). Să se stabilească repartiţiă (procentul) de calculatoare vândute pe fiecare oraş. (Se consideră numărul de oraşe =10).

Algoritm de calcul Înaintea intrării în structură repetitivă a programului se introduc numărul total

al sistemelor vandute (nr_tot) şi numărul de oraşe în care s-a vândut sistemul (n). Pentru fiecare oraş se introduc denumirea şi numărul de sisteme vândute,

iar apoi se calculează proporţia care este şi afişată, sub formă procentuală. Schema logică a problemei este prezentată în fig.1.101.

Page 158: Aplicatii Ec in Visual Basic

158

Fig.1.101. Schema logică pentru aplicaţia 1.46

Page 159: Aplicatii Ec in Visual Basic

159

Procedurile Private Sub cmdIesire_Click() şi Private Sub

cmdSisteme_Click() sunt următoarele: 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?") 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. Situaţia de ieşire pentru aplicaţia 1.46

Page 160: Aplicatii Ec in Visual Basic

160

Aplicaţia 1.47

Pentru o factură fiscală se cunosc următoarele date: numărul 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

Informaţiile despre fiecare produs se grupează în mulţimi cu n elemente, în care n reprezintă numărul de produse:

− denumire produs: denp(i); − cantitatea: cant(i); − preţul: pret(i); − valoare: val(i); − TVA: TVA(i); − valoare totală produs: valtp(i).

Se calculează valoarea, TVA şi valoarea totală a fiecărui produs:

val(i) = cant(i) * pret(i) (1.53) TVA(i) = val(i) * 0.19 (1.54) valtp(i) = val(i) + TVA (i) (1.55)

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 afişare a valorilor (cmdFacturi) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmFacturi Caption: FACTURI

-

Buton de comandă (Command Button) Name: cmdFacturi Caption: Facturi

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 afişarea rezultatelor în formular se foloseşte o structură de control repetitivă de tipul For … Next, în care n reprezinată numărul de produse.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.103.

Page 161: Aplicatii Ec in Visual Basic

161

Fig. 1.103. Schema logică pentru rezolvarea aplicaţiei 1.47

Page 162: Aplicatii Ec in Visual Basic

162

Procedurile cmdFacturi Click() şi cmdIesire_Click() sunt următoarele:

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 obţinute sunt prezentate în

fig. 1.104.

Page 163: Aplicatii Ec in Visual Basic

163

Fig. 1.104. Situaţia de ieşire pentru aplicaţia 1.47

Aplicaţia 1.48

La examenul de admitere într-o universitate se cunosc: numărul de

facultăţi=10, numărul de locuri scoase la concurs în fiecare facultate, numărul de candidaţi înscrişi. Se cere: să se afişeze facultăţile la care au rămas locuri neocupate şi numărul de locuri disponibile, numărul de candidaţi pe loc la fiecare facultate, totalul candidaţilor înscrişi la Universitate.

Algoritm de calcul

Datele de intrare sunt: den (denumirea facultăţii), locuri (numărul de locuri scoase la concurs la fiecare facultate), înscrieri (numărul de înscrieri de la fiecare facultate).

Pentru cele 10 facultăţi ale Universităţii, dacă numărul de locuri depăşeşte numărul de înscrieri, se calculează un disponibil (disp); dacă nu, disp rămâne la valoarea zero şi va fi afişat cu această valoare, însemnând că toate locurile la facultatea respectivă s-au ocupat.

Tot_inscrieri este variabila care însumează înscrierile de la toate facultăţile şi este afişată la ieşirea din ciclul For.

Instrucţiunea InputBox sugerează în această formă (al treilea parametru al său) o valoare de 255 pentru numărul de înscrieri şi 300 pentru numărul de locuri.

Schema logică a aplicaţiei este prezentată în fig.1.105.

Page 164: Aplicatii Ec in Visual Basic

164

Fig.1.105. Schema logică pentru aplicaţia 1.48

Page 165: Aplicatii Ec in Visual Basic

165

Procedura ataşată 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 rulării aplicaţiei sunt prezentate în fig.1.106.

Fig.1.106. Situaţia de ieşire pentru aplicaţia 1.48

Page 166: Aplicatii Ec in Visual Basic

166

Aplicaţia 1.49

Pentru un număr de n facturi se cunosc următoarele date: numărul şi seria facturii, valoarea facturii, stare (A – achitat sau N – neachitat). Să se calculeze: numărul total de facturi neachitate (nrfn), suma toatală neachitată (valtotn) şi să se afişeze facturile neachitate.

Algoritm de calcul

Informaţiile despre fiecare factură se vor grupa în mulţimi cu n elemente, în care n reprezinată numărul de facturi:

− numărul şi seria facturii: nrserie(i); − valoarea facturii: valf(i); − starea: stare(i).

În funcţie de starea facturii se va calcula valoarea totală neachitată (valtotn) şi numărul de facturi neachitate (nrfn):

valtotn = valtotn * valf(i) (1.57) nrfn = nrfn +1 (1.58)

Iniţial valtotn =0 şi nrfn=0. Se realizează un formular cu două butoane de comandă (fig. 1.108):

FACTURI (Caption) pentru procedura de calcul şi afişare a valorilor (cmdFacturi) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul urmator:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmFacturi Caption: FACTURI

-

Buton de comandă (Command Button) Name: cmdFacturi Caption: Facturi

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 afişarea rezultatelor în formular, se foloseşte o structură de control repetitivă de tipul For...Next, în care n reprezinată numărul de produse, iar pentru verificarea stării fiecărei facturi se utilizează structura alternativă If...Then...Else.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.107.

Page 167: Aplicatii Ec in Visual Basic

167

Fig. 1.107. Schema logică pentru rezolvarea aplicaţiei 1.49

Page 168: Aplicatii Ec in Visual Basic

168

Procedurile cmdFacturi _Click() şi cmdIesire _Click() sunt următoarele: 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 obţinute sunt prezentate în fig. 1.108.

Fig. 1.108. Situaţia de ieşire pentru aplicaţia 1.49

Page 169: Aplicatii Ec in Visual Basic

169

Aplicaţia 1.50

Pentru un număr n de facturi se cunosc următoarele date: numărul şi seria facturii, valoarea. Să se sorteze în ordine crescătoare facturile în funcţie de valoarea lor.

Algoritm de calcul

Datele referitoare la facturi se reţin în mulţimi de n elemente, n reprezentând numărul de facturi.

− numărul şi seria facturii: nrserie(i); − valoarea: val(i).

Pentru ordonarea facturilor în ordine crescătoare, se procedează astfel: se compară primele două facturi şi, dacă nu sunt în ordine crescătoare, atunci se inversează poziţiile celor două. Se compară următoarele două facturi învecinate şi se procedează ca mai sus, până la parcurgerea tuturor facturilor. Algoritmul se reia de la început, până se constată că nu mai sunt necesare schimbări. Pentru monitorizarea schimbărilor intervenite se utilizează o variabilă booleană (cu valori true/false) – schimb. Dacă între facturi s-au produs schimbări, atunci schimb=false, dacă nu există modificări, atunci schimb=true, deci mulţimea este sortată. Algoritmul se reia atât timp cât schimbe=false. Sunt necesare schimbări atât între valoarile facturilor, cât şi între elementele mulţimii ce reţine numărul şi seria acestora. Pentru realizarea permutărilor elementelor, se utilizează o variabilă de transfer (t) ce reţine 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 ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul urmator:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmSortare

Caption: SORTARE FACTURI -

Buton de comandă (Command Button) Name: cmdSortareF Caption: Sortare Facturi

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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 foloseşte o structură de control repetitivă de tipul For...Next, în care n reprezinată numărul de facturi. Deoarece algoritmul se reia atât timp cât se produc schimbări, se utilizează o structură repetitivă condiţionată anterior de tipul: Do While, în care condiţia este schimb=false.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.109.

Page 170: Aplicatii Ec in Visual Basic

170

Fig. 1.109. Schema logică pentru rezolvarea aplicaţiei 1.50

Page 171: Aplicatii Ec in Visual Basic

171

Procedurile cmdSortareF Click() şi cmdIesire_Click() sunt următoarele: 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 obţinute sunt prezentate în fig. 1.110.

Page 172: Aplicatii Ec in Visual Basic

172

Fig. 1.110. Situaţia de ieşire pentru aplicaţia 1.50

Aplicaţia 1.51

Pentru 10 filiale ale unei societăţi se dau: denumirea localităţii (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) corespunzătoare, atât profitul maxim cât şi cel minim sunt iniţializate cu primul profit brut - pb(0).

pmin = pb(0) pmax = pb(0)

În ciclul For următor se testează dacă profiturile următoare sunt mai mici

decât minimul (caz în care minimul devine profit) sau mai mari decât maximul (iar aici maximul ia valoarea profitului respectiv, în cazul în care condiţia se verifică).

If pb(i) < pmin Then pmin = pb(i) If pb(i) > pmax Then pmax = pb(i)

La începutul procedurii este dispusă instrucţiunea Cls, care şterge suprafaţa

formularului şi este utilă pentru cazul în care se acţionează cmdCalcul de mai multe ori.

Schema logică a problemei este prezentată în fig.1.111.

Page 173: Aplicatii Ec in Visual Basic

173

Fig.1.111. Schema logică pentru aplicaţia 1.51

Page 174: Aplicatii Ec in Visual Basic

174

Procedura ataşată 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. Situaţia de ieşire pentru aplicaţia 1.51

Page 175: Aplicatii Ec in Visual Basic

175

Aplicaţia 1.52

Pentru un sistem de calcul se cunosc: numărul de componente achiziţionate, denumirea, valoarea, termenul de garanţie al fiecărei componente, data achiziţionării sistemului. Se cere să se afişeze componentele care au ieşit din garanţie şi să se calculeze valoarea întregului sistem de calcul.

Algoritm de calcul

Datele legate de componentele sistemului se vor grupa în mulţimi cu n elemente, în care n reprezintă numărul total de componente:

− denumire: den(i); − valoare: val(i); − termen de garanţie: termeng(i).

Se vor parcurge toate componentele sistemului, iar pentru fiecare componentă se verifică dacă a depăşit termenul de garantie, comparând data la care aceasta expiră (dataachiz+termeng(i)) cu data curentă extrasă cu ajutorul funcţiei date():

dataachiz+termeng(i) < date() (1.61) Dacă această condiţie este adevărată, atunci se afişează 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 afişare a valorilor (cmdGarantie) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente Formular (Form) Name: frmSistem

Caption: SISTEM DE CALCUL -

Buton de comandă (Command Button) Name: cmdGarantie Caption: Garantie

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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. Condiţia de depăşire a termenului de garanţie se verifică utilizând o structură alternativă de tipul If...Then...Else.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de calcul de mai sus este prezentată în fig. 1.113.

Page 176: Aplicatii Ec in Visual Basic

176

Fig. 1.113. Schema logică pentru rezolvarea aplicaţiei 1.52

Page 177: Aplicatii Ec in Visual Basic

177

Procedurile cmdGarantie _Click() şi cmdIesire_Click() sunt următoarele: 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 obţinute sunt prezentate în fig. 1.114.

Page 178: Aplicatii Ec in Visual Basic

178

Fig. 1.114. Situaţia de ieşire pentru aplicaţia 1.52

Aplicaţia 1.53

Pentru 10 filiale ale unei bănci se cunoaşte 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 salariaţilor la profit ( 10% din pn).

Algoritm de calcul

Pentru cele 10 filiale ale băncii se introduc şi se afişează 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ă ieşirea 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 afişează concomitent valorile fondului de dezvoltare, ale dividendelor şi participării salariaţilor la profit.

Se face menţiunea că al doilea argument al instrucţiunii InputBox precizează textul de afişat î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.

Page 179: Aplicatii Ec in Visual Basic

179

Fig.1.115. Schema logică pentru aplicaţia 1.53

Page 180: Aplicatii Ec in Visual Basic

180

Procedura ataşată 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

Page 181: Aplicatii Ec in Visual Basic

181

Fig.1.116. Situaţia de ieşire pentru aplicaţia 1.53

Aplicaţia 1.54 Pentru n cititori ai unei biblioteci se cunosc: numărul permisului, cota

cărţii împrumutate, titlul, data împrumutului, numărul de zile pentru care se face împrumutul. Se cere să se afişeze toate cărţile nerestituite şi să se calculeze numărul acestora.

Algoritm de calcul Informaţiile despre cititori existente în bibliotecă se vor grupa în mulţimi

cu n elemente, în care n reprezinată numărul de cititori: − numărul permisului: nrpermis(i); − cota: cota(i); − titlul: titlul(i); − data împrumutului: dataimp(i); − numărul de zile de împrumut: nrzileimp(i).

Page 182: Aplicatii Ec in Visual Basic

182

Pentru fiecare cititor se verifică dacă a depăşit termenul de împrumut,

comparând data la care trebuia să se restituie cărţile (dataimp(i)+nrzileimp(i)) cu data curentă extrasă cu ajutorul funcţiei date():

dataimp(i)+nrzileimp(i)<date() (1.65) Dacă această condiţie este adevărată atunci se afişează cota şi titlul cărţii şi se incrementează numărul total de cărţi 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 afişare a valorilor (cmdCartiN) şi pentru ieşirea din program (cmdIesire). Obiectele adăugate în formular sunt prezentate în tabelul următor:

Obiect Proprietăţi Evenimente

Formular (Form) Name: frmBiblioteca Caption: BIBLIOTECA

-

Buton de comandă (Command Button) Name: cmdCartiN Caption: Carti Nerestituite

Click

Buton de comandă (Command Button) Name: cmdIesire Caption: Iesire

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. Condiţia de depăşire a termenului de împrumut se verifică utilizând o structură alternativă de tipul If...Then...Else.

Schema logică pentru rezolvarea aplicaţiei în conformitate cu algoritmul de

calcul de mai sus este prezentată în fig. 1.117.

Page 183: Aplicatii Ec in Visual Basic

183

Fig. 1.117. Schema logică pentru rezolvarea aplicaţiei 1.54

Page 184: Aplicatii Ec in Visual Basic

184

Procedurile cmdCartiN _Click() şi cmdIesire_Click() sunt următoarele:

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 obţinute sunt prezentate în fig. 1.118.

Fig. 1.118. Situaţia de ieşire pentru aplicaţia 1.54

Page 185: Aplicatii Ec in Visual Basic

185

APLICAŢII PROPUSE

Aplicaţia 1.55

Pentru un număr de 5 facturi se cunosc următoarele date: numărul şi seria facturilor, numărul 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ă.

Aplicaţia 1.56 Pentru un număr de 10 facturi se cunosc următoarele date: numărul şi seria

facturilor, valoare factură, stare cu valorile Achitată/Neachitată (A/N). Se cere să se afişeze facturile ce depăşesc o anumită valoare (prag) şi să se

calculeze numărul total de facturi ce depăşesc valoarea de prag (nrf_prag). Aplicaţia 1.57 Pentru un număr de 10 facturi se cunosc următoarele date: numărul şi seria

facturilor, valoare factură, stare (A/N). Se cere să se afişeze facturile neachitate ce depăşesc o anumită valoare

(prag) şi să se calculeze numărul total de facturi ce depăşesc valoarea de prag (nrfn_prag).

Aplicaţia 1.58 Pentru un număr de 10 facturi se cunosc următoarele date: numărul şi seria

facturilor, data emiterii facturii, valoare factură, stare (A/N). Se cere să se afişeze facturile restante ce depăşesc 30 de zile şi să se calculeze

numărul lor.

Aplicaţia 1.59 Pentru un număr de 10 facturi se cunosc următoarele date: numărul şi seria

facturilor, data emiterii facturii, valoarea facturii, stare (A/N). Se cere să se afişeze facturile restante ce depăşesc 30 de zile şi să se aplice

majorări în funcţie de numărul de zile.

Page 186: Aplicatii Ec in Visual Basic

186

Aplicaţia 1.60 Pentru un număr de 10 facturi se cunosc următoarele date: numărul şi seria

facturilor, denumirea furnizorului, valoarea facturii, stare (A/N). Se cere să se afişeze facturile neachitate care aparţin unui anumit furnizor ce

se va citi de la tastatura. Aplicaţia 1.61 Pentru 10 cititori ai unei biblioteci se cunosc: numărul permisului, cota

cărţilor împrumutate, titlul, data împrumutului, numărul de zile pentru care se face împrumutul. Se cere să se aplice penalizări pentru cărţile nerestituite şi să se calculeze suma totală de plată (penalizarea/zi este de 1.000 lei).

Aplicaţia 1.62 Pentru 10 cititori ai unei biblioteci se cunosc: numărul permisului, cota

cărţilor împrumutate, titlul, data împrumutului, numărul de zile pentru care se face împrumutul. Se cere să se aplice penalizări pentru cărţile 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.

Aplicaţia 1.63 Pentru 10 cititori ai unei biblioteci se cunosc: numărul permisului, cota

cărţilor împrumutate, titlul, data împrumutului, numărul de zile pentru care se face împrumutul. Să se afişeze toate cărţile nerestituite, în funcţie de permisul cititorului (se va citi de la tastatură). Să se aplice penalizări pentru acest cititor şi să se calculeze suma totală de plată. (penalizare/zi=1.000 lei).

Aplicaţia 1.64 Se cunoaşte numărul de studenţi din grupă ca fiind 20. La fiecare student

se cunoaşte numele şi media obţinută în sesiune. Să se sorteze în ordine descrescătoare studenţii în funcţie de media obţinută la exemene.

Aplicaţia 1.65 Pentru o societate care are filiale în 10 oraşe ale ţării se cunosc: pentru fiecare

filială: denumirea localităţii, volumul vânzărilor înregistrate la sfârşitul anului. Să se calculeze volumul total al vânzărilor înregistrate de societate şi procentul de vânzări pe fiecare filială.

Page 187: Aplicatii Ec in Visual Basic

187

Aplicaţia 1.66 Se cunoaşte numărul total de utilizatori Internet din ţară. Pentru fiecare

oraş se cunoaşte numărul de utilizatori Internet. Să se stabilească repartiţiă (procentul) de utilizatori Internet pe fiecare oraş (se consideră numărul de oraşe =20).

Aplicaţia 1.67 În urma examenului de licenţă se cunosc: numărul de absolventi=25,

numele şi notele obtinute de fiecare candidat la cele 2 probe (nota1 şi nota2). Se cere să se calculeze media obţinută de candidaţi (nota1>=5 şi nota2>=5). Să se afişeze candidaţii declaraţi admişi şi cei respinşi.

Aplicaţia 1.68 Pentru 10 filiale ale unei societăţi se dau: denumirea localităţii, 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 afişeze filialele care înregistrează pierderi.

Aplicaţia 1.69 Pentru 10 filiale ale unei societăţi se dau: denumirea localităţii, veniturile şi

cheltuielile înregistrate pe un an. Să se calculeze profitul brut obţinut de fiecare filială şi să se sorteze în ordine descrescătoare filialele în funcţie de profitul brut înregistrat.

Aplicaţia 1.70 Pentru 10 filiale ale unei societăţi se dau: denumirea localităţii, stocurile

existente în luna curentă. La nivelul societăţii se cunosc stocul existent (stocul_existent(i)) în depozitul central şi stocul limită (stoc_sigurantă). Să se afişeze filialele care necesită aprovizionare (stoc_existent(i) – stoc_siguranta<=0) şi să se afişeze 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 depăşeşte stocul existent în depozitul central (total_aprov>stoc_central).

Aplicaţia 1.71 Pentru o societate de turism (reţea hotelieră) se cunosc: numărul de hoteluri

şi vile, numărul de camere disponibile în fiecare hotel/vilă, numărul de cereri de rezervare pentru fiecare hotel/vilă, numărul total de locuri în fiecare hotel/vilă. Se cere să se calculeze gradul de ocupare al camerelor în fiecare

Page 188: Aplicatii Ec in Visual Basic

188

hotel/vilă şi pe întreaga societate (grad_ocup(i)=loc_ocup(i)/nr_loc(i)). Să se sorteze în ordine descrescătoare în funcţie de gradul de ocupare.

Aplicaţia 1.72 Pentru o agenţie de transport se cunosc: numărul de maşini, numărul de

rezervări pentru fiecare maşină, numărul de locuri în fiecare maşină. Să se calculeze numărul de locuri libere rămase şi gradul de ocupare al locurilor în fiecare maşină (grad_ocup(i) =loc_ocup(i) / nr_loc(i)). Să se sorteze în ordine descrescătoare în funcţie de gradul de ocupare.

Aplicaţia 1.73 În cazul unui spital se cunosc: numărul de secţii, numărul de paturi în

fiecare secţie, numărul de bolnavi în fiecare secţie. Să se calculeze numărul de paturi libere rămase şi gradul de ocupare al acestora în fiecare secţie (grad_ocup(i) =loc_ocup(i) / nr_loc(i)). Să se sorteze în ordine descrescătoare în funcţie de gradul de ocupare.

Aplicaţia 1.74 În cazul aplicaţiei 1.7, se cere să se determine care sunt modificările de

efectuat în codul programului, pentru a valida la introducere denumirea societăţii (denumire), cifra de afaceri (CA) şi rata profitului (rata_p), astfel încât în cazul în care casetele de text nu sunt completate să se oprească execuţia şi să se afişeze un mesaj care să ceară completarea lor.

Page 189: Aplicatii Ec in Visual Basic

189

2. ACCESS APLICAŢII 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 mulţi furnizori, care se vând către mai mulţi clienţi (persoane fizice şi juridice).

Baza de date AUTO va conţine mai multe entităţi, cuprinse in tabelele FURNIZORI, MAGAZIN, CLIENTI, AUTOTURISME, FACTURA1, LINIE FACTURA1, FACTURA2, LINE FACTURA2.

Aplicaţia 2.1

Să se creeze tabelul AUTOTURISME care să conţină datele despre caracteristicile de bază ale fiecărui model de autoturism din depozitul magazinului.

Rezolvare:

Tabelul AUTOTURISME va avea următoarea 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 următorilor paşi: – în fereastra Database se alege modul de creare a tabelului cu ajutorul

ferestrei de proiectare Create Table in Design View; – se acţionează cu mouse-ul pe opţiunea New (Table); – în fereastra New Table se alege opţiunea Design View (OK); – în fereastra Table (fig.2.1), în partea de sus, se specifică numele câmpului

(Field Name), tipul de dată (Data Type) şi, opţional, o descriere a conţinutului câmpului (Description); astfel, pentru câmpurile tabelului AUTOTURISME, se specifică următoarele 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 restricţiile referitoare la tipul de dată sau la domeniul de valori, acţionându-se pentru modificarea valorilor implicite; astfel, pentru câmpurile tabelului AUTOTURISME, se specifică următoarele restricţii pentru dimensiunile câmpurilor (Field Size): cod auto – Integer, den auto – 15, cod mag – Integer,

Page 190: Aplicatii Ec in Visual Basic

190

model – 10, culoare – 10, cap cil – Integer, vit max – Integer, consum – Single, pret unitar – Double;

– se stabileşte cheia primară prin selectarea câmpului cod auto şi acţionarea, în meniul de pe butonul din partea dreaptă a mouse-ului, cu butonul stâng al mouse-ului pe opţiunea Primary Key; în dreptul câmpului cod auto va apărea 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 aplicaţia 2.1

Page 191: Aplicatii Ec in Visual Basic

191

Aplicaţia 2.2

Să se creeze tabelul MAGAZIN, care să conţină datele de identificare ale magazinului de autoturisme VITEMAX SRL.

Rezolvare:

Tabelul MAGAZIN va avea următoarea 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 paşilor prezentaţi în problema 2.1 pentru tabelul AUTOTURISME.

Pentru câmpurile tabelului MAGAZIN, se specifică următoarele 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ă următoarele restricţii pentru dimensiunile câmpurilor (Field Size): cod mag – Integer, den mag – 20, adresa mag – 50, cod fiscal mag – 20, banca mag – 20, cont mag – Double.

Se stabileşte cheia primară prin selectarea câmpului cod mag. Se salvează tabelul cu numele MAGAZIN prin succesiunea de comenzi: Meniul principal, File, Save As.

Aplicaţia 2.3

Se cere să se realizeze relaţia dintre tabelele MAGAZIN şi AUTOTURISME ale bazei de date AUTO.

Rezolvare:

Relaţia dintre două tabele ale unei baze de date relaţionale se realizează prin stabilirea unei legături dintre un câmp ce reprezintă cheia primară dintr-un tabel şi acelaşi câmp ce reprezintă cheie externă în celălalt tabel. Pentru aceasta, se parcurg următorii paşi:

– cu baza de date AUTO deschisă, se alege opţiunea Relationships (Relaţii) din meniul principal Tools (Instrumente);

– în fereastra Relationships, se adaugă succesiv tabelele MAGAZIN şi AUTOTURISME acţionând comanda Add din subfereastra Show Table – cu eticheta Tables selectată, după marcarea prealabilă a tabelului de adăugat; după aceste operaţiuni, se acţionează butonul Close (Închidere) al subferestrei Show Table;

– prin tehnica Drag and Drop, se începe editarea legăturii prin marcarea (acţionare buton stânga mouse) cheii primare cod mag din tabelul MAGAZIN şi eliberarea butonului mouse-ului peste cheia externă cod mag din tabelul AUTOTURISME;

– la apariţia ferestrei de editare a relaţiilor (Edit Relationship), se forţează integritatea referenţială (Enforce Referential Integrity) cu bifă în partea stângă executată cu mouse-ul, după care se apasă pe butonul de creare (Create) (fig.2.2); dacă câmpurile corespunzătoare nu prezintă acelaşi tip de dată şi nu au aceeaşi dimensiune, nu se poate forţa integritatea referenţială.

Aspectul ferestrei Relationships cu relaţia stabilită între tabelele MAGAZIN şi AUTOTURISME este prezentat în fig.2.3.

Page 192: Aplicatii Ec in Visual Basic

192

Fig.2.2. Crearea relaţiei dintre tabelele MAGAZIN şi AUTOTURISME pentru aplicaţia 2.3

Fig.2.3. Relaţia dintre tabelele MAGAZIN şi AUTOTURISME pentru aplicaţia 2.3

Page 193: Aplicatii Ec in Visual Basic

193

Aplicaţia 2.4

Se cere să se construiască un formular asociat tabelului AUTOTURISME pentru introducerea datelor.

Rezolvare:

Când un formular este asociat unui tabel al unei baze de date, el serveşte pentru introducerea datelor ce reprezintă înregistrările acelui tabel.

Pentru crearea formularului asociat tabelului AUTOTURISME, se parcug următorii paşi:

– î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 apariţia ferestrei New Form (formular nou), se alege opţiunea Form Wizard, iar în subfereastra derulantă de selecţie a tabelului (Choose the table or query where the object’s data comes from:), se marchează AUTOTURISME; se apasă OK;

Fig. 2.4. Aspectul formularului AUTOTURISME creat în aplicaţia 2.4 – la apariţia ferestrei Form Wizard (ghid pentru crearea formularului), se

transferă câmpurile disponibile (subfereastra din stânga: Available Fields) în subfereastra pentru câmpuri selectate (subfereastra din dreapta: Selected Fields) cu ajutorul săgeţii duble (>>); se apasă butonul Next;

– în cea de-a doua apariţie a ferestrei Form Wizard, se alege interfaţa de prezentare a formularului prin selecţia (de exemplu) a opţiunii de coloană (Columnar); se apasă butonul Next;

Page 194: Aplicatii Ec in Visual Basic

194

– în cea de-a treia apariţie a ferestrei Form Wizard, se optează pentru stilul de reprezentare a formularului prin selecţia (de exemplu) a opţiunii SandStone; se apasă butonul Next;

– în cea de-a patra apariţie a ferestrei Form Wizard, se scrie numele formularului în subfereastra de sus (AUTOTURISME), apoi se alege opţiunea de deschidere a formularului pentru introducerea datelor (Open the form to view or enter information); se apasă butonul Finish (terminare);

– la apariţia formularului AUTOTURISME astfel proiectat, se introduc, pe rând, înregistrările în tabelul AUTOTURISME al bazei de date AUTO; numărul înregistrării curente este afişat în partea de jos a formularului (fig.2.4).

Aplicaţia 2.5

Se cere să se realizeze o interogare de selecţie (Select Query) care să prezinte situaţia autoturismelor din depozitul magazinului VITEMAX, care au preţuri unitare cuprinse între 100.000.000 şi 200.000.000 lei.

Rezolvare:

Folosind formularul creat în problema 2.4 sau direct, cu opţiunea Open (deschide) se populează cu înregistrări cele două tabele: MAGAZIN (o înregistrare) şi AUTOTURISME (şapte înregistrări).

Pentru realizarea interogării de selecţie cerute (Query 1), se parcurg următorii paşi:

– în fereastra Database, se acţionează pe eticheta Queries (Interogări), după care se apasă pe butonul New (o nouă interogare);

– după apariţia 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 (selecţia tabelelor de lucru), se adaugă succesiv (Add) tabelele MAGAZIN şi AUTOTURISME;

– în fereastra Select Query, se selectează câmpurile (cod auto, den auto şi pret unitar) care vor apărea în situaţie; pentru aceasta, se execută dublu click cu mouse-ul pe denumirile acestora; vor apărea succesiv în grila de proiectare (Design Grid) care se găseşte în partea de jos a ferestrei Select Query;

– pentru câmpul cod auto, în linia Sort se alege, din subfereastra derulantă, opţiunea Ascending (ordonare crescătoare a codurilor auto);

– pentru câmpul preţ unitar, în linia Criteria se scrie Between 100000000 And 200000000, adică înregistrările selectate vor avea preţurile 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 obţine vizualizarea rezultatelor obţinute (fig.2.6) pentru interogarea Query 1.

Page 195: Aplicatii Ec in Visual Basic

195

Fig. 2.5. Aspectul ferestrei Select Query în aplicaţia 2.5

Fig. 2.6. Rezultatele obţinute prin interogarea Query 1 în aplicaţia 2.5

Page 196: Aplicatii Ec in Visual Basic

196

Aplicaţia 2.6 Să se construiască un formular pentru vizualizarea rezultatelor interogării

Query 1 obţinută în problema 2.5.

Rezolvare:

Când un formular este asociat unei interogări, el serveşte pentru vizualizarea rezultatelor acelei interogări.

Pentru crearea formularului asociat interogării Query 1 obţinută în problema 2.5, se parcurg aceiaşi paşi ca la problema 2.4, cu deosebirea că în subfereastra derulantă de selecţie a tabelului (Choose the table or query where the object’s data comes from:) se marchează Query 1.

Aplicaţia 2.7

Se cere să se afişeze pe ecran un raport asociat interogării Query 1 obţinută în problema 2.5.

Rezolvare:

Pentru întocmirea raportului solicitat, se parcurg următorii paşi: – în fereastra Databases se acţionează 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 apariţia ferestrei New Report (un nou raport), se alege opţiunea Form Wizard, iar în subfereastra derulantă de selecţie a tabelului (Choose the table or query where the object’s data comes from:), se marchează Query 1;

– se parcurg în continuare paşii prevăzuţi de ghid, până se obţine raportul asociat interogării Query 1.

APLICAŢII PROPUSE 2.8. Să se creeze tabelul CLIENTI care să conţină datele de identificare ale

clienţilor magazinului de autoturisme VITEMAX SRL.

2.9. Se cere să se realizeze relaţia 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 selecţie (Select Query) care să prezinte situaţia autoturismelor din depozitul magazinului VITEMAX care au culoarea „negru”.

2.12. Să se construiască un formular pentru vizualizarea rezultatelor interogării de selecţie obţinută în problema anterioară.

2.13. Se cere să se afişeze pe ecran un raport asociat tabelului CLIENTI.

Page 197: Aplicatii Ec in Visual Basic

197

3. APLICAŢII ECONOMICE COMPLEXE Aplicaţia 3.1

Să se calculeze cheltuielile totale de transport (ch_totale) pentru cinci curse, cunoscând cheltuielile de transport specifice (ch_tp) categoriei de distanţă (dist_tp).

Algoritm de calcul

Aplicaţia foloseşte o bază de date creată în Access pentru a asigura persistenţa datelor. În baza de date se introduc sau se extrag datele după caz. Pentru cerinţele aplicaţiei a fost suficientă crearea unei baze de date care să conţină un singur tabel (Table) şi două obiecte de tip cerere de interogare (Query).

Fig.3.1. Tabelul CHELTUIELI în modul Design (proiectare) şi Open (Adăugare înregistrări)

Modul Design

Modul Open

Page 198: Aplicatii Ec in Visual Basic

198

În prima cerere de interogare (tot_linie) se înmulţesc cheltuielile specifice cu distanţa corespunzătoare 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 corespunzător 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;

Interfaţa aplicaţiei 3.1 (formularul Form1) este prezentată în figura 3.2.

Fig. 3.2. Aspectul formularului pentru aplicaţia 3.1 În momentul în care se doreşte adăugarea datelor, se acţionează 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 înregistrările tabelului CHELTUIELI pentru a vizualiza cheltuielile de transport specifice şi distanţele corespunzătoare. Rezolvarea propriu-zisă a cerinţelor aplicaţiei se realizează la acţionarea butonului cu Caption Cheltuieli totale care determină afişarea totalului cheltuielilor în caseta de text alăturată.

txtChelt (Name)

txtDist (Name)

txtChTot (Name)

Page 199: Aplicatii Ec in Visual Basic

199

În detaliu, algoritmul de calcul este următorul: În secţiunea General Declarations se declară şi se instanţiază trei obiecte

pentru acces la date ActiveX (ADO – Access Data Object): cn de tip conexiune (Connection), rs de tip set de înregistrări (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) către biblioteca de obiecte care le conţine, 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

Următoarea secvenţă de program care se execută este cea ataşată evenimentului Load (Încărcare) al formularului. La lansarea în execuţie, evenimentul Form_Load este primul care se declanşează. Codul din interiorul procedurii dezactivează casetele de text care vor fi activate numai dacă se doreşte să se adauge date în baza de date (la acţionarea butonului de adăugare). În continuare, se defineşte proprietatea ConnectionString a obiectului cn (de tip Connection).

Page 200: Aplicatii Ec in Visual Basic

200

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 execuţiei acestei secvenţe de program, obiectul rs va fi populat cu

înregistrări preluate din tabelul CHELTUIELI cu ajutorul clauzei sql. Pentru popularea obiectului rs cu alt set de înregistrări este necesară mai întâi

închiderea sa şi deschiderea din nou, dar transmiţându-i ca parametru alt cod sql. Această clauză extrage totalul cheltuielilor din cererea total, după care îl afişează î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 înregistrările tabelului numai cu condiţia ca să nu se depăşească sfârşitul setului de înregistrări (EOF – End Of File) la deplasarea către înainte sau începutul fişierului (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

Page 201: Aplicatii Ec in Visual Basic

201

Butonul cmdSave inserează în baza de date, prin codul asociat, conţinutul 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

Page 202: Aplicatii Ec in Visual Basic

202

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 obţinute la rularea aplicaţiei sunt prezentate în fig.3.4.

Page 203: Aplicatii Ec in Visual Basic

203

Fig.3.4. Situaţia de ieşire pentru aplicaţia 3.1 Aplicaţia 3.2 Să se memoreze, pe categorii de vârstă (copii până la 13 ani, adolescenţi cu vârsta

între 13 şi 18 ani, tineri cu vârsta între 18 şi 35 de ani, adulţi cu vârsta între 35 şi 62 de ani, pensionari cu vârsta peste 62 de ani), veniturile locatarilor unui bloc.

Algoritm de calcul

Deoarece interfaţa aplicaţiei (formularul Form1) este destul de încărcată, se prezintă mai întâi aceasta, cu câteva explicaţii despre modul de funcţionare.

Page 204: Aplicatii Ec in Visual Basic

204

Fig.3.5. Interfaţa aplicaţiei 3.2 (Form1) Aplicaţia 3.2 funcţionează după logica aplicaţiei 3.1: datele sunt introduse în

baza de date „aplic9.mdb”; butonul Adauga goleşte conţinutul 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 opţiune din cadrul (frame) Categorie varsta.

La acţionarea butonului cu proprietatea Caption Afiseaza situatie este încărcat şi apare formularul Form2, responsabil cu afişarea rezultatelor propriu-zise, calculate pe baza datelor introduse de utilizator (figura 3.6).

Toate consideraţiile referitoare la includerea bibliotecii de obiecte ActiveX în proiect enunţate în cadrul aplicaţiei 3.1 sunt valabile şi aici. Baza de date conţine un singur tabel (fig.3.6).

Page 205: Aplicatii Ec in Visual Basic

205

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;

Secvenţa de program care introduce datele în baza de date (la acţionarea 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

Page 206: Aplicatii Ec in Visual Basic

206

Codul sursă complet asociat controalelor formularului Form1 este:

‘secţiunea 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

Page 207: Aplicatii Ec in Visual Basic

207

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

Page 208: Aplicatii Ec in Visual Basic

208

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

Fig.3.7. Situaţia de intrare pentru aplicaţia 3.2 (Form1)

Determină apariţia lui Form2 (fig.3.8)

Page 209: Aplicatii Ec in Visual Basic

209

Fig.3.8. Situaţia de ieşire pentru aplicaţia 3.2 (Form2) Aspectul formularului la introducerea datelor este prezentat în fig.3.7, iar

rezultatele obţinute la acţionarea butonului Afiseaza situatie sunt prezentate în fig.3.8. Aplicaţia 3.3 Să se calculeze salariul mediu şi abaterile specifice pentru fiecare salariat la o

societate comercială, cunoscând marca, numele, prenumele şi salariul lunar al salariaţilor. Algoritm de calcul Aplicaţia lucrează cu o bază de data numită „12” care este realizată cu

ajutorul Sistemului de Gestiune a Bazelor de Date Relaţionale (SGBDR) SQL Server al firmei Microsoft. Fereastra principală a SGBDR SQL Server se numeşte 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 decât Access, pentru că, deşi se foloseşte mai greu, nedispunând de sistemul de asistenţi (Wizards) ai Access-ului, este mult mai flexibil şi mai rapid în condiţiile gestionării unui volum mare de date de către mai mulţi utilizatori.

Page 210: Aplicatii Ec in Visual Basic

210

Fig.3.9. Fereastra Entreprise Manager

Baza de date folosită conţine numai un tabel – tblSalariat. Crearea unui tabel se realizeaeză prin clic dreapta asupra nodului Tables din stânga ferestrei, după care se alege opţiunea New Table (un nou tabel). Fereastra care apare este destul de asemănătoare 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 conţin prefixul sys).

Page 211: Aplicatii Ec in Visual Basic

211

Fig.3.10. Tabelul tblSalariat Baza de date cuprinde, de asemenea, pe lângă tabelul tblSalariat şi două

cereri de interogare al căror 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 menţionează că dbo este „posesorul” obiectelor, adică baza de date curentă. Interfaţa aplicaţiei conţine două formulare: Form1 permite navigarea printre

înregistrările tabelului tblSalariat, introducerea de noi date în acest tabel şi deschiderea lui Form2 care afişează salariul mediu şi abaterile, adică ceea ce s-a sintetizat în cererea de interogare vwAbatere.

La rularea aplicaţiei, iniţial este încărcat formularul Form1. Pentru aceasta, se completează în meniul Project/Properties la ComboBox-ul StartUp „Form1”. După încărcare, formularul afişează prima înregistrare din tabela tblSalariat, datorită codului asociat evenimentului Load:

tblSalariat, fereastra de proiectare

tblSalariat, fereastra de introducere date

Page 212: Aplicatii Ec in Visual Basic

212

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’este 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 înregistrări) au fost declarate şi instanţiate în secţiunea General Declarations pentru a fi vizibile şi în celelalte module ale aplicaţiei:

'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. Situaţia de intrare (Form1) pentru aplicaţia 3.3

Page 213: Aplicatii Ec in Visual Basic

213

Acţionarea meniului Salariu mediu şi abateri determină apariţia formularului Form2, care conţine un control de tip Microsoft Hierarchical FlexGrid Control 6.0 şi un control Microsoft DataGrid Control 6.0. Aceste controale afişează aceleaşi date ca şi casetele de text din partea inferioară a formularului. S-au folosit toate variantele în scop didactic pentru evidenţierea alternativelor de prezentare a datelor în cazul utilizării design-erului” (proiectant) DataEnvironment.

Fig.3.12. Situatia de ieşire (Form2) pentru aplicaţia 3.3

În cazul folosirii numai a acestei alternative de afişare a datelor este necesară plasarea unor butoane de navigare între înregistrări!

Page 214: Aplicatii Ec in Visual Basic

214

Pentru adăugarea unui designer DataEnvironment se procedează ca în

fig.3.13.

Fig.3.13. Adăugarea designer-ului DataEnvironment După ce designer-ul DataEnvironment a fost adăugat la proiect, i se stabilesc

proprietăţile: se leagă DataEnvironment1 de baza de date „12” creată cu SQL Server, ca în fig.3.14.

Page 215: Aplicatii Ec in Visual Basic

215

Fig.3.14. Proprietăţile lui DataEnvironment1 Designer-ul DataEnvironment poate conţine obiecte de tip Connection şi

Command, care au la rândul lor proprietăţi. Cu ajutorul acestor proprietăţi se poate realiza conectarea la un anumit obiect din interiorul bazei de date, respectiv la cererea (View) vwAbatere, care trebuie afişată în Form2. DataEnvironment1 conţine un obiect de tip Connection ale cărui proprietăţi se setează identic ca în fig.3.14 şi un obiect Command (fig.3.15).

Pas 1Pas 2

Page 216: Aplicatii Ec in Visual Basic

216

Fig.3.15. Conţinutul designer-ului DataEnvironment1 Proprietăţile 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. Proprietăţile lui Command1

Page 217: Aplicatii Ec in Visual Basic

217

Afişarea conţinutului cererii de interogare vwAbatere pe formularul Form2 se realizează foarte uşor, prin tehnica Drag and Drop: se trage obiectul comandă în Form2, ţinându-se apăsat butonul drept al mouse-ului; la eliberarea acestuia se alege din meniul contextual apărut modul de afişare (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 aplicaţiei. 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

Page 218: Aplicatii Ec in Visual Basic

218

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

Page 219: Aplicatii Ec in Visual Basic

219

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

Aplicaţia 3.4 Un magazin de autoturisme are mai mulţi furnizori – societăţi comerciale de

producţie autoturisme şi clienţi – persoane fizice şi juridice. Magazinul oferă spre vânzare mai multe modele de autoturisme. Datele despre aceste modele de autoturisme, solicitate de clienţi, se referă la culoare, capacitate cilindrică, viteza maximă, consum de carburant la 100 km, preţ de vânzare.

Se definesc entităţile (î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 proiectării bazei de date AUTO, structura acestei baze de

date este prezentată în fig.3.18.

Page 220: Aplicatii Ec in Visual Basic

220

Fig.3.18. Structura bazei de date AUTO Prin folosirea clauzelor SQL, de exemplu, tabelul AUTOTURISME se

construieşte 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); Instrucţiunile SQL permit execuţia unor operaţiuni specifice asupra unor

înregistrări din baza de date AUTO ce îndeplinesc criterii prestabilite. a) Să se afişeze denumirile de autoturisme, preţul unitar şi cantitatea vândută

unor clienţi din Bucureşti, cu denumirile sortate în ordine alfabetică. Să se calculeze preţul unitar prognozat pentru fiecare tip de autoturism, ştiind că procentul de creştere 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 afişeze lista cu autoturismele ale căror denumiri încep cu litera D şi

au preţuri 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;

Page 221: Aplicatii Ec in Visual Basic

221

c) La magazinul de autoturisme soseşte reprezentantul firmei Alfa SRL din Constanţa, str.N.Iorga, nr.25, cu codul fiscal R425570, cu contul 321004326672 deschis la BCR care doreşte să cumpere autoturisme Daewwo, model Cielo, de culoare roşie.

Adăugarea înregistrării pentru acest client se face în tabela CLIENTI prin

folosirea instrucţiunii INSERT: INSERT INTO clienti VALUES (1221, "Alfa SRL","Constanta, str.N.Iorga, nr.25", "R425570", "BCR",321004326672); Oferta de autoturisme Daewwo este obţinută 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 vânzare de 10%

pentru fiecare autoturism, dacă acesta cumpără cel puţin cinci autoturisme Daewwo, model Cielo.

Se întocmeşte o listă cu noile preţuri 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 doreşte 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 construieşte astfel: SELECT Min(consum) FROM autoturisme WHERE culoare=„negru”; …………… Min(consum)

Page 222: Aplicatii Ec in Visual Basic

222

f) Se doreşte actualizarea codului autoturismului Dacia: UPDATE autoturisme SET cod_auto=1234 WHERE den_auto="Dacia"; g) Magazinul doreşte să renunţe la clienţii din provincie şi să şteargă

înregistrările din baza de date referitoare la aceştia. DELETE FROM clienti WHERE adresa<>"Bucuresti*"; h) Pentru un studiu statistic, se doreşte calculul deviaţiei standard (abaterii)

preţurilor unitare ale autoturismelor înregistrate în baza de date AUTO. SELECT STDDEV (pret_unitar) FROM autoturisme; i) Se cere calculul numărului de autoturisme care au preţ unitar mai mic decât

300.000.000 lei. SELECT COUNT (*) FROM autoturisme WHERE pret_unitar<300000000.

Page 223: Aplicatii Ec in Visual Basic

223

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. structura punctuală, reţea, relaţională; b. structura punctuală, liniară, arborescentă; c. structura relaţională, reţea, punctuală, liniară; d. structura punctuală, liniară, arborescentă, reţea, relaţională; e. structura punctuală, liniară, relaţională.

4.2. Să se stabilească care variantă este corectă pentru următoarea 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 – preţul. Secvenţa de program se referă la calculul valorii pentru fiecare produs şi afişarea 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

Page 224: Aplicatii Ec in Visual Basic

224

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, când formularul este asociat

unui tabel b. pentru introducerea datelor în baza de date, când formularul este asociat

unui tabel, pentru vizualizarea datelor într-o bază de date, atunci când formularul este asociat unei interogări;

c. pentru introducere de date; d. pentru vizualizare de date; e. pentru introducere şi vizualizare de date, precum şi pentru vizualizarea

rezultatelor finale obţinute prin prelucrarea informaţiilor conţinute de baza de date.

4.4. Un sistem de gestiune al bazelor de date orientate pe obiecte conţine:

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. funcţii şi un constructor de tip reuniune ce nu permit conectarea limbajelor din generaţia 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, funcţii, 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, funcţii, constructor de tip reuniune, toate acestea întrând în compunerea interfeţei-utilizator;

e. un sistem de tip constructor şir care generează în permanenţă mesaje către utilizator.

4.5. Să se stabilească care variantă este corectă pentru următoarea secvenţă de

program scrisă pentru problema: O societate comercială vinde un număr de 10 produse, timp de 7 zile. Se doreşte aflarea vânzării 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 – vânzarea 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

Page 225: Aplicatii Ec in Visual Basic

225

b. 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.

Page 226: Aplicatii Ec in Visual Basic

226

4.7. Proprietăţile unei chei primare pentru o bază de date relaţională 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 cât 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 cât mai mică;

e. valoarea unei chei primare nu trebuie să fie NULL, să aibă dimensiune cât mai mică.

4.8. Să se stabilească care variantă este corectă pentru următoarea secvenţă de

program scrisă pentru problema: Pentru o grupă care are 25 de studenţi, să se calculeze media pe fiecare student în parte şi media pe grupă, cunoscând: 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

Page 227: Aplicatii Ec in Visual Basic

227

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. întrebări selective asupra datelor existente în baza de date; c. obţinere de situaţii finale; d. stocare de date; e. defineşte o serie de comenzi pe care Access-ul le execută automat la

apariţia unui eveniment. 4.10. Arhitectura bazei de date cuprinde:

a. baza de date propriu-zisă, analiza sistemului, proiectarea structurii bazei de date, încărcarea datelor, exploatarea şi întreţinerea bazei de date;

b. baza de date propriu-zisă, sistemul de gestiune al bazei de date, set de proceduri manuale şi automate, dicţionar al bazei de date, mijloace hard şi personal implicat;

c. baza de date propriu-zisă, sistemul de gestiune al bazei de date, încărcarea datelor, exploatarea şi întreţinerea bazei de date;

d. baza de date propriu-zisă, proiectarea structurii bazei de date, încărcarea datelor, exploatarea şi întreţinerea bazei de date;

e. baza de date propriu-zisă, set de proceduri manuale şi automate, încărcarea datelor, dicţionar al bazei de date, mijloace hard şi personal implicat.

4.11. Să se stabilească care variantă este corectă pentru următoarea secvenţă

de program scrisă pentru problema: Pentru o lista cu 15 produse la care se aplică tva, să se calculeze şi să se afişeze, pentru fiecare produs, taxa pe valoare adăugată – tva şi valoarea cu tva – val, ştiind: codul produsului – codpr, denumirea produsului – denpr, cantitatea – cant şi preţul 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

Page 228: Aplicatii Ec in Visual Basic

228

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

e. 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

4.12. O interogare în Access permite, între altele: a. vizualizarea sau modificarea atributelor, precum şi sortarea înregistrărilor

î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 înregistrărilor

î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 funcţie

de clasa de utilizatori, sunt: a. baza de date propriu-zisă, sistemul de gestiune al bazei de date, set de

proceduri manuale şi automate, dicţionar 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 următoarea secvenţă

de program scrisă pentru problema: Să se calculeze profitul sau pierderea din vânzări pentru un produs la care se cunosc costul de producţie şi preţul de vânzare.

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)

Page 229: Aplicatii Ec in Visual Basic

229

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, afişarea proprietăţilor unui obiect se face: a. pe grupe de proprietăţi, fiecare grupă de proprietăţi aflându-se pe câte o

fişă; b. pe grupe de activităţi, fiecare grupă de activităţi având semnificaţia

descrisă printr-un simbol; c. pe grupe de sarcini, fiecare sarcină având precizate numere de ordine;

Page 230: Aplicatii Ec in Visual Basic

230

d. pe grupe de proprietăţi, fiecare grupă de proprietăţi indicând formatul unui obiect;

e. pe grupe de proprietăţi, fiecare grupă de proprietăţi indicând o listă de acţiuni la care este posibil a răspunde obiectul căruia îi sunt asociate, ca urmare a apariţiei unor evenimente.

4.16. Structura arborescentă a unei colecţii de date este caracterizată de

existenţa: a. unei relaţii de ordine între elementele colecţiei de date; b. unei relaţii de ordine între elementele sistemului ierarhic superior şi

elementele sistemului ierarhic inferior; c. unei structuri punctuale între elementele colecţiei de date; d. unei structuri reţea între elementele colecţiei de date; e. unei structuri liniare între elementele colecţiei de date.

4.17. Să se stabilească care variantă este corectă pentru următoarea 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, cunoscând coeficienţii 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

Page 231: Aplicatii Ec in Visual Basic

231

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

Page 232: Aplicatii Ec in Visual Basic

232

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, funcţiile Sum, Min, Max, Avg şi Count asigură efectuarea

interogărilor: a. de acţiune; b. asupra unei anumite date; c. de grup; d. de ştergere; e. de adăugare. 4.19. Modelul de date relaţional se caracterizează printr-o singură structură

de date denumită: a. relaţie sau înregistrare; b. relaţie sau atribut; c. relaţie sau tabel; d. relaţie sau câmp de date; e. relaţie sau ierarhie. 4.20. Să se stabilească care variantă este corectă pentru următoarea secvenţă

de program scrisă pentru problema: Să se calculeze cheltuielile totale de transport (ch_totale) pentru cinci curse, cunoscând 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)

Page 233: Aplicatii Ec in Visual Basic

233

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

Page 234: Aplicatii Ec in Visual Basic

234

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/ieşire.

4.22. Programele pe calculator reprezintă:

a) Algoritmi; b) Structuri de date; c) Date în cod maşină; d) Informaţii selectate după o anumită cheie; e) Algoritmi şi structuri de date. 4.23. În sistemele de gestiune a bazelor de date orientate pe obiecte,

moştenirea reprezintă o caracteristică conform căreia:

a. clasele sunt aranjate într-o ierarhie şi se defineşte posibilitatea de a masca atributele proprii ale unui obiect şi modul în care se execută operaţiile;

b. clasele sunt aranjate într-o ierarhie şi se permite invocarea pentru obiecte de diferite tipuri a operaţiilor cu acelaşi nume, dar cu semantică şi implementare diferite;

c. clasele sunt aranjate într-o ierarhie şi fiecare clasă moşteneşte toate atributele şi metodele clasei din care face parte;

d. clasele sunt aranjate într-o ierarhie şi fiecare operaţie se comportă în mod diferit, în funcţie de clasa de obiecte căreia îi aparţine;

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;

Page 235: Aplicatii Ec in Visual Basic

235

c. un program care gestionează instrucţiunile 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 acţiunile

următoare:

a. să construiască sau să şteargă o bază de date; b. să insereze, să modifice sau să şteargă linii sau câmpuri; c. să caute în tabele o anumită informaţie şi să returneze rezultatele într-o

anumită ordine; d. să construiască un formular în Access; e. să modifice securitatea informaţiilor. Răspunsuri:

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.

Page 236: Aplicatii Ec in Visual Basic

236

BIBLIOGRAFIE Fînaru, L.; Brava, I., Visual Basic. Primii paşi… şi următorii, Editura Polirom, Iaşi,

2001. Florescu, V.; Stanciu, V., şi colectiv, Baze de date, Editura Economică, Bucureşti,

1999. Fusaru, D., Arhitectura bazelor de date – Mediul SQL, Editura Fundaţiei România

de Mâine, Bucureşti, 2002. Fusaru, D.; Mareş, M.D.; Mihai, G., Visual Basic şi Access, Editura Fundaţiei

România de Mâine, Bucureşti, 2001. Fusaru, D.; Udrică, M.; Cocianu, C.L., Programarea orientată pe obiecte, Editura

Fundaţiei România de Mâine, Bucureşti, 1999. Gardarin, G., Bases de donées: Object & relationnée, Eyrolles, Paris, 2001. Lungu, I. şi colectiv, Baze de date: organizare, proiectare şi implementare,

Editura All, Bucureşti, 1995. Năstase P. şi colectiv, Tehnologia bazelor de date. Access 2000, Editura Teora,

Bucureşti, 2000. Pătruţ, B., Aplicaţii în Visual Basic, Editura Teora, Bucureşti, 2002. Popa, Gh.; Iliescu, M., Udrică, M., Baze de date Access. Culegere de probleme,

Editura Cison, Bucureşti, 2001. Popa, Gh.; Iliescu, M.; Berbec, F.; Ivancenco, V.; Andronache, V., Visual Basic,

Editura Cison, Bucureşti, 1999. Popa, Gh.; Tamaş, I.; Frăţilă, L.; Cozdarea, A; Frăţilă, R., Aplicaţii informatice.

Gestiune, Contabilitate, Finanţe, Bănci, Editura Cison, Bucureşti, 2001. Rahmel, D., Sams Teach Yourself Database Programming with Visual Basic 6 in

24 Hours, Sams Publishing, New York, 1999. Sandor, K., Programarea interfeţelor cu Visual Basic 6.0 – elemente de bază,

Editura Albastră, Cluj-Napoca, 2002. Stanciu, V., Proiectarea sistemelor informatice de gestiune, Editura Cison,

Bucureşti, 2000. Udrică, M.; Fusaru, D., Informatică de gestiune, Culegere de probleme, Editura

EDEN 78 LTD, Bucureşti, 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, Bucureşti, 2002. *** Baze de date – Fundamente teoretice şi practice, Grupul BDASEIG – Editura

Infomega, Bucureşti, 2002.