diff --git a/src/tpQU/tp05/Element.java b/src/tpQU/tp05/Element.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6f8bdb139eee2ec9d6c0c5ffea4b384ca479a13
--- /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 0000000000000000000000000000000000000000..91651a462610045711647cefa80617961fa588e5
--- /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 8b8dcf50fefd708141f900032285ee18c1bc28b8..e1dfe19b09927fc500b1a9beef4417aef30a0db3 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 0000000000000000000000000000000000000000..bcdc9ed4bdd7c62f2ae1e0a82bedfc8a4f82fb93
--- /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 0000000000000000000000000000000000000000..6bc460c6a46eee91398b94f89f69a976306ba6a7
--- /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);
+
+    }
+
+}