Ingeniería Electrónica
Programación Estructurada
Vilada Segovia Arturo
//Este programa toma como referencia
// Pdf Ing. Bruno Lopez T. Manejo de archivos
// en Lenguaje C++
//Instituto Tecnológico de Nuevo Laredo
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdio.h>
#include <ctype.h>
struct producto
{
int noAlumno;
char descrip[40];
int carrera;
int semestre;
};
producto Registro;
FILE *alias;
void ALTA_SECUENCIAL();
void CONSULTA_SECUENCIAL(void);
void LISTADO_SECUENCIAL(void);
void MODIFICACION_SECUENCIAL(void);
void BAJA_LOGICA_SECUENCIAL(void);
void BAJA_FISICA_SECUENCIAL(void);
int menu();
int main()
{
int opc;
do
{
clrscr();
opc=menu();
switch(opc)
{
case 1:
ALTA_SECUENCIAL();
break;
case 2:
CONSULTA_SECUENCIAL();
break;
case 3:
LISTADO_SECUENCIAL();
break;
case 4: MODIFICACION_SECUENCIAL();
break;
case 5 : BAJA_LOGICA_SECUENCIAL();
break;
case 6: BAJA_FISICA_SECUENCIAL();
break;
case 7: cout<<"\n\nFinal programa ";
break;
default: cout<<"\nError en opcion"<<endl;
}
}
while(opc !=7);
getch();
return 0;
}
void ALTA_SECUENCIAL()
{
int no_Alumno; // Variable local para el numero de producto
clrscr();
cout << "\n\rALTAS DE REGISTROS DE ALUMNOS";
alias=fopen("C:\\datos\\PRODUCTO.SEC","rb+"); // Intenta abrir el archivo
// en modo de lectura/escritura
if(alias==NULL)
alias=fopen("c:\\datos\\PRODUCTO.SEC","wb"); // Crea el archivo en caso de no
// existir
cout << "\n\n\n\rNo. control: "; cin >> no_Alumno;
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.noAlumno==no_Alumno)
{
cout << "\n\n\n\rRegistro duplicado !!!";
fclose(alias);
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "\n\rAlumno: "; gets(Registro.descrip);
cout << "\n\rCarrera: "; cin >> Registro.semestre;
cout << "\n\rSemestre: "; cin >> Registro.carrera;
Registro.noAlumno=no_Alumno;
fwrite(&Registro,sizeof(Registro),1,alias); // Grabar el Registro
fclose(alias); // Cierra el archivo
cout << "\n\n\n\rAlumno registrado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
void CONSULTA_SECUENCIAL(void)
{
int no_prod;
clrscr();
cout << "\n\rCONSULTA DE REGISTROS DE ALUMNOS";
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb"); // Intenta abrir el archivo
//PRODUCTO.SEC
// en modo de solo lectura
if(alias==NULL)
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de control: "; cin >> no_prod;
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias))
{
if(Registro.noAlumno==no_prod)
{
cout << "\n\rNo control Alumno Carrera Semestre ";
cout << "\n\r----------------------------------------------------\n\n";
cout<<Registro.noAlumno<<setw(20)<<Registro.descrip<<setw(10)<<Registro.semestre<<setw(10)<<Registro.carrera<<endl;
fclose(alias);
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;
}
void LISTADO_SECUENCIAL(void)
{
clrscr();
cout << "\n\rLISTADO DE REGISTROS DE ALUMNOS";
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb"); // Intenta abrir el archivo
//PRODUCTO.SEC
// en modo de solo lectura
if(alias==NULL)
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\rNo Control Alumno Carrera Semestre ";
cout << "\n\r-------------------------------------------------------------------\n\n";
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
{
cout<<Registro.noAlumno<<setw(20)<<Registro.descrip<<setw(10)<<Registro.semestre<<setw(10)<<Registro.carrera<<endl;
fread(&Registro,sizeof(Registro),1,alias);
}
fclose(alias); // Cierra el archivo
cout << "\n\r------------------------------------------------------------------\n\n";
cout << "\n\rFin del listado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
int menu()
{
int opcion;
cout<<"\n\n1)Alta del alumno "<<endl;
cout<<"\n2)Consulta de alumno"<<endl;
cout<<"\n3)Listado de alumno"<<endl;
cout<<"\n4)Modificar datos de alumno"<<endl;
cout<<"\n5)Baja Logica de alumonos"<<endl;
cout<<"\n6)Baja Fisica de alumnos"<<endl;
cout<<"\n7)Salida Programa"<<endl;
cout<<"\n\nSelecciona opcion = ? ";
cin>>opcion;
return opcion;
}
void MODIFICACION_SECUENCIAL(void)
{
int no_prod; // Variable local para el numero de producto que desea
//modificar
clrscr();
cout << "\n\rMODIFICACION DE REGISTROS DE ALUMNOS";
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb+"); // Intenta abrir el archivo
//PRODUCTO.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 control: "; 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.noAlumno==no_prod)
{
cout << "\n\rNo Control Alumno Carrera Semestre \n\n";
cout << "\n\r--------------------------------------------------------------\n\n";
cout<<Registro.noAlumno<<setw(20)<<Registro.descrip<<setw(10)<<Registro.semestre<<setw(10)<<Registro.carrera<<endl;
cout << "\n\n\n\rAnote los nuevos datos ...";
cout << "\n\rAlumno: "; gets(Registro.descrip);
cout << "\n\rCarrera: "; cin >> Registro.semestre;
cout << "\n\rSemestre: "; cin >> Registro.carrera;
// 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
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro
// con 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;
}
void BAJA_LOGICA_SECUENCIAL(void)
{
int no_prod; // Variable local para el nombre del alumno
//eliminar
char op; //Variable local
clrscr();
cout << "\n\rBAJAS LOGICAS DE REGISTROS DE ALUMNOS";
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb+"); // Intenta abrir el archivo
//PRODUCTO.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 control: "; 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.noAlumno==no_prod)
{
cout << "\n\rNo Control Alumno Carrera Semestre "<<endl;
cout<< "\n\r---------------------------------------------------------------\n\n";
cout<<Registro.noAlumno<<setw(20)<<Registro.descrip<<setw(10)<<Registro.semestre<<setw(10)<<Registro.carrera<<endl;
Registro.noAlumno=0;
strcpy(Registro.descrip,"");
Registro.semestre;
Registro.carrera;
do {
cout <<"\n\n\rEsta seguro que desea borrarlo? [S/N] ---> ";
op=toupper(getche());
}while(op!='S' && op!='N');
if(op=='S')
{
// 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
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro
// con los nuevos campos
cout << "\n\n\n\rRegistro eliminado !!!";
}
fclose(alias); // Cierra el archivo
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;
}
void BAJA_FISICA_SECUENCIAL(void)
{
FILE *temporal; //Declaracion local de una variable para controlar el
// archivo temporal
clrscr();
cout << "\n\rBAJAS FISICAS DE REGISTROS DE PRODUCTOS";
alias=fopen("C:\\datos\\PRODUCTO.SEC","rb"); // Intenta abrir el archivo
//PRODUCTO.SEC
// en modo de solo lectura
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;
}
temporal=fopen("C:\\datos\\TEMPORAL.TMP","wb"); // Crea el archivo TEMPORAL.TMP
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.noAlumno!=0)
fwrite(&Registro,sizeof(Registro),1,temporal);
// Graba el registro valido en el archivo temporal
fread(&Registro,sizeof(Registro),1,alias);
}
fcloseall(); // Cierra todos los archivos abiertos
remove("C:\\datos\\PRODUCTO.SEC"); //Elimina el archivo original
rename("C:\\datos\\TEMPORAL.TMP","C:\\datos\\PRODUCTO.SEC");
//Renombra el archivo temporal con el nombre del archivo original
cout << "\n\n\n\rArchivo compactado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}

No hay comentarios:
Publicar un comentario