Projet Web
Cycle de Vie
Cycle de vie Méthodes de Gestion Les Livrables
UML
Introduction et Diagrammes Diagrammes de Classes Identification des acteurs Cas d'utilisation diagramme de séquence exercices-corriges



Exercices UML avec Corrections - Diagrammes UML avec Mermaid.js

Exercices UML avec Corrections

5 exercices complets avec corrections détaillées utilisant Mermaid.js pour les diagrammes UML

Thème: Système de Gestion de Bibliothèque

Exercice 1 : Système de Gestion de Bibliothèque

Énoncé détaillé :

Une bibliothèque municipale souhaite informatiser sa gestion. Le système doit permettre aux bibliothécaires de gérer les livres, les adhérents et les emprunts. Les lecteurs peuvent s'inscrire, rechercher des livres, emprunter et rendre des ouvrages. Le système doit également envoyer des rappels automatiques pour les retours en retard.

Fonctionnalités principales :

  • Gestion des adhérents (inscription, modification, suppression)
  • Gestion du catalogue (ajout, modification, suppression de livres)
  • Gestion des emprunts (emprunt, retour, prolongation)
  • Recherche de livres par titre, auteur, catégorie
  • Envoi de rappels automatiques pour les retours en retard
  • Génération de rapports statistiques

Contraintes :

  • Un adhérent peut emprunter maximum 5 livres
  • La durée d'emprunt est de 14 jours
  • Un livre peut être réservé si indisponible
  • Des pénalités s'appliquent après 30 jours de retard
Question 1 : Créer le diagramme de classes pour ce système. Identifiez toutes les classes nécessaires avec leurs attributs et méthodes. Définissez les relations entre les classes (héritage, association, agrégation, composition).
Question 2 : Créer le diagramme de cas d'utilisation pour ce système. Identifiez tous les acteurs et cas d'utilisation. Montrez les relations entre acteurs et cas d'utilisation, ainsi que les relations entre cas d'utilisation (inclusion, extension).
Question 3 : Créer le diagramme de séquence pour le cas d'utilisation "Emprunter un livre". Montrez l'interaction complète entre l'adhérent, l'interface, le service d'emprunt, le catalogue et la base de données.

Correction :

