begin process at 2010 02 09 21:29:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Mono

 > 

Général

 > 

probleme heritage


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme heritage

lundi 11 février 2008 à 13:25:57 | probleme heritage

djmanu78

bonjour tout le monde,
j'ai quelques difficultées à trouver la solution à mon problème.
je m'explique :
j'ai creer une classe macollec qui regroupe dans une arraylist des personnes.
j'ai donc une classe personne , ainsi qu'une classe enseignant qui heritage de la classe personne.
Voici mon probleme :
Lorsque je souhaite creer une methode d'ajout de personne et/ou de enseignant celle ci doit etre appeler par ne methode de saisie dans personne, or je ne vois pas comment creer cette methode (celle de la classe macollec)..
je ne sais pas trop si mon explication est clair..
je vous laisse donc mon code ci dessous :

(probleme ecrit en rouge vers la fin du message signalant la potentielle methode erronée)



public

class personne

{

// 1 attribut de classe : nombre total de personnes

staticint nbtot;

// attributs d'instance : prénom, nom, âge

privatestring prenom;

privatestring nom;

privateint age;

// constructeurs

public personne(string N, string P, int age)

{

// une personne de plus

nbtot =nbtot + 1;

// construction

prenom = P;

nom = N;

this.age = age;

// suivi

Console.WriteLine("Construction personne");

}

// méthode de classe : get_nbpersonne

publicstaticint get_nbpersonne() { return nbtot;}

// méthodes d'instance : get_nom, get_prenom, get_age, set_age, affiche

publicstring get_nom() { return nom;}

publicstring get_prenom() { return prenom;}

publicint get_age() { return age;}

publicvoid set_age(int a) { age = a ;}

virtualpublicvoid affiche()

{

Console.WriteLine("\n nom : "+

this.get_nom() +"\n prenom : "+this.get_prenom()+"\n age : "+this.get_age());

}

 

virtualpublicvoid ajouter()

{

Console.WriteLine("Veuillez saisir le nom : ");

nom = Console.ReadLine();

Console.WriteLine("Veuillez saisir le prenom : ");

prenom = Console.ReadLine();

Console.WriteLine("Veuillez saisir le prenom : ");

age =

int.Parse(Console.ReadLine());

 

}

 

publicoverridestring ToString()

{

returnstring.Format("nom : " + nom + "\nprenom : " + prenom + "\nage : " + age);

}

virtualpublicbool est_enseignant() {returnfalse;}

 

 

}

 

// Nous créons une classe enseignant héritant de la classe personne :

// avec comme attributs supplémentaires : la matière enseignée et le grade (certifié ou agrégé)

public

class enseignant : personne

