domingo, 2 de diciembre de 2012

Practica 13

Practica 13 problema 1
Codificacion C++:

#include <iostream.h>
 #include <conio.h>
 #include <iomanip.h>
 #include <stdio.h>
 struct producto
 {
 int noProd;
 char descrip[30];
 float precio;
 int cantidad;
 };
 producto Registro;
 FILE*alias;

 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+");
 if(alias==NULL)
 alias=fopen("c:\\Datos\\PRODCTO.SEC","wb");
 cout<<"\n\n\n\rNumero de producto:";cin>>no_prod;
 fread(&Registro,sizeof(Registro),1,alias);
 while(!feof(alias))
 {
 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);
 fclose(alias);
 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\\PRODUCTOS.SEC","rb");
 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;
 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);
cout<<"\n\r<<<Oprima cualquier tecla para continuar>>>";
getch();
return;
}
void LISTADO_SECUENCIAL(void)
{
clrscr();
cout<<"\n\rLISTADO DE REGISTRO DE PRODUCTOS";
alias=fopen("c:\\Datos\\PRODUCTO.SEC","rb");
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);
while(!feof(alias))
{
cout<<Registro.noProd<<setw(20)<<Registro.descrip<<setw(10)<<Registro.cantidad<<setw(10)<<Registro.precio<<endl;
fread(&Registro,sizeof(Registro),1,alias);
}
fclose(alias);
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)Salida programa"<<endl;
cout<<"\n\nSeleccioa opcion=?";
cin>>opcion;
return opcion;
}
void MODIFICACION_SECUENCIAL(void)
 {
 int no_prod;
 clrscr();
 cout<<"\n\rMODIFICACION DE REGISTROS DE PRODUCTOS";
 alias=fopen("c:\\Datos\\PRODUCTO.SEC","rb+");
 if(alias==NULL)
 {
 cout<<"\n\n\n\r No existe el archivo!!!";
 cout<<"\n\r<<< Oprima cualquier tecla para continuar>>>";
 getch();
 return;
 }
 cout<<"\n\n\n\rNumeros de producto:";cin>>no_prod;
 fread(&Registro,sizeof(Registro),1,alias);
 while(!feof(alias))
 {
 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;
 fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);
 fwrite(&Registro,sizeof(Registro),1,alias);
 fclose(alias);
 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);
 cout<<"\n\r<<<Oprima cualquier tecla para continuar>>>";
 getch();
 return;
 }
 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: cout<<"\n\nFinal programa";
break;
default: cout<<"\nError en opcion"<<endl;
 }
}

while(opc !=5);

getch();
return 0;
}

Pseudocodigo:
Inicio.
registro producto
 {
 noProd int
 descrip[30] char
 precio real
 cantidad int
 }
 producto Registro
 FILE*alias

funcion  void ALTA_SECUENCIAL()
 {
 no_prod int
 clrscr()
 Print "\n\rALTAS DE REGISTROS DE PRODUCTOS"
 alias=fopen("c:\\Datos\\PRODUCTO.SEC","rb+")
 if(alias==NULL)
 alias=fopen("c:\\Datos\\PRODCTO.SEC","wb")
 Print "\n\n\n\rNumero de producto:"  Read no_prod;
 fread(&Registro,sizeof(Registro),1,alias)
 while(!feof(alias))
 {
 if(Registro.noProd==no_prod)
 {
 Print "\n\n\n\rRegistro duplicado!!!"
 fclose(alias)

 }
 fread(&Registro,sizeof(Registro),1,alias)
 }
 Print "\n\rDescripcion:"  gets(Registro.descrip)
 Print "\n\rCantidad:"  Read  Registro.cantidad
 Print "\n\rPrecio:" Read  Registro.precio
 Registro.noProd=no_prod
 fwrite(&Registro,sizeof(Registro),1,alias)
 fclose(alias)
 Print "\n\n\n\rProducto registrado!!!"
 Print "\n\r<<<Oprima cualquier tecla para continuar >>>   "

 }
