---
# System prepended metadata

title: Projet UML

---

# Projet UML

## Diagramme global
```plantuml

enum Etat <<enumeration>> {
    VALIDE
    ELIMINEE
    ANNULEE
    TERMINEE
}

class VehiculeAssistance {
    -id : int
    -immatriculation : String
    +getId()
    +setId()
    +getImmatriculation()
    +setImmatriculation()
    +afficherChauffeur(nom : String, prenom : String, numeroPermis : int)
    +ajouterChauffeur(chauffeur : Chauffeur)
    +afficherImmatriculationChauffeur()
   
}

class Chauffeur {
    -id : int
    -nom : String
    -prenom : String
    -numPermis : int
    +getId()
    +setId()
    +getNom()
    +setNom()
    +getPrenom()
    +setPrenom()
    +getNumPermis()
    +setNumPermis()
}

class Equipe {
    -id : int
    -nomResponsable :String
    -prenomResponsable : String
    -mailResponsable : String
    -telResponsable : String
    -nationnalite : String
    -nomEquipe : String
    +getId()
    +setId()
    +getNomResponsable()
    +setNomResponsable()
    +getPrenomResponsable()
    +setPrenomResponsable()
    +getMailResponsable()
    +setMailResponsable()
    +getTelResponsable()
    +setTelResponsable()
    +getNationnalite()
    +setNationnalite()
    +getNomEquipe()
    +setNomEquipe()
    +afficherCoureurs()
    +ajouterParticipation(edition: Edition)
    +afficherParticipations()
    +nombreVictoire()
    +nombreParticipation()
}

class ParticipationEquipe {
    -numInscription : int
    -etatParticipation : Etat
    +getNumInscription()
    +setNumInscription()
    +getEtatParticipation()
    +setEtatParticipation()
    +supprimerParticipation(ParticipationEquipe participationEquipe, Participation participation)
    +ajouterCoureur(coureur : Coureur)
    +ajouterVehicule(immatriculation, nom, prenom, numeroPermis)
    +afficherCoureurs()
    +afficherCourse()
    +afficherListeVehicules()
    +modifierCoureur(coureur : Coureur, numCoureur : int)
    +annulerParticipation(ParticipationEquipe participationEquipe)
    +eliminerEquipe(ParticipationEquipe participationEquipe)
    +supprimerCoureur()
    +listeEditions()
    +victoireParticipation()
}

class Coureur {
    -id : int
    -nom : String
    -prenom : String
    -dateNaissance : Date
    -groupeSanguin : String
    +getId()
    +setId()
    +getNom()
    +setNom()
    +getPrenom()
    +setPrenom()
    +getDateNaissance()
    +setDateNaissance()
    +getGroupeSanguin()
    +setGroupeSanguin()
    +coureursParNom()
    +rechercherCoureur(nom : String, prenom : String)
    +ajouterParticipation(edition : Edition, nomEquipe : String)
    +afficherParticipations()
    
}

class Participation {
    -numInscription : int
    -etatParticipation : Etat
    +getNumInscription()
    +setNumInscription()
    +getEtatParticipation()
    +setEtatParticipation() 
    +annulerParticipation(Participation participation)
    +modifierInscription(nomEquipe : String)
    +eliminerParticipant(Participation participation)
    +changerEquipeParticipation(Participation participation, ParticipationEquipe participationEquipe)
}

class Course {
    -id : int
    -nom : String
    +getId()
    +setId()
    +getNom()
    +setNom()  
    +afficherEdition(int annee, Date dateDebut, Date dateFin)
    +coursesParNom()
    +courseParId(Integer id)
    +afficherListesEditions()
    +creerEdition(annee : int, dateDebut : date, dateFin : date, villeDepart : String, villeArrivee : String)
    +rechercherCourse(nomCourse : String)
    +recupererListesEditions()
}

class Edition {
    -id : int
    -annee : int
    -dateDebut : Date
    -dateFin : Date
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -annulee : boolean
    +getId()
    +setId()
    +getAnnee()
    +setAnnee()
    +getDateDebut()
    +setDateDebut()
    +getDateFin()
    +setDateFin()
    +getVilleDepart()
    +setVilleDepart()
    +getVilleArrivee()
    +setVilleArrivee()
    +getPaysDepart()
    +setPaysDepart()
    +getPaysArrivee()
    +setPaysArrivee()
    +getDistance()
    +setDistance()
    +getAnnulee()
    +setAnnulee()
    +participationsEdition(Edition edition) 
    +participationsEditionJeunes(Edition edition) 
    +meilleurJeune(Edition edition) 
    +meilleurTemps(Map<Coureur, Float> participations) 
    +meilleurGrimpeur(Edition edition) 
    +meilleurSprinteur(Edition edition)
    +meilleurCoureur(List<Participation> participations, Function<Performance, Integer> critere)
    +meilleurePerformance(Map<Coureur, Integer> participations)
    +calculerPerformance(List<Participation> participations, Function<Performance, Integer> critere) 
    +calculerSommeTemps(List<Participation> participations, Function<Performance, Float> critere)
    +etablirClassementEquipe()
    +etablirClassemenGeneral()
    +afficherCoureurs()
    +afficherEquipes()
    +afficherEtapes()
    +ajouterEtape(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String, distance : float, numOrdre : int) 
    +annulerEdition()
    +recupererMeilleurSprinteur()
    +recupererMeilleurGrimpeur()
    +recupererMeilleurJeune()
    +tempsMoyenCoureur()
    +afficherPlusLongueCourse()
}

class Etape {
    -id : int
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -numOrdre : int
    -etatEtape : EtatEtape
    +getId()
    +setId()
    +getVilleDepart()
    +setVilleDepart()
    +getVilleArrivee()
    +setVilleArrivee()
    +getPaysDepart()
    +setPaysDepart()
    +getPaysArrivee()
    +setPaysArrivee()
    +getDistance()
    +setDistance()
    +getNumOrdre()
    +setNumOrdre()
    +getEtatEtape()
    +setEtatEtape()
    +etablirClassementEtape()
    +annulerEtape()
    +cloturerEtape()
    +lancerEtape() 
    +tempsMoyenCoureurEtape()
    +recupererDistance()
}

enum EtatEtape {
    LANCEE
    CLOTUREE
    ATTENTE
    ANNULEE
}

class Performance {
    -id : int
    -temps : float
    -pointSprint : int
    -pointGrimp : int
    +getId()
    +setId()
    +getTemps()
    +setTemps()
    +getPointSprint()
    +setPointSprint()
    +getPointGrimp()
    +setPointGrimp()
    +ajouterPointSprint(Performance performance, int pointsSprint)
    +ajouterPointGrimp(Performance performance, int pointsGrimp)
    +ajouterTemps(Performance performance, float delta)
    
}

Edition "1..*" --* Course
Edition  *-- "1..*" Etape
Participation "1..*" -- "1..1" Edition
Participation "1..*" -- "1..1" Coureur
ParticipationEquipe "1..*" -- "1..1" Equipe
ParticipationEquipe "1..*" -- "1..1" Edition
ParticipationEquipe "1..1" -- "4" VehiculeAssistance
VehiculeAssistance "1..*" --* Chauffeur
Performance "0..*" -- "1..1" Participation
Performance "0..*" -- "1..1" Etape
Etat <|-- Participation
Etat <|-- ParticipationEquipe
EtatEtape <|-- Etape
```
## Diagramme de classe : Gestion classement
```plantuml
enum Etat <<enumeration>> {
    VALIDE
    ELIMINEE
    ANNULEE
    TERMINEE
}

class Equipe {
    -nomResponsable :String
    -prenomResponsable : String
    -mailResponsable : String
    -telResponsable : String
    -nationnalite : String
    -nomEquipe : String
    +afficherCoureurs()
    +afficherNom()
    +ajouterParticipation(edition: Edition)
    +afficherParticipations()
    +nombreVictoire()
    +nombreParticipation()
    +rechercherEquipe(nomEquipe : String)
    +afficherNomResponsable()
    +afficherNationalite()
}

class ParticipationEquipe {
    -numInscription : int
    -etatParticipation : Etat
    -coureurs : list
    +ajouterCoureur(coureur : Coureur)
    +ajouterVehicule(immatriculation, nom, prenom, numeroPermis)
    +afficherCoureurs()
    +afficherCourse()
    +afficherListeVehicules()
    +modifierCoureur(coureur : Coureur, numCoureur : int)
    +annulerParticipation()
    +eliminerEquipe()
    +supprimerCoureur()
    +init()
    +listeEditions()
    +victoireParticipation()
}

class Coureur {
    -nom : String
    -prenom : String
    -dateNaissance : Date
    -groupeSanguin : String
    +afficherInformations()
    +recupererNom()
    +rechercherCoureur(nom : String, prenom : String)
    +ajouterParticipation(edition : Edition, nomEquipe : String)
    +afficherParticipations()
    +recupererDateNaissance()
}

class Participation {
    -numInscription : int
    -etatParticipation : Etat
    -nomEquipe : String
    +afficherInformations()
    +annulerParticipation()
    +init(nomEquipe : String)
    +modifierInscription(nomEquipe : String)
    +eliminerParticipant()
}

class Course {
    -nom : String
    +afficherNom() check
    +afficherEdition(int annee, Date dateDebut, Date dateFin)
    +afficherListesEditions()
    +ajouterEdition(annee : int, dateDebut : date, dateFin : date, villeDepart : String, villeArrivee : String)
    +rechercherCourse(nomCourse : String)
    +init(nom : String)
    +recupererListesEditions()
}

class Edition {
    -annee : int
    -dateDebut : Date
    -dateFin : Date
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -annulee : boolean
    +etablirClassementEquipe()
    +etablirClassemenGeneral()
    +afficherCoureurs()
    +afficherEquipes()
    +afficherEtapes()
    +ajouterEtape(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String, distance : float, numOrdre : int) 
    +modifierInformations(annee : int, dateDebut : Date, villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String )
    +annulerEdition()
    +afficherInformations()
    +recupererMeilleurSprinteur()
    +recupererMeilleurGrimpeur()
    +recupererMeilleurJeune()
    +init(annee : int, dateDebut : date, dateFin : date, paysDepart : String, paysArrivee : String)
    +tempsMoyenCoureur()
    +afficherPlusLongueCourse()
}

class Etape {
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -numOrdre : int
    -etatEtape : EtatEtape
    +etablirClassementEtape()
    +annulerEtape()
    +cloturerEtape()
    +lancerEtape() 
    +afficherInformations()
    +init(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee, distance : float, numOrdre : int)
    +tempsMoyenCoureurEtape()
    +recupererDistance()
}

enum EtatEtape {
    LANCEE
    CLOTUREE
    ATTENTE
    ANNULEE
}

class Performance {
    -temps : float
    -pointSprint : int
    -pointGrimp : int
    +recupererTemps()
    +recupererPointSprint()
    +recupererPointGrimp()
    +ajouterPointSprint()
    +ajouterPointGrimp()
    +ajouterTemps()
    +init()
}

Edition "1..*" --* Course
Edition  *-- "1..*" Etape
Participation "1..*" -- "1..1" Edition
Participation "1..*" -- "1..1" Coureur
ParticipationEquipe "1..*" -- "1..1" Equipe
ParticipationEquipe "1..*" -- "1..1" Edition
Performance "0..*" -- "1..1" Participation
Performance "0..*" -- "1..1" Etape
Etat <|-- Participation
Etat <|-- ParticipationEquipe
EtatEtape <|-- Etape
```

