Sistema de Control y Cálculo de Calificaciones Escolares en Java con Arrays
Gestión de Calificaciones de Alumnos y Generación de Boletines en Java
El siguiente programa implementa en Java la recopilación interactiva de notas para un grupo de 30 alumnos matriculados en 7 asignaturas diferentes (típicas del ciclo formativo de Informática: Sistemas, Marcas, Bases, Entornos, Programación, FOL e Inglés). El algoritmo valida la entrada por teclado, acumula las puntuaciones de cada materia y calcula tanto la media como los valores máximos, mínimos y el balance de asignaturas aprobadas y suspensas.
Código Fuente Corregido y Estructurado
import java.lang.*;
import java.util.*;
public class A30410 {
public static void main(String[] args) throws Exception {
final int NROALUMNOS = 30;
int nroAlumnos;
final int ELEMENTOS = 7;
int[] vContExamAsig = new int[ELEMENTOS];
int[] vAcuNotasExamAsig = new int[ELEMENTOS];
int indice;
String nombreAlumno;
String[] nombreAsig = {"Sistemas", "Marcas", "Bases", "Entornos", "Programación", "FOL", "Inglés"};
int codAsig, notaExamen;
char res;
int notaAsig, contAsigSuspAlu = 0, contAsigAproAlu = 0, notaMaxAlu = 0, notaMinAlu = 0;
Scanner teclado = new Scanner(System.in);
for (nroAlumnos = 1; nroAlumnos <= NROALUMNOS; nroAlumnos++) {
for (indice = 0; indice < vContExamAsig.length; indice++) {
vContExamAsig[indice] = 0;
}
for (indice = 0; indice < vAcuNotasExamAsig.length; indice++) {
vAcuNotasExamAsig[indice] = 0;
}
System.out.print("\nTeclee el nombre del alumno: ");
nombreAlumno = teclado.nextLine();
do {
System.out.print("\n\nTeclee el código de la asignatura: ");
codAsig = teclado.nextInt();
while (codAsig < 1 || codAsig > 7) {
System.out.printf("\n\nCódigo de asignatura: %d erróneo. Teclee otro código entre 1 y 7: ", codAsig);
codAsig = teclado.nextInt();
}
System.out.print("\n\nTeclee la nota del examen: ");
notaExamen = teclado.nextInt();
while (notaExamen < 1 || notaExamen > 10) {
System.out.printf("\n\nNota del examen: %d errónea. Teclee otra nota entre 1 y 10: ", notaExamen);
notaExamen = teclado.nextInt();
}
(vContExamAsig[codAsig - 1])++;
vAcuNotasExamAsig[codAsig - 1] += notaExamen;
System.out.println("\n\n¿Desea dar la nota de otro examen?");
System.in.skip(System.in.available());
res = (char) System.in.read();
res = Character.toUpperCase(res);
} while (res == 'S');
System.out.printf("\n BOLETÍN DE NOTAS DE D./Dña.: %s", nombreAlumno);
System.out.printf("\nCÓD. ASIG NOMBRE ASIGNATURA NOTA");
System.out.printf("\n--------- ------------------ ----");
for (indice = 0, contAsigSuspAlu = 0, contAsigAproAlu = 0; indice < vContExamAsig.length; indice++) {
if (vContExamAsig[indice] != 0) {
notaAsig = vAcuNotasExamAsig[indice] / vContExamAsig[indice];
System.out.printf("\n %1d %-20s %2d", (indice + 1), nombreAsig[indice], notaAsig);
if (contAsigSuspAlu == 0 && contAsigAproAlu == 0) {
notaMaxAlu = notaAsig;
notaMinAlu = notaAsig;
} else if (notaAsig < notaMinAlu) {
notaMinAlu = notaAsig;
} else if (notaAsig > notaMaxAlu) {
notaMaxAlu = notaAsig;
} else;
if (notaAsig < 5) {
contAsigSuspAlu++;
} else {
contAsigAproAlu++;
}
}
}
System.out.printf("\nNº de Asignaturas Suspensas: %1d | Nº de Asignaturas Aprobadas: %1d", contAsigSuspAlu, contAsigAproAlu);
System.out.printf("\nNota Menor: %2d | Nota Mayor: %1d", notaMinAlu, notaMaxAlu);
teclado.nextLine();
System.in.skip(System.in.available());
}
}
}
Elementos Clave del Programa
- Estructuras de datos unidimensionales (arrays): Se utilizan
vContExamAsigpara registrar la cantidad de exámenes introducidos por materia yvAcuNotasExamAsigpara sumarizar los puntos totales por materia. - Validación rigurosa de entradas: Mediante bucles
whileanidados, se impide que el usuario introduzca códigos de asignaturas fuera del rango[1, 7]o calificaciones no comprendidas entre[1, 10]. - Manejo del buffer de entrada: Se hace uso de
System.in.skip(System.in.available())para vaciar caracteres sobrantes (como saltos de línea) antes de leer respuestas de tipo carácter (char). - Estadísticas por estudiante: En cada iteración se calculan dinámicamente la nota media por asignatura procesada, el recuento de materias aprobadas y suspensas, así como la calificación máxima y mínima obtenida.