martes, 27 de noviembre de 2012

Practica 13




Instituto Tecnológico de Tijuana




Programación Estructurada



Practica 13 Problema 3



Docente: Ángela Colunga Aldana



Alumno: Daniel Avendaño Reveles



                                       
   Tijuana, Baja California a 2 de diciembre de 2012



Programación:

#include <iomanip.h>
#include <conio.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>
 void agregar_datos_file()
{
ofstream salida;
salida.open("C://Datos//grupo.txt",ios::app);
int j,calf;
char name[30],sigue;
int calif;
do
{
 cout<<" Nombre  = ? ";
 gets(name);
 salida<<name<<endl;
 for(j=1;j<=4;j++)
 {
 cout<<"Calificacion "<<j<<" : ";
 cin>>calf;
 salida<<calf<<endl;
 }
 cout<<"\n\nDeseas Registrar otro alumno s/n ? ";
 cin>>sigue;
  }
  while(sigue=='s'  || sigue=='S');
 salida.close();
 }
 void listado_datos_file()
 {
 int i,suma=0,promedio;
 ifstream entrada;
 entrada.open("C://Datos//grupo.txt");
 char nombre[30];
 int c1;
 clrscr();
 cout<<"nombre alumno        c1   c2  c3  c4  Promedio "<<endl<<endl;
 entrada.getline(nombre,30);
 while(entrada.good())
 {
 cout<<setw(20)<<nombre;
 suma=0;
 for(i=1;i<=4;i++)
 {
  entrada>>c1;
  cout<<setw(4)<<c1;
  suma=suma + c1;
  }
  promedio=suma/4;
  cout<<setw(5)<<promedio<<endl;
  entrada.ignore();
  entrada.getline(nombre,30);
  }
  entrada.close();
   }

  void menu()
  {
  cout<<"1)Agregar datos alumno\n"<<endl;
  cout<<"2)Listado de alumnos\n "<<endl;
  cout<<"3)Fin de programa\n"<<endl;
  cout<<"Elige opcion ==> ";
  }


 int main()
 {
 int opcion;
 do
 {
 clrscr();
 menu();
 cin>>opcion;
 switch(opcion)
 {
 case 1: agregar_datos_file();
    break;
 case 2: listado_datos_file();
    getch();
         break;
case 3: cout<<"\n\nFin del programa \n\n";
   getch();
         break;
default: cout<<"Error en opcion ";
   break;
}
}
while(opcion !=3);
getch();
return 0;
 }

Pseudocodigo:


Inicio
void agregar_datos_file()
{
ofstream salida
salida.open("C://Datos//grupo.txt",ios::app)
j              int
calf         int
name[30]            char
sigue     char
calif        int
do
{
 print " Nombre  = ? "
 gets(name)
 salida, name
 for(j=1j<=4j++)
 {
 print "Calificacion ", j, " : "
 read calf
 salida, calf
 }
 print "Deseas Registrar otro alumno s/n ? "
 read sigue
  }
  while(sigue=='s'  || sigue=='S')
 salida.close()
 }
 void listado_datos_file()
 {
i               int
suma=0               int
promedio           int
 ifstream entrada
 entrada.open("C://Datos//grupo.txt")
nombre[30]       char
 c1          int
 clrscr()
 print "nombre alumno        c1   c2  c3  c4  Promedio "
 entrada.getline(nombre,30)
 while(entrada.good())
 {
 print setw(20), nombre
 suma=0
 for(i=1i<=4i++)
 {
  entrada>>c1
  print setw(4), c1
  suma=suma + c1
  }
  promedio=suma/4
  print setw(5), promedio
  entrada.ignore()
  entrada.getline(nombre,30)
  }
  entrada.close()
   }

  void menu()
  {
  print "1)Agregar datos alumno"
  print "2)Listado de alumnos "
  print "3)Fin de programa"
  print "Elige opcion ==> "
  }


 int main()
 {
 int opcion
 do
 {
 clrscr()
 menu()
 read opcion
 switch(opcion)
 {
 case 1: agregar_datos_file()
    break
 case 2: listado_datos_file()
    getch()
         break
case 3: print "Fin del programa "
   getch()
         break
default: print "Error en opcion "
   break
}
}
while(opcion !=3)
}
Final


