Está en la página 1de 6

UNIVERSIDAD NACIONAL DE INGENIERIA P.A.

2020-1
FACULTAD DE INGENIERIA MECANICA
DACIBAHCC
TERCERA PRÁCTICA CALIFICADA
PROGRAMACION ORIENTADA A OBJETOS (MB545) (20 PUNTOS)
 DURACION: 120 MINUTOS
 EL DESARROLLO SE REALIZA USANDO PROGRAMAS Y APUNTES
 Usar sentencias condicionales y/o iterativas y/o arreglos archivos de texto y binarios

Pregunta (20 puntos): Agregar las opciones al programa

9) Ordenar la base por apellido (4 ptos)


10) Ordenar la base por fecha nacimiento (6ptos)
11) Exportar en un txt (4 ptos)
Deberá exportar toda la información en forma de una tabla en un archivo de texto plano
12) Importar en un txt (6 ptos)
Deberá importar la información anterior en el archivo binario

Para ello solamente deberá enviar el código de las funciones en cada opción y captura de pantalla de
los resultados

Inicio: 5:40pm
Fin: 7:30pm en base 20
Plazo máximo 8:00pm en base 16

#include <iostream>
#include <conio.h>
#include <string.h>
#include <fstream>
#define archi "d:\\tem\\data.fim"
using namespace std;
struct Sfecha{
int d,m,a;
};
struct Sdata{
char codigo[10];
char nombre[40],apat[40],amat[40];
Sfecha fecnac;
char genero;
int tcel,tfijo;
char ecivil;
char distrito[40];
};
//prototipo de funciones
int menu();
void crear_archivo();
void mostrar_registros();
void buscar_registros();
void agregar_registros();
void imprimir_registro(Sdata reg);
void modificar_registro();
Sdata leer_registro();
void mostrar_registros_tabla();
void ordenar_tcelular();
void ordenar_nombre();
//programa proncipal
int main(){
int op;
do{op=menu();
switch(op)

1
{case 1:crear_archivo(); break;
case 2:mostrar_registros(); break;
case 7:mostrar_registros_tabla(); break;
case 3:buscar_registros(); break;
case 4:agregar_registros(); break;
case 5:modificar_registro(); break;
case 6:ordenar_tcelular(); break;
case 8:ordenar_nombre(); break;
// case 9:ordenar_apellido(); break;
// case 10:ordenar_fecnac(); break;
// case 11:exportar_txt(); break;
// case 12:importar_txt(); break;
}
} while(op!=0);
return 0;
}
//desarrollo de funciones
int menu()
{int op;
system("cls");
cout<<" *******************************************"<<endl;
cout<<" * MENU PRINCIPAL *"<<endl;
cout<<" * 1) Crear archivo *"<<endl;
cout<<" * 2) Mostrar registros *"<<endl;
cout<<" * 7) Mostrar registros como tabla *"<<endl;
cout<<" * 3) Buscar registro *"<<endl;
cout<<" * 4) Agregar registros *"<<endl;
cout<<" * 5) Modificar un registro *"<<endl;
cout<<" * 6) Ordenar la base por tcelular *"<<endl;
cout<<" * 8) Ordenar la base por nombre *"<<endl;
cout<<" * 9) Ordenar la base por apellido *"<<endl;
cout<<" * 10) Ordenar la base por fecha nacimiento*"<<endl;
cout<<" * 11) Exportar en un txt *"<<endl;
cout<<" * 12) Importar en un txt *"<<endl;
cout<<" * 0) salir *"<<endl;
cout<<" * *****************************************"<<endl;
cout<<"Ingrese opcion:";cin>>op;
cin.ignore();
return op;
}
char codigo[10];
char nombre[40],apat[40],amat[40];
Sfecha fecnac;
char genero;
int tcel,tfijo;
char ecivil;
char distrito[40];

void crear_archivo()
{char op;
fstream ar;
Sdata reg;
ar.open(archi, ios::out|ios::binary);
if (ar.fail())
cout << "Fallo en la conexion con el archivo" << endl;
else
{do{
reg=leer_registro();
ar.write((char *) &reg, sizeof(Sdata));
cout<<"Desea agregar otro registro (S/N):";
op=getche();cout<<endl<<endl;
} while (op!='N'&&op!='n');
cout << "Registro agregado satisfactoriamente" << endl;
}
ar.close();

1
system("pause");
}

