SlideShare una empresa de Scribd logo
1 de 37
ARCHIVOS SECUENCIALES INDEXADOS
¿Alguna vez has buscado el teléfono de una
persona en la guía telefónica?
Cuando buscas un número telefónico no
buscas secuencialmente desde los nombres
cuya inicial es “a” hasta la “z” lo cual te
llevaría mucho tiempo, si no que abres la guía
por la letra inicial del nombre.
Por ejemplo:
Si desearas buscar “Mario”, abrirías la guía
por la letra “m” y buscarías la cabecera de
páginas hasta encontrar la página más
próxima al nombre, buscando nombre a
nombre hasta encontrar “Mario”.
Como veras la guía es un ejemplo típico de
archivo secuencial indexado con dos niveles
de índices:
1) El nivel superior, para las letras iniciales.
2) El nivel menor, para las cabeceras de
páginas.
Este método contiene dos archivos para
almacenar información relacionada.
Índice: Contiene un dato que identifica a la
información.
Archivo de datos: Contiene toda la información
guardada.
Descripción:
Área de
índices
Área
principal
Archivo de
desbordamiento u
Overflow
1. Área de índices:
Los registros de esta área están formados por
dos campos que permiten identificar cada
registro de forma única:
 El primero contiene una clave del último registro de cada
bloque.
 El segundo contiene el apuntador al archivo principal.
Por ejemplo, si se quieren grabar los estudiantes de cierta
escuela en un archivo secuencial indexado, el campo índice que
se puede elegir es el nombre del estudiante (también se puede
elegir el número de carnet del estudiante).
2. Área Principal:
Es la parte del fichero donde se guardan
los registros ordenados por el valor del
campo “clave”. Contiene un campo que
apunta al archivo de desbordamiento el cual
sirve para insertar registros.
Su acceso se realiza mediante dos
operaciones:
 Primero, buscando en el bloque del registro.
 Luego analiza secuencialmente ese bloque hasta
localizar el registro deseado.
3. Área de Desbordamiento u Overflow:
Tras completar el área primaria, los registros
añadidos posteriormente que no pueden ser
realizadas en el área primaria, serán enviados al
área de overflow.
En este los registros se presentan como una
lista encadenada, en que el puntero al próximo
registro está compuesto por la pista y el lugar
que ocupa el registro dentro de la pista.
Esta lista se mantiene ordenada por clave.
1)
2)
3)
Ejemplo:
Ventajas
Búsqueda mas rápidas gracias a la utilización
de un índice.
Se pueden actualizar los registros en el mismo
fichero nuevo para el proceso de
actualización.
Inconvenientes
Ocupa más espacio en el disco que los ficheros
secuenciales, debido al uso del área de
índices.
Tiende tendencias a que aumente el tiempo
medio de acceso a los registros, cuando se
producen muchas altas nuevas con claves que
hay que intercalar entre las existencias, ya que
aumenta el área de overflow.
Proceso de un Archivo Secuencial
Indexado
Al diseñar un archivo secuencial indexado,
lo primero que hay que decidir es cuál va a ser
el campo clave. Los registros han de ser
grabados en orden secuencial, y
simultáneamente a la grabación de los
registros, el sistema crea los índices en orden
secuencial ascendente del contenido del
campo clave.
Se desarrollan las operaciones (altas, bajas,
consultas…) para un archivo con esta
organización. También es necesario considerar
el inicio y la salida de la aplicación que
procesa un archivo indexado, para cargar y
descargar, respectivamente la tabla de índices.
Tipos de datos
Se declaran dos tipos de estructuras para
representar el registro de datos y el índice
respectivamente:
struct estudiante {
int carnet;
string nombre; };
struct index{
int carnet;
int posicion; };
 Esta declaración de la variable para switch contiene la
