Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ArchAct
Enfrentamiento
Altas
-- - - - - AS
----- Bajas ArchAct
Modificaciones
ArchAct
Mediante el proceso de enfrentamiento ABM se realiza el mantenimiento de un
archivo, que contempla:
ALTAS: proceso que permite incorporar nuevos registros en un archivo
BAJAS: proceso que permite eliminar registros de un archivo
MODIFICACIONES: proceso que permite modificar la información almacenada en
registros de un archivo (salvo la clave)
Se desarrolla un ejemplo con los datos de los ejemplares de una biblioteca, grabados
en un archivo biblioteca
#COD. de LIBRO {campo de secuencia, clave primaria}
#CANTIDAD
#DESCRIPCION
Por otro lado se tienen los archivos:
compras, almacena los datos de los títulos adquiridos
(mismo diseño y orden de biblioteca)
eliminar, almacena los códigos de libro que se desean eliminar del archivo biblioteca
AAB2 6 xxxxxxxxxx
Altas-Modificaciones
JUT5 20 xxxxxxxxxx
Altas-Modificaciones
LJY6 9 xxxxxxxxxx Alta
MKO9 8 xxxxxxxxxx
#include <stdio.h>
#include <string.h>
struct libro { Se define 1 solo struct para libro y compras
char codigo[5];
int cant;
char descripcion[25];
};
AAB2 6 xxxxxxxxxx
Archivo eliminar
BZU7 0 xxxxxxxxxx
código
JUT5
20 xxxxxxxxxx
MKO9 BZU7
8 xxxxxxxxxx MKO9
PTR3 5 xxxxxxxxxx RR04
Bajas
Archivo actualizado
código cantidad descripción
AAB2 6 xxxxxxxxxx
JUT5 20 xxxxxxxxxx
PTR3 5 xxxxxxxxxx
#include <stdio.h>
#include <string.h>
struct libro {
char codigo[5];
int cant;
char descripcion[25];
};
struct
char
dato {
matricula[6];
Enfrentamiento struct examen {
char apellido[25]; char matricula[6];
char fecha[8]; struct exa exam;
};
};
archivo alumnos
# matricula struct exa {
struct alumno { char materia[5];
struct dato dat;
# apellido int nota;
int cantmat; };
struct exa vecmat[30];
# fecha
};
#cantmat
materia nota
#vecmat
0 1
#include <stdio.h>
#include <string.h>
struct exa {
char materia[5];
int nota;
};
struct examen {
char matricula[6];
struct exa exam;
};
struct dato {
char matricula[6];
char apellido[25];
char fecha[8];
};
struct alumno{
struct dato dat;
int cantmat;
struct exa vecmat[30];
};
void main(){
FILE *datos, *examenes, *alumnos;
struct dato rd; struct examen re; struct alumno ra; int i;
datos = fopen("datos.dat", "rb"); examenes = fopen("examenes.dat","rb"); //ctrl existencia
alumnos = fopen("alumnos",“wb");
fread(&re, sizeof(struct examen), 1, examenes); fread(&rd, sizeof(struct dato), 1, datos);
while(!feof(datos) || !feof(examenes))
if (!strcmp(rd.matricula, re.matricula)){ /* alumnos con materias rendidas */
i = 0;
while( !strcmp(rd.matricula, re.matricula)) {
ra.vecmat[i] = re.exam; i++;
fread(&re, sizeof(struct examen), 1, examenes);
}
ra.cantmat = i; /* luego del ciclo el alumno rd.matricula no tiene mas materias*/
ra.dat = rd; /* termina de cargar el registro ra, rd está en memoria*/
fwrite(&ra, sizeof(struct alumno), 1, alumnos);
fread(&rd, sizeof(struct dato), 1, datos);
} else
if (strcmp(rd.matricula,re. matricula)<0) { /*alumnos que no rinden examenes*/
ra.dat = rd; ra.cantmat = 0;
fwrite(&ra, sizeof(struct alumno), 1, alumnos);
fread(&rd, sizeof(struct dato), 1, datos);
} else /* examen que no pertenece a ningún alumno*/
fread(&re, sizeof(struct examen), 1, examenes);
fclose(datos); fclose(examenes); fclose(alumnos);
}
ORDENACION DE ARCHIVOS (mediante partición y fusión)
............................................
..........................................