Funcion  void CONSULTA_SECUENCIAL(void)
 {
  no_prod int 
 clrscr()
 Print "\n\rCONSULTA DE REGISTROS DE PRODUCTOS"
 alias=fopen("c:\\Datos\\PRODUCTOS.SEC","rb")
 if(alias==NULL)
 {
 Print "\n\n\n\rNo existe el archivo!!!"
 Print "\n\r<<<Oprima cualquier tecla para continuar>>>"

 }
 Print "\n\n\n\rNumero de producto:" Read  no_prod;
 while(!feof(alias))
 {
 if(Registro.noProd==no_prod)
 {
 Print "\n\rNo Prod Descripcion Cantidad precio"
Print "\n\r------------------------------------------------------------\n\n"
Print Registro.noProd , setw(20) , Registro.descrip , setw(10) , Registro.cantidad , setw(10) , Registro.precio
fclose(alias)
Print "\n\r<<< Oprima cualquier tecla para continuar>>>"

}
fread(&Registro,sizeof(Registro),1,alias)
}
Print "\n\rNo se encuentra ese registro !!!"
fclose(alias)
Print "\n\r<<<Oprima cualquier tecla para continuar>>>"

}
funcion  void LISTADO_SECUENCIAL(void)
{
clrscr()
Print "\n\rLISTADO DE REGISTRO DE PRODUCTOS"
alias=fopen("c:\\Datos\\PRODUCTO.SEC","rb")
if(alias==NULL)
{
Print "\n\n\n\rNo existe el archivo!!!"
Print "\n\r<<< Oprima cualquier tecla para continuar>>>"

}
Print "\n\rNo Prod Descripcion Cantidad Precio"
Print "\n\r------------------------------------------\n\n"
fread(&Registro,sizeof(Registro),1,alias);
while(!feof(alias))
{
Print Registro.noProd , setw(20) , Registro.descrip , setw(10) , Registro.cantidad , setw(10) , Registro.precio
fread(&Registro,sizeof(Registro),1,alias)
}
fclose(alias)
Print "\n\r-----------------------------------------------------------------\n\n"
Print "\n\rFin del listado!!!"
Print "\n\r<<<Oprima cualquier tecla para continuar>>>"

}
menu() int 
{
opcion int 
Print "\n\n1)alta de producto"
Print "\n2)Consulta de producto"
Print "\n3)Listado de productos"
Print "\n4)Modificar datos de productos"
Print "\n5)Salida programa"
Print "\n\nSeleccioa opcion=?"
Read opcion
return opcion
}
funcion void MODIFICACION_SECUENCIAL(void)
 {
 no_prod int 
 clrscr()
 Print "\n\rMODIFICACION DE REGISTROS DE PRODUCTOS"
 alias=fopen("c:\\Datos\\PRODUCTO.SEC","rb+")
 if(alias==NULL)
 {
 Print "\n\n\n\r No existe el archivo!!!"
 Print "\n\r<<< Oprima cualquier tecla para continuar>>>"
 
 }
 Print "\n\n\n\rNumeros de producto:" Read no_prod
 fread(&Registro,sizeof(Registro),1,alias)
 while(!feof(alias))
 {
 if(Registro.noProd==no_prod)
 {
 Print "\n\rNo prod descripcion Cantidad precio\n\n"
 Print "\n\r--------------------------------------------\n\n"
 Print Registro.noProd , setw(20) , Registro.descrip , setw(10) , Registro.cantidad , setw(10) , Registro.precio
 Print "\n\n\n\rAnote los nuevos datos..."
 Print "\n\rDescripcion:";gets(Registro.descrip)
 Print "\n\rCantidad:"; cin>>Registro.cantidad
 Print "\n\rprecio:"; cin>>Registro.precio
 fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET)
 fwrite(&Registro,sizeof(Registro),1,alias)
 fclose(alias)
 Print "\n\n\n\rRegistro modificado!!!"
 Print "\n\r<<< Oprima cualquier tecla para continuar>>>"

 }
 fread(&Registro,sizeof(Registro),1,alias)
 }
 Print "\n\rNo se encuentra ese registro!!!"
 fclose(alias)
 Print "\n\r<<<Oprima cualquier tecla para continuar>>>"
 
 }
  main() int 

