Page d'accueil Description du projet
/******************************************
 *
 *   Cedric Pradalier   2001
 *   mail : http://cedric.pradalier.free.fr/mail.html
 *
 *****************************************/

#include "recherche.h"
#include "lignes.h"
#include "lignes_gen.h"
#include "arrets.h"
#include "bdlignes.h"
#include "bdarrets.h"
#include "horaire.h"
#include "vector.h"
#include "ensemble.h"
#include "corresp.h"
#include "date.h"
#include "treillis.h"
#include "output.h"
#include <string.h>



void PrintItineraires(CommunicationStruct * S)
{
    int i;
    // Enfin on affiche 
    if (S->ArretDepSensUnique)
    {
            sprintf(outbuf,"ATTENTION : L'arret %s est desservi en sens unique \n",
                    S->ADep->mNom);
            FlushBuffer();
    }
    sprintf(outbuf,"Recherche itineraires effectuee.\n"); FlushBuffer();
    sprintf(outbuf,"--> %i itineraires trouves\n",S->NbItinTrouves); FlushBuffer();
    sprintf(outbuf,"Mise a jour des horaires de correspondance.\n"); FlushBuffer();
    sprintf(outbuf,"--> Nombre d'itinéraires impossibles : %i\n",S->NbItinRejetes); FlushBuffer(); 
    sprintf(outbuf,"\n Depart :  %s",S->ADep->mNom); FlushBuffer();
    sprintf(outbuf,"\n Arrivee : %s",S->AArr->mNom); FlushBuffer();
    sprintf(outbuf,"\n Date :    %s ",GetDayString(S->Date.GetDayinWeek()));FlushBuffer();
    S->Date.Print();
    sprintf(outbuf,"\n Arrivee -- heure limite : "); FlushBuffer();
    S->Limite.Print();
    sprintf(outbuf,"\n Temps minimal de correspondance : "); FlushBuffer();
    S->TpsCorresp.Print();
    sprintf(outbuf,"\n"); FlushBuffer();
    S->Itineraires.Sort();
    for (i=0;i<S->Itineraires.GetNbElem();i++)
    {
        CTreillis * iti = (CTreillis *) S->Itineraires.ElemAt(i);
        sprintf(outbuf,"--------------------------------------------------\n");
        FlushBuffer();
        iti->Print();
    }
    if (S->Itineraires.GetNbElem() == 0)
    {
        sprintf(outbuf,"--------------------------------------------------\n");
        FlushBuffer();
        sprintf(outbuf,"Aucun itineraire possible\n");
        FlushBuffer();
    }
    sprintf(outbuf,"--------------------------------------------------\n");
    FlushBuffer();
}


int main(int argc,char *argv[])
{
    /************************************************

Appel :
itinR [<repertoire de travail>] [<fichier requete>] 

Le principe du main est de lire les fichiers
de definition des BD d'arrets et de lignes.
Puis de lire les arguments de la requetes

Enfin, on appelle la fonction de recherche 
avec les bons arguments

     **************************************************/


    FILE * fp;
    CDate Date;
    char temp[80] = "";
    char dir[80] = ".";
    if (argc > 1)
    {
        strcpy(dir,argv[1]);
    }
    if (argc > 2)
    {
        if ((fp = fopen(argv[2],"r")) == NULL)
        {
            sprintf(outbuf,"Impossible de trouver le fichier ""query""\n");
            FlushBuffer();
            exit(1);
        }
    }
    else
    {
        /* Ajout du repertoire */
        strcpy(temp,dir);
        strcat(temp,"/query");
        if ((fp = fopen(temp,"r")) == NULL)
        {
            sprintf(outbuf,"Impossible de trouver le fichier ""query""\n");
            FlushBuffer();
            exit(1);
        }
    }

    int IndDep,IndArr,HCode,TCode,MaxCorresp;
    CommunicationStruct S;
    fscanf(fp,"Depart = %d \n",&IndDep);
    fscanf(fp,"Arrivee = %d \n",&IndArr);
    fscanf(fp,"Limite = %d \n",&HCode);
    fscanf(fp,"Nb Max de correspondances = %d \n",&MaxCorresp);
    fscanf(fp,"Tps Corresp = %d \n",&TCode);
    fscanf(fp,"Date = ");
    if (Date.Read(fp))
    {
        fscanf(fp," \n");
        fclose(fp);
    }
    else
    {
        fclose(fp);
        sprintf(outbuf,"Date illisible dans la requete.\n");
        FlushBuffer();
        exit(1);
    }


    

    sprintf(outbuf," \n Itineraires grenoblois : version 0.4\n");
    FlushBuffer();
    sprintf(outbuf,"Chargement...\n");
    FlushBuffer();

    strcpy(temp,dir);
    strcat(temp,"/horaires/TAG.arrets");
    CBDArrets * pBDA = new CBDArrets(temp);

    strcpy(temp,dir);
    strcat(temp,"/horaires/TAG.lignes");
    CBDLignes * pBDL = new CBDLignes(temp,pBDA);
    //  CLignes * ligne;
    pBDL->LoadHoraires(Date,pBDA);

    sprintf(outbuf,"Chargement effectue.\n"); 
    FlushBuffer();

    sprintf(outbuf,"Debut de la recherche...\n");
    FlushBuffer();

    
    S.TpsCorresp    =   CHoraire(TCode);
    S.Limite    =   CHoraire(HCode);
    S.Date      =   Date;
    S.ADep      =   pBDA->Find(IndDep);
    S.AArr      =   pBDA->Find(IndArr);
    S.MaxNbCorresp  =   MaxCorresp;
        
    Recherche(pBDA, pBDL, &S);
    // Affichage
    PrintItineraires(&S);



    delete pBDA;
    delete pBDL;
}