public class Etudiant {
private int identifiant;
private String nom;
private String prenom;
private float moyenne;
public Etudiant(int identifiant, String nom, String prenom, float moyenne) {
this.identifiant = identifiant;
this.nom = nom;
this.prenom = prenom;
this.moyenne = moyenne;
public int getIdentifiant() {
return identifiant;
public String getNom() {
return nom;
public String getPrenom() {
return prenom;
public float getMoyenne() {
return moyenne;
}
public boolean equals(Object obj) {
if (obj == this) {
return true;
if (!(obj instanceof Etudiant)) {
return false;
Etudiant etudiant = (Etudiant) obj;
return this.identifiant == etudiant.identifiant && Objects.equals(this.nom, etudiant.nom);
public String toString() {
return "Identifiant : " + identifiant + ", Nom : " + nom + ", Prénom : " + prenom + ", Moyenne : " +
moyenne;
// Méthode à implémenter par les sous-classes
public abstract void ajouterUneAbsence();
public class Etudiant3eme extends Etudiant {
private String branche;
public Etudiant3eme(int identifiant, String nom, String prenom, float moyenne, String branche) {
super(identifiant, nom, prenom, moyenne);
this.branche = branche;
public String getBranche() {
return branche;
public void ajouterUneAbsence() {
this.moyenne -= 0.5;
public class EtudiantAlternance extends Etudiant {
private int salaire;
public EtudiantAlternance(int identifiant, String nom, String prenom, float moyenne, int salaire) {
super(identifiant, nom, prenom, moyenne);
this.salaire = salaire;
public int getSalaire() {
return salaire;
public void ajouterUneAbsence() {
this.setSalaire(this.getSalaire() - 50);
@Override
public String toString() {
return "Etudiant alternant : " + super.toString() + ", salaire=" + salaire + " DT";
}
}
public class Ecole {
private String nom;
private Etudiant[] etudiants;
private int nbEtudiants;
public Ecole(String nom) {
this.nom = nom;
this.etudiants = new Etudiant[500];
this.nbEtudiants = 0;
public int rechercherEtudiant(Etudiant e) {
for (int i = 0; i < nbEtudiants; i++) {
if (etudiants[i].equals(e)) {
return i;
return -1;
public void ajouterEtudiant(Etudiant e) {
// Vérifier si l'étudiant est déjà inscrit
if (rechercherEtudiant(e) != -1) {
System.out.println("L'étudiant est déjà inscrit à cette école.");
return;
// Vérifier si l'école est pleine
if (nbEtudiants == 500) {
System.out.println("L'école est pleine, impossible d'ajouter un nouvel étudiant.");
return;
// Ajouter l'étudiant à l'école
etudiants[nbEtudiants] = e;
nbEtudiants++;
// Afficher un message de confirmation
System.out.println("L'étudiant a été ajouté à l'école.");
public float getMoyenneDes3A() {
int count = 0;
float sum = 0;
for (Etudiant etudiant : etudiants) {
if (etudiant instanceof Etudiant3eme) {
count++;
sum += etudiant.getMoyenne();
return count > 0 ? sum / count : 0;
public float moyenneSalaireAlternants() {
int nbAlternants = 0;
int sommeSalaires = 0;
for (int i = 0; i < nbEtudiants; i++) {
if (etudiants[i] instanceof EtudiantAlternance) {
nbAlternants++;
sommeSalaires += ((EtudiantAlternance) etudiants[i]).getSalaire();
if (nbAlternants > 0) {
return sommeSalaires / (float) nbAlternants;
} else {
return 0;
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Ecole : ").append(nom).append("\n");
for (int i = 0; i < nbEtudiants; i++) {
sb.append(etudiants[i].toString()).append("\n");
return sb.toString();
public void changerEcole(Etudiant etd, Ecole e) {
int index = rechercherEtudiant(etd);
if (index != -1) { // si l'étudiant est trouvé dans l'école actuelle
if (e.rechercherEtudiant(etd) == -1) { // si l'étudiant n'est pas déjà inscrit dans la nouvelle école
etudiants[index] = null; // on supprime l'étudiant de l'école actuelle
etd.setEcole(e); // on met à jour l'école de l'étudiant
e.ajouterEtudiant(etd); // on ajoute l'étudiant dans la nouvelle école
System.out.println("Changement d'école effectué avec succès pour l'étudiant " +
etd.getNomComplet());
} else {
System.out.println("L'étudiant " + etd.getNomComplet() + " est déjà inscrit dans l'école " +
e.getNom());
} else {
System.out.println("L'étudiant " + etd.getNomComplet() + " n'est pas inscrit dans cette école.");
public class EtudiantExisteException extends Exception {
public EtudiantExisteException() {
super("L'étudiant existe déjà dans cette école !");
// Ajouter etudiant modifié avec exception (TODO21)
public void ajouterEtudiant(Etudiant e) throws EtudiantExisteException {
if (this.rechercherEtudiant(e) != -1) {
throw new EtudiantExisteException("L'étudiant " + e.getIdentifiant() + " est déjà inscrit à cette
école.");
if (this.nbEtudiants < 500) {
this.etudiants[this.nbEtudiants] = e;
this.nbEtudiants++;
}
//TODO 22
public void changerEcole(Etudiant etd, Ecole e) throws EtudiantInexistantException,
EtudiantExisteException {
int index = rechercherEtudiant(etd);
if (index == -1) {
throw new EtudiantInexistantException();
if (e.rechercherEtudiant(etd) != -1) {
throw new EtudiantExisteException();
// L'étudiant existe dans cette école et n'existe pas dans la nouvelle école
// On peut donc le supprimer de cette école et l'ajouter à la nouvelle école
etudiants.remove(index);
e.ajouterEtudiant(etd);