Un profesor en una institución educativa puede tener una carga académica de hasta cuatro cursos, para lo cual necesita una aplicación que permita controlar las notas de todos sus alumnos, en donde se permita registrar el nombre completo del alumno, escoger el curso, ingresar sus cuatro notas (Practica Calificada, Examen Parcial, Trabajo Práctico y Examen Final).
Tener en cuenta:
- El número de registro de notas debe ser automática y sólo se mostrará al registrarlo en la lista.
- Los cursos Algoritmia, Ofimática, Base de Datos y Análisis de Sistemas deberán mostrarse en un
cuadro combinado.
- Se debe validar todo ingreso, en especial las notas, ya que sólo se debe permitir el ingreso de 0a 20.
En caso el alumno sea ingresado registrado en el mismo curso se deberá mostrar un mensaje como se muestra en la Figura.
- Deberá mostrar los alumnos registrados por medio de un procedimiento de listado, los datos a mostrar son el número de registro generado automáticamente, el nombre del alumno, el nombre del curso, el promedio y la condición del alumno ( Aprobado y Desaprobado) según su promedio. Al final de cada registro se debe mostrar un mensaje como se muestra en la Figura.
- Deberá mostrar el registro según el turno en la cola, todo esto dentro de la lista de registros.
- Se debe permitir la búsqueda de un determinado alumno para esto se debe solicitar al usuario el
nombre del alumno y mostrar sus datos en la lista de registros.
Solución:
- Archivo > Nuevo Proyecto. Seleccione Aplicación de Windows Forms desde la plantilla Visual
Basic y finalmente asigne el nombre pjColas. - Ahora le asignaremos las propiedades necesarias a los objetos contenidos dentro del Formulario:
Form1(Archivo) | (Name) frmRegistro |
Form1(Objeto) | Text SISTEMA DE CONTROL DE NOTAS Size 567,605 |
Label1 | Text REGISTRO DE NOTAS |
Label2 | Text NOMBRES Y APELLIDOS |
Label3 | Text CURSO |
Label4 | Text Practica |
Label5 | Text Parcial |
Label6 | Text Trabajo |
Label7 | Text Final |
GroupBox1 | Text Registro de Notas |
Button1 | (Name) btnListar Text LISTAR |
Button2 | (Name) btnMostrar Text MOSTRAR |
Button3 | (Name) btnBuscar Text BUSCAR |
Button4 | (Name) btnrRegistrar Text REGISTRAR |
Button5 | (Name) btnSalir Text SALIR |
ListView1 | (Name) lvRegistro |
TextBox1 | (Name) txtNombres |
TextBox2 | (Name) txtPractica |
TextBox3 | (Name) txtParcial |
TextBox4 | (Name) txtTrabajo |
TextBox5 | (Name) txtFinal |
ComboBox1 | (Name) cboCurso |
- Ahora crearemos la clase Alumno:Clic derecho sobre pjColas > Agregar > Clase, como se muestra en la imagen.
En el punto uno de declaran los atributos de la clase Alumno. En el punto dos se implementan las Propiedades por cada atributo de la clase.
4. Para tener un mejor control de los procesos crearemos un Módulo llamado misFunciones que permitirá administrar todas las funciones o procedimientos que necesitamos para la solución de la aplicación. Para esto deberá presionar clic derecho sobre el proyecto > Agregar > Modulo y asígnele el nombre como se muestra en la imagen posterior.
Ahora explicaremos los puntos especificados en el módulo misFunciones:
En el punto uno se implementa el código que permite agregar los cursos al cuadro combinado, hay que tener en cuenta que el módulo no reconoce a los objetos contenidos dentro del formulario; por lo tanto, se tiene que hacer una referencia a la clase frmRegistro por cada objeto que lo para ahorrar líneas de código se implementó la instrucción With que resume la Iínea de acceso con sólo colocar un punto.
En el punto dos se implementa el código que permite configurar la cabecera de lista donde se imprimirán los alumnos en forma de registro.
En el punto tres se implementa el código que permite capturar los valores ingresados desde el formulario.
En el punto cuatro se implementa el código que permite validar los datos ingresados en el formulario, hay que tener en cuenta que esta vez debemos controlar el rango de números ingresados en las cajas de notas ya que deberán ser de 0 a 20, pero no descuidar que deben ser números y no otros caracteres.
Y en el caso que el usuario no seleccione un curso del cuadro combinado deberá ser controlado por su índice:
En el punto cinco se implementa la función calculaPromedio que tiene la misión de devolver el promedio de las cuatro notas ingresadas en el formulario. Usamos la función Round para redondear el promedio.
En el punto seis se implementa la función determinaCondicion que está encargada de devolver el promedio de aprobado o desaprobado según el promedio calculado en la función calculaPromedio. No olvide que para determinar que está aprobada su nota debe ser mayor o igual a 13.
5. Ahora implementaremos el código fuente del formulario, hay que tener en cuenta que existe un módulo que tiene agrupado las funciones o procedimientos y que para hacer la referencia a ellos sólo deberá anteponer el nombre del módulo o simplemente llamarlo como si se hubiera implementado en el formulario.
Explicaremos los puntos especificados en el código fuente del formulario:
En el punto uno se declara la variable orden para generar el número de orden en que se registra un determinado alumno y también se declara el objeto cAlumnos de la clase Cola (Queue) este último tiene la misión de almacenar los registros de los alumnos, tenga que en cuenta que dicho registro deberá estar basado en la clase Alumno, por eso se envía como parámetro el nombre de la clase al especificar la clase Queue.
En el punto dos se implementa la función que devuelve el número de orden autogenerado, este incrementara en uno cada vez que sea registrado un alumno correctamente.
En el punto tres se implementa el código que permitirá limpiar las cajas de texto y el cuaderno combinado, esta vez usamos la cláusula Nothing para representar el vacío del control.
En el punto cinco, una vez se preparados las funciones y procedimientos necesarios para el formulario, ahora debemos colocar el código dentro de los objetos que tendrán un proceso en la aplicación, en este caso se procedió a dar doble clic en el formulario y colocar el siguiente código:
En el evento Load del formulario se llama a los procedimiento configuraLista que permite mostrar una cabecera adecuada y llenaCombo que permite llenar los cursos al cuadro combinado, recuerde que estos procedimientos se encuentran en el módulo misFunciones por eso siempre se antepone.
En el punto seis se implementa el código que permitirá registrar un alumno a la cola cAlumnos, se crea un objeto llamado objAlumno de la clase Alumno, luego se valida los valores en caso la validación devuelva una cadena vacía entonces se podrá capturar los valores y enviarlos a la clase por medio del objeto objAlumno.
Luego tenemos que buscar si el alumno ya se había registrado antes en el mismo curso, para esto debemos recorrer la cola cAlumnos por medio de la estructura For Each y se condiciona que el nombre (misAlumnos.nombres) y el nombre del curso (misAlumnos.curso) no se hayan registrado antes, si así fuera se envía un mensaje y lo expulsa del procedimiento.
En caso no haya encontrado coincidencias con respecto al nombre del alumno y el curso se procederá a ingresarlo a la cola cAlumnos enviando un mensaje de confirmación y llenándolo en la lista por medio del procedimiento listado explicado anteriormente, también se limpian los controles llamando al procedimiento limpiaControles implementado en el Módulo misFunciones todo esto para un nuevo registro de alumno.
En el punto siete se llama al procedimiento listado dentro del botón Listar, este tiene la misión de devolver los registros almacenados en la cola.
En el punto ocho se implementa el codigo del buscado de alumnos, en primer lugar debemos saber a que alumno buscamos; por lo tanto , necesitamos de la función InputBox que permite obtener un valor externo a la aplicación solicitando en este caso el nombre del alumno a buscar y lo captura dentro de la variable Alum de tipo String.
Se condiciona el valor de la variable Alumno si esta vacía (Nothing) se le envía un mensaje de error de ingreso caso contrario se busca el nombre por medio de la estructura For Each dentro de la colección Alumnos.
La comparación se debe realizar entre el nombre del alumno registrada en la cola cAlumnos y el nombre ingresado en la variable Alum, una vez encontrado el alumno se envían sus valores a la lista lvRegistro y se expulsa del procedimiento para poder finalizar el For Each.
En el punto nueve se muestra directamente el alumno obtenido mediante la propiedad Peek que según teoría esta propiedad sólo obtiene el primer registro de alumnos. La ventaja de Peek es que sólo devuelve y no elimina lo devuelto.