Bases de données depuis Qt

Mise en situation

On désire réaliser une application GUI Qt qui s’interface avec la base de donnés SQLite — utilisée dans l’activité Bases de SQL — qui recense les coureurs et équipes du tour de France 2012.

On veut pouvoir afficher la constitution des équipes et les détails sur chaque coureur.

L’application doit être codée avec une architecture MVC qui met l’accent sur une séparation entre la logique métier et l’affichage.

La conception a mené au diagramme de classes suivant :

cd QTrouDeFrance

Les points clés du diagramme sont :

  • Architecture MVC/3-tiers :

    • App : Contrôleur principal (logique métier)

    • MainUI et InfoUI : Vues (interfaces utilisateur)

    • EquipeDAO et CoureurDAO : Couche d’accès aux données (DAO pour Data Access Object)

    • Pattern Singleton* pour ConnexionBDD de façon à partager la connexion à la BDD par toutes les classes devant y faire accès

  • Communication par signaux Qt. updateInfos et showDetails connectent l’IHM au contrôleur.

  • Utilisation de structures C++ (infosEquipe_t, infosCoureur_t et detailsCoureur_t) pour transférer les données issues de la BDD vers les vues

Codage de l’application

On vous demande de compléter le code source de l’application présent dans l’archive fournie.

🎯 Travail à faire :

  1. Extraire l’archive du projet à compléter (QTourDeFrance-eleves.zip zip) sur votre machine

  2. Ouvrir le projet Qt (→ QTourDeFrance-eleves.pro) dans QtCreator

  3. Le compiler et copier la bdd db-tour-de-france-2012.sqlite3 présente dans les fichiers du projet dans le répertoire de compilation (normalement ../build-QTourDeFrance-eleves-Desktop-Debug/)

    Le fichier est déjà présent dans le dossier mais il est vide.

    ⇒ le système va vous demander si vous voulez l’écraser. Répondre Oui.

  4. Exécuter l’application pour constater qu’elle fonctionne même si son IHM est désespérément vide.

  5. Compléter les méthodes des codes source où le commentaire // A COMPLETER apparait en procédant dans l’ordre suivant :

    1. EquipeDAO::getAllNames()

      → Récupération des noms des équipes dans la BDD

    2. App::run()

      → Renseignement de la combobox de l’IHM avec le nom des équipes

    3. EquipeDAO::getInfosByEquipe()

      → Récupération dans la BDD du nom et du code CIO du pays dans lequel une équipe a été enregistrée administrativement

    4. CoureurDAO::getInfosByEquipe()

      → Récupération dans la BDD des dossards, noms et prénoms des coureurs d’une équipe

    5. App::onIhmUpdateInfos()

      → Slot Qt qui affiche le détail d’une équipe (nom, code CIO, coureurs) lorsque celle-ci est sélectionnée dans la combobox de l’IHM.

    6. CoureurDAO::getDetailsByDossard()

      → Récupération de la decription détaillée d’un coureur (nom, prénom, date et pays de naissance, taille, poids) depuis la BDD

    7. App:onShowDetails()

      → Slot Qt qui affiche les détails sur un coureur suite à l’appui sur son bouton Détails dans l’IHM

    8. InfoUI::afficherDetailsCoureur()

      → Affichage des détails d’un coureur. Seul l’affichage de la date de naissance est à coder de façon à l’afficher tel qu’on le fait en France (→ "25/09/1973) et non comme elle est stockée dans la BDD (→ "1973-09-25").

Évolution de l’application

🎯 Travail à faire :

  1. Faire évoluer l’application pour qu’elle rappelle dans le détail d’un coureur à quelle équipe il appartient.

🞄  🞄  🞄