void mostrar_registros()
{fstream ar;
Sdata reg;
int nr=0;
ar.open(archi, ios::in|ios::binary);
if ( ar.fail())
{cout << "No encontrado" << endl;
system("pause");
}
else
while (1)
{ ar.read( (char *) &reg, sizeof(Sdata) );
if (ar.eof()) break;
nr++;
cout<<"Registro N° "<<nr<<":\n";
imprimir_registro(reg);
}
system("pause");
ar.close();

}
void mostrar_registros_tabla()
{fstream ar;
Sdata reg;
int nr=0;
ar.open(archi, ios::in|ios::binary);
if ( ar.fail())
{cout << "No encontrado" << endl;
system("pause");
}
else
{ cout<<"N Cod Nombre Apat Amat Fnac Gen Tcel Tfijo
Ecivil Distrito\n";
while (1)
{ ar.read( (char *) &reg, sizeof(Sdata) );
if (ar.eof()) break;
nr++;
cout.width(3);cout<<nr;
cout.width(4);cout<<reg.codigo;
cout.width(10);cout<<reg.nombre;
cout.width(10);cout<<reg.apat;
cout.width(10);cout<<reg.amat;
cout.width(10);cout<<reg.fecnac.d<<"/"<<reg.fecnac.m<<"/"<<reg.fecnac.a;
cout.width(4);cout<<reg.genero;
cout.width(10);cout<<reg.tcel;
cout.width(10);cout<<reg.tfijo;
cout.width(4);cout<<reg.ecivil;
cout.width(10);cout<<reg.distrito<<endl<<endl;
}
}
system("pause");
ar.close();

void buscar_registros()
{fstream ar;
Sdata reg;int con=0;
char codigo[10];
cout<<"Ingrese codigo:";cin.getline(codigo,60);
ar.open(archi, ios::in|ios::binary);
if ( ar.fail())
1
cout << "No encontrado" << endl;
else
while (1)
{ ar.read( (char *) &reg, sizeof(Sdata) );
if (ar.eof()) break;
if (strcmp(codigo,reg.codigo)==0)
{con++;
cout<<"Registro encontrado, coincidencia n "<<con<<":"<<endl;
imprimir_registro(reg);
}
}
system("pause");
ar.close();
}

void imprimir_registro(Sdata reg)


{cout<<"\t codigo:"<<reg.codigo<<endl;
cout<<"\t nombre:"<<reg.nombre<<endl;
cout<<"\t ape. paterno:"<<reg.apat<<endl;
cout<<"\t ape. materno:"<<reg.amat<<endl;
cout<<"\t fecha nacimiento:";
cout<<reg.fecnac.d<<"/";
cout<<reg.fecnac.m<<"/";
cout<<reg.fecnac.a<<endl;
cout<<"\t genero:"<<reg.genero<<endl;
cout<<"\t telf celular:"<<reg.tcel<<endl;
cout<<"\t telf fijo:"<<reg.tfijo<<endl;
cout<<"\t estado civil(S/C):"<<reg.ecivil<<endl;
cout<<"\t distrito:"<<reg.distrito<<endl<<endl;
}

void agregar_registros()
{char op;
fstream ar;
Sdata reg;
ar.open(archi, ios::app|ios::binary);
if (ar.fail())
cout << "Fallo en la conexion con el archivo" << endl;
else
{
do{
reg=leer_registro();
ar.write((char *) &reg, sizeof(Sdata));
cout<<"Desea agregar otro registro (S/N):";
op=getche();cout<<endl<<endl;
} while (op!='N'&&op!='n');
cout << "Registro agregado satisfactoriamente" << endl;
}
ar.close();

system("pause");
}

void modificar_registro()
{fstream ar;
Sdata reg;int con=0;
char nombre[40];
cout<<"Ingrese nombre a buscar:";cin.getline(nombre,40);
ar.open(archi, ios::in|ios::out|ios::binary);
if ( ar.fail())
cout << "No encontrado" << endl;
else
while (1)
{ ar.read( (char *) &reg, sizeof(Sdata) );
if (ar.eof()) break;
con++;
1
if (strcmp(nombre,reg.nombre)==0)
{
cout<<"Registro encontrado en posicion n "<<con<<":"<<endl;
imprimir_registro(reg);
reg=leer_registro();
ar.seekp((con-1)*sizeof(Sdata), ios::beg);
ar.write((char *) &reg, sizeof(Sdata));
cout<<"Registro modificado satisfactoriamente .....\n\n";
break;
}
}
system("pause");
ar.close();
}

Sdata leer_registro()
{Sdata reg;
cout<<"Ingrese codigo:";cin.getline(reg.codigo,60);
cout<<"Ingrese nombre:";cin.getline(reg.nombre,60);
cout<<"Ingrese ape. paterno:";cin.getline(reg.apat,60);
cout<<"Ingrese ape. materno:";cin.getline(reg.amat,60);
cout<<"Ingrese fecha nacimiento:"<<endl;
cout<<"\tIngrese dia:";cin>>reg.fecnac.d;
cout<<"\tIngrese mes:";cin>>reg.fecnac.m;
cout<<"\tIngrese año:";cin>>reg.fecnac.a;
cout<<"Ingrese genero(M/F):";reg.genero=getche();cout<<endl;
cout<<"Ingrese telf celular:";cin>>reg.tcel;
cout<<"Ingrese telf fijo:";cin>>reg.tfijo;
cout<<"Ingrese estado civil(S/C):";reg.ecivil=getche();cout<<endl;
cin.ignore();
cout<<"Ingrese distrito:";cin.getline(reg.distrito,60);
return reg;
}

void ordenar_tcelular()
{
fstream ar;
Sdata regi,regj;
int nr;
ar.open(archi, ios::in|ios::out|ios::binary);
if ( ar.fail())
cout << "No encontrado" << endl;
else
{ar.seekg(0*sizeof(Sdata), ios::end);
cout<<"Tamaño de archivo(byte):"<<ar.tellg()<<endl;
cout<<"Tamaño del registro(byte):"<<sizeof(Sdata)<<endl;
nr=ar.tellg()/sizeof(Sdata);
cout<<"El numero de registros:"<<nr<<endl;
/*
V n
for (int i=0;i<(n-1);i++)
for (int j=i+1;j<n;j++)
if (V[i]>V[j])
{tem=V[i];
V[i]=V[j];
V[j]=tem;
}
*/
for (int i=0;i<(nr-1);i++)
for (int j=i+1;j<nr;j++)
{ar.seekg(i*sizeof(Sdata), ios::beg);
ar.read((char *) &regi, sizeof(Sdata) );
ar.seekg(j*sizeof(Sdata), ios::beg);
ar.read((char *) &regj, sizeof(Sdata) );
cout<<i<<" "<<j<<" "<<regi.codigo<<" "<<regj.codigo<<endl;
1
if(regi.tcel>regj.tcel)
{ar.seekp(i*sizeof(Sdata), ios::beg);
ar.write((char *) &regj, sizeof(Sdata) );
ar.seekp(j*sizeof(Sdata), ios::beg);
ar.write((char *) &regi, sizeof(Sdata) );
}
}
ar.close();
cout<<"La tabla ha sido ordenada por tel celular.."<<nr<<endl;
}
system("pause");
}

void ordenar_nombre()
{
fstream ar;
Sdata regi,regj;
int nr;
ar.open(archi, ios::in|ios::out|ios::binary);
if ( ar.fail())
cout << "No encontrado" << endl;
else
{ar.seekg(0*sizeof(Sdata), ios::end);
nr=ar.tellg()/sizeof(Sdata);
for (int i=0;i<(nr-1);i++)
for (int j=i+1;j<nr;j++)
{ar.seekg(i*sizeof(Sdata), ios::beg);
ar.read((char *) &regi, sizeof(Sdata) );
ar.seekg(j*sizeof(Sdata), ios::beg);
ar.read((char *) &regj, sizeof(Sdata) );
if(strcmp(regi.nombre,regj.nombre)>0)
{ar.seekp(i*sizeof(Sdata), ios::beg);
ar.write((char *) &regj, sizeof(Sdata) );
ar.seekp(j*sizeof(Sdata), ios::beg);
ar.write((char *) &regi, sizeof(Sdata) );
}
}
ar.close();
cout<<"La tabla ha sido ordenada por nombre.."<<nr<<endl;
}
system("pause");
}

También podría gustarte