Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercices] Venez vous entraîner !

(v2)

    14 juillet 2011 à 19:01:35

    Citation : Nanoc

    Citation : @che

    @Nanoc: Pourquoi ce tuto est-il passé en Hors-ligne ? Sur le forum C on a été obligé de regarder une archive. Qu'es qui n'allait pas avec ce tuto ?



    Il a été fusionné avec le tutoriel officiel. Sauf pour le chapitre sur les pointeurs de fonctions (c.f. ma signature) et pour ce TP. Avec cette re-publication, tout ce qui était dans le cours est à nouveau disponible en ligne.


    Certaines parties ont été raccourcies :s par exemple la semi-spécialisation (heureusement que j'avais lu l'ancien et que je commence à être à l'aise avec les templates...)

    edit : selon moi, la semi-spécialisation est plus utile que la spécialisation elle-même...
    • Partager sur Facebook
    • Partager sur Twitter
      15 juillet 2011 à 8:15:32

      @Nanoc: Merci pour ces informations, on devrait revoir l'Annexe sur le debugger de C::B donc ? Si j'ai bien compris.

      Sinon, concernant l'exercice de germino, je n'ai pas compris certains points de la classification donc je me renseigne ^^" :

      Chaque livre possède un ID unique, et en plus chaque livre possède un numero (pas unique) ? Ou le numéro de la classification sert d'ID ?
      Ce numéro servira à quoi ? Classer les livres ?
      On devra donc classer les livres de chaque section en fonction de leur numéro et chaque sous section devra être ranger par ordre alphabétique ?
      S'il y a plusieurs livres identiques, ils ont un ID identiques ? (pour l'instant, j'ai considéré que non car ça pose des problème pour supprimer/modifier un livre).

      Je pense que un exemple de ce qui est attendu ( juste pour montrer l'interface et l'organisation du truck) serrait utile.
      Comme sur l'exo de Nanoc par exemple (je parle de la sortie console par du main).

      Merci d'avance ;)


      • Partager sur Facebook
      • Partager sur Twitter
      🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
        15 juillet 2011 à 10:15:34

        Hum, le n°de classification est une partie de l'ID.

        Citation : Wikipedia

        Principes : présentation des indices



        La CDD répartit les ouvrages dans dix classes. Chaque classe est elle-même divisée en dix divisions, chaque division en dix subdivisions et ainsi de suite. Aucun indice ne peut avoir moins de 3 chiffres ; dans ce cas précis, celui de gauche correspond à la classe, celui du milieu à la division et celui de droite à la subdivision. Prenons l’exemple de l’indice 537 (l’électricité) : 5 = Sciences pures, 53 = Physique (division des Sciences pures), 537 = électricité et électronique (division de la Physique). Le 0, qui doit toujours être mentionné, a une valeur de généralité : 500 = Généralités sur les sciences pures, 530 = Généralités sur la physique1.

        Pour les indices dépassant 3 chiffres, un point doit séparer les trois premiers des suivants : 537 = Électricité et électronique, 537.2 = Électrostatique. Si l’indice dépasse 6 chiffres, on laisse un espace (pas de point) entre le sixième et le septième chiffres : 944.081 6 (l’Histoire de France de 1939 à 1945). Plus la notion à exprimer est fine, plus l’indice est long1.

        Sur l’étiquette collée sur le dos d’un livre et indiquant sa cote, on peut répartir l’indice sur plusieurs lignes, ce qui permet une meilleure lisibilité ; l’indice est suivi des premières lettres du nom de l’auteur1.

        La classification décimale de Dewey est souvent utilisée avec une Marguerite des couleurs dans les bibliothèques des écoles primaires (BCD) et dans les Centres de Documentation et d’Information (CDI) des collèges et des lycées.



        En gros, voilà un exemple d'ID : 0057GER0 (les zéros sont indispensables ! ne pensez pas vous en sortir avec un cin >> int !)
        C'est le n°0 par l'auteur Germino dans la catégorie Organisation des données.
        • Partager sur Facebook
        • Partager sur Twitter
          15 juillet 2011 à 11:08:55

          @Germino Voilà le code avec la BDD qui fonctionne ^^
          J'ai enfin réussi à corriger le problème (une > au lieu d'un >= et d'autre erreur toute bète)

          main.cpp

          #include <iostream>
          #include <fstream>
          #include <string>
          #include <vector>
          #include <conio.h>
          #include "Livre.h"
          
          using namespace std;
          
          int main()
          {
              vector<Livre*> listeLivre;
              ifstream lecture("Livres.txt");
              if(lecture)
              {
                  int nombre;
                  string auteur, titre, genre;
                  lecture >> nombre;
                  for(int i = 0; i <= nombre; i++)
                  {
                      getline(lecture, auteur);
                      getline(lecture, titre);
                      getline(lecture, genre);
                      listeLivre.push_back(new Livre(i, auteur, titre, genre));
                  }
              }
              else
              {
                  cout << "ERREUR ! impossible d'ouvrir le fichier." << endl;
              }
              int numeroUnique(0), nombreLivre(listeLivre.size() - 1);
              cout << "Biblio++, le logiciel de gestion d'une bibliotheque" << endl << endl;
              int choixMenu;
              do
              {
                  cout << endl << "Que voulez vous faire ?" << endl;
                  cout << "1 : Ajouter un livre" << endl;
                  cout << "2 : Supprimer un livre" << endl;
                  cout << "3 : Afficher tout les livres" << endl;
                  cout << "4 : Afficher un livre" << endl;
                  cout << "5 : Modifier un livre" << endl;
                  cout << "6 : Quitter" << endl;
                  cin >> choixMenu;
                  switch(choixMenu)
                  {
                      case 1:     ++nombreLivre;
                                  listeLivre.push_back(new Livre(nombreLivre));
                                  listeLivre[nombreLivre]->modifie(*listeLivre[nombreLivre]);
                          break;
                      case 2:     if(nombreLivre >= 0)
                                  {
                                      --nombreLivre;
                                      listeLivre.pop_back();
                                  }
          
                          break;
                      case 3:     for(int i = 0; i <= nombreLivre; i++)
                                  {
                                      listeLivre[i]->affiche(*listeLivre[i]);
                                      getch();
                                  }
                          break;
                      case 4:     cout << "Entrez le Numero unique du livre a consulter :" << endl;
                                  cin >> numeroUnique;
                                  if (numeroUnique <= nombreLivre && numeroUnique >= 0)
                                      listeLivre[numeroUnique]->affiche(*listeLivre[numeroUnique]);
                                  else
                                      cout << "Ce livre n'existe pas !" << endl;
                          break;
                      case 5:     cout << "Entrez le Numero unique du livre a modifier :" << endl;
                                  cin >> numeroUnique;
                                  if (numeroUnique <= nombreLivre && numeroUnique >= 0)
                                      listeLivre[numeroUnique]->modifie(*listeLivre[numeroUnique]);
                                  else
                                      cout << "Ce livre n'existe pas !" << endl;
                          break;
                  }
          
              }while (choixMenu != 6);
              ofstream ecriture("Livres.txt");
              if(ecriture)
              {
                  if(nombreLivre >= 0)
                  {
                      ecriture << nombreLivre << endl;
                      for(int i = 0; i <= nombreLivre; i++)
                      {
                          ecriture << listeLivre[i]->getAuteur(*listeLivre[i]) << endl;
                          ecriture << listeLivre[i]->getTitre(*listeLivre[i]) << endl;
                          ecriture << listeLivre[i]->getGenre(*listeLivre[i]) << endl;
                      }
                  }
              }
              else
              {
                  cout << "ERREUR ! impossible d'ecrire dans le fichier." << endl;
              }
              return 0;
          }
          


          Livre.h

          #ifndef LIVRE_H_INCLUDED
          #define LIVRE_H_INCLUDED
          
          #include <string>
          #include <vector>
          
          class Livre
          {
              public:
                  Livre(int numeroUnique, std::string auteur = "", std::string titre = "", std::string genre = "");
                  void affiche(Livre &livre) const;
                  void modifie(Livre &livre);
                  std::string getAuteur(Livre &livre) const;
                  std::string getTitre(Livre &livre) const;
                  std::string getGenre(Livre &livre) const;
                  int getNumeroUnique(Livre &livre) const;
                  
              private:
          
                  std::string m_auteur;
                  std::string m_titre;
                  std::string m_genre;
                  int m_numeroUnique;
          };
          
          
          #endif // LIVRE_H_INCLUDED
          


          Livre.cpp

          #include "Livre.h"
          #include <iostream>
          #include <string>
          
          using namespace std;
          
          Livre::Livre(int numeroUnique, string auteur, string titre, string genre)
              : m_numeroUnique(numeroUnique), m_auteur(auteur), m_titre(titre), m_genre(genre)
          {};
          
          
          void Livre::affiche(Livre &livre) const
          {
              cout << endl << "Auteur : " << livre.m_auteur << endl;
              cout << "Titre : " << livre.m_titre << endl;
              cout << "Genre : " << livre.m_genre << endl;
              cout << "Numero unique : " << livre.m_numeroUnique << endl;
          };
          
          void Livre::modifie(Livre &livre)
          {
              cin.ignore();
              cout << "Auteur : ";
              getline(cin, livre.m_auteur);
              cout << "Titre : ";
              getline(cin, livre.m_titre);
              cout << "Genre : ";
              getline(cin, livre.m_genre);
          };
          
          string Livre::getAuteur(Livre &livre) const
          {
              return livre.m_auteur;
          };
          
          string Livre::getTitre(Livre &livre) const
          {
              return livre.m_titre;
          };
          
          string Livre::getGenre(Livre &livre) const
          {
              return livre.m_genre;
          };
          
          int Livre::getNumeroUnique(Livre &livre) const
          {
              return livre.m_numeroUnique;
          };
          


          • Partager sur Facebook
          • Partager sur Twitter
            15 juillet 2011 à 11:18:14

            On peut voir le contenu de Livre.txt ? Je crois que le protocole de lecture ne colle pas avec le contenu...
            • Partager sur Facebook
            • Partager sur Twitter
              15 juillet 2011 à 11:21:10

              Je viens d’éditer mon message. J'ai enfin corriger le problème.
              • Partager sur Facebook
              • Partager sur Twitter
                15 juillet 2011 à 12:49:23

                Je me permets juste de faire 2-3(finalement 4 :p) remarques :
                • Pourquoi utiliser conio.h(qui n'est pas portable) ? getchar() est très bien ?
                • Sinon, vide le tampon de l'entrée avant d'afficher les livres sinon tu vas afficher 2 livres d'un coup.
                • 2 ifndef ? Erreur de copier/coller ;)
                • "tout les livres" != "tous les livres"


                Sinon, j'en apprend tous les jours sur le C++ en lisant vos code sources. :D
                • Partager sur Facebook
                • Partager sur Twitter
                🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
                  15 juillet 2011 à 13:02:17

                  Quelques remarques sur le code de Mettalica-z80:

                  a- A quoi sert l'argument des méthodes getAuteur(), getTitre(), ... ? Les méthodes get() ne prennent jamais d'argument !

                  b- Même chose pour affiche(). La méthode doit afficher l'instance qui appelle la méthode pas afficher son argument.

                  Ce sont deux fautes graves qui montrent que les concepts de la POO n'ont pas été bien compris.

                  Quelques remarques plus avancées:

                  c- Livre a une sémantique d'entité, il faudrait interdire la copie et l'affectation.

                  d- Pour éviter des conversions implicites involontaires, déclarer le constructeur comme étant explicite.

                  e- Dans l'absolu, les titres, auteurs, etc. ne vont pas changer après la construction. Les attributs devraient donc être constants.

                  Finalement une remarque technique:

                  f- Pas besoin de mettre un ; après la définition d'une méthode.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                    15 juillet 2011 à 13:30:33

                    a et b : en effet...
                    c : Pour la copie, il faudrait plutôt l'implémenter correctement, elle incrémenterait l'ID de 1 (et oui, qui te dit que la bibli n'a pas 30 livres identiques ?)
                    d : ça change pas grand chose... tu pourrais me montrer un bout de code qui utiliserait cette classe et ferait qque chose d'inattendu dû à l'absence du mot-clé explicit ?
                    e : ben si Nanoc, regarde bien la fonction modifier() :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 juillet 2011 à 13:52:16

                      c- Et comment tu vérifies qu'un autre livre n'a pas le même ID ? Impossible proprement et simplement. Ce n'est pas au livre de se copier, mais à la classe "Bibliotheque" de manager tout ça correctement.

                      d- Je n'ai pas d'exemple en tête, c'est juste une bonne habitude à prendre. Je posterai un code ambigu plus tard si j'ai le temps.

                      e- En effet. A oublier donc.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                        15 juillet 2011 à 14:20:55

                        Ah et j'avais oublié un truc. Pourquoi mettre des paramètres par défaut ? Un livre a forcément un titre, un auteur et un genre. On ne veut pas des livres dans un état bizarre où les champs n'ont pas été remplis. Il faut donc forcer l'utilisateur à renseigner toutes les informations et donc ne pas mettre de constructeur avec des valeurs par défaut permettant de "construire à moitié" l'objet.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                          15 juillet 2011 à 14:54:36

                          @Nanoc Pour répondre à cette dernière question : La flemme de réécrire le code permettant d'indiquer le nom de l'auteur, le titre et le genre alors qu'il se trouve déjà dans la fonction modifie. Sinon, pour les autres remarques, je trouve le code assez lourd mais je n'ai pas trouvé mieux. Si vous avez des propositions, n'hésitez pas !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 juillet 2011 à 18:26:12

                            Citation : Metallica-z80

                            @Nanoc Pour répondre à cette dernière question : La flemme de réécrire le code permettant d'indiquer le nom de l'auteur, le titre et le genre alors qu'il se trouve déjà dans la fonction modifie. Sinon, pour les autres remarques, je trouve le code assez lourd mais je n'ai pas trouvé mieux. Si vous avez des propositions, n'hésitez pas !


                            Faut faire la différence entre flemme et fainéantise...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 juillet 2011 à 18:53:12

                              J'ai essayé de prendre en compte un maximum de remarque ci dessus et j'arrive désormais à ce code:

                              main.cpp
                              #include <iostream>
                              #include <fstream>
                              #include <string>
                              #include <vector>
                              #include "Livre.h"
                              
                              using namespace std;
                              
                              int main()
                              {
                                  vector<Livre*> listeLivre;
                                  ifstream lecture("Livres.txt");
                                  if(lecture)
                                  {
                                      int nombre;
                                      string auteur, titre, genre;
                                      lecture >> nombre;
                                      for(int i = 0; i <= nombre; i++)
                                      {
                                          getline(lecture, auteur);
                                          getline(lecture, titre);
                                          getline(lecture, genre);
                                          listeLivre.push_back(new Livre(i, auteur, titre, genre));
                                      }
                                  }
                                  else
                                  {
                                      cout << "ERREUR ! impossible d'ouvrir le fichier." << endl;
                                  }
                                  int numeroUnique(0), nombreLivre(listeLivre.size() - 1);
                                  cout << "Biblio++, le logiciel de gestion d'une bibliotheque" << endl << endl;
                                  int choixMenu;
                                  do
                                  {
                                      cout << endl << "Que voulez vous faire ?" << endl;
                                      cout << "1 : Ajouter un livre" << endl;
                                      cout << "2 : Supprimer un livre" << endl;
                                      cout << "3 : Afficher tous les livres" << endl;
                                      cout << "4 : Afficher un livre" << endl;
                                      cout << "5 : Modifier un livre" << endl;
                                      cout << "6 : Quitter" << endl;
                                      cin >> choixMenu;
                                      switch(choixMenu)
                                      {
                                          case 1:     ++nombreLivre;
                                                      listeLivre.push_back(new Livre(nombreLivre));
                                                      listeLivre[nombreLivre]->modifie();
                                              break;
                                          case 2:     if(nombreLivre >= 0)
                                                      {
                                                          cout << "Entrez le Numero unique du livre a supprimer :" << endl;
                                                          cin >> numeroUnique;
                                                          if(numeroUnique <= nombreLivre && numeroUnique >= 0)
                                                          {
                                                              listeLivre.erase(listeLivre.begin() + numeroUnique);
                                                              --nombreLivre;
                                                          }
                                                          else
                                                          {
                                                              cout << "Ce livre n'existe pas !" << endl;
                                                          }
                                                      }
                              
                                              break;
                                          case 3:     getchar();
                                                      for(int i = 0; i <= nombreLivre; i++)
                                                      {
                                                          listeLivre[i]->affiche();
                                                          getchar();
                                                      }
                                              break;
                                          case 4:     cout << "Entrez le Numero unique du livre a consulter :" << endl;
                                                      cin >> numeroUnique;
                                                      if(numeroUnique <= nombreLivre && numeroUnique >= 0)
                                                          listeLivre[numeroUnique]->affiche();
                                                      else
                                                          cout << "Ce livre n'existe pas !" << endl;
                                              break;
                                          case 5:     cout << "Entrez le Numero unique du livre a modifier :" << endl;
                                                      cin >> numeroUnique;
                                                      if(numeroUnique <= nombreLivre && numeroUnique >= 0)
                                                          listeLivre[numeroUnique]->modifie();
                                                      else
                                                          cout << "Ce livre n'existe pas !" << endl;
                                              break;
                                      }
                              
                                  }while (choixMenu != 6);
                                  ofstream ecriture("Livres.txt");
                                  if(ecriture)
                                  {
                                      if(nombreLivre >= 0)
                                      {
                                          ecriture << nombreLivre << endl;
                                          for(int i = 0; i <= nombreLivre; i++)
                                          {
                                              ecriture << listeLivre[i]->getAuteur() << endl;
                                              ecriture << listeLivre[i]->getTitre() << endl;
                                              ecriture << listeLivre[i]->getGenre() << endl;
                                          }
                                      }
                                  }
                                  else
                                  {
                                      cout << "ERREUR ! impossible d'ecrire dans le fichier." << endl;
                                  }
                                  return 0;
                              }
                              

                              Livre.h
                              #ifndef LIVRE_H_INCLUDED
                              #define LIVRE_H_INCLUDED
                              
                              #include <string>
                              #include <vector>
                              
                              class Livre
                              {
                                  public:
                                      explicit Livre(int numeroUnique, std::string auteur = "", std::string titre = "", std::string genre = "");
                                      void affiche() const;
                                      void modifie();
                                      std::string getAuteur() const;
                                      std::string getTitre() const;
                                      std::string getGenre() const;
                                      int getNumeroUnique() const;
                              
                                  private:
                              
                                      std::string m_auteur;
                                      std::string m_titre;
                                      std::string m_genre;
                                      int m_numeroUnique;
                              };
                              
                              
                              #endif // LIVRE_H_INCLUDED
                              

                              Livre.cpp
                              #include "Livre.h"
                              #include <iostream>
                              #include <string>
                              
                              using namespace std;
                              
                              Livre::Livre(int numeroUnique, string auteur, string titre, string genre)
                                  : m_numeroUnique(numeroUnique), m_auteur(auteur), m_titre(titre), m_genre(genre)
                              {}
                              
                              
                              void Livre::affiche() const
                              {
                                  cout << endl << "Auteur : " << m_auteur << endl;
                                  cout << "Titre : " << m_titre << endl;
                                  cout << "Genre : " << m_genre << endl;
                                  cout << "Numero unique : " << m_numeroUnique << endl;
                              }
                              
                              void Livre::modifie()
                              {
                                  cin.ignore();
                                  cout << "Auteur : ";
                                  getline(cin, m_auteur);
                                  cout << "Titre : ";
                                  getline(cin, m_titre);
                                  cout << "Genre : ";
                                  getline(cin, m_genre);
                              }
                              
                              string Livre::getAuteur() const
                              {
                                  return m_auteur;
                              }
                              
                              string Livre::getTitre() const
                              {
                                  return m_titre;
                              }
                              
                              string Livre::getGenre() const
                              {
                                  return m_genre;
                              }
                              
                              int Livre::getNumeroUnique() const
                              {
                                  return m_numeroUnique;
                              }
                              


                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 juillet 2011 à 20:48:09

                                @germino : flemme = fainéantise dans le registre vulgaire :)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 juillet 2011 à 18:49:16

                                  Mise à jour de mon code pour la gestion de la bibliothèque. Désormais on peut choisir le livre à supprimer au lieu d'enlever le dernier (plus pratique pour notre bibliothécaire :p ). Je me demandais s'il était préférable de laisser comme ceci ou de créer une seconde classe qui gérerai tous ces livres et les écrirait dans la BDD en temps réel ? Cette deuxième solution nécessitera sans doute plus de code mais le main sera plus simple à lire. Qu'en pensez-vous ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 juillet 2011 à 19:14:19

                                    Citation : LoiCpp

                                    @germino : flemme = fainéantise dans le registre vulgaire :)


                                    Même si c'est identique d'après le dictionnaire, je fais une différence entre les deux (c'est perso, mais c'est licence LGPL :D ) :
                                    fainéantise/faignantise = n'aime pas faire d'effort, ne fait rien (avec ça vous ferez pas un bon programmeur)
                                    flemme = n'aime pas refaire ce qui a déjà été fait (comme tout bon programmeur qui se respecte !)

                                    @Metallica : plus le main est court, mieux c'est sur un projet un minimum conséquent :) par exemple le programme sur lequel je bosse :
                                    #include "Application.h"
                                    
                                    #include "gfxe/GraphicEngine.h"
                                    
                                    int main()
                                    {
                                        Application app;
                                    
                                        app.registerEngine(new gfxe::GraphicEngine(app, L"FYD", 1280, 1024, false));
                                        app.run();
                                    
                                        return 0;
                                    }
                                    
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      16 juillet 2011 à 20:05:58

                                      exactement ce que je fais :p tu créé juste un objet et tu le lance après c'est l'objet qui construiras d'autres objets...
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        16 juillet 2011 à 20:29:18

                                        Bah, oui, c'est propre et organisé. Pour les curieux que la ligne 9 intrigue, c'est qu'il me suffit de changer cette ligne pour passer l'appli en mode console plutôt que graphique ;)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          16 juillet 2011 à 21:48:44

                                          c'est quoi comme bibliothèque que tu a utilisé ?
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            17 juillet 2011 à 5:52:06

                                            Bof, je ne suis pas trop d'accord avec la dernière assertion qui a été faite ("plus le main est court mieux c'est").
                                            Brièvement : si la classe Application contient a peu près trente lignes de code (sans compter ce qui est propre à la déclaration de la classe), comme il n'y a qu'une seule instance et que chaque fonction n'est appelée qu'une seule fois, je ne vois aucun inconvénient à tout mettre dans le main. Ça n'en sera pas plus sale ou mal organisé.
                                            (Post un peu inutile mais qui me permet de suivre le sujet, c'est ça de gagné)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              17 juillet 2011 à 9:46:26

                                              @LoiCpp : ça ne se voit pas, mais j'utilise Irrlicht + SFML.
                                              @De passage : ben la classe appli a une fonction stop(), pour l'appeler suffit d'avoir une ref sur l'appli et c'est possible de le faire en multiThreadé. Avec tout dans le main, c'est plus dur...
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                17 juillet 2011 à 13:30:39

                                                Citation

                                                ben la classe appli a une fonction stop(), pour l'appeler suffit d'avoir une ref sur l'appli et c'est possible de le faire en multiThreadé. Avec tout dans le main, c'est plus dur...

                                                Donc dans la classe Application il y a des classes qui possèdent des références sur Application ? :o (Dans tous les cas je ne m'embêterais pas avec des threads pour l'exercice qui est donné)
                                                Pour en revenir au sujet, je dirais que le main de Metallica-z80 est trop long et fait trop de choses qui mériteraient une fonction (classe peut être) à part, ce qui le rend difficile à lire et à comprendre (avec un peu d'acrobaties une partie du code peut même se factoriser).
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  17 juillet 2011 à 14:04:25

                                                  Bon, j'ai fais l'exercice de germino.

                                                  Voila ce que ça donne :
                                                  mai.hh
                                                  #ifndef MAIN_HH
                                                  #define MAIN_HH
                                                  #include <iostream>
                                                  #include <vector>
                                                  #include <string>
                                                  #include <fstream>
                                                  #include <algorithm>
                                                  #include <istream>
                                                  
                                                  
                                                  typedef struct
                                                  {
                                                     char     autor[50];
                                                     char     title[50];
                                                     char     kind[50];
                                                     size_t   ID;
                                                     bool    state;
                                                     size_t   num;
                                                  }Book;
                                                  typedef struct
                                                  {
                                                     char     Fname[50];
                                                     char     Sname[50];
                                                     size_t   ID;
                                                  }Member;
                                                  typedef struct
                                                  {
                                                     size_t   IDBook;
                                                     size_t   IDMember;
                                                     size_t   ID;
                                                  }Loan;
                                                  
                                                  enum{MANAGEBOOK = 1, MANAGEMEMBER = 2, MANAGELOAN = 3, SAVECHANGES = 9, EXIT = 10};
                                                  enum{ADDBOOK = 1, DELBOOK = 2, MODIFBOOK = 3, SHOWBOOK = 4, SHOWBOOKS = 5};
                                                  enum{ADDMEMBER = 1, SHOWMEMBER = 2, SHOWMEMBERS = 3, DELMEMBER = 4};
                                                  enum{ADDLOAN = 1, SHOWLOAN = 2, SHOWLOANS = 3, DELLOAN = 4};
                                                  enum{BORROWED, NOT_BORROWED};
                                                  
                                                  void     handling(void);
                                                  int      mainMenu(void);
                                                   void    manageBook(void);
                                                    int    menuBook(void);
                                                    void   addBook(std::vector<Book>&);
                                                    void   delBook(std::vector<Book>&);
                                                    void   modBook(std::vector<Book>&);
                                                    void   showBook(std::vector<Book>&);
                                                    void   showBooks(std::vector<Book>&);
                                                    size_t   lastIDBook(std::vector<Book>&);
                                                    void   saveChangesBook(std::vector<Book>&);
                                                   void    manageMember(void);
                                                    int    menuMember(void);
                                                    void   addMember(std::vector<Member>&);
                                                    void   showMember(std::vector<Member>&);
                                                    void   showMembers(std::vector<Member>&);
                                                    void   delMember(std::vector<Member>&);
                                                    size_t lastIDMember(std::vector<Member>&);
                                                    void    saveChangesMember(std::vector<Member>&);
                                                   void    manageLoan(void);
                                                    int    menuLoan(void);
                                                    size_t lastIDLoan(std::vector<Loan>&);
                                                    int   toBorrow(std::vector<Loan>&);
                                                    void   toReturn(std::vector<Loan>&);
                                                    void   showLoan(std::vector<Loan>&);
                                                    void   showLoans(std::vector<Loan>&);
                                                    void    saveChangesLoan(std::vector<Loan>&);
                                                  Book     inBook(void);
                                                  void     outBook(Book);
                                                  Member   inMember(void);
                                                  void     outMember(Member);
                                                  Loan     inLoan(void);
                                                  void     outLoan(Loan);
                                                  
                                                  int deweyClassification(void);
                                                  
                                                  #endif
                                                  


                                                  main.cpp
                                                  #include "main.hh"
                                                  
                                                  using namespace std;
                                                  
                                                  int main(void)
                                                  {
                                                     handling();
                                                     return EXIT_SUCCESS;
                                                  }
                                                  void  handling()
                                                  {
                                                     int choice=1;
                                                     while(choice != EXIT)
                                                     {
                                                        choice = mainMenu();
                                                        while(choice<MANAGEBOOK || (choice >MANAGELOAN && choice!=EXIT))
                                                        {
                                                           cout <<  "Faites un choix correct" << endl;
                                                           choice = mainMenu();         
                                                        }
                                                        switch(choice)
                                                        {
                                                           case MANAGEBOOK:
                                                              manageBook();
                                                           break;
                                                           case MANAGEMEMBER:
                                                              manageMember();
                                                           break;
                                                           case MANAGELOAN:
                                                              manageLoan();
                                                           break;
                                                           default:
                                                           ;
                                                        }
                                                     }
                                                  }
                                                  int mainMenu()
                                                  {
                                                     const char* t[] = {"Gerer les Livres", "Gerer les Membres", "Gerer les Emprunts"};
                                                     size_t i;
                                                     for(i=0;i<sizeof t / sizeof *t;++i)
                                                        cout << i+1 << "." <<   t[i] << endl;
                                                     cout <<  "10.Sortir" << endl;
                                                     cin >> i;
                                                     return (int)i;
                                                  }
                                                  //*******************************                   Les livres
                                                  void  manageBook()
                                                  {
                                                     int choice;
                                                     Book book;
                                                     ifstream file("dataBook", ios::binary);
                                                  
                                                     vector<Book> data;
                                                     while(file.read((char*)&book, sizeof book)) data.push_back(book);
                                                     file.close();
                                                     while(choice != EXIT)
                                                     {
                                                        choice = menuBook();
                                                        while(choice < ADDBOOK || (choice > SHOWBOOKS && choice!=EXIT && choice != SAVECHANGES))
                                                        {
                                                           cout <<  "Faites un choix correct" << endl;
                                                           choice = menuBook();         
                                                        }
                                                        switch(choice)
                                                        {
                                                           case ADDBOOK:
                                                              addBook(data);
                                                           break;
                                                           case DELBOOK:
                                                              delBook(data);
                                                           break;
                                                           case MODIFBOOK:
                                                              modBook(data);
                                                           break;
                                                           case SHOWBOOK:
                                                              showBook(data);
                                                           break;
                                                           case SHOWBOOKS:
                                                              showBooks(data);
                                                           break;
                                                           case SAVECHANGES:
                                                              saveChangesBook(data);
                                                           break;
                                                           default:
                                                           ;
                                                        }
                                                     }
                                                  }
                                                  void addBook(vector<Book>& data)
                                                  {
                                                     Book book = inBook();
                                                     book.ID = lastIDBook(data);
                                                     book.num = deweyClassification();
                                                     data.push_back(book);
                                                  }
                                                  size_t lastIDBook(vector<Book>& data)
                                                  {
                                                     size_t i;
                                                     vector<size_t> IDs;
                                                     for(vector<Book>::iterator it = data.begin();it < data.end();it++)
                                                        IDs.push_back(it->ID);
                                                     for(i=0;i<data.size() && find(IDs.begin(), IDs.end(), i) != IDs.end();++i);
                                                     return i;
                                                  }
                                                  void delBook(vector<Book>& data)
                                                  {
                                                     size_t ID = 0;
                                                     cout << "Quel est l'ID du livre a supprimer ?" << endl;
                                                     cin >> ID;
                                                     for(vector<Book>::iterator it = data.begin();it < data.end();it++)
                                                        if(it->ID == ID && it->state == NOT_BORROWED)
                                                        {
                                                           data.erase(it);
                                                           return;
                                                        }
                                                     cout << "Impossible de supprimer ce livre";
                                                  }
                                                  void modBook(vector<Book>& data)
                                                  {
                                                     size_t ID = 0;
                                                     cout <<  ("Quel est l'ID du livre a modifier ?") << endl;
                                                     cin >> ID;
                                                     for(vector<Book>::iterator it = data.begin();it < data.end();it++)
                                                        if((*it).ID == ID)
                                                        {
                                                           int num = it->num;
                                                           *it = inBook();
                                                           it->ID = ID;
                                                           it->num = num;
                                                           return;
                                                        }
                                                     cout << "ID introuvable";
                                                  }
                                                  void showBook(vector<Book>& data)
                                                  {
                                                     size_t ID = 0;
                                                     cout << "Quel est l'ID du livre a afficher ?" << endl;
                                                     cin >> ID;
                                                     for(vector<Book>::iterator it = data.begin();it < data.end();it++)
                                                        if(it->ID == ID)
                                                        {
                                                           outBook(*it);
                                                           return;
                                                        }
                                                     cout << "ID introuvable";
                                                  }
                                                  void showBooks(vector<Book>& data)
                                                  {
                                                     cin.ignore();
                                                     for_each(data.begin(), data.end(), outBook);
                                                  }
                                                  bool cmpSection(const Book& i,const Book& k){ return i.num < k.num;}
                                                  void saveChangesBook(vector<Book>& data)
                                                  {
                                                     sort(data.begin(), data.end(), cmpSection);
                                                  
                                                  
                                                     ofstream out("dataBook", ios::binary);
                                                     for(vector<Book>::iterator it = data.begin();it < data.end();it++)
                                                        out.write((char*)&*it, sizeof *it);
                                                  }
                                                  int menuBook()
                                                  {
                                                     const char* t[] = {"Ajouter un livre", "Supprimer un livre", "Modifier un livre", "Afficher un livre", "Afficher tous les livres"};
                                                     size_t i;
                                                     for(i=0;i<sizeof t / sizeof *t;++i)
                                                        cout <<  i+1 << "." <<  t[i] << endl;
                                                     cout <<  "9.Sauvegarder les changements" << endl;
                                                     cout <<  "10.Sortir" << endl;
                                                     cin >> i;
                                                     return (int)i;
                                                  }
                                                  //*******************************                   Les Membres        
                                                  void manageMember()
                                                  {
                                                     int choice = 0;
                                                     Member member;
                                                     ifstream file("dataMember", ios::binary);
                                                     vector<Member> data;
                                                     while(file.read((char*)&member, sizeof member)) data.push_back(member);
                                                     file.close();
                                                  
                                                     while(choice != EXIT)
                                                     {
                                                        choice = menuMember();
                                                        while(choice < ADDMEMBER || (choice > DELMEMBER && choice != EXIT && choice != SAVECHANGES))
                                                        {
                                                           cout <<  "Faites un choix correct" << endl;
                                                           choice = menuMember();         
                                                        }
                                                        switch(choice)
                                                        {
                                                           case ADDMEMBER:
                                                              addMember(data);
                                                           break;
                                                           case SHOWMEMBER:
                                                              showMember(data);
                                                           break;
                                                           case SHOWMEMBERS:
                                                              showMembers(data);
                                                           break;
                                                           case DELMEMBER:
                                                              delMember(data);
                                                           break;
                                                           case SAVECHANGES:
                                                              saveChangesMember(data);
                                                           break;
                                                           default:
                                                           ;
                                                        }
                                                     }
                                                  }
                                                  void addMember(vector<Member>& data)
                                                  {
                                                     data.push_back(inMember());
                                                     (data.end()-1)->ID = lastIDMember(data);
                                                  }
                                                  size_t lastIDMember(vector<Member>& data)
                                                  {
                                                     size_t i;
                                                     vector<int> IDs;
                                                     for(vector<Member>::iterator it = data.begin();it < data.end();it++)
                                                        IDs.push_back(it->ID);
                                                  
                                                     for(i=0;i<data.size() && find(IDs.begin(), IDs.end(), i) != IDs.end();++i);
                                                     return i;
                                                  }
                                                  void showMember(vector<Member>& data)
                                                  {
                                                     size_t ID = 0;
                                                     cout <<  "Quel est l'ID du membre a afficher ?" << endl;
                                                     cin >> ID;
                                                     cin.ignore();
                                                     for(vector<Member>::iterator it = data.begin();it < data.end();it++)
                                                        if(it->ID == ID)
                                                        {
                                                           outMember(*it);
                                                           return;
                                                        }
                                                     cout << ("ID introuvable");
                                                  }
                                                  void showMembers(vector<Member>& data)
                                                  {
                                                     cin.ignore();
                                                     for(vector<Member>::iterator it = data.begin(); it < data.end(); ++it)
                                                        outMember(*it);
                                                  }
                                                  void delMember(vector<Member>& data)
                                                  {
                                                     size_t ID = 0;
                                                     cout << "Quel est l'ID du membre a supprimer ?" << endl;
                                                     cin >> ID;
                                                     for(vector<Member>::iterator it = data.begin();it < data.end();it++)
                                                        if(it->ID == ID)
                                                        {
                                                           data.erase(it);
                                                           return;
                                                        }
                                                     cout <<  "ID introuvable" << endl;
                                                  }
                                                  void saveChangesMember(vector<Member>& data)
                                                  {
                                                     ofstream out("dataMember", ios::binary);
                                                     for(vector<Member>::iterator it = data.begin();it < data.end();it++)
                                                        out.write((char*)&*it, sizeof *it);
                                                  }
                                                  int menuMember()
                                                  {
                                                     const char* t[] = {"Ajouter un Membre", "Afficher un Membre", "Afficher tous les Membres", "Supprimer un Membre"};
                                                     size_t i;
                                                     for(i=0;i<sizeof t / sizeof *t;++i)
                                                        cout << i+1 << "." << t[i] << endl;
                                                     cout << "9.Sauvegarder les changements"  << endl;
                                                     cout << "10.Sortir"  << endl;
                                                     cin >> i;
                                                     return (int)i;
                                                  }
                                                  //*******************************                   Les emprunts        
                                                  void manageLoan()
                                                  {
                                                     int choice = 0;
                                                     Loan loan;
                                                     vector<Loan> data;
                                                     ifstream file("dataLoan", ios::binary);
                                                     while(file.read((char*)&loan, sizeof loan))data.push_back(loan);
                                                     while(choice != EXIT)
                                                     {
                                                        choice = menuLoan();
                                                        while(choice < ADDLOAN || (choice > DELLOAN && choice != EXIT && choice != SAVECHANGES))
                                                        {
                                                           cout << "Faites un choix correct" << endl;
                                                           choice = menuLoan();
                                                        }
                                                        switch(choice)
                                                        {
                                                           case ADDLOAN:
                                                              toBorrow(data);
                                                           break;
                                                           case SHOWLOAN:
                                                              showLoan(data);
                                                           break;
                                                           case SHOWLOANS:
                                                              showLoans(data);
                                                           break;
                                                           case DELLOAN:
                                                              toReturn(data);
                                                           break;
                                                           case SAVECHANGES:
                                                              saveChangesLoan(data);
                                                           break;
                                                           default:
                                                           ;
                                                        }
                                                     }
                                                  }
                                                  int toBorrow(std::vector<Loan>& data)
                                                  {
                                                     Book tbook;
                                                     Member member;
                                                     bool ok = false;
                                                     Loan loan = inLoan();
                                                     loan.ID = lastIDLoan(data);
                                                     ifstream file("dataMember", ios::binary);        
                                                     
                                                     while(file.read((char*)&member, sizeof member))
                                                        if(loan.IDMember == member.ID)
                                                           ok=true;
                                                     
                                                     if(!ok)
                                                     {
                                                        cout <<  "Membre introuvable" << endl;
                                                        return 0;
                                                     }
                                                     file.close();
                                                     ok = false;
                                                     vector<Book> book;
                                                     file.open("dataBook", ios::binary);
                                                     while(file.read((char*)&tbook, sizeof tbook))
                                                        if(tbook.ID == loan.IDBook && tbook.state == NOT_BORROWED)
                                                        {
                                                           tbook.state = BORROWED;
                                                           book.push_back(tbook);
                                                           fstream out("dataBook", ios::binary | std::ios::in | std::ios::out | std::ios::ate);
                                                           out.seekg(0, ios::beg);
                                                  
                                                           for(vector<Book>::iterator it = book.begin();it < book.end();it++)
                                                              out.write((char*)&*it, sizeof *it);
                                                           out.close();
                                                           ok=true;
                                                           break;
                                                        }
                                                        else 
                                                           book.push_back(tbook);
                                                     if(ok == false)
                                                     {
                                                        cout <<  "Impossible d'emprunter ce livre" << endl;
                                                        return 0;
                                                     }
                                                     data.push_back(loan);
                                                     saveChangesLoan(data);
                                                     return 1;
                                                  }
                                                  size_t lastIDLoan(std::vector<Loan>& data)
                                                  {
                                                     size_t i;
                                                     vector<int> IDs;
                                                     for(vector<Loan>::iterator it = data.begin();it < data.end();it++)
                                                        IDs.push_back(it->ID);
                                                     for(i=0;i<data.size() && find(IDs.begin(), IDs.end(), i) != IDs.end();++i);
                                                     return i;
                                                  }
                                                  void showLoan(std::vector<Loan>& data)
                                                  {
                                                     size_t ID = 0;
                                                     cout <<  "Quel est l'ID de l'emprunt ?" << endl;
                                                     cin >> ID;
                                                     for(vector<Loan>::iterator it = data.begin();it < data.end();it++)
                                                        if(it->ID == ID)
                                                        {
                                                           outLoan(*it);
                                                           return;  
                                                        }
                                                     cout <<  "ID introuvable" << endl;
                                                  }
                                                  void showLoans(std::vector<Loan>& data)
                                                  {
                                                     cin.ignore();
                                                     for(vector<Loan>::iterator it = data.begin();it < data.end();it++)
                                                        outLoan(*it);
                                                  }
                                                  void toReturn(std::vector<Loan>& data)
                                                  {
                                                     size_t ID = 0;
                                                     cout <<  "Quel est l'ID du livre à rendre ?" << endl;
                                                     cin >> ID;
                                                     for(vector<Loan>::iterator its = data.begin();its < data.end();its++)
                                                        if(its->IDBook == ID)
                                                        {
                                                           ifstream tmp("dataBook", ios::binary);
                                                           vector<Book> book;
                                                           Book tbook;
                                                        while(tmp.read((char*)&tbook, sizeof tbook))
                                                           if(tbook.ID == ID)
                                                           {
                                                              tbook.state = NOT_BORROWED;
                                                              book.push_back(tbook);
                                                              tmp.close();
                                                              break;
                                                           }
                                                           else
                                                              book.push_back(tbook);
                                                        tmp.close();
                                                        fstream file("dataBook", ios::binary | std::ios::in | std::ios::out | std::ios::ate);
                                                        file.seekg(0, ios::beg);
                                                        for(vector<Book>::iterator it = book.begin();it < book.end();it++)
                                                           file.write((char*)&*it, sizeof *it);
                                                        file.close();
                                                        data.erase(its);
                                                        saveChangesLoan(data);
                                                        return;
                                                     }
                                                     cout <<  "ID introuvable" << endl;
                                                  }
                                                  void saveChangesLoan(std::vector<Loan>& data)
                                                  {
                                                     ofstream out("dataLoan", ios::binary);
                                                     for(vector<Loan>::iterator it = data.begin();it < data.end();it++)
                                                        out.write((char*)&*it, sizeof *it);
                                                  }
                                                  int menuLoan()
                                                  {
                                                     const char* t[] = {"Emprunter un Livre", "Afficher un Emprunt", "Afficher tous les Emprunts", "Rendre un Livre"};
                                                     size_t i;
                                                     for(i=0;i<sizeof t / sizeof *t;++i)
                                                        cout << i+1 << "." << t[i] << endl;
                                                     cout <<  "9.Sauvegarder les changements" << endl;
                                                     cout <<  "10.Sortir" << endl;
                                                     cin >> i;
                                                     return (int)i;
                                                  }
                                                  int deweyClassification()
                                                  {
                                                     int i, num = 0, tmp;
                                                     const char* classes[] = {"Informatique/Generale", "Phylosophie/Psycologie", "Religion", "Sciences Sociales", "Langues",
                                                                        "Sciences", "Technologie", "Art", "Littérature", "Histoire-Geo"};
                                                     const char* division[10][10] = {{"Generalite", "Bibliographies", "Bibliothéconomie", "Encyclopédies générales", "Sorcellerie Informatique  ", "Publications en série"
                                                                            "et périodiques généraux et leurs index","Muséologie", "Médias documentaires/Journalisme", "Recueils généraux", "Manuscits/Livres Rare"},
                                                                           {"Generalite", "Metaphysique", "Epistemologie", "Parapsychologie", "Ecoles philosophiques",         // 10
                                                                            "Psychologie", "Logique", "Éthique", "Philosophie antique", "Philosophie occidentale moderne"},
                                                                           {"Generalite", "Philosophie", "Bible", "Théologie chrétienne", "Théologie morale", 
                                                                            "Églises locales", "Ecclésiologie", "Histoire/Geo de l’Église", "Sectes chrétiennes", "Autres Religions"},
                                                                           {"Generalite", "Statistiques", "Science politique", "Science politique", "Droit", 
                                                                            "Administration publique", "Services sociaux", "Éducation", "Commerce/CommunicationsTransports", "Coutumes"},
                                                                           {"Generalite", "Linguistique générale", "Anglais", "Langues Germaniques", "Langues Romanes", 
                                                                            "Langues italienne", "Langues espagnole", "Langues italiques", "Langues helléniques", "Autres"},
                                                                           {"Generalite", "Mathematiques", "Astronomie", "Physique", "Chimie", "Sciences de la Terre", 
                                                                            "Paléontologie", "Biologie", "Botanique", "Zoologie"},
                                                                           {"Generalite", "Sciences médicales", "Art de l’ingénieur", "Agronomie", "Vie familiale",
                                                                            "Gestion", "Génie chimique", "Fabrication industrielle","Articles Manufracture", "Bâtiments"},
                                                                           {"Generalite", "Urbanisme", "Architecture", "Art Plastiques", "Dessin", 
                                                                            "Peinture", "Gravure", "Photographie", "Musique", "Loisir et Art du Spectacle"},
                                                                           {"Generalite", "Américainee", "Anglaise et Anglo-saxonne", "Allemande", "Française", "Italienne",
                                                                            "Espagnole et Portugaise", "Latine", "Grecque", "Autres litteratures"},
                                                                           {"Generalite", "Geo et Voyages", "Généalogie", "Histoire du monde ancien", "Histoire de l’Europe", "Histoire de l’Asie", 
                                                                           "Histoire de l’Afrique", "Histoire de l’Amérique du Nord", "Histoire de l’Amérique du Sud", "Autres"}};
                                                     cout <<  "Dans quelle section se situe cet ouvrage ?" << endl;
                                                     for(i=0;i<10;++i)
                                                        cout << i+1 << "." << classes[i] << endl;
                                                     cin >> tmp;
                                                     while(tmp<=0 || tmp>10)
                                                     {
                                                        cin.ignore();
                                                        cout <<  "Entrez une section correcte" << endl;
                                                        cin >> tmp;   
                                                     }
                                                     num = (tmp-1);
                                                     cout <<  "Dans quelle division se situe cet ouvrage ?" << endl;
                                                     for(i=0;i<10;++i)
                                                        cout << i+1 << "." << division[num][i] << endl;
                                                     cin >> tmp;
                                                     while(tmp<=0 || tmp>10)
                                                     {
                                                        cin.ignore();
                                                        cout <<  "Entrez une section correcte" << endl;
                                                        cin >> tmp;   
                                                     }
                                                     num *= 100;
                                                     num += (tmp-1) * 10;
                                                     return num;
                                                  }
                                                  
                                                  Book inBook()
                                                  {
                                                     Book book;
                                                     cin.ignore();
                                                     cout << "Qui est l'auteur ?" << endl;
                                                     cin.getline(book.autor, 50);
                                                     cout << "Quel est le titre du livre ?"  << endl;
                                                     cin.getline(book.title, 50);
                                                     cout << "Quel est le genre du livre ?" << endl;
                                                     cin.getline(book.kind, 50);
                                                     book.state = NOT_BORROWED;
                                                     return book;
                                                  }
                                                  void outBook(Book book)
                                                  {
                                                     cout.width(11);cout << left << "Auteur"<< ":";cout.width(50); cout << right << book.autor << endl;
                                                     cout.width(11);cout << left <<  "Titre"<< ":";cout.width(50); cout << right << book.title << endl;
                                                     cout.width(11);cout << left << "Genre"<< ":";cout.width(50); cout << right << book.kind << endl;
                                                     cout.width(11);cout << left << "Statue"<< ":";cout.width(50); cout << right << (book.state == BORROWED ? "Indisponible":"Libre") << endl;
                                                     cout.width(11);cout << left << "ID"<< ":";cout.width(50); cout << right << book.ID << endl;
                                                     cout.width(11);cout << left << "Num"<< ":";cout.width(50); cout << right << book.num << endl;
                                                     getchar();
                                                  }
                                                  Member inMember()
                                                  {
                                                     Member member;
                                                     cout <<  "Quel est le nom du membre ?" << endl;
                                                     cin >> member.Fname;
                                                     cin.ignore();
                                                     cout <<  "Quel est le prenom du membre ?" << endl;
                                                     cin >> member.Sname;
                                                     cin.ignore();
                                                     return member;
                                                  }
                                                  void outMember(Member member)
                                                  {
                                                     cout.width(11);cout << left << "FName"<< ":";cout.width(50); cout << right << member.Fname << endl;
                                                     cout.width(11);cout << left << "SName"<< ":";cout.width(50); cout << right << member.Sname << endl;
                                                     cout.width(11);cout << left << "ID"<< ":";cout.width(50); cout << right << member.ID << endl;
                                                     getchar();
                                                  }
                                                  Loan inLoan()
                                                  {
                                                     Loan loan;
                                                     cout <<  "Quel est l'ID du livre ?" << endl;
                                                     cin >> loan.IDBook;
                                                     cin.ignore();
                                                     cout <<  "Quel est l'ID de membre ?" << endl;
                                                     cin >> loan.IDMember;
                                                     cin.ignore();
                                                     return loan;
                                                  }
                                                  void outLoan(Loan loan)
                                                  {
                                                     cout.width(15);cout << left << "ID du livre"<< ":";cout.width(50); cout << right << loan.IDBook << endl;
                                                     cout.width(15);cout << left << "ID du membre"<< ":";cout.width(50); cout << right << loan.IDMember << endl;
                                                     cout.width(15);cout << left << "ID"<< ":";cout.width(50); cout << right << loan.ID << endl;
                                                     getchar();
                                                  }
                                                  


                                                  J'ai un peu l'impression d'avoir fais trop organisé et ainsi de rendre le code moins générique. Mais il me semble correcte.
                                                  Merci d'avance de vos commentaires ;)

                                                  Pour ceux que ça interesse, j'ai aussi la version C, mais un peu plus sale.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
                                                    17 juillet 2011 à 15:25:14

                                                    C'est inutil les typedef de structure en C++.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      17 juillet 2011 à 15:40:47

                                                      Je trouve que là, la POO était plus adaptée, ça fait moins 'gros tas de fonctions'. (Je poste mon code dans l'après-midi ;) ).

                                                      En gros pour l'organisation du code j'ai fait une classe Member, une classe Book, qui contiennent respectivement les infos sur les membres et les livres; une classe MemberList et une classe Shelf pour gérer les membres et les livres, et une grosse classe Library, qui gère les deux classes MemberList et Shelf, et qui permet le chargement et la sauvegarde de la bibliothèque. Qu'en pensez-vous ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Bla bla bla
                                                        17 juillet 2011 à 15:50:43

                                                        Après plusieurs jours d'absence (vacances, tout ça, et l'internet qui ne marche pas - ça a été très dur de survivre), me revoilà, prêt à ... souffrir devant l'afflux de nouveaux messages.
                                                        Bon, je vais tout voir dans l'ordre (Après la fin de l'écriture du message : finalement, il n'y a pas tellement à répondre) :

                                                        * germino : Les deux images de flamme sont déjà uploadées pas Exercices Cpp ;)

                                                        * germino : Est-ce que la "BDD" est censé agir comme un SGBD ? C'est-à-dire, est-ce qu'on a le droit de charger toute la BDD en mémoire ?

                                                        * Nanoc : Pour ton exercice de conception, il me semble que l'affichage est relativement étonnant : ici, il est donc demandé que MiniTuto, classe dédiée à l'enregistrement, affiche des choses ? Il me semble que ce travail devrait plutôt être relégué à l'appelant. De même, la fonction affiche() devrait pour moi plutôt être remplacé par un opérateur <<, potentiellement dans un autre fichier, pour réduire les dépendances - pourquoi VosTutos devrait-il se charger de l'affichage ?

                                                        Je me lance dans l'exercice de la bibliothèque, et je reviens. :)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          17 juillet 2011 à 15:54:45

                                                          Citation : Goten

                                                          C'est inutil les typedef de structure en C++.



                                                          Oui en effet, j'ai oublié de changer cela.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                                                          [Exercices] Venez vous entraîner !

                                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                          • Editeur
                                                          • Markdown