A ver... la unica putada en todo esto es cuando el dia de la reserva esta en la primera semana del mes, entonces la validacion tiene que ser con datos del mes anterior. Tomo dia1.mes1.anyo1 como la fecha de reserva y dia2.mes2.anyo2 como la fecha del vuelo.
BOOL ValidaFecha (UINT dia1, UINT mes1, UINT anyo1, UINT dia2, UINT mes2, UINT anyo2)
{
int DiasPorMes [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if ((anyo2 % 4) == 0) //Si el anyo es bisiesto
DiasPorMes[1]++; //Febrero tiene un dia mas
//para determinar si es o no un punto "tocanarices"
if (dia2 <= 7)
goto Label1;
if ((anyo1 <= anyo2) && (mes1 <= mes2) && (dia1 <= (dia2-7))
return TRUE;
Label1:
int nDesfase = 7 - dia2; //Aqui sabes cuantos dias del mes anterior debes contar
int nLimite = DiasPorMes [mes2-1] - nDesfase; //Aqui se averigua el dia tope
if ((anyo1 <= anyo2) && (mes1 <= (mes2-1)) && (dia1 <= nLimite))
return TRUE;
return FALSE;
}