From b13954d72f7a65a711b210879299de335654e3f0 Mon Sep 17 00:00:00 2001
From: Ethan Robert <ethan.rbrt90@gmail.com>
Date: Mon, 2 Jun 2025 10:31:27 +0200
Subject: [PATCH] tpQU-05::exo-machine

---
 src/tpQU/tp05/Element.java       | 50 ++++++++++++++++++++++++++++++++
 src/tpQU/tp05/Machine.java       |  9 ++++++
 src/tpQU/tp05/NumberFactory.java |  6 +++-
 src/tpQU/tp05/Piece.java         | 15 ++++++++++
 src/tpQU/tp05/UseStock.java      | 29 ++++++++++++++++++
 5 files changed, 108 insertions(+), 1 deletion(-)
 create mode 100644 src/tpQU/tp05/Element.java
 create mode 100644 src/tpQU/tp05/Machine.java
 create mode 100644 src/tpQU/tp05/Piece.java
 create mode 100644 src/tpQU/tp05/UseStock.java

diff --git a/src/tpQU/tp05/Element.java b/src/tpQU/tp05/Element.java
new file mode 100644
index 0000000..a6f8bdb
--- /dev/null
+++ b/src/tpQU/tp05/Element.java
@@ -0,0 +1,50 @@
+package tpQU.tp05;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class Element {
+
+    protected ArrayList<Element> components;
+    protected String label;
+
+    public Element(String label) {
+        this.label = label;
+        this.components = new ArrayList<>();
+    }
+
+    public void addComponent(Element e) {
+        this.components.add(e);
+    }
+
+    public Element removeComponent(int i) {
+        return this.components.remove(i);
+    }
+
+    public boolean removeComponent(Element e) {
+        return this.components.remove((Object) e);
+    }
+
+    public String toString() {
+        return toStringHelper(0);
+    }
+
+    private String toStringHelper(int indentLevel) {
+        String indent = "\t".repeat(indentLevel);
+        String result = indent + this.label;
+
+        // Si c'est une pièce, on ajoute son numéro
+        if (this instanceof Piece) {
+            result += "(N." + ((Piece) this).getReference() + ")\n";
+        } else {
+            result += ":\n";
+            // Sinon on parcourt ses composants
+            for (Element elt : components) {
+                result += elt.toStringHelper(indentLevel + 1);
+            }
+        }
+
+        return result;
+    }
+
+}
diff --git a/src/tpQU/tp05/Machine.java b/src/tpQU/tp05/Machine.java
new file mode 100644
index 0000000..91651a4
--- /dev/null
+++ b/src/tpQU/tp05/Machine.java
@@ -0,0 +1,9 @@
+package tpQU.tp05;
+
+public class Machine extends Element {
+
+    public Machine(String label) {
+        super(label);
+    }
+
+}
diff --git a/src/tpQU/tp05/NumberFactory.java b/src/tpQU/tp05/NumberFactory.java
index 8b8dcf5..e1dfe19 100644
--- a/src/tpQU/tp05/NumberFactory.java
+++ b/src/tpQU/tp05/NumberFactory.java
@@ -23,7 +23,11 @@ public class NumberFactory {
     }
 
     public static Number number(String n) throws NumberFormatException {
-        return NumberFactory.number(Double.parseDouble(n));
+        try {
+            return NumberFactory.number(Integer.parseInt(n));
+        } catch (NumberFormatException e) {
+            return NumberFactory.number(Double.parseDouble(n));
+        }
     }
 
 }
diff --git a/src/tpQU/tp05/Piece.java b/src/tpQU/tp05/Piece.java
new file mode 100644
index 0000000..bcdc9ed
--- /dev/null
+++ b/src/tpQU/tp05/Piece.java
@@ -0,0 +1,15 @@
+package tpQU.tp05;
+
+public class Piece extends Element {
+
+    private int reference;
+
+    public Piece (String label, int reference) {
+        super(label);
+        this.reference = reference;
+    }
+
+    public int getReference() {
+        return this.reference;
+    }
+}
diff --git a/src/tpQU/tp05/UseStock.java b/src/tpQU/tp05/UseStock.java
new file mode 100644
index 0000000..6bc460c
--- /dev/null
+++ b/src/tpQU/tp05/UseStock.java
@@ -0,0 +1,29 @@
+package tpQU.tp05;
+
+public class UseStock {
+
+    public static void main (String[] args) {
+
+        Machine alice = new Machine("Poste d'Alice");
+
+        alice.addComponent(new Piece("Clavier", 1934));
+        alice.addComponent(new Piece("Écran", 1340));
+        alice.addComponent(new Piece("Souris", 2805));
+
+        Element uc = new Element("Unité centrale");
+        uc.addComponent(new Piece("Carte mère", 1569));
+        uc.addComponent(new Piece("Extension Mémoire", 289));
+        uc.addComponent(new Piece("Disque SCSI", 299));
+
+        Element gpu = new Element("Carte graphique");
+        gpu.addComponent(new Piece("Extension mémoire", 2879));
+        gpu.addComponent(new Piece("Processeur graphique", 7289));
+
+        uc.addComponent(gpu);
+        alice.addComponent(uc);
+
+        System.out.println(alice);
+
+    }
+
+}
-- 
GitLab