{

privatestaticstring[] Tmat={"inconnue","maths","anglais","français","éco-droit","informatique"};

privatestaticint[] Tpoint = {0,10,12,13,14,15};

privatestaticstring[] Tgrad={"inconnu","certifié","agrégé"};

// attributs

privatestring matiere;

privatestring grade;

privateint point;

 

publicstring get_matiere() { return matiere;}

publicstring get_grade() { return grade;}

publicint get_point() { return point;}

publicint[] get_Tpoint() { return Tpoint;}

publicvoid set_point(int p) { point = p ;}

// constructeur (prenom, nom, age numero de matiere dans le tableau Tmat, numero de grade dans le tableau Tgrad)

public enseignant(string N, string P, int age,int M,int G) : base( N,P,age)

{

matiere = Tmat[M];

grade = Tgrad[G];

point = Tpoint[M];

}

overridepublicbool est_enseignant() {returntrue;}

// méthodes : affiche

overridepublicvoid affiche()

{

base.affiche();

Console.WriteLine("\n matiere : "+matiere+"\n grade : "+grade+"\n point :"+point);

}

overridepublicvoid ajouter()

{

base.ajouter();

int nbmat,nbgrad,nummat,numgrad;

nbmat = Tmat.Length;

nbgrad = Tgrad.Length;

for (int cpt = 0; nbmat <= cpt;cpt++)

{

Console.WriteLine("Saisir le N°"+cpt+" pour la matière : "+Tmat[cpt]);

}

nummat =

int.Parse(Console.ReadLine());

 

for (int cpt = 0; nbgrad <= cpt;cpt++)

{

Console.WriteLine("Saisir le N°"+cpt+" pour le grade : "+Tgrad[cpt]);

}

numgrad =

int.Parse(Console.ReadLine());

 

matiere = Tmat[nummat];

grade = Tgrad[numgrad];

 

}


 

class

macollec

{

// attributs

protectedstring nom;

protected ArrayList Tpers;

// constructeur

public macollec(string n)

{

nom = n;

Tpers=

new ArrayList();

}

public macollec()

{

nom = "";

Tpers =

new ArrayList();

}

~macollec()

{

Console.WriteLine("Destruction de: " + nom);

}

 

public ArrayList get_Tpers() { return Tpers;}

// méthodes : affiche , ajouter

publicvoid affiche()

{

personne pers;

Console.WriteLine("\n"+ Tpers.Count + " personne(s) dans la collec : " + nom);

for(int i=0; i <= Tpers.Count - 1; i++ )

{

pers =(personne)Tpers[i];

pers.affiche();

}

 

}

publicstatic macollec operator+ (macollec m ,personne p)

{

m.ajouter(p);

return m;

}

 

// recherche d'un élément du tableau (méthode privée) personne

privateint index (string nom,string prenom, int age)

{

int cpt=0;

while (cpt < Tpers.Count - 1 && ((personne)Tpers[cpt]).get_nom()!= nom && ((personne)Tpers[cpt]).get_prenom() != prenom && ((personne)Tpers[cpt]).get_age() != age )

cpt++;

if (Tpers.Count !=0 && (((personne)Tpers[cpt]).get_nom() == nom && ((personne)Tpers[cpt]).get_prenom() == prenom && ((personne)Tpers[cpt]).get_age() == age) )

return cpt;

else

return -1;

}

publicbool existe (personne pers)

{

return (Tpers.Contains(pers));

}

 

publicvoid ajouter(personne p)

{

int num = -2;

 

 

num = index(p.get_nom(),p.get_prenom(),p.get_age());

if (num != -1)

{

Console.WriteLine("Personne deja existante");

}

else

{

Tpers.Add(p);

}

}

 

publicvoid supprimer(personne p)

{

int num = -2;

 

 

num = index(p.get_nom(),p.get_prenom(),p.get_age());

if (num == -1)

{

Tpers.Remove(p);

}

else

{

Console.WriteLine("Personne non existante");

}

}

publicvoid ajouter()     C'EST ICI QUE CE SITUE MON PROBLEME....(je ne sais pas comment faire )

{

Console.WriteLine("que voulez-vous ajouter? 1/personne , 2/enseignant , 3/ technicien");

int test;

test =

int.Parse(Console.ReadLine());

switch (test)

{

case 0 : break;

case 1 :

personne p ;

p.ajouter();

this.ajouter(p);

 

break;

case 2 :

enseignant e;

 

e.ajouter();

this.ajouter(e);

 

break;

case 3 :

technique t;

t.ajouter();

this.ajouter(t);

break;

}

}

publicint Compte_Enseignant()

{

int z = 0;

for(int i = 0; i <= Tpers.Count-1; i++)

{

if ( ((personne)Tpers[i]).est_enseignant())

{ z++;}

}

return z;

}

}

}




voila, je vous remercie de votre aide...


 mman
lundi 11 février 2008 à 22:33:59 | Re : probleme heritage

lassaad83

Membre Club

Tout d'abors il n'y a pas de définition pour un "Technicien", est ce que c'est une classe comme "enseignant" ou bien le considere tu comme étant directement une personne... ?

Aprés au niveau de tes classes il serait peut être plus judicieu de rajouter des constructeur vide.

Après tu as des readLine qui induise en erreur surtout au niveau de la méthode "ajouter()" de la class enseignant ou le système attend des saisie mais rien ne le dit a l'utilisateur, donc il serait aussi préférable de mettre des messages.
Après essaye de rendre ton code plus "safe".

Sinon après si tu veut allez plus loi au niveau de l'abstraction tu peut transfomer ta Class Personne en Interface ainsi les Class eneignant, technicien ou patati patata ... devront implémenter cette interface.

J'espere t'avoir aidé...

A+

public
class personne