Diagramme de Classes
classDiagram class Adherent { -id: Integer -nom: String -prenom: String -email: String -telephone: String -dateInscription: Date -nombreLivresEmpruntes: Integer +sInscrire() +modifierProfil() +supprimerCompte() } class Livre { -isbn: String -titre: String -auteur: String -categorie: String -anneePublication: Integer -disponible: Boolean -nombreExemplaires: Integer +mettreAJourDisponibilite() +ajouterExemplaire() } class Emprunt { -id: Integer -dateEmprunt: Date -dateRetourPrevue: Date -dateRetourEffective: Date -statut: String +prolongerEmprunt() +retournerLivre() } class Catalogue { -listeLivres: List~Livre~ +rechercherLivres() +ajouterLivre() +supprimerLivre() } class Bibliotheque { -nom: String -adresse: String -listeAdherents: List~Adherent~ +genererRapport() +envoyerRappels() } class Rappel { -id: Integer -dateEnvoi: Date -typeRappel: String -statut: String +envoyerRappel() +marquerCommeEnvoye() } Bibliotheque "1" --o "0..*" Adherent : contient Bibliotheque "1" --o "1" Catalogue : possède Catalogue "1" o-- "0..*" Livre : agrège Adherent "1" -- "0..*" Emprunt : effectue Livre "1" -- "0..*" Emprunt : concerne Emprunt "1" -- "0..1" Rappel : génère
Diagramme de Cas d'Utilisation
flowchart LR %% Actors A[Adhérent] ---|Interagit| Sinscrire[(S'inscrire)] A --- Rechercher[(Rechercher livre)] A --- Emprunter[(Emprunter livre)] A --- Rendre[(Rendre livre)] A --- Prolonger[(Prolonger emprunt)] B[Bibliothécaire] --- Ajouter[(Ajouter livre)] B --- Supprimer[(Supprimer livre)] B --- Gerer[(Gérer adhérents)] B --- Rapports[(Générer rapports)] C[Système] --- Rappels[(Envoyer rappels automatiques)] %% Includes Emprunter -->|include| VerifDispo[(Vérifier disponibilité)] Emprunter -->|include| VerifLimite[(Vérifier limite adhérent)] %% Extends Rendre -->|extend| Penalite[(Appliquer pénalité)] %% Note note right of Penalite Condition: retard > 30 jours end note
Diagramme de Séquence - "Emprunter un livre"
sequenceDiagram actor Adherent participant InterfaceWeb participant ServiceEmprunt participant Catalogue participant BaseDonnees Adherent->>InterfaceWeb: Sélectionne livre InterfaceWeb->>ServiceEmprunt: Demande emprunt(livreId, adherentId) ServiceEmprunt->>Catalogue: VerifierDisponibilite(livreId) Catalogue->>BaseDonnees: Requete disponibilite BaseDonnees-->>Catalogue: Resultat verification Catalogue-->>ServiceEmprunt: Disponible(true/false) ServiceEmprunt->>BaseDonnees: VerifierLimite(adherentId) BaseDonnees-->>ServiceEmprunt: Nombre livres empruntes alt Limite non atteinte ET livre disponible ServiceEmprunt->>BaseDonnees: CreerEmprunt(empruntData) BaseDonnees-->>ServiceEmprunt: Confirmation creation ServiceEmprunt->>Catalogue: MettreAJourDisponibilite(livreId) Catalogue->>BaseDonnees: Update disponibilite ServiceEmprunt->>InterfaceWeb: Confirmation succes InterfaceWeb->>Adherent: Affiche confirmation else Conditions non remplies ServiceEmprunt->>InterfaceWeb: Message erreur InterfaceWeb->>Adherent: Affiche erreur end
Thème: Plateforme E-commerce

Exercice 2 : Plateforme E-commerce

Énoncé détaillé :

Une entreprise souhaite développer une plateforme e-commerce pour vendre des produits électroniques. La plateforme doit permettre aux clients de naviguer dans le catalogue, ajouter des produits au panier, passer des commandes et effectuer des paiements sécurisés. Les administrateurs peuvent gérer le catalogue, suivre les commandes et gérer les stocks.

Fonctionnalités principales :

  • Gestion du catalogue produits (catégories, descriptions, prix, images)
  • Gestion du panier d'achat
  • Processus de commande (validation, paiement, expédition)
  • Système de notation et avis clients
  • Gestion des stocks et alertes de réapprovisionnement
  • Interface d'administration complète

Contraintes :

  • Support de multiples moyens de paiement
  • Gestion des promotions et codes réduction
  • Système de newsletter et notifications
  • Historique des commandes pour chaque client
  • Stock minimum pour déclencher alertes
Question 1 : Créer le diagramme de classes pour cette plateforme e-commerce. Incluez les classes pour les produits, clients, commandes, paiements, stocks, etc. Définissez les relations et multiplicités appropriées.
Question 2 : Créer le diagramme de cas d'utilisation pour la plateforme. Identifiez les acteurs (client, administrateur, système de paiement) et tous les cas d'utilisation principaux et secondaires.
Question 3 : Créer le diagramme de séquence pour le cas d'utilisation "Passer une commande". Montrez l'interaction complète depuis l'ajout au panier jusqu'à la confirmation de commande et le traitement du paiement.

Correction :

Diagramme de Classes
classDiagram class Client { -id: Integer -nom: String -email: String -adresse: String -telephone: String -dateInscription: Date -historiqueCommandes: List~Commande~ +sInscrire() +modifierProfil() +consulterHistorique() } class Produit { -id: Integer -nom: String -description: String -prix: Double -categorie: String -stockDisponible: Integer -imageURL: String +mettreAJourStock() +appliquerRemise() } class Panier { -id: Integer -listeItems: List~ItemPanier~ -totalHT: Double -totalTTC: Double -dateCreation: Date +ajouterItem() +supprimerItem() +calculerTotal() } class ItemPanier { -quantite: Integer -prixUnitaire: Double +modifierQuantite() +calculerSousTotal() } class Commande { -id: Integer -dateCommande: Date -statut: String -total: Double -adresseLivraison: String +validerCommande() +annulerCommande() +suivreCommande() } class Paiement { -id: Integer -montant: Double -methodePaiement: String -datePaiement: Date -statut: String +traiterPaiement() +rembourser() } class Stock { -quantiteDisponible: Integer -seuilAlerte: Integer -dateDerniereMaj: Date +verifierStock() +genererAlerte() } class Promotion { -code: String -reductionPourcentage: Double -dateDebut: Date -dateFin: Date -utilisationsRestantes: Integer +verifierValidite() +appliquerReduction() } Client "1" -- "0..*" Commande : passe Client "1" -- "1" Panier : possède Panier "1" o-- "0..*" ItemPanier : contient ItemPanier "1" -- "1" Produit : concerne Commande "1" *-- "1" Paiement : inclut Produit "1" *-- "1" Stock : gère Commande "0..*" -- "0..*" Produit : comprend Panier "0..*" -- "0..1" Promotion : utilise
Diagramme de Cas d'Utilisation
usecaseDiagram actor Client actor Administrateur actor SystemePaiement actor SystemeNotification Client --> (Parcourir catalogue) Client --> (Ajouter au panier) Client --> (Consulter panier) Client --> (Passer commande) Client --> (Effectuer paiement) Client --> (Consulter historique commandes) Client --> (Laisser avis) Administrateur --> (Gérer produits) Administrateur --> (Gérer commandes) Administrateur --> (Gérer stocks) Administrateur --> (Gérer promotions) Administrateur --> (Consulter rapports) SystemePaiement --> (Traiter paiement) SystemeNotification --> (Envoyer confirmation commande) (Passer commande) ..> (Valider panier) : include (Passer commande) ..> (Traiter paiement) : include (Traiter paiement) ..> (Appliquer promotion) : extend note right of (Appliquer promotion) Condition: code valide end note (Gérer stocks) ..> (Vérifier seuil alerte) : include
Diagramme de Séquence - "Passer une commande"
sequenceDiagram actor Client participant InterfaceWeb participant ServiceCommande participant ServicePaiement participant ServiceStock participant BaseDonnees Client->>InterfaceWeb: Clic "Passer commande" InterfaceWeb->>ServiceCommande: ValiderCommande(panierId) ServiceCommande->>ServiceStock: VerifierDisponibilite(produits) ServiceStock->>BaseDonnees: Requete stocks BaseDonnees-->>ServiceStock: Niveaux stocks ServiceStock-->>ServiceCommande: Disponibilite verifiee ServiceCommande->>InterfaceWeb: Afficher recapitulatif Client->>InterfaceWeb: Confirme commande InterfaceWeb->>ServiceCommande: ConfirmerCommande(commandeData) ServiceCommande->>BaseDonnees: CreerCommande(commande) BaseDonnees-->>ServiceCommande: Commande creee ServiceCommande->>ServicePaiement: InitialiserPaiement(montant, methode) ServicePaiement->>InterfaceWeb: Rediriger vers paiement Client->>InterfaceWeb: Effectue paiement InterfaceWeb->>ServicePaiement: ConfirmerPaiement(donnees) ServicePaiement->>BaseDonnees: EnregistrerPaiement(paiement) BaseDonnees-->>ServicePaiement: Confirmation paiement ServicePaiement-->>ServiceCommande: PaiementOK(commandeId) ServiceCommande->>ServiceStock: MettreAJourStocks(produits) ServiceStock->>BaseDonnees: Update stocks ServiceCommande->>InterfaceWeb: Confirmation commande InterfaceWeb->>Client: Affiche confirmation finale
Thème: Système de Gestion Hospitalière

Exercice 3 : Système de Gestion Hospitalière

Énoncé détaillé :

Un hôpital souhaite informatiser sa gestion administrative et médicale. Le système doit gérer les patients, les médecins, les rendez-vous, les dossiers médicaux, les prescriptions et la facturation. Différents profils d'utilisateurs ont accès à différentes fonctionnalités selon leurs rôles.

Fonctionnalités principales :

  • Gestion des patients (inscription, dossier médical, antécédents)
  • Gestion des médecins et personnel médical
  • Planification des rendez-vous et consultations
  • Gestion des prescriptions et traitements
  • Système de facturation et prise en charge assurance
  • Accès sécurisé aux dossiers médicaux

Contraintes :

  • Confidentialité stricte des données médicales
  • Plusieurs spécialités médicales avec agendas distincts
  • Prescriptions avec posologies et durées précises
  • Intégration avec les systèmes d'assurance santé
  • Alertes pour les examens et traitements programmés
Question 1 : Créer le diagramme de classes pour ce système hospitalier. Incluez les classes pour les patients, médecins, rendez-vous, prescriptions, dossiers médicaux, etc. Respectez les contraintes de confidentialité et de sécurité.
Question 2 : Créer le diagramme de cas d'utilisation pour le système. Identifiez les différents acteurs (médecins, infirmiers, patients, administrateurs) et leurs cas d'utilisation respectifs.
Question 3 : Créer le diagramme de séquence pour le cas d'utilisation "Programmer un rendez-vous". Montrez l'interaction entre le patient/secretaire, le système de planification, la vérification de disponibilité et la confirmation du rendez-vous.

Correction :

Diagramme de Classes
classDiagram class Patient { -id: Integer -nom: String -prenom: String -dateNaissance: Date -sexe: String -adresse: String -telephone: String -numeroSecu: String +sInscrire() +modifierProfil() } class Medecin { -id: Integer -nom: String -prenom: String -specialite: String -numeroOrdre: String -agenda: List~RendezVous~ +consulterAgenda() +prescrireTraitement() } class RendezVous { -id: Integer -dateHeure: DateTime -duree: Integer -motif: String -statut: String -typeConsultation: String +modifierRDV() +annulerRDV() } class DossierMedical { -id: Integer -dateCreation: Date -antecedents: String -allergies: String -traitementsActifs: String +mettreAJour() +ajouterAntecedent() } class Prescription { -id: Integer -datePrescription: Date -medicament: String -posologie: String -duree: Integer -instructions: String +renouveler() +modifierDosage() } class Facture { -id: Integer -montant: Double -dateEmission: Date -statut: String -modePaiement: String +genererFacture() +marquerPayee() } class Assurance { -code: String -nomAssureur: String -tauxRemboursement: Double -plafond: Double +verifierCouverture() +calculerRemboursement() } class PersonnelMedical { -id: Integer -role: String -service: String -droitsAcces: String +accederDossier() +modifierDossier() } Patient "1" *-- "1" DossierMedical : possède Patient "1" -- "0..*" RendezVous : a Medecin "1" -- "0..*" RendezVous : assure RendezVous "1" -- "0..1" Prescription : genere RendezVous "1" -- "1" Facture : necessite Patient "1" -- "0..*" Assurance : beneficie Facture "1" -- "0..1" Assurance : utilise PersonnelMedical <|-- Medecin : specialisation DossierMedical "1" -- "0..*" Prescription : contient
Diagramme de Cas d'Utilisation
usecaseDiagram actor Patient actor Secretaire actor Medecin actor Infirmier actor Administrateur actor SystemeAssurance Patient --> (Prendre rendez-vous) Patient --> (Consulter dossier medical) Patient --> (Consulter prescriptions) Patient --> (Consulter factures) Secretaire --> (Programmer rendez-vous) Secretaire --> (Gérer agenda medecins) Secretaire --> (Enregistrer arrivée patient) Secretaire --> (Générer factures) Medecin --> (Consulter dossier patient) Medecin --> (Prescrire traitement) Medecin --> (Mettre à jour dossier medical) Medecin --> (Consulter agenda) Administrateur --> (Gérer utilisateurs) Administrateur --> (Gérer paramètres système) Administrateur --> (Générer rapports) Administrateur --> (Gérer assurances) SystemeAssurance --> (Vérifier couverture) (Programmer rendez-vous) ..> (Vérifier disponibilite) : include (Programmer rendez-vous) ..> (Vérifier assurance) : include (Prescrire traitement) ..> (Allergie detectee) : extend note right of (Allergie detectee) Condition: allergie connue end note (Générer factures) ..> (Appliquer remboursement) : include
Diagramme de Séquence - "Programmer un rendez-vous"
sequenceDiagram actor Secretaire participant InterfacePlanning participant ServiceRendezVous participant ServiceMedecin participant BaseDonnees participant SystemeAssurance Secretaire->>InterfacePlanning: Selectionne "Nouveau RDV" InterfacePlanning->>Secretaire: Affiche formulaire Secretaire->>InterfacePlanning: Saisit donnees(patient, medecin, motif) InterfacePlanning->>ServiceRendezVous: VerifierDisponibilite(medecinId, dateSouhaitee) ServiceRendezVous->>ServiceMedecin: ConsulterAgenda(medecinId) ServiceMedecin->>BaseDonnees: Requete agenda BaseDonnees-->>ServiceMedecin: Slots disponibles ServiceMedecin-->>ServiceRendezVous: Creneaux proposes ServiceRendezVous->>InterfacePlanning: Afficher creneaux Secretaire->>InterfacePlanning: Selectionne creneau InterfacePlanning->>ServiceRendezVous: VerifierAssurance(patientId) ServiceRendezVous->>SystemeAssurance: ConsulterCouverture(patientId) SystemeAssurance-->>ServiceRendezVous: Details couverture ServiceRendezVous->>BaseDonnees: CreerRendezVous(RDVdata) BaseDonnees-->>ServiceRendezVous: Confirmation creation ServiceRendezVous->>InterfacePlanning: Confirmation RDV InterfacePlanning->>Secretaire: Affiche confirmation ServiceRendezVous->>SystemeAssurance: Notifier nouveau RDV InterfacePlanning->>Patient: Envoyer confirmation (email/SMS)
Thème: Application de Gestion de Projet

Exercice 4 : Application de Gestion de Projet

Énoncé détaillé :

Une entreprise de développement logiciel souhaite créer une application de gestion de projet agile. L'application doit permettre la gestion des équipes, des tâches, des sprints, des jalons et du reporting. Elle doit supporter les méthodologies Scrum et Kanban avec des tableaux visuels et des indicateurs de performance.

Fonctionnalités principales :

  • Gestion des projets et équipes de travail
  • Gestion des tâches et user stories
  • Tableaux Kanban et burndown charts
  • Gestion des sprints et rétrospectives
  • Système de notification et commentaires
  • Rapports et indicateurs de performance

Contraintes :

  • Support des méthodologies Scrum et Kanban
  • Gestion des dépendances entre tâches
  • Estimation des charges et priorités
  • Intégration avec des outils de versioning (Git)
  • Accès multi-appareils et synchronisation temps réel
Question 1 : Créer le diagramme de classes pour cette application de gestion de projet. Incluez les classes pour les projets, équipes, membres, tâches, sprints, etc. Modélisez les relations entre ces éléments.
Question 2 : Créer le diagramme de cas d'utilisation pour l'application. Identifiez les acteurs (chef de projet, développeurs, product owner) et leurs interactions avec le système.
Question 3 : Créer le diagramme de séquence pour le cas d'utilisation "Créer un sprint". Montrez l'interaction entre le chef de projet, l'interface, le service de sprint, la sélection de tâches et la validation du sprint.

Correction :

Diagramme de Classes
classDiagram class Projet { -id: Integer -nom: String -description: String -dateDebut: Date -dateFinPrevu: Date -statut: String -methodeAgile: String +demarrerProjet() +terminerProjet() +genererRapport() } class Equipe { -id: Integer -nom: String -membres: List~Membre~ -roles: String -dateCreation: Date +ajouterMembre() +retirerMembre() } class Membre { -id: Integer -nom: String -prenom: String -email: String -competences: String -roleDansEquipe: String +participerCeremonie() +mettreAJourStatut() } class Tache { -id: Integer -titre: String -description: String -priorite: String -estimationCharge: Integer -statut: String -dateCreation: Date +mettreAJourStatut() +assignerMembre() } class UserStory { -id: Integer -titre: String -description: String -valeurMetier: String -critereAcceptation: String +definirCritere() +validerStory() } class Sprint { -id: Integer -numero: Integer -dateDebut: Date -dateFin: Date -objectif: String -statut: String -velocity: Integer +demarrerSprint() +terminerSprint() +calculerVelocity() } class KanbanBoard { -id: Integer -colonnes: List~String~ -tachesAffichees: List~Tache~ +deplacerTache() +ajouterColonne() } class RapportPerformance { -id: Integer -type: String -periode: String -donnees: String -dateGeneration: Date +genererRapport() +exporterDonnees() } Projet "1" -- "1" Equipe : a Equipe "1" -- "0..*" Membre : comprend Projet "1" *-- "0..*" Sprint : organise Sprint "1" -- "0..*" Tache : contient Tache "0..*" -- "1" UserStory : realise Projet "1" *-- "1" KanbanBoard : utilise KanbanBoard "1" -- "0..*" Tache : affiche Projet "1" -- "0..*" RapportPerformance : genere Tache "0..*" -- "0..*" Tache : depend Membre "0..*" -- "0..*" Tache : assigne
Diagramme de Cas d'Utilisation
usecaseDiagram actor ChefProjet actor Developpeur actor ProductOwner actor MembreEquipe actor SystemeNotification ChefProjet --> (Creer projet) ChefProjet --> (Creer sprint) ChefProjet --> (Assigner taches) ChefProjet --> (Gerer equipe) ChefProjet --> (Generer rapports) Developpeur --> (Mettre à jour tache) Developpeur --> (Deplacer tache Kanban) Developpeur --> (Ajouter commentaire) Developpeur --> (Signaler bloqueur) ProductOwner --> (Definir user stories) ProductOwner --> (Prioriser backlog) ProductOwner --> (Valider taches) ProductOwner --> (Participer retrospective) MembreEquipe --> (Consulter taches assignees) MembreEquipe --> (Participer ceremonies) MembreEquipe --> (Mettre à jour avancement) SystemeNotification --> (Envoyer alertes) (Creer sprint) ..> (Selectionner taches) : include (Creer sprint) ..> (Definir objectif) : include (Mettre à jour tache) ..> (Estimer completion) : extend note right of (Estimer completion) Condition: tache en cours end note (Generer rapports) ..> (Calculer metriques) : include
Diagramme de Séquence - "Créer un sprint"
sequenceDiagram actor ChefProjet participant InterfaceWeb participant ServiceSprint participant ServiceProjet participant ServiceTache participant BaseDonnees ChefProjet->>InterfaceWeb: Selectionne "Nouveau Sprint" InterfaceWeb->>ServiceSprint: AfficherFormulaireCreation() ServiceSprint->>ServiceProjet: RecupererBacklog(projetId) ServiceProjet->>ServiceTache: ListerTachesNonTerminees(projetId) ServiceTache->>BaseDonnees: Query taches BaseDonnees-->>ServiceTache: Liste taches ServiceTache-->>ServiceProjet: Taches disponibles ServiceProjet-->>ServiceSprint: Backlog projet ServiceSprint->>InterfaceWeb: Afficher taches + formulaire ChefProjet->>InterfaceWeb: Selectionne taches + parametres InterfaceWeb->>ServiceSprint: CreerSprint(sprintData, listeTaches) ServiceSprint->>ServiceTache: VerifierDependances(listeTaches) ServiceTache->>BaseDonnees: Verifier prerequis BaseDonnees-->>ServiceTache: Resultat verification ServiceTache-->>ServiceSprint: Dependance OK/NOK alt Toutes dependances satisfaites ServiceSprint->>BaseDonnees: InsererSprint(sprintData) BaseDonnees-->>ServiceSprint: Sprint cree ServiceSprint->>ServiceTache: AssignerAuSprint(listeTaches, sprintId) ServiceTache->>BaseDonnees: Update taches ServiceSprint->>InterfaceWeb: Confirmation succes InterfaceWeb->>ChefProjet: Afficher details sprint ServiceSprint->>ServiceProjet: NotifierCreationSprint(projetId) else Probleme dependance ServiceSprint->>InterfaceWeb: Message erreur dependances InterfaceWeb->>ChefProjet: Afficher erreurs end
Thème: Système de Réservation de Transport

Exercice 5 : Système de Réservation de Transport

Énoncé détaillé :

Une compagnie de transport souhaite développer un système de réservation en ligne pour ses services de bus, trains et covoiturage. Le système doit permettre aux passagers de rechercher des trajets, comparer les options, réserver des places, effectuer des paiements et recevoir des confirmations. Le système doit aussi gérer les horaires, les disponibilités et les tarifs dynamiques.

Fonctionnalités principales :

  • Recherche et comparaison de trajets multi-modal
  • Réservation de places avec choix de sièges
  • Gestion des tarifs dynamiques et promotions
  • Système de paiement sécurisé multi-moyens
  • Gestion des horaires et disponibilités en temps réel
  • Notifications et rappels automatiques

Contraintes :

  • Intégration avec plusieurs compagnies de transport
  • Gestion des correspondances et temps de transit
  • Tarification dynamique selon la demande
  • Système de points de fidélité pour les clients réguliers
  • Gestion des remboursements et modifications
Question 1 : Créer le diagramme de classes pour ce système de réservation. Incluez les classes pour les trajets, véhicules, passagers, réservations, tarifs, paiements, etc.
Question 2 : Créer le diagramme de cas d'utilisation pour le système. Identifiez les acteurs (passager, agent, système de paiement) et tous les cas d'utilisation liés à la réservation et à la gestion.
Question 3 : Créer le diagramme de séquence pour le cas d'utilisation "Réserver un trajet". Montrez l'interaction complète depuis la recherche jusqu'à la confirmation de réservation et l'émission de billet.

Correction :

Diagramme de Classes
classDiagram class Passager { -id: Integer -nom: String -prenom: String -email: String -telephone: String -carteFidelite: String -pointsFidelite: Integer +sInscrire() +accumulerPoints() +utiliserPoints() } class Trajet { -id: Integer -villeDepart: String -villeArrivee: String -dateDepart: DateTime -dateArrivee: DateTime -duree: Integer -typeTransport: String +calculerDuree() +verifierCorrespondance() } class Vehicule { -id: Integer -type: String -capacite: Integer -numeroImmatriculation: String -compagnieOperateur: String +mettreAJourStatut() +verifierMaintenance() } class Reservation { -id: Integer -dateReservation: Date -statut: String -numeroConfirmation: String -prixTotal: Double +modifierReservation() +annulerReservation() +confirmerReservation() } class Billet { -id: Integer -numeroBillet: String -siege: String -codeQR: String -dateEmission: Date +genererCodeQR() +imprimerBillet() } class Tarif { -id: Integer -prixBase: Double -coefficientDynamique: Double -remises: Double -fraisSupplementaires: Double +calculerPrixFinal() +appliquerRemise() } class Paiement { -id: Integer -montant: Double -methode: String -dateTransaction: Date -referenceExterne: String +traiterPaiement() +genererRecu() } class CompagnieTransport { -id: Integer -nom: String -logo: String -contacts: String -conditionsService: String +mettreAJourHoraires() +gererTarifs() } Passager "1" -- "0..*" Reservation : effectue Reservation "1" -- "1" Trajet : concerne Reservation "1" *-- "1" Billet : genere Reservation "1" *-- "1" Paiement : inclut Reservation "1" -- "1" Tarif : utilise Trajet "1" -- "1" Vehicule : utilise Vehicule "1" -- "1" CompagnieTransport : appartient Passager "1" -- "0..1" CarteFidelite : possede Trajet "0..*" -- "0..*" Trajet : correspond
Diagramme de Cas d'Utilisation
usecaseDiagram actor Passager actor AgentReservation actor SystemePaiement actor SystemeNotification actor CompagnieExterne Passager --> (Rechercher trajets) Passager --> (Comparer options) Passager --> (Reserver trajet) Passager --> (Effectuer paiement) Passager --> (Modifier reservation) Passager --> (Annuler reservation) Passager --> (Consulter historique) AgentReservation --> (Gerer reservations) AgentReservation --> (Consulter disponibilites) AgentReservation --> (Appliquer tarifs speciaux) AgentReservation --> (Gerer remboursements) SystemePaiement --> (Traiter paiement) SystemeNotification --> (Envoyer notifications) CompagnieExterne --> (Verifier disponibilites externes) (Reserver trajet) ..> (Verifier disponibilite) : include (Reserver trajet) ..> (Calculer tarif) : include (Effectuer paiement) ..> (Appliquer points fidelite) : extend note right of (Appliquer points fidelite) Condition: passager premium end note (Rechercher trajets) ..> (Filtrer correspondances) : include
Diagramme de Séquence - "Réserver un trajet"
sequenceDiagram actor Passager participant InterfaceWeb participant ServiceReservation participant ServiceTrajet participant ServiceTarif participant ServicePaiement participant BaseDonnees Passager->>InterfaceWeb: Saisit criteres recherche InterfaceWeb->>ServiceTrajet: RechercherTrajets(criteres) ServiceTrajet->>BaseDonnees: Query trajets disponibles BaseDonnees-->>ServiceTrajet: Liste trajets ServiceTrajet->>ServiceTarif: CalculerTarifs(trajets) ServiceTarif->>BaseDonnees: Recuperer tarifs dynamiques BaseDonnees-->>ServiceTarif: Tarifs courants ServiceTarif-->>ServiceTrajet: Tarifs calcules ServiceTrajet->>InterfaceWeb: Afficher resultats Passager->>InterfaceWeb: Selectionne trajet InterfaceWeb->>ServiceReservation: InitialiserReservation(trajetId, passagerId) ServiceReservation->>ServiceTrajet: VerifierDisponibilite(trajetId) ServiceTrajet->>BaseDonnees: Check places disponibles BaseDonnees-->>ServiceTrajet: Disponibilite ServiceTrajet-->>ServiceReservation: Places disponibles OUI/NON ServiceReservation->>ServiceTarif: CalculerPrixFinal(trajetId, passagerId) ServiceTarif->>BaseDonnees: Appliquer reductions/points BaseDonnees-->>ServiceTarif: Prix final ServiceTarif-->>ServiceReservation: Prix total ServiceReservation->>InterfaceWeb: Afficher recapitulatif Passager->>InterfaceWeb: Confirme reservation InterfaceWeb->>ServiceReservation: ConfirmerReservation(reservationData) ServiceReservation->>BaseDonnees: CreerReservation(reservation) BaseDonnees-->>ServiceReservation: Reservation creee ServiceReservation->>ServicePaiement: InitialiserPaiement(montant, methode) ServicePaiement->>InterfaceWeb: Redirection paiement securise Passager->>InterfaceWeb: Effectue paiement InterfaceWeb->>ServicePaiement: ConfirmerTransaction(donnees) ServicePaiement->>BaseDonnees: EnregistrerPaiement(transaction) BaseDonnees-->>ServicePaiement: Confirmation paiement ServicePaiement-->>ServiceReservation: PaiementOK(reservationId) ServiceReservation->>BaseDonnees: GenererBillet(reservationId) BaseDonnees-->>ServiceReservation: Billet genere ServiceReservation->>InterfaceWeb: Confirmation + billet InterfaceWeb->>Passager: Affiche confirmation + billet PDF ServiceReservation->>ServiceTrajet: MettreAJourDisponibilite(trajetId)

© 2024 Exercices UML Complets avec Corrections - Diagrammes UML avec Mermaid.js

Bonne pratique et bon apprentissage !