Classe avec templates en c++

Fermé
lussiane Messages postés 2 Date d'inscription vendredi 21 janvier 2011 Statut Membre Dernière intervention 21 janvier 2011 - 21 janv. 2011 à 11:49
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 21 janv. 2011 à 12:38
Bonjour,


voila actuellement en etude informatique mon prof me donne un programme a faire en c++ qui repose sur l heritage et les templates de classe l 'idée est de creer une entreprise qui possede plusieur site, ayant chacun plusieur service dans lesquel travaille plusieur employe et cadre, seulement probleme en faisant comme il le souhaite le menu qui se trouve dans la classe entreprise a la fin permet d ajouter des sites et de saisir les informations relative a l entreprise mais ne permet pas de saisir de nouveaux ou employe ou cadre travaillant dans ce service. Si quelqu un voit comme faire sa m aiderai bocou.
voila le code et merci d avance a tous:

#include <string>
#include <iostream>
#include <stdlib.h>

using namespace std;

//__________________ DECLARATION DES CLASSES__________________ //
template<class T>
class element
{
private:
T donnee;
element<T> * suivant;

public:
element();
void saisir();
void afficher();
int retour_id();
string retour_critere();
void modif_suivant(element<T>*);
element<T> * retour_suivant();
T retour_donnee();
};

template<class T>
class liste
{
private:
element<T> * tete_liste;
int nbelement;

public:
liste();
void ajouter();
void afficher_tout();
void consulter();
void vider();
void supprimer();
void trier();
void gerer();
};

//__________________ REALISATION DES METHODES__________________ //

template<class T>
element <T> :: element()
{
this->suivant = NULL;
}

template<class T>
void element<T> :: saisir()
{
this->donnee.saisir();
}

template<class T>
void element<T> :: afficher()
{
this->donnee.afficher();
}

template<class T>
int element <T> :: retour_id()
{
return this->donnee.retour_id();
}

template<class T>
string element<T> :: retour_critere()
{
return this->donnee.retour_critere();
}

template<class T>
element<T> * element<T> :: retour_suivant()
{
return this->suivant;
}

template<class T>
void element<T> :: modif_suivant(element<T> *s)
{
this->suivant = s;
}

template<class T>
T element<T> :: retour_donnee()
{
return this->donnee;
}


template <class T>
liste<T> :: liste()
{
this->nbelement=0;
this->tete_liste=NULL;
}

template<class T>
void liste<T> :: ajouter()
{
element<T> *e;
e = new element<T>();
e->saisir();
if(this->tete_liste == NULL)
{
this->tete_liste=e;
}
else
{
e->modif_suivant(this->tete_liste);
this->tete_liste = e;
}
this->nbelement++;
}

template<class T>
void liste<T> :: afficher_tout()
{
element<T> * e;
e = this->tete_liste;
while(e!=NULL)
{
e->afficher();
e=e->retour_suivant();
}
}

template<class T>
void liste<T> :: consulter()
{
int id;
cout <<"Saisir l'ID a rechercher : ";
cin >> id;
bool trouve = false;
element<T> * e = tete_liste;
while(trouve == false && e!=NULL)
{
if(e->retour_id() == id)
{
trouve = true;
}
else
e=e->retour_suivant();
}
if(trouve == false)
cout <<"ID inexistant " << endl;
else
e->afficher();
}

template<class T>
void liste<T> :: vider()
{
this->tete_liste = NULL;
}

template<class T>
void liste<T> :: supprimer()
{
int id;
cout << "Saisir l'id a rechercher : "<<endl;
cin >> id;
bool trouve = false;
element<T> * e = this->tete_liste;
element<T> * prec = e;

while(trouve == false && e!=NULL)
{
if(id == e->retour_id())
trouve = true;

else
{
prec = e;
e=e->retour_suivant();
}
}
if(trouve == false)
cout << "Aucun id correspondant ";
else
{
if(e == this->tete_liste)
{
this->tete_liste = e->retour_suivant();
delete(e);
}
else if(e->retour_suivant()==NULL)
{
prec->modif_suivant(NULL);
delete(e);
}
else
{
prec->modif_suivant(e->retour_suivant());
delete(e);
}
}
}

