Jump to content

ejercicio con visual basic 2008


Recommended Posts

esto tengo hasta el momento, el programa me funciona, solo quiero saber si esta bien como lo hice, o debio ser de otra forma

 

La Clase

Public Class Libro
    Private _titulo As String
    Private _autor As String
    Private _editorial As String

    Public Property titulo As String
        Get
            Return _titulo
        End Get
        Set(ByVal value As String)
            If value <> "" Then
                _titulo = value
            End If
        End Set
    End Property

    Public Property autor As String
        Get
            Return _autor
        End Get
        Set(ByVal value As String)
            If value <> "" Then
                _autor = value
            End If
        End Set
    End Property

    Public Property editorial As String
        Get
            Return _editorial
        End Get
        Set(ByVal value As String)
            If value <> "" Then
                _editorial = value
            End If
        End Set
    End Property
    Public Sub New(ByVal xtitulo, ByVal xeditorial, ByVal xautor)
        _titulo = xtitulo
        _editorial = xeditorial
        _autor = xautor
    End Sub
End Class

aqui el formulario

Public Class Form1

    Dim objarreglo As New ArrayList
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_cargar.Click
        Dim objlibro As New Libro(txttitulo.Text, txteditorial.Text, txtautor.Text)
        cargar(objlibro.autor, objlibro.editorial, objlibro.editorial)
        limpiar()
        If False = MsgBox("¿desea cargar otro libro?", MsgBoxStyle.OkCancel, "prueba") Then
            cmd_cargar.Enabled = False
        End If

    End Sub
    Private Sub limpiar()
        txtautor.Text = ""
        txteditorial.Text = ""
        txttitulo.Text = ""
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ver_arreglo()
    End Sub
    Public Sub ver_arreglo()
        For i = 0 To objarreglo.Count - 1
            MsgBox(objarreglo.Item(i))
        Next
    End Sub
    Private Sub cargar(ByVal objautor As Object, ByVal objeditorial As Object, ByVal objtitulo As Object)
        objarreglo.Add(objautor)
        objarreglo.Add(objeditorial)
        objarreglo.Add(objtitulo)
    End Sub
End Class

muchas gracias por su tiempo y ayuda

Edited by bombero_7
Link to comment
Share on other sites

:mmm: ¿No se supone que MsgBox devuelve MsgBoxResult? Además si preguntas "¿Desea cargar otro libro?", sería más lógico que hubiese botones "Sí" y "No", en vez de "Aceptar" y "Cancelar"...

 

Lo otro es que estás usando mal el ArrayList, éste debes usarlo para guardar objetos de la clase Libro, tú lo estás usando para guardar los atributos de los objetos, o sea, si el usuario ingresó un solo libro, el ArrayList ya va a tener 3 elementos, pero sólo debería tener 1. O sea, lo correcto es: n libros ingresados, significan n elementos en el ArrayList.

 

Otras cosas:

  • Creo que deberías verificar que al menos un cuadro de texto tenga algo, supongo que un libro debe tener al menos título... :mmm:
  • No estoy seguro si será buena idea mostrar todos los libros que se han ingresado mostrando un MsgBox por cada libro. Creo que sería mejor usar un ListBox no%20se.gif

d23816180061.png

Link to comment
Share on other sites

Lo otro es que estás usando mal el ArrayList, éste debes usarlo para guardar objetos de la clase Libro, tú lo estás usando para guardar los atributos de los objetos, o sea, si el usuario ingresó un solo libro, el ArrayList ya va a tener 3 elementos, pero sólo debería tener 1. O sea, lo correcto es: n libros ingresados, significan n elementos en el ArrayList.

 

 

antes que todo muchisimas gracias a por ayudarme, de verdad se los agradesco mucho

 

 

sobre eso de guardar los objetos de la clase no lo entiendo, puedes ayudarme a entender esa parte, como los deberia usar con el arraylist, yo pense que era como lo estaba haciendo

 

 