variable para almacenar datos de la estructura
estudiante y la variable para almacenar indice y
almacenar temporalmente (aux), durante la busqueda.
int main(){
int opcion, bus;
estudiante alumno, auxi;
index indice, aux;
Creación
 A continuación se abre un do while para repetir el menú cada vez que sea
necesario para realizar las distintas operaciones del programa.
do{
system("cls");
 Declaramos el archivo para almacenar datos del área principal.
ofstream dat("datos.txt", ios::binary | ios::app);
 Declaramos el archivo para almacenar datos y clave del área de índice.
ofstream ind("index.txt", ios::binary | ios::app);
 Declaramos el archivo para buscar datos .
ifstream indic("index.txt", ios::binary);
remove("datos.txt");
 Se coloca un cout con la intención de colocar un texto de bienvenida a todo
usuario que ejecute el programa.
cout<<"*** BIENVENIDOS ***"<<endl<<endl;
 Se crea los cout respectivos para mostrar un menú de opciones para el switch que
hemos declarado anteriormente asi a la hora de ejecutar el programa, el usuario
pueda seleccionar la opción que necesite.
cout<<"1. Ingresar datos de estudiante"<<endl;
cout<<"2. Buscar datos de estudiante"<<endl;
cout<<"3. Borrar registros"<<endl;
cout<<"4. Salir del programa"<<endl;
 En las siguientes líneas colocamos un cout, con la intención de mostrar en la
consola un texto indicando la selección de una opción. Luego se agrega un cin
para indicar donde se almacena la opción que se escriba o indique.
cout<<endl<<"Seleccione una opcion: ";
cin>>opcion;
cout<<endl;
 Este if es para que entre al switch solo si va a ser usado con la condición que el
número de opción este entre 1 (ingresar) y 3 (borrar).
if(opcion>0 && opcion<4){
 Inicio del switch.
switch(opcion){
 Inicia con opción uno en caso de ser seleccionado para ingresar datos.
case 1:
 Esta condición sirve para ver si los archivos a los cuales vamos a escribir se abren
correctamente.
if(!dat && !ind){
cout<<"Error al abrir archivo"<<endl;
}else{
 En caso de que se ejecute o se abra el archivo sin ningún problema
entraría al siguiente paso.
 En estas líneas de código se hace uso del cout que muestra en la consola
el texto dando instrucciones sobre el ingreso del carnet y el cin para
almacenar la información en la variable alumno. Esto hace que podamos
ingresar datos y almacenarlos en la variable alumno.
cout<<"Ingrese carnet: ";
cin>>alumno.carnet;
cout<<endl;
 En las siguientes líneas abrimos un while llamando y determinando la
cantidad de bites que ocupa cada bloque de información.
while(!indic.eof()){
indic.read((char*) &aux, sizeof(struct index));
 Creamos un if.
if (alumno.carnet==aux.carnet){
cout<<"El archivo ya existe, Posicion: "<<aux.posicion;
cout<<endl;
bus=10;
 cierra if
}
 cierra while
}
 cierra archivo indc de busqueda
indic.close();
 Abrimos un if .
if(bus!=10){
 A continuación se crean las siguientes líneas de código para poder pedir, ingresar y
almacenar la información de cada alumno.
cout<<"Ingrese nombre: ";
cin>>alumno.nombre;
cout<<endl;
cout<<"Ingrese edad: ";
cin>>alumno.edad;
cout<<endl;
cout<<"Ingrese carrera: ";
cin>>alumno.carrera;
cout<<endl;
 En la siguiente línea persistimos la estructura en el archivo creado para datos.
dat.write((char*) &alumno, sizeof(struct estudiante));
 En esta línea se cumple con la función de colocar el curso al final del archivo para
ver la ubicación.
dat.seekp(0, ios::end);
 Se le asigna a la variable indice el valor del campo clave.
indice.carnet=alumno.carnet;
 Se determina la posición dividiendo entre el tamaño del archivo para asi nos da
valores desde 1
indice.posicion=dat.tellp()/sizeof(struct estudiante);
 Persistimos la estructura del indice en el archivo.
ind.write((char*) &indice, sizeof(struct index));
 Está línea nos muestra la posición en la que se guarda la estructura.
cout<<"Guardado en posicion: "<<"["<<indice.posicion<<"]"<<endl;
 Así mismo se debe de cerrar ambos archivos al ya haber terminado de
ingresar datos y haber guardado la estructura y esto se logra haciendolo
de la siguiente forma:
dat.close();
ind.close(); }
 La siguiente línea solo detiene el programa y el break finaliza el caso.
system("PAUSE"); break;
 Y cerramos if en case 1.
}
 Empieza el caso 2 el de búsqueda de archivo.
case 2:
 Se coloca una variable que guarda lo que queramos buscar. En este caso la
clave va a ser el carnet.
int buscar;
cout<<"Escriba carnet de alumno a buscar: ";
cin>>buscar;
 Abrimos un while que va a repetir mientras no sea el final del archivo.
while(!indic.eof()){
 La siguiente línea permite que se lea el archivo y guarda en variable aux.
indic.read((char*) &aux, sizeof(struct index));
 Se abre un if comparando si lo que se busca es igual a lo de la variable aux.
if (buscar==aux.carnet){
 Si fuere igual se escribiría lo en la consola lo siguiente y si no fuere así
sigue hasta encontrarlo .
cout<<endl<<"POSICION: "<<aux.posicion;
cout<<endl<<endl;
 Colocamos una variable de tipo ifstream para leer el archivo , en el cual se
encuentra la información que buscamos.
ifstream dato("datos.txt", ios::binary);
bus=aux.posicion-1;
dato.seekg(sizeof(struct estudiante)*bus, ios::beg);
dato.read((char*) &auxi, sizeof(struct estudiante));
 En las siguientes líneas llamamos a cada variable de alumno
para poder mostrar la información del alumno que indique
el usuario.
cout<<"Carnet: "<<auxi.carnet<<endl;
cout<<"Nombre: "<<auxi.nombre<<endl;
cout<<"Edad: "<<auxi.edad<<endl;
cout<<"Carrera: "<<auxi.carrera<<endl;
dato.close();
 Luego debemos de detener el programa por un momento y
eso lo logramos colocando la siguiente línea.
system("PAUSE");
 Como siguiente paso cerramos if comparación
}
 Cerramos while de final del archivo.
}
 Al finalizar la operación se cierra el archivo para la búsqueda.
indic.close();
 se cierra el casa dos.
break;
 Empieza el caso 3 que nos permitirá eliminar datos.
case 3:
bus=0;
if(bus==0){
 Se crean variables de tipo ifstream para lectura con la
intención de abrir los archivos de datos e indíce y
poder realizar el proceso de eliminación de datos.
ifstream eliminar("datos.txt", ios::binary);
ifstream elim_ind("index.txt", ios::binary);
ofstream temporal("temp.txt", ios::binary | ios::out);
ofstream temp_ind("tempi.txt", ios::binary |
ios::out);
 Creamos un if el cual nos mostrara dos opciones indicándonos si
hay error al abrir el archivo o de lo contrario pasaría a la búsqueda
de la información que va a eliminarse.
if(!eliminar || !elim_ind){
cout<<"Error al abrir el archivo"<<endl;
}else{
cout<<"Ingrese el numero de carnet del alumno que desea borrar:
";
cin>>opcion;
while(!eliminar.eof()){
eliminar.read((char*) &auxi, sizeof(struct estudiante));
 A continuación creamos un if para mostrar un texto en la consola
indicando la eliminación del archivo del Área Principal..
if(auxi.carnet==opcion){
cout<<"El archivo se ha eliminado de datos"<<endl;
}else{
temporal.write((char*) &auxi, sizeof(struct estudiante));
}
}
 A continuación se realiza el proceso para la eliminación de los datos en el
Área de Índice.
while(!elim_ind.eof()){
elim_ind.read((char*) &aux, sizeof(struct index));
if(aux.carnet==opcion){
cout<<"El archivo se ha eliminado de indice"<<endl;
}else{
temp_ind.write((char*) &aux, sizeof(struct index));
}
}
}
 En las siguientes líneas finalizamos el proceso de eliminación de
datos.
eliminar.close();
temporal.close();
elim_ind.close();
temp_ind.close();
}
remove("datos.txt");
remove("index.txt");
rename("temp.txt", "datos.txt");
rename("tempi.txt", "index.txt");
 La siguiente línea detiene el programa un momento.
system("PAUSE"); break;
default: break;
 Cerramos switch.
}
 Cerramos if para entrar a switch
}
} while(opcion>0 && opcion!=4);
 La condición del do while es que se va a repetir el menú mientras la variable
opción se mayor a cero(0) y también sea diferente de 4, en caso sea 0 o cuatro se
sale del programa
system("PAUSE");
 Aquí finaliza el programa
}

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

