diff --git a/Analyse/rendu.md b/Analyse/rendu.md
index cd757f5e752a4569892b92f08c25fb9719f7464d..8c64e57f213818b9b2f77228145c4fe108184014 100644
--- a/Analyse/rendu.md
+++ b/Analyse/rendu.md
@@ -3,11 +3,11 @@
 
 ### Équipe H4
 
--  [ANTOINE Maxence](maxence.antoine.etu@univ-lille.fr)
--  [DEBUYSER Hugo](hugo.debuyser.etu@univ-lille.fr)
--  [DEKEISER Matisse](matisse.dekeiser.etu@univ-lille.fr)
--  [DESMONS Hugo](hugo.desmons.etu@univ-lille.fr)
--  [MENNECART Matias](matias.mennecart.etu@univ-lille.fr)
+-  [ANTOINE Maxence](mailto:maxence.antoine.etu@univ-lille.fr)
+-  [DEBUYSER Hugo](mailto:hugo.debuyser.etu@univ-lille.fr)
+-  [DEKEISER Matisse](mailto:matisse.dekeiser.etu@univ-lille.fr)
+-  [DESMONS Hugo](mailto:hugo.desmons.etu@univ-lille.fr)
+-  [MENNECART Matias](mailto:matias.mennecart.etu@univ-lille.fr)
 
 ___
 
@@ -32,12 +32,14 @@ ___
 
 ## Diagramme de cas d'utilisation
 
+Systeme: Application de classification de données
+
 ![Diagramme de cas d'utilisation](./ressources/DiagrammeUtilisation.png)
 
 ### Fiches descriptives
 
 #### Fiche descriptive: Utilisation du logiciel, Charger l'ensemble des données
-    
+
     Système: Logiciel de classification
     Cas d'utilisation: Charger l'ensemble des données
     
@@ -66,7 +68,7 @@ ___
     A)  4) Le système vérifie les données implémentées et renvoie une erreur à l'utilisateur.
 
 #### Fiche descriptive: Utilisation du logiciel, Ajouter une donnée
-    
+
     Système: Logiciel de classification
     
     Cas d'utilisation: Ajouter une donnée
@@ -116,17 +118,25 @@ ___
         1) L'utilisateur actionne le bouton "classifier les données".
         2) Le système classifie les points de façon aléatoire et modifie leurs couleurs en fonction de la classe choisis.
 
-*Inclure les fiches descriptives pour ces fonctionnalités:*
 
-- *Charger l'ensemble de données*
-- *Ajouter une donnée*
-- *Classifier la donnée non classifiée*
 
 ### Prototypes pour l'interface
 
