Trabajo Práctico Número 9: Archivos

Aquí encontrarás una serie de códigos con el manejo básico de Archivos.
  • Creación de archivo de acceso secuencial

#include <stdio.h>
int main()
{
   int cuenta;        /* número de cuenta */
   char nombre[ 30 ]; /* nombre de cuenta */
   double saldo;      /* saldo de la cuenta */
 
   FILE *ptrCf;     /* ptrCf = apuntador al archivo clientes.dat */
 
   /* fopen abre el archivo. Si no es capaz de crear el archivo, sale del programa  */
   if ( ( ptrCf = fopen( "clientes.dat", "w" ) ) == NULL ) {
      printf( "El archivo no pudo abrirse\n" );
   } /* fin de if */
   else {
      printf( "Introduzca la cuenta, el nombre, y el saldo.\n" );
      printf( "Introduzca EOF al final de la entrada.\n" );
      printf( "? " );
      scanf( "%d%s%lf", &cuenta, nombre, &saldo );
 
      /* escribe la cuenta, el nombre y el saldo dentro del archivo con fprintf */
      while ( !feof( stdin ) ) {
         fprintf( ptrCf, "%d %s %.2f\n", cuenta, nombre, saldo );
         printf( "? " );
         scanf( "%d%s%lf", &cuenta, nombre, &saldo );
      } /* fin de while */
 
      fclose( ptrCf ); /* fclose cierra el archivo */
   } /* fin de else */
 
   return 0; /* indica terminación exitosa */
 
} /* fin de main */
  • Lectura de archivo de acceso secuencial

Programa de investigación crediticia.
#include <stdio.h>
int main()
{
int consulta;      /* número de solicitud */
int cuenta;        /* número de cuenta */
double saldo;      /* saldo de la cuenta */
char nombre[ 30 ]; /* nombre de la cuenta */
FILE *ptrCf;       /* apuntador al archivo clientes.dat */
 
/* fopen abre el archivo; si no se puede abrir el archivo, sale del programa */
if ( ( ptrCf = fopen( "clientes.dat", "r" ) ) == NULL ) {
printf( "El archivo no pudo abrirse\n" );
} /* fin de if */
else {
 
/* despliega las opciones de consulta */
printf( "Introduzca la consulta\n"
" 1 - Lista las cuentas con saldo cero\n"
" 2 - Lista las cuentas con saldo a favor\n"
" 3 - Lista las cuentas con saldo en contra\n"
" 4 - Fin del programa\n? " );
scanf( "%d", &consulta );
 
/* procesa la consulta del usuario */
while ( consulta != 4 ) {
 
/* lee la cuenta, el nombre y el saldo del archivo */
fscanf( ptrCf, "%d%s%lf", &cuenta, nombre, &saldo );
 
switch ( consulta ) {
 
case 1:
printf( "\nCuentas con saldo cero:\n" );
 
/* lee el contenido del archivo (hasta eof) */
while ( !feof( ptrCf ) ) {
 
if ( saldo == 0 ) {
printf( "%-10d%-13s%7.2f\n",
cuenta, nombre, saldo );
} /* fin de if */
 
/* lee la cuenta, el nombre y el saldo del archivo */
fscanf( ptrCf, "%d%s%lf",
&cuenta, nombre, &saldo );
} /* fin de while */
 
break;
 
case 2:
printf( "\nCuentas con saldos a favor :\n" );
 
/* lee el contenido del archivo (hasta eof) */
while ( !feof( ptrCf ) ) {
 
if ( saldo < 0 ) {
printf( "%-10d%-13s%7.2f\n",
cuenta, nombre, saldo );
} /* fin de if */
 
/* lee la cuenta, el nombre y el saldo del archivo */
fscanf( ptrCf, "%d%s%lf",
&cuenta, nombre, &saldo );
} /* fin de while */
 
break;
 
case 3:
printf( "\nCuentas con saldo en contra:\n" );
 
/* lee el contenido del archivo (hasta eof) */
while ( !feof( ptrCf ) ) {
 
if ( saldo > 0 ) {
printf( "%-10d%-13s%7.2f\n",
cuenta, nombre, saldo );
} /* fin de if */
 
/* lee la cuenta, el nombre y el saldo del archivo */
fscanf( ptrCf, "%d%s%lf",
&cuenta, nombre, &saldo );
} /* fin while */
 
break;
 
} /* fin de switch */
 
rewind( ptrCf ); /* devuelve ptrCf al principio del archivo */
 
printf( "\n? " );
scanf( "%d", &consulta );
} /* fin de while */
 
printf( "Fin de la ejecucion.\n" );
fclose( ptrCf ); /* fclose cierra el archivo */
} /* fin de else */
 
return 0; /* indica terminación exitosa */
 
} /* fin de main */
  • Manejo de archivos de acceso aleatorio