ARCHIVOS LENGUAJE C
ARCHIVOS LENGUAJE CARCHIVOS LENGUAJE C
ARCHIVOS LENGUAJE C
 
Vb II, Unidad 2, Manejo De Archivos
Vb II, Unidad 2, Manejo De ArchivosVb II, Unidad 2, Manejo De Archivos
Vb II, Unidad 2, Manejo De Archivos
 
Manejo de archivos en c++
Manejo de archivos en c++Manejo de archivos en c++
Manejo de archivos en c++
 
Archivos en C
Archivos en CArchivos en C
Archivos en C
 
Ficheros C++
Ficheros C++Ficheros C++
Ficheros C++
 
(86)resumen visual basic
(86)resumen visual basic(86)resumen visual basic
(86)resumen visual basic
 
Archivos C++
Archivos C++Archivos C++
Archivos C++
 
Gestion de archivos
Gestion de archivosGestion de archivos
Gestion de archivos
 
Archivos en C++
Archivos en C++Archivos en C++
Archivos en C++
 
Manejo archivos
Manejo archivosManejo archivos
Manejo archivos
 
Utilizacion de archivos en Dev C++
Utilizacion de archivos en Dev C++Utilizacion de archivos en Dev C++
Utilizacion de archivos en Dev C++
 
Grupo nro4ficheros
Grupo nro4ficherosGrupo nro4ficheros
Grupo nro4ficheros
 
Archivo secuencial indexado
Archivo secuencial indexadoArchivo secuencial indexado
Archivo secuencial indexado
 
Clase06 25-06-12
Clase06 25-06-12Clase06 25-06-12
Clase06 25-06-12
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++
 
Lectura y-escritura-desde-archivos
Lectura y-escritura-desde-archivosLectura y-escritura-desde-archivos
Lectura y-escritura-desde-archivos
 
Archivos secuenciales indexados c++
Archivos secuenciales indexados c++Archivos secuenciales indexados c++
Archivos secuenciales indexados c++
 
Flujos y archivos
Flujos y archivosFlujos y archivos
Flujos y archivos
 
Archivos en c clase unsam
Archivos en c clase unsamArchivos en c clase unsam
Archivos en c clase unsam
 
manualitoRodolfo
manualitoRodolfomanualitoRodolfo
manualitoRodolfo
 

Destacado

Archivos Secuenciales Indexados
Archivos Secuenciales IndexadosArchivos Secuenciales Indexados
Archivos Secuenciales Indexadosjennifergu17
 
Archivo Secuencial-Indexado
Archivo Secuencial-IndexadoArchivo Secuencial-Indexado
Archivo Secuencial-Indexadoluismy_martinez
 
Archivos secuenciales
Archivos secuencialesArchivos secuenciales
Archivos secuencialessekt07
 