## Diagramme de classe : Gestion Equipe
```plantuml

enum Etat <<enumeration>> {
    VALIDE
    ELIMINEE
    ANNULEE
    TERMINEE
}

class VehiculeAssistance {
    -immatriculation : String
    +afficherChauffeur(nom : String, prenom : String, numeroPermis : int)
    +ajouterChauffeur(chauffeur : Chauffeur)
    +afficherImmatriculationChauffeur()
    +init(immatriculation : String, nom: String, prenom : String, numeroPermis : int)
}

class Chauffeur {
    -nom : String
    -prenom : String
    -numPermis : int
    +afficherChauffeur()
    +init(nom, prenom, numero permis)
}

class Equipe {
    -nomResponsable :String
    -prenomResponsable : String
    -mailResponsable : String
    -telResponsable : String
    -nationnalite : String
    -nomEquipe : String
    +afficherCoureurs()
    +afficherNom()
    +ajouterParticipation(edition: Edition)
    +afficherParticipations()
    +nombreVictoire()
    +nombreParticipation()
    +rechercherEquipe(nomEquipe : String)
    +afficherNomResponsable()
    +afficherNationalite()
}

class ParticipationEquipe {
    -numInscription : int
    -etatParticipation : Etat
    -coureurs : list
    +ajouterCoureur(coureur : Coureur)
    +ajouterVehicule(immatriculation, nom, prenom, numeroPermis)
    +afficherCoureurs()
    +afficherCourse()
    +afficherListeVehicules()
    +modifierCoureur(coureur : Coureur, numCoureur : int)
    +annulerParticipation()
    +eliminerEquipe()
    +supprimerCoureur()
    +init()
    +listeEditions()
    +victoireParticipation()
}

class Coureur {
    -nom : String
    -prenom : String
    -dateNaissance : Date
    -groupeSanguin : String
    +afficherInformations()
    +recupererNom()
    +rechercherCoureur(nom : String, prenom : String)
    +ajouterParticipation(edition : Edition, nomEquipe : String)
    +afficherParticipations()
    +recupererDateNaissance()
}

class Participation {
    -numInscription : int
    -etatParticipation : Etat
    -nomEquipe : String
    +afficherInformations()
    +annulerParticipation()
    +init(nomEquipe : String)
    +modifierInscription(nomEquipe : String)
    +eliminerParticipant()
}

class Edition {
    -annee : int
    -dateDebut : Date
    -dateFin : Date
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -annulee : boolean
    +etablirClassementEquipe()
    +etablirClassemenGeneral()
    +afficherCoureurs()
    +afficherEquipes()
    +afficherEtapes()
    +ajouterEtape(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String, distance : float, numOrdre : int) 
    +modifierInformations(annee : int, dateDebut : Date, villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String )
    +annulerEdition()
    +afficherInformations()
    +recupererMeilleurSprinteur()
    +recupererMeilleurGrimpeur()
    +recupererMeilleurJeune()
    +init(annee : int, dateDebut : date, dateFin : date, paysDepart : String, paysArrivee : String)
    +tempsMoyenCoureur()
    +afficherPlusLongueCourse()
}


Participation "1..*" -- "1..1" Edition
Participation "1..*" -- "1..1" Coureur
ParticipationEquipe "1..*" -- "1..1" Equipe
ParticipationEquipe "1..*" -- "1..1" Edition
ParticipationEquipe "1..1" -- "4" VehiculeAssistance
VehiculeAssistance "1..*" --* Chauffeur
Etat <|-- Participation
Etat <|-- ParticipationEquipe
```

