Este programa lee de manera secuencial un archivo de acceso aleatorio, actualiza los datos ya escritos en el archivo, crea nuevos datos para colocarlos en el archivo, y elimina los datos ya existentes en el archivo.

c:
#include <stdio.h>

/* definición de la estructura datosCliente */
struct datosCliente {
   int numCta;          /* número de cuenta */
   char apellido[ 15 ]; /* apellido */
   char nombre[ 10 ];   /* nombre */
   double saldo;        /* saldo */
}; /* fin de la estructura datosCliente */

/* prototipos */
int intOpcion( void );
void archivoTexto( FILE *ptrLee );
void actualizaRegistro( FILE *ptrF );
void nuevoRegistro( FILE *ptrF );
void eliminaRegistro( FILE *ptrF );

int main()
{
   FILE *ptrCf; /* apuntador de archivo credito.dat */
   int eleccion;  /* elección del usuario */

   /* fopen abre el archivo; si no se puede abrir, sale del archivo */
   if ( ( ptrCf = fopen( "credito.dat", "rb+" ) ) == NULL ) {
      printf( "El archivo no pudo abrirse.\n" );
   } /* fin de if */
   else {

      /* permite al usuario especificar una acción */
      while ( ( eleccion = intOpcion() ) != 5 ) {

         switch ( eleccion ) {

            /* crea el archivo desde el registro */
            case 1:
               archivoTexto( ptrCf );
               break;

            /* actualiza registro */
            case 2:
               actualizaRegistro( ptrCf );
               break;

            /* crea registro */
            case 3:
               nuevoRegistro( ptrCf );
               break;
            /* elimina el registro existente */
            case 4:
               eliminaRegistro( ptrCf );
               break;
         
            /* si el usuario no selecciona una opción válida, despliega un mensaje */
            default:
               printf( "Opcion incorrecta\n" );
               break;
       
         } /* fin de switch */

      } /* fin de while */

      fclose( ptrCf ); /* fclose cierra el archivo */
   } /* fin de else */
 
   return 0; /* indica terminación exitosa */

} /* fin de main */

  /* crea un archivo de texto con formato para impresión */
void archivoTexto( FILE *ptrLee )
{
   FILE *ptrEscribe; /* apuntador del archivo cuentas.txt */

   /* crea datosCliente con información predeterminada */
   struct datosCliente cliente = { 0, "", "", 0.0 };

   /* fopen abre el archivo; si no se puede abrir, sale del archivo */
   if ( ( ptrEscribe = fopen( "cuentas.txt", "w" ) ) == NULL ) {
      printf( "No pudo abrirse el archivo.\n" );
   } /* fin de if */
   else {
      rewind( ptrLee ); /* establece el apuntador en el principio del archivo */
      fprintf( ptrEscribe, "%-6s%-16s%-11s%10s\n",
         "Cta", "Apellido", "Nombre","Saldo" );

      /* copia todos los registros del archivo de acceso aleatorio dentro del archivo de texto */
      while ( !feof( ptrLee ) ) {
         fread( &#038;cliente, sizeof( struct datosCliente ), 1, ptrLee );

         /* escribe un registro individual en el archivo de texto */
         if ( cliente.numCta != 0 ) {
            fprintf( ptrEscribe, "%-6d%-16s%-11s%10.2f\n",
               cliente.numCta, cliente.apellido,
               cliente.nombre, cliente.saldo );
         } /* fin de if */

      } /* fin de while */

      fclose( ptrEscribe ); /* fclose cierra el archivo */
   } /* fin de else */

} /* fin de la función archivoTexto */

/* actualiza el saldo en el registro */
void actualizaRegistro( FILE *ptrF )
{
   int cuenta;         /* número de cuenta */
   double transaccion; /* monto de la transacción */

   /* crea datosCliente sin información  */
   struct datosCliente cliente = { 0, "", "", 0.0 };

   /* obtiene el número de cuenta para actualización */
   printf( "Introduzca cuenta para actualizacion ( 1 - 100 ): " );
   scanf( "%d", &#038;cuenta );

   /* mueve el apuntador de archivo para corregir el registro del archivo */
   fseek( ptrF, ( cuenta - 1 ) * sizeof( struct datosCliente ),
      SEEK_SET );

   /* lee un registro del archivo */
   fread( &#038;cliente, sizeof( struct datosCliente ), 1, ptrF );

   /* despliega un error si la cuenta no existe */
   if ( cliente.numCta == 0 ) {
      printf( "La cuenta #%d no tiene informacion.\n", cuenta );
   } /* fin de if */
   else { /* actualiza el registro */
      printf( "%-6d%-16s%-11s%10.2f\n\n",
         cliente.numCta, cliente.apellido,
         cliente.nombre, cliente.saldo );
     
      /* pide al usuario el monto de la transacción */
      printf( "Introduzca el cargo ( + ) o el pago ( - ): " );
      scanf( "%lf", &#038;transaccion );
      cliente.saldo += transaccion; /* actualiza el saldo del registro */
     
      printf( "%-6d%-16s%-11s%10.2f\n",
         cliente.numCta, cliente.apellido,
         cliente.nombre, cliente.saldo );
     
      /* mueve al apuntador de archivo al registro correcto en el archivo */
      fseek( ptrF, ( cuenta - 1 ) * sizeof( struct datosCliente ),
         SEEK_SET );

      /* escribe el registro actualizado sobre el registro anterior en el archivo */
      fwrite( &#038;cliente, sizeof( struct datosCliente ), 1, ptrF );
   } /* fin de else */

} /* fin de la función actualizaRegistro */

/* elimina el registro existente */
void eliminaRegistro( FILE *ptrF )
{

   struct datosCliente cliente; /* almacena los registros leídos en el archivo */
   struct datosCliente clienteEnBlanco = { 0, "", "", 0 }; /* cliente en blanco */
   
   int numCuenta; /* número de cuenta */

   /* obtiene el número de cuenta para eliminarlo */
   printf( "Introduzca el numero de cuenta a eliminar ( 1 - 100 ): " );
   scanf( "%d", &#038;numCuenta );

   /* mueve el apuntador de archivo al registro correcto en el archivo */
   fseek( ptrF, ( numCuenta - 1 ) * sizeof( struct datosCliente ),
      SEEK_SET );

   /* lee el registro del archivo */
   fread( &#038;cliente, sizeof( struct datosCliente ), 1, ptrF );

   /* si el registro no existe, despliega un error */
   if ( cliente.numCta == 0 ) {
      printf( "La cuenta %d no existe.\n", numCuenta );
   } /* fin de if */
   else { /* elimina el registro */

      /* mueve el apuntador de archivo hacia el registro correcto en el archivo */
      fseek( ptrF, ( numCuenta - 1 ) * sizeof( struct datosCliente ),
         SEEK_SET );

      /* reemplaza el registro existente con un registro en blanco */
      fwrite( &#038;clienteEnBlanco,
         sizeof( struct datosCliente ), 1, ptrF );
   } /* fin de else */

} /* fin de la función eliminaRegistro */

/* crea e inserta un registro */
void nuevoRegistro( FILE *ptrF )
{
   /* crea datosCliente con información predeterminada */
   struct datosCliente cliente = { 0, "", "", 0.0 };

   int numCuenta; /* número de cuenta */

   /* obtiene el número de cuenta a crear */
   printf( "Introduzca el nuevo numero de cuenta ( 1 - 100 ): " );
   scanf( "%d", &#038;numCuenta );

   /* mueve el apuntador de archivo hacia el registro correcto en el archivo  */
   fseek( ptrF, ( numCuenta - 1 ) * sizeof( struct datosCliente ),
      SEEK_SET );

   /* lee el registro desde el archivo */
   fread( &#038;cliente, sizeof( struct datosCliente ), 1, ptrF );

   /* si la cuenta ya existe, despliega un error */
   if ( cliente.numCta != 0 ) {
      printf( "La cuenta #%d ya contiene informacion.\n",
              cliente.numCta );
   } /* fin de if */
   else { /* crea registro */

      /* el usuario introduce el apellido, el nombre y el saldo */
      printf( "Introduzca el apellido, el nombre, y el saldo\n? " );
      scanf( "%s%s%lf", &#038;cliente.apellido, &#038;cliente.nombre,
         &#038;cliente.saldo );

      cliente.numCta = numCuenta;
     
      /* mueve el apuntador de archivo hacia el registro correcto en el archivo */
      fseek( ptrF, ( cliente.numCta - 1 ) *
         sizeof( struct datosCliente ), SEEK_SET );

      /* inserta el registro en el archivo */
      fwrite( &#038;cliente,
         sizeof( struct datosCliente ), 1, ptrF );
   } /* fin de else */

} /* fin de la función nuevoRegistro */

/* inhabilita al usuario para introducir una opción de menú */
int intOpcion( void )
{
   int opcionMenu; /* variable para almacenar la opción del usuario */

   /* despliega las opciones disponibles */
   printf( "\nIntroduzca su opcion\n"
      "1 - almacena un archivo de texto con formato, de las cuentas llamadas\n"
      "    \"cuentas.txt\" para impresion\n"
      "2 - actualiza una cuenta\n"
      "3 - agrega una nueva cuenta\n"
      "4 - elimina una cuenta\n"
      "5 - fin del programa\n? " );

   scanf( "%d", &#038;opcionMenu ); /* recibe la opción del usuario */

   return opcionMenu;

} /* fin de la función introduceOpcion */
¿Ya le viste algún error? Dejanos tu correción ;-)

Antes de comentar: Gran parte de los ejercicios propuestos no tienen librerías debido a que Wordpress elimina los tags HTML. Si sabes/tienes/conoces las librerías que hacen falta, déjalo en los comentarios.

Otro punto antes de comentar, Si vas a sugerir un segmento de código en algún lenguaje debes hacerlo así:

De esta manera el código sale coloreado.

Otro punto importante para muchos que sienten que se les ignora: Todos los comentarios los reviso y en su debido momento los apruebo, pero ojo con el último párrafo.

Para poner los símbolos de las librerías sin que desaparezcan, debes escribir los símbolos de mayor > y menor qué < con su entidad HTML correspondiente, así como el símbolo de &

Mis Algoritmos se reserva el derecho de alterar, publicar o no los comentarios así como cambiar estas reglas de uso.

Si estas de acuerdo, adelante puedes comentar :)

P.D. No le hago tareas a nadie, mejor hagan la mía :P