Ejercicio Nº3 de estructuras.
En un mercado se guarda la siguiente información de los artículos:
a. Nro de artículo
b. Precio unitario
c. Cantidad mínima necesaria
d. Cantidad actual en el local
e. Fecha de última venta
f. Nro de depósito ( entero que representa el nro. de depósito donde se encuentra el stock restante de este artículo)
g. Cantidad en depósito
Con esta información se pide realizar la siguientes funciones:
a) Diseñar una función que imprima los datos de los artículos cuya cantidad actual en el local sea menor que la cantidad mínima necesaria y si hay stock en depósito se debe imprimir los datos donde se encuentra la mercadería.
b) Diseñar una función que devuelva la cantidad de artículos cuyo mes de última venta fue septiembre (mes 09).
[[code]]
[[code format="c"]]
# include <stdio.h>
# include <conio.h>
 
struct fecha{
int dia;
int mes;
int anio;
}fecha;
 
struct datosarticulo{
long nro;
double precio;
int cantmin;
int cantact;
struct fecha fultp;
int ndep;
int cant;
} articulo;
 
void carga (FILE *fcar);
int proceso(FILE *flee);
void main()
{
clrscr();
int cant;
FILE *fpt;
fpt= fopen ("mercado.dat", "wb+");
if (fpt== NULL) printf("error del archivo");
else
{
carga(fpt);
rewind(fpt);
cant=proceso(fpt);
printf("\ncantidad de ventas con ultimo pago septiembre es %d\n", cant);
}
fclose(fpt);
getch();
}
 
void carga (FILE *fcar)
{
long nro;
printf("ingrese nro articulo(0 para terminar)......");
scanf(" %ld",&nro);
while(nro !=0){
articulo.nro= nro;
printf("\ningrese precio:");
scanf("%lf",& articulo.precio);
printf("\ningrese cant. minima y actual");
scanf("%d %d",&articulo.cantmin,&articulo.cantact);
printf("\ningrese fecha ultimo pago dd/mm/aa");
scanf("%d/%d/%d",&articulo.fultp.dia,&articulo.fultp.mes,&articulo.fultp.anio);
printf("\ningrese nro deposito");
scanf("%d",&articulo.ndep);
printf("ingrese cant. en deposito");
scanf("%d",&articulo.cant),
fwrite (&articulo,sizeof( struct datosarticulo),1,fcar);
fflush(fcar);
printf("\ningrese nro articulo(0 para terminar) ......");
scanf(" %ld",&nro);
}
}
 
int proceso (FILE *flee)
{
clrscr();
int cont=0;
fread (&articulo,sizeof(struct datosarticulo),1,flee);
while (!feof(flee)){
if (articulo.cantact< articulo.cantmin){
printf("\nArticulo:             %ld",articulo.nro);
printf("\nprecio: %lf",articulo.precio);
printf("\ncant. minima y actual: %d , %d",articulo.cantmin, articulo.cantact);
printf("\nfecha ultimo pago: %d/%d/%d",articulo.fultp.dia,articulo.fultp.mes,
articulo.fultp.anio);
if (articulo.cant>0) printf("\n Nro de deposito: %d",articulo.ndep);
}
else {printf("\ncantidad mayor que la minima del articulo %ld",articulo.nro);}
if (articulo.fultp.mes ==9)cont++;
fread (&articulo,sizeof(struct datosarticulo),1,flee);
printf("\n---------------------------------------------\n");
}
return(cont);
}