Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Aplicaciones de Archivos en C++

No description
by

Edgar Ricardo Palacios Rojas

on 31 August 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Aplicaciones de Archivos en C++

o_O
:´)
Diagrama de flujo de la rutina de BAJAS lógicas en un archivo secuencial
Consisten en «marcar» los registros eliminados.
Por ejemplo:
Se limpia un registro dejando en blanco todos sus campos.
Codificación de la rutina de bajas lógicas en un archivo secuencial
Diagrama de flujo de la rutina de BAJAS físicas en un archivo secuencial (compactar).
Elimina definitivamente los espacios dejados por los registros borrados lógicamente.
Modificaciones de datos en archivo secuencial
Para modificar el contenido de los campos de registro de un archivo debemos de:
Localizar previamente el registro que se desea modificar.
Capturar los nuevos valores.
Grabar los nuevos registros en la misma posición en la que estaban.
Diagrama de flujo de la rutina de MODIFICACION SECUENCIAL
3.Aplicaciones de Archivos en C++
Codificación de la rutina de MODIFICACIÓN secuencial
Se analizaran los procedimientos de inserción, consulta y eliminación de registros tanto en archivos secuenciales como en directos, así como el listado secuencial.
3.1 Declaraciones globales.
Es necesario establecer las consideraciones iniciales tales como los encabezados (*.h), las declaraciones globales del registro de productos y el alias correspondiente.

“PRODUCTO.SEC” para el archivo secuencial.
“PRODUCTO.DIR” para el archivo directo.
:)
=D
Consultas Secuenciales
:o
En este tipo de archivo se inicia el recorrido desde el primer registro almacenado y se detiene cuando se localiza el registro solicitado o cuando se encuentra el final del archivo.
</3
<3
Codificación de la rutina de consulta secuencial
O.o
U.u
n.n
Listado secuencial
(^_^)
Esta rutina es muy semejante a las consultas secuenciales, solo que en forma de listado se despliegan todos los registros lógicos que contiene el archivo. Este archivo se inicia el recorrido desde el primer registro almacenado y se detiene cuando encuentra el final del archivo.
Diagrama de flujo del listado secuencial
Codificación de la rutina de listado secuencial.
void MODIFICACION_SECUENCIAL(void)
{int no_prod;
// Variable local para el numero de producto que deseamodificar
clrscr();
cout << "
\n\rMODIFICACION DE REGISTROS DE PRODUCTOS
";
alias=fopen("
PRODUCTO.SEC
","
rb+
");
// Intenta abrir el //archivoPRODUCTO.SEC en modo de lectura/escritura
if(alias==NULL)
// Valida la existencia del archivo
{
cout << "
\n\n\n\rNo existe el archivo !!!
";
cout << "
\n\r<<< Oprima cualquier tecla para continuar >>>
";
getch();
return;}
cout <<
"\n\n\n\rNumero de producto: "
;
cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias))
// Ciclo mientras no se encuentre el final del archivo
{
if(Registro.no_prod==no_prod)
{
cout <<
"\n\rNo Prod Descripcion CantidadPrecio Garantia"
;
cout <<
"\n\r------------------------------------------------------------------------"
;
printf(
"\n\r%3d\t%30s\t%3d\t\t$%4.2f\t%c"
,Registro.no_prod,Registro.descrip,Registro.cantidad,Registro.precio,Registro.garantia);
cout << "\n\n\n\rNumero de producto: "; cin >> no_prod;fread(&Registro,sizeof(Registro),1,alias);// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"while(!feof(alias)) // Ciclo mientra no se encuentre el final delarchivo{if(Registro.no_prod==no_prod){cout << "\n\rNo Prod Descripcion CantidadPrecio Garantia";cout << "\n\r------------------------------------------------------------------------";printf("\n\r%3d\t%30s\t%3d\t\t$%4.2f\t%c",Registro.no_prod,Registro.descrip,Registro.cantidad,Registro.precio,Registro.garantia);
3.2 Archivos secuenciales en Lenguaje C++.
En este tipo de archivos se hace un recorrido secuencial para localizar la dirección del registro solicitado.
3.2.1 Altas Secuenciales.
cout <<
"\n\n\n\rAnote los nuevos datos ..."
;
cout <<
"\n\rDescripcion: "
; gets(Registro.descrip);
cout <<
"\n\rCantidad : "
; cin >> Registro.cantidad;
cout <<
"\n\rPrecio : "
; cin >> Registro.precio;
do
{
cout <<
"\n\rGarantia : "
; Registro.garantia=toupper(getche());
}
while(Registro.garantia!='S' && Registro.garantia!='N');
Se considera un número de producto que servirá para identificarlo y diferenciarlo de otros productos y no se permite que se graben dos productos con el mismo número, por lo que es necesario realizar un recorrido secuencial completo del archivo para asegurarse que no haya duplicados.
3.2.1 Diagrama de flujo de la rutina
Altas Secuenciales.
3.2.1.2 Codificación de la rutina
Altas secuenciales.
Bajas de Registros en un archivo de acceso directo (bajas lógicas)
>.<
=P
/
* Es necesario reposicionar el apuntador del archivo al principio del registro que desea modificar, ya que al leer un registro, el apuntador se posiciona en el registro siguiente La funcion ftell(alias) devuelve la posicion donde se encuentra el apuntador*/
=o
Para el ejemplo que se ha estado manejando en este archivo, NO se pueden realizar bajas físicas (únicamente bajas lógicas). Ya que existe una relación directa entre la dirección lógica y el número del producto.
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);
fwrite(&Registro,sizeof(Registro),1,alias);
// Graba el //registrocon los nuevos campos
fclose(alias);
// Cierra el archivo
cout <<
"\n\n\n\rRegistro modificado !!!"
;
cout <<
"\n\r<<< Oprima cualquier tecla para continuar >>>"
;
getch();
return;}
fread(&Registro,sizeof(Registro),1,alias);
}
cout <<
"\n\rNo se encuentra ese registro !!!"
;
fclose(alias);
// Cierra el archivo
cout <<
"\n\r<<< Oprima cualquier tecla para continuar >>>"
;
getch();
return;}
Los Registros se recorrerían a otras direcciones que no correspondieran con su numero de producto.

