Révision de Gestion d'Agence de Location de Voitures
Ce matériel couvre la conception et l'implémentation d'une solution de gestion pour une agence de location de voitures. Il s'adresse aux étudiants en informatique ou en génie logiciel souhaitant apprendre à modéliser un système orienté objet avec des classes, interfaces, collections et méthodes de tri.
D'après le document Révision de Gestion d'Agence de Location de Voitures
Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.
Document source
Programmation, Mathématiques, Gestion · PDF · 6 pages
Afficher l'aperçu du document
Ce matériel couvre la conception et l'implémentation d'une solution de gestion pour une agence de location de voitures. Il s'adresse aux étudiants en informatique ou en génie logiciel souhaitant apprendre à modéliser un système orienté objet avec des classes, interfaces, collections et méthodes de tri.
Modélisation des classes principales
Le système comprend trois classes principales : Voiture, Client et Agence.
Classe Voiture
Une voiture est caractérisée par :
- un numéro d'immatriculation (int)
- une marque (String)
- un prix de location (float)
Deux voitures sont considérées égales si elles ont la même immatriculation et la même marque.
public class Voiture {
private int immatriculation;
private String marque;
private float prixLocation;
public Voiture(int immatriculation, String marque, float prixLocation) {
this.immatriculation = immatriculation;
this.marque = marque;
this.prixLocation = prixLocation;
}
public int getImmatriculation() {
return immatriculation;
}
public void setImmatriculation(int immatriculation) {
this.immatriculation = immatriculation;
}
public String getMarque() {
return marque;
}
public void setMarque(String marque) {
this.marque = marque;
}
public float getPrixLocation() {
return prixLocation;
}
public void setPrixLocation(float prixLocation) {
this.prixLocation = prixLocation;
}
@Override
public int hashCode() {
return immatriculation * 31 + (marque == null ? 0 : marque.hashCode());
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Voiture other = (Voiture) obj;
return immatriculation == other.immatriculation &&
(marque == null ? other.marque == null : marque.equals(other.marque));
}
@Override
public String toString() {
return "Voiture{" +
"immatriculation=" + immatriculation +
", marque='" + marque + '\'' +
", prixLocation=" + prixLocation +
'}';
}
}
Classe Client
Un client est défini par :
- un code (int)
- un nom (String)
- un prénom (String)
Deux clients sont égaux s'ils ont le même code.
public class Client {
private int code;
private String nom;
private String prenom;
public Client(int code, String nom, String prenom) {
this.code = code;
this.nom = nom;
this.prenom = prenom;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
@Override
public int hashCode() {
return code;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Client other = (Client) obj;
return code == other.code;
}
@Override
public String toString() {
return "Client{" +
"code=" + code +
", nom='" + nom + '\'' +
", prenom='" + prenom + '\'' +
'}';
}
}
Gestion des collections de voitures
Classe ListVoitures
Cette classe permet de gérer une liste de voitures. Elle offre des méthodes pour :
- ajouter une voiture
- supprimer une voiture
- afficher la liste des voitures
public class ListVoitures {
private List<Voiture> voitures;
public ListVoitures() {
voitures = new ArrayList<>();
}
public ListVoitures(List<Voiture> voitures) {
this.voitures = voitures;
}
public List<Voiture> getVoitures() {
return voitures;
}
public void setVoitures(List<Voiture> voitures) {
this.voitures = voitures;
}
public void ajouterVoiture(Voiture v) {
if (!voitures.contains(v)) {
voitures.add(v);
}
}
public void supprimerVoiture(Voiture v) {
voitures.remove(v);
}
public void afficher() {
for (Voiture v : voitures) {
System.out.println(v);
}
}
}
Sélection des voitures selon des critères
Pour permettre aux clients de choisir des voitures selon différents critères, on définit une interface Critere :
public interface Critere {
boolean estSatisfaitPar(Voiture v);
}
Critère selon la marque
public class CritereMarque implements Critere {
private String marque;
public CritereMarque(String marque) {
this.marque = marque;
}
@Override
public boolean estSatisfaitPar(Voiture v) {
return v.getMarque().equalsIgnoreCase(marque);
}
}
Critère selon le prix
public class CriterePrix implements Critere {
private float prix;
public CriterePrix(float prix) {
this.prix = prix;
}
@Override
public boolean estSatisfaitPar(Voiture v) {
return v.getPrixLocation() <= prix;
}
}
Exemple d'utilisation des critères
Supposons que l'on souhaite sélectionner toutes les voitures de marque "Toyota" dont le prix est inférieur ou égal à 50.0 :
ListVoitures toutesVoitures = new ListVoitures();
// ... ajout de voitures dans toutesVoitures ...
Critere critereMarque = new CritereMarque("Toyota");
Critere criterePrix = new CriterePrix(50.0f);
ListVoitures selectionMarque = new ListVoitures();
for (Voiture v : toutesVoitures.getVoitures()) {
if (critereMarque.estSatisfaitPar(v)) {
selectionMarque.ajouterVoiture(v);
}
}
ListVoitures selectionPrix = new ListVoitures();
for (Voiture v : selectionMarque.getVoitures()) {
if (criterePrix.estSatisfaitPar(v)) {
selectionPrix.ajouterVoiture(v);
}
}
selectionPrix.afficher();
Classe Agence
L'agence est caractérisée par :
- un nom (String)
- un parking de type
ListVoiturespour stocker les voitures disponibles - une map
ClientVoitureLouede typeMap<Client, ListVoitures>pour enregistrer les voitures louées par chaque client
Les principales fonctionnalités sont :
- louer une voiture à un client
- retourner une voiture louée par un client
- retourner la liste des voitures selon un critère
- retourner l'ensemble des clients ayant loué une ou plusieurs voitures
- afficher les clients et leurs voitures louées
- trier les clients selon leur code ou leur nom
public class Agence {
private String nom;
private ListVoitures vs; // voitures disponibles
private Map<Client, ListVoitures> ClientVoitureLoue;
public Agence(String nom) {
this.nom = nom;
this.vs = new ListVoitures();
this.ClientVoitureLoue = new HashMap<>();
}
public void ajoutVoiture(Voiture v) throws VoitureException {
if (vs.getVoitures().contains(v)) {
throw new VoitureException("Voiture déjà présente");
}
vs.ajouterVoiture(v);
}
public void suppVoiture(Voiture v) throws VoitureException {
if (!vs.getVoitures().contains(v)) {
throw new VoitureException("Voiture non trouvée");
}
vs.supprimerVoiture(v);
}
public void loueClientVoiture(Client cl, Voiture v) throws VoitureException {
if (!vs.getVoitures().contains(v)) {
throw new VoitureException("Voiture non disponible");
}
vs.supprimerVoiture(v);
ListVoitures voituresLouees = ClientVoitureLoue.getOrDefault(cl, new ListVoitures());
voituresLouees.ajouterVoiture(v);
ClientVoitureLoue.put(cl, voituresLouees);
}
public void retourClientVoiture(Client cl, Voiture v) throws VoitureException {
ListVoitures voituresLouees = ClientVoitureLoue.get(cl);
if (voituresLouees == null || !voituresLouees.getVoitures().contains(v)) {
throw new VoitureException("Voiture non louée par ce client");
}
voituresLouees.supprimerVoiture(v);
if (voituresLouees.getVoitures().isEmpty()) {
ClientVoitureLoue.remove(cl);
} else {
ClientVoitureLoue.put(cl, voituresLouees);
}
vs.ajouterVoiture(v);
}
public List<Voiture> selectVoitureSelonCritere(Critere c) {
List<Voiture> selection = new ArrayList<>();
for (Voiture v : vs.getVoitures()) {
if (c.estSatisfaitPar(v)) {
selection.add(v);
}
}
return selection;
}
public Set<Client> ensembleClientsLoueurs() {
return ClientVoitureLoue.keySet();
}
public Collection<ListVoitures> collectionVoituresLouees() {
return ClientVoitureLoue.values();
}
public void afficheLesClientsEtLeursListesVoitures() {
for (Map.Entry<Client, ListVoitures> entry : ClientVoitureLoue.entrySet()) {
System.out.println(entry.getKey());
entry.getValue().afficher();
}
}
public Map<Client, ListVoitures> triCodeCroissant() {
Map<Client, ListVoitures> tri = new TreeMap<>(Comparator.comparingInt(Client::getCode));
tri.putAll(ClientVoitureLoue);
return tri;
}
public Map<Client, ListVoitures> triNomCroissant() {
Map<Client, ListVoitures> tri = new TreeMap<>(Comparator.comparing(Client::getNom));
tri.putAll(ClientVoitureLoue);
return tri;
}
}
Exemple d'utilisation de la classe Agence
Agence agence = new Agence("Agence Centrale");
// Ajout de voitures
agence.ajoutVoiture(new Voiture(1234, "Toyota", 45.0f));
agence.ajoutVoiture(new Voiture(5678, "Ford", 50.0f));
// Création d'un client
Client client1 = new Client(1, "Dupont", "Jean");
// Location d'une voiture
agence.loueClientVoiture(client1, new Voiture(1234, "Toyota", 45.0f));
// Affichage des clients et leurs voitures louées
agence.afficheLesClientsEtLeursListesVoitures();
Glossaire des termes clés
- Voiture : Entité représentant un véhicule avec immatriculation, marque et prix de location.
- Client : Personne caractérisée par un code unique, un nom et un prénom.
- ListVoitures : Classe gérant une collection de voitures avec ajout, suppression et affichage.
- Critere : Interface définissant un critère de sélection de voitures.
- CritereMarque : Critère de sélection basé sur la marque d'une voiture.
- CriterePrix : Critère de sélection basé sur le prix de location d'une voiture.
- Agence : Classe représentant l'agence de location, gérant les voitures disponibles et les locations par client.
- Map<Client, ListVoitures> : Structure associant chaque client à la liste des voitures qu'il loue.
- VoitureException : Exception levée en cas d'erreur liée à la gestion des voitures.
Points clés à retenir
- La modélisation orientée objet permet de structurer clairement les entités et leurs relations dans une agence de location.
- La gestion des collections est facilitée par des classes dédiées comme
ListVoitureset l'utilisation deMappour associer clients et voitures louées. - L'interface
Criterepermet de définir des filtres flexibles pour la sélection des voitures. - Les méthodes de tri permettent d'organiser les données clients selon différents attributs (code, nom).
- La gestion des exceptions est importante pour garantir la cohérence des opérations de location et retour de voitures.
Commentaires
Aucun commentaire pour le moment. Posez la première question.