//listado empleados: creamos dos listados: listado empleados y listado sueldos(imprimimos en esos dos ficheros)
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include"ficheros.h"
typedef struct
{
int cod_empleado;
char nombre[25];
char localidad[20];
int sueldo;
char sexo;
int extra;
}registro;
typedef struct
{
int cl1;
int cp1;
int cl2;
int cp2;
int ts;
int th;
int tm;
}contadores;
void rellenardatosempleados(FILE *femple,registro *re);
void inicializarcont(contadores *cont);
void rellenarfichero(FILE *femple);
void generarlistados(FILE *femple);
void imprimirsueldo(FILE *flistsu,contadores *cont,registro re);
void cabecero1(contadores *cont,FILE *flistsu);
main()
{
FILE *femple;
FILE *flistem;
rellenarfichero(femple);
generarlistados(femple);
getch();
}
//******************************************************************************
void rellenardatosempleados(registro *re)
{
printf("cod_empleado: ");
fflush(stdin);
scanf("%d",&re->cod_empleado);
printf("nombre: ");
fflush(stdin);
gets(re->nombre);
printf("localidad: ");
gets(re->localidad);
printf("sueldo: ");
fflush(stdin);
scanf("%d",&re->sueldo);
printf("sexo: ");
fflush(stdin);
scanf("%c",&re->sexo);
printf("extra: ");
fflush(stdin);
scanf("%d",&re->extra);
}
//******************************************************************************
void inicializarcont(contadores *cont)
{
cont->cl1=8;
cont->cp1=1;
cont->cl2=8;
cont->cp2=1;
cont->ts=0;
cont->th=0;
cont->tm=0;
}
//******************************************************************************
void rellenarfichero(FILE *femple)
{
char resp;
registro re;
femple=abrirfichero("femple","wb");
do
{
rellenardatosempleados(&re);
fwrite(&re,sizeof(re),1,femple);
printf("quieres otro empleado?\n");
fflush(stdin);
scanf("%c",&resp);
while(resp!='s' && resp!='S' && resp!='N' && resp!='n')
{
printf("respuesta no valida s/n\n");
fflush(stdin);
scanf("%c",&resp);
}
}
while(resp=='s' || resp=='S');
cerrarfichero(femple);
}
//******************************************************************************
void generarlistados(FILE *femple)
{
FILE *flistsu;
registro re;
contadores cont;
inicializarcont(&cont);
femple=abrirfichero("femple","rb");
flistsu=abrirfichero("listadosueldos.doc","w");
//flistem=abrirfichero("listadoempleados.doc","w");
fread(&re,sizeof(re),1,femple);
while(!feof(femple))
{
imprimirsueldo(flistsu,&cont,re);
//imprimirlineasempleados(femple,&cont,flistem);
fread(&re,sizeof(re),1,femple);
}
fcloseall();
}
//******************************************************************************
void imprimirsueldo(FILE *flistsu,contadores *cont,registro re)
{
if(cont->cl1>6)
{
if(cont->cp1!=1)
fprintf(flistsu,"\f");
cabecero1(&cont,flistsu);
}
fprintf(flistsu,"%10d %15s %15d\n",re.cod_empleado,re.nombre,re.sueldo+re.extra);
cont->cl1=cont->cl1+1;
}
//******************************************************************************
void cabecero1(contadores *cont,FILE *flistsu)
{
fprintf(flistsu," pag %d\n",cont.cp1);
fprintf(flistsu," listado sueldos \n");
fprintf(flistsu," _______________ \n");
fprintf(flistsu," cod_empleado nombre sueldo total \n");
fprintf(flistsu," ________________________________ \n");
cont.cl1=5;
cont.cp1=cont.cp1+1;
}
//******************************************************************************
aqui va el programa entero realmnte tngo q crear otro fichero para listar la otra mitad d los datos pero primero probe solo con uno precisamente pro si m pasa esto no tener tanto q mirar... :s no se si entenderas lo q hace: cree estructura "registro re"donde guardo las estructuras rellenadas ya y lgo tngo q escribir una parte d ls datos en un fichero y la otra parte en otro, yo hice el primero el d los sueldos, m lo escribe bien si quito el procedimiento"cabecero1"y meto lo q hay en ese proc en el otro am sgrande pero esq no entiend xq no funciona asi. gracias por adelantado |