Bonjour à tous,
j'ai modifier mon code pour utiliser les factory patern.
Ce factory me renvoie une personne, dans laquel je rentre des attributs (numeronational, nom, prenom, fonction).
Lorsque je lis les attributs qui viennent d'être rentré avec un (System.out.print()); les attributs sont bien compléter.
Mon problème est que lorsque je veux mettre ma personne dans un hashset, tout ces attributs sont à null et donc, impossible de rentrer une deuxième personne, puisque pour ma hashset, il s'agit de doublon.
Je dirais que le problème se situe aux lignes 68, 80,91,103 de ma classe IntroDonneesSaveBin, je ne suis pas certain de la syntax à utiliser.
A savoir, que avant l'utilisation d'un factory, mon hashset fonctionnait.
Class abstraite Personnes
Classe Directeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128 package be.iepscfjemelle.poolabo.nicolay.entreprise2withFactory; import java.io.Serializable; import java.util.Objects; /** * Classe abstraite de l'objet Personnes, contenant les attributs d'une personnes. * * @author Fred */ public abstract class Personnes implements Serializable { // *********************** Attributs *************************************** /** * Numero national de la personne */ public String numeroNational; /** * Prénom de la personne */ public String prenom; /** * Nom de la personne */ public String nom; /** * Fonction de la personne */ public String fonction; // *********************** Constructeurs *************************************** /** * Constructeur avec paramètres * * @param numeroNational * @param prenom * @param nom * @param fonction */ public Personnes(String numeroNational, String prenom, String nom, String fonction) { this.numeroNational = numeroNational; this.prenom = prenom; this.nom = nom; this.fonction = fonction; } /** * Constructeur par défaut */ public Personnes() { } // *********************** Getters and setters ********************************* /** * Getters and Setters commun à toutes les classes * @return */ public String getNumeroNational() { return numeroNational; } public void setNumeroNational(String numeroNational) { this.numeroNational = numeroNational; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getFonction() { return fonction; } public void setFonction(String fonction) { this.fonction = fonction; } //******************************* Méthodes ****************************************** /** * Méthodes Overridé */ public abstract void joue(); public abstract void manger(); /** * Méthode hashCode pour mon hashset * @return */ @Override public int hashCode() { int hash = 3; hash = 61 * hash + Objects.hashCode(this.nom); return hash; } /** * Méthode equals pour mon hashset * @param obj * @return */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } final Personnes other = (Personnes) obj; return Objects.equals(this.nom, other.nom); } }
Classe Comptable
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 package be.iepscfjemelle.poolabo.nicolay.entreprise2withFactory; import java.io.Serializable; /** * Classe d'objet directeur, qui hérite de l'objet personnes (interface et abstrait) * * @author Fred */ public class Directeur extends Personnes implements Serializable{ // *********************** Attributs *************************************** /** * Attributs spécifique au Directeur */ public String portefeuille = "Ca frôle l'indécence!";; //public String fonction = "Directeur"; // *********************** Constructeurs *************************************** /** * Constructeur par défaut */ public Directeur() { } /** * Constructeur utiliser dans la classe IntroDonneesSaveBin pour remplir les attibuts de l'objet directeur. * @param numeroNational * @param prenom * @param nom * @param fonction */ public Directeur(String numeroNational, String prenom, String nom, String fonction) { super(numeroNational, prenom, nom, fonction); } //******************************* Getters and setters ******************************************** /** * Getters and Setters propore à cette Classe * @return */ public String getPortefeuille() { return portefeuille; } public void setPortefeuille(String portefeuille) { this.portefeuille = portefeuille; } //******************************* Méthodes ****************************************** /** * Méthodes à overrider */ @Override public void joue() { System.out.println("Joue au golf."); } @Override public void manger() { System.out.println("Mange au restaurant."); } /** * Mise en forme de mon affichage * @return */ @Override public String toString() { return "Numéro National: " + this.numeroNational + ", Prénom: " + this.prenom + ", Nom: " + this.nom + ", Fonction: " + this.fonction + ", Portefeuille: " + this.portefeuille + ", Job description: Dirige la société."; } }
Mes class Secretaire et comptable sont comparable aux class Directeur et comptable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 package be.iepscfjemelle.poolabo.nicolay.entreprise2withFactory; import java.io.Serializable; /** * Classe d'objet comptable, qui hérite de l'objet personnes (interface et abstrait) * * @author Fred */ public class Comptable extends Personnes implements Serializable{ // *********************** Attributs *************************************** /** * Attributs spécifique au Comptable */ // *********************** Constructeurs *************************************** /** * Constructeur avec paramètres * * @param numeroNational * @param prenom * @param nom * @param fonction */ public Comptable(String numeroNational, String prenom, String nom, String fonction) { super(numeroNational, prenom, nom, fonction); } /** * Constructeur par défaut */ public Comptable() { } //******************************** Getters and setters ******************************************* //******************************* Méthodes ****************************************** /** * Méthodes à overrider */ @Override public void joue() { System.out.println("Joue au tennis."); } @Override public void manger() { System.out.println("Mange au restaurant avec le directeur."); } /** * Mise en forme de mon affichage * @return */ @Override public String toString() { return "Numéro National: " + this.numeroNational + ", Prénom: " + this.prenom + ", Nom: " + this.nom + ", Fonction: " + this.fonction + ", Job description: s'occupe de la facturation."; } }
Class PersonnesFactory
Ma classe qui sert à créer des objet Personnes, remplir leurs attribut, les sérialiser et les copier dans un fichier binaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package be.iepscfjemelle.poolabo.nicolay.entreprise2withFactory; /** * * @author Fred */ public class PersonnesFactory { static Personnes getPers(String numeroNational, String prenom, String nom, String fonction) { if (fonction == null) { return null; } if (fonction.equalsIgnoreCase("DIRECTEUR")) { return new Directeur(); } else if (fonction.equalsIgnoreCase("COMPTABLE")) { return new Comptable(); } else if (fonction.equalsIgnoreCase("SECRETAIRE")) { return new Secretaire(); } else if (fonction.equalsIgnoreCase("OUVRIER")) { return new Ouvrier(); } return null; } }
class IntroDonneesSaveBin
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209 package be.iepscfjemelle.poolabo.nicolay.entreprise2withFactory; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; /** * Classe héritant de l'interface Prog, qui à partir d'un menu secondaire, crée * des objets Personnes et leurs attributs, (fonctions d'après un hashmap). * Places ces objets Personnes dans un hashset, pour éviter les doublons. * Ensuite, parcours le hashset, sérialise chaque ojets et l'enregistre dans un * fichier binaire. Propose un retour au menu principal à la fin. * * @author Fred */ public class IntroDonneesSaveBin implements Prog { /** * Methode qui remplis mon hashset et les attributs de chaques employés * */ @Override public void execute(MenuDepart programme) { //Création d'une haspMap qui définira la fonction d'un objet HashMap<Integer, String> mesFonctions = new HashMap<>(); // Insertion des valeurs dans la hashmap mesFonctions.put(1, "Directeur"); mesFonctions.put(2, "Comptable"); mesFonctions.put(3, "Secretaire"); mesFonctions.put(4, "Ouvrier"); // Création d'un hashSet d'objets Personnes HashSet<Personnes> hset = new HashSet<>(); ObjectOutputStream sortie = null; int nbr = nombreEmploye();//nombre d'employé dans l'entreprise pour définir le nombre de boucles //PersonnesFactory persFactory = new PersonnesFactory(); for (int i = 0; i < nbr; i++) { int choix = menuFonction();//Appel de ma méthode MenuFonction //Lecture des données de chaque employé dans la console pour remplir les attributs de chaque objet Personnes System.out.println("Entrer les informations demandée sur l'employé: "); System.out.print("Numéro National: "); String numeroNational = Clavier.lireString(); System.out.print("Prénom: "); String prenom = Clavier.lireString(); System.out.print("Nom: "); String nom = Clavier.lireString(); System.out.println("Fonction: " + mesFonctions.get(choix)); String fonction = mesFonctions.get(choix); System.out.println("\n"); //Switch pour remplir les attributs d'une classe en fonction du choix fait avant switch (choix) { case 0: System.exit(0); break; case 1: Directeur directeur = (Directeur) PersonnesFactory.getPers(numeroNational, prenom, nom, fonction); System.out.println(numeroNational + prenom + nom + fonction); if (hset.add(directeur)) { } else { System.out.println("Cet employé occupe déjà une fonction dans l'entreprise.\n"); System.out.println("Veuillez rentrer à nouveau les informations sur l'employé.\n"); i--; } //i = ajoutPersonneToList(directeur, hset)? i : i-1;//appel la méthode ajoutPersonne ToList avec ternaire System.out.println("\n"); break; case 2: Comptable comptable = (Comptable) PersonnesFactory.getPers(numeroNational, prenom, nom, fonction); System.out.println(numeroNational + prenom + nom + fonction); if (hset.add(comptable)) { } else { System.out.println("Cet employé occupe déjà une fonction dans l'entreprise.\n"); System.out.println("Veuillez rentrer à nouveau les informations sur l'employé.\n"); i--; } //i = ajoutPersonneToList(comptable, hset) ? i : i - 1;//appel la méthode ajoutPersonne ToList avec ternaire System.out.println("\n"); break; case 3: Secretaire secretaire = (Secretaire) PersonnesFactory.getPers(numeroNational, prenom, nom, fonction); if (hset.add(secretaire)) { } else { System.out.println("Cet employé occupe déjà une fonction dans l'entreprise.\n"); System.out.println("Veuillez rentrer à nouveau les informations sur l'employé.\n"); i--; } //i = ajoutPersonneToList(secretaire, hset) ? i : i - 1;//appel la méthode ajoutPersonne ToList avec ternaire System.out.println("\n"); break; case 4: Ouvrier ouvrier = (Ouvrier) PersonnesFactory.getPers(numeroNational, prenom, nom, fonction); if (hset.add(ouvrier)) { } else { System.out.println("Cet employé occupe déjà une fonction dans l'entreprise.\n"); System.out.println("Veuillez rentrer à nouveau les informations sur l'employé.\n"); i--; } //i = ajoutPersonneToList(ouvrier, hset) ? i : i - 1;//appel la méthode ajoutPersonne ToList avec ternaire System.out.println("\n"); break; case 5: programme.showMenuDépart(); default: this.menuFonction(); } } try { saveDataHset(hset);//appel de ma méthode saveDataHset } catch (IOException ex) { Logger.getLogger(IntroDonneesSaveBin.class.getName()).log(Level.SEVERE, null, ex); } this.endProg(programme);//appel de la méthode fin de programme } //****************************************Méthodes***************************************************** /** * Méthode avec condition ajout de l'objet, si le nom existe déjà, msg * erreur et demande à nouveau les attributs du nouvel employé. * * @param pers * @param hset * @return */ /*private boolean ajoutPersonneToList(Personnes pers, HashSet<Personnes> hset) { if (hset.add(pers)) { return true; } else { System.out.println("Cet employé occupe déjà une fonction dans l'entreprise.\n"); System.out.println("Veuillez rentrer à nouveau les informations sur l'employé.\n"); return false; } }*/ /** * Méthode qui parcour mon hashset via un itérateur et encode mes objets * Personnes dans un fichier binaire * * @param hs * @throws FileNotFoundException * @throws IOException */ public static void saveDataHset(HashSet<Personnes> hs) throws FileNotFoundException, IOException { // Création d'un itérateur Iterator<Personnes> iter = hs.iterator(); ObjectOutputStream sortie = new ObjectOutputStream(new FileOutputStream("fichier.dat")); // Boucle tant qu'il y a un objet dans le hashset while (iter.hasNext()) { Personnes empl = iter.next(); sortie.writeObject(empl); } System.out.println(); } /** * Fin du programme, retour au menu principale * * @param programme */ @Override public void endProg(MenuDepart programme) { System.out.println("Appuyer sur une touche pour retourner au menu."); String str = Clavier.lireString(); programme.showMenuDépart(); } /** * Méthode pour choisir la fonction, quitter ou retour au menu principale * * @return */ private int menuFonction() { System.out.println("Veuillez choisir un chiffre dans la liste ci-dessous: "); System.out.println("0 ==> Quitter"); System.out.println("1 ==> Directeur"); System.out.println("2 ==> Comptable"); System.out.println("3 ==> Secretaire"); System.out.println("4 ==> Ouvrier"); System.out.println("5 ==> Retour au menu de départ"); System.out.print("Votre choix: "); int choix; choix = (Clavier.lireInt()); return choix; } /** * Méthode pour choisir le nombre d'employé et renvoyé un int * * @return */ private int nombreEmploye() { int taille; System.out.print("Entrer le nombre d'employé dans l'entreprise: "); taille = Clavier.lireInt(); return taille; } }
Partager