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.
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.
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.
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 :
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