Sunteți pe pagina 1din 14

C8 Colecii ArrayList de obiecte definite de utilizator

1) Ce este o colecie de obiecte?


-o variabil de memorie ce conine o mulime (o list) de elemente de tip
obiect stocate n memoria intern n zone neadiacente de memorie
2) Care sunt etapele necesare definirii, ncrcrii i utilizrii
(valorificrii) unei colecii ArrayList de obiecte?
a) se definesc clasele
b) se definete colecia
c) se ncarc obiectele n colecie
-se instaniaz un obiect al unei clase
-se preiau valorile proprietilor (uneori i ale atributelor neprotejate) ale
obiectelor i se adaug n colecie
d) se actualizeaz colecia
-se terg anumite obiecte din colecie
-se adaug noi obiecte n colecie
-se modific valorile unor proprieti ale unui obiect din colecie
e) se valorific (se utilizez) datele unei colecii
-se parcurge colecia i se fac prelucrrile solicitate pe baza datelor din
colecie

Exemplu:
Considerm urmtoarea ierarhie de clase n VB.NET

Unde:
-clasa Document este clas abstract iar clasa Cec este o clas concret.
Clasa Cec este clasa secundar/derivat/copil avnd clasa Document
clas de baz/superclasa/printe
-atributele:m_FelDoc, m_NrDoc, m_EmitentDoc, m_TipOperatie,
m_DenumireTert sunt de tip String; m_DataDoc este de tip Date i
m_SumaCec este de tip Integer;
-atributul m_TipOperatie poate lua doar valorile: I pentru cec de ncasat;
P pentru cec de plat i S pentru cec depus spre scontare
-pentru atributele Private: m_FelDoc, m_TipOperatie i m_Suma se vor
defini proprietile similare: felDoc, tipOperatie, sumaCec
Cerine:
i) s se defineasc clasele

ii) s defineasc la nivelul clasei Form1 colecia Cecuri


iii) la evenimentul click pe Button1 s se instanieze obiectul cec, s se
preia cu InputBox valorile proprietilor felDoc, tipOperatie, sumaCec i s
se adauge n colecie
iv) la evenimentul click pe Button2 s se afieze coninutul coleciei
element cu element
v) la evenimentul click pe Button3 s se parcurg colecia Cecuri i s se
afieze Suma de incasate este = , sum care se va obine prin nsumarea
sumelor nscrie n cecurile din colecie care au tipOperatie egal cu I
Vom avea:
i) definirea claselor
- definirea clasei document
Public MustInherit Class Document
'definirea atributelor
Private m_FelDoc As String
Private m_NrDoc As String
Private m_DataDoc As Date
Private m_EmitentDoc As String
'definirea proprietatilor
Public Property felDoc() As String
Get
Return m_FelDoc
End Get
Set(ByVal value As String)
m_FelDoc = value
End Set
End Property
'definirea metodelor
End Class

-definirea clasei Cec


Public Class Cec
'definirea clasei parinte
Inherits Document
'definirea atributelor
Private m_TipOperatie As String
Private m_SumaCec As Integer
'definirea proprietatilor
Public Property tipOperatie() As String

Get

Return m_TipOperatie
End Get
Set(ByVal value As String)
'validarea datelor introduse
If value = "I" Or value = "P" Or value = "S" Then
m_TipOperatie = value
Else
m_TipOperatie = ""
MsgBox("Tip operatie diferit de I,P sau S")
End If
End Set
End Property
Public Property sumaCec() As Integer
Get
Return m_SumaCec
End Get
Set(ByVal value As Integer)
m_SumaCec = value
End Set
End Property
'definirea metodelor
End Class

ii) definirea coleciei


Public Class Form1
'definirea colectiei
Dim cecuri As New ArrayList
End Class

iii) instanierea unui obiect i adaugarea n colecie


Public Class Form1
'definirea colectiei
Dim cecuri As New ArrayList
Private Sub Button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.Click
'Definesc un cec o instanta a clasei Cec
Dim unCec As New Cec
'Incarc proprietatile
unCec.felDoc = InputBox("Tastati fel document")
unCec.tipOperatie = InputBox("Tastati tip operatie")
unCec.sumaCec = InputBox("Tastati suma")
'Verific daca cecul este corect
If unCec.tipOperatie = "" Then
'Distrug cecul - nu este corect
MsgBox("Cec gresit")
unCec = Nothing
Else

'Incarc un cec in colectie - este corect


cecuri.Add(unCec)
MsgBox("Cec Ok")
End If
End Sub
End Class

iv) listarea coninutului coleciei


Private Sub Button2_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button2.Click
'Listez datele din colectie
For Each c As Cec In cecuri
MsgBox(c.felDoc & " " & c.tipOperatie & " " & c.sumaCec)
Next
End Sub

v) se afieaz Suma de ncasat


Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Button3.Click
'definirea variabilei pentru suma cecurilor incarcate
Dim sumaI As Integer
'initializare
sumaI = 0
'Parcurg colectia
For Each c As Cec In cecuri
'Daca este Cec de incasat adun sumaCec
If c.tipOperatie = "I" Then
sumaI = sumaI + c.sumaCec
End If
Next
'Afisez suma de incasat
MsgBox("Suma de incasat este: " & sumaI)
End Sub