{

// 1 attribut de classe : nombre total de personnes

static int nbtot;
// attributs d'instance : prénom, nom, âge
private string prenom;
private string nom;
private int age;
// constructeurs
public personne( string N, string P, int age)
{
// une personne de plus
nbtot = nbtot + 1;
// construction
prenom = P;
nom = N;
this .age = age;
// suivi
Console .WriteLine( "Construction personne" );
}
/// <summary>
/// Instanciation d'une personne
/// </summary>
public personne()
{
// Constructeur vide a rajouter
}

// méthode de classe : get_nbpersonne
public static int get_nbpersonne() { return nbtot; }
// méthodes d'instance : get_nom, get_prenom, get_age, set_age, affiche
public string get_nom() { return nom; }
public string get_prenom() { return prenom; }
public int get_age() { return age; }
public void set_age( int a) { age = a; }
virtual public void affiche()
{
Console .WriteLine( "\n nom : " + this .get_nom() + "\n prenom : " + this .get_prenom() + "\n age : " + this .get_age());
}
virtual public void ajouter()
{
Console .WriteLine( "Veuillez saisir le nom : " );
nom =
Console .ReadLine();
Console .WriteLine( "Veuillez saisir le prenom : " );
prenom =
Console .ReadLine();
Console .WriteLine( "Veuillez saisir le prenom : " ); // attention à ce que tu demande de saisir !!!
age = int .Parse( Console .ReadLine());
}
public override string ToString()
{
return string .Format( "nom : " + nom + "\nprenom : " + prenom + "\nage : " + age);
}
virtual public bool est_enseignant() { return false ; }
}
// Nous créons une classe enseignant héritant de la classe personne :
// avec comme attributs supplémentaires : la matière enseignée et le grade (certifié ou agrégé)
public class enseignant : personne
{
private static string [] Tmat ={ "inconnue" , "maths" , "anglais" , "français" , "éco-droit" , "informatique" };
private static int [] Tpoint = { 0, 10, 12, 13, 14, 15 };
private static string [] Tgrad ={ "inconnu" , "certifié" , "agrégé" };
// attributs
private string matiere;
private string grade;
private int point;
public string get_matiere() { return matiere; }
public string get_grade() { return grade; }
public int get_point() { return point; }
public int [] get_Tpoint() { return Tpoint; }
public void set_point( int p) { point = p; }
// constructeur (prenom, nom, age numero de matiere dans le tableau Tmat, numero de grade dans le tableau Tgrad)
public enseignant( string N, string P, int age, int M, int G)
:
base (N, P, age)
{
matiere = Tmat[M];
grade = Tgrad[G];
point = Tpoint[M];
}
/// <summary>
/// Instanciation d'un Enseignant
/// </summary>
public enseignant() : base ()
{
// Constructeur vide a rajouter
}

override public bool est_enseignant() { return true ; }
// méthodes : affiche
override public void affiche()
{
base .affiche();
Console .WriteLine( "\n matiere : " + matiere + "\n grade : " + grade + "\n point :" + point);
}
override public void ajouter()
{
base .ajouter();
int nbmat, nbgrad, nummat, numgrad;
nbmat = Tmat.Length;
nbgrad = Tgrad.Length;
// ton tableu est rempli le code entre la boucle FOR ne sera pas éxécuté
for ( int cpt = 0; nbmat <= cpt; cpt++)
{
Console .WriteLine( "Saisir le N°" + cpt + " pour la matière : " + Tmat[cpt]);
}

// puisque on est pas entré dans la boucle FOR l'utilisateur ne saura pas
// qu'il doit saisir un nombre
// pense a rajouter un message dans ce cas la.
nummat = int .Parse( Console .ReadLine());

// ton tableu est rempli le code entre la boucle FOR ne sera pas éxécuté
for ( int cpt = 0; nbgrad <= cpt; cpt++)
{
Console .WriteLine( "Saisir le N°" + cpt + " pour le grade : " + Tgrad[cpt]);
}
// puisque on est pas entré dans la boucle FOR l'utilisateur ne saura pas
// qu'il doit saisir un nombre
// pense a rajouter un message dans ce cas la.
numgrad = int .Parse( Console .ReadLine());

matiere = Tmat[nummat];
grade = Tgrad[numgrad];
}
}
public class macollec
{
// attributs
protected string nom;
protected ArrayList Tpers;
// constructeur
public macollec( string n)
{
nom = n;
Tpers =
new ArrayList ();
}
public macollec()
{
nom =
"" ;
Tpers =
new ArrayList ();
}
~macollec()
{
Console .WriteLine( "Destruction de: " + nom);
}
public ArrayList get_Tpers() { return Tpers; }
// méthodes : affiche , ajouter
public void affiche()
{
personne pers;
Console .WriteLine( "\n" + Tpers.Count + " personne(s) dans la collec : " + nom);
for ( int i = 0; i <= Tpers.Count - 1; i++)
{
pers = (
personne )Tpers[i];
pers.affiche();
}
}
public static macollec operator +( macollec m, personne p)
{
m.ajouter(p);
return m;
}
// recherche d'un élément du tableau (méthode privée) personne
private int index( string nom, string prenom, int age)
{
int cpt = 0;
while (cpt < Tpers.Count - 1 && (( personne )Tpers[cpt]).get_nom() != nom && (( personne )Tpers[cpt]).get_prenom() != prenom && (( personne )Tpers[cpt]).get_age() != age)
cpt++;
if (Tpers.Count != 0 && ((( personne )Tpers[cpt]).get_nom() == nom && (( personne )Tpers[cpt]).get_prenom() == prenom && (( personne )Tpers[cpt]).get_age() == age))
return cpt;
else
return -1;
}
public bool existe( personne pers)
{
return (Tpers.Contains(pers));
}
public void ajouter( personne p)
{
int num = -2;
num = index(p.get_nom(), p.get_prenom(), p.get_age());
if (num != -1)
{
Console .WriteLine( "Personne deja existante" );
}
else
{
Tpers.Add(p);
}
}
public void supprimer( personne p)
{
int num = -2;
num = index(p.get_nom(), p.get_prenom(), p.get_age());
if (num == -1)
{
Tpers.Remove(p);
}
else
{
Console .WriteLine( "Personne non existante" );
}
}
public void ajouter()
{
Console .WriteLine( "que voulez-vous ajouter? 1/personne , 2/enseignant , 3/ technicien" );
int test;
test =
int .Parse( Console .ReadLine());
switch (test)
{
case 0: break ;
case 1:
personne p = new personne (); // Ici tu dois instancier ta class personne
p.ajouter();
this .ajouter(p);
break ;

case 2:
enseignant e = new enseignant (); // ici tu dois instancier ta class enseignant
e.ajouter();
this .ajouter(e);
break ;

case 3:
//technique t; --> par contre ici, il faut que tu donne une définition pour le type technicien : est ce une presonne
//t.ajouter();
//this.ajouter(t);
break ;
}
}
public int Compte_Enseignant()
{
int z = 0;
for ( int i = 0; i <= Tpers.Count - 1; i++)
{
if ((( personne )Tpers[i]).est_enseignant())
{ z++; }
}
return z;
}
}
}


