Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: theluigy13etv en 28 Junio 2011, 14:45 pm



Título: Ayuda con archivos!!!
Publicado por: theluigy13etv en 28 Junio 2011, 14:45 pm
Tengo el programa hecho pero creo que hay algún error. El problema es el siguiente: Debo crear un archivo en el compilador Borland C++ 5.02. El archivo está compuesto por registros con los siguientes campos: codigo, apellidos, nombres y edad. El ingreso debe ser de tal manera que no se repitan los códigos ingresados...el código es el siguiente:

# include <stdio.h>
# include <iostream.h>
# include <conio.h>
# include <stdlib.h>

# define lon 80

struct trabajador
{
   int codigo;
   char apellidos[lon+1];
   char nombres[lon+1];
   int edad;
};


int main()
{
   FILE *ftrabajador;
   struct trabajador f1;
   char resp='s';
   int cod_al;
   do{
      clrscr();
      system("color 1e");
      system("title CREACION DE ARCHIVO");
      gotoxy(25,4); cout<<"INGRESO DE DATOS DEL ALUMNO";
      gotoxy(25,5); cout<<"---------------------------";

      ftrabajador=fopen("Empleados.txt","r");
      if(NULL==ftrabajador)
      {
         gotoxy(5,6);
         textcolor(LIGHTRED);
         textbackground(LIGHTBLUE);
         cprintf("No existe ARCHIVO!...CREARE ARCHIVO");
         getchar();
         ftrabajador=fopen("Empleados.txt","a+");
      }
      gotoxy(5,8); cout<<"Codigo: "; cin>>cod_al;
      fread(&f1,sizeof(f1),1,ftrabajador);
      while(!feof(ftrabajador))
      {
         if(f1.codigo==cod_al)
         {
            gotoxy(5,9); textcolor(LIGHTRED); textbackground(LIGHTBLUE); cprintf("Alumno ya esta registrado!!!"); getchar();
            fclose(ftrabajador);
            return 0;
         }
         fread(&f1,sizeof(f1),1,ftrabajador);
      }
      fclose(ftrabajador);
      ftrabajador=fopen("Empleados.txt","a+");
      f1.codigo=cod_al;
      gotoxy(5,9); cout<<"Apellidos: "; gets(f1.apellidos);
      gotoxy(5,10); cout<<"Nombres: "; gets(f1.nombres);
      gotoxy(5,11); cout<<"Edad: "; cin>>f1.edad;
      fwrite(&f1,sizeof(f1),1,ftrabajador);    // Al haberlo abierto en modo a+, permite escribir desde un inicio o continuando si ya habia anteriormente
      fclose(ftrabajador);
      gotoxy(5,13); cout<<"EMPLEADO REGISTRADO";
      gotoxy(5,18); cout<<"Desea ingresar Nuevo Registro..? (S/N)==>"; cin>>resp;
   }while(resp=='s' || resp=='S');

   return  0;
}

!!! EL problema es que me permite ingresar datos y deja que se repitan códigos y eso no debería pasar...espero sus comentarios...Muchas gracias  :)