## Diagramme de classe : Gestion Coureur
```plantuml
enum Etat <<enumeration>> {
    VALIDE
    ELIMINEE
    ANNULEE
    TERMINEE
}

class Coureur {
    -nom : String
    -prenom : String
    -dateNaissance : Date
    -groupeSanguin : String
    +afficherInformations()
    +recupererNom()
    +rechercherCoureur(nom : String, prenom : String)
    +ajouterParticipation(edition : Edition, nomEquipe : String)
    +afficherParticipations()
    +recupererDateNaissance()
}

class Participation {
    -numInscription : int
    -etatParticipation : Etat
    -nomEquipe : String
    +afficherInformations()
    +annulerParticipation()
    +init(nomEquipe : String)
    +modifierInscription(nomEquipe : String)
    +eliminerParticipant()
}

class Edition {
    -annee : int
    -dateDebut : Date
    -dateFin : Date
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -annulee : boolean
    +etablirClassementEquipe()
    +etablirClassemenGeneral()
    +afficherCoureurs()
    +afficherEquipes()
    +afficherEtapes()
    +ajouterEtape(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String, distance : float, numOrdre : int) 
    +modifierInformations(annee : int, dateDebut : Date, villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String )
    +annulerEdition()
    +afficherInformations()
    +recupererMeilleurSprinteur()
    +recupererMeilleurGrimpeur()
    +recupererMeilleurJeune()
    +init(annee : int, dateDebut : date, dateFin : date, paysDepart : String, paysArrivee : String)
    +tempsMoyenCoureur()
    +afficherPlusLongueCourse()
}

Participation "1..*" -- "1..1" Edition
Participation "1..*" -- "1..1" Coureur
Etat <|-- Participation
```