Programa:







Instituto Tecnológico de Tijuana




Programación Estructurada



Practica 13 (Manejo de archivos 2)



Docente: Ángela Colunga Aldana



Alumno: Daniel Avendaño Reveles



                                       
   Tijuana, Baja California a 2 de diciembre de 2012



Programación:

//Practica 13(Manejo de archivos 2)
//Integrantes del equipo: Avendaño Reveles Daniel
//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 noProd;
char descrip[30];
float precio;
int cantidad;
};
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_prod; // Variable local para el numero de producto
clrscr();
cout << "\n\rALTAS DE REGISTROS DE PRODUCTOS";
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\rNumero de producto: "; 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.noProd==no_prod)
{
cout << "\n\n\n\rRegistro duplicado !!!";
fclose(alias);
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "\n\rDescripcion: "; gets(Registro.descrip);
cout << "\n\rCantidad : "; cin >> Registro.cantidad;
cout << "\n\rPrecio : "; cin >> Registro.precio;
Registro.noProd=no_prod;
fwrite(&Registro,sizeof(Registro),1,alias); // Grabar el Registro
fclose(alias); // Cierra el archivo
cout << "\n\n\n\rProducto 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 PRODUCTOS";
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 producto: "; cin >> no_prod;
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias))
{
if(Registro.noProd==no_prod)
{
cout << "\n\rNo Prod Descripcion Cantidad Precio ";
cout << "\n\r----------------------------------------------------\n\n";
cout<<Registro.noProd<<setw(20)<<Registro.descrip<<setw(10)<<Registro.cantidad<<setw(10)<<Registro.precio<<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 PRODUCTOS";
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 Prod Descripcion Cantidad Precio ";
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.noProd<<setw(20)<<Registro.descrip<<setw(10)<<Registro.cantidad<<setw(10)<<Registro.precio<<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 de producto "<<endl;
cout<<"\n2)Consulta de producto"<<endl;
cout<<"\n3)Listado de productos"<<endl;
cout<<"\n4)Modificar datos de productos"<<endl;
cout<<"\n5)Baja Logica de productos"<<endl;
cout<<"\n6)Baja Fisica de productos"<<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 PRODUCTOS";
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 producto: "; 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.noProd==no_prod)
{
cout << "\n\rNo Prod Descripcion Cantidad Precio \n\n";
cout << "\n\r--------------------------------------------------------------\n\n";
cout<<Registro.noProd<<setw(20)<<Registro.descrip<<setw(10)<<Registro.cantidad<<setw(10)<<Registro.precio<<endl;
cout << "\n\n\n\rAnote los nuevos datos ...";
cout << "\n\rDescripcion: "; gets(Registro.descrip);
cout << "\n\rCantidad : "; cin >> Registro.cantidad;
cout << "\n\rPrecio : "; cin >> Registro.precio;
// 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 numero de producto que desea
//eliminar
char op; //Variable local
clrscr();
cout << "\n\rBAJAS LOGICAS DE REGISTROS DE PRODUCTOS";
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 producto: "; 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.noProd==no_prod)
{
cout << "\n\rNo Prod Descripcion Cantidad Precio "<<endl;
cout<< "\n\r---------------------------------------------------------------\n\n";
cout<<Registro.noProd<<setw(20)<<Registro.descrip<<setw(10)<<Registro.cantidad<<setw(10)<<Registro.precio<<endl;
Registro.noProd=0;
strcpy(Registro.descrip,"");
Registro.cantidad=0;
Registro.precio=0.0;
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.noProd!=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;
}

Pseudocodigo:


Inicio
struct producto
{
noProd int
descrip[30]         char
precio   real
cantidad              int
}
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()
{
opc        int
  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: Print "Final programa "
     break
  default: Print "Error en opcion"
  }
  }
  while(opc !=7)
  getch()
  return 0
  }

void ALTA_SECUENCIAL()
{
no_prod              int
clrscr()
print   "ALTAS DE REGISTROS DE PRODUCTOS"
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
print  "Numero de producto: " read  >> 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.noProd==no_prod)
{
print   "Registro duplicado !!!"
fclose(alias)
}
fread(&Registro,sizeof(Registro),1,alias)
}
print  "Descripcion: " gets(Registro.descrip)
print  "Cantidad : " read  >> Registro.cantidad
print  "Precio : " read  >> Registro.precio
Registro.noProd=no_prod
fwrite(&Registro,sizeof(Registro),1,alias) // Grabar el Registro
fclose(alias) // Cierra el archivo
print   "Producto registrado !!!"
print  ", < Oprima cualquier tecla para continuar >>>"
}
void CONSULTA_SECUENCIAL(void)
{
no_prod              int
clrscr()
print   "CONSULTA 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)
{
print  , "No existe el archivo !!!"
print    ", < Oprima cualquier tecla para continuar >>>"
}
print  "Numero de producto: " read  >> no_prod
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias))
{
if(Registro.noProd==no_prod)
{
print   "No Prod Descripcion Cantidad Precio "
print  ,  "----------------------------------------------------"
Print Registro.noProd, setw(20), Registro.descrip, setw(10), Registro.cantidad, setw(10), Registro.precio
fclose(alias)
print  ", < Oprima cualquier tecla para continuar >>>"
}
fread(&Registro,sizeof(Registro),1,alias)
}
print   "No se encuentra ese registro !!!"
fclose(alias) // Cierra el archivo
print   ", < Oprima cualquier tecla para continuar >>>"
getch()
return
}
void LISTADO_SECUENCIAL(void)
{
clrscr()
print   "LISTADO 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)
{
print   "No existe el archivo !!!"
print   ", < Oprima cualquier tecla para continuar >>>"
}
print    "No Prod Descripcion Cantidad Precio "
print    "-------------------------------------------------------------------"
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
{
Print Registro.noProd, setw(20), Registro.descrip, setw(10), Registro.cantidad, setw(10), Registro.precio
fread(&Registro,sizeof(Registro),1,alias)
}
fclose(alias) // Cierra el archivo
print   "------------------------------------------------------------------"
print   "Fin del listado !!!"
print    ", < Oprima cualquier tecla para continuar >>>"
}
int menu()
{
int opcion
Print "1)alta de producto "
Print "2)Consulta de producto"
Print "3)Listado de productos"
Print "4)Modificar datos de productos"
Print "Selecciona opcion = ?  "
print "5)Baja Logica de productos"
print "6)Baja Fisica de productos"
print "7)Salida Programa"
Read opcion
return opcion
}
void MODIFICACION_SECUENCIAL(void)
{
no_prod              int
// Variable local para el numero de producto que desea
//modificar
clrscr()
print   "MODIFICACION DE REGISTROS DE PRODUCTOS"
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
{
print  "No existe el archivo !!!"
print  ", < Oprima cualquier tecla para continuar >>>"
}
print  "Numero de producto: " read  >> 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.noProd==no_prod)
{
print   "No Prod Descripcion Cantidad Precio "
print   "--------------------------------------------------------------"
Print Registro.noProd, setw(20), Registro.descrip, setw(10), Registro.cantidad, setw(10), Registro.precio
print   "Anote los nuevos datos ..."
print  "Descripcion: " gets(Registro.descrip)
print    "Cantidad : " read  >> Registro.cantidad
print    "Precio : " read  >> Registro.precio
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
print   "Registro modificado !!!"
print    ", < Oprima cualquier tecla para continuar >>>"
}
fread(&Registro,sizeof(Registro),1,alias)
}
print    "No se encuentra ese registro !!!"
fclose(alias) // Cierra el archivo
print   ", < Oprima cualquier tecla para continuar >>>"
}
void BAJA_LOGICA_SECUENCIAL(void)
{
int no_prod // Variable local para el numero de producto que desea
//eliminar
char op //Variable local
clrscr()
print   "BAJAS LOGICAS DE REGISTROS DE PRODUCTOS"
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
{
print "No existe el archivo !!!"
print  ", < Oprima cualquier tecla para continuar >>>"
}
print  ,  "Numero de producto: " read  >> 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.noProd==no_prod)
{
print   "No Prod Descripcion Cantidad Precio "
Print  "---------------------------------------------------------------"
Print Registro.noProd, setw(20), Registro.descrip, setw(10), Registro.cantidad, setw(10), Registro.precio
Registro.noProd=0
strcpy(Registro.descrip,"")
Registro.cantidad=0
Registro.precio=0.0
do {
print   "Esta seguro que desea borrarlo? [S/N] ---> "
op=toupper(getche())
}while(op!='S' && op!='N')
if(op=='S')
{
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET)
fwrite(&Registro,sizeof(Registro),1,alias) // Graba el registro
// con los nuevos campos
print   "Registro eliminado !!!"
}
fclose(alias) // Cierra el archivo
print   ", < Oprima cualquier tecla para continuar >>>"

}
fread(&Registro,sizeof(Registro),1,alias)
}
print   "No se encuentra ese registro !!!"
fclose(alias) // Cierra el archivo
print    ", < Oprima cualquier tecla para continuar >>>"
}