3) Cum se mai pot prelua (ncrca) proprietile unui obiect n afar de


InputBox?
-cu ajutorul formularelor
4) Ce presupune utilizarea formularelor la ncrcarea proprietilor
unui obiect?
a) construirea interfeei (a formularului sau a machetei de preluare)
b) definirea procedurii de ncrcare validare
-se introduc noile valori n macheta de culegere a datelor

-se valideaz datele i dac sunt corecte (se instaniaz un nou obiect; se
transfer datele din machet n proprieti; se adaug obiectul n colecie)
Exemplu:
Pentru preluarea proprietilor felDoc, tipOperatie, sumaCec vom construi
urmtoarea interfa:

Unde:
- n stnga machetei am utilizat etichete Fel Document, Tip Operatie i
Suma Cec cu rol explicativ;
iar
- n partea dreapt am folosit TextBox-uri n care vom introduce noile valori
ale proprietilor de ncrcat cu numele txtFelDoc, txtTipOperaie,
txtSumaCec.
Not: ceeace vom introduce noi n TextBox-uri va fi memorat i disponibil n
proprietatea text a fiecrui control de tip TextBox
Dorim ca la click pe Button4 (PreluareValidare) s verificm dac am
introdus date corecte n TextBox-uri i dac sunt corecte s

instaniem un nou obiect


s transferm valorile ncrcate n
proprietile obiectului i s adugm obiectul n colecie. Dac datele
nu sunt corecte, atunci afim un mesaj de avertizare.
Not:
Pentru validarea corectitudinii proprietii tipOperatie am definit procedura
txtTipOp_Validating care practic nu mai permite prsirea controlului
txtTipOperatie dac nu se introduce o valoare coerct:
Private Sub txtTipOp_Validating(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles txtTipOp.Validating
If txtTipOp.Text = "I" Or txtTipOp.Text = "P" Or txtTipOp.Text = "S"
Then
Else
e.Cancel = True
MsgBox("Tip operatie diferit de I,P sau S")
txtTipOp.Text = ""
End If
End Sub

Procedura de PreluareValidare presupune:


Private Sub Button4_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button4.Click
'Verific daca am introdus ceva in tipOperatie deoarece aplicand(procedura)
Validating daca introducem ceva acela nu poate fi decat corect
If txtTipOp.Text = "" Then
MsgBox("Tip operatie eronata")
Else
'Definesc un nou obiect
Dim unCec As New Cec
'Transfer datele din macheta in obiect
unCec.felDoc = txtFelDoc.Text
unCec.tipOperatie = txtTipOp.Text
unCec.sumaCec = txtSumaCec.Text
'Adaug obiectul in colectie
cecuri.Add(unCec)
End If
End Sub

5) Cum putem s rsfoim o colecie de obiecte?


-cu ajutorul butoanelor de comand
Astfel vom construi urmtoarele butoane cu urmtoarele sarcini:

Simbol

Nume

Sarcin

btnPrima

Se afieaz pe primul element din colecie


(index zero) i afieaz coninutul acestuia

btnDreapta

Se deplaseaz pe urmtorul element din


colecie i afieaz coninutul acestuia

btnStanga

Se deplaseaz pe elementul precedent din


colecie i afieaz coninutul acestuia

btnUltima

Se deplaseaz pe ultimul element din colecie


(index count) i afieaz coninutul acestuia

Private Sub btnPrima_Click(ByVal sender As Object, ByVal e As


System.EventArgs) Handles btnPrima.Click
'curat macheta
txtFelDoc.Text = ""
txtTipOp.Text = ""
txtSumaCec.Text = 0
'ma pozitionez pe primul element din colectie si afisez continutul
cecCurent = cecuri.Item(0)
txtFelDoc.Text = cecCurent.felDoc
txtTipOp.Text = cecCurent.tipOperatie
txtSumaCec.Text = cecCurent.sumaCec
'memorez indexul curent
i = 0
End Sub
Private Sub btnDreapta_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnDreapta.Click
'curat macheta
txtFelDoc.Text = ""
txtTipOp.Text = ""
txtSumaCec.Text = 0
'ma pozitionez pe urmatorul element din colectie (daca exista) si
afisez continutul
If i < cecuri.Count - 1 Then
i = i + 1
End If
cecCurent = cecuri.Item(i)

txtFelDoc.Text = cecCurent.felDoc
txtTipOp.Text = cecCurent.tipOperatie
txtSumaCec.Text = cecCurent.sumaCec
End Sub
Private Sub btnUltima_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnUltima.Click
'curat macheta
txtFelDoc.Text = ""
txtTipOp.Text = ""
txtSumaCec.Text = 0
'ma pozitionez pe ultimul element din colectie si afisez continutul