template <class T>
void liste<T>::trier()
{
element<T> *p,*q;
element<T> *temp=new element<T>();
p=this->tete_liste;

while(p->retour_suivant()!=NULL)
{
q=p->retour_suivant();

while(q!=NULL)
{
if(p->retour_critere()>q->retour_critere())
{
*temp=*p;
*p=*q;
*q=*temp;

temp->modif_suivant(p->retour_suivant());
p->modif_suivant(q->retour_suivant());
q->modif_suivant(temp->retour_suivant());
}
q=q->retour_suivant();
}
p=p->retour_suivant();
}
delete temp;
}

template <class T>
void liste<T>::gerer()
{
int choix;

do{
cout<<"1-ajouter"<<endl;
cout<<"2-afficher tout"<<endl;
cout<<"3-consulter"<<endl;
cout<<"4-vider"<<endl;
cout<<"5-suppression"<<endl;
cout<<"6-trier"<<endl;
cout<<"Votre choix?"<<endl;
cin>>choix;

switch(choix)
{
case 1: this->ajouter();break;
case 2: this->afficher_tout();break;
case 3: this->consulter();break;
case 4: this->vider();break;
case 5: this->supprimer();break;
case 6: this->trier();break;
}
}while(choix!=0);
}

class personne
{
protected: int id_personne;
string nom,prenom;

public: personne();
void saisir();
virtual void afficher()=0;
int retour_id();
string retour_critere();
};

personne::personne()
{
this->nom=this->prenom="";
this->id_personne=0;
}

void personne::saisir()
{
cout<<"saisir l'id: "<<endl;
cin>>this->id_personne;
cout<<"saisir le nom: "<<endl;
cin>>this->nom;
cout<<"saisir le prenom: "<<endl;
cin>>this->prenom;
}

void personne::afficher()
{
cout<<"id: "<<this->id_personne<<endl;
cout<<"nom: "<<this->nom<<endl;
cout<<"prenom: "<<this->prenom<<endl;
}
int personne::retour_id()
{
return this->id_personne;
}
string personne::retour_critere()
{
return this->nom;
}

class employe:public personne
{
private: string poste;

public: employe();
void saisir();
void afficher();
};

employe::employe()
{
this->poste="";
}

void employe::saisir()
{
this->personne::saisir();
cout<<"saisir le poste occupe: "<<endl;
cin>>this->poste;
}

void employe::afficher()
{
this->personne::afficher();
cout<<"poste occupe: "<<this->poste<<endl;
}

class cadre:public personne
{
private: string responsabilite;

public: cadre();
void saisir();
void afficher();
};

cadre::cadre()
{
this->responsabilite="";
}

void cadre::saisir()
{
this->personne::saisir();
cout<<"saisir la responsabilite: "<<endl;
cin>>this->responsabilite;
}

void cadre::afficher()
{
this->personne::afficher();
cout<<"responsabilite: "<<endl;
}

class directeur:public cadre
{
private: string qualification;

public:directeur();
void saisir();
void afficher();
};

directeur::directeur()
{
this->qualification="";
}

void directeur::saisir()
{
this->cadre::saisir();
cout<<"saisir la qualification: "<<endl;
cin>>this->qualification;
}

void directeur::afficher()
{
this->cadre::afficher();
cout<<"qualification: "<<endl;
}

class service
{
private: int id,numero_etage;
string designation;
liste<employe> liste_e;
liste<cadre> liste_c;

public: service();
void saisir();
void afficher();
void gerer_cadre();
void gerer_employe();
int retour_id();
string retour_critere();
void gerer();
};

service::service()
{
this->id=this->numero_etage=0;
this->designation="";
}

void service::saisir()
{
cout<<"saisir l'id du service: "<<endl;
cin>>this->id;
cout<<"saisir la designation: "<<endl;
cin>>this->designation;
cout<<"saisir le numero de l'etage: "<<endl;
cin>>this->numero_etage;
}

void service::afficher()
{
cout<<"id du service: "<<this->id<<endl;
cout<<"designation: "<<this->designation<<endl;
cout<<"numero de l'etage: "<<this->numero_etage<<endl;
}

void service::gerer_cadre()
{
this->liste_c.gerer();
}

void service::gerer_employe()
{
this->liste_e.gerer();
}

int service::retour_id()
{
return this->id;
}

string service::retour_critere()
{
return this->designation;
}

