You are on page 1of 20

Archivos y Registros

Algoritmos y Estructuras de Datos

Company

LOGO

Agenda

1. Archivos
2. Archivos de Acceso Aleatorio
3. Registros
4. Creacin, Escritura y Lectura

Archivos

Almacenamiento
permanente
manipulado por
Software.

Bit: Valor de 0/1

Byte: 8 bits. Un
carcter

Campo:
Caracteres con
significado

Registro o
Estructura:
Campos
relacionados.

Archivo: Grupo
de registros
relacionados.

Archivos

Cualquier
registro se
puede leer de
manera
independiente.
Como un CD

La lectura
debe
comenzar
desde el inicio.
Como un
Cassete.

Secuenciales

De acceso aleatorio

Archivos

Archivos de Acceso
Aleatorio

Puedo acceder
a los registros
directamente.

El acceso es
instantneo.

Se almacenan
los Bytes tal
cual.

Los registros
tienen una
longitud fija.

La data no es
legible.

Archivos de acceso
aleatorio

Registros
Contexto

Los archivos de acceso aleatorio necesitan una estructura conocida


para cada elemento de informacin.

Los registros son un nuevo tipo de dato.

Sintaxis

Estructura alumno
Dimension codigo[30];
Definir codigo como Caracter;
Dimension nombre[30];
Definir nombre como Cadena;
FinEstructura
Definir info_estudiante como alumno;

Archivos de Acceso
Aleatorio
Contexto Podemos obtener la informacin de un
registro en particular en funcin a su posicin.

Sintaxis

Leer <archivo>, <posicin>, <registro>;


Escribir <archivo>, <posicin>, <registro>;

Lectura

Leer archivo_datos, 5, un_estudiante;

Escritura

Escribir archivo_datos, 3, otro_estudiante;

Creacin y carga inicial


Estructura estudiante
Definir codigo como Entero;
Dimension nombre[15];
Definir nombre como Caracter;
Dimension apellido[15];
Definir apellido como Caracter;
Definir promedio como Real;
FinEstructura
Proceso principal

Definir contador como Entero;


Definir un_estudiante como estudiante;
Definir info_estudiantes como Archivo;
//Iniciar el archivo
FinProceso

Creacin y carga inicial


Estructura estudiante
//Definicin de estructura
FinEstructura
Proceso principal
//Definicin de variables
un_estudiante.codigo <- 0;
un_estudiante.nombre <- "";
un_estudiante.apellido <- "";
un_estudiante.promedio <- 0.0;
Abrir "estudiantes.dat" como info_estudiantes para Escribir;
Para contador <- 0 Hasta 99 Hacer
Escribir info_estudiantes, contador, un_estudiante;
FinPara
Cerrar info_estudiantes;
FinProceso

Ingresar informacin
Estructura estudiante
//Definicin de estructura
FinEstructura
Proceso principal
//Definicin de variables

Definir posicion como Entero;


Abrir "estudiantes.dat" como info_estudiantes para Actualizar;
Leer un_estudiante.codigo;
Mientras un_estudiante.codigo <> 0 Hacer
Leer un_estudiante.nombre, un_estudiante.apellido, un_estudiante.promedio;

posicion <- un_estudiante.codigo - 1;


Escribir info_estudiantes, posicion, un_estudiante;
Leer un_estudiante.codigo;
FinMientras
Cerrar info_estudiantes;

FinProceso

Leer informacin
Estructura estudiante
//Definicin de estructura
FinEstructura
Proceso principal
//Definicin de variables
Definir contador_estudiantes como Entero;
Definir posicion como Entero;
Abrir "estudiantes.dat" como info_estudiantes para Leer;
contador_estudiantes <- 0;
Mientras ~FDA(info_estudiantes) Hacer

Leer info_estudiantes, contador_estudiantes, un_estudiante;


Si un_estudiante.codigo <> 0 Entonces
Escribir un_estudiante.codigo, un_estudiante.nombre, un_estudiante.promedio;
FinSi
contador_estudiantes <- contador_estudiantes + 1;
FinMientras
Cerrar info_estudiantes;
FinProceso

Un problema
Se tienen (ya existen) los archivos:

FACTURA.DAT, que almacena para un


grupo de facturas los siguientes datos:
Nmero de factura, Nombre del cliente, RUC
del cliente y Monto facturado.
DETALLE. DAT, que almacena los detalles
de cada una de las facturas del archivo
FACTURA.DAT, los cuales consisten en:
Nmero de factura, Nombre o Descripcin del
producto, Nmero de unidades y Precio
unitario del producto.

Un problema
El monto facturado (de una factura) puede
corresponder a la adquisicin de productos
diversos, debido a esto, un mismo Nmero de
factura puede aparecer ms de una vez en el
archivo DETALLE.DAT.
Se pide presentar por cada factura los
siguientes datos: Nmero de factura, Nombre
del cliente y los productos que figuran en su
detalle (Nombre del producto, Nmero de
unidades y Precio unitario).

Plan de Accin
Definir estructuras para la Factura y el
Detalle de Facturas
Generar archivos de prueba (*)

Recorrer el archivo de facturas


Para cada factura en el archivo, ubicar los
correspondientes registros en el detalle.
Cerrar los archivos.

Definir Estructuras
Factura

Estructura factura
Definir numero_factura como Entero;
Dimension nombre_cliente[30];

Definir nombre_cliente como Caracter;


Dimension ruc_cliente[10];
Definir ruc_cliente como Caracter;
Definir monto_facturado como Real;
FinEstructura

Detalle
de
Factura

Estructura detalle
Definir numero_factura como Entero;
Dimension descripcion_producto[30];
Definir descripcion_producto como Caracter;
Definir numero_unidades como Entero;
Definir precio_unitario como Real;
FinEstructura

Cargar Facturas
SubProceso crear_archivo_facturas()
Definir archivo_facturas como Archivo;
Definir contador como Entero;
Dimension lista_facturas[2];
lista_facturas[0].numero_factura <- 1;
lista_facturas[0].nombre_cliente <- "Hugo";
lista_facturas[0].ruc_cliente <- "123";
lista_facturas[0].monto_facturado <- 50.0; //Lo mismo para el resto
Abrir "facturas.dat" como archivo_facturas para Escribir;

Para contador <-0 Hasta 1 Hacer


Escribir archivo_facturas, contador, lista_facturas[contador];
FinPara
Cerrar archivo_facturas;
FinSubProceso

Mdulo Principal
Proceso Principal

Definir archivo_facturas como Archivo;


Definir archivo_detalles como Archivo;
Definir una_factura como factura;

Definir un_detalle como detalle;


Definir contador_facturas como Entero;
Definir contador_detalle como Entero;
Abrir "factura.dat" como archivo_facturas para Lectura;
Abrir "detalle.dat" como archivo_detalles para Lectura;
//Recorrer archivos
Cerrar archivo_detalles;
Cerrar archivo_facturas;

FinProceso

Mdulo Principal
contador_facturas <- 0;
Mientras ~FDA(archivo_facturas) Hacer
Leer archivo_facturas, contador_facturas, una_factura;
Escribir una_factura.numero_factura, una_factura.nombre_cliente;
contador_detalle <- 0;
Mientras ~FDA(archivo_detalles) Hacer
Leer archivo_detalles, contador_detalle, un_detalle;
Si un_detalle.numero_factura = archivo_facturas.numero_factura Entonces
Escribir un_detalle.descripcion_producto, un_detalle.numero_unidades,

un_detalle.precio_unitario;
FinSi
FinMientras
contador_facturas <- contador_facturas + 1;
FinMientras

You might also like