Está en la página 1de 7

UNMSM – FACULTAD DE INGENIERIA INDUSTRIAL

ALGORITMOS Y PROGRAMACIÓN 2015-0


PROFESOR: EDGAR RUIZ LIZAMA
SEMANA 8: ARCHIVOS BINARIOS - PARTE 2

Ejemplo 1
/* Una clase Alumno que es gestionada desde un archivo */
#include <fstream>
#include <conio.h>
#include <iostream>
const int MAX = 100;

using namespace std;


class Alumno{
private:
char codigo[10]; // codigo
char nombre[40]; // apellidos y nombres
char curso[35]; // nombre del curso
int notas[4]; // evaluaciones del curso
public:
void setDatos(); // solicita y guarda datos en el archivo
};
Alumno acta[MAX]; // array de objetos
void Alumno :: setDatos()
{
ofstream salida("acta2.dat",ios::out|ios::binary);
// escribiendo al archivo
int num;
cout<<"Cuantos alunmos desea incluir en el acta? ";
cin>>num; fflush(stdin);
for (int i = 0; i<num; i++)
{
cout<<"Ingrese codigo: ";
gets(acta[i].codigo); fflush(stdin);
cout<<"Ingrese apellidos y nombres: ";
gets(acta[i].nombre);
cout<<"Ingrese nombre del curso: ";
gets(acta[i].curso);
fflush(stdin);
cout<<"Ingrese 4 notas: ";
for (int j = 0; j<4; j++)
cin >> acta[i].notas[j];
fflush(stdin);
salida.write((char*) acta[i], sizeof(Alumno));
fflush(stdin);
}
salida.close();
cout<<"Fin de la entrada de datos!...";
}
int main() // ActaBinario_3.cpp
{
Alumno IngIndustrial;
IngIndustrial.setDatos();
getche();
return 0;
}

Página 1 de 7
Ejemplo 2
/* Una clase Alumno que es gestionada desde un archivo */
#include <fstream>
#include <conio.h>
#include <iostream>
const int MAX = 100;

using namespace std;

class Alumno{
private:
char codigo[10]; // codigo
char nombre[40]; // apellidos y nombres
char curso[35]; // nombre del curso
int notas[4]; // evaluaciones del curso
public:
void getDatos(); // visualiza lor registros del archivo
};

Alumno acta[MAX]; // array de objetos


void Alumno :: getDatos()
{
fstream entrada("acta2.dat", ios::in | ios::binary);
int num = 0, i = 0, nreg = 0;
// calcular el tamaño de un registro
int tam = sizeof(Alumno);
cout << "Tamano registro: " << tam <<endl;
//Calcular numero de registros
entrada.seekp(0L, ios::end); // ir al final del archivo
long totalReg = entrada.tellp()/tam;
cout << "Num Registros = " << totalReg << endl;
entrada.seekg(0, ios::beg); // ir al principio del archivo
// leer archivo y mostrar contenido en salida estandar
while (!entrada.eof() && (nreg < totalReg))
{
entrada.seekg(num, ios::beg);
entrada.read((char*)&acta[MAX/tam],sizeof(Alumno));
cout <<"\nCodigo: " << acta[i].codigo<<endl;
cout <<"Apellidos y nombres: " << acta[i].nombre <<endl;
cout <<"Curso: " << acta[i].curso <<endl;
cout <<"Notas: ";
for (int j = 0; j<4; j++)
cout << acta[i].notas[j] <<" ";
num = num + tam;
nreg++;
}
entrada.close();
cout<<"\n\nFin de la lectura de datos!...";
}
int main() // ActaBinario_4.cpp
{
Alumno IngIndustrial;
IngIndustrial.getDatos();
getche();
return 0;
}

Página 2 de 7
Ejemplo 3
/* Una clase Alumno que es gestionada desde un archivo */
#include <fstream>
#include <conio.h>
#include <iostream>
const int MAX = 100;

using namespace std;

