gestion des vols d'une cie aérienne (lab #5) - Département d ...

Barème: corrigé sur 35 points. Conseil amical: N'attendez pas la semaine
précédant la remise avant de commencer... vous n'aurez pas le temps!

Part of the document


IFT 1170
|Énoncé du T.P. #2 |Session hiver 2009 | |Antonio Tavares

Préparation: chez-vous, à partir de la semaine du 11 février 2009
Réalisation: durant vos démonstrations, les périodes de Pratique Libre
(P.L.) à partir de la semaine du 11 février.
Dépannage: par vos démonstrateurs (lors des démonstrations), les
surveillants des périodes de Pratique Libre,
les surveillants des périodes de consultation
théorique (horaire disponible et mise à jour au site Web de
la DESI : http://www.desi.umontreal.ca/ ).

Date de remise: Au plus tard le, dimanche 8 mars 2009, avant la fermeture
des laboratoires.
Pénalité de retard: Chaque jour de retard entraînera une pénalité de 5
points (sur 35 points) par jour.
Note: Le travail en équipe de deux (au maximum) est permis. Vous ne
remettez alors qu'un travail par équipe.
Barème: corrigé sur 35 points.

Conseil amical: N'attendez pas la semaine précédant la remise avant de
commencer... vous n'aurez pas le temps!


Matière exercée: Éléments de base vus en Java et la POO à un niveau simple.

Modalités de remise (seront expliquées lors des séances de démonstration
durant la semaine du 11 février 2009)

Assurez-vous d'avoir écrit vos coordonnées (nom et nom d'usager) ainsi que
ceux de votre coéquipier (s'il y a lieu) en commentaires au début de chaque
programme. Les équipes de 2 personnes ne doivent remettre qu'une seule
copie du T.P.
Les équipes de 3 étudiants et plus sont interdites.

Le travail doit être remis en version papier ET en version électronique.

Pénalité si vous ne faites pas de remise électronique : - 35 points
Pénalité si vous oubliez d'indiquez votre nom, ou celui de votre coéquipier
- 5 points

Remise sur papier:
Remplissez une feuille de remise de T.P. (disponible sur la page Web du
cours à partir du site http://www.iro.umontreal.ca/~dift1170 en cliquant
sur le lien Page de garde pour la remise des TPs).
Imprimez vos programmes ainsi que les résultats affichés à l'écran (vous
pouvez mettre les résultats en commentaires à la fin de votre programme).
Brochez le tout et déposez-le dans une boîte de remise de T.P. (au fond du
labo. S-118 ainsi que entre le X-115 et le X-117 :
Pavillon Principal OU en face du local 2197 : Pavillon André-
Aisenstadt,).

Remise électronique:
Remettez vos fichiers sources pour vos programmes. La procédure sera
expliquée à la démonstration de la semaine du 11 février.

Les travaux en retard (avec pénalité) peuvent aussi être déposés dans une
boîte de remise.

PARTIE I (10%)


Création de plusieurs classes, création et manipulation d'objets.
Communication entre les objets de différentes classes.

1. Créez une classe Vin avec les caractéristiques suivantes :

Attributs:
. Chaque vin possède son nom, son type (1 pour rouge, 2 pour blanc ou 3
pour rosé), son origine (une chaîne de caractères) et son prix
(double)
. Définissez des constantes de classe pour les différents types de vin
. Le nombre total de vins et le total des prix des vins
Méthodes:
. Le constructeur permettant de créer un vin à partir des 4 attributs et
celui créant un vin rouge par défaut (il ne reçoit que les 3 autres
attributs).
. Les méthodes get ou accesseurs de tous les attributs.
. Les méthodes set ou mutateurs de tous les attributs d'instance de la
classe.
. La méthode toString qui retourne une chaîne donnant toutes les
caractéristiques du vin. Cette méthode utilise une méthode privée pour
obtenir le type du vin sous la forme d'une chaîne de caractères.
2. Pour tester votre classe, créez une seconde classe TestVin qui sera
le point d'entrée du programme (main) :

Cette classe devra :
. Créer les trois vins et les afficher
. Ajouter 2$ au prix du premier vin
. Modifier le prix et l'origine du deuxième vin
. Modifier le nom et le type du troisième vin
. Donner au troisième vin la même origine que le premier
. Créer un quatrième vin
. Afficher tous les vins

N'oubliez pas d'utiliser les constantes pour les types de vin et les
méthodes de classe pour le nombre de vins et le total des prix des vins.

En Visio, faites le diagramme des classes Vin et TestVin, n'oubliant pas la
relation entre ces deux classes. Le diagramme de la classe Vin doit montrer
tous les attributs (et constantes) et les méthodes (et constructeurs).
PARTIE 2 (25%)

Objectifs

