Upload
anas-laghouaouta
View
592
Download
5
Embed Size (px)
Citation preview
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
Programmation Orientée Objet
Série d’exercices
Exercice 1 :
Ecrivez une classe Livre avec les attributs suivants: titre, auteur, prix, annee.
La classe Livre doit disposer des constructeurs suivants : Livre(), Livre(titre),
Livre(titre, auteur), Livre(titre, auteur, prix), Livre(titre, auteur, prix, annee),
Livre(Livre).
La classe Livre doit contenir des accesseurs et mutateurs pour les différents attributs.
La classe livre doit aussi contenir une méthode afficher() pour afficher les attributs
des livres. Une méthode compter() pour avoir le nombre des instances créées et une
méthode type() qui va prendre 1 si le prix de livre <100 et la valeur 2 si le
100<=prix< =500 et 3 si 500<prix.
Ecrivez aussi un formulaire pour tester cette classe.
Exercice 2 :
Réaliser une classe Cercle. Chaque Cercle sera caractérisé par un nom (de type chaine) , un
centre de type chaine , une abscisse (de type double) et l’ordonnée (de type double) et un
rayon On prévoira :
1. un constructeur recevant en arguments le nom , le centre et l’abscisse et l’ordonne du
centre, et le rayon.
2. une méthode affiche imprimant le nom du cercle le centre et son abscisse et ordonnée
et le rayon ,
3. Une méthode translate(dx, dy) effectuant une translation du centre qui fait changer
l'abscisse (x + dx) et l'ordonnée (y+dy).
4. Une méthode pour calculer le périmètre()
5. Une méthode pour calculer la surface()
6. Une méthode nbcercles() pour afficher le nombre des cercles ayant le rayon < 10cm
et le nombre des cercles dont le rayon>10cm
Écrire un programme utilisant cette classe pour créer un cercle, en afficher les
caractéristiques, afficher le périmètre et la surface.
le déplacer avec dx=2 et d y=4 et en afficher à nouveau les caractéristiques.
1. Créer un cercle C de nom C, de centre O (9,4) et de rayon 12.
2. Changer le rayon à 13cm et afficher le nouveau rayon.
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
Exercice 3 :
Définir une classe ville, qui va contenir une variable dont le rôle sera de stocker le nom, une
autre stockera le nombre d'habitants et la dernière se chargera du pays.
Une méthode afficher() .
Une méthode comparer (ville) : pour comparer les nombres d'habitants des deux
villes.
C1() . Le nombre des villes qui ont un nombre d’habitant < 10000
C2() Le nombre des villes qui ont un nombre d’habitant entre 10000 et 1000000
C3() Le nombre des villes qui ont un nombre d’habitant > 1000000
La méthode catégorie () : dans quelle tranche se trouve la ville en question. Selon le
nombre d'habitants, le caractère renvoyé changera.
{0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000};
{'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'} ;
Par exemple si le nombre d’habitants <= 1000 la méthode renvoie le char ‘A’.
si le nombre d’habitants =0 la méthode renvoie le char ‘?’.
Classe testville pour tester la classe ville
Changer le nombre d’habitants d’une ville V.
Affiche le pays de la Ville V
Exercice 4 :
1- Créez la classe Salarie.
Cette classe possédera 5 propriétés de visibilité publique :
matricule Matricule Integer
nom Nom String
Prénom Prénom String
salaire Salaire Double
Taux Charges Sociales TauxCS Double
Ces propriétés doivent seulement être accessibles par le biais des accesseurs en
lecture/écriture mis en œuvre par le biais de l’instruction Property.
2- Implémentez la méthode CalculerSalaireNet().
Elle doit calculer le salaire net d’un employé qui équivaut à :
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
Salaire – (salaire*TauxCS) et retournera la valeur calculée.
Et renvoyer la valeur ainsi calculée.
3- Pour tester la définition de votre classe et son bon fonctionnement :
Créez un module et une procédure principale Main.
Déclarez 2 variables de type Salarie et créez 2 instances de type Salarie.
Renseignez les propriétés de ces deux salariés. Choisissez des valeurs significatives
pour les salaires et le taux de charge sociale afin de tester correctement le calcul réalisé
par la méthode CalculerSalaireNet.
Pour des salaires respectifs de 5 000 et 10 000 dirhams un taux de charges sociales de
25 % , vous devez trouver 3 750 et 7 500.
4- Le taux de charges sociales est en fait commun à tous les salariés. Pour éviter toute
redondance de cette propriété, vous devriez donc la déclarer comme partagée au
niveau de la classe Salarie et non comme une propriété spécifique des objets
instanciés à partir de la classe.
Utilisez pour cela le mot clé Shared au niveau de la définition de la propriété TauxCS.
5- Testez de nouveau votre classe.
6- Implémentez deux nouveaux constructeurs d’initialisation :
Un qui permet de renseigner le matricule lors de l’instanciation
Un qui permet de renseigner le matricule et le nom
N’oubliez pas que le constructeur par défaut doit alors être défini explicitement.
7- Testez votre code : Instanciez deux nouveaux objets à l’aide de ces constructeurs.
8- Implémentez un constructeur de recopie pour faire un clone d’un objet de référence.
Exercice 5 :
Dans l'avion Paris-Rabat, on peut trouver les personnes suivantes :
Aymane : Pilote
Ismail : coPilote
Firdaous : Hôtesse n°1
Meriem : Hôtesse n°2
Khalid : passager siège n°1
Jamal : passager siège n°2 etc …
Chacune de ces personnes peut être représenté e sous la forme d'objet et on peut dire que
chacun de ces objets appartient à une de ces catégories : Pilote, Hôtesse ou Passager
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
On peut construire le diagramme suivant :
CHotesse
Pré nom N° de tel Adresse Age Nbre de langues Salaire Date_embauche
les constructeurs les accesseurs ParlePlus3Langues() Sub Affichage() Prime_rendement() Année_expérience()
La prime de rendement sera calculée comme suit:
Si nombre d’année d’expérience 2 < NAE <=4 alors prime=salaire
Si nombre d’année d’expérience 4 < NAE <=6 alors prime=salaire* 1,5
Si nombre d’année d’expérience 6 < NAE <=8 alors prime=salaire *2
Si nombre d’année d’expérience NAE > 8 alors prime=salaire *4
La méthode estfatigué() sera calculé comme suit :
Si le nombre de vol assuré par le pilote est supérieur à 5 heures, alors il est fatigué sinon il ne
l’est pas encore.
La méthode chanceux() sera calculé comme suit :
Si le nombre de son siège est différent de 13 alors il est chanceux.
On vous demande dans l’exercice d’essayer d’optimiser les classes, on créant éventuellement
des classes héritées à partir d’autres classes.
Il est également demandé de :
- Créer les constructeurs d’initialisation pour chaque classe créée
- Créer une variable permettant de donner un nombre à chaque passager.
(et faire en sorte que ce compteur s’incrémente automatiquement à chaque
instanciation, passager Khalid aura le numéro 1, passager Jamal le numéro 2 ….)
- Ecrire un module principal permettant de tester le bon fonctionnement des classes et
leurs méthodes respectives.
Exercice 6 : Pokemons
CPilote Prénom N° de tel Adresse Age Nbre d'heures de vol Salaire Date_embauche
les constructeurs les accesseurs EstFatigue() Sub Affichage() Prime_rendement() Année_expérience()
CPassage
Prénom N° de tel Adresse Age N° de son siège
les constructeurs les accesseurs Chanceux() Affichage()
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
Les Pokémons sont des gentils animaux qui sont passionnés par la programmation objet en
général et par le polymorphisme en particulier.
Il existe quatre grandes catégories de pokémons :
- Les pokémons sportifs : Ces pokémons sont caractérisés par un nom, un poids (en kg), un
nombre de pattes, une taille (en mètres) et une fréquence cardiaque mesurée en nombre de
pulsations à la minute. Ces pokémons se déplacent sur la terre à une certaine vitesse que l’on
peut calculer grâce à la formule suivante : vitesse = nombre de pattes * taille * 3
- Les pokémons casaniers : Ces pokémons sont caractérisés par un nom, un poids (en kg),
un nombre de pattes, une taille (en mètres) et le nombre d’heures par jour où ils regardent la
télévision. Ces pokémons se déplacent également sur la terre à une certaine vitesse que l’on
peut calculer grâce à la formule suivante : vitesse = nombre de pattes * taille * 3
- Les pokémons des mers : Ces pokémons sont caractérisés par un nom, un poids (en kg) et
un nombre de nageoires. Ces pokémons ne se déplacent que dans la mer à une vitesse que
l’on peut calculer grâce à la formule suivante : vitesse = poids / 25 * nombre de nageoires
Pour chacune de ces trois catégories de pokémons, on désire disposer d’une méthode
toString qui retourne (dans une chaîne de caractères) les caractéristiques du pokémon.
Par exemple la méthode toString() appliquée sur un pokémon sportif retournerait :
"Je suis le pokémon Pikachu mon poids est de 18 kg, ma vitesse est de 5,1 km/h j'ai 2 pattes,
ma taille est de 0,85m ma fréquence cardiaque est de 120 pulsations à la minute"
Cette même méthode appliquée sur un pokémon casanier pourrait retourner :
"Je suis le pokémon Salameche mon poids est de 12 kg, ma vitesse est de 3,9 km/h j'ai 2
pattes, ma taille est de 0,65m je regarde la télé 8h par jour"
Sur un pokémon des mers :
"Je suis le pokémon Rondoudou mon poids est de 45 kg, ma vitesse est de 3,6 km/h j'ai 2
nageoires"
Question 1. Réaliser un diagramme de classes permettant de gérer la hiérarchie des
Pokémons.
Question 2. Programmer ces classes en VB.
Question 3. Programmer un module de test.
Exercice 3 :
Soit le diagramme de classe suivant :
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
Créer la classe abstraite Personne.
Créer la classe Ouvrier, la classe Cadre et la classe Patron qui héritent de la classe Personne.
et prévoir les constructeurs (à 3 et à 0 arguments) de chacune des 3 classes, ces trois classes
sont des classes finales.
Le patron a un salaire qui est égal à x% du chiffre d'affaire : salaire = cA*pourcentage/100
Le cadre a un salaire qui dépend de son indice :
E1 : salaire annuel brut 130.000,00 Dhs,
E2 : salaire annuel brut 150.000,00 Dhs,
E3 : salaire annuel brut 170.000,00 Dhs,
E4 : salaire annuel brut 200.000,00 Dhs,
L’ouvrier a un salaire qui est salaire = SMIG + ( dateCourante - dateEntree)*150. De plus, le
salaire ne doit pas dépasser SMIG*2.
Ecrire la méthode float getSalaire() qui permet de calculer le salaire pour chacune des classes.
Ecrire la méthode affichier_Info() qui affiche le nom, le prenom, la société , le salaire et le
poste occupé (On pourra utiliser la méthode afficher_Info() de classe mère et rajouter
l'information du poste occupé).
Le programme principal devra créer 1 patron et 2 cadres aux indice E1 et E3 et 5 ouvriers.
Tester les différentes fonctions.
Exercice 7 :
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
Partie I :
9- Créez la classe Salarie.
Cette classe possédera 5 propriétés de visibilité publique :
matricule Matricule Integer
nom Nom String
Prénom Prénom String
salaire Salaire Double
Taux Charges Sociales TauxCS Double
Ces propriétés doivent seulement être accessibles par le biais des accesseurs en
lecture/écriture mis en œuvre par le biais de l’instruction Property.
10- Implémentez la méthode CalculerSalaireNet().
Elle doit calculer le salaire net d’un employé qui équivaut à :
Salaire – (salaire*TauxCS) et retournera la valeur calculée.
Et renvoyer la valeur ainsi calculée.
11- Pour tester la définition de votre classe et son bon fonctionnement :
Créez un module et une procédure principale Main.
Déclarez 2 variables de type Salarie et créez 2 instances de type Salarie.
Renseignez les propriétés de ces deux salariés. Choisissez des valeurs significatives
pour les salaires et le taux de charge sociale afin de tester correctement le calcul réalisé
par la méthode CalculerSalaireNet.
Pour des salaires respectifs de 5 000 et 10 000 dirhams un taux de charges sociales de
25 % , vous devez trouver 3 750 et 7 500.
12- Le taux de charges sociales est en fait commun à tous les salariés. Pour éviter toute
redondance de cette propriété, vous devriez donc la déclarer comme partagée au
niveau de la classe Salarie et non comme une propriété spécifique des objets
instanciés à partir de la classe.
Utilisez pour cela le mot clé Shared au niveau de la définition de la propriété TauxCS.
13- Testez de nouveau votre classe.
14- Implémentez deux nouveaux constructeurs d’initialisation :
Un qui permet de renseigner le matricule lors de l’instanciation
Un qui permet de renseigner le matricule et le nom
N’oubliez pas que le constructeur par défaut doit alors être défini explicitement.
15- Testez votre code : Instanciez deux nouveaux objets à l’aide de ces constructeurs.
16- Implémentez un constructeur de recopie pour faire un clone d’un objet de référence.
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
17- Implémentez la méthode ToString() qui renverra une chaîne constituée de la liste
des propriétés de votre objet, avec le séparateur « ; » entre 2 propriétés. Pour tester
le bon fonctionnement de la méthode, affichez la valeur retournée par celle-ci à la
console.
18- Implémentez la méthode Equals() qui renverra True si les deux objets sont égaux,
False sinon. Pour tester le bon fonctionnement de la méthode, affichez la valeur
retournée par celle-ci à la console.
Partie II :
Créez une classe Commercial en dérivant la classe Salarie. Cette classe aura 2
propriétés supplémentaires pour calculer la commission :
chiffre d'affaire chiffreAffaire Double
commission en % commission Integer
Créez les deux constructeurs standards de la classe
Commercial (par défaut et initialisation).
Ne pas oublier d'appeler les constructeurs équivalents de la classe de
base.
Créez les méthodes d'accès aux propriétés supplémentaires.
Surchargez la méthode CalculerSalaireNet pour calculer le salaire réel
(fixe + commission).
Surchargez les autres méthodes de la classe de base pour lesquelles on
jugera nécessaire de faire ainsi.
Testez la classe Commercial
Exercice 8 :
On veut construire un programme capable d’afficher les informations des figures
géométriques colorées ( surfaces, périmètre et volume)
segment : définit par un codeFigure, une couleur, un centre, et une distance
Carre : définit par un codeFigure ,une couleur, un centre, et le côté, on peut calculer son
périmètre, et sa surface .
Cercle : définit par un codeFigure, une couleur, un centre, et un rayon, on peut calculer son
périmètre et sa surface.
Cylindre : définit par un codeFigure, une couleur, un centre, un rayon et une hauteur, on peut
calculer sa surface et son volume
Cube : définit par un codeFigure, une couleur, un centre, et la valeur du côté, on peut calculer
sa surface et son volume
La classe Figure est la classe principale, elle permet aussi d’afficher les informations des
figures.
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
Le codefigure est un numéro qui s’incrémente automatiquement lors de la création de la
figure.
Comme nous pensons devoir ajouter ultérieurement de nouveaux types de figures
géométriques, nous décidons d’utiliser des interfaces pour décrire leurs comportements
communs.
1. Après avoir étudié les différences et les points communs entre les classes que nous
avons distinguées, décrivez la ou les interfaces utiles et précisez les classes qui les
implémenteront.
2. Créer les interfaces nécessaires
3. Créer la classe figure.
4. Créer les autres classes (constructeurs, propriétés, et les méthodes nécessaires)
5. Pour chacune de ces catégories de figures, on désire disposer d’une méthode toString
qui retourne (dans une chaîne de caractères) les caractéristiques de chaque figure.
6. Créer un module de tests.
Exercice 9
Un fan de Musique désire gérer ces CDs musicaux. Un CD est caractérisé par son numéro,
son titre, son genre (Rock, Pop, Metal, ..), sa date d’édition et son artiste.
On demande de gérer les CDs musicaux :
1. Ecrire la classe CD avec le constructeur d’initialisation
2. Ajouter les accesseurs et modificateurs
3. Ajouter la méthode toString qui retourne la description d’un CD sous forme de chaine de
caractères.
4. Ecrire la classe GestionCDs qui utilise un ArrayList et gère les CDs.
Ajouter les méthodes :
a. AjoutCD
b. RechercherCD : La recherche peut se faire par numéro de CD ou par titre (prévoir deux
méthodes pour la rechercher).
c. AfficherCDs
On souhaite gérer la répartition des modules entre les formateurs d’un institut de formation
professionnelle.
Exercice 10
I. Un étudiant est défini par son nom, son prénom, un ensemble de notes (un tableau de
double) et une moyenne (double). Ces caractéristiques constituent l’ensemble des données du
type Etudiant.
a. Créer la classe étudiant
b. Ajouter une méthode qui permet de calculer la moyenne des notes de l’étudiant
c. Ajouter la méthode toString qui permet d’afficher pour chaque etudiant, son nom, prénom,
ces notes et sa moyenne.
II. Afin de vérifier le bon fonctionnement de cette classe Etudiant, il est nécessaire de
construire un programme principal.
III. Une classe ClasseE est définie par un ensemble d’étudiants, c’est-à-dire un ArrayList
d’objets Etudiant.
a. Créer la classe ClasseE avec une méthode toString qui permet l’affichage des étudiants de
la classe.
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
b. Ajouter une méthode classementEtudiants qui permet de classer les étudiants dans l’ordre
décroissant des moyennes. (On utilisera l’algorithme de tri par bulle).
IV. Afin de vérifier le bon fonctionnement des deux classes modifier le programme principal
pour qu’il offre un menu permettant de:
1. Ajouter un étudiant
2. Supprimer un étudiant
3. Modifier un étudiant
4. Afficher les étudiants
5. Afficher les informations d’un étudiant
6. Afficher le classement
Exercice 11
Reprendre la classe Etudiant de l’exercice 2.
On modifie la classe ClasseE afin de :
Créer un objet de type Hashtable
Stocker les étudiants dans cet objet en les associant à leur clé.
1. Dans la classe Etudiant, ajouter un numéro d’inscription.
2. Dans la classe ClasseE, créer un objet de type Hashtable appeler le liste.
3. Ajouter une méthode ajouterEtudiant qui ajoute un étudiant à la liste. La clé serait son
numéro d’inscription.
4. Ajouter une méthode supprimerEtudiant qui supprime un étudiant passé en paramètres.
5. Ajouter une méthode rechercherEtudiant qui cherche un étudiant dans la liste et l’affiche ou
affiche un message d’erreurs si l’étudiant n’existe pas.
6. Ajouter une méthode qui permet de parcourir la liste et afficher les étudiants.
Exercice 12
Soit la classe module qui modélise un module et qui comportera les attributs suivants :
- Reference
- intitule
Soit la classe Formateur qui modélise un Formateur et qui comportera les attributs suivants :
- matricule
- nom
- prenom
- echelle
- listeModule
1- Codage de la classe Module
a. Ecrire la classe Module avec un compteur des objets créés.
b. Ecrire un constructeur d’initialisations contenant tous les attributs de la classe et un
constructeur par défaut.
c. Ecrire la méthode tostring permettant l’affichage des attributs.
2- Codage de la classe Formateur
a. Ecrire la classe Formateur avec un compteur des objets créés.
b. Ecrire un constructeur d’initialisations contenant tous les attributs de la classe et un
constructeur par défaut.
c. Ecrire la méthode tostring permettant l’affichage des attributs.
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
3- Ajouter la méthode compare qui teste l’égalité de 2 objets Formateur (2 objets Formateur
sont égaux s’ils ont le même matricule).
4- Ajouter une méthode ajouter_module() qui ajoute un module à la liste des modules pris en
charge par un formateur.
5- Ajouter une méthode supprimer_Module qui supprime un module de la liste des modules
d’un formateur.
6- ajouter une méthode afficher_module() qui affiche les modules affectés à un formateur.
7- ajouter une méthode vider_module() qui supprime tous les modules affectés à un
formateur.
8- Ecrire un programme de test qui crée 4 formateurs et 5 modules.
Exercice 13 : (Les comptes bancaires et les Clients -Personne) : Ecrire une classe Personne qui contient les éléments suivants : nom (une chaîne de
caractères), date de naissance (trois entiers pour le jour, le mois, l’année). On écrira également
un constructeur associé ainsi qu’une méthode d’affichage public String toString()
rudimentaire qui affiche les champs d’une personne. On n’affichera pas la date de naissance.
On se propose de décrire simplement les informations nécessaires à la création d’un compte
bancaire. On distinguera deux types de comptes, les comptes courants et les comptes
d’épargnes qui seront implémentés par deux classes distinctes CompteCourant et
CompteEpargne dérivant toutes les deux d’une même classe abstraite Compte. Les comptes
épargnes ont un montant minimal qui sera représenté par un champ depotMinimal.
Dans la classe abstraite Compte, les champs seront :
- Une personne p de type personne
- Un entier numéro représentant le numéro du compte.
- Un entier long montant représentant le montant du compte.
Chaque nouveau client devra avoir un numéro de compte différent et un même client peut
avoir plusieurs comptes. La classe abstraite Compte définira une méthode simulant le dépôt
d’une somme sur un compte. On disposera aussi d’une méthode simulant le retrait d’un
compte. Sur un compte courant, le retrait ne sera effectué que si le compte ne devient pas
négatif. Sur un compte épargne, le retrait ne sera effectué que si l’opération n’amène pas en
dessous de la valeur de dépôt minimal.
Question 1:
Ecrire la classe abstraite Compte avec les déclarations des méthodes abstraites et définitions
des méthodes concrètes.
Question 2 :
Ecrire les classes CompteCourant et ComptEpargne qui dérivent de Compte avec leurs
méthodes et leurs constructeurs. Pour les comptes courants, on écrira deux constructeurs, l’un
d’eux créant un compte de montant nul.
Question 3 :
Ajouter aux classes CompteCourant, CompteEpargne, Compte une méthode public String
toString( ) qui permet l’affichage d’un compte. On affichera pour chaque compte, la personne,
le numéro du compte et son type (courant ou épargne), puis le montant.
Question 4 :
On crée maintenant une classe Banque qui contient une collection représentant l’ensemble des
comptes. La classe Banque contiendra par exemple le champ Base de type Collection.
Ecrire dans la classe Banque une méthode
Void afficherComptesClient (Personne p)
Qui permet d’afficher tous les comptes d’une personne donnée.
Question 5 :
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
Le directeur de la Banque décide pour le nouvel an de créditer de 100 Dhs tous les comptes
épargne des personnes âgées de moins de 28 ans (On prendra ceux dont la date de naissance
est supérieur ou égale à 1985). Ecrire dans la classe Banque une méthode void
incrementerNouvelAn( ) qui réalise cette faveur. Des méthodes pourront être ajoutées dans les
autres classes.
Problème 1 EFM POO 2012 :(barême 20 pts)
On veut réaliser une application pour la gestion des formateurs, des classes et des stagiaires de
votre établissement.
On suppose qu’un formateur est responsable sur plusieurs classes, et chaque classe contient
plusieurs Stagiaires.
Un formateur est caractérisé par son matricule, nom, prénom, DateNaissance, SalairedeBase et
poste qui est par défaut « Permanent », et la liste des classes qui lui est affecté (en utilisant une
collection).
Pour une Classe, on trouve le code (auto), la filière, son responsable (qui est un stagiaire) et la
liste des stagiaires (en utilisant une collection)
Chaque Stagiaire est caractérisé par son numéro d’inscription, nom et dateNaissance.
Questions :
1) Classe Stagiaire (6 pts) a. Créer la classe Stagiaire, avec le constructeur qui initialise tous les paramètres et propriétés
nécessaires. (2 pts)
b. Créer la méthode toString qui retourne sous forme de chaine de caractères les informations
d’un employé. (1 pt)
c. Créer une méthode equals qui permet de comparer si deux stagiaires possèdent le même
nom. (1 pt)
d. Gérer par une exception, le cas ou la date de naissance est postérieure à la date
d’aujourd’hui. (2 pts)
2) Classe Classe (7 pts)
a. Créer la classe Classe, avec le constructeur d’initialisation et propriétés nécessaires. (2
pts)
b. Créer la méthode ajouterStagiaire(….) qui ajoute un stagiaire à la classe. (1 pt)
c. Créer la méthode supprimerStagiaire(….) qui supprime un stagiaire à la classe (1 pts)
d. En déduire la méthode déplacerStagiaire(….) qui déplace un stagiaire d’une classe à une
autre. (1 pts)
e. Créer la méthodeAfficherStagiaires(…) qui liste tous les Stagiaires de le classe. (2 pts)
3) Classe Formateur (7 pts) a. Créer la méthode ajouterClasse(….) qui affecte une classe à un formateur. (1 pt)
b. Créer la méthode afficherStagiaire(…) permettant de lister tous les stagiaires assignés au
formateur. (2 pts)
c. Créer la méthode afficherResponsableClasse(..) permettant d’afficher tous les
responsables des classes affectés au formateur. (2 pts)
d. Créer la méthoderechercherStagiaire(…) (1 pt)
e. Créer la méthode sauvegarderFormateur (..) qui permet de sérialiser la liste des classes
du formateur. (1 pt)
Problème 2: Examen de Passage 2012 (Variante 1)
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
Dossier 2 : (15,25 pts)
L’objet de cette application est la gestion informatisée des voyages organisés par une société
possédant des bus. Chaque voyage est assuré par un seul chauffeur.
Recommandation : utiliser des listes génériques (List<T> : listes typées) de préférence. Mais vous
pouvez utiliser des ArrayList ou des Collections.
1- Classe Chauffeur.
a. Définir une classe Chauffeur dont les caractéristiques sont : CIN, Nom, Prénom. (0,5
pt) b. Écrire un constructeur avec tous les paramètres. (0,5 pt)
c. Écrire les accesseurs des champs et la méthode toString() qui renverra tous les
champs séparés par tabulation. (0,5 pt)
2- Classe Bus.
a. Définir une classe Bus dont les caractéristiques sont : Immatriculation, Marque, Type.
(0,5pt) b. Écrire un constructeur avec tous les paramètres. (0,5 pt)
c. Écrire les accesseurs des champs. (0,5 pt)
d. Écrire la méthode toString() qui renverra les informations du bus séparées par
tabulation. (0,5 pt)
3- Classe Voyage
a. Définir une classe Voyage dont les caractéristiques sont : (0,75 pt)
- Numéro voyage : le numéro du 1er voyage créé est 1 et à chaque création d’un
nouveau voyage, ce numéro doit être automatiquement incrémenté de 1. Faire le
nécessaire (données+ code) pour y arriver.
- Vchauffeur : c’est le chauffeur qui a assuré le voyage courant.
- Vbus : C’est le bus conduit par Vchauffeur au cours de ce voyage.
- Date Voyage : date où a eu lieu ce voyage.
- Ville de départ.
- Ville d’arrivée.
- Nombre de voyageurs : nombre des personnes qui ont effectué ce voyage.
- Prix du billet : prix payé par chaque voyageur de ce voyage (le même prix pour
tous).
b. Ecrire un constructeur sans aucun paramètre permettant de définir la valeur du numéro
du voyage et d’affecter la date système à Date voyage. (0,75 pt)
c. Ecrire un constructeur permettant de définir les valeurs des autres champs. Ce
constructeur doit faire d’abord appel au constructeur précédent. (0,75 pt)
d. Écrire les accesseurs des champs. (0,5 pt)
e. Ecrire la méthode toString() qui renverra le numéro du voyage, la date du voyage, le
nom et le prénom du chauffeur, l’immatriculation et la marque du bus, ville de départ,
ville d’arrivée et recette du voyage tous séparés par tabulation. (1 pt)
La recette du voyage = Nombre de voyageurs * Prix du billet du voyage en cours.
4- Programme principal
a. Déclarer une liste de chauffeurs, une liste de bus et une liste de voyages accessibles
par toutes les méthodes du programme principal. (0,5 pt)
b. Ajouter une méthode rechercherChauffeur() qui recherche un chauffeur par son
CIN. Si trouvé, elle retourne le chauffeur correspondant dans la liste des chauffeurs.
Sinon, elle retourne la valeur null. (0,5 pt)
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
c. Ajouter une méthode rechercherBus() qui recherche un bus par son immatriculation.
Si trouvée, elle retourne le bus correspondant dans la liste des bus. Sinon, elle
retourne la valeur null. (0,5 pt)
d. Ajouter une méthode rechercherVoyage() qui recherche un voyage par son numéro.
Si trouvé, elle retourne l’indice correspondant dans la liste des voyages. Sinon, elle
retourne la valeur -1. (0,5 pt)
e. Ajouter par code (en mode conception) trois chauffeurs à la liste des chauffeurs. (0,5
pt) f. Ajouter par code trois bus à la liste des bus. (0,5 pt)
g. Ajouter par code deux voyages à la liste des voyages. Utiliser certains constructeurs et
certaines méthodes déjà conçus. (0,75 pt)
h. Concevoir le menu suivant : (en prenant en compte les indications ci-dessous)
1- Ajouter bus. (0,75 pt)
2- Ajouter voyage. (1 pt)
3- Lister tous les voyages. (0,75 pt)
4- Lister les voyages passés entre deux dates. (0,75 pt)
5- Nombre de voyageurs de l’année en cours. (0,75 pt)
6- Fin. (0,25 pt)
Indications concernant les traitements à réaliser dans le menu ci-dessus :
Ajouter bus :
Saisir les données nécessaires et faire le nécessaire pour que deux bus dans la liste
n’aient pas la même immatriculation.
Ajouter voyage :
- Le numéro du nouveau voyage est automatiquement affecté par programme et la
date voyage correspond à la date système.
- Saisir le CIN du chauffeur qui doit correspondre à un chauffeur de la liste des
chauffeurs et si trouvé, le chauffeur ainsi trouvé correspond à Vchauffeur du voyage à
ajouter, sinon le programme vous demandera de saisir un autre CIN.
- Saisir l’immatriculation du bus qui doit correspondre à un bus de la liste des bus et si
trouvée, le bus ainsi trouvé correspond à Vbus du voyage à ajouter, sinon le
programme vous demandera de saisir une autre immatriculation.
- Saisir les autres données restantes et chaque fois qu’une donnée saisie n’est pas
valide, le programme vous demandera de la saisir de nouveau.
Lister tous les voyages : Imprimer la liste de tous les voyages de la manière suivante :
Date :
../../….
N° Date voyage Nom Prénom Immatric. Marque Ville départ Ville arrivée
Recette
… ../../…. ……. …..….. ……….. ……… ..…….. ……….
……...
Indication : la date en haut à droite correspond à la date système.
Lister les voyages passés entre deux dates : Imprimer une liste des voyages semblable
au niveau de la présentation à celle de la question précédente mais contenant
uniquement les voyages qui se sont déroulés entre deux dates que l’utilisateur de
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
l’application devra saisir. En bas de la liste ainsi imprimée, indiquer le nombre des
voyages listés.
Nombre de voyageurs de l’année en cours :
Le programme va calculer et afficher le nombre de voyageurs de l’année en cours
(utiliser la date système pour récupérer l’année en cours). Ce nombre correspond au
nombre total des voyageurs ayant utilisé les bus de la société pendant l’année en
cours.
Problème 3 : Examen de Passage théorique 2011 :
Dans une application Windows tous les contrôles (fenêtres, boutons, zones de texte, cases à cocher …)
sont caractérisés par un nom (de type chaines de caractères), une position haut et une position gauche
(de type entier) de l’objet sur l’écran. Une fenêtre est un contrôle comme les autres, caractérisée en
plus d’un titre et d’une couleur d’arrière-plan (de type entier).
1- Ecrire les classes Controle et Fenetre avec un constructeur d’initiation, un constructeur de copie,
sachant que la classe Fenetre hérite de la classe Controle.
2- Doter la classe Controle par la méthode Display qui permet d’afficher la mention suivante :
« Le contrôle Texte1 est situé à la position 12x25 » Texte1 représente le nom du contrôle et 12,25
représentent respectivement la position gauche, haut du contrôle dans l’écran.
3- Redéfinir la méthode DISPLAY pour la classe Fenetre pour afficher la mention suivante :
« Le contrôle Texte1 est situé à la position 12,25, ayant comme titre « titre1 » et une couleur d’arrière-
plan de 20 ». On souhaite ajouter à la classe Fenetre une propriété type collection qui permet de gérer
une liste de contrôles que l’utilisateur peut ajouter sur une fenêtre (zones de texte, liste déroulante,…).
4- Donner les modifications à apporter à la classe Fenetre et la méthode AjoutControle qui permet
d’ajouter un contrôle à la collection.
5- Implémenter pour la classe Fenetre la méthode RetireControle qui permet de supprimer un contrôle
de la collection connaissant son nom.
6- Implémenter pour la classe Fenetre la méthode DisplayTout qui permet d’afficher tous les contrôles
ajoutés à la fenêtre.
Problème 4 : Examen de Passage Pratique 2011 (v1)
L’objet de cette application est la gestion informatisée du cabinet médical. Elle doit procéder à la
gestion informatisée des dossiers médicaux des patients et elle s’occupe également de la gestion des
rendez-vous et des visites.
1- Classe Patient.
a. Définir une classe clsPatient dont les caractéristiques sont : Code Patient (affecté de façon
incrémentale par rapport au nombre de patients), Nom, Prénom, Date de naissance, Adresse, Tél, E-
mail.
b. Ecrire un constructeur à deux paramétres : Nom et Prénom.
c. Ecrire un deuxième constructeur avec tous les paramètres.
d. Ecrire les accesseurs des champs et la méthode ToString() qui renverra les informations d’un
patient.
2- Classe Visites.
a. Définir une classe clsVistes dont les caractéristiques sont : Date visite, Heure visite, Code patient,
Montant payé.
b. Ecrire un constructeur à deux paramètres : Date visite et Heure visite.
c. Ecrire un deuxième constructeur sans paramètres qui appelle le premier avec la date et l’heure
actuelle.
ISTA HAY RYAD TDI 2012/2013
Formatrice : BOUROUS Imane
d. Ecrire les accesseurs des champs et la méthode ToString() qui renverra les informations de cette
visite.
3- Classe RendezVous.
a. Définir une classe clsRendezVous dont les caractéristiques sont : Date Rendez-Vous, Heure
Rendez-Vous, Code patient, Observation.
b. Ecrire un constructeur à trois paramètres : Date Rendez-Vous, Heure Rendez-Vous, Code patient.
c. Ecrire les accesseurs des champs et la méthode ToString() qui renverra les informations de ce
rendez-vous.
4- Classe CabinetMedical.
a. Définir une classe CabinetMedical dont les caractéristiques sont : une liste des patients, une liste des
visites et une liste des rendez-vous (Collections ou tableaux).
b. Ajouter une méthode AjouterPatient qui ajoute un patient à l’ensemble des patients du cabinet.
c. Ajouter une méthode PatientExistant ayant comme paramétre le nom et le prénom et qui retourne le
code du patient s’il existe ou le chiffre -1 sinon.
d. Définir une classe ExceptionMedecinOccupe.
e. Ajouter une méthode AjouterRDV qui ajoute un rendez-vous, et lève l’exception définie en d) s’il
coïncide avec un redez-vous.
f. Ajouter une méthode AfficherRDVduJour qui va, pour une date donnée comme paramètre, affiche la
liste des rendez-vous de ce jour.
g. Ajouter une méthode PatientAyantDesVisites qui affiche la liste des patients (code, nom et prènom)
ayant visité le cabinet pendant la dernière semaine.
h. Ajouter une méthode SupprimerPatient qui permet de supprimer un patient ainsi que ses visites et
rendez-vous.
i. Ajouter une méthode EnregistrerPatients qui permet d’enregistrer la liste des patients dans un
fichier.