Skip to content
Snippets Groups Projects
README.md 4.57 KiB
Newer Older
Fabien Delecroix's avatar
Fabien Delecroix committed
# R3.04, Qualité de Développement, Contrôle TP du 13 décembre 2023
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
*Conseil : lire en entier avant de démarrer (c'est pas bien long !)*
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
## Tirage au sort des cadeaux
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
Ho, ho, ho !
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
Il s'agit pour ce CTP de réaliser un logiciel basique pour réaliser un tirage au sort de cadeaux (Noël approche). Le principe est simple, on entre les prénoms des participants et le logiciel indique qui donne un cadeau à qui. 
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
Voici une capture vidéo du logiciel attendu :
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
<a>![](secret_santa.gif)</a>
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
Pour se simplifier la tâche, le résultat sera toujours circulaire. Cela signifie par exemple que Rodolphe donne à quelqu'un, qui donne à quelqu'un d'autre, ainsi de suite jusqu'à arriver à quelqu'un qui donne à Rodolphe.
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
On remarquera : 
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
- qu'on peut ajouter des prénoms en faisant entrée dans le champ de saisie ou en appuyant sur le bouton **+** mais que si un prénom est déjà présent, il n'est pas ajouté une seconde fois.
- que tout nouveau tirage prend en compte l'ensemble des participants ajoutés 
- qu'on peut relancer le tirage autant de fois qu'on le souhaite (sans tenir compte du résultat de précédents tirages)
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
## Attendus
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
Le résultat de votre travail devra être disponible sur un dépôt git *ctp-2023* sur le groupe déjà existant qui vous correspond sur https://gitlab.univ-lille.fr/2023-iut-info-r3.04/groupe-x/nom-prenom , en remplaçant x par la lettre de votre groupe et nom-prenom par les vôtres.  
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
<a>![](boucle_tdd.png)</a>
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
- Le **modèle** sera à faire **en TDD** (commit à chaque étape, création du test compris), sauf la partie aléatoire.
- L'**architecture** devra respecter le patron **MVC**, chaque vue sur le modèle étant un objet qui l'observe. À cette fin, on vous rappelle que vous pouvez recourir à la couche abstraite [Observable](https://gitlab.univ-lille.fr/r3.04/sujet-tp-mvc-thermostat/-/blob/master/src/main/java/fr/univlille/iut/r304/utils/Observable.java) / [Observer](https://gitlab.univ-lille.fr/r3.04/sujet-tp-mvc-thermostat/-/blob/master/src/main/java/fr/univlille/iut/r304/utils/Observer.java)
Fabien Delecroix's avatar
Fabien Delecroix committed
- L'**ensemble du code** devra être aussi *propre* que possible (**clean code**), vous pouvez recourir à des outils d'analyse statique.
- Votre **dépôt** devra être propre et structuré, n'oubliez pas de *push* !
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
## Ressources
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
Durant ce CTP, vous pouvez consultez vos autres TP, la documentation, le cours et utiliser votre IDE avec ses extensions.
Interdiction formelle de communication ou de transfert de fichiers sous peine de sanction importante.
À noter que tout départ avant la fin du temps imparti devra être signalé à l'enseignant présent.
Fabien Delecroix's avatar
Fabien Delecroix committed

Enfin, voici une classe d'exemple contenant le code javaFX qui pourra vous servir pour votre vue (on ne cherche pas ici à évaluer vos compétences en javaFX). Bien entendu, il s'agit d'adapter et refactoriser ce code comme il convient dans votre logiciel, notamment pour prendre en compte les différentes vues présentes dans l'application.
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
```java
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
public class SampleView extends Application {
    public static void main(String[] args) {
        launch(args);
    }
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
    @Override
    public void start(Stage primaryStage) {
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
        VBox left = new VBox();
        Button addBtn = new Button();
        Label title = new Label("Inscrits :");
        TextField input = new TextField();
        input.setMinSize(10, 30);
        addBtn.setText("+");
        left.getChildren().addAll(title, input, addBtn);
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
        VBox right = new VBox();
        Button btn = new Button();
        btn.setText("Nouveau tirage !");
        Label circularTitle = new Label("Affichage circulaire");
        TextArea circularContent = new TextArea();
        circularContent.appendText("Example1");
        circularContent.appendText("\n -> Example2");
        circularContent.setPrefSize(250,100);
        Label alphaTitle = new Label("Affichage alphabétique");
        TextArea alphaContent = new TextArea();
        alphaContent.setPrefSize(250,100);
        alphaContent.appendText("Example1 -> Example2");
        right.getChildren().addAll(btn, circularTitle, circularContent, alphaTitle, alphaContent);
Fabien Delecroix's avatar
Fabien Delecroix committed

Fabien Delecroix's avatar
Fabien Delecroix committed
        HBox root = new HBox(left, right);
        Scene scene = new Scene(root, 400, 400);
        primaryStage.setTitle("Tirage au sort des cadeaux");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
```