Bonsoir à tous,
Je me suis amusé a faire un petit TP sur l'implémentation d'une quincaillerie, mais j'ai un petit problème sur une méthode d'affichage.
Mais avant, je vais vous donner une partie de l'énoncé pour vous situer le contexte.
On me demande ensuite de faire apparaitre les constructeurs et les méthodes toString(), ajoute(), prix(), duréeGarantie(), duréeFabrication(), affiche().Trois sortes de pièces se distinguent essentiellement, les pièces de base, les pièces composites en kit et les pièces composites montées.
Les pièces de base correspondent à des éléments de quincaillerie simple. Elles sont décrites par une référence de préfixe 00, un prix, une durée de garantie (en mois), une durée de fabrication (en jours). On doit pouvoir éditer une fiche caractéristiques sous le format suivant :
Les pièces composites correspondent à des éléments de quincaillerie construits à partir d'autres éléments, simples ou eux-mêmes composites.nom : vis
référence : 007152
prix : 0.01 euros
garantie : 12 mois
durée de fabrication : 1 jour(s)
Les pièces composites en kit sont livrés en pièces détachées avec une notice de montage. Elle se caractérisent par une référence de préfixe 01 et une durée moyenne de montage par un particulier (en minutes). Leur prix se calcule en prenant la somme des prix de leurs composants. Leur durée de garantie s'obtient en prenant la plus courte durée de garantie parmi celle de leurs composants et en la divisant par deux. Leur durée de fabrication s'obtient en prenant la durée de fabrication la plus longue d'un composant.
La fiche caractéristique a la forme suivante :
Les pièces composites montées se caractérisent par une référence de préfixe 02, un prix de montage et une durée de montage en atelier (en jours). Leur prix se calcule en prenant la somme des prix de leurs composants à laquelle on ajoute le prix de montage. Leur durée de garantie s'obtient en prenant la plus courte durée de garantie parmi celles de leurs composants et en lui ajoutant un bonus de garantie de 6 mois. Leur durée de fabrication s'obtient en prenant la durée de fabrication la plus longue d'un composant augmentée de la durée de montage en atelier. La fiche caractéristique est basé sur le même format que pour les pièces composites en kit.nom : roue de brouette en kit
référence : 011512
prix : 24 euros
garantie : 10 mois
durée de fabrication : 4 jour(s)
durée de montage particulier : 15 min
composants :
pneu - 004741
chambre à air - 004565
jante - 014541
disque de jante - 001214
rayon - 004748
rayon - 004748
rayon - 004748
J'ai donc fait ceci :
Piece.java
PieceBase.java
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 public abstract class Piece { protected String nom; protected String reference; protected float prix; // en euros protected int garantie; // en mois protected int dureeFabrication; // en jours public Piece(String n, String r){ nom = n; reference = r; } public String toString() { String resultat = nom + " (ref: " + reference + ") coûte " + prix() + ", a une garantie de " + dureeGarantie() + " mois et une duree de fabrication de " + dureeFabrication() + " jour(s)."; return resultat; } public abstract int dureeFabrication(); public abstract float prix(); public abstract int dureeGarantie(); public void affiche() { System.out.println("nom : " + nom); System.out.println("référence : " + reference); System.out.println("prix : " + prix() + " euros"); System.out.println("garantie : " + dureeGarantie() + " mois"); System.out.println("durée de fabrication : " + dureeFabrication() + " jour(s)"); } }
PieceComposite.java
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 public class PieceBase extends Piece { public PieceBase(String n, String r, float p, int g, int dF){ super(n,r); reference = "00" + r; prix = p; garantie = g; dureeFabrication = dF; } public float prix() { return prix; } public int dureeFabrication() { return dureeFabrication; } public int dureeGarantie() { return garantie; } }
PieceCompositeKit.java
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 import java.util.Vector; public abstract class PieceComposite extends Piece { Vector<Piece> composants = new Vector<Piece>(); public PieceComposite(String n, String r) { super(n,r); } public void ajoute(Piece p) { composants.add(p); } public int dureeGarantie() { if (!composants.isEmpty()) { int garantieMin = composants.get(0).dureeGarantie(); for (int i=1 ; i < composants.size() ; i++) { if (garantieMin > composants.get(i).dureeGarantie()) { garantieMin = composants.get(i).dureeGarantie(); } } return garantieMin; } else return 0; } public int dureeFabrication() { if (!composants.isEmpty()) { int dureeFabricationMax = composants.get(0).dureeFabrication(); for (int i=1 ; i < composants.size() ; i++) { if (dureeFabricationMax < composants.get(i).dureeFabrication()) { dureeFabricationMax = composants.get(i).dureeFabrication(); } } return dureeFabricationMax; } else return 0; } public float prix() { float resultat = 0; for (int i=0 ; i < composants.size() ; i++) { resultat += composants.get(i).prix(); } return resultat; } }
Je vous mets pas PieceCompositeMontee.java qui fonctionne sur le même principe que PieceCompositeKit.java.
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 public class PieceCompositeKit extends PieceComposite { private int dureeMontageParticulier; // en minutes public PieceCompositeKit(String n, String r, int dMP) { super(n,r); prix = prix(); reference = "01" + r; dureeMontageParticulier = dMP; garantie = dureeGarantie(); dureeFabrication = dureeFabrication(); } public int dureeGarantie() { return (super.dureeGarantie() / 2); } public String toString() { String resultat = super.toString() + " Duree montage particulier : " + dureeMontageParticulier + " min."; return resultat; } public void affiche() { super.affiche(); System.out.println("duree de montage particulier : " + dureeMontageParticulier + " mn"); System.out.println("composants :"); for (int i=0 ; i < composants.size() ; i++) { System.out.println(" " + composants.get(i).nom + " - " + composants.get(i).reference); } } }
Alors premièrement, je voulais connaitre votre avis, et si éventuellement vous voyez des erreurs de conception.
Et ensuite, j'ai un problème pour la méthode affiche().
Pas de souci pour ce qui est d'afficher la fiche d'une pièce de base, mais c'est plus compliqué pour afficher la fiche d'une pièce composée.
En effet, je n'arrive pas a afficher les composants de mes pièces composés. Voyez plutôt.
Au lieu de :
Je parviens seulement a afficher :nom : roue de brouette en kit
référence : 011512
prix : 24 euros
garantie : 10 mois
durée de fabrication : 4 jour(s)
durée de montage particulier : 15 min
composants :
pneu - 004741
chambre à air - 004565
jante - 014541
disque de jante - 001214
rayon - 004748
rayon - 004748
rayon - 004748
Quel puis-je faire pour remédier a ça ? Je ne trouve pas de solution.nom : roue de brouette en kit
référence : 011512
prix : 24 euros
garantie : 10 mois
durée de fabrication : 4 jour(s)
durée de montage particulier : 15 min
composants :
pneu - 004741
chambre à air - 004565
jante - 014541
PS : J'ai lu une partie de la FAQ, et je suis au courant qu'il n'est pas conseillé d'utiliser la classe Vector, malheureusement c'est dans le programme de ma licence, d’où son utilisation dans mon application.
Partager