[Débutant] Optimisation d'un menu

Optimisation d'un menu [Débutant] - C++ - Programmation

Marsh Posté le 29-11-2004 à 09:52:50    

bonjour,
 
je débute dans le c++ et j'ai un probleme avec un menu.
voici mon code:
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <map>
  4. using namespace std;
  5. int main()
  6. {
  7.   map<string, string> repertoire;
  8.   map<string, string>::iterator it;
  9.   string nom, num;
  10.   int choix;
  11.   do {
  12.     system("cls" );
  13.     cout << "------------------------------" << endl;
  14.     cout << "Répertoire telephonique" << endl;
  15.     cout << "------------------------------" << endl;
  16.     cout << " Nouvelle personne ..........1" << endl;
  17.     cout << " Enlever une personne .......2" << endl;
  18.     cout << " Rechercher un numéro .......3" << endl;
  19.     cout << " Rechercher une personne.....4" << endl;
  20.     cout << " Afficher le repertoire......5" << endl;
  21.     cout << " Quitter l'application ......0" << endl;
  22.     cout << "------------------------------" << endl;
  23.     cout << "Votre choix : ";
  24.     cin >> choix;
  25.     if (choix < 0 || choix > 5) {
  26.     cout << "Choix de la rubrique invalide !" << endl;
  27.     cout << "Saisir un numéro entre 0 et 5 !" << endl;
  28.     system ("pause" );
  29.     }else{
  30.     switch (choix)
  31.     {
  32.       case 1 : cout << "Saisissez le nom de la personne : ";
  33.                cin >> nom;
  34.                cout << "Numéro de téléphone : ";
  35.                cin >> num;
  36.                repertoire[nom] = num;
  37.                break;
  38.       case 2 : cout << "Saisissez le nom de la personne : ";
  39.                cin >> nom;
  40.                repertoire.erase(nom);
  41.                break;
  42.       case 3 : cout << "Saisissez le nom de la personne : ";
  43.                cin >> nom;
  44.                for (it = repertoire.begin(); it != repertoire.end(); it++)
  45.                if (it->first == nom) {
  46.                cout << it->first << " possède le numéro " << num << endl;}
  47.                else
  48.                cout << "cette personne n'existe pas !"<< endl;
  49.                system ("pause" );
  50.                break;
  51.       case 4 : cout << "Saisissez le numéro de téléphone : ";
  52.                cin >> num;
  53.                for (it = repertoire.begin(); it != repertoire.end(); it++)
  54.                if (it->second == num) {
  55.                cout << it->first << " possède le numéro " << num << endl;}
  56.                else
  57.                cout << "pas de personne a ce numero !"<< endl;
  58.                system("pause" );
  59.                break;
  60.       case 5 : cout << "Il y a " << repertoire.size() << " personnes dans le repertoire. " << endl;
  61.                   if (repertoire.size()!=0){
  62.                cout << "Liste des personnes : " << endl;
  63.                for (it = repertoire.begin(); it != repertoire.end(); it++)
  64.                cout << '|' << it->first << ", " << it->second << '|' << endl;
  65.                } else
  66.                cout << "Liste vide" << endl;
  67.                system ("pause" );
  68.       }
  69.     }
  70.   }
  71.   while (choix);
  72.   return 0;
  73. }


 
je voudrai optimiser mon menu.
j'aimerai bien faire en sorte que quand je tape des lettres pour choisir la rubrique, j'ai le message d'erreur comme dans mon code.
 
D'autre part, je voudrai pouvoir gerer les espaces car si par exemple je rajoute une personne de type NOM[espace]NOM, il mémorise le premier nom comme il faut mais le deuxieme nom en tant que numero. Supposons une mauvaise manip et je peux me retrouver dans mon repertoire avec (exemple) jean comme nom et pierre comme numero.
 
Comment gerer ce probleme.
 
Je vous remercie d'avance.

Reply

Marsh Posté le 29-11-2004 à 09:52:50   

Reply

Marsh Posté le 30-11-2004 à 19:38:56    

Salut !  :)  
 
Si tu veut afficher ton message d'erreur lorque tu tapes tout autre chose qu'un chiffre entre 0 et 5, remplace ta condition :
 
 if (choix < 0 || choix > 5) ----> if( !((choix <= 5) && (choix >= 0)) )
 
En faite, il faut prendre le problème dans l'autre sens. (n'oubli pas le "!" ).
 
En effet, je crois que cin ne gère pas les espaces. Utilise la fonction getline (par contre je crois quelle utilise des char donc il faudra réliser un transtypage par la suite).
 
Voilà.
 
@+.  :pt1cable:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed