Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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 *) ®, 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 *) ®, 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 *) ®, 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 *) ®, 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 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 *) ®, 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 *) ®, 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 *) ®, 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 *) ®i, sizeof(Sdata) );
ar.seekg(j*sizeof(Sdata), ios::beg);
ar.read((char *) ®j, 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 *) ®j, sizeof(Sdata) );
ar.seekp(j*sizeof(Sdata), ios::beg);
ar.write((char *) ®i, 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 *) ®i, sizeof(Sdata) );
ar.seekg(j*sizeof(Sdata), ios::beg);
ar.read((char *) ®j, sizeof(Sdata) );
if(strcmp(regi.nombre,regj.nombre)>0)
{ar.seekp(i*sizeof(Sdata), ios::beg);
ar.write((char *) ®j, sizeof(Sdata) );
ar.seekp(j*sizeof(Sdata), ios::beg);
ar.write((char *) ®i, sizeof(Sdata) );
}
}
ar.close();
cout<<"La tabla ha sido ordenada por nombre.."<<nr<<endl;
}
system("pause");
}