## Diagramme de classe : Gestion Course
```plantuml

class Course {
    -nom : String
    +afficherNom()
    +afficherEdition(int annee, Date dateDebut, Date dateFin)
    +afficherListesEditions()
    +ajouterEdition(annee : int, dateDebut : date, dateFin : date, villeDepart : String, villeArrivee : String)
    +rechercherCourse(nomCourse : String)
    +init(nom : String)
    +recupererListesEditions()
}

class Edition {
    -annee : int
    -dateDebut : Date
    -dateFin : Date
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -annulee : boolean
    +etablirClassementEquipe()
    +etablirClassemenGeneral()
    +afficherCoureurs()
    +afficherEquipes()
    +afficherEtapes()
    +ajouterEtape(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String, distance : float, numOrdre : int) 
    +modifierInformations(annee : int, dateDebut : Date, villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String )
    +annulerEdition()
    +afficherInformations()
    +recupererMeilleurSprinteur()
    +recupererMeilleurGrimpeur()
    +recupererMeilleurJeune()
    +init(annee : int, dateDebut : date, dateFin : date, paysDepart : String, paysArrivee : String)
    +tempsMoyenCoureur()
    +afficherPlusLongueCourse()
}

class Etape {
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -numOrdre : int
    -etatEtape : EtatEtape
    +etablirClassementEtape()
    +annulerEtape()
    +cloturerEtape()
    +lancerEtape() 
    +afficherInformations()
    +init(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee, distance : float, numOrdre : int)
    +tempsMoyenCoureurEtape()
    +recupererDistance()
}

enum EtatEtape {
    LANCEE
    CLOTUREE
    ATTENTE
    ANNULEE
}

Edition "1..*" --* Course
Edition  *-- "1..*" Etape
EtatEtape <|-- Etape
```


