Gestión Dinámica de Registros de Alumnos: Implementación de Carga, Inserción Ordenada y Persistencia
Enviado por Anónimo y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 5,6 KB
Algoritmo de Gestión de Registros de Alumnos
1. Inicialización y Asignación de Memoria
- CLASE <- (T_ALUMNO *) MALLOC (TAM_MAXIMO * sizeof(T_ALUMNO))
- NUM_ELEM <- 0
2. Carga de Datos desde el Fichero ALUMNOS.DAT
// Leo los datos desde ALUMNOS.DAT
- PF <- FOPEN ("ALUMNOS.DAT", "R")
- SI (PF = NULL) ENTONCES
- // Si se ha producido un error al abrir el fichero
- ESCRIBIR "Error al abrir el fichero"
- SINO
- // Leer los datos
- FREAD(&ALUMNO, sizeof(T_ALUMNO), 1, PF)
- MIENTRAS (!FEOF(PF))
- SI (!FERROR(PF)) ENTONCES
- // Verificación de capacidad y redimensionamiento
- SI (NUM_ELEM = TAM_MAXIMO) ENTONCES
- // Si el array está lleno, lo amplio (Redimensionamiento)
- TAM_MAXIMO <- TAM_MAXIMO + 1
- CLASE <- (T_ALUMNO *) REALLOC(CLASE, TAM_MAXIMO * sizeof(T_ALUMNO))
- FIN_SI
- // Almacenar el registro leído
- CLASE[NUM_ELEM] <- ALUMNO
- NUM_ELEM <- NUM_ELEM + 1
- SINO
- // Si se ha producido un error de lectura
- ESCRIBIR "Error de Lectura"
- // Desactivo el indicador de error
- CLEARERR(PF)
- FIN_SI
- FREAD(&ALUMNO, sizeof(T_ALUMNO), 1, PF)
- SI (!FERROR(PF)) ENTONCES
- FIN_MIENTRAS
- // Cierro el fichero
- FCLOSE(PF)
- FIN_SI
3. Inserción Ordenada de Nuevos Registros
- LEER ALUMNO.CODIGO
- MIENTRAS (ALUMNO.CODIGO > 0)
- LEER ALUMNO.NOMBRE
- LEER ALUMNO.NOTA
- // Busco la posición donde lo voy a insertar (Búsqueda secuencial)
- POS <- 0
- MIENTRAS ( (POS < NUM_ELEM) Y (ALUMNO.CODIGO > CLASE[POS].CODIGO) )
- POS <- POS + 1
- FIN_MIENTRAS
- // Compruebo si está lleno el Array
- SI (NUM_ELEM = TAM_MAXIMO) ENTONCES
- // Redimensiono el Array
- TAM_MAXIMO <- TAM_MAXIMO + 1
- CLASE <- (T_ALUMNO *) REALLOC (CLASE, TAM_MAXIMO * sizeof(T_ALUMNO))
- FIN_SI
- // Desplazo los elementos del array desde esa posición y hasta el final una posición a la derecha
- POS_MOV <- NUM_ELEM
- MIENTRAS (POS_MOV > POS)
- CLASE[POS_MOV] <- CLASE[POS_MOV-1]
- POS_MOV <- POS_MOV – 1
- FIN_MIENTRAS
- // Introduzco el nuevo elemento en su posición
- CLASE[POS] <- ALUMNO
- NUM_ELEM <- NUM_ELEM + 1
- LEER ALUMNO.CODIGO
- FIN_MIENTRAS
4. Visualización de Datos del Array
- // Muestro los datos del array
- SI (NUM_ELEM < 1) ENTONCES
- ESCRIBIR "Error. Array Vacío"
- SINO
- POS <- 0
- MIENTRAS (POS < NUM_ELEM)
- ESCRIBIR CLASE[POS].CODIGO
- ESCRIBIR CLASE[POS].NOMBRE
- ESCRIBIR CLASE[POS].NOTA
- POS <- POS + 1
- FIN_MIENTRAS
- FIN_SI
5. Persistencia de Datos y Liberación de Memoria
- // Escribo los datos en ALUMNOS.DAT
- PF <- FOPEN ("ALUMNOS.DAT", "W")
- SI (PF = NULL) ENTONCES
- // Si se ha producido un error al abrir el fichero
- ESCRIBIR "Error al abrir el fichero"
- SINO
- // Escribir los datos
- POS <- 0
- MIENTRAS (POS < NUM_ELEM)
- // Escribir el dato POS del array en el fichero
- ALUMNO <- CLASE[POS]
- FWRITE(&ALUMNO, sizeof(T_ALUMNO), 1, PF)
- SI (FERROR(PF)) ENTONCES
- // Si se ha producido un error de escritura
- ESCRIBIR "Error de Escritura"
- // Desactivo el indicador de error
- CLEARERR(PF)
- FIN_SI
- POS <- POS + 1
- FIN_MIENTRAS
- // Cierro el fichero
- FCLOSE(PF)
- FIN_SI
- // Libero la memoria del array
- FREE(CLASE)