TP4 – Registre d'Employés (Java)
Implémentation complète en Java du registre d'employés avec LinkedList, comparateurs, filtrage par
prédicat et export CSV.
1. Classe Adresse
public class Adresse {
private int numero;
private String rue;
private String ville;
public Adresse(int numero, String rue, String ville) {
[Link] = numero;
[Link] = rue;
[Link] = ville;
}
// Getters
public int getNumero() { return numero; }
public String getRue() { return rue; }
public String getVille() { return ville; }
@Override
public String toString() {
return numero + " " + rue + ", " + ville;
}
}
2. Classe Personne
public class Personne {
private String nom;
private String prenom;
private Adresse adresse;
public Personne(String nom, String prenom, Adresse adresse) {
[Link] = nom;
[Link] = prenom;
[Link] = adresse;
}
// Getters
public String getNom() { return nom; }
public String getPrenom() { return prenom; }
public Adresse getAdresse() { return adresse; }
@Override
public String toString() {
return prenom + " " + nom + " (" + adresse + ")";
}
}
3. Classe Employe
public class Employe {
private String code;
private double salaire;
private Personne personne;
public Employe(String code, double salaire, Personne personne) {
[Link] = code;
[Link] = salaire;
[Link] = personne;
}
// Getters
public String getCode() { return code; }
public double getSalaire() { return salaire; }
public Personne getPersonne() { return personne; }
@Override
public String toString() {
return "[" + code + "] " + personne + " – salaire: " + salaire;
}
}
4. Interface Registre
L'interface définit le contrat du registre, notamment la méthode filtrer(Predicate<Employe> p)
et le tri via [Link](Comparator).
import [Link];
import [Link];
public interface Registre {
void ajouterEmploye(Employe e);
boolean supprimerEmploye(String code);
void classerParCode();
void classerParSalaire();
void exporterFichesPaie(String fichier) throws Exception;
List<Employe> filtrer(Predicate<Employe> p);
}
5. Classe RegistreImpl
5.1 Déclaration et constructeur
import [Link].*;
import [Link].*;
import [Link];
import [Link];
public class RegistreImpl implements Registre {
// Registre stocké dans une LinkedList
private LinkedList<Employe> employes = new LinkedList<>();
5.2 Ajouter / Supprimer
@Override
public void ajouterEmploye(Employe e) {
[Link](e);
}
@Override
public boolean supprimerEmploye(String code) {
return [Link](e -> [Link]().equals(code));
}
5.3 Classement par code et par salaire
On utilise la méthode [Link](Comparator) disponible par défaut dans l'interface List.
@Override
public void classerParCode() {
// Comparateur sur le code (ordre alphabétique)
[Link]([Link](Employe::getCode));
}
@Override
public void classerParSalaire() {
// Comparateur sur le salaire (ordre croissant)
[Link]([Link](Employe::getSalaire));
}
5.4 Export des fiches de paie (CSV)
Le fichier est au format : code/nom/prénom/adresse/salaire
@Override
public void exporterFichesPaie(String fichier) throws Exception {
try (PrintWriter pw = new PrintWriter(
new BufferedWriter(new FileWriter(fichier)))) {
// En-tête CSV
[Link]("code/nom/prenom/adresse/salaire");
for (Employe e : employes) {
Personne p = [Link]();
[Link]("%s/%s/%s/%s/%.2f%n",
[Link](),
[Link](),
[Link](),
[Link]().toString(),
[Link]()
);
}
}
[Link]("Fiches exportées vers : " + fichier);
}
5.5 Méthode filtrer(Predicate p)
Cette méthode générique retourne tous les éléments du registre vérifiant le prédicat passé en
paramètre.
@Override
public List<Employe> filtrer(Predicate<Employe> p) {
return [Link]()
.filter(p)
.collect([Link]());
}
// Affichage du registre (utilitaire)
public void afficher() {
if ([Link]()) {
[Link]("Registre vide.");
return;
}
[Link]([Link]::println);
}
} // fin RegistreImpl
6. Classe Main – Tests
La classe Main illustre toutes les fonctionnalités : ajout, suppression, classements, filtrage par ville, et
export CSV.
public class Main {
public static void main(String[] args) throws Exception {
// --- Création des adresses ---
Adresse a1 = new Adresse(12, "Rue de la Paix", "Paris");
Adresse a2 = new Adresse(5, "Avenue des Fleurs", "Lyon");
Adresse a3 = new Adresse(8, "Boulevard Haussmann","Paris");
Adresse a4 = new Adresse(3, "Rue Nationale", "Marseille");
// --- Création des personnes ---
Personne p1 = new Personne("Dupont", "Alice", a1);
Personne p2 = new Personne("Martin", "Bob", a2);
Personne p3 = new Personne("Leclerc", "Claire", a3);
Personne p4 = new Personne("Bernard", "David", a4);
// --- Création des employés ---
Employe e1 = new Employe("E003", 3200.0, p1);
Employe e2 = new Employe("E001", 4500.0, p2);
Employe e3 = new Employe("E004", 2800.0, p3);
Employe e4 = new Employe("E002", 5100.0, p4);
// --- Registre ---
RegistreImpl registre = new RegistreImpl();
[Link](e1);
[Link](e2);
[Link](e3);
[Link](e4);
[Link]("=== Registre initial ===");
[Link]();
// --- Classement par code ---
[Link]("\n=== Classé par code ===");
[Link]();
[Link]();
// --- Classement par salaire ---
[Link]("\n=== Classé par salaire ===");
[Link]();
[Link]();
// --- Filtrage : employés habitant Paris ---
[Link]("\n=== Employés habitant Paris ===");
String villeRecherchee = "Paris";
[Link](
e -> [Link]()
.getAdresse()
.getVille()
.equalsIgnoreCase(villeRecherchee)
).forEach([Link]::println);
// --- Suppression ---
[Link]("\n=== Suppression de E001 ===");
boolean ok = [Link]("E001");
[Link]("Supprimé : " + ok);
[Link]();
// --- Export fiches de paie ---
[Link]("fiches_paie.csv");
}
}
7. Exemple de sortie – fiches_paie.csv
code/nom/prenom/adresse/salaire
E002/Bernard/David/3 Rue Nationale, Marseille/5100,00
E003/Dupont/Alice/12 Rue de la Paix, Paris/3200,00
E004/Leclerc/Claire/8 Boulevard Haussmann, Paris/2800,00
8. Structure des fichiers du projet
src/
■■■ [Link] // Numéro, rue, ville
■■■ [Link] // Nom, prénom, adresse
■■■ [Link] // Code, salaire, personne
■■■ [Link] // Interface (filtrer, sort, export...)
■■■ [Link] // Implémentation LinkedList
■■■ [Link] // Démonstration complète
Toutes les classes compilent sous Java 8+ (utilisation des lambdas, Stream API et [Link]).