consiste en dos programas en el primero se hacen la entrada de datos y en el segundo se realizan modificaciones...
mucha ganas de explicarlo no tengo :P jeje de ultima si no se entiende un joroca me explico con mas detalle mas tarde..
arch.h
#include <stdio.h>
typedef struct FECHA{
int d, m, a;
}fecha;
typedef struct TIEMPO{
int h, m, s;
}tiempo;
struct atleta{
char nombre[30];
fecha f;
char sx; //sexo
char cat; //categoria
tiempo t;
unsigned int dorsal;
unsigned short puesto;
};
typedef struct atleta atle;
#define desplz(n) (n-1) *sizeof (atle)
archivo de entrada.c
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "atleta.h"
#define randomize (srand(time(NULL)))
#define random(num) (rand()%(num))
void inicializar (FILE* pf);
void igresar_A (FILE* pf, atle* at);
unsigned numdorsal (char s, char cat, FILE * pf);
int main(int argc, char** argv)
{
FILE *pf;
atle atletas;
char *archivo = "Carrera.dat";
randomize;
if ((pf
= fopen( archivo
, "wb+")) == NULL
) {
printf ("\n Error al abrir archivo "); return -1;
}
inicializar(pf);
igresar_A(pf, &atletas);
do
{
fseek(pf
, desplz
(atletas.
dorsal), 0); fwrite (&atletas
, sizeof(atletas
),1,pf
); igresar_A(pf, &atletas);
}while (strcmp (atletas.
nombre, "FIN"));
return 0;
}
void inicializar (FILE* pf)
{
int i;
atle a;
a.nombre[0] = '\0';
for (i=0; i<1000; i++)
fwrite(&a
, sizeof(atle
), 1, pf
);
}
void igresar_A (FILE* pf, atle* at)
{
char buf[30];
int n;
buf[0]='\0';
if (buf[n] == '\n');
buf[n] = '\0';
if (strcmp (at
->nombre
, "FIN")) {
printf ("ingrese la fecha de naciemiento (dd mm aaaa)"); buf[0]='\0';
sscanf (buf
, "%d %d %d", &at
->f.
d, &at
->f.
m, &at
->f.
a); if (at->f.a < 1954)
at->cat = 'V';
else
at->cat = 'S';
at->t.h = 0;
at->t.m = 0;
at->t.s = 0;
at->dorsal = numdorsal(at->sx, at->cat, pf);
}
}
unsigned numdorsal (char s, char cat, FILE * pf)
{
unsigned base, tope, d;
atle at;
if (s == 'M' && cat=='V')
{
base = 251;
tope = 500;
}
else if (s == 'M' && cat == 'S')
{
base = 501;
tope = 1000;
}
else if (s == 'F' && cat == 'V')
{
base = 51;
tope = 100;
}
else if (s == 'F' && cat == 'S')
{
base = 101;
tope = 200;
}
d = (unsigned) random(tope+1-base)+base;
fread(&at
,sizeof(atle
),1,pf
); if (!(*at.nombre))
return d;
else
return numdorsal(s, cat, pf);
}
archivo de entrada a tiempos de atletas.c
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "atleta.h"
void muestraDatos (atle at);
void dorsalesjuego (FILE* pf );
int main(int argc, char** argv)
{
FILE * pf;
atle atletas;
unsigned dorsal1;
char dor[20], *archivo = "Carrera.dat";
if ((pf
= fopen (archivo
, "rb+")) == NULL
) {
printf ("Error al abrir archivo"); return -1;
}
dorsalesjuego(pf);
printf ("Escriba el numero de dorsal: "); while (dorsal1)
{
fseek(pf
,desplz
(dorsal1
), 0); fread(&atletas
, sizeof(atletas
),1,pf
);
if (*atletas.nombre)
{
muestraDatos(atletas);
printf ("\n Tiempo realizado en minutos y segundos: "); sscanf (dor
, "%d %d", &atletas.
t.
m, &atletas.
t.
s); fseek(pf
,desplz
(dorsal1
), 0); fwrite(&atletas
, sizeof(atle
),1,pf
); }
else
printf ("Dorsal no encontrado, vuelva a intentar\n");
}
return 0;
}
void muestraDatos (atle at)
{
printf ("Nombre : %s\n", at.
nombre); printf ("Fecha de naciemiento : %d-%d-%d\n", at.
f.
d, at.
f.
m, at.
f.
a); printf ("Categoria : %c\nDorsal: %u\n", at.
cat, at.
dorsal); if (at.t.m > 0)
printf ("\ntiempo de carrera : %d Min %d Seg", at.
t.
m, at.
t.
s );
}
void dorsalesjuego (FILE* pf )
{
atle at;
printf ("jugadores en jeugo \n");
{
fread (&at
, sizeof(atle
),1,pf
); if (*at.nombre)
printf ("numero de dorsal %d\n", at.
dorsal); }
}
eso fue todo saludos