Vous êtes sur la page 1sur 4

EXAMEN FINAL

Département TI Date 10/06/22


Matière PROGRAMMATION OBJET AVANCÉE Durée 01h30
Enseignants Lamia Drira, Hatem Aziza Doc. Autorisés NON
Calculat. Autorisée NON
Classes DSI2 Nombre de pages 04

Il vous est demandé de remplir intégralement l’entête de votre copie et de soigner la présentation

Exercice 1 : Gestion des PFE 14 Pts


On considère l’interface graphique, qui est supposée servir à gérer les informations relatives aux projets de fin d’études.

Cette fenêtre est repartie en trois panneaux.


panProjet panEtudiant panBouton

On vous demande d’implémenter le comportement suivant :


Bouton « Ajouter » :
Appelle la méthode ajouter(Etudiant e, Projet p) qui sert à ajouter toutes les données saisies dans une
HashMap<Etudiant,Projet>. Tous les champs sont obligatoires.
Bouton « Afficher » :
Appelle la méthode afficher() qui sert à afficher les étudiants ainsi que leurs projets déjà sauvegardés dans la HashMap.
Bouton « Chercher » :
Appelle la méthode chercher(String encadrant) qui retourne une collection contenant les titres des projets d’un encadrant
donné, puis les afficher sur la console. Le nom de l’encadrant est saisi dans la zone correspondante.

Pour cela, on commence par définir les deux classes Etudiant et Projet comme suit :
package examenPOA2022;

public class Etudiant {


private String nom;
private String prenom;
private String classe;

public Etudiant(String nom, String prenom, String classe) {


this.nom = nom;
this.prenom = prenom;
this.classe = classe;
}

1
public String getClasse() {
return classe;
}

@Override
public String toString() {
return nom+" "+prenom+" "+classe;
}
}

package examenPOA2022;

public class Projet {


private String titre;
private String encadrant;

public Projet(String titre, String encadrant) {


super();
this.titre = titre;
this.encadrant = encadrant;
}

public String getEncadrant() {


return encadrant;
}

public String getTitre() {


return titre;
}

@Override
public String toString() {
return titre + " " + encadrant;
}
}

1. Compléter le code de la classe Etudiant pour qu’on puisse créer une collection d’étudiants trié par le nom.
2. Complétez le code suivant, en écrivant le constructeur PfeView() et les méthodes ajouter(), chercher(), afficher() et
actionPerformed().

• Le constructeur PfeView() sert à ajouter les layouts adéquats, placer tous les composants et ajouter les écouteurs.
• La méthode ajouter() doit lancer une NullPointerException, qui sera traitée dans le programme principal, si un
des arguments est null. Cette méthode ne peut ajouter que les étudiants qui n’appartiennent pas à la liste des clés
de la Map.
• La méthode chercher() sert à retourner une collection des projets pour un encadrant donné.
• La méthode afficher() sert à afficher les projets des étudiants par classes comme suit :

2
package examenPOA2022;

import java.awt.*;
import java.awt.event.*;
import java.util.*;

import javax.swing.*;

public class PfeView extends JFrame implements ActionListener{


private JLabel lblNom = new JLabel("Nom");
private JLabel lblPrenom = new JLabel("Prénom");
private JLabel lblClasse = new JLabel("Classe");
private JLabel lblTitre = new JLabel("Titre projet");
private JLabel lblEncadrant = new JLabel("Encadrant");

private JTextField txtNom = new JTextField();


private JTextField txtPrenom = new JTextField();
private JTextField txtClasse = new JTextField();
private JTextField txtTitre = new JTextField();
private JTextField txtEncadrant = new JTextField();

private JButton bAjouter = new JButton("Ajouter");


private JButton bAfficher = new JButton("Afficher");
private JButton bChercher = new JButton("Chercher");

private JPanel panEtudiant = new JPanel();


private JPanel panProjet = new JPanel();
private JPanel panBoutons = new JPanel();

private Map<Etudiant,Projet> map = new HashMap<>();

public PfeView(){
// A compléter
}

public Set<String> chercher(String encadrant){


// A compléter
}

public void ajouter(Etudiant e, Projet p) {


// A compléter
}

public void afficher() {


// A compléter
}
public static void main(String[] args) {
PfeView fen = new PfeView();
fen.setTitle("Gestion des PFE");
fen.setSize(450,150);
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fen.setVisible(true);
}

@Override
public void actionPerformed(ActionEvent ev) {
// A compléter
}
}

3
Exercice 2 : Dictionnaire de mots croisés 06 Pts
Un dictionnaire pour mots croisés est un dictionnaire conçu pour faciliter la résolution de mots croisés. Un exemple simple d’un
tel dictionnaire en est un dans lequel les mots sont triés d’abord par longueur, puis par ordre alphabétique.
Le but de cet exercice est d’écrire une classe nommée MotsCroisesDict représentant un tel dictionnaire sous forme d’une
HashMap<Integer, Set<String>>, offrant trois méthodes :
1. void add(String word), qui prend un mot de type String en argument et l’ajoute au dictionnaire s’il ne s’y trouve pas
déjà,̀ ou lève IllegalArgumentException si le mot est vide,
2. void addAll(Collection<String> words), qui prend une collection de mots de type Collection<String> en argument et
ajoute au dictionnaire la totalité des mots qu’elle contient et qui ne s’y trouvent pas déjà, ou lève
IllegalArgumentException si l’un des mots est vide ; notez que la collection elle-même a le droit d’être vide,
3. void print(), qui imprime à l’écran le contenu du dictionnaire, selon le format donné plus bas.

L’extrait de programme suivant illustre l’utilisation de cette classe :

MotsCroisesDict mcd = new MotsCroisesDict();

mcd.add("arbre");
mcd.add("maison");
List<String> liste = Arrays.asList("chaise", "table", "bois", "bureau", "arbre", "crayon");
mcd.addAll(liste);
mcd.print();
• La méthode Arrays.asList() est utilisée pour renvoyer une liste de taille fixe contenant les valeurs passées en paramètre.

En l’exécutant, il devrait produire la sortie suivante :

Mots de 4 lettres :
bois
Mots de 5 lettres :
arbre
table
Mots de 6 lettres :
bureau
chaise
crayon
maison

dans laquelle les mots apparaissent groupés par longueur, les groupes sont triés par longueur croissante, et les mots de chaque
groupe sont triés dans l’ordre alphabétique.

Vous aimerez peut-être aussi