miércoles, 28 de noviembre de 2012

Tarea #4 Unidad 3





Instituto Tecnológico de Tijuana



Programación Estructurada



Tarea #4 de la unidad 3



Docente: Ángela Colunga Aldana



Alumno: Daniel Avendaño Reveles


Tijuana, Baja California a 30 de noviembre de 2012

                                          
                                                             ·       Cuestionario

1.    ¿Cuál es la relación que existe entre la memoria principal, el microprocesador y los dispositivos de almacenamiento secundario?
Existe una estrecha relación entre la memoria principal, el microprocesador y los dispositivos de almacenamiento secundario ya que el procesamiento que realiza una computadora es tarea absoluta del microprocesador en conjunción con la memoria principal; es decir, los dispositivos de almacenamiento secundario (diskettes, discos duros, CD, flash drives, etc.), no procesan datos, sólo los almacenan.

2.    ¿Cómo se le llama a los elementos individuales de los archivos?
Datos o campos.

3.    ¿Cómo se clasifican los archivos por tipo de contenido?
Se clasifican por texto y por códigos binarios.

4.    ¿Qué son los archivos de texto?
Son aquellos que pueden contener cualquier clase de datos y de tal manera que son “entendibles” por la gente. Los datos en un archivo de texto se almacenan usando el código ASCII, en el cual cada carácter es representado por un simple byte.

5.    ¿Qué son los archivos binarios?
Son los archivos almacenan los datos numéricos con su representación binaria. Pueden ser archivos que contienen instrucciones en lenguaje máquina listas para ser ejecutadas.

6.    ¿Cómo se clasifican los archivos por tipo de acceso?
Se clasifican por archivos secuenciales y archivos directos (relativos o aleatorios).

7.    ¿Cómo funcionan los archivos secuenciales?
En este tipo de archivos los registros se graban en secuencia o consecutivamente y deben acezarse de ese mismo modo, es decir, conforme se van insertando nuevos registros, éstos se almacenan al final del último registro almacenado; por lo tanto, cuando se desea consultar un registro almacenado es necesario recorrer completamente el archivo leyendo cada registro y comparándolo con el que se busca.

8.    ¿Cómo funcionan los archivos directos?
En los archivos directos no es necesario recorrerlo completamente para acceder un registro en particular, sino se puede colocar el apuntador interno del archivo directamente en el registro deseado, permitiendo con esto mayor rapidez de acceso.

9.    ¿Cuál es el encabezado que se necesita escribir dentro de un programa de C++ en el que se utilizaran archivos?
#include <stdio.h>

10. ¿Para que se utiliza la funcion fopen?
Se utiliza para abrir un archivo, determinar el modo de apertura y establecer la vía de comunicación mediante su alias correspondiente. Además determinar el tipo de contenido del archivo (texto o binario).

11. ¿Cuáles son las funciones que se utilizan para cerrar un archivo?
Funcion fclose () o fcloseall (). Si se usa fclose es necesario indicarle el alias del archivo que se desea cerrar. La función fcloseall cierra todos los archivos abiertos.

12. ¿Para que sirve la funcion fwrite ()?
Proporciona el mecanismo para almacenar todos los campos de un registro en un archivo. Cabe destacar que al utilizar esta función, se almacena una variable (de tipo struct) que representa un bloque de datos o campos; es decir, no se almacena campo por campo.

13. ¿Qué son los buffers?
Son un área de almacenamiento temporal en memoria para el conjunto de datos leídos o escritos en el archivo. Estos buffers retienen datos en tránsito desde y hacia al archivo y tienen la finalidad de hacer más eficiente las operaciones de entrada/salida en los archivos de disco, provocando menor cantidad de accesos, los cuales son más lentos que la memoria.

14. ¿Para que se utiliza la funcion fread ()?
La función fread permite “cargar” todos los campos de un registro en un archivo, es decir, lee un registro y lo copia en la memoria RAM. Esta función tiene los mismos argumentos que la función fwrite.

15. ¿Cómo finalidad de la funcion fseek ()?
Esta funcion puede reposicionar el apuntador de los archivos, es decir, la posición dentro del archivo.

16. ¿Cuáles son los argumentos que permiten reposicionar el apuntador del archivo en la dirección física?
El alias del archivo, la dirección física (en bytes) y el punto de referencia. Para poder reposicionar el apuntador del archivo es necesario que éste se encuentre abierto y se le haya asignado el alias correspondiente, también es necesario calcular la dirección física donde se desea colocar e indicarle el punto de referencia de donde se partirá en el conteo de la cantidad de bytes indicado por la dirección física, los cuales pueden ser desde el principio, desde donde se encuentre el apuntador del archivo y desde el final.

17. ¿Para que se utiliza la funcion rewind ()?
Se utiliza para colocar el apuntador del archivo al principio de un archivo abierto sin necesidad de usar la función fseek. Basta con enviar el alias del archivo como argumento.

18. ¿Para que se utiliza el macro feof ()?
Se utiliza para determinar si se ha encontrado el final de un archivo. Si se encuentra el final de un archivo, devuelve un valor diferente de cero y cero en caso contrario. Para invocarlo es necesario colocar el alias del archivo abierto como argumento. Se utiliza mucho esta función en recorridos de tipo secuencial.

19. ¿Para que sirve la funcion rename ()?
Esta función tiene como objetivo cambiar el nombre de un archivo o subdirectorio especificado por su ruta de acceso. Sólo necesita dos argumentos: el nombre anterior del archivo y el nuevo nombre. Es importante destacar que esta función sólo puede aplicarse a archivos cerrados.

20. ¿Para que sirve la funcion remove ()?
La función remove elimina definitivamente un archivo especificando su nombre. Es importante destacar que esta función sólo puede aplicarse a archivos cerrados.

21. ¿De que depende el modificar el contenido de los campos de registros de un archivo?
Depende de la rutina de consulta, ya que es necesario localizar previamente el registro que se desea modificar, capturar los nuevos valores y posteriormente grabar el registro completo en la misma posición que se encontraba.

22. ¿En que consiste la rutina de bajas lógicas?
Consisten en “marcar” los registros eliminados. En el ejemplo práctico que se muestra a continuación, el registro borrado se “limpia”, dejando en blanco todos sus campos (colocando el valor cero en los campos numéricos y blancos en las cadenas o de tipo carácter).

23. ¿En que consiste la rutina de bajas físicas?
Consiste en eliminar definitivamente los espacios dejados por los registros borrados lógicamente. Cuando se elimina un registro en forma lógica dejando en blanco sus campos, sigue ocupando espacio en el archivo, sin embargo se puede diseñar una rutina que se apoye de un archivo auxiliar (también secuencial), en el cual se graben todos los registros válidos, es decir, los registros no eliminados, para posteriormente eliminar el archivo original y renombrar este archivo auxiliar como el archivo original.

24. ¿Qué sucede cuando se crea un archivo ya existente?
Se pierde su contenido anterior.

25. ¿A que rutina se asemeja la rutina de bajas lógicas?
Se asemeja mucho a la rutina de modificaciones, sólo que en las bajas no se capturan los nuevos valores, sino se les asigna valores en blanco y se graba el registro completo en la misma posición en la que se encontraba. La diferencia entre las rutinas de bajas lógicas del archivo secuencial y el archivo directo radica en el mecanismo utilizado para localizar el registro que se desea eliminar.

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: