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:
#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
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:
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
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
No hay comentarios:
Publicar un comentario