sobre el msgbox ya lo arregle no me habia percatado de ese detalle

 

Link to comment
Share on other sites

Un ArrayList puede contener lo que sea (cualquier tipo de datos), por eso el método Add recibe como parámetro un tipo Object (en .NET, todas clases derivan de la clase Object).

 

Aquí hay un ejemplo usando una clase Persona que tiene 3 atributos: nombre, edad y si es o no donante. Si te fijas, los 2 primeros elementos que se ingresan al ArrayList son objetos guardados en variables (habitante e individuo), mientras que el tercer elemento se agrega a través de un objeto anónimo (se crea el objeto usando el operador New sin usar alguna variable de tipo Persona). Tú eliges de qué forma prefieres agregar elementos al ArrayList...

 

Public Class Form1
    Private listado As New ArrayList

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim habitante As Persona
        Dim individuo As New Persona("Juan Pérez", 43, True)

        habitante = New Persona("Óscar Tapia", 15, False)
        listado.Add(individuo)
        listado.Add(habitante)
        listado.Add(New Persona("Claudia Jara", 61, True))
    End Sub
End Class
Ahora, el ArrayList ve todos los elementos como tipo Object, así que para poder utilizarlos como el tipo original que son debes hacer una conversión explícita usando Ctype, así podrás acceder a todos los miembros (propiedades, métodos, etc.) del elemento correspondiente. Por ejemplo, para acceder al sexto elemento de un ArrayList que contiene objetos del tipo Persona tendrías que hacer algo como esto:

Ctype(listado(5), Persona)
Otra cosa, agrégale los tipos de datos a los parámetros del constructor de la clase Libro ;)
Link to comment
Share on other sites

No es tan difícil man....tienes la clase objeto lista, cada vez que crees un nuevo objeto, tienes que almacenarlo en el arrayList(acá almacenas en cada posisción de la lista, un objeto como un todo y no sus atributos por separado). Checkea el ejempo que puse arriba :tonto:

Option Strict On
 Imports System
 Imports System.Collections
 
 Public Class Employee
     Private myEmpID As Integer

     Public Sub New(ByVal empID As Integer)
         Me.myEmpID = empID
     End Sub 'New

     Public Overrides Function ToString( ) As String
         Return myEmpID.ToString( )
     End Function 'ToString

     Public Property EmpID( ) As Integer
         Get
             Return myEmpID
         End Get
         Set(ByVal Value As Integer)
             myEmpID = Value
         End Set
     End Property
 End Class 'Employee

 Class Tester
     Shared Sub Main( )
         Dim empArray As New ArrayList( )
         Dim intArray As New ArrayList( )

         Dim i As Integer
         For i = 0 To 4
             empArray.Add(New Employee(i + 100))
             intArray.Add((i * 5))
         Next i
         For Each i In intArray
             Console.Write("{0} ", i.ToString( ))
         Next i

         Console.WriteLine(ControlChars.Lf)
         Dim e As Employee
         For Each e In empArray
             Console.Write("{0} ", e.ToString( ))
         Next e

         Console.WriteLine(ControlChars.Lf)
         Console.WriteLine("empArray.Capacity: {0}", empArray.Capacity)
     End Sub
 End Class

Si te fijas crean un empleado con un atributo idEmpleado y los van almacenado en un arrayList. Lo tuyo debiese ser lo mismo o muy similar, dinos en que parte topas :notonto:

 

Saludos :krider:

Link to comment
Share on other sites

muchas gracias, logre hacerlo al fin, se lo presente al profe y dijo que estaba bien como lo hice, el tema era que en el ejercicio el profe puso usar arraylist (y yo supuse que era ocupar la clase arraylist) y nada que ver, era simplemente crear un arreglo (ejem. dim arreglo(2,2) as string) y nada mas el resto era lo que ya habia realizado en la clase y formulario

 

 

 

les estoy muy agradecido por su tiempo y ayuda =)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...