necesito ayuda en dos puntos de la practica

pikachu
31 de Agosto del 2004
DEBEMOS ALMACENAR LA INROMACION DE LOS VUELOS DE IBERIA PARA EL MES DE AGOSTO.
LA INFORMACION A ALMACENAR SERA: FECHA, HORA, DESTINO, ORIGEN , PLAZAS,
ESTADO:C(CANCELADO) R(RETRASADO) E(EMBRACANDO) , PRIORIDAD: A(ALTA) B(BAJA)
M(MEDIA). ES LA PRIORIDAD DE UNA POSIBLE REORGANIZACION DE LOS VUELOS, PUDIENDO
RETRASAR LOS DEMAS DE MAS BAJA PRIORIDAD ANTES QUE LOS DE MEDIA Y ALTA.
LA MANERA DE ORGANIZAR ESTOS DATOS VA ASER EN TRES ESTRUCTURAS DISTINTAS,
ALOJAREMOS EL VUELO EN UNA O OTRA SEGUN LA PRIOIRDAD Y ORDENADOS SEGUN ORDEN
DE FECHA Y DE HORA .
* IMPLEMENTAR LA ESTRUCTURA DE DATOS QUE SOPORTE DICHA INFROMACION
* OPERACION PARA INSERTAR UN NUEVO ELEMENTO
* MODULO QUE DADO EL CODIGO DEL VUELO NOS DEVUELVA SU DESTINO Y ORIGEN ASI
COMO LA FECHA Y LA HORA
* LISTAR POR PANTALLA TODOS LOS VUELO POR PRIORIDAD PREVISTOS PARA UN DIA
CONCRETO
* VOLCAR EN UN FICHERO LO DATOS DE TODOS LOS VUELOS ORDENADOS POR PRIORIDAD
* ELIMINAR LOS DATOS DE UN VUELO CANCELADO QUE ESPECIFICA EL USUARIO SEGUN SU
CODIGO
* MOSTRAR LOS VUELOS QUE HAN SUFRIDO UN RETRASO RESPECTO AL HORARIO PREVISTO

necesito que m ayuden a en el ultimo punto donde necesito saber la hora del sistema para compararla con la hora introducida por el usuario para saber si el vuelo esta embarcnado o a sufrido un retraso,
y como volcarlo a un fichero, gracias.
la practica la e realizado de esta manera :
struct hora
{
int hr;
int min;
int seg;
};

struct priori_a
{
char codigo;
struct hora salida;
int fecha;
char origen;
char destino;
int plazas;
char estado;
struct priori_a *sig;
};
struct priori_a *cabecera_a=NULL, *ultimo_a=NULL;

//definicion de las funciones

struct priori_a pedirdatos_a();

void devuelve_a();


void visualizar_a();


void insertarnodo_a(struct priori_a alta);//esta funcion inserta el nodo al final de la lista


void insertaenorden_a(struct priori_a alta); /*donde meto la funcion*/


void eliminar_a();


struct priori_a pedirdatos_a()
{
struct priori_a alta;
fflush(stdin);

printf("n Introduce el codigo del vuelo:");
scanf("%s",&alta.codigo);
printf("n Introduce el origen del vuelo:");
scanf("%s",&alta.origen);
printf("n Introduce el destino del vuelo:");
scanf("%s",&alta.destino);
printf("n Introduce el numero de plazas del vuelo:");
scanf("%d",&alta.plazas);
do{
printf("n Introduce la fecha del mes de agosto del vuelo:");
scanf("%d",&alta.fecha);
if(alta.fecha<0 || alta.fecha>31)
printf("nFecha mal introducida, recuerde que Agosto tiene 31 diasn");
}while(alta.fecha<0 || alta.fecha>31);


do{
printf("n Introduce hora de salida del vuelo:n");
printf("nHora:");
scanf("%d",&alta.salida.hr);
if(alta.salida.hr<0 || alta.salida.hr>24)
printf("nHora mal introducida, recuerde que 1 dia tiene 24 horasn");
}while(alta.salida.hr<0 || alta.salida.hr>24);
do{
printf("nMinutos:");
scanf("%d",&alta.salida.min);
if(alta.salida.min<0 || alta.salida.min>60)
printf("nMinutos mal introducidos, recuerde que 1 minuto tiene 60 segundosn");
}while(alta.salida.min<0 || alta.salida.min>60);
do{
printf("nSegundos:");
scanf("%d",&alta.salida.seg);
if(alta.salida.seg<0 || alta.salida.seg>60)
printf("nSegundos mal introducidosn");
}while(alta.salida.min<0 || alta.salida.min>60);
return alta;
}

