Vous êtes sur la page 1sur 6

TP Collections (2)

Exercice 1 :
Partie 1
On souhaite gérer un ensemble d'étudiants. Chaque étudiant sera défini par une classe Etudiant
et devra présenter les informations suivantes :
● Un matricule (type entier) ;
● Un nom (type String) ;
● Une liste de Notes (de taille indéfinie) de type Note.
Une classe Note permettra de contenir pour chaque cours, l'intitule du cours ainsi que la note
obtenue. Les notes de chaque étudiant seront stockées dans un ArrayList.
● Une méthode addNote() permettant d'ajouter une note a l'étudiant.
Partie 2
On souhaite mettre en place une classe capable de réaliser des statistiques sur une collection
d'objets, comme par exemple, des Etudiants, des Notes, ... Cette classe, qui sera nommée Stats,
pourra ainsi calculer le maximum, le minimum et la moyenne d'une collection d'objets.
Toutes les classes qui peuvent faire l'objet de statistiques implémenteront une interface
Statisticable, qui est décrite comme suit:
public interface Statisticable {
public abstract float getValue();
}
Tout objet ≪ statisticable ≫ doit donc avoir une certaine valeur ; pour un Etudiant, on choisit de
prendre la moyenne de ses notes comme valeur de l'Etudiant. La classe Stats sera ensuite utilisée et
donnera pour :
● Chaque étudiant :
o sa moyenne ;
o sa meilleure note ;
o sa mauvaise note ;
● Chaque groupe d'étudiants :
o la moyenne du groupe ;
o le meilleur étudiant ;
o le moins bon étudiant.
Partie 3
1. On souhaite pouvoir classer la liste d'étudiants suivant le matricule.
Pour ce faire, on implémentera l'interface Comparable dans la classe Etudiant. La méthode
compareTo devra donc être définie dans la classe Etudiant.
Une fois cela réalisé, on triera la liste d'étudiants à l'aide de la méthode Collections.sort.
2. On souhaite egalement pouvoir trier la liste d'etudiants par moyenne et par nom.
Dans ce but, deux nouvelles classes (CompareMoyenneet CompareNom) seront créées
Et implémenteront l'interface Comparator. Ces classes devront donc chacune définir une méthode
Compare prenant comme arguments les deux objets à comparer et réalisant un traitement similaire
à celui de CompareTo dans l'exercice précèdent.
Indication :
Pour résoudre cette situation, vous êtes demandés d’écrire les classes suivantes :
❖ Etudiant :
· Un constructeur Etudiant à deux paramètres
· Une methode getNom()
· Une methode getMatricule()
· Une methode affiche() qui affiche le nom, le matricule et la liste des notes de l’etudiant.
· Une methode addNote()
· Une methode getValue()
· Une methode compareTo()
· Une methode meilleureNote()
· Une methode mauvaiseNote()
❖ Note :
· Un constructeur Note a deux paramètres
· Une methode getNote()
· Une methode affiche()

❖ GroupeEtudiant :
· Un constructeur GroupeEtudiant sans paramètres
· Une methode addEtudiant()
· Une methode affiche()
· Une methode getValue()
· Une methode meilleurEtudiant()
· Une methode moinsBonEtudiant()
❖ CompareNom
❖ CompareMoyenne
❖ CompareNote

❖ Stats

❖ Programme de test :
• Créer trois étudiants etd1, etd2, etd3 avec pour chacun , trois notes.
• Afficher pour chacun, son nom, la moyenne des notes, la meilleure et la mauvaise note.
• Créer un groupe d’étudiants et y ajouter les étudiants etd1, etd2 et etd3.
• Afficher la moyenne du groupe
• Afficher le meilleur et le moins bon étudiant
• Trier la liste selon la moyenne puis afficher
• Trier la liste selon le nom puis afficher
• Trier la liste selon le matricule puis afficher

Exercice 2 : Table associative (MAP)


On vous demande d’écrire une classe Annuaire pour mémoriser des numéros de téléphone et
d’adresses. Chaque entrée est représentée par une fiche a plusieurs champs : un nom, un numéro et
une adresse.
1. Donner la classe Fiche

La classe Annuaire comporte une table associative (Map<String,Fiche>) qui sera faite
d’associations ( un_nom, une_fiche). Cette classe possède un constructeur sans paramètre qui crée le
Map nomme agenda.
2. Dans un premier temps, la table associative en question sera une instance de la classe
HashMap.
Cette classe comporte les méthodes suivantes :
• InsererNom() : permet de saisir un nom, son numéro de téléphone et son adresse puis
l’ajouter à l’annuaire.
• RechercherNom(String nom) :permet de chercher le nom spécifié en argument dans
l’annuaire et d’afficher sa fiche s’il existe sinon afficher « entrée inexistante »
• ConsulterAnnuaire():qui permet d’afficher toutes les fiches.
3. Ecrire une classe de Test appelée Gestion_Annuaire qui permet de saisir un choix tel que
:
• Si l’utilisateur tape 1, on demande d’insérer une nouvelle entrée dans l’annuaire,
• Si l’utilisateur tape 2, on demande de chercher la fiche correspondante a un nom fourni,
• Si l’utilisateur tape 3, on demande d’afficher les fiches présentes dans l’annuaire
• Si l’utilisateur tape 0, le programme s’arrête en affichant ≪ au revoir ≫

Trace d’exécution :

*****************************
si vous voulez ajouter une entrée
à l'annuaire taper 1:
si vous voulez chercher une entrée
dans l'annuaire taper 2:
si vous voulez consulter l'annuaire taper 3:
si vous voulez quitter, taper 0:
*********************************

Donnez votre choix SVP:


1
donner le nom à ajouter
NAJET
saisir le numero de telephone
54678321
saisir l'adresse
TUNIS
Donnez votre choix SVP:
1
donner le nom à ajouter
BILEL
saisir le numero de telephone
34567890
saisir l'adresse
NABEUL
Donnez votre choix SVP:
1
donner le nom à ajouter
FARID
saisir le numero de telephone
67895432
saisir l'adresse
BEJA
Donnez votre choix SVP:
2
donner le nom à chercher
BILEL
nom=: BILEL

adresse: NABEUL
téléphone=: 34567890
Donnez votre choix SVP:
3
Consultation des fiches disponibles
nom=: FARID
adresse: BEJA
téléphone=: 67895432

nom=: NAJET
adresse: TUNIS
téléphone=: 54678321

nom=: BILEL
adresse: NABEUL
téléphone=: 34567890

Donnez votre choix SVP:


0
au revoir
4. On constate que l’affichage des fiches se fait dans un ordre imprévisible. Que faut-il
changer dans le programme précédent pour que les fiches apparaissent dans l’ordre des
noms ?

Vous aimerez peut-être aussi