void service::gerer()
{
int choix;

do{
cout<<"****MENU SERVICE*****"<<endl<<endl;
cout<<"1-Menu employe"<<endl;
cout<<"2-Menu cadre"<<endl;
cout<<"Votre choix?"<<endl;
cin>>choix;

switch(choix)
{
case 1: this->gerer_employe();break;
case 2: this->gerer_cadre();break;
}

}while(choix!=0);
}

class site
{
private: int id,cp;
string designation,adresse;
directeur mondirecteur;
string ville;
liste<service> liste_service;

public: site();
void saisir();
void afficher();
void gerer_service();
void gerer();
int retour_id();
string retour_critere();
};

site::site()
{
this->designation=this->adresse="";
this->id=this->cp=0;
this->ville="";
}

void site::saisir()
{
cout<<"saisir l'id: "<<endl;
cin>>this->id;
cout<<"saisir la designation: "<<endl;
cin>>this->designation;
cout<<"saisir l'adresse: "<<endl;
cin>>this->adresse;
cout<<"saisir le CP: "<<endl;
cin>>this->cp;
cout<<"saisir la ville: "<<endl;
cin>>this->adresse;
cout<<"saisir le directeur: "<<endl;
this->mondirecteur.saisir();
}

void site::afficher()
{
cout<<"id: "<<this->id<<endl;
cout<<"designation: "<<this->designation<<endl;
cout<<"adresse: "<<this->adresse<<endl;
cout<<"CP: "<<this->cp<<endl;
cout<<"ville: "<<this->adresse<<endl;
cout<<"directeur du site: "<<endl;
this->mondirecteur.afficher();
}
void site::gerer_service()
{
this->liste_service.gerer();
}
void site::gerer()
{
int choix;

do{
cout<<"****MENU SITE*****"<<endl<<endl;
cout<<"1-Menu service"<<endl;
cout<<"0-quitter"<<endl;
cout<<"Votre choix?"<<endl;
cin>>choix;

switch(choix)
{
case 1: this->gerer_service();break;

}

}while(choix!=0);
}
int site::retour_id()
{
return this->id;
}
string site::retour_critere()
{
return this->designation;
}

class entreprise
{
private: string designation;
string sigle;
directeur mon_directeur;
string secteur;
liste<site> liste_site;

public: entreprise();
void saisir();
void afficher();
void gerer_site();
void menu();
};

entreprise::entreprise()
{
this->designation="";
this->sigle="";
this->secteur="";
}

void entreprise::saisir()
{
cout<<"saisir la designation de l'entreprise: "<<endl;
cin>>this->designation;
cout<<"saisir le sigle: "<<endl;
cin>>this->sigle;
cout<<"saisir le secteur: "<<endl;
cin>>this->secteur;
cout<<"saisir directeur: "<<endl;
mon_directeur.saisir();
}

void entreprise::afficher()
{
cout<<"designation de l'entreprise: "<<this->designation<<endl;
cout<<"sigle: "<<this->sigle<<endl;
cout<<"secteur: "<<this->secteur<<endl;
cout<<"directeur: "<<endl;
mon_directeur.afficher();
}

void entreprise::gerer_site()
{
this->liste_site.gerer();
cout<<endl;
cout<<"*****menu service*****"<<endl;
this->liste_site.gerer();
}

void entreprise::menu()
{
int choix;

do{
cout<<"*********MENU GENERAL*******"<<endl<<endl;
cout<<"1-saisir"<<endl;
cout<<"2-afficher"<<endl;
cout<<"3-menu site"<<endl;
cout<<"0-quitter"<<endl;
cout<<"Votre choix?"<<endl;
cin>>choix;

switch(choix)
{
case 1: this->saisir();break;
case 2: this->afficher();break;
case 3: this->gerer_site();break;
}

}while(choix!=0);
}

int main()
{
entreprise e;

e.menu();

return 0;
}

3 réponses

LOL
0
tooooooottoooo... t'es pas foutu de trouver l'erreur.. blanco
0
lussiane Messages postés 2 Date d'inscription vendredi 21 janvier 2011 Statut Membre Dernière intervention 21 janvier 2011
21 janv. 2011 à 12:04
bah si j poste non c que j ai besoin d aide vous pourriez peut etre m aider au lieu de me dire sa
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
21 janv. 2011 à 12:38
C'est sur que ce n'est pas très malin. De ton coté, le code n'est pas indenté, donc illisible.
vaguement, là comme ça, je dirai qu'il faut que tu rajoutes des menu pour faire ce que tu veux faire.
0