Ficheros con organización secuencial indexada
Ficheros con organización secuencial indexadaFicheros con organización secuencial indexada
Ficheros con organización secuencial indexadaFportavella
 
Exposicion organización directa
Exposicion organización directaExposicion organización directa
Exposicion organización directaTiFoN87
 
Administración de recursos de datos
Administración de recursos de datosAdministración de recursos de datos
Administración de recursos de datoseliizabeth_ha
 
Introduccion a la logica
Introduccion a la logicaIntroduccion a la logica
Introduccion a la logicaGustavo Flores
 
Archivo secuencial-indexado
Archivo secuencial-indexadoArchivo secuencial-indexado
Archivo secuencial-indexadoAleizapata
 
Tipos de organizacion
Tipos de organizacionTipos de organizacion
Tipos de organizacionGisela Fierro
 

Destacado (12)

Archivos Secuenciales Indexados
Archivos Secuenciales IndexadosArchivos Secuenciales Indexados
Archivos Secuenciales Indexados
 
Archivo Secuencial-Indexado
Archivo Secuencial-IndexadoArchivo Secuencial-Indexado
Archivo Secuencial-Indexado
 
Archivo Secuencial
Archivo SecuencialArchivo Secuencial
Archivo Secuencial
 
RECURSO DE DATOS
RECURSO DE DATOSRECURSO DE DATOS
RECURSO DE DATOS
 
Archivos secuenciales
Archivos secuencialesArchivos secuenciales
Archivos secuenciales
 
Organización aleatoria o indirecta
Organización aleatoria o indirectaOrganización aleatoria o indirecta
Organización aleatoria o indirecta
 
Ficheros con organización secuencial indexada
Ficheros con organización secuencial indexadaFicheros con organización secuencial indexada
Ficheros con organización secuencial indexada
 
Exposicion organización directa
Exposicion organización directaExposicion organización directa
Exposicion organización directa
 
Administración de recursos de datos
Administración de recursos de datosAdministración de recursos de datos
Administración de recursos de datos
 
Introduccion a la logica
Introduccion a la logicaIntroduccion a la logica
Introduccion a la logica
 
Archivo secuencial-indexado
Archivo secuencial-indexadoArchivo secuencial-indexado
Archivo secuencial-indexado
 
Tipos de organizacion
Tipos de organizacionTipos de organizacion
Tipos de organizacion
 

Similar a Archivos secuenciales indexados UMG grupo 3

Archivos secuenciales indexados
Archivos secuenciales indexadosArchivos secuenciales indexados
Archivos secuenciales indexadosRené Folgar Lemus
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSDarwin Durand
 
Archivos de Registros
Archivos de RegistrosArchivos de Registros
Archivos de RegistrosJavier Rivera
 
Temas programacion java_3
Temas programacion java_3Temas programacion java_3
Temas programacion java_3Wally IG
 
Lectura y Grabacion de los campos de un Archivo
Lectura y Grabacion de los campos de un ArchivoLectura y Grabacion de los campos de un Archivo
Lectura y Grabacion de los campos de un ArchivomanuelRodriguez695
 
Desarrollo android - 5 - almacenamiento de datos
Desarrollo android  -  5 - almacenamiento de datosDesarrollo android  -  5 - almacenamiento de datos
Desarrollo android - 5 - almacenamiento de datosEmilio Aviles Avila
 
Lectura y Escritura de archivos a MatLab
Lectura y Escritura de archivos a MatLabLectura y Escritura de archivos a MatLab
Lectura y Escritura de archivos a MatLabOswaldo Carlosama
 
Archivos secuenciales indexados
Archivos secuenciales indexadosArchivos secuenciales indexados
Archivos secuenciales indexadosaabnercardona12
 
Tema 10 www.fresymetal.com
Tema 10 www.fresymetal.comTema 10 www.fresymetal.com
Tema 10 www.fresymetal.comFresyMetal
 
Working with Files, Streams, and Serialization.pdf
Working with Files, Streams, and Serialization.pdfWorking with Files, Streams, and Serialization.pdf
Working with Files, Streams, and Serialization.pdfeudilac1
 
Archivos secuenciales-indexados (Diego Ramirez UMG).
Archivos secuenciales-indexados (Diego Ramirez UMG).Archivos secuenciales-indexados (Diego Ramirez UMG).
Archivos secuenciales-indexados (Diego Ramirez UMG).dmrc17
 
Compilador concatenacion
Compilador concatenacionCompilador concatenacion
Compilador concatenacionjessy Cueva
 
Actividad 03.1 unix essentials file system basics.
Actividad 03.1 unix essentials  file system basics.Actividad 03.1 unix essentials  file system basics.
Actividad 03.1 unix essentials file system basics.RastaAliria
 

Similar a Archivos secuenciales indexados UMG grupo 3 (20)

Archivos secuenciales indexados
Archivos secuenciales indexadosArchivos secuenciales indexados
Archivos secuenciales indexados
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
 
Archivos de Registros
Archivos de RegistrosArchivos de Registros
Archivos de Registros
 
Temas programacion java_3
Temas programacion java_3Temas programacion java_3
Temas programacion java_3
 
Lab archivos
Lab archivosLab archivos
Lab archivos
 