-[Prototype figma](https://www.figma.com/design/J7CNIyIPHg0QBvoMKEAZ2L/Untitled?node-id=0-1&t=rzTi4oB0jeOOZTxv-1)
+Vous pouvez retrouver le [Prototype figma](https://www.figma.com/design/J7CNIyIPHg0QBvoMKEAZ2L/Untitled?node-id=0-1&t=rzTi4oB0jeOOZTxv-1) afin de tester une démonstration de la maquette de l'application.
+
+#### Interface principale
+
+La première page de l’interface se compose des éléments suivants :
+
+- **Nuage de points** : Pour l'instant vide, permettra d'afficher le nuage de points..
+
+- **Icône d'engrenage** :Située en haut à droite de la zone d’affichage permet d'accéder à un menu de paramètres pour configurer l'affichage.
 
-<img src="./ressources/MaquetteFigma.png" width="60%" height="60%" alt="Maquette Figma">
+- **Bouton charger des données** : Ce bouton ouvre une fenêtre qui permet à l’utilisateur d'importer un fichier contenant les données avec lesquelles il souhaite travailler.
+- **Bouton ajouter une donnée** : Cette option permet à l’utilisateur d’ajouter une donnée au nuage de point.
+- **Bouton classifier les données** : Ce bouton permet la classification des données non classifiées grâce a un algorithme (Pour le jalon 1, cette classification est aléatoire).
+
+---
 
 #### Interface principale
 
@@ -144,30 +154,27 @@ La première page de l’interface se compose des éléments suivants :
 
 <img src="./ressources/ChargerDonnées.png" width="60%" height="60%" alt="Charger les données">
 
-*Inclure des prototypes de l'interface utilisateur pour ces fonctionnalités:*
 
 #### Fenêtre de chargement de fichier
 
-  - **Nom fichier** : une zone texte où s’affichera le nom du fichier sélectionné après avoir utilisé le bouton "PARCOURIR".
-  - **Bouton "PARCOURIR"** : Ce bouton permet à l’utilisateur d'ouvrir une fenêtre de navigation dans ses fichiers locaux afin de sélectionner le fichier de données à importer dans l’application.
-  - **Bouton "Valider"** : Une fois le fichier sélectionné, ce bouton permet de confirmer le choix et de lancer le chargement du fichier dans le graphe.
+- **Bouton "PARCOURIR"** : Ce bouton permet à l’utilisateur d'ouvrir une fenêtre de navigation dans ses fichiers locaux afin de sélectionner le fichier de données à importer dans l’application.
+- **Nom fichier** : une zone texte où s’affichera le chemin vers le fichier sélectionné après avoir utilisé le bouton "PARCOURIR".
+- **Bouton "Valider"** : Une fois le fichier sélectionné, ce bouton permet de confirmer le choix et de lancer le chargement du fichier dans le nuage de points.
 
 ---
 
-- *Ajouter une donnée*
 
 <img src="./ressources/AjouterDonnées.png" width="60%" height="60%" alt="Ajouter une donnée">
 <img src="./ressources/AjoutDonnéesVisible.png" width="60%" height="60%" alt="Classifier une donnée">
 
 
-#### Formulaire d'ajout de données
+#### Ajouter une donnée
 
-Cette page présente une interface permettant à l’utilisateur d'ajouter manuellement de nouvelles données dans l’application.
+Cette page présente une interface permettant à l’utilisateur d'ajouter manuellement de nouvelles données pour lesquelles il souhaite déterminer une classification.
 
-- **Champs de saisie pour les valeurs** : Quatre champs de texte sont affichés dans une boîte.  
-- **Zone texte Valeur**: Ces champs permettent à l’utilisateur de saisir manuellement quatre valeurs différentes.
-- **Bouton "Valider"** : Après avoir rempli les champs de saisie, l’utilisateur peut cliquer sur ce bouton pour valider l'entrée. Cela ajoutera la donnée sur le graphe.
-- **Ajout d'une donnée** : On remarque qu'après avoir cliqué sur le bouton "Valider", une valeur a été ajouté sous la forme d'une étoile de couleur verte.
+- **Champs de saisie pour les valeurs** : Quatre champs de texte sont affichés permettant d'inscrire les 4 valeurs necessaires pour ajouter une donnée (Uniquement des Iris pour le jalon 1).
+- **Bouton "Valider"** : Après avoir rempli les champs de saisie, l’utilisateur peut cliquer sur ce bouton pour valider l'entrée. Cela ajoutera la donnée dans le nuage de points.
+- **Ajout d'une donnée** : On remarque qu'après avoir cliqué sur le bouton "Valider", une valeur a été ajouté sous une forme et une couleur diférenciées des autres.
 ---
 
 <img src="./ressources/AjoutDonnéesVisible.png" width="60%" height="60%" alt="Afficher les données">
@@ -175,18 +182,15 @@ Cette page présente une interface permettant à l’utilisateur d'ajouter manue
 
 #### Visualisation des données classifiées
 
-Cette page représente la visualisation graphique des données après l’étape de classification.
+Cette page représente la visualisation graphique des données après l’étape de classification (réalisé par l'action sur le bouton `classifier les données`, ainsi tous les points non classifiés le sont).
 
 
-- **Graphique** : La zone est désormais utilisée pour afficher un graphique. On y voit plusieurs points de deux couleurs différentes, représentant deux classes distinctes de données :
 - **Bouton "Classifier les données"** : En appuyant sur ce bouton, la donnée ajoutée se classifie selon ses valeurs renseignés.
-- **Points rouges** : Ces points représentent une première catégorie de données classifiées.
-- **Points bleus** : Ils représentent une deuxième catégorie de données classifiées.
-- **Étoile bleue** : Ce symbole représente la nouvelle donnée que l’utilisateur a ajoutée manuellement. L’étoile montre la position de cette donnée sur le graphique, suggérant qu'elle a été classée dans la même catégorie que les points bleus.
+
+La donnée qui avait été ajoutée par l'utilisateur garde un symbole différenciateur mais adopte la couleur de la classification qui lui a été déterminer.
 
 ---
 
-- *Modifier les attributs pour l'affichage*
 
 <img src="./ressources/ModifierAttributs.png" width="60%" height="60%" alt="Modifier les attibuts">
 
@@ -198,27 +202,19 @@ Cette page permet à l’utilisateur de modifier les attributs utilisés pour re
 - **Champ "Valeur Abscisse"** : L'utilisateur peut selectioner ici la valeur qu'il souhaite voir représentée sur l'axe des abscisses (X) du graphique.
 - **Bouton "Valider"** : Une fois les valeurs des axes définies, l’utilisateur peut cliquer sur ce bouton pour appliquer ces paramètres et afficher les données selon les nouveaux attributs choisis.
 
+Cette page permet à l’utilisateur de modifier les attributs utilisés pour représenter les données sur le graphique, en particulier les valeurs des axes X (abscisses) et Y (ordonnées).
 
----
-
-*Chaque prototype est constitué d'une suite d'écrans, ou d'une arborescence d'écrans si plusieurs chemins d'interaction sont possibles.*
+- **Champ "Valeur Ordonnée"** : L'utilisateur peut selectioner ici la valeur qu'il souhaite voir représentée sur l'axe des ordonnées (Y) du graphique.
+- **Champ "Valeur Abscisse"** : L'utilisateur peut selectioner ici la valeur qu'il souhaite voir représentée sur l'axe des abscisses (X) du graphique.
+- **Bouton "Valider"** : Une fois les valeurs des axes définies, l’utilisateur peut cliquer sur ce bouton pour appliquer ces paramètres et afficher les données selon les nouveaux attributs choisis.
 
-*Pour les deux fonctionnalités dont on demande le prototype et la fiche descriptive, vous ferez le lien entre le prototype et la fiche descriptive. Plus précisément, pour chaque étape de la fiche descriptive, vous indiquerez à quel écran elle correspond. Vous pouvez par exemple mettre une légende sous l'écran, par ex. "Écran pour l'étape 3 de la fiche descriptive du UC Ajouter une donnée."*
 
-*Les prototypes peuvent être en faible fidélité.*
+---
 
-*Les prototypes peuvent être dessinés à la main ou générés en utilisant un logiciel. Dans les deux cas, veillez à ce que les images soient lisibles et avec une bonne résolution (possibilité de zoomer pour lire le texte qui s'y trouve).*
+---
 
 ## Diagramme de classes
 
 <img src="./ressources/DiagrammeClasse.png" width="60%" height="60%" alt="Diagramme de classe">
 
-*Inclure un diagramme de classes qui permet d'**implémenter toutes les fonctionnalités**.*
-
-*Le diagramme de classes doit suivre le design pattern MVC, mais vous ne ferez pas figurer les classes de la vue. Il doit être clair quelles classes font partie du contrôleur (par exemple grâce à un nom de classe qui contient 'Controleur'); les classes restantes seront considérées faisant partie du modèle.*
-
-*L'image du diagramme doit être de résolution suffisante permettant de zoomer et lire le texte qui y figure.*
-
-
-
-
+Nous avons fais le choix d'implémenter la classe `ClassificationModel`comme un singleton afin d'éviter que plusieurs model se retrouve au sein de la même application et créé des incohérences.
\ No newline at end of file
diff --git a/Analyse/ressources/DiagrammeClasse.png b/Analyse/ressources/DiagrammeClasse.png
index a63c99a39129ea64d78a5256feebc2d8717066dd..90cb12516286e6b8170c39482d9c22dbe69e5ae7 100644
Binary files a/Analyse/ressources/DiagrammeClasse.png and b/Analyse/ressources/DiagrammeClasse.png differ
diff --git a/pom.xml b/pom.xml
index c97d20635bf94ff888cd24a78b3c8fee1d9cde59..fcff1e2da45ce1213d95d7b937472878250c88bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
                 <artifactId>javafx-maven-plugin</artifactId>
                 <version>0.0.4</version>
                 <configuration>
-                    <mainClass>fr.univlille.sae.classification.view.MainStage</mainClass>
+                    <mainClass>fr.univlille.sae.classification.Main</mainClass>
                 </configuration>
             </plugin>
         </plugins>
@@ -67,5 +67,10 @@
             <artifactId>javafx-fxml</artifactId>
             <version>11.0.1</version>
         </dependency>
+        <dependency>
+            <groupId>com.opencsv</groupId>
+            <artifactId>opencsv</artifactId>
+            <version>5.9</version>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/res/stages/add-data-stage.fxml b/res/stages/add-data-stage.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..99a1ad43789b592a394e8cc198cf0ec282d0360b
--- /dev/null
+++ b/res/stages/add-data-stage.fxml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.*?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.stage.*?>
+
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.AddDataController">
+    <scene>
+        <Scene>
+            <AnchorPane prefHeight="200" prefWidth="200">
+            <children>
+               <VBox alignment="CENTER" prefHeight="224.0" prefWidth="384.0" spacing="20.0">
+                  <children>
+                     <HBox alignment="CENTER" prefHeight="18.0" prefWidth="335.0" spacing="20.0">
+                        <children>
+                           <Label text="Valeur 1" />
+                           <TextField />
+                        </children>
+                     </HBox>
+                     <HBox alignment="CENTER" layoutX="10.0" layoutY="47.0" prefHeight="17.0" prefWidth="335.0" spacing="20.0">
+                        <children>
+                           <Label text="Valeur 2" />
+                           <ChoiceBox prefHeight="26.0" prefWidth="163.0" />
+                        </children>
+                     </HBox>
+                     <HBox alignment="CENTER" layoutX="10.0" layoutY="109.0" prefHeight="17.0" prefWidth="335.0" spacing="20.0">
+                        <children>
+                           <Label text="Valeur 3" />
+                           <Spinner />
+                        </children>
+                     </HBox>
+                     <Button fx:id="confirmAdd" mnemonicParsing="false" text="Valider" />
+                  </children></VBox>
+            </children></AnchorPane>
+        </Scene>
+    </scene>
+</Stage>
diff --git a/res/stages/axes-settings-stage.fxml b/res/stages/axes-settings-stage.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..8fb6b84d1748b83d03cb6f3cce523ab8ab62d8c8
--- /dev/null
+++ b/res/stages/axes-settings-stage.fxml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.*?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.stage.*?>
+
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.AxesSettingsController">
+    <scene>
+        <Scene>
+            <AnchorPane prefHeight="200" prefWidth="200">
+            <children>
+               <VBox alignment="CENTER" prefHeight="200.0" prefWidth="406.0" spacing="15.0">
+                  <children>
+                     <HBox alignment="CENTER" prefHeight="46.0" prefWidth="406.0" spacing="20.0">
+                        <children>
+                           <Label text="Valeur des ordonnées" />
+                           <ChoiceBox fx:id="selectOrd" prefWidth="150.0" />
+                        </children>
+                     </HBox>
+                     <HBox alignment="CENTER" prefHeight="44.0" prefWidth="406.0" spacing="20.0">
+                        <children>
+                           <Label text="Valeur des abscisses" />
+                           <ChoiceBox fx:id="selectAbs" prefWidth="150.0" />
+                        </children>
+                     </HBox>
+                     <Button fx:id="confirmAxes" mnemonicParsing="false" text="Valider" />
+                  </children>
+               </VBox>
+            </children></AnchorPane>
+        </Scene>
+    </scene>
+</Stage>
diff --git a/res/stages/display-settings-stage.fxml b/res/stages/display-settings-stage.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..acc017fdecae5194a5efd858edf264166d7723df
--- /dev/null
+++ b/res/stages/display-settings-stage.fxml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.*?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.stage.*?>
+
+<Stage  fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DisplaySettingsController">
+    <scene>
+        <Scene>
+            <AnchorPane prefHeight="200" prefWidth="200">
+            <children>
+               <VBox alignment="CENTER" layoutY="1.0" prefHeight="292.0" prefWidth="438.0" spacing="30.0">
+                  <children>
+                     <HBox alignment="CENTER" prefHeight="58.0" prefWidth="294.0" spacing="20.0">
+                        <children>
+                           <Label text="Nouvel ajout" />
+                           <ColorPicker fx:id="addColor" editable="true" />
+                        </children></HBox>
+                     <Button fx:id="confirmSettings" mnemonicParsing="false" text="Valider" />
+                  </children></VBox>
+            </children></AnchorPane>
+        </Scene>
+    </scene>
+</Stage>
diff --git a/res/stages/load-data-stage.fxml b/res/stages/load-data-stage.fxml
index ba97c3cdf5fea292eb84c0fa814cf5542c102a64..111def3aa7063f4b038f0423d602d23b11b0b0a4 100644
--- a/res/stages/load-data-stage.fxml
+++ b/res/stages/load-data-stage.fxml
@@ -1,14 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<?import javafx.scene.Scene?>
-<?import javafx.scene.control.Button?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.layout.AnchorPane?>
-<?import javafx.scene.layout.HBox?>
-<?import javafx.scene.layout.VBox?>
-<?import javafx.stage.Stage?>
+<?import javafx.scene.*?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.stage.*?>
 
-<Stage fx:id="stage" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.LoadDataController">
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.LoadDataController">
     <scene>
         <Scene>
             <AnchorPane prefHeight="143.0" prefWidth="363.0">
@@ -17,13 +14,13 @@
                   <children>
                      <HBox alignment="CENTER" prefHeight="91.0" prefWidth="272.0">
                         <children>
-                           <Label fx:id="filenamelab" prefHeight="83.0" prefWidth="157.0" text="file name" />
-                           <Button mnemonicParsing="false" onAction="#openFileChooser" text="Parcourir" />
+                           <Button fx:id="browseFile" mnemonicParsing="false" onAction="#openFileChooser" text="Parcourir" />
+                           <TextField fx:id="filePath" prefHeight="26.0" prefWidth="207.0" />
                         </children>
                      </HBox>
                      <HBox alignment="CENTER" prefHeight="76.0" prefWidth="310.0">
                         <children>
-                           <Button mnemonicParsing="false" onAction="#validate" text="Valider" />
+                           <Button fx:id="confirmDataSelection" mnemonicParsing="false" onAction="#validate" text="Valider" />
                         </children>
                      </HBox>
                   </children>
diff --git a/res/stages/main-stage.fxml b/res/stages/main-stage.fxml
index e099e011a8ce7681c128ba314ec001f8d8aaeaeb..89ef33782292135bf05d3465c298c5a4b7d52903 100644
--- a/res/stages/main-stage.fxml
+++ b/res/stages/main-stage.fxml
@@ -1,47 +1,37 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<?import javafx.scene.Scene?>
-<?import javafx.scene.chart.CategoryAxis?>
-<?import javafx.scene.chart.NumberAxis?>
-<?import javafx.scene.chart.ScatterChart?>
-<?import javafx.scene.control.Button?>
-<?import javafx.scene.layout.AnchorPane?>
-<?import javafx.scene.layout.HBox?>
-<?import javafx.scene.layout.Region?>
-<?import javafx.scene.layout.VBox?>
-<?import javafx.stage.Stage?>
+<?import javafx.scene.*?>
+<?import javafx.scene.chart.*?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.stage.*?>
 
-<Stage fx:id="stage" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.MainStageController">
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.MainStageController">
     <scene>
         <Scene>
             <AnchorPane prefHeight="487.0" prefWidth="692.0">
             <children>
                <VBox prefHeight="488.0" prefWidth="691.0">
                   <children>
-                     <HBox prefHeight="305.0" prefWidth="691.0">
+                     <HBox prefHeight="356.0" prefWidth="691.0">
                         <children>
-                           <Region prefHeight="200.0" prefWidth="200.0" />
-                           <ScatterChart prefHeight="213.0" prefWidth="557.0">
+                           <Region prefHeight="338.0" prefWidth="65.0" />
+                           <ScatterChart fx:id="scatterChart" prefHeight="342.0" prefWidth="609.0">
                              <xAxis>
-                               <CategoryAxis side="BOTTOM" />
+                               <NumberAxis fx:id="absAxe" prefHeight="21.0" prefWidth="498.0" side="BOTTOM" />
                              </xAxis>
                              <yAxis>
-                               <NumberAxis side="LEFT" />
+                               <NumberAxis fx:id="ordAxe" side="LEFT" />
                              </yAxis>
                            </ScatterChart>
-                           <Region prefHeight="200.0" prefWidth="200.0" />
+                           <Button fx:id="settings" mnemonicParsing="false" text="Réglage" />
                         </children>
                      </HBox>
-                     <Region prefHeight="77.0" prefWidth="691.0" />
-                     <HBox prefHeight="100.0" prefWidth="200.0">
+                     <HBox alignment="CENTER" prefHeight="169.0" prefWidth="691.0" spacing="50.0">
                         <children>
-                           <Region prefHeight="101.0" prefWidth="131.0" />
-                           <Button mnemonicParsing="false" onAction="#openLoadData" prefHeight="27.0" prefWidth="122.0" text="Charger" />
-                           <Region prefHeight="101.0" prefWidth="75.0" />
-                           <Button mnemonicParsing="false" prefHeight="25.0" prefWidth="129.0" text="Classifier" />
-                           <Region prefHeight="101.0" prefWidth="70.0" />
-                           <Button mnemonicParsing="false" prefHeight="26.0" prefWidth="133.0" text="Reglages" />
-                           <Region prefHeight="101.0" prefWidth="111.0" />
+                           <Button fx:id="loadData" mnemonicParsing="false" onAction="#openLoadData" prefHeight="27.0" prefWidth="185.0" text="Charger un jeu de données" />
+                           <Button fx:id="addData" mnemonicParsing="false" prefHeight="26.0" prefWidth="141.0" text="Ajouter une donnée" />
+                           <Button fx:id="classifyData" disable="true" mnemonicParsing="false" prefHeight="26.0" prefWidth="157.0" text="Classifier une donnée" />
                         </children>
                      </HBox>
                   </children>
diff --git a/src/main/java/fr/univlille/sae/classification/Main.java b/src/main/java/fr/univlille/sae/classification/Main.java
index 77fa80b1a00b346d7ece5f116224b02c1127dd38..b6aaee11d0fa8f5860267a74ca592a570c9144b1 100644
--- a/src/main/java/fr/univlille/sae/classification/Main.java
+++ b/src/main/java/fr/univlille/sae/classification/Main.java
@@ -3,18 +3,15 @@ package fr.univlille.sae.classification;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.view.MainStageView;
 import javafx.application.Application;
-import javafx.fxml.FXMLLoader;
 import javafx.stage.Stage;
 
-import java.io.File;
 import java.io.IOException;
-import java.net.URL;
 
 public class Main extends Application {
 
 
     public void start(Stage stage) throws IOException {
-            ClassificationModel model = new ClassificationModel();
+            ClassificationModel model = ClassificationModel.getClassificationModel();
             MainStageView view = new MainStageView(model);
 
             view.show();
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
new file mode 100644
index 0000000000000000000000000000000000000000..d0251194dec93f29e2a89a9bc93696542324af41
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
@@ -0,0 +1,15 @@
+package fr.univlille.sae.classification.controller;
+
+import javafx.fxml.FXML;
+import javafx.scene.control.Button;
+import javafx.stage.Stage;
+
+public class AddDataController {
+    @FXML
+    Stage stage;
+
+    @FXML
+    Button confirmAdd;
+
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
new file mode 100644
index 0000000000000000000000000000000000000000..0679ea9492f13d56af8c055656812f6c766632ab
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
@@ -0,0 +1,16 @@
+package fr.univlille.sae.classification.controller;
+
+import javafx.fxml.FXML;
+import javafx.scene.control.Button;
+import javafx.scene.control.ChoiceBox;
+
+public class AxesSettingsController {
+    @FXML
+    ChoiceBox selectOrd;
+
+    @FXML
+    ChoiceBox selectAbs;
+
+    @FXML
+    Button confirmAxes;
+}
diff --git a/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java
new file mode 100644
index 0000000000000000000000000000000000000000..203a5ae46369368f57485f3db4a120b7c69517cd
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java
@@ -0,0 +1,19 @@
+package fr.univlille.sae.classification.controller;
+
+import javafx.fxml.FXML;
+import javafx.scene.control.Button;
+import javafx.scene.control.ColorPicker;
+import javafx.stage.Stage;
+
+public class DisplaySettingsController {
+    @FXML
+    Stage stage;
+
+    @FXML
+    Button confirmSettings;
+
+    @FXML
+    ColorPicker addColor;
+
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
index 190805880f62a128fdf49dde3a69deda50b35564..965120d3f60d7961f4d6bd46cb23c3940e8d3915 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
@@ -1,11 +1,15 @@
 package fr.univlille.sae.classification.controller;
 
+import fr.univlille.sae.classification.model.ClassificationModel;
 import javafx.fxml.FXML;
+import javafx.scene.control.Button;
 import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
 import javafx.stage.FileChooser;
 import javafx.stage.Stage;
 
 import java.io.File;
+import java.io.IOException;
 
 public class LoadDataController {
 
@@ -14,7 +18,13 @@ public class LoadDataController {
     Stage stage;
 
     @FXML
-    Label filenamelab;
+    Button browseFile;
+
+    @FXML
+    Button confirmDataSelection;
+
+    @FXML
+    TextField filePath;
 
     File file;
 
@@ -34,19 +44,21 @@ public class LoadDataController {
          this.file = fileChooser.showOpenDialog(stage);
 
         if(file != null) {
-            filenamelab.setText(file.getName());
+            filePath.setText(file.getPath());
         }
 
+
+
     }
 
-    public void validate() {
+    public void validate() throws IOException {
 
         if (file == null) {
             stage.close();
             //throw exception
         }
-
-        loadData();
+        ClassificationModel.getClassificationModel().loadData(file);
+        stage.close();
     }
 
 
diff --git a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
index 636343a65bd217bbaad2497b3688ad8aee68b5de..1088c4e59fb1f0e005cc636bcff1cf5e0509e738 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
@@ -1,11 +1,12 @@
 package fr.univlille.sae.classification.controller;
 
+import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.view.LoadDataView;
 import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
-import javafx.scene.Scene;
-import javafx.scene.layout.VBox;
-import javafx.stage.Modality;
-import javafx.stage.Stage;
+import javafx.scene.chart.*;
+import javafx.scene.control.Button;
+import javafx.stage.*;
 
 import java.io.File;
 import java.io.IOException;
@@ -17,6 +18,27 @@ public class MainStageController {
     @FXML
     Stage stage;
 
+    @FXML
+    NumberAxis absAxe;
+
+    @FXML
+    NumberAxis ordAxe;
+
+    @FXML
+    Button settings;
+
+    @FXML
+    Button loadData;
+
+    @FXML
+    Button addData;
+
+    @FXML
+    Button classifyData;
+
+    @FXML
+    ScatterChart scatterChart;
+
 
     Stage loadStage;
 
@@ -26,26 +48,14 @@ public class MainStageController {
      */
     public void openLoadData() throws IOException {
 
+        LoadDataView loadDataView = new LoadDataView(ClassificationModel.getClassificationModel(), stage);
+        loadDataView.show();
 
 
-        FXMLLoader loader = new FXMLLoader();
-        URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "load-data-stage.fxml").toURI().toURL();
-
-        if (fxmlFileUrl == null) {
-            System.out.println("Impossible de charger le fichier fxml");
-            System.exit(-1);
-        }
-        loader.setLocation(fxmlFileUrl);
-        loadStage = loader.load();
-
-        loadStage.setResizable(false);
-        loadStage.initOwner(stage);
-        loadStage.initModality(Modality.APPLICATION_MODAL);
-        loadStage.setTitle("Chargement des donées");
-
-        loadStage.showAndWait();
+    }
 
 
+    public ScatterChart getScatterChart() {
+        return this.scatterChart;
     }
-
 }
diff --git a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
index 1bfdec5b51e9508249a2673a916238a80bf7a764..b878ee7cd2d8b6b442f05744f5f5c20e33618953 100644
--- a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
+++ b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
@@ -1,12 +1,15 @@
 package fr.univlille.sae.classification.model;
 
+import com.opencsv.bean.CsvToBeanBuilder;
 import fr.univlille.sae.classification.utils.Observable;
 
+import javax.xml.crypto.Data;
 import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.*;
+
 
 public class ClassificationModel extends Observable {
 
@@ -14,18 +17,42 @@ public class ClassificationModel extends Observable {
     private List<LoadableData> datas;
     private List<LoadableData> dataToClass;
 
-    public ClassificationModel() {
-        this.datas = new ArrayList<>();
+    private DataType type;
 
-    }
+
+    private static ClassificationModel model;
 
     /**
-     * TODO
-     * @param x
-     * @param y
+     * Renvoie une instance unique du model. Par default le type de ce modele est Iris.
+     * Modifier en .setType(DataType).
+     * @return l'instance du model
      */
-    private void ajouterDonnee(double x, double y) {
+    public static ClassificationModel getClassificationModel() {
+        if(model == null) model = new ClassificationModel();
+        return model;
+    }
+
 
+    private ClassificationModel() {
+        this(DataType.IRIS);
+    }
+
+    private ClassificationModel(DataType type) {
+        this.datas = new ArrayList<>();
+        this.dataToClass = new ArrayList<>();
+        this.type = type;
+    }
+
+
+    /**
+     * Ajoute un point au nuage de points avec toutes les données de ce point
+     * @param coords toutes les données du points
+     * @throws IllegalArgumentException Exception levée si le nombre de parametres est insuffisant pour creer un point du type du model
+     */
+    public void ajouterDonnee(double... coords) {
+        LoadableData newData = PointFactory.createPoint(type, coords);
+        this.dataToClass.add(newData);
+        notifyObservers(newData);
     }
 
 
@@ -33,21 +60,50 @@ public class ClassificationModel extends Observable {
      * TODO
      * @param file
      */
-    private void loadData(File file) {
-
+    public void loadData(File file) throws IOException {
+        this.datas = new CsvToBeanBuilder<LoadableData>(Files.newBufferedReader(file.toPath()))
+                .withSeparator(',')
+                .withType(Iris.class)
+                .build().parse();
+
+        Set<String> types = new HashSet<>();
+        for (LoadableData d : datas) {
+            types.add(d.getClassification());
+        }
+
+        LoadableData.setClassificationTypes(types);
+        notifyObservers();
     }
 
     /**
      * TODO
      * @param data
      */
-    private void classifierDonnee(LoadableData data) {
+    public void classifierDonnee(LoadableData data) {
 
         List<String> classes = new ArrayList<>(data.getClassificationTypes());
         Random rdm = new Random();
         data.setClassification(classes.get(rdm.nextInt(classes.size())));
+        notifyObservers(data);
+
+    }
+
 
+    public void setType(DataType type) {
+        this.type = type;
     }
 
 
+    public List<LoadableData> getDatas() {
+        return datas;
+    }
+
+    public List<LoadableData> getDataToClass() {
+        return dataToClass;
+    }
+
+
+    public DataType getType() {
+        return type;
+    }
 }
diff --git a/src/main/java/fr/univlille/sae/classification/model/DataType.java b/src/main/java/fr/univlille/sae/classification/model/DataType.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f775b4376c7d7cb985b3c721ca3cde17483c55a
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/model/DataType.java
@@ -0,0 +1,7 @@
+package fr.univlille.sae.classification.model;
+
+public enum DataType {
+
+    IRIS;
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/model/Iris.java b/src/main/java/fr/univlille/sae/classification/model/Iris.java
index b30835b3751bee9f6034c71b0a458ccf2c1daabf..629f3b67653ce742a3e9647cd784c4f04c4f04b3 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Iris.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java
@@ -1,22 +1,27 @@
 package fr.univlille.sae.classification.model;
 
 import java.util.Set;
+import com.opencsv.bean.*;
 
 public class Iris extends LoadableData{
 
-
+    @CsvBindByName(column = "sepal.width")
     private double sepalWidth;
+    @CsvBindByName(column = "sepal.length")
     private double sepalLength;
+    @CsvBindByName(column = "petal.width")
     private double petalWidth;
+    @CsvBindByName(column = "petal.length")
     private double petalLength;
 
-
-
-
     public Iris(double sepalWidth, double sepalLength, double petalWidth, double petalLength) {
         this(sepalWidth, sepalLength, petalWidth, petalLength, "undefined");
     }
 
+    public Iris() {
+        //
+    }
+
     public Iris(double sepalWidth, double sepalLength, double petalWidth, double petalLength, String classification) {
         super();
         this.sepalWidth = sepalWidth;
@@ -25,9 +30,6 @@ public class Iris extends LoadableData{
         this.petalLength = petalLength;
     }
 
-
-
-
     public double getSepalWidth() {
         return sepalWidth;
     }
@@ -43,4 +45,14 @@ public class Iris extends LoadableData{
     public double getPetalLength() {
         return petalLength;
     }
+
+    @Override
+    public String toString() {
+        return "Iris{" +
+                "sepalWidth=" + sepalWidth +
+                ", sepalLength=" + sepalLength +
+                ", petalWidth=" + petalWidth +
+                ", petalLength=" + petalLength +
+                '}';
+    }
 }
diff --git a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
index 4de0abe4a687b74074761c54657795809bda17bb..27678aa908bde366122bbce5e0f6351eb4e2a5f5 100644
--- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
+++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
@@ -2,23 +2,28 @@ package fr.univlille.sae.classification.model;
 
 import java.util.Set;
 
-public class LoadableData {
+public abstract class LoadableData {
 
     private static Set<String> classificationTypes;
 
     private String classification;
 
 
-    public LoadableData() {
+    protected LoadableData() {
 
     }
     public String getClassification() {
         return this.classification;
     }
-    Set<String> getClassificationTypes() {
+    public static Set<String> getClassificationTypes() {
         return classificationTypes;
     }
-    void setClassification(String classification) {
+
+    public static void setClassificationTypes(Set<String> classificationTypes) {
+        LoadableData.classificationTypes = classificationTypes;
+    }
+
+    public void setClassification(String classification) {
         this.classification = classification;
     }
 
diff --git a/src/main/java/fr/univlille/sae/classification/model/PointFactory.java b/src/main/java/fr/univlille/sae/classification/model/PointFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ee05ec8bb8c6581e49a7b615910af5bb2aa01e1
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/model/PointFactory.java
@@ -0,0 +1,21 @@
+package fr.univlille.sae.classification.model;
+
+public class PointFactory {
+
+
+    public static LoadableData createPoint(DataType type, double[] coords)  {
+
+        int size = coords.length;
+        LoadableData data;
+        switch (type) {
+            case IRIS:
+                if(size != 4) throw new IllegalArgumentException();
+                data = new Iris(coords[0],coords[1],coords[2],coords[3]);
+                break;
+            default:
+                throw new IllegalArgumentException();
+        }
+
+        return data;
+    }
+}
diff --git a/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java b/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java
index 226180703f21200d9c94673ba00bfc56e4184bb5..156ab380cbae143783efecbfa18969dc384dccd6 100644
--- a/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java
@@ -1,6 +1,45 @@
 package fr.univlille.sae.classification.view;
 
+import fr.univlille.sae.classification.model.ClassificationModel;
+import javafx.fxml.FXMLLoader;
+import javafx.stage.Modality;
+import javafx.stage.Stage;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
 public class LoadDataView {
 
+    private ClassificationModel model;
+    private Stage owner;
+
+    public LoadDataView(ClassificationModel model, Stage owner) {
+        this.model = model;
+        this.owner = owner;
+    }
+
+
+
+    public void show() throws IOException {
+
+        FXMLLoader loader = new FXMLLoader();
+        URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "load-data-stage.fxml").toURI().toURL();
+
+        if (fxmlFileUrl == null) {
+            System.out.println("Impossible de charger le fichier fxml");
+            System.exit(-1);
+        }
+        loader.setLocation(fxmlFileUrl);
+        Stage root = loader.load();
+
+        root.setResizable(false);
+        root.initOwner(owner);
+        root.initModality(Modality.APPLICATION_MODAL);
+        root.setTitle("Chargement des donées");
+
+        root.showAndWait();
+
+    }
 
 }
diff --git a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
index 159c4639e73dff13d5a2db8af434c181697a836b..7d3163b7987b6c46bee2ace35d683b6d1de5bbd6 100644
--- a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
@@ -1,10 +1,18 @@
 package fr.univlille.sae.classification.view;
 
+import fr.univlille.sae.classification.controller.LoadDataController;
+import fr.univlille.sae.classification.controller.MainStageController;
 import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.model.DataType;
+import fr.univlille.sae.classification.model.Iris;
+import fr.univlille.sae.classification.model.LoadableData;
 import fr.univlille.sae.classification.utils.Observable;
 import fr.univlille.sae.classification.utils.Observer;
 import javafx.application.Application;
+import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
+import javafx.scene.chart.ScatterChart;
+import javafx.scene.chart.XYChart;
 import javafx.stage.Stage;
 
 import java.io.File;
@@ -14,8 +22,12 @@ import java.net.URL;
 public class MainStageView implements Observer {
 
 
+
+
     private ClassificationModel model;
 
+    private ScatterChart scatterChart;
+
     public MainStageView(ClassificationModel model) {
         this.model = model;
         model.attach(this);
@@ -36,11 +48,28 @@ public class MainStageView implements Observer {
         root.setResizable(false);
         root.setTitle("SAE3.3 - Logiciel de classification");
         root.show();
+        loader.getController();
+        MainStageController controller = loader.getController();
+        scatterChart = controller.getScatterChart();
+
     }
 
 
     @Override
     public void update(Observable observable) {
+        if(scatterChart == null) throw new IllegalStateException();
+        if(!(observable instanceof ClassificationModel)) throw new IllegalStateException();
+        XYChart.Series series1 = new XYChart.Series();
+        series1.setName("Dice Launch");
+        scatterChart.getData().add(series1);
+        for(LoadableData i : model.getDatas()) {
+            if(model.getType() == DataType.IRIS) {
+                series1.getData().add(new XYChart.Data<>(((Iris)i).getPetalLength(),
+                        ((Iris)i).getPetalWidth()));
+
+            }
+        }
+
 
     }