Arreglos de Objetos Pantalla 1 Diagrama de Clases 2 Código Fuente Public Class Persona ' Atributos Protected cedula As Integer Protected nombre As String Protected edad As Integer Protected sexo As String Public Sub New(ByVal cedula As Integer, _ ByVal nombre As String, _ ByVal edad As Integer, _ ByVal sexo As String) Me.cedula = cedula Me.nombre = nombre Me.edad = edad Me.sexo = sexo End Sub ' Agregar Cedula Public Sub setCedula(ByVal cedula As Integer) Me.cedula = cedula End Sub ' Mostrar Cedula Public Function getCedula() As Integer Return Me.cedula End Function ' Agregar Nombre Public Sub setNombre(ByVal nombre As String) Me.nombre = nombre End Sub ' Mostrar Nombre Public Function getNombre() As String Return Me.nombre End Function ' Agregar Edad Public Sub setEdad(ByVal edad As Integer) Me.edad = edad End Sub ' Mostrar Edad Public Function getEdad() As Integer Return Me.edad End Function ' Agregar Sexo Public Sub setSexo(ByVal sexo As String) Me.sexo = sexo End Sub ' Mostrar Sexo Public Function getSexo() As String Return Me.sexo End Function End Class 3 Public Class Alumno Inherits Persona ' Atributos Private becado As Boolean Public Sub New(ByVal ByVal ByVal ByVal ByVal cedula As Integer, _ nombre As String, _ edad As Integer, _ sexo As String, _ becado As Boolean) MyBase.New(cedula, nombre, edad, sexo) Me.becado = becado End Sub ' Agregar Becado Public Sub setBecado(ByVal becado As Boolean) Me.becado = becado End Sub ' Mostrar Becado Public Function isBecado() As Boolean Return Me.becado End Function End Class 4 Public Class Instituto ' Atributos Private estudiante() As Alumno Private cant As Integer = 0 Private pos As Integer Public Function agregarEstudiante(ByVal ByVal ByVal ByVal ByVal Dim agregar As Boolean = True cedula As Integer, _ nombre As String, _ edad As Integer, _ sexo As String, _ becado As Boolean) As Boolean pos = Me.buscarEstudiante(cedula) If (pos = -1) Then ReDim Preserve estudiante(cant) estudiante(cant) = New Alumno(cedula, nombre, edad, sexo, becado) cant = cant + 1 Else agregar = False End If Return agregar End Function Public Function mostrarEstudiante(ByVal ByRef ByRef ByRef ByRef Dim mostrar As Boolean = True cedula As Integer, _ nombre As String, _ edad As Integer, _ sexo As String, _ becado As Boolean) As Boolean Me.pos = Me.buscarEstudiante(cedula) If (Me.pos <> -1) Then nombre = Me.estudiante(Me.pos).getNombre edad = Me.estudiante(Me.pos).getEdad sexo = Me.estudiante(Me.pos).getSexo becado = Me.estudiante(Me.pos).isBecado Else mostrar = False End If Return mostrar End Function Public Function modificarEstudiante(ByVal ByVal ByVal ByVal ByVal Dim modificar As Boolean = True cedula As Integer, _ nombre As String, _ edad As Integer, _ sexo As String, _ becado As Boolean) As Boolean Me.pos = Me.buscarEstudiante(cedula) If (Me.pos <> -1) Then Me.estudiante(Me.pos).setNombre(nombre) Me.estudiante(Me.pos).setEdad(edad) Me.estudiante(Me.pos).setSexo(sexo) Me.estudiante(Me.pos).setBecado(becado) Else 5 modificar = False End If Return modificar End Function Public Function listarEstudiantes() As DataTable Dim i As Integer ' Representa las filas del listado que se van a mostrar Dim dtAlumno As New DataTable Dim drAlumno As DataRow ' Crear las columnas dtAlumno.Columns.Add(New dtAlumno.Columns.Add(New dtAlumno.Columns.Add(New dtAlumno.Columns.Add(New dtAlumno.Columns.Add(New DataColumn("Cedula", GetType(Integer))) DataColumn("Nombre", GetType(String))) DataColumn("Edad", GetType(Integer))) DataColumn("Sexo", GetType(String))) DataColumn("Becado", GetType(String))) For i = 0 To cant - 1 ' Se recorre cada alumno y se carga los datos en el DataRow drAlumno = dtAlumno.NewRow drAlumno(0) = Me.estudiante(i).getCedula drAlumno(1) = Me.estudiante(i).getNombre drAlumno(2) = Me.estudiante(i).getEdad drAlumno(3) = Me.estudiante(i).getSexo If Me.estudiante(i).isBecado Then drAlumno(4) = "Si" Else drAlumno(4) = "No" End If ' Se agregar el DataRow lleno al DataTable dtAlumno.Rows.Add(drAlumno) dtAlumno.AcceptChanges() Next i Return dtAlumno End Function ' Busca al estudiante en el arreglo ' Devuelve la posición del estudiante si existe en el arrglo ' Si no existe devuelve -1 Private Function buscarEstudiante(ByVal cedula As Integer) As Integer Dim encontrado As Integer = -1 Dim i As Integer = 0 While (i < Me.cant) AndAlso (encontrado = -1) If (cedula = Me.estudiante(i).getCedula) Then encontrado = i End If i += 1 End While Return encontrado End Function End Class 6 Public Class RegistroEstudiantes ' Atributos Private IUGT As New Instituto Private cedula As Integer Private nombre As String Private edad As Integer Private sexo As String Private becado As Boolean Public Sub New() ' Llamada necesaria para el Diseñador de Windows Forms. InitializeComponent() ' Agregue cualquier inicialización después de la llamada a ' InitializeComponent(). Me.rdbAgregar.Checked = True Me.llenarComboBox() End Sub Private Sub btnEjecutar_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles btnEjecutar.Click If Me.rdbAgregar.Checked Then Me.agregarEstudiante() ElseIf Me.rdbBuscar.Checked Then Me.mostrarEstudiante() ElseIf Me.rdbModificar.Checked Then Me.modificarEstudiante() ElseIf Me.rdbListar.Checked Then Me.listarEstudiantes() End If End Sub Public Sub agregarEstudiante() If validarCampo(Me.txtCI.Text) AndAlso validarCampo(Me.txtEdad.Text) Then ' Se capturan los datos Me.cedula = Me.txtCI.Text Me.nombre = Me.txtNombre.Text Me.edad = Me.txtEdad.Text Me.sexo = Me.cmbSexo.SelectedItem.ToString Me.becado = Me.chkBecado.Checked ' Se agrega el nuevo estudiante If Me.IUGT.agregarEstudiante(Me.cedula, Me.nombre, Me.edad, Me.sexo, _ Me.becado) Then MsgBox("Se ha registrado satisfactoriamente", _ MsgBoxStyle.Information, "Registro") Else MsgBox("El usuario ya existe!!!", MsgBoxStyle.Exclamation, _ "Error de registro") End If ' Se limpia los campos limpiarCampos(True, True, True, True, True) Else MsgBox("Ingresar valores correctos!!!", MsgBoxStyle.Exclamation, _ "Error de dato") End If End Sub 7 Public Sub mostrarEstudiante() If validarCampo(Me.txtCI.Text) Then Me.cedula = Me.txtCI.Text If (Me.IUGT.mostrarEstudiante(Me.cedula, Me.nombre, Me.edad, Me.sexo, _ Me.becado)) Then Me.txtNombre.Text = Me.nombre Me.txtEdad.Text = Me.edad Me.cmbSexo.SelectedItem = Me.sexo Me.chkBecado.Checked = Me.becado Else MsgBox("El usuario NO existe!!!", MsgBoxStyle.Exclamation, _ "Error de registro") End If End If End Sub Public Sub modificarEstudiante() If validarCampo(Me.txtCI.Text) AndAlso validarCampo(Me.txtEdad.Text) Then ' Se capturan los datos Me.cedula = Me.txtCI.Text Me.nombre = Me.txtNombre.Text Me.edad = Me.txtEdad.Text Me.sexo = Me.cmbSexo.SelectedItem.ToString Me.becado = Me.chkBecado.Checked ' Se modifica los datos del Estudiante If IUGT.modificarEstudiante(Me.cedula, Me.nombre, Me.edad, Me.sexo, _ Me.becado) Then MsgBox("Se ha modificado los datos satisfactoriamente", _ MsgBoxStyle.Information, "Registro") Else MsgBox("El usuario NO existe!!!", MsgBoxStyle.Exclamation, _ "Error de registro") limpiarCampos(True, False, False, False, False) End If Else MsgBox("Ingresar valores correctos!!!", MsgBoxStyle.Exclamation, _ "Error de dato") End If End Sub Public Sub listarEstudiantes() Me.dgvListado.DataSource = Me.IUGT.listarEstudiantes Me.tamanoColumnasDataGridView() End Sub Private Sub rdbAgregar_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles rdbAgregar.CheckedChanged If Me.rdbAgregar.Checked Then activarCampos(True, True, True, True, True) End If End Sub 8 Private Sub rdbBuscar_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles rdbBuscar.CheckedChanged If Me.rdbBuscar.Checked Then activarCampos(True, False, False, False, False) End If End Sub Private Sub rdbModificar_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles rdbModificar.CheckedChanged If Me.rdbModificar.Checked Then activarCampos(True, True, True, True, True) End If End Sub Private Sub rdbListar_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles rdbListar.CheckedChanged If Me.rdbListar.Checked Then activarCampos(False, False, False, False, False) End If End Sub Private Sub llenarComboBox() ' Carga de los valores del ComboBox Me.cmbSexo.Items.Add("Masculino") Me.cmbSexo.Items.Add("Femenino") ' Se posiciona en el 1er elemento del ComboBox Me.cmbSexo.SelectedIndex = 0 Me.cmbSexo.DropDownStyle = ComboBoxStyle.DropDownList End Sub Private Sub tamanoColumnasDataGridView() Me.dgvListado.Columns.Item(0).Width Me.dgvListado.Columns.Item(1).Width Me.dgvListado.Columns.Item(2).Width Me.dgvListado.Columns.Item(3).Width Me.dgvListado.Columns.Item(4).Width Me.dgvListado.ReadOnly = True = = = = = 70 99 40 60 50 End Sub Private Function validarCampo(ByVal campo As String) As Boolean Dim valido As Boolean = True If Not IsNumeric(campo) Then valido = False End If Return valido End Function 9 Private Sub limpiarCampos(ByVal ByVal ByVal ByVal ByVal cedula As Boolean, _ nombre As Boolean, _ edad As Boolean, _ sexo As Boolean, _ becado As Boolean) If cedula Then Me.txtCI.Clear() End If If nombre Then Me.txtNombre.Clear() End If If edad Then Me.txtEdad.Clear() End If If sexo Then Me.cmbSexo.SelectedIndex = 0 End If If becado Then Me.chkBecado.Checked = False End If End Sub Private Sub activarCampos(ByVal ByVal ByVal ByVal ByVal cedula As Boolean, _ nombre As Boolean, _ edad As Boolean, _ sexo As Boolean, _ becado As Boolean) Me.txtCI.Enabled = cedula Me.txtNombre.Enabled = nombre Me.txtEdad.Enabled = edad Me.cmbSexo.Enabled = sexo Me.chkBecado.Enabled = becado End Sub Private Sub btnSalir_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnSalir.Click Me.Close() End Sub Private Sub dgvListado_CellClick(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _ Handles dgvListado.CellClick Dim fila As DataGridViewRow = dgvListado.CurrentRow Me.txtCI.Text = fila.Cells(0).Value.ToString Me.txtNombre.Text = fila.Cells(1).Value.ToString Me.txtEdad.Text = fila.Cells(2).Value.ToString Me.cmbSexo.SelectedItem = fila.Cells(3).Value.ToString If fila.Cells(4).Value.ToString = "Si" Then Me.chkBecado.Checked = True Else Me.chkBecado.Checked = False End If End Sub End Class 10