void BAJA_FISICA_SECUENCIAL(void)
{
FILE *temporal //Declaracion local de una variable para controlar el
// archivo temporal
clrscr()
print  "BAJAS 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
{
print  "No existe el archivo !!!"
print  ", < Oprima cualquier tecla para continuar >>>"
}
temporal=fopen("C:\\Datos\EMPORAL.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.noProd!=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\EMPORAL.TMP","C:\\datos\\PRODUCTO.SEC")
//Renombra el archivo temporal con el nombre del archivo original
print   "Archivo compactado !!!"
print   ", < Oprima cualquier tecla para continuar >>>"
}
Final


Programa:










Instituto Tecnológico de Tijuana




Programación Estructurada



Practica 13 (Manejo de archivos 1)



Docente: Ángela Colunga Aldana



Alumno: Daniel Avendaño Reveles



                                       
   Tijuana, Baja California a 2 de diciembre de 2012



Programación:


//Practica 13(Manejo de archivos 1)
//Integrantes del equipo: Avendaño Reveles Daniel
//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 noProd;
char descrip[30];
float precio;
int cantidad;
};
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_prod; // Variable local para el numero de producto
clrscr();
cout << "\n\rALTAS DE REGISTROS DE PRODUCTOS";
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\rNumero de producto: "; 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.noProd==no_prod)
{
cout << "\n\n\n\rRegistro duplicado !!!";
fclose(alias);
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "\n\rDescripcion: "; gets(Registro.descrip);
cout << "\n\rCantidad : "; cin >> Registro.cantidad;
cout << "\n\rPrecio : "; cin >> Registro.precio;
Registro.noProd=no_prod;
fwrite(&Registro,sizeof(Registro),1,alias); // Grabar el Registro
fclose(alias); // Cierra el archivo
cout << "\n\n\n\rProducto 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 PRODUCTOS";
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 producto: "; cin >> no_prod;
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias))
{
if(Registro.noProd==no_prod)
{
cout << "\n\rNo Prod Descripcion Cantidad Precio ";
cout << "\n\r----------------------------------------------------\n\n";
cout<<Registro.noProd<<setw(20)<<Registro.descrip<<setw(10)<<Registro.cantidad<<setw(10)<<Registro.precio<<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 PRODUCTOS";
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 Prod Descripcion Cantidad Precio ";
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.noProd<<setw(20)<<Registro.descrip<<setw(10)<<Registro.cantidad<<setw(10)<<Registro.precio<<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 de producto "<<endl;
cout<<"\n2)Consulta de producto"<<endl;
cout<<"\n3)Listado de productos"<<endl;
cout<<"\n4)Modificar datos de productos"<<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 PRODUCTOS";
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 producto: "; 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.noProd==no_prod)
{
cout << "\n\rNo Prod Descripcion Cantidad Precio \n\n";
cout << "\n\r--------------------------------------------------------------\n\n";
cout<<Registro.noProd<<setw(20)<<Registro.descrip<<setw(10)<<Registro.cantidad<<setw(10)<<Registro.precio<<endl;
cout << "\n\n\n\rAnote los nuevos datos ...";
cout << "\n\rDescripcion: "; gets(Registro.descrip);
cout << "\n\rCantidad : "; cin >> Registro.cantidad;
cout << "\n\rPrecio : "; cin >> Registro.precio;
// 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 numero de producto que desea
//eliminar
char op; //Variable local
clrscr();
cout << "\n\rBAJAS LOGICAS DE REGISTROS DE PRODUCTOS";
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 producto: "; 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.noProd==no_prod)
{
cout << "\n\rNo Prod Descripcion Cantidad Precio "<<endl;
cout<< "\n\r---------------------------------------------------------------\n\n";
cout<<Registro.noProd<<setw(20)<<Registro.descrip<<setw(10)<<Registro.cantidad<<setw(10)<<Registro.precio<<endl;
Registro.noProd=0;
strcpy(Registro.descrip,"");
Registro.cantidad=0;
Registro.precio=0.0;
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.noProd!=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;
}

Pseudocodigo:


Inicio
struct producto
{
noProd int
descrip[30]         char
precio   real
cantidad              int
}
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()
{
opc        int
  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: Print "Final programa "
     break
  default: Print "Error en opcion"
  }
  }
  while(opc !=7)
  getch()
  return 0
  }

void ALTA_SECUENCIAL()
{
no_prod              int
clrscr()
print   "ALTAS DE REGISTROS DE PRODUCTOS"
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
print  "Numero de producto: " read  >> 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.noProd==no_prod)
{
print   "Registro duplicado !!!"
fclose(alias)
}
fread(&Registro,sizeof(Registro),1,alias)
}
print  "Descripcion: " gets(Registro.descrip)
print  "Cantidad : " read  >> Registro.cantidad
print  "Precio : " read  >> Registro.precio
Registro.noProd=no_prod
fwrite(&Registro,sizeof(Registro),1,alias) // Grabar el Registro
fclose(alias) // Cierra el archivo
print   "Producto registrado !!!"
print  ", < Oprima cualquier tecla para continuar >>>"
}
void CONSULTA_SECUENCIAL(void)
{
no_prod              int
clrscr()
print   "CONSULTA 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)
{
print  , "No existe el archivo !!!"
print    ", < Oprima cualquier tecla para continuar >>>"
}
print  "Numero de producto: " read  >> no_prod
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias))
{
if(Registro.noProd==no_prod)
{
print   "No Prod Descripcion Cantidad Precio "
print  ,  "----------------------------------------------------"
Print Registro.noProd, setw(20), Registro.descrip, setw(10), Registro.cantidad, setw(10), Registro.precio
fclose(alias)
print  ", < Oprima cualquier tecla para continuar >>>"
}
fread(&Registro,sizeof(Registro),1,alias)
}
print   "No se encuentra ese registro !!!"
fclose(alias) // Cierra el archivo
print   ", < Oprima cualquier tecla para continuar >>>"
getch()
return
}
void LISTADO_SECUENCIAL(void)
{
clrscr()
print   "LISTADO 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)
{
print   "No existe el archivo !!!"
print   ", < Oprima cualquier tecla para continuar >>>"
}
print    "No Prod Descripcion Cantidad Precio "
print    "-------------------------------------------------------------------"
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
{
Print Registro.noProd, setw(20), Registro.descrip, setw(10), Registro.cantidad, setw(10), Registro.precio
fread(&Registro,sizeof(Registro),1,alias)
}
fclose(alias) // Cierra el archivo
print   "------------------------------------------------------------------"
print   "Fin del listado !!!"
print    ", < Oprima cualquier tecla para continuar >>>"
}
int menu()
{
int opcion
Print "1)alta de producto "
Print "2)Consulta de producto"
Print "3)Listado de productos"
Print "4)Modificar datos de productos"
Print "Selecciona opcion = ?  "
Read opcion
return opcion
}
void MODIFICACION_SECUENCIAL(void)
{
no_prod              int
// Variable local para el numero de producto que desea
//modificar
clrscr()
print   "MODIFICACION DE REGISTROS DE PRODUCTOS"
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
{
print  "No existe el archivo !!!"
print  ", < Oprima cualquier tecla para continuar >>>"
}
print  "Numero de producto: " read  >> 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.noProd==no_prod)
{
print   "No Prod Descripcion Cantidad Precio "
print   "--------------------------------------------------------------"
Print Registro.noProd, setw(20), Registro.descrip, setw(10), Registro.cantidad, setw(10), Registro.precio
print   "Anote los nuevos datos ..."
print  "Descripcion: " gets(Registro.descrip)
print    "Cantidad : " read  >> Registro.cantidad
print    "Precio : " read  >> Registro.precio
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
print   "Registro modificado !!!"
print    ", < Oprima cualquier tecla para continuar >>>"
}
fread(&Registro,sizeof(Registro),1,alias)
}
print    "No se encuentra ese registro !!!"
fclose(alias) // Cierra el archivo
print   ", < Oprima cualquier tecla para continuar >>>"
}
void BAJA_LOGICA_SECUENCIAL(void)
{
int no_prod // Variable local para el numero de producto que desea
//eliminar
char op //Variable local
clrscr()
print   "BAJAS LOGICAS DE REGISTROS DE PRODUCTOS"
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
{
print "No existe el archivo !!!"
print  ", < Oprima cualquier tecla para continuar >>>"
}
print  ,  "Numero de producto: " read  >> 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.noProd==no_prod)
{
print   "No Prod Descripcion Cantidad Precio "
Print  "---------------------------------------------------------------"
Print Registro.noProd, setw(20), Registro.descrip, setw(10), Registro.cantidad, setw(10), Registro.precio
Registro.noProd=0
strcpy(Registro.descrip,"")
Registro.cantidad=0
Registro.precio=0.0
do {
print   "Esta seguro que desea borrarlo? [S/N] ---> "
op=toupper(getche())
}while(op!='S' && op!='N')
if(op=='S')
{
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET)
fwrite(&Registro,sizeof(Registro),1,alias) // Graba el registro
// con los nuevos campos
print   "Registro eliminado !!!"
}
fclose(alias) // Cierra el archivo
print   ", < Oprima cualquier tecla para continuar >>>"

}
fread(&Registro,sizeof(Registro),1,alias)
}
print   "No se encuentra ese registro !!!"
fclose(alias) // Cierra el archivo
print    ", < Oprima cualquier tecla para continuar >>>"
}

void BAJA_FISICA_SECUENCIAL(void)
{
FILE *temporal //Declaracion local de una variable para controlar el
// archivo temporal
clrscr()
print  "BAJAS 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
{
print  "No existe el archivo !!!"
print  ", < Oprima cualquier tecla para continuar >>>"
}
temporal=fopen("C:\\Datos\EMPORAL.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.noProd!=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\EMPORAL.TMP","C:\\datos\\PRODUCTO.SEC")
//Renombra el archivo temporal con el nombre del archivo original
print   "Archivo compactado !!!"
print   ", < Oprima cualquier tecla para continuar >>>"
}
Final

Programa:



No hay comentarios:

Publicar un comentario