cecCurent = cecuri.Item(cecuri.Count - 1)
'afisez continutul
txtFelDoc.Text = cecCurent.felDoc
txtTipOp.Text = cecCurent.tipOperatie
txtSumaCec.Text = cecCurent.sumaCec
'preiau indexul
i = cecuri.Count - 1
End Sub
Private Sub btnStanga_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnStanga.Click
'curat macheta
txtFelDoc.Text = ""
txtTipOp.Text = ""
txtSumaCec.Text = 0
'ma pozitionez pe precedentu element din colectie (daca exista) si
afisez continutul
If i > 0 Then
i = i - 1
End If
MsgBox(i)
cecCurent = cecuri.Item(i)
txtFelDoc.Text = cecCurent.felDoc
txtTipOp.Text = cecCurent.tipOperatie
txtSumaCec.Text = cecCurent.sumaCec
End Sub

6) Cum putem s actualizm o colecie de obiecte?


-cu ajutorul butoanelor de comand
Astfel vom construi urmtoarele butoane cu urmtoarele sarcini:

Simbol

Nume

Sarcin

btnCautDupaFelDoc Se introduce felul documentului


cautat i dac va fi gsit se
afieaz elementul respectv
btnCautDupaIndex

Se introduce indexul i dac este


corect se afieaz elementul cu
indexul respectiv

brnSterg

Se terge obiectul curent al


coleciei dac se confirm
tergerea

btnAdaug

Adaug un nou obiect n colecie

btnModific

Se modific coninutul obiectului


aflat n machet

brnCuratColectia

terge toate obiectele din colecie

Private Sub btnCautFelDoc_Click(ByVal sender As Object, ByVal e As


System.EventArgs) Handles btnCautFelDoc.Click
'Definesc variabila de cautat
Dim felDocCautat As String
'Preiau variabila de cautat
felDocCautat = InputBox("Tastati fel document de cautat")
'caut
cecCurent = Nothing
For Each element As Cec In cecuri
If element.felDoc = felDocCautat Then
cecCurent = element
Exit For
End If
Next
If IsNothing(cecCurent) Then
MsgBox("Documentul nu a fost gasit")
'curat macheta
txtFelDoc.Text = ""
txtTipOp.Text = ""
txtSumaCec.Text = 0

Else
'afisez cecul gasit

txtFelDoc.Text = cecCurent.felDoc
txtTipOp.Text = cecCurent.tipOperatie
txtSumaCec.Text = cecCurent.sumaCec
End If
End Sub
Private Sub btnCautIndex_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnCautIndex.Click
'Definesc indexul de cautat
Dim j As Integer
'Preiau indexul
j = InputBox("Tastati indexul")
'caut
cecCurent = Nothing
If j > -1 And j < cecuri.Count Then
cecCurent = cecuri.Item(j)
End If
If IsNothing(cecCurent) Then
MsgBox("Indexul nu exista")
'curat macheta
Call CuratMacheta()
Else

'afisez cecul gasit


txtFelDoc.Text = cecCurent.felDoc
txtTipOp.Text = cecCurent.tipOperatie
txtSumaCec.Text = cecCurent.sumaCec
i = j
End If
End Sub
Private Sub btnModific_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnModific.Click
If IsNothing(cecCurent) Then
MsgBox("Cecul nu poate fi modificat")
Else
cecCurent.felDoc = txtFelDoc.Text
cecCurent.tipOperatie = txtTipOp.Text
cecCurent.sumaCec = txtSumaCec.Text
End If

End Sub
Private Sub btnSterg_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnSterg.Click
Dim raspuns As Integer
If IsNothing(cecCurent) Then
MsgBox("Cecul nu poate fi sters")
Else

raspuns = MsgBox("Doriti sa stergeti acest Cec ",


MsgBoxStyle.Question + MsgBoxStyle.YesNo)
If raspuns = vbYes Then
cecuri.Remove(cecCurent)
Call CuratMacheta()
End If
End If
End Sub
Private Sub btnAdaug_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnAdaug.Click
'Verific daca am introdus ceva in tipOperatie deoarece
' aplicand(procedura) Validating daca introducem ceva acela nu poate
fi decat corect
If txtTipOp.Text = "" Then
MsgBox("Tip operatie eronata")
Else
'Definesc un nou obiect
Dim unCec As New Cec
'Transfer datele din macheta in obiect
unCec.felDoc = txtFelDoc.Text
unCec.tipOperatie = txtTipOp.Text
unCec.sumaCec = txtSumaCec.Text
'Adaug obiectul in colectie
cecuri.Add(unCec)
End If
End Sub
Private Sub btnCuratMacheta_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnCuratMacheta.Click
'apelez procedura CuratMachete
Call CuratMacheta()
End Sub
Private Sub btnCuratColectia_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnCuratColectia.Click
cecuri.Clear()
Call CuratMacheta()
End Sub
Private Sub CuratMacheta()
'curat macheta
txtFelDoc.Text = ""
txtTipOp.Text = ""
txtSumaCec.Text = 0
End Sub
End Class

Forma final a interfeei va fi:

S-ar putea să vă placă și