Lectura y Grabacion de los campos de un Archivo
Lectura y Grabacion de los campos de un ArchivoLectura y Grabacion de los campos de un Archivo
Lectura y Grabacion de los campos de un Archivo
 
Archivos de datos en C
Archivos de datos en CArchivos de datos en C
Archivos de datos en C
 
Desarrollo android - 5 - almacenamiento de datos
Desarrollo android  -  5 - almacenamiento de datosDesarrollo android  -  5 - almacenamiento de datos
Desarrollo android - 5 - almacenamiento de datos
 
Acceso a datos
Acceso a datosAcceso a datos
Acceso a datos
 
ARCHIVOS
ARCHIVOS ARCHIVOS
ARCHIVOS
 
Lectura y Escritura de archivos a MatLab
Lectura y Escritura de archivos a MatLabLectura y Escritura de archivos a MatLab
Lectura y Escritura de archivos a MatLab
 
Archivos secuenciales indexados
Archivos secuenciales indexadosArchivos secuenciales indexados
Archivos secuenciales indexados
 
02 introduccion a python
02 introduccion a python02 introduccion a python
02 introduccion a python
 
7 manejo de archivos
7 manejo de archivos7 manejo de archivos
7 manejo de archivos
 
2-Archivos.ppt
2-Archivos.ppt2-Archivos.ppt
2-Archivos.ppt
 
Tema 10 www.fresymetal.com
Tema 10 www.fresymetal.comTema 10 www.fresymetal.com
Tema 10 www.fresymetal.com
 
Working with Files, Streams, and Serialization.pdf
Working with Files, Streams, and Serialization.pdfWorking with Files, Streams, and Serialization.pdf
Working with Files, Streams, and Serialization.pdf
 
Archivos secuenciales-indexados (Diego Ramirez UMG).
Archivos secuenciales-indexados (Diego Ramirez UMG).Archivos secuenciales-indexados (Diego Ramirez UMG).
Archivos secuenciales-indexados (Diego Ramirez UMG).
 
Compilador concatenacion
Compilador concatenacionCompilador concatenacion
Compilador concatenacion
 
Actividad 03.1 unix essentials file system basics.
Actividad 03.1 unix essentials  file system basics.Actividad 03.1 unix essentials  file system basics.
Actividad 03.1 unix essentials file system basics.
 

Último

Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...
Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...
Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...ssuser646243
 
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...esandoval7
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para PlataformasSegundo Silva Maguiña
 
Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEANDECE
 
SEMANA 6 MEDIDAS DE TENDENCIA CENTRAL.pdf
SEMANA  6 MEDIDAS DE TENDENCIA CENTRAL.pdfSEMANA  6 MEDIDAS DE TENDENCIA CENTRAL.pdf
SEMANA 6 MEDIDAS DE TENDENCIA CENTRAL.pdffredyflores58
 
Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.ALEJANDROLEONGALICIA
 
Revista estudiantil, trabajo final Materia ingeniería de Proyectos
Revista estudiantil, trabajo final Materia ingeniería de ProyectosRevista estudiantil, trabajo final Materia ingeniería de Proyectos
Revista estudiantil, trabajo final Materia ingeniería de ProyectosJeanCarlosLorenzo1
 
Peligros de Excavaciones y Zanjas presentacion
Peligros de Excavaciones y Zanjas presentacionPeligros de Excavaciones y Zanjas presentacion
Peligros de Excavaciones y Zanjas presentacionOsdelTacusiPancorbo
 
Diagrama de flujo metalurgia del cobre..pptx
Diagrama de flujo metalurgia del cobre..pptxDiagrama de flujo metalurgia del cobre..pptx
Diagrama de flujo metalurgia del cobre..pptxHarryArmandoLazaroBa
 
Clase 1 Análisis Estructura. Para Arquitectura pptx
Clase 1 Análisis Estructura. Para Arquitectura pptxClase 1 Análisis Estructura. Para Arquitectura pptx
Clase 1 Análisis Estructura. Para Arquitectura pptxPaolaVillalba13
 
Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfIsbelRodrguez
 
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinación
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinaciónEstacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinación
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinaciónAlexisHernandez885688
 
CFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric ProjectCFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric ProjectCarlos Delgado
 
5.1 MATERIAL COMPLEMENTARIO Sesión 02.pptx
5.1 MATERIAL COMPLEMENTARIO Sesión 02.pptx5.1 MATERIAL COMPLEMENTARIO Sesión 02.pptx
5.1 MATERIAL COMPLEMENTARIO Sesión 02.pptxNayeliZarzosa1
 
NOM-002-STPS-2010, combate contra incendio.pptx
NOM-002-STPS-2010, combate contra incendio.pptxNOM-002-STPS-2010, combate contra incendio.pptx
NOM-002-STPS-2010, combate contra incendio.pptxJairReyna1
 
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfLEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfAdelaHerrera9
 
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidasSOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidasLeonardoMendozaDvila
 
Biología molecular ADN recombinante.pptx
Biología molecular ADN recombinante.pptxBiología molecular ADN recombinante.pptx
Biología molecular ADN recombinante.pptxluisvalero46
 