Composition d'objets
Insertion d'un objet dans un tableau d'objets
Retrait d'un objet dans un tableau d'objets
Utilisation de méthodes privées
Utilisation de JOptionPane.showInputDialog et de
JOptionPane.showMessageDialog
Recherche binaire.
Fichiers texte.

Sujet

On vous engage afin de réaliser un projet de gestion des vols d'une
compagnie aérienne. Votre projet sera utilisé par différentes compagnies
aériennes. Chaque compagnie dispose d'un fichier (des vols déjà existants)
dont le nom est celui du nom de la compagnie suivi de l'extension .txt
Chaque enregistrement des fichiers contient :
- Le numéro du vol (5 chiffres)
- La destination du vol (20 caractères)
- La date de départ du vol (sous la forme jj mm aaaa)
- Le nombre total des réservations à date

Les enregistrements sont par ordre croissant du numéro du vol. On ne
connait pas le nombre d'enregistrements qu'il y a dans les fichiers.

Dans votre projet, la classe qui contiendra le « main » devra faire
afficher un menu : par exemple, pour la compagnie « Cie Air Relax » nous
aurons le menu suivant, à l'aide de JOptionPane.showInputDialog

[pic]




N'oubliez pas de produire un message d'erreur si le choix n'est pas entre 0
et 5


Travail à faire

Votre projet va comporter 4 classes soient :

1. La classe Date ayant les attributs entiers jour, mois, an, le
constructeur par défaut et celui avec 3 paramètres, les méthodes « get »
et la méthode toString qui retourne la chaîne contenant les attributs
séparés par "/" et en plus les attributs jour et mois dans le format
décimal "00"

2. La classe Vol dont les caractéristiques sont :

- attributs d'instances: numéro du vol, sa destination, la date de
départ (objet de la classe Date),
et le nombre total de réservations à date

- le constructeur permettant d'initialiser les 4 attributs d'instances
avec les valeurs reçues en
paramètres

- les méthodes « set » pour seulement le total des réservations et
la date de départ

- les méthodes « get » pour tous les attributs


- la méthode toString( ) qui retourne une chaîne contenant les
attributs séparés par des "\t"


3. La classe Compagnie dont les caractéristiques sont :

- la constante de classe publique MAX_PLACES = 340 (le nombre de places
que contient un avion)

- attributs d'instances : - le nom de la compagnie,
- le nombre maximum de vols
que peut avoir la compagnie,
- un tableau d'objets de la
classe Vol (on ne fait que déclarer
la référence au
tableau)
- le nombre de vols
actifs (un compteur)

- le constructeur à 2 paramètres qui permet d'initialiser le nom de la
compagnie et le nombre maximum de vols avec les valeurs reçues en
paramètres. De plus, le constructeur va réserver l'espace mémoire
maximum pour le tableau et ensuite faire l'ouverture et la lecture du
fichier CieAirRelax.txt de façon à remplir le tableau d'objets Vol et
de compter les vols. Ensuite, il ferme le fichier.

- la méthode d'instance insererVol doit s'assurer qu'il reste de la
place dans le tableau des vols, sinon prévoir un message d'erreur
adéquat avec JOptionPane.showMessageDialog. S'il reste de la place,
elle permet de saisir le numéro du nouveau vol à l'aide de
JOptionPane.showInputDialog sous la forme :

[pic]

elle fera appel à la recherche binaire (une méthode privée de la classe
Compagnie), car pour pouvoir ajouter un nouveau vol, le numéro du vol
ne doit pas déjà exister (prévoir un message d'erreur approprié si ce
n'est pas le cas ). Si le numéro est accepté, saisir alors la
destination (assurez-vous d'ajouter des espaces pour obtenir une
longueur de 20 caractères), la date de départ (2 fenêtres
JOptionPane.showInputDialog), mettre à 0 le total des réservations et
insérer le vol au bon endroit dans le tableau qui doit toujours rester
ordonné par ordre croissant des numéros de vol [faire appel à la
méthode privée insere(. . . .. ) de la classe Compagnie]
- la méthode d'instance retirerVol permet de saisir le numéro du vol à
l'aide JOptionPane.showInputDialog sous la forme :




Elle fera appel à la recherche binaire car pour pouvoir retirer un vol,
le numéro du vol doit être existant (prévoir un message d'erreur
approprié si ce n'est pas le cas). Si le numéro existe, à l'aide d'une
seule fenêtre JOptionPane.showInputDialog, faire afficher sa
destination, sa date et le total des réservations et demander la
confirmation du retrait : « Désirez-vous vraiment retirer ce vol
(O/N)? » Si oui, retirer le vol du tableau en l'écrasant et ne pas
oublier de diminuer le nombre de vols actifs.

- la méthode d'instance modifierDate permet de saisir le numéro du vol
dont on veut modifier la date, à l'aide de JOptionPane.showInputDialog
(la barre de titre contiendra le titre modification de la date de
départ). Elle fera a