Documents publiés » Implémentation de l’algorithme de Dijkstra » Code de l’implémentation de l’algorithme de Dijkstra (Annexe) »

menu.cpp


#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "menu.h"

int Menu::est_dans(char c, char * s)
{
 int n = strlen(s) ;
 for(int i=0 ; i<n ; i++)
 {
  if(c==s[i])
   return i ;
 }
 return -1 ;
}

Menu::Menu(char * n, int t, char * * c, char * a)
{
 int s = strlen(n) ;
 nom = new char [s+1] ;
 strcpy(nom, n) ;
 taille = t ;
 composants = new char * [t] ;
 for(int i=0 ; i<t ; i++)
 {
  s = strlen(c[i]) ;
  composants[i] = new char [s+1] ;
  strcpy(composants[i],c[i]) ;
 }
 s = strlen(a) ;
 acces = new char [s+1] ;
 strcpy(acces, a) ;
}

Menu::~Menu()
{
 delete [] nom ;
 delete [] composants ;
 delete [] acces ;
}

void Menu::Affiche() 
{
 printf("\n \t \t*** %s ***\n \n", nom) ;
 for(int i=0 ; i<taille ; i++)
  printf("\t [%c] : %s \n", acces[i], composants[i]) ;
 printf("\n Votre choix ? \n") ;
}

int Menu::Reponse()
{
 char * format = new char(2*taille+3) ;
 strcpy(format, "%[") ;
 strcat (format, acces) ;
 unsigned int i;
 for ( i=0 ; i<strlen(acces) ; i++)
  acces[i]=tolower(acces[i]) ;
 strcat (format,acces) ;
 strcat (format,"]") ;
 for (i=0 ; i<strlen(acces) ; i++)
  acces[i]=toupper(acces[i]) ;
 char rep ;
 do
 {
  scanf(format, &rep) ;
  fflush(stdin) ;
  rep=toupper(rep) ;
 }
 while (est_dans(rep, acces)==-1) ;
 return (est_dans(rep, acces)) ;
}