Cette discussion est classée dans : int, age, console, get, prenom


Répondre à ce message

Sujets en rapport avec ce message

probleme heritage (objet) [ par djmanu78 ] bonjour tout le monde,j'ai quelques difficultées à trouver la solution à mon problème.je m'explique :j'ai creer une classe macollec qui regroupe dans Héritage, polymorphie et surcharge [ par Kleino ] Slt á ts,je suis nouveau et travaille les heritages, la polymorphie et les surcharges en c#Cependant je suis coincéet récolte cette erreur: Method mus PROBLEME urgent sur une erreur etrange, du a un tableau de structure [ par masakoche ] l'erreur est la suivante : Accessibilité incohérente : le type de paramètre 'ConsoleApplication1.Class1.PERS[]' est moins accessible que la méthode 'C [C#] Inversion de Nombre (Débutant) [ par momos73 ] Bonjour, Je commence totalement à programmer en C# et je n'ai donc aucune connaissance dans ce language. Je dois faire un programme en mode console co IMPRIMER l'ecran dun mode console [ par masakoche ] Bonjours tous le monde et bonne année!Bon moi en fait je voudrais savoir comment imprimer en mode console ce qui saffiche a l'écran.Je me demande si o Problème avec les pointeurs [ par M5i9k ] Bonjour,Je cherche à utiliser un pointeur en lui fournissant une adresse, dans le but d'acceder une variable d'un autre programme , mais ça ne marche Besoin d'aide sur mon code. [ par Adry_34160 ] Bonjour,Je tente de faire mon premier programme.Un simple affichage de Table de multiplication. Mais une erreur me bloque: 'System.Array' ne contient Débutant : Boucle for... [ par arthur148 ] Voila j'ai un petit problème, je dois realiser un sapin  qui s'affiche dans une console de cette facon :     **    ***   ****  ****** **************** tableau c# [ par volcom20 ] allo, je doit créer une application console permettant de saisir des statistique sur le hockey pour chaque équipe l'utilisateur entre le nombre de vic Serialization d'une classe [ par olibara ] Bonjour Je voudrais comprendre la methode la plus simple pour sauver le contenu d'une classe dans un fichier afin de la recuperer ensuite Bien sur


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales