# 🚗 Projet Gestion d'Agence de Location de Voitures Ce projet a été réalisé dans le cadre d'un mini-projet ING3 à l'ECE. Il consiste en la modélisation et l'implémentation d'un système complet de gestion d'une agence de location de véhicules, développé en Java orienté objet, avec une interface interactive en ligne de commande. --- ## 🎯 Objectifs du Projet - Modéliser une agence de location de véhicules à l'aide des principes de la **programmation orientée objet** (héritage, encapsulation, polymorphisme). - Gérer l'ensemble du cycle de vie d'une location : création, suivi, retour, annulation et pénalités de retard. - Offrir une **interface console interactive** permettant de gérer clients, véhicules et locations de manière intuitive. - Produire des **statistiques** sur l'activité de l'agence en temps réel. --- ## 🛠️ Fonctionnalités Implémentées ### 1. **Gestion des Clients** - Ajout, modification et suppression de clients. - Recherche par identifiant ou par nom. - Affichage formaté de la fiche client (nom, prénom, téléphone, email, numéro de permis). ### 2. **Gestion des Véhicules** - Trois types de véhicules supportés : - 🚘 **Voiture** : nombre de portes, type de carburant. - 🏍️ **Moto** : cylindrée, type de moto. - 🚚 **Utilitaire** : charge maximale, volume de cargo. - Ajout, suppression et recherche par ID ou par marque. - Affichage de la disponibilité en temps réel. - Tri par prix, marque ou année. ### 3. **Gestion des Locations** - Création d'une location avec sélection du véhicule, du client et des dates. - Calcul automatique du **prix total** basé sur la durée et le tarif journalier. - Gestion des **retards** avec calcul de pénalité (×1.5 par jour de retard). - Retour de véhicule avec mise à jour automatique du statut. - Annulation de location. - Consultation des locations en cours et de l'historique par client. ### 4. **Statuts de Location** Chaque location est associée à l'un des quatre statuts suivants : | Statut | Description | |---|---| | `EN_COURS` | Location active | | `TERMINEE` | Véhicule rendu dans les délais | | `EN_RETARD` | Véhicule rendu avec retard | | `ANNULEE` | Location annulée avant le retour | ### 5. **Tableau de Bord Statistique** - Nombre total de véhicules et taux de disponibilité. - Nombre de locations effectuées. - Taux d'occupation de la flotte. - Revenu total généré (hors annulations). - Véhicule le plus loué et client le plus fidèle. --- ## 📐 Architecture du Projet ``` src/ ├── Main.java ← Interface console (menus et sous-menus) ├── AgenceLocation.java ← Classe centrale de gestion ├── Client.java ← Gestion des clients ├── Vehicule.java ← Classe abstraite véhicule ├── Voiture.java ← Sous-classe voiture ├── moto.java ← Sous-classe moto ├── Utilitaire.java ← Sous-classe utilitaire ├── Location.java ← Modèle d'une location ├── StatutLocation.java ← Enumération des statuts └── Statistiques.java ← Calcul et affichage des stats ``` ### Diagramme UML simplifié ``` AgenceLocation ├── ArrayList │ ├── Voiture │ ├── moto │ └── Utilitaire ├── ArrayList └── ArrayList ├── Vehicule ├── Client └── StatutLocation ``` --- ## 🚀 Technologies Utilisées - **Langage** : Java 21+ - **Bibliothèques** : Java standard uniquement (`java.util`, `java.time`) - **Paradigme** : Programmation Orientée Objet (héritage, polymorphisme, encapsulation) - **Interface** : Console (ligne de commande) --- ## ▶️ Comment Lancer le Projet ### Prérequis - [Java 21+](https://www.oracle.com/java/technologies/downloads/) installé sur votre machine. ### Étapes 1. **Clonez le dépôt** : ```bash git clone https://github.com/votre-repo/projet-location.git cd projet-location ``` 2. **Compilez les sources** : ```bash javac --enable-preview --release 21 -d out src/*.java ``` 3. **Lancez le programme** : ```bash java --enable-preview -cp out Main ``` 4. **Naviguez dans les menus** : ``` ╔══════════════════════════════════════╗ ║ SYSTÈME DE LOCATION DE VOITURES ║ ╠══════════════════════════════════════╣ ║ 1. Gestion des clients ║ ║ 2. Gestion des véhicules ║ ║ 3. Gestion des locations ║ ║ 4. Statistiques ║ ║ 0. Quitter ║ ╚══════════════════════════════════════╝ ``` --- ## 📧 Contact Pour toute question ou suggestion, veuillez contacter l'un des membres de l'équipe : - Célestin Guilhen : [celestin.guilhen@edu.ece.fr](mailto:celestin.guilhen@edu.ece.fr) - Titouan Faugue : [titouan.faugue@edu.ece.fr](mailto:titouan.faugue@edu.ece.fr) --- *Projet réalisé dans le cadre du cours ING3 — ECE* 🎓