SOUDAL: Soluciones de sellado, pegado y hermeticidad
SOUDAL: Soluciones de sellado, pegado y hermeticidadSOUDAL: Soluciones de sellado, pegado y hermeticidad
SOUDAL: Soluciones de sellado, pegado y hermeticidadANDECE
 
Sistema de gestión de turnos para negocios
Sistema de gestión de turnos para negociosSistema de gestión de turnos para negocios
Sistema de gestión de turnos para negociosfranchescamassielmor
 

Último (20)

Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...
Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...
Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...
 
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para Plataformas
 
Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSE
 
SEMANA 6 MEDIDAS DE TENDENCIA CENTRAL.pdf
SEMANA  6 MEDIDAS DE TENDENCIA CENTRAL.pdfSEMANA  6 MEDIDAS DE TENDENCIA CENTRAL.pdf
SEMANA 6 MEDIDAS DE TENDENCIA CENTRAL.pdf
 
Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.
 
Revista estudiantil, trabajo final Materia ingeniería de Proyectos
Revista estudiantil, trabajo final Materia ingeniería de ProyectosRevista estudiantil, trabajo final Materia ingeniería de Proyectos
Revista estudiantil, trabajo final Materia ingeniería de Proyectos
 
Peligros de Excavaciones y Zanjas presentacion
Peligros de Excavaciones y Zanjas presentacionPeligros de Excavaciones y Zanjas presentacion
Peligros de Excavaciones y Zanjas presentacion
 
Diagrama de flujo metalurgia del cobre..pptx
Diagrama de flujo metalurgia del cobre..pptxDiagrama de flujo metalurgia del cobre..pptx
Diagrama de flujo metalurgia del cobre..pptx
 
Clase 1 Análisis Estructura. Para Arquitectura pptx
Clase 1 Análisis Estructura. Para Arquitectura pptxClase 1 Análisis Estructura. Para Arquitectura pptx
Clase 1 Análisis Estructura. Para Arquitectura pptx
 
Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdf
 
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinación
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinaciónEstacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinación
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinación
 
CFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric ProjectCFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric Project
 
5.1 MATERIAL COMPLEMENTARIO Sesión 02.pptx
5.1 MATERIAL COMPLEMENTARIO Sesión 02.pptx5.1 MATERIAL COMPLEMENTARIO Sesión 02.pptx
5.1 MATERIAL COMPLEMENTARIO Sesión 02.pptx
 
NOM-002-STPS-2010, combate contra incendio.pptx
NOM-002-STPS-2010, combate contra incendio.pptxNOM-002-STPS-2010, combate contra incendio.pptx
NOM-002-STPS-2010, combate contra incendio.pptx
 
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfLEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
 
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidasSOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
 
Biología molecular ADN recombinante.pptx
Biología molecular ADN recombinante.pptxBiología molecular ADN recombinante.pptx
Biología molecular ADN recombinante.pptx
 
SOUDAL: Soluciones de sellado, pegado y hermeticidad
SOUDAL: Soluciones de sellado, pegado y hermeticidadSOUDAL: Soluciones de sellado, pegado y hermeticidad
SOUDAL: Soluciones de sellado, pegado y hermeticidad
 
Sistema de gestión de turnos para negocios
Sistema de gestión de turnos para negociosSistema de gestión de turnos para negocios
Sistema de gestión de turnos para negocios
 

