Exercice langage C: Base de données

Dans cet exercice, vous allez écrire un programme permettant de gérer une petite base de données de numéros de téléphone.

  1. Commencez par définir une structure Personne dont les champs seront une chaîne de caractères pour le nom et une autre pour le numéro de téléphone.
  2. Déclarez une variable de type Personne dans main puis initialisez-la en demandant à l'utilisateur d'entrer un nom et un numéro de téléphone. Faites afficher ensuite le nom et le numéro de téléphone contenus dans la structure:
          Le numero de Pierre est 123456. 
  3. Ecrivez maintenant une fonction nouveau_numero qui reçoit un pointeur sur Personne en paramètre. La fonction doit demander à l'utilisateur d'entrer un nouveau nom ainsi que le numéro de téléphone correspondant. Elle placera les nouvelles valeurs dans le pointeur passé en paramètre. Il faut aussi s'assurer que le nom commence bien par une majuscule, et modifier le nom en conséquence si ce n'est pas le cas.
  4. Ecrivez maintenant une fonction recherche qui reçoit un tableau de Personne ainsi que sa taille en paramètres. La fonction doit demander à l'utilisateur le nom qu'il désire chercher puis effectuer une recherche dans le tableau de personne. Si le nom est trouvé, la fonction affichera le numéro de téléphone de la personne, sinon elle imprimera un message d'erreur.
  5. Ecrivez une troisième fonction, nommée liste, qui prend un tableau de Personne ainsi que la taille du tableau en paramètres. Comme son nom l'indique, cette fonction affichera la liste de toutes les valeurs présentes dans le tableau.
  6. Finalement, écrivez la fonction main (vous pouvez supprimer le code écrit au point 2). Il vous faudra tout d'abord déclarer un tableau de Personne qui sera votre base de données. Ensuite, une boucle while affichera le menu suivant
          1) Nouveau numero
          2) Recherche
          3) Liste
          4) Quitter
    

    et attendra une entrée de l'utilisateur. Une fois que l'utilisateur a entré son choix, il ne vous restera plus qu'à appeler la bonne fonction.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include 

using namespace std;

struct Personne {
  char nom[32];
  char numero[32];
};

void nouveau_numero(Personne *nouveau) {
  cout << "Nouvelle entree dans la base de donnees:" << endl;
  cout << "Entrez le nom: ";
  cin >> nouveau->nom;
  cout << "Entrez le numero: ";
  cin >> nouveau->numero;

  if (nouveau->nom[0] >= 'a' && nouveau->nom[0] <= 'z') // minuscule
    nouveau->nom[0] += 'A' - 'a'; // majuscule
}

void recherche(Personne *db, int taille) {
  char search[32];
  cout << " Entrez le nom a chercher: ";
  cin >> search;

  int index = 0;
  while (index < taille && strcmp(db[index].nom, search) != 0)
    index++;

  if (index < taille)
    cout << "Le numero de " << search << " est " << db[index].numero << endl;
  else
    cout << "Le nom '" << search << "' n'existe pas dans la base de donnees." << endl;
}

void liste(Personne *db, int taille) {
  cout << endl << "Liste:" << endl;
  for (int i=0; i<taille; i++)
    cout << i+1 << ") " << db[i].nom << "  " << db[i].numero << endl;
  cout << endl;
}

int main(int argc, char **argv) {
  const int max_adresses = 20;
  Personne db[max_adresses];
  int nombre_adresses = 0;
  bool fin = false;
  char choix;

  do {
    cout << "1) Nouveau numero" << endl;
    cout << "2) Recherche" << endl;
    cout << "3) Liste" << endl;
    cout << "4) Quitter" << endl;
    cin >> choix;

    switch (choix) {
    case '1':
      if (nombre_adresses < max_adresses) {
        nouveau_numero(db + nombre_adresses);
        nombre_adresses++;
      }
      else
        cout << "Base de donnees pleine\n";
      break;
    case '2':
      recherche(db, nombre_adresses);
      break;
    case '3':
      liste(db, nombre_adresses);
      break;
    case '4':
      fin = true;
      break;
    }
  } while (!fin);

  return 0;
}