ENSA de Kenitra
Module : Programmation Java
2022/2023
Série 2 : Classes Internes/Génériques & Collection –GUI/JDBC-Junit
Exercice 1 : Classe Externe/Interne
Nous souhaitons créer une voiture avec une pile.
La voiture dispose d'une pile. Si la pile est vide, la voiture s'arrête.
La voiture dispose de la méthode roule(int n) qui consomme des unités de pile, sur le tableau
de bord on consulte un compteur des unités consommés.
La seule classe UML visible est Voiture.
Proposer une modélisation UML (Diagramme de classe) et le code java associé, en utilisant la
notion de Classe Interne/Classe Externe.
Exercice 2 : Gestion des étudiants dans un cours (Classe Interne/Classe
Générique/Collection)
Vous êtes chargé de créer une application Java pour gérer les étudiants inscrits à différents
cours universitaires. Chaque cours peut avoir plusieurs étudiants, identifiés par leur nom et un
identifiant unique. Vous allez utiliser des classes internes pour représenter les étudiants et des
classes génériques pour représenter les cours. Les collections permettront de gérer
dynamiquement les inscriptions des étudiants.
Énoncé :
Créez un programme Java qui permet de :
1. Ajouter des étudiants à un cours spécifique.
2. Afficher les étudiants inscrits à un cours.
3. Supprimer un étudiant d’un cours.
Questions :
1. Créer une classe générique Cours<T>
Représente un cours universitaire.
Utilisez un type générique <T> pour indiquer le type d’identifiant des étudiants (par
exemple, String pour un code étudiant, ou Integer pour un numéro d’identification).
2. Ajouter une classe interne Étudiant dans Cours<T>
Représente un étudiant avec les attributs :
o id (de type générique <T>)
o nom (String)
3. Ajouter les méthodes suivantes à la classe Cours<T> :
ENSA de Kenitra
Module : Programmation Java
2022/2023
Série 2 : Classes Internes/Génériques & Collection –GUI/JDBC-Junit
ajouterÉtudiant(T id, String nom) : Ajoute un étudiant au cours.
afficherÉtudiants() : Affiche tous les étudiants inscrits au cours.
supprimerÉtudiant(T id) : Supprime un étudiant du cours en fonction de son
identifiant.
4. Créer une classe principale Main
Instanciez un cours (par exemple, "Mathématiques") avec des identifiants d’étudiants
de type Integer.
Ajoutez des étudiants avec leurs identifiants et noms.
Affichez la liste des étudiants.
Supprimez un étudiant par son identifiant, puis affichez à nouveau la liste.
Exercice 3 : Collection
La classe Eleve possède trois attributs privés :
son nom, nommé nom, de type String,
un ensemble de notes, nommé listeNotes, qui sont des entiers rangés dans
un ArrayList<Integer>
une moyenne de type double, nommée moyenne, qui doit toujours être égale à la moyenne des
notes contenues dans l'attribut listeNotes. Un élève sans aucune note sera considéré comme
ayant une moyenne nulle.
La classe Eleve possède un constructeur permettant uniquement d'inialiser le nom de l'élève.
La classe Eleve possède aussi cinq méthodes publiques :
Un getter pour la moyenne de l'élève c'est-à-dire une méthode d'en-tête
public double getMoyenne()
renvoie la valeur de l'attribut moyenne ;
Un getter pour le nom de l'élève c'est-à-dire une méthode d'en-tête
public String getNom()
renvoie le nom de l'élève ;
Un getter pour la liste des notes de l'élève c'est-à-dire une méthode d'en-tête
public ArrayList<Integer> getListeNotes()
renvoie la liste des notes de l'élève ;
La méthode d'en-tête
public void ajouterNote(int note)
ajoute la note reçue en paramètre à listeNotes ; si la note reçue en paramètre est négative, la
note introduite est 0 ; si la note reçue en paramètre est supérieure à 20, la note introduite est 20
; la méthode actualise en conséquence l'attribut moyenne ; l'actualisation est faite à temps
constant, et non pas en un temps proportionnel au nombre de notes déjà enregistrées.
La méthode d'en-tête
public String toString()
qui retourne une description de l'élève considéré (par exemple : "Sophie (12.25)").
ENSA de Kenitra
Module : Programmation Java
2022/2023
Série 2 : Classes Internes/Génériques & Collection –GUI/JDBC-Junit
Questions :
1- Donner le diagramme de classe, le diagramme des cas d'utilisation et le diagramme de
séquence
2- Implémenter les classes
3- Ecrire la classe de Test avec le main pour tester l'application selon le diagramme de
séquence
4- Implémenter une classe personne, pour que l’élève hérite de cette classe.
5- Réécrire le code en implémentant les exceptions sur les méthodes susceptibles de générer
une erreur
Exercice 4 : Gestion bibliothèque (Classe Interne et Collection)
La bibliothèque municipale de votre ville souhaite informatiser la gestion de son catalogue. Vous êtes
chargé de développer une application Java pour gérer les livres. La bibliothèque est divisée en
plusieurs catégories, telles que littérature, science, histoire, etc. Chaque catégorie contient des livres
avec un titre, un auteur et une année de publication.
Vous devez implémenter un programme en Java qui permet de :
1. Ajouter des livres à une catégorie.
2. Afficher tous les livres de la bibliothèque classés par catégorie.
3. Supprimer un livre d'une catégorie donnée.
4. Trier les livres d'une catégorie par année de publication.
Créez un programme Java pour gérer une bibliothèque, en suivant les étapes suivantes :
1. Définir une classe Bibliothèque :
o Utilisez une HashMap pour stocker les livres. La clé sera la catégorie (String) et la
valeur sera une liste de livres (ArrayList<Livre>).
o Ajoutez une classe interne Livre pour représenter un livre avec :
titre (String)
auteur (String)
annee (int)
2. Implémenter les méthodes suivantes dans la classe Bibliothèque :
o ajouterLivre(String categorie, String titre, String auteur, int annee) : Ajoute un livre à
la catégorie spécifiée. Si la catégorie n’existe pas, elle doit être créée
automatiquement.
ENSA de Kenitra
Module : Programmation Java
2022/2023
Série 2 : Classes Internes/Génériques & Collection –GUI/JDBC-Junit
o afficherLivres() : Affiche tous les livres classés par catégorie.
o supprimerLivre(String categorie, String titre) : Supprime un livre spécifique d'une
catégorie.
o trierLivresParAnnee(String categorie) : Trie les livres d’une catégorie par année de
publication.
3. Créer une classe principale Main :
o Instanciez une bibliothèque.
o Ajoutez des livres dans différentes catégories.
o Affichez tous les livres.
o Supprimez un livre d’une catégorie, puis affichez à nouveau les livres.
o Triez les livres d’une catégorie par année et affichez les résultats.
Exercice 5 : GUI/JDBC/Scrapping
On souhaite développer une application pour la gestion des fiches étudiant
Un étudiant est une personne, définit par son CNE, Année d’étude et Filière
Une personne a un nom, prénom et une date de naissance (de type date)
L’administration de l’application effectue la saisie et la consultation des informations d’étudiant, et il
peut aussi générer un fichier contenant la liste des étudiants
Partie Conception :
- Elaborer le diagramme des cas d’utilisation, diagramme de classe et diagramme de
séquence
Partie Implémentation :
Partie 1 :
1) Implémenter les différents classes et méthodes prévues dans votre conception :
- Constructeur avec et sans argument
- Les getter/Setter
- ToString
- Afficher
- Les autres méthodes
2) Implémenter la notion de collection pour générer un fichier contenant la liste de plusieurs
étudiant
3) Tester votre application (Test OK)
Partie 2 :
ENSA de Kenitra
Module : Programmation Java
2022/2023
Série 2 : Classes Internes/Génériques & Collection –GUI/JDBC-Junit
Pour améliorer la sécurité de votre application, l’administration a un compte utilisateur avec son login
et mot de passe, il peut : Créer un compte et se connecter à l’application.
Le login devrait respecter la règle suivante : composé de 4 caractères (pas de chiffre) au minimum
Le mot de passe devrait respecter la règle :
- Composé de 8 symboles au minimum
- Le premier symbole est un caractère Majuscule
- Le reste des caractères peuvent être Alphanumérique
- Le dernier caractère est le : #
1) Revoir votre conception
2) Implémenter les expressions régulières pour tester le login et password
3) Implémenter les exceptions pour gérer les cas de non conformé des règles.
4) Implémenter une expression régulière avec la gestion de l’exception sur la date de
naissance des étudiants, qui devrait être au format : JJ/MM/AAAA, le nom et prénom
qui sont des caractères uniquement, le CNE qui devrait être un entier et l’année
d’étude qui est un entier entre 1 et 5.
5) Implémenter la consultation du contenu du fichier
6) Tester votre application (Test OK et KO)
Partie 3 :
L’administration souhaite améliorer de la convivialité de l’application, il vous demande de développer
des interfaces graphiques pour la saisie et consultation des informations des étudiants.
1) Développer l’interface graphique de saisie et consultation des informations des étudiants (avec
les contrôles et exception déjà implémenter)
2) Développer l’interface de connexion à l’application avec le login et password ((avec les
contrôles et exception déjà implémenter)
3) Ajouter un menu à votre application pour saisir, consulter et générer la liste des étudiants sous
forme d’un fichier texte
Partie 4 :
Le nombre des étudiants devient important, et l’administration souhaite que toute les informations
saisis devrait être stocker dans une base de donnée dans la table « Etudiant »
1) Implémenter la connexion à la base de donnée avec la gestion des exceptions
2) Implémenter l’intégration des données saisies dans la table « Etudiant »
3) Implémenter la consultation des données depuis la table « Etudiant »
4) Implémenter la génération du fichier des étudiants depuis la table « Etudiant »
Partie 5 :
1. Implémenter le Scraping de la page web contenant les informations sur les étudiants
2. Implémenter l’intégration de ces données dans la base de données
3. Implémenter un interface graphique pour consulter des graphiques par Année et par filière