Archivos secuenciales indexados UMG grupo 3

  • 2. ¿Alguna vez has buscado el teléfono de una persona en la guía telefónica?
  • 3. Cuando buscas un número telefónico no buscas secuencialmente desde los nombres cuya inicial es “a” hasta la “z” lo cual te llevaría mucho tiempo, si no que abres la guía por la letra inicial del nombre.
  • 4. Por ejemplo: Si desearas buscar “Mario”, abrirías la guía por la letra “m” y buscarías la cabecera de páginas hasta encontrar la página más próxima al nombre, buscando nombre a nombre hasta encontrar “Mario”.
  • 5. Como veras la guía es un ejemplo típico de archivo secuencial indexado con dos niveles de índices: 1) El nivel superior, para las letras iniciales. 2) El nivel menor, para las cabeceras de páginas.
  • 6. Este método contiene dos archivos para almacenar información relacionada. Índice: Contiene un dato que identifica a la información. Archivo de datos: Contiene toda la información guardada. Descripción:
  • 8. 1. Área de índices: Los registros de esta área están formados por dos campos que permiten identificar cada registro de forma única:  El primero contiene una clave del último registro de cada bloque.  El segundo contiene el apuntador al archivo principal. Por ejemplo, si se quieren grabar los estudiantes de cierta escuela en un archivo secuencial indexado, el campo índice que se puede elegir es el nombre del estudiante (también se puede elegir el número de carnet del estudiante).
  • 9. 2. Área Principal: Es la parte del fichero donde se guardan los registros ordenados por el valor del campo “clave”. Contiene un campo que apunta al archivo de desbordamiento el cual sirve para insertar registros. Su acceso se realiza mediante dos operaciones:  Primero, buscando en el bloque del registro.  Luego analiza secuencialmente ese bloque hasta localizar el registro deseado.
  • 10.
  • 11. 3. Área de Desbordamiento u Overflow: Tras completar el área primaria, los registros añadidos posteriormente que no pueden ser realizadas en el área primaria, serán enviados al área de overflow. En este los registros se presentan como una lista encadenada, en que el puntero al próximo registro está compuesto por la pista y el lugar que ocupa el registro dentro de la pista. Esta lista se mantiene ordenada por clave.
  • 14. Ventajas Búsqueda mas rápidas gracias a la utilización de un índice. Se pueden actualizar los registros en el mismo fichero nuevo para el proceso de actualización.
  • 15. Inconvenientes Ocupa más espacio en el disco que los ficheros secuenciales, debido al uso del área de índices. Tiende tendencias a que aumente el tiempo medio de acceso a los registros, cuando se producen muchas altas nuevas con claves que hay que intercalar entre las existencias, ya que aumenta el área de overflow.
  • 16. Proceso de un Archivo Secuencial Indexado Al diseñar un archivo secuencial indexado, lo primero que hay que decidir es cuál va a ser el campo clave. Los registros han de ser grabados en orden secuencial, y simultáneamente a la grabación de los registros, el sistema crea los índices en orden secuencial ascendente del contenido del campo clave.
  • 17. Se desarrollan las operaciones (altas, bajas, consultas…) para un archivo con esta organización. También es necesario considerar el inicio y la salida de la aplicación que procesa un archivo indexado, para cargar y descargar, respectivamente la tabla de índices.
  • 18. Tipos de datos Se declaran dos tipos de estructuras para representar el registro de datos y el índice respectivamente: struct estudiante { int carnet; string nombre; }; struct index{ int carnet; int posicion; };
  • 19.  Esta declaración de la variable para switch contiene la variable para almacenar datos de la estructura estudiante y la variable para almacenar indice y almacenar temporalmente (aux), durante la busqueda. int main(){ int opcion, bus; estudiante alumno, auxi; index indice, aux; Creación
  • 20.  A continuación se abre un do while para repetir el menú cada vez que sea necesario para realizar las distintas operaciones del programa. do{ system("cls");  Declaramos el archivo para almacenar datos del área principal. ofstream dat("datos.txt", ios::binary | ios::app);  Declaramos el archivo para almacenar datos y clave del área de índice. ofstream ind("index.txt", ios::binary | ios::app);  Declaramos el archivo para buscar datos . ifstream indic("index.txt", ios::binary); remove("datos.txt");
  • 21.  Se coloca un cout con la intención de colocar un texto de bienvenida a todo usuario que ejecute el programa. cout<<"*** BIENVENIDOS ***"<<endl<<endl;  Se crea los cout respectivos para mostrar un menú de opciones para el switch que hemos declarado anteriormente asi a la hora de ejecutar el programa, el usuario pueda seleccionar la opción que necesite. cout<<"1. Ingresar datos de estudiante"<<endl; cout<<"2. Buscar datos de estudiante"<<endl; cout<<"3. Borrar registros"<<endl; cout<<"4. Salir del programa"<<endl;  En las siguientes líneas colocamos un cout, con la intención de mostrar en la consola un texto indicando la selección de una opción. Luego se agrega un cin para indicar donde se almacena la opción que se escriba o indique. cout<<endl<<"Seleccione una opcion: "; cin>>opcion; cout<<endl;
  • 22.  Este if es para que entre al switch solo si va a ser usado con la condición que el número de opción este entre 1 (ingresar) y 3 (borrar). if(opcion>0 && opcion<4){  Inicio del switch. switch(opcion){  Inicia con opción uno en caso de ser seleccionado para ingresar datos. case 1:  Esta condición sirve para ver si los archivos a los cuales vamos a escribir se abren correctamente. if(!dat && !ind){ cout<<"Error al abrir archivo"<<endl; }else{
  • 23.  En caso de que se ejecute o se abra el archivo sin ningún problema entraría al siguiente paso.  En estas líneas de código se hace uso del cout que muestra en la consola el texto dando instrucciones sobre el ingreso del carnet y el cin para almacenar la información en la variable alumno. Esto hace que podamos ingresar datos y almacenarlos en la variable alumno. cout<<"Ingrese carnet: "; cin>>alumno.carnet; cout<<endl;  En las siguientes líneas abrimos un while llamando y determinando la cantidad de bites que ocupa cada bloque de información. while(!indic.eof()){ indic.read((char*) &aux, sizeof(struct index));
  • 24.  Creamos un if. if (alumno.carnet==aux.carnet){ cout<<"El archivo ya existe, Posicion: "<<aux.posicion; cout<<endl; bus=10;  cierra if }  cierra while }  cierra archivo indc de busqueda indic.close();
  • 25.  Abrimos un if . if(bus!=10){  A continuación se crean las siguientes líneas de código para poder pedir, ingresar y almacenar la información de cada alumno. cout<<"Ingrese nombre: "; cin>>alumno.nombre; cout<<endl; cout<<"Ingrese edad: "; cin>>alumno.edad; cout<<endl; cout<<"Ingrese carrera: "; cin>>alumno.carrera; cout<<endl;
  • 26.  En la siguiente línea persistimos la estructura en el archivo creado para datos. dat.write((char*) &alumno, sizeof(struct estudiante));  En esta línea se cumple con la función de colocar el curso al final del archivo para ver la ubicación. dat.seekp(0, ios::end);  Se le asigna a la variable indice el valor del campo clave. indice.carnet=alumno.carnet;  Se determina la posición dividiendo entre el tamaño del archivo para asi nos da valores desde 1 indice.posicion=dat.tellp()/sizeof(struct estudiante);  Persistimos la estructura del indice en el archivo. ind.write((char*) &indice, sizeof(struct index));
  • 27.  Está línea nos muestra la posición en la que se guarda la estructura. cout<<"Guardado en posicion: "<<"["<<indice.posicion<<"]"<<endl;  Así mismo se debe de cerrar ambos archivos al ya haber terminado de ingresar datos y haber guardado la estructura y esto se logra haciendolo de la siguiente forma: dat.close(); ind.close(); }  La siguiente línea solo detiene el programa y el break finaliza el caso. system("PAUSE"); break;  Y cerramos if en case 1. }
  • 28.  Empieza el caso 2 el de búsqueda de archivo. case 2:  Se coloca una variable que guarda lo que queramos buscar. En este caso la clave va a ser el carnet. int buscar; cout<<"Escriba carnet de alumno a buscar: "; cin>>buscar;  Abrimos un while que va a repetir mientras no sea el final del archivo. while(!indic.eof()){  La siguiente línea permite que se lea el archivo y guarda en variable aux. indic.read((char*) &aux, sizeof(struct index));
  • 29.  Se abre un if comparando si lo que se busca es igual a lo de la variable aux. if (buscar==aux.carnet){  Si fuere igual se escribiría lo en la consola lo siguiente y si no fuere así sigue hasta encontrarlo . cout<<endl<<"POSICION: "<<aux.posicion; cout<<endl<<endl;  Colocamos una variable de tipo ifstream para leer el archivo , en el cual se encuentra la información que buscamos. ifstream dato("datos.txt", ios::binary); bus=aux.posicion-1; dato.seekg(sizeof(struct estudiante)*bus, ios::beg); dato.read((char*) &auxi, sizeof(struct estudiante));
  • 30.  En las siguientes líneas llamamos a cada variable de alumno para poder mostrar la información del alumno que indique el usuario. cout<<"Carnet: "<<auxi.carnet<<endl; cout<<"Nombre: "<<auxi.nombre<<endl; cout<<"Edad: "<<auxi.edad<<endl; cout<<"Carrera: "<<auxi.carrera<<endl; dato.close();  Luego debemos de detener el programa por un momento y eso lo logramos colocando la siguiente línea. system("PAUSE");
  • 31.  Como siguiente paso cerramos if comparación }  Cerramos while de final del archivo. }  Al finalizar la operación se cierra el archivo para la búsqueda. indic.close();  se cierra el casa dos. break;
  • 32.  Empieza el caso 3 que nos permitirá eliminar datos. case 3: bus=0; if(bus==0){  Se crean variables de tipo ifstream para lectura con la intención de abrir los archivos de datos e indíce y poder realizar el proceso de eliminación de datos. ifstream eliminar("datos.txt", ios::binary); ifstream elim_ind("index.txt", ios::binary); ofstream temporal("temp.txt", ios::binary | ios::out); ofstream temp_ind("tempi.txt", ios::binary | ios::out);
  • 33.  Creamos un if el cual nos mostrara dos opciones indicándonos si hay error al abrir el archivo o de lo contrario pasaría a la búsqueda de la información que va a eliminarse. if(!eliminar || !elim_ind){ cout<<"Error al abrir el archivo"<<endl; }else{ cout<<"Ingrese el numero de carnet del alumno que desea borrar: "; cin>>opcion; while(!eliminar.eof()){ eliminar.read((char*) &auxi, sizeof(struct estudiante));
  • 34.  A continuación creamos un if para mostrar un texto en la consola indicando la eliminación del archivo del Área Principal.. if(auxi.carnet==opcion){ cout<<"El archivo se ha eliminado de datos"<<endl; }else{ temporal.write((char*) &auxi, sizeof(struct estudiante)); } }
  • 35.  A continuación se realiza el proceso para la eliminación de los datos en el Área de Índice. while(!elim_ind.eof()){ elim_ind.read((char*) &aux, sizeof(struct index)); if(aux.carnet==opcion){ cout<<"El archivo se ha eliminado de indice"<<endl; }else{ temp_ind.write((char*) &aux, sizeof(struct index)); } } }
  • 36.  En las siguientes líneas finalizamos el proceso de eliminación de datos. eliminar.close(); temporal.close(); elim_ind.close(); temp_ind.close(); } remove("datos.txt"); remove("index.txt"); rename("temp.txt", "datos.txt"); rename("tempi.txt", "index.txt");  La siguiente línea detiene el programa un momento. system("PAUSE"); break;
  • 37. default: break;  Cerramos switch. }  Cerramos if para entrar a switch } } while(opcion>0 && opcion!=4);  La condición del do while es que se va a repetir el menú mientras la variable opción se mayor a cero(0) y también sea diferente de 4, en caso sea 0 o cuatro se sale del programa system("PAUSE");  Aquí finaliza el programa }