Sunteți pe pagina 1din 5

C10 Clase cu atribute multivaloare

1)Ce sunt clasele cu atribute multivaloare?


-sunt clasele care conin cel puin un atribut de tip colecie sau tablou
-de regul aceste atribute sunt publice
Pentru exemplificare vom considera clasele:

Unde:
-clasele LinieFactura i Factura sunt clase concrete
-atributele m_DenumireProdus, m_Numar, m_Emitent i m_Tert sun de tip
String (Private)
-atributele m_Cantitate, m_Pret, m_CotaTva sunt de tip Single (Private)
-atributul m_Data este de tipul Date (Private)
-atributul colLiniiFactura este de tipul LinieFactura (Public)
Pentru atribitele Private: m_DenumireProdus, m_Numar, m_Emitent,
m_Tert, m_Cantitate, m_Pret, m_CotaTva i m_Data vor fi definite
proprietile Public: denumireProdus, numar, emitent, tert, cantitate, pret,
cotaTva i data cu urmtoarele restricii de integritate: cotaTva poate lua
valorile: 0, 0.09 sau 0.24
Cerine:

a)S se implementeze cele dou clase


b)La click pe Button1 s se preia cu InputBox() datele pentru o factur cu
un numr precizat de linii
c)La click pe Button2 s se afieze coninutul facturii
Vom avea:
a)Implementarea claselor
Public Class Form1
'Definesc un obiect Factura (instanta clasei Factura)
Public oFactura As New Factura
' Definirea clasei LinieFactura
Public Class LinieFactura
'Definire atribute
Private m_DenumireProdus As String
Private m_Cantitate As Decimal
Private m_Pret As Decimal
Private m_CotaTva As Decimal
' Definire proprietati
Public Property DenumireProdus As String
Get
DenumireProdus = m_DenumireProdus
End Get
Set(ByVal value As String)
m_DenumireProdus = value
End Set
End Property
Public Property Cantitate As Decimal
Get
Cantitate = m_Cantitate
End Get
Set(ByVal value As Decimal)
m_Cantitate = value
End Set
End Property
Public Property Pret As Decimal
Get
Pret = m_Pret
End Get
Set(ByVal value As Decimal)
m_Pret = value
End Set
End Property
Public Property CotaTva As Decimal
Get
CotaTva = m_CotaTva
End Get
Set(ByVal value As Decimal)
If value = 0.24 Or value = 0.09 Or value = 0 Then
m_CotaTva = value
Else

m_CotaTva = -1
MessageBox.Show("Cota diferita de 0,24, 0,09 sau 0")
End If
End Set
End Property
' Definire metode
Public Function CalculValLinie() As Decimal
Return Cantitate * Pret
End Function
Public Function CalculTvaLinie() As Decimal
Return CalculTvaLinie() * CotaTva
End Function
Public Function TotalLinie() As Decimal
Return CalculTvaLinie() + CalculTvaLinie()
End Function
End Class
' Definirea clasei Factura
Public Class Factura
'Definire atribute private individuale
Private m_NumarFactura As String
Private m_DataFactura As Date
Private m_EmitentFactura As String
Private m_TertFactura As String
' definire atribut multiplu (colectie)
Public colLiniiFactura As ArrayList
'Definire proprietati
Public Property NumarFactura As String
Get
NumarFactura = m_NumarFactura
End Get
Set(ByVal value As String)
If value <> "" Then
m_NumarFactura = value
Else
MessageBox.Show("Numar factura eronat")
m_NumarFactura = -1
End If
End Set
End Property
'Definire metode
Public Function CalculValoareFactura() As Decimal
CalculValoareFactura = 0
For Each a As LinieFactura In colLiniiFactura
CalculValoareFactura = CalculValoareFactura + a.CalculValLinie
Next
Return CalculValoareFactura
End Function
Public Function CalculTvaFactura() As Decimal
Dim wCalculTvaFactura As Decimal
wCalculTvaFactura = 0
For Each b As LinieFactura In colLiniiFactura
wCalculTvaFactura = wCalculTvaFactura + b.CalculTvaLinie
Next
Return wCalculTvaFactura
End Function
Public Function CalculTotalFactura() As Decimal
Return CalculValoareFactura() + CalculTvaFactura()
End Function

End Class

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles


Button1.Click
'Preluare antet factura
oFactura.NumarFactura = InputBox("Tastati numar Factura")
If oFactura.NumarFactura = -1 Then
MessageBox.Show("Numar factura incorect")
End
End If
If oFactura.NumarFactura <> -1 Then
Dim wNrLiniiFactura As Integer
wNrLiniiFactura = InputBox("Tastati nr. linii factura de preluat")
If wNrLiniiFactura > 0 Then
'Preiau continut factura (linii factura)
For i = 1 To wNrLiniiFactura
'Definesc un obiect LinieFactura (Instanta clasei LinieFactura)
Dim oLineFactura As New LinieFactura
'Preiau date de pe o linie
oLineFactura.DenumireProdus = MessageBox.Show("Tastati denumire produs")
oLineFactura.Cantitate = MessageBox.Show("Tastati cantitate")
oLineFactura.Pret = MessageBox.Show("Tastati pret")
oLineFactura.CotaTva = MessageBox.Show("Tastati cotaTva")
'daca datele sunt corecte le adaug in colectie
If oLineFactura.CotaTva <> -1 Then
oFactura.colLiniiFactura.Add(oLineFactura)
Else
'Fortez terminarea
oFactura.NumarFactura = -1
MessageBox.Show("Date eronate in linie Factura")
End
End If
Next
Else
MessageBox.Show("Numar linii factura eronat")
End If
End If
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
Button2.Click
'Verific daca factura este corecta
If oFactura.NumarFactura = -1 Then
MessageBox.Show("Factura eronata")
Else
'Afisez continut factura
'Afisare antet
MessageBox.Show("NumarFactura: " & oFactura.NumarFactura)
'Afisare final factura
MessageBox.Show("Total valoare factura:" & oFactura.CalculValoareFactura())
MessageBox.Show("Total Tva factura:" & oFactura.CalculTvaFactura())
MessageBox.Show("Total factura:" & oFactura.CalculTotalFactura())
End If
End Sub
End Class

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