/** * * \file ModuleProf.cpp * * \authors M. Laporte * * \date 06/03/2018 * * \version V1.0 * * \brief Classes Module et Prof, déclarations, définitions et tests * **/ #include <iostream> #include <fstream> #include <iomanip> #include <string> #include <vector> using namespace std; namespace { class Prof; class Module { std::string myName; std::vector <Prof *> myProfs; public: Module (const string & Name = string ()); string getName (void) const; void display (void) const; void addProf (/*const*/ Prof * prof); void setName (const string & Name); }; // Module class Prof { std::string myName; vector <Module *> myModules; public: Prof (const string & Name = string ()); string getName (void) const; void display (void) const; void addModule (/*const*/ Module * module); void setName (const string & Name); }; // Prof // Module Module::Module (const string & Name /* = string () */) : myName (Name) {} string Module::getName (void) const { return myName; } void Module::display (void) const { for (Prof * pProf : myProfs) cout << pProf->getName () << endl; } // display() void Module::setName (const string & Name) { myName = Name; } void Module::addProf (/*const*/ Prof * pProf) { myProfs.push_back (pProf); } // Prof Prof::Prof (const string & Name /* = string () */) : myName (Name) {} string Prof::getName (void) const { return myName; } void Prof::display (void) const { for (Module * pModule : myModules) cout << pModule->getName () << endl; } // display() void Prof::setName (const string & Name) { myName = Name; } void Prof::addModule (/*const*/ Module *pModule) { myModules.push_back (pModule); } // Tests void testModuleProf (void) { vector <Module *> modules; modules.resize(5); vector <Prof *> profs; profs.resize(5); // Création des modules for (unsigned i (0); i < 5; ++i) { string module; cout << "Veuillez saisir un nom de Module : (pas d'espace dans le nom)" << endl; cin >> module; modules [i] = new Module (module); } // Création des profs for (unsigned i (0); i < 5; ++i) { string prof; cout << "Veuillez saisir un nom de Prof : (pas d'espace dans le nom)" << endl; cin >> prof; profs [i] = new Prof (prof); } // création des associations, attention si un prof est lié // à un module, ce module doit être lié à ce prof // Le prof 0 sera lié à tous les modules, le 1 à tous sauf le premier ... for (unsigned numProf (0); numProf < profs.size (); ++numProf) { for (unsigned numModule (numProf); numModule < modules.size (); ++numModule) { profs [numProf] ->addModule (modules [numModule]); modules [numModule]->addProf (profs [numProf]); } } // affichages des profs avec leur modules assiciés for (const Prof * prof : profs) { cout << "Nom de professeur : " << prof->getName () << endl; cout << "Liste des modules associés :" << endl; prof->display (); cout << endl; } // affichages des modules avec leur profs assiciés for (const Module * module : modules) { cout << "Nom du module : " << module->getName () << endl; cout << "Liste des professeurs associés :" << endl; module->display (); cout << endl; } // restitution de l'espace (on remarquera la symétrie avec la création) for (unsigned i(0); i < 5; ++i) { delete profs [i]; // on aurait pu faire une boucle spécifique pour la ligne qui suit delete modules [i]; } } // testModuleProf() // plus d'allocation dynamique void testModuleProfV2 (void) { vector <Module> modules; modules.resize(5); vector <Prof> profs; profs.resize(5); // Création des modules for (unsigned i (0); i < 5; ++i) { string module; cout << "Veuillez saisir un nom de Module : (pas d'espace dans le nom)" << endl; cin >> module; modules [i] = module; } // Création des profs for (unsigned i (0); i < 5; ++i) { string prof; cout << "Veuillez saisir un nom de Prof : (pas d'espace dans le nom)" << endl; cin >> prof; profs [i] = prof; } // création des associations, attention si un prof est lié // à un module, ce module doit être lié à ce prof // Le prof 0 sera lié à tous les modules, le 1 à tous sauf le premier ... for (unsigned numProf (0); numProf < profs.size (); ++numProf) { for (unsigned numModule (numProf); numModule < modules.size (); ++numModule) { profs [numProf] .addModule (& (modules [numModule])); modules [numModule].addProf (& (profs [numProf])); } } // affichages des profs avec leur modules assiciés for (const Prof & prof : profs) { cout << "Nom de professeur : " << prof.getName () << endl; cout << "Liste des modules associés :" << endl; prof.display (); cout << endl; } // affichages des modules avec leur profs assiciés for (const Module & module : modules) { cout << "Nom du module : " << module.getName () << endl; cout << "Liste des professeurs associés :" << endl; module.display (); cout << endl; } // restitution de l'espace devenue inutile } // testModuleProfV2() } // namespace int main() { /* * / testModuleProf (); /* */ /* */ testModuleProfV2 (); /* */ return 0; }