## Diagramme de classe : Analyse de donnée
```plantuml
enum Etat <<enumeration>> {
    VALIDE
    ELIMINEE
    ANNULEE
    TERMINEE
}

class Equipe {
    -nomResponsable :String
    -prenomResponsable : String
    -mailResponsable : String
    -telResponsable : String
    -nationnalite : String
    -nomEquipe : String
    +afficherCoureurs()
    +afficherNom()
    +ajouterParticipation(edition: Edition)
    +afficherParticipations()
    +nombreVictoire()
    +nombreParticipation()
    +rechercherEquipe(nomEquipe : String)
    +afficherNomResponsable()
    +afficherNationalite()
}

class ParticipationEquipe {
    -numInscription : int
    -etatParticipation : Etat
    -coureurs : list
    +ajouterCoureur(coureur : Coureur)
    +ajouterVehicule(immatriculation, nom, prenom, numeroPermis)
    +afficherCoureurs()
    +afficherCourse()
    +afficherListeVehicules()
    +modifierCoureur(coureur : Coureur, numCoureur : int)
    +annulerParticipation()
    +eliminerEquipe()
    +supprimerCoureur()
    +init()
    +listeEditions()
    +victoireParticipation()
}

class Coureur {
    -nom : String
    -prenom : String
    -dateNaissance : Date
    -groupeSanguin : String
    +afficherInformations()
    +recupererNom()
    +rechercherCoureur(nom : String, prenom : String)
    +ajouterParticipation(edition : Edition, nomEquipe : String)
    +afficherParticipations()
    +recupererDateNaissance()
}

class Participation {
    -numInscription : int
    -etatParticipation : Etat
    -nomEquipe : String
    +afficherInformations()
    +annulerParticipation()
    +init(nomEquipe : String)
    +modifierInscription(nomEquipe : String)
    +eliminerParticipant()
}

class Course {
    -nom : String
    +afficherNom() check
    +afficherEdition(int annee, Date dateDebut, Date dateFin)
    +afficherListesEditions()
    +ajouterEdition(annee : int, dateDebut : date, dateFin : date, villeDepart : String, villeArrivee : String)
    +rechercherCourse(nomCourse : String)
    +init(nom : String)
    +recupererListesEditions()
}

class Edition {
    -annee : int
    -dateDebut : Date
    -dateFin : Date
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -annulee : boolean
    +etablirClassementEquipe()
    +etablirClassemenGeneral()
    +afficherCoureurs()
    +afficherEquipes()
    +afficherEtapes()
    +ajouterEtape(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String, distance : float, numOrdre : int) 
    +modifierInformations(annee : int, dateDebut : Date, villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String )
    +annulerEdition()
    +afficherInformations()
    +recupererMeilleurSprinteur()
    +recupererMeilleurGrimpeur()
    +recupererMeilleurJeune()
    +init(annee : int, dateDebut : date, dateFin : date, paysDepart : String, paysArrivee : String)
    +tempsMoyenCoureur()
    +afficherPlusLongueCourse()
}

class Etape {
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -numOrdre : int
    -etatEtape : EtatEtape
    +etablirClassementEtape()
    +annulerEtape()
    +cloturerEtape()
    +lancerEtape() 
    +afficherInformations()
    +init(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee, distance : float, numOrdre : int)
    +tempsMoyenCoureurEtape()
    +recupererDistance()
}

enum EtatEtape {
    LANCEE
    CLOTUREE
    ATTENTE
    ANNULEE
}

class Performance {
    -temps : float
    -pointSprint : int
    -pointGrimp : int
    +recupererTemps()
    +recupererPointSprint()
    +recupererPointGrimp()
    +ajouterPointSprint()
    +ajouterPointGrimp()
    +ajouterTemps()
    +init()
}

Edition "1..*" --* Course
Edition  *-- "1..*" Etape
Participation "1..*" -- "1..1" Edition
Participation "1..*" -- "1..1" Coureur
ParticipationEquipe "1..*" -- "1..1" Equipe
ParticipationEquipe "1..*" -- "1..1" Edition
Performance "0..*" -- "1..1" Participation
Performance "0..*" -- "1..1" Etape
Etat <|-- Participation
Etat <|-- ParticipationEquipe
EtatEtape <|-- Etape
```