Dichos registros no podrán ser localizados por las rutinas de consultas, modificaciones y las mismas bajas lógicas.
Al igual que en las bajas lógicas de los archivos secuenciales, cuando se elimina un registro en forma lógica de un archivo, solo se coloca una marca especial.
=D
Bajas de registros en un archivo secuencial (bajas lógicas y bajas físicas)
Básicamente existen dos formas de eliminar registros en un archivo:
lógica y físicamente.
La diferencia radica en que cuando se elimina un registro en forma lógica de un archivo, sólo se le coloca una marca especial en alguno de sus campos que lo identifique como registro “borrado”, sin embargo, el registro sigue existiendo en el archivo y por lo tanto ocupa espacio.
En cambio en la baja física de registros, se elabora una rutina que elimine físicamente el registro del archivo
Codificación de la rutina de MODIFICACIONES directas
Diagrama de Flujo de la rutina de BAJAS lógicas directas
Las bajas lógicas consisten en "marcar" los registros eliminados.
En el siguiente ejemplo el registro borrado se "limpia", dejando en blanco todos los campos.
(colocando el valor cero en los campos numéricos y blancos en las cadenas o de tipo carácter).
Codificación de la rutina de BAJAS lógicas directas.
:/
o_X
(O.o)
<3
='c
¬¬'
RUTINA DE BAJAS LOGICAS
No se capturan los nuevos valores, si no que se les asigna valores en blanco y se graba el registro completo en la misma posición en la que se encontraba.
La diferencia entre las rutinas de bajas lógicas del archivo secuencial y el archivo directo radica en el mecanismo utilizado para localizar el registro que se desea eliminar
Codificacion de la rutina de BAJAS fisicas en un archivo secuencial(compactar)
Archivos directos en Lenguaje C++
En esta sección se analizará la manera de diseñar rutinas que manipulen
registros de productos o artículos en un archivo directo. A diferencia del archivo
secuencial en el que se hace un recorrido secuencial para localizar la dirección del
registro solicitado, en el archivo de acceso directo, se calcula la dirección física y
se posiciona el apuntador del archivo directamente en el registro solicitado usando
la función fseek.
Altas Directas
Aquí se presenta una rutina que inserta registros de productos en un archivo
directo. Se tomará el mismo ejemplo del registro de producto que se usó en el
archivo secuencial. En este caso se nombrará el archivo como “PRODUCTO.DIR”
La primera ocasión que se intente insertar registros en un archivo, éste debe
crearse; sin embargo debe cuidarse no crear el archivo cada vez que se
invoque esta rutina porque debe tenerse presente que si se crea un archivo
existente, se pierde su contenido anterior.
Diagrama de flujo de la rutina de Altas directas
Codificación de la rutina de Altas directas
DIAGRAMA DE FLUJO DE LA RUTINA CONSULTAS DIRECTAS:
DIAGRAMA DE FLUJO DE LA RUTINA MODIFICACION DIRECTA:
3.3.2.CONSULTAS DIRECTAS
DIAGRAMA DE FLUJO
DE LA RUTINA
CONSULTAS DIRECTAS
MODIFICACION DIRECTA:
Al igual que el archivo secuencial, la forma de modificar el contenido de los campos de registro de un archivo, depende de la rutina de consulta, ya qu es necesario localizar el registro a modificar.
void CONSULTA_DIRECTA(void)
{
int no_prod;//variable del producto que desea consultar
clrscr();
printf("\n\n\n\rNo existe el archivo");
printf("\n\r***Oprima cualquier tecla para continuar***");
getch();
return 0;
}
printf("\n\n\n\rNumero de producto: ");
scanf("%d",no_prod);
dir_fisica=num_prod*sizeof(Registro);//Calculo de la direccion fisica
fseek)alias,dir_fisica,SEEK_SET);//posicionar el apuntador del archivo
fread(&Registro,sizeof(Registro),l,alias);//lee el registro de tamaño de sizeof(registro) de "alias".
if(registro.no_prod==no_prod)
{
printf("\n\rno Prod descriccion cantidad precio garantia");
printf("\n\r-------------------------------");
printf("\n\r%3d\t30s\t%30s\t%3d\t\t$%4.2f\t%c"Registro.no_prod,Registro.descrip,Registro.cantidad,Registro.precio,Registro.garantia);
}
else
{
printf("\n\n\n\rNo existe el registro");
}
fclose(alias);
printf("\n\n\n\r***Oprima cualqier tecla para continuar***");
getch();
return0;
Aplicaciones de archivos
Organización de archivos
Aplicaciones de archivos
Full transcript