class Alumno{
private:
char codigo[10]; // codigo
char nombre[40]; // apellidos y nombres
char curso[35]; // nombre del curso
int notas[4]; // evaluaciones del curso
public:
void setDatos(); // solicita y guarda datos en el archivo
void getDatos(); // visualiza los registros del archivo
// Ejercicios
// void buscar(char cod[]); // busca Alumno por codigo
/* Ejercicio:
1. Escribir la funcion miembro Buscar(cod). Esta funcion
busca un alumno segun el codigo cod, si lo encuentra muestra sus
datos, en caso contrario muestra el mensaje "Alumno de codigo
cod no existe".
2. Escribir la funcion Promedio(), tal que para cada alumno
calcula y muestra su promedio. El promedio se evalua eliminando
la nota mas baja. Con esta informacion se crea el archivo
binario "promedios.dat", donde se guardan el codigo y el
promedio de cada alumno.
*/};
Alumno acta[MAX]; // array de objetos
void Alumno :: setDatos()
{
ofstream salida("acta3.dat",ios::out|ios::binary);
// escribiendo al archivo
int num;
cout<<"Cuantos alunmos desea incluir en el acta? ";
cin>>num; fflush(stdin);
for (int i = 0; i<num; i++)
{
cout<<"Ingrese codigo: ";
gets(acta[i].codigo); fflush(stdin);
cout<<"Ingrese apellidos y nombres: ";
gets(acta[i].nombre);
cout<<"Ingrese nombre del curso: ";
gets(acta[i].curso);
fflush(stdin);
cout<<"Ingrese 4 notas: ";
for (int j = 0; j<4; j++)
cin >> acta[i].notas[j];
fflush(stdin);
// Escribiendo en el archivo
salida.write((char*) &acta[i], sizeof(Alumno));
fflush(stdin);

Página 3 de 7
}
salida.close();
cout<<"Fin de la entrada de datos!...";
}

void Alumno :: getDatos()


{
fstream entrada("acta3.dat", ios::in | ios::binary);
int num = 0, i = 0, nreg = 0;
// calcular el tamaño de un registro u objeto
int tam = sizeof(Alumno);
cout << "Tamano registro: " << tam <<endl;
//Calcular numero de registros
entrada.seekp(0L, ios::end); // ir al final del archivo
long totalReg = entrada.tellp()/tam;
cout << "Num Registros = " << totalReg << endl;
entrada.seekg(0, ios::beg); // ir al principio del archivo
// leer archivo y mostrar contenido en salida estandar
while (!entrada.eof() && (nreg < totalReg))
{
entrada.seekg(num, ios::beg);
// sube registro u objeto al flujo
entrada.read((char*)&acta[MAX/tam],sizeof(Alumno));
// Enviar o mostrar registro en pantalla
cout <<"\nCodigo: " << acta[i].codigo<<endl;
cout <<"Apellidos y nombres: " << acta[i].nombre <<endl;
cout <<"Curso: " << acta[i].curso <<endl;
cout <<"Notas: ";
for (int j = 0; j<4; j++)
cout << acta[i].notas[j] <<" ";
num = num + tam;
nreg++;
}
entrada.close();
cout<<"\n\nFin de la lectura de datos!...";
}

int main() // ActaBinario_5.cpp


{
Alumno IngIndustrial;
IngIndustrial.setDatos();
IngIndustrial.getDatos();
getche();
return 0;
}

EJEMPLO 4:

Proyecto en CodeBlocks Py_Cliente_Banco.cbp

El programa permite ingresar datos de un grupo de


clientes y los guarda en el archivo binario “credito.dat”
Luego procede a mostrar su contenido en pantalla.

Página 4 de 7
Archivo: datoscliente.h

Archivo datoscliente.cpp

Página 5 de 7
Archivo main.cpp

Página 6 de 7
Ejercicios:

Modifique el programa de modo tal que permita añadir nuevos clientes al archivo
“credito.dat” (utilice ios::app). Muestre en pantalla el contenido del archivo.

Permita que el acceso al archivo “credito.dat” sea aleatorio, utilice seekg, seekp, tellg,
para lograr visualizar cualquier registro del archivo según el número de cuenta.

 EDGAR RUIZ LIZAMA – 2015 - 0

Página 7 de 7

También podría gustarte