{
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: Print "\n\nFinal programa"
break;
default: Print "\nError en opcion"
 }
}

while(opc !=5)
fin.

Imagen de corrida del programa:


Problema 2
Codificacion C++:
#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.
registro producto
 {
 noProd int
 descrip[30] char
 precio real
 cantidad int
 }
 producto Registro
 FILE*alias

funcion  void ALTA_SECUENCIAL()
 {
 no_prod int
 clrscr()
 Print "\n\rALTAS DE REGISTROS DE PRODUCTOS"
 alias=fopen("c:\\Datos\\PRODUCTO.SEC","rb+")
 if(alias==NULL)
 alias=fopen("c:\\Datos\\PRODCTO.SEC","wb")
 Print "\n\n\n\rNumero de producto:"  Read no_prod;
 fread(&Registro,sizeof(Registro),1,alias)
 while(!feof(alias))
 {
 if(Registro.noProd==no_prod)
 {
 Print "\n\n\n\rRegistro duplicado!!!"
 fclose(alias)

 }
 fread(&Registro,sizeof(Registro),1,alias)
 }
 Print "\n\rDescripcion:"  gets(Registro.descrip)
 Print "\n\rCantidad:"  Read  Registro.cantidad
 Print "\n\rPrecio:" Read  Registro.precio
 Registro.noProd=no_prod
 fwrite(&Registro,sizeof(Registro),1,alias)
 fclose(alias)
 Print "\n\n\n\rProducto registrado!!!"
 Print "\n\r<<<Oprima cualquier tecla para continuar >>>   "

 }
Funcion  void CONSULTA_SECUENCIAL(void)
 {
  no_prod int 
 clrscr()
 Print "\n\rCONSULTA DE REGISTROS DE PRODUCTOS"
 alias=fopen("c:\\Datos\\PRODUCTOS.SEC","rb")
 if(alias==NULL)
 {
 Print "\n\n\n\rNo existe el archivo!!!"
 Print "\n\r<<<Oprima cualquier tecla para continuar>>>"

 }
 Print "\n\n\n\rNumero de producto:" Read  no_prod;
 while(!feof(alias))
 {
 if(Registro.noProd==no_prod)
 {
 Print "\n\rNo Prod Descripcion Cantidad precio"
Print "\n\r------------------------------------------------------------\n\n"
Print Registro.noProd , setw(20) , Registro.descrip , setw(10) , Registro.cantidad , setw(10) , Registro.precio
fclose(alias)
Print "\n\r<<< Oprima cualquier tecla para continuar>>>"

}
fread(&Registro,sizeof(Registro),1,alias)
}
Print "\n\rNo se encuentra ese registro !!!"
fclose(alias)
Print "\n\r<<<Oprima cualquier tecla para continuar>>>"

}
funcion  void LISTADO_SECUENCIAL(void)
{
clrscr()
Print "\n\rLISTADO DE REGISTRO DE PRODUCTOS"
alias=fopen("c:\\Datos\\PRODUCTO.SEC","rb")
if(alias==NULL)
{
Print "\n\n\n\rNo existe el archivo!!!"
Print "\n\r<<< Oprima cualquier tecla para continuar>>>"

}
Print "\n\rNo Prod Descripcion Cantidad Precio"
Print "\n\r------------------------------------------\n\n"
fread(&Registro,sizeof(Registro),1,alias);
while(!feof(alias))
{
Print Registro.noProd , setw(20) , Registro.descrip , setw(10) , Registro.cantidad , setw(10) , Registro.precio
fread(&Registro,sizeof(Registro),1,alias)
}
fclose(alias)
Print "\n\r-----------------------------------------------------------------\n\n"
Print "\n\rFin del listado!!!"
Print "\n\r<<<Oprima cualquier tecla para continuar>>>"

}
menu() int 
{
opcion int 
Print "\n\n1)alta de producto"
Print "\n2)Consulta de producto"
Print "\n3)Listado de productos"
Print "\n4)Modificar datos de productos"
Print "\n5)Salida programa"
Print "\n\nSeleccioa opcion=?"
Read opcion
return opcion
}
funcion void MODIFICACION_SECUENCIAL(void)
 {
 no_prod int 
 clrscr()
 Print "\n\rMODIFICACION DE REGISTROS DE PRODUCTOS"
 alias=fopen("c:\\Datos\\PRODUCTO.SEC","rb+")
 if(alias==NULL)
 {
 Print "\n\n\n\r No existe el archivo!!!"
 Print "\n\r<<< Oprima cualquier tecla para continuar>>>"
 
 }
 Print "\n\n\n\rNumeros de producto:" Read no_prod
 fread(&Registro,sizeof(Registro),1,alias)
 while(!feof(alias))
 {
 if(Registro.noProd==no_prod)
 {
 Print "\n\rNo prod descripcion Cantidad precio\n\n"
 Print "\n\r--------------------------------------------\n\n"
 Print Registro.noProd , setw(20) , Registro.descrip , setw(10) , Registro.cantidad , setw(10) , Registro.precio
 Print "\n\n\n\rAnote los nuevos datos..."
 Print "\n\rDescripcion:";gets(Registro.descrip)
 Print "\n\rCantidad:"; cin>>Registro.cantidad
 Print "\n\rprecio:"; cin>>Registro.precio
 fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET)
 fwrite(&Registro,sizeof(Registro),1,alias)
 fclose(alias)
 Print "\n\n\n\rRegistro modificado!!!"
 Print "\n\r<<< Oprima cualquier tecla para continuar>>>"

 }
 fread(&Registro,sizeof(Registro),1,alias)
 }
 Print "\n\rNo se encuentra ese registro!!!"
 fclose(alias)
 Print "\n\r<<<Oprima cualquier tecla para continuar>>>"
 
 }
  main() int 