void devuelve_a()
{
int sw=0;
char code;
struct priori_a *aux=NULL;

printf("nIntroduce el codigo del vuelon");
fflush(stdin);
scanf("%s",&code);

aux=cabecera_a;
while((aux!=NULL) && (sw==0)) //comprueba que aux apunta a algun nodo de la lista y que el codigo del vuelo no coincida con el nombre buscado
{
if((aux->codigo)==(code))
{
sw=1;
printf("nEl vuelo tiene origen a %sn",aux->origen);
printf("nEl vuelo %s tiene destino a %sn",code,aux->destino);
printf("nEl vuelo %s con hora de salida a las %d / %d / %dn",code,aux->salida.hr,
aux->salida.min,aux->salida.seg);
printf("nEl vuelo %s con fecha el dia a %d de agoston",code,aux->fecha);
}
else
aux=aux->sig;
}
if(sw==0)
printf("nNo hay vuelos con ese codigon");

return;
}

void visualizar_a()
{
struct priori_a *aux=NULL;
int date;
int sw=0;

printf("nIntroduce el dia del mes de Agosto:n");
scanf("%d",&date);

aux=cabecera_a; //situa el puntero aux en el primer nodo de la loista y empieza a recoorerla
while((aux!=NULL) && (sw==0))
{
if((aux->fecha)==(date))
{
sw=1;
printf("nLos vuelos con el dia %d son:n",date);
printf("nVuelo %s con destino a %sn",aux->codigo,aux->destino);
printf("nVuelo %s con origen a %sn",aux->codigo,aux->origen);
printf("nVuelo %s con hora de salida a %d / %d / %dn",aux->codigo,
aux->salida.hr,aux->salida.min,aux->salida.seg);
printf("nVuelo %s con un numero de plazas de a %dn",aux->codigo,
aux->plazas);
}
else
aux=aux->sig; // pasa al siguiente nodo de la lista
}
if(sw==0)
printf("nNo hay vuelos para ese dian");

return;
}
/*hay k ordenar los vuelos segun la fecha y la hora m podrian ayudar a ordenarlo segun la hora */
void insertaenorden_a(struct priori_a alta)
{
//int total;
struct priori_a *np,*nq,*nnuevo;
np=cabecera_a;
nq=NULL;

// total=np->salida.hr+np->salida.min+np->salida.seg;

while(np!=NULL && np->fecha<alta.fecha )
{
// while(total<np->salida.hr+np->salida.min+np->salida.seg){
nq=np;
np=np->sig;
}
nnuevo=(struct priori_a *) malloc(sizeof(struct priori_a));
*nnuevo=alta;
nnuevo->sig=np;
if(cabecera_a!=NULL)
nq->sig=nnuevo;
else
cabecera_a=nnuevo;
if(nnuevo->sig==NULL)
ultimo_a=nnuevo;
/*luego se tendra que ordenar segun la hr*/

return;
}

/* mirar si se elimina asi */
void eliminar_a()
{
struct priori_a *np,*nq;
char code;

np=cabecera_a;
nq=NULL;
printf("nIntroduce el codigo del vuelo que deseas cancelar?n");
scanf("%s",&code);

while((np!=NULL) && (np->codigo==code))
{
nq=np;
np=np->sig;
}
if(np!=NULL)
{
if(nq==NULL)

cabecera_a=np->sig;
else
nq->sig=np->sig;


free(np);
}
return;
}