## Diagramme de classe : Gestion de données 
```plantuml
class VehiculeAssistance {
    -immatriculation : String
}

class Chauffeur {
    -nom : String
    -prenom : String
    -numPermis : int
}

class Equipe {
    -nomResponsable :String
    -prenomResponsable : String
    -mailResponsable : String
    -telResponsable : String
    -nationnalite : String
    -nomEquipe : String
}

class Coureur {
    -nom : String
    -prenom : String
    -dateNaissance : Date
    -groupeSanguin : String
}

class Course {
    -nom : String
}

class Edition {
    -annee : int
    -dateDebut : Date
    -dateFin : Date
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -annulee : boolean
}

class Etape {
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -numOrdre : int
}


VehiculeAssistance "1..*" --* Chauffeur
Edition "1..*" --* Course
Edition  *-- "1..*" Etape
```

## MCD MODIFIE

```plantuml

enum Etat <<enumeration>> {
    VALIDE
    ELIMINEE
    ANNULEE
    TERMINEE
}

class VehiculeAssistance {
    -immatriculation : String
    +afficherChauffeur(nom : String, prenom : String, numeroPermis : int)
    +ajouterChauffeur(chauffeur : Chauffeur)
    +afficherImmatriculationChauffeur()
    +init(immatriculation : String, nom: String, prenom : String, numeroPermis : int)
}

class Chauffeur {
    -nom : String
    -prenom : String
    -numPermis : int
    +afficherChauffeur()
    +init(nom, prenom, numero permis)
}

class Equipe {
    -nomResponsable :String
    -prenomResponsable : String
    -mailResponsable : String
    -telResponsable : String
    -nationnalite : String
    -nomEquipe : String
    +afficherCoureurs()
    +afficherNom()
    +ajouterParticipation(edition: Edition)
    +afficherParticipations()
    +nombreVictoire()
    +nombreParticipation()
    +rechercherEquipe(nomEquipe : String)
    +afficherNomResponsable()
    +afficherNationalite()
}

class ParticipationEquipe {
    -numInscription : int
    -etatParticipation : Etat
    -coureurs : list
    +ajouterCoureur(coureur : Coureur)
    +ajouterVehicule(immatriculation, nom, prenom, numeroPermis)
    +afficherCoureurs()
    +afficherCourse()
    +afficherListeVehicules()
    +modifierCoureur(coureur : Coureur, numCoureur : int)
    +annulerParticipation()
    +eliminerEquipe()
    +supprimerCoureur()
    +init()
    +listeEditions()
    +victoireParticipation()
}

class Coureur {
    -nom : String
    -prenom : String
    -dateNaissance : Date
    -groupeSanguin : String
    +afficherInformations()
    +recupererNom()
    +rechercherCoureur(nom : String, prenom : String)
    +ajouterParticipation(edition : Edition, nomEquipe : String)
    +afficherParticipations()
    +recupererDateNaissance()
}

class Participation {
    -numInscription : int
    -etatParticipation : Etat
    -nomEquipe : String
    +afficherInformations()
    +annulerParticipation()
    +init(nomEquipe : String)
    +modifierInscription(nomEquipe : String)
    +eliminerParticipant()
}

class Course {
    -nom : String
    +afficherNom()
    +afficherEdition(int annee, Date dateDebut, Date dateFin)
    +afficherListesEditions()
    +ajouterEdition(annee : int, dateDebut : date, dateFin : date, villeDepart : String, villeArrivee : String)
    +rechercherCourse(nomCourse : String)
    +init(nom : String)
    +recupererListesEditions()
}

class Edition {
    -annee : int
    -dateDebut : Date
    -dateFin : Date
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -annulee : boolean
    +etablirClassementEquipe()
    +etablirClassemenGeneral()
    +afficherCoureurs()
    +afficherEquipes()
    +afficherEtapes()
    +ajouterEtape(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String, distance : float, numOrdre : int) 
    +modifierInformations(annee : int, dateDebut : Date, villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee : String )
    +annulerEdition()
    +afficherInformations()
    +recupererMeilleurSprinteur()
    +recupererMeilleurGrimpeur()
    +recupererMeilleurJeune()
    +init(annee : int, dateDebut : date, dateFin : date, paysDepart : String, paysArrivee : String)
    +tempsMoyenCoureur()
    +afficherPlusLongueCourse()
}

class Etape {
    -villeDepart : String
    -villeArrivee : String
    -paysDepart : String
    -paysArrivee : String
    -distance : float
    -numOrdre : int
    -etatEtape : EtatEtape
    +etablirClassementEtape()
    +annulerEtape()
    +cloturerEtape()
    +lancerEtape() 
    +afficherInformations()
    +init(villeDepart : String, villeArrivee : String, paysDepart : String, paysArrivee, distance : float, numOrdre : int)
    +tempsMoyenCoureurEtape()
    +recupererDistance()
}

enum EtatEtape {
    LANCEE
    CLOTUREE
    ATTENTE
    ANNULEE
}

class Performance {
    -temps : float
    -pointSprint : int
    -pointGrimp : int
    +recupererTemps()
    +recupererPointSprint()
    +recupererPointGrimp()
    +ajouterPointSprint()
    +ajouterPointGrimp()
    +ajouterTemps()
    +init()
}

Edition "1..*" --* Course
Edition  *-- "1..*" Etape
Participation "1..*" -- "1..1" Edition
Participation "1..*" -- "1..1" Coureur
ParticipationEquipe "1..*" -- "1..1" Equipe
ParticipationEquipe "1..*" -- "1..1" Edition
ParticipationEquipe "1..1" -- "4" VehiculeAssistance
VehiculeAssistance "1..*" --* Chauffeur
Performance "0..*" -- "1..1" Participation
Performance "0..*" -- "1..1" Etape
Etat <|-- Participation
Etat <|-- ParticipationEquipe
EtatEtape <|-- Etape
```