{
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: Print "\n\nFinal programa"
break;
default: Print "\nError en opcion"
 }
}

while(opc !=5)

funcion void BAJA_LOGICA_SECUENCIAL(void)
{
no_prod int 
op char
clrscr()
Print  "\n\rBAJAS LOGICAS DE REGISTROS DE PRODUCTOS"
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb+")
if(alias==NULL) 
{
Print  "\n\n\n\rNo existe el archivo !!!"
Print  "\n\r<<< Oprima cualquier tecla para continuar >>>"

}
Print  "\n\n\n\rNumero de producto: " Rad  no_prod
fread(&Registro,sizeof(Registro),1,alias)
{
if(Registro.noProd==no_prod)
{
Print  "\n\rNo Prod Descripcion Cantidad Precio "
Print  "\n\r---------------------------------------------------------------\n\n"
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 "\n\n\rEsta 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); 
Print  "\n\n\n\rRegistro eliminado !!!"
}
fclose(alias)
Print  "\n\r<<< Oprima cualquier tecla para continuar >>>"

}
fread(&Registro,sizeof(Registro),1,alias)
}
Print  "\n\rNo se encuentra ese registro !!!"
fclose(alias)
Print  "\n\r<<< Oprima cualquier tecla para continuar >>>"
}

funcion  void BAJA_FISICA_SECUENCIAL(void)
{
FILE *temporal
clrscr()
Print  "\n\rBAJAS FISICAS DE REGISTROS DE PRODUCTOS" alias=fopen("C:\\datos\\PRODUCTO.SEC","rb"); 
if(alias==NULL) 
{
Print  "\n\n\n\rNo existe el archivo !!!"
Print "\n\r<<< Oprima cualquier tecla para continuar >>>"

}
temporal=fopen("C:\\datos\\TEMPORAL.TMP","wb"); 
fread(&Registro,sizeof(Registro),1,alias)

while(!feof(alias)) 
{
if(Registro.noProd!=0)
fwrite(&Registro,sizeof(Registro),1,temporal)

fread(&Registro,sizeof(Registro),1,alias)
}
fcloseall() 
remove("C:\\datos\\PRODUCTO.SEC")
rename("C:\\datos\\TEMPORAL.TMP","C:\\datos\\PRODUCTO.SEC")
Print  "\n\n\n\rArchivo compactado !!!"
Print  "\n\r<<< Oprima cualquier tecla para continuar >>>"
}
fin.

Imagen de corrida del programa:



No hay comentarios:

Publicar un comentario