#include<stdio.h> #include<conio.h> #include<ctype.h> #include<stdlib.h>
typedef struct empleado { int codigo; char nombre[50]; char direccion[50]; int telefono; int sueldo; int numhijos; int antiguedad;
}Empleado;
void CreaFicheroEmpleados(FILE *); void CreaFicheroSalida(FILE *, FILE *); void VisualizaFicheros(FILE *, FILE *); void EmpleadosSinHijos(FILE *); void OrdenaFichero(FILE *);
void main() { Empleado p; FILE *pf; FILE *pf2;
CreaFicheroEmpleados(pf); CreaFicheroSalida(pf,pf2); EmpleadosSinHijos(pf); OrdenaFichero(pf); VisualizaFicheros(pf,pf2);
}
void CreaFicheroEmpleados(FILE *pf) { Empleado p; char opcion;
if((pf=fopen("F_EMP","w+b"))==NULL) { printf("\nNo se puede crear fichero."); getch(); exit(-1); } else { do { printf("\n\tCodigo del empleado: "); scanf("%d",&p.codigo); printf("\n\tNombre: "); gets(p.nombre); printf("\n\tDireccion: "); gets(p.direccion); printf("\n\tTelefono: "); scanf("%d",&p.telefono); printf("\n\tSueldo: "); scanf("%d",&p.sueldo); printf("\n\tNumero de hijos: "); scanf("%d",&p.numhijos); printf("\n\tAntiguedad: "); scanf("%d",&p.antiguedad); printf("\n\tDesea introducir otro empleado?"); scanf("%c",&opcion);
}while(tolower(opcion)=='s');
} fclose(pf);
}
void CreaFicheroSalida(FILE*pf, FILE*pf2) { Empleado p;
if((pf=fopen("F_EMP","rb"))==NULL) { printf("\nNo se puede abrir fichero."); getch(); exit(-1); } if((pf2=fopen("F_SAL","w+b"))==NULL) { printf("\nNo se puede abrir fichero."); getch(); exit(-1); } while(!feof(pf)) { fread(&p,sizeof(Empleado),1,pf);
if(p.numhijos==2) { if(p.antiguedad>2) { if(p.sueldo<1000) { fwrite(&p,sizeof(Empleado),1,pf2); } } }
} fclose(pf); fclose(pf2); }
void VisualizaFicheros(FILE *pf, FILE *pf2) { Empleado p;
if((pf=fopen("F_EMP","rb"))==NULL) { printf("\nNo se puede abrir fichero."); getch(); exit(-1); } if((pf2=fopen("F_SAL","rb"))==NULL) { printf("\nNo se puede abrir fichero."); getch(); exit(-1); } while(!feof(pf)) { fread(&p,sizeof(Empleado),1,pf); printf("\n\tCodigo del empleado: %d",p.codigo); printf("\n\tNombre: %s",p.nombre); printf("\n\tDireccion: %s",p.direccion); printf("\n\tTelefono: %d",p.telefono); printf("\n\tSueldo: %d",p.sueldo); printf("\n\tNumero de hijos: %d",p.numhijos); printf("\n\tAntiguedad: %d",p.antiguedad); } while(!feof(pf2)) { fread(&p,sizeof(Empleado),1,pf2); printf("\n\tCodigo del empleado: %d",p.codigo); printf("\n\tNombre: %s",p.nombre); printf("\n\tDireccion: %s",p.direccion); printf("\n\tTelefono: %d",p.telefono); printf("\n\tSueldo: %d",p.sueldo); printf("\n\tNumero de hijos: %d",p.numhijos); printf("\n\tAntiguedad: %d",p.antiguedad); } fclose(pf); fclose(pf2); }
void EmpleadosSinHijos(FILE *pf, FILE *pf2) { Empleado p;
if((pf=fopen("F_EMP","rb"))==NULL) { printf("\nNo se puede abrir fichero."); getch(); exit(-1); } while(!feof(pf)) { fread(&p,sizeof(Empleado),1,pf);
if(p.numhijos==0) { printf("\n\tCodigo del empleado: %d",&p.codigo); printf("\n\tNombre: %s",&p.nombre); } } fclose(pf);
}
void OrdenaFichero(FILE *pf) { Empleado p, aux; Empleado *a;//nuevo vector para guardar el tamaño del tipo Empleado int contadorEmpleados=0; int x,i,j, temp; if((pf=fopen("F_EMP","rb"))==NULL) { printf("\nNo se puede abrir fichero."); getch(); exit(-1); } while(!feof(pf)) { fread(&p,sizeof(Empleado),1,pf); contadorEmpleados++; //cuento el nº de empleados }
//funcion de reserva dinamica a=(Empleado *)malloc(contadorEmpleados*sizeof(Empleado));
if(a==NULL) { printf("\nNo se puede reservar memoria"); getch(); exit(-1); }
rewind(pf); for(x=0;x<contadorEmpleados;x++) fread(&a[x],sizeof(Empleado),1,pf); [b]//ES AQUI DONDE ME DA EL PROBLEMA[/b] for(i=0;i<contadorEmpleados-1;i++) { aux=a[i]; for(j=i+1;j<contadorEmpleados;j++) { if(aux.codigo > a[j].codigo) { temp = a[i].codigo; a[i].codigo=a[j].codigo; a[j].codigo=temp; }
}
} rewind(pf); for(x=0;x<contadorEmpleados;x++) fwrite(&a[x],sizeof(Empleado),1,pf);
free(a); fclose(pf); }
|