TP Loto

Principe du jeu :

Le joueur coche une combinaison de 6 numéros dans une grille. Chaque grille comporte 49 numéros ( 1 à 49 ).

Un tirage est une combinaison de numéros gagnants ( 6 numéro + un numéro complémentaire ) tirés au sort. Chaque tirage permet de définir 7 rangs de gains :

En deça de ces combinaisons, une grille n'est pas gagnante.

La Française des Jeux fournit sur son site un fichier contenant tous les tirages depuis 1976. Chaque ligne contient :

- la date du tirage

- le jour de la semaine (ME pour mercredi, SA pour samedi)

- le numéro du tirage pour le jour (premier ou deuxième tirage)

- les 6 numéros ainsi que le numéro complémentaire

exemple

10/06/1976;ME;1;44;16;47;10;15;1;27

Le fichier est au format CSV et contient 3680 tirages au 12 février 2003

L'objectif du programme est d'indiquer à un utilisateur les nombres de sorties antérieures gagnantes et à quels rangs pour une grille fournie.

Cas d'utilisation.

Cas d'utilisation : fournir des statistiques sur une grille proposée.

Acteur principal : le joueur.

Niveau : utilisateur

Scénario nominal :

1. le système demande les numéros de la grille du joueur

2. le joueur fournit ses numéros

3. le système indique les nombres de combinaisons passées gagnantes pour cette grille, nombres de numéros gagnants, numéro complémentaire éventuellement présent.

Scénario alternatif.

1.1 le joueur demande au système de construire aléatoirement ses grilles.

1.1.1 Le système remplit les grilles avec des numéros aléatoire entre 1 et 49

2.1 le joueur fournit un numéro invalide

2.1.1 le système en informe l'utilisateur et propose une nouvelle saisie

Question 1.

1.1 Proposer un diagramme de classe partiel modélisant le domaine métier.

Solution

Commentaire :

Question 2. La classe Combinaison

Responsabilité des classes.

Classe Combinaison : classe générique contenant un nombre quelconque de numéros tous différents, supérieurs à 0 et inférieurs 50

Travail à faire.

2.1 Affiner le diagramme de la classe Combinaison; faites figurer attributs et méthodes.

Solution.

2.2 Ecrire la classe Combinaison et ses méthodes, la tester dans une classe de Test :

 

Cette classe sera utilisée dans la méthode main en écrivant

public static void main(String[] args){

Test.run();

}

Affiche :

Pour tester cette classe ne sera pas déclarée abstract.

Question 3. Les classes Tirage et Grille

 

Classe Tirage.

Responsabilités

Travail à faire.

3.1 Traduire ces responsabilités dans le diagramme de classes.

3.2 Ecrire la classe Tirage et ses méthodes, la tester dans une classe de Test :

affiche :

Classe Grille.

Responsabilités :

Travail à faire.

4.1 Traduire ces responsabilités dans le diagramme de classes.

solution

4.2 Ecrire la classe Grille. La tester avec le test unitaire suivant :

remarque pour générer un nombre aléatoire

int tirage =1 + (int)(java.lang.Math.random()*49);

affiche :

Gestion de la persistance.

Les données sont stockées dans un fichier. L'accès à ce fichier ne doit pas entrainer de modifications des classes métiers. Nous allons utiliser des classes particulières qui vont servir de façade entre le fichier et les classes métiers. Ceci permet de ne pas mélanger la logique métier et la logique de gestion de la persistance et de pouvoir éventuellement réutiliser les mêmes classes métiers dans un contexte de base de données par exemple.

Deux classes vont être utilisées :

Voici le diagramme de classes de ce domaine :

 

La classe LigneTirage ne fait que construire un objet Tirage à partir d'une chaîne de caractères.

La classe SelectTirages ne contient que la méthode exécute qui retourne la collection de tirages. Le constructeur s'occupe de l'accès physique au fichier.

Remarque : l'accès au fichier utilise un classe FichierIn qui permet un accès simplifié. Ce fichier compilé doit être chargé dans le répertoire du projet. Charger FichierIn.class

Voir la classe LigneTirage ; Charger la classe LigneTirage.class

Voir la classe SelectTirages ; Charger la classe SelectTirages

Travail à faire.

Charger le fichier tiragesloto.csv dans le répertoire du projet.

5.1 Tester les deux classes LigneTirage et SelectTirage avec :

.

affiche :

 

 

Question 6. Programme final.

Afin de mettre en oeuvre le programme qui réalisera le cas d'utilisation, on donne le diagramme de classes complet :

Diagramme de classes

Commentaires :

Une classe IULoto ( InterfaceUtilisateur ) prend en charge l'interface avec le le joueur, cette classe saisit et affiche les informations conformément au cas d'utilisation proposé.

Des relations de dépendance indique les relations d'utilisation.

La classe AppLoto ne contiendra que le lancement de l'interface :

Travail à faire.

6.1 Ecrire le programme complet.

On utilisera une classe Console qui permet les différentes saisies :

Classe Console à télécharger et mettre dans le répertoire du programme. (Click Droit enregister la cible sous)

Utilisation :

String rep = Console.readLine("Taper votre réponse"); // rep contiendra la chaîne saisie

char c = Console.readCar(" quelle lettre "); // c contiendra le caractère saisi

int n = Console.readInt ("nb svp"); // n contiendra l'entier saisi