Aller au contenu principal

🧪 TP1 – Radio CEMify 📻 (10%)

danger

Niveau d’utilisation de l’I.A.G. : Niveau 1

Voici les fichiers de départ du travail pratique:

Mise en contexte​

C’est officiel ! La session d’hiver 2026 marque le grand retour en ondes de la radio étudiante du Cégep Édouard-Montpetit, désormais connue sous le nom de Radio CEMify.

Afin d’encourager la participation étudiante, les administrateurs de la radio mettent en circulation un formulaire papier permettant aux étudiants de proposer les chansons qu’ils souhaitent entendre à l’antenne. L’initiative connaît un succès immédiat : les demandes affluent rapidement et le volume de morceaux à gérer augmente de jour en jour.

Très vite, les administrateurs constatent que cette approche « papier-crayon » atteint ses limites. La gestion du répertoire devient lourde, peu flexible et propice aux erreurs. Il devient alors évident qu’un outil informatique simple et efficace est nécessaire pour centraliser, consulter et mettre à jour les morceaux proposés. Les administrateurs font donc appel à toi, développeur en devenir, afin de concevoir une première version d’un gestionnaire de répertoire musical, utilisable en mode console.

Partie 1 – Gestion du répertoire musical (TODO 01 à TODO 12)​

Dans cette première partie, tu dois compléter les fonctionnalités de base du gestionnaire musical de Radio CEMify. Les administrateurs de la radio étudiante t’ont transmis les spécifications fonctionnelles suivantes, qui devront être respectées afin de répondre à leurs besoins opérationnels :

Au démarrage du programme​

  • Le rĂ©pertoire musical doit automatiquement ĂŞtre chargĂ© Ă  partir du fichier Bibliothèque.csv.
  • Chaque ligne du fichier reprĂ©sente un morceau et suit le format suivant : artiste|album|titre|cote|mm:ss

Pendant l'exécution​

L’utilisateur doit pouvoir interagir avec l’application à l’aide d’un menu en console lui permettant de :

  • Afficher le contenu du rĂ©pertoire musical ;
  • Trier les morceaux selon leur cote (1 Ă  5, 5 Ă©tant la cote la plus Ă©levĂ©e) ;
  • Afficher les informations dĂ©taillĂ©es d’un morceau ;
  • Consulter les statistiques du rĂ©pertoire (# total de morceaux et durĂ©e totale) ;
  • Ajouter un nouveau morceau au rĂ©pertoire ;
  • Supprimer un morceau existant ;
  • Modifier la cote d’apprĂ©ciation d’un morceau du rĂ©pertoire.

À la fermeture du programme​

  • Le rĂ©pertoire musical doit automatiquement ĂŞtre sauvegardĂ© dans le fichier Bibliotheque.csv
attention

Attention ! Toutes les modifications effectuées pendant la session doivent être conservées

Algorithme de tri​

Afin de trier les morceaux selon leur cote, nous vous demandons d’utiliser l’algorithme du tri à bulles. Son principe est le suivant : On considère une liste L de taille N contenant une suite de nombres aléatoires. L’algorithme parcourt la liste, et dès que deux éléments consécutifs ne sont pas ordonnés, il les échange. Exemple d’exécution de l’algorithme de tri à bulles :

Exemple d'algorithme de trie Ă  bulle

Les cases gris clair représentent les éléments comparés, les flèches rouges les échanges d’éléments, et les case gris sombre les éléments placés définitivement. L’opération de triage compte pour 10% du TP1 et est répartie selon la pondération suivante :

  • 5% pour l’élaboration d’un pseudo-code valide (Ă  valider avec le prof)
  • 5% pour l’implĂ©mentation adĂ©quate de l’algorithme selon votre pseudo-code

Voici un autre exemple du tri à bulle animée:

Informations additionnelles​

Cette première partie a pour objectif de consolider les acquis du cours Introduction à la programmation C# (1P6) et d’introduire progressivement les concepts de la programmation orientée objet. Cette première partie du TP est structurée à l’aide de commentaires TODO. Tu dois compléter les sections demandées sans modifier la structure globale du programme. Portes bien attention à la façon dont le code est documenté et structuré. Tu devras documenter ton code dans la partie 2.

Les fichiers suivants te sont fournis :

  • Program.cs : Contient la logique principale du programme.
  • Morceau.cs : Classe reprĂ©sentant un morceau de musique (ne pas modifier).
  • Bibliotheque.csv : Fichier CSV contenant le rĂ©pertoire initial de la radio.

Git​

Le projet doit obligatoirement être réalisé dans un dépôt Git. Dès le début du travail, tu dois créer un répertoire Git local pour ce projet et y effectuer des commits réguliers (~1 commit par TODO) reflétant l’évolution de ton programme.

Tests unitaires​

Le projet de départ contient quelques tests unitaires, généreusement écrits par un héros obscur. Ceux-ci vous permettront de valider le fonctionnement de base de certaines fonctions, mais ne couvrent pas l’ensemble des cas limites. Pour utiliser les tests unitaires, assurez-vous de respecter la nomenclature des fonctions et référez-vous à votre professeur pour apprendre à les exécuter.

Contenu évalué​

  • Manipulation d’une classe prĂ©dĂ©finie
  • Manipulation d’une liste contenant des objets
  • Instanciation d’objets
  • ComplĂ©tion de mĂ©thodes
  • Lecture et Ă©criture de fichiers texte
  • CrĂ©ation d’un premier dĂ©pĂ´t Git et gestion d’une branche

Partie 2 – Gestion des utilisateurs et des droits d’accès (TODO 10 à 15)​

attention

Vous devez documenter la partie 2 du tp!

Référez-vous à la section sur documenter son code: 👉 Documenter son code

Lors de la présentation de votre produit aux administrateurs de la radio, une nouvelle problématique est soulevée : n’importe qui peut actuellement modifier le répertoire musical. Les administrateurs souhaitent donc introduire la notion d’utilisateur afin de mieux contrôler l’accès aux fonctionnalités de l’application. En principe, seuls les utilisateurs ayant créé un compte pourront modifier le répertoire musical, tandis que les invités pourront uniquement le consulter.

Dans cette seconde partie, vous devez bonifier le gestionnaire de répertoire musical en y intégrant une classe Utilisateur, conformément au diagramme de classes fourni. Les fonctionnalités développées à la Partie 1 doivent être conservées et demeurées fonctionnelles.

Voici les nouvelles exigences des administrateurs :

Au démarrage du programme​

Au lancement du programme, l’utilisateur doit pouvoir choisir entre :

  • Se crĂ©er un compte ;
  • Continuer en tant qu’invitĂ©.

Types d’utilisateurs et fonctionnalités associées​

Utilisateur invité​

Si l’utilisateur choisit de continuer en tant qu’invité, son statut est automatiquement défini comme Invité. Un utilisateur invité a un accès restreint aux fonctionnalités de l’application et peut uniquement :

  • Trier le rĂ©pertoire musical de la radio ;
  • Afficher les informations dĂ©taillĂ©es d’un morceau ;
  • Consulter les statistiques du rĂ©pertoire musical.

Utilisateur connecté​

Lorsqu’un utilisateur choisit de se créer un compte, il doit fournir :

  • Un nom d’utilisateur ;
  • Un mot de passe.

Son statut est alors automatiquement défini comme Étudiant. En plus des fonctionnalités développées dans la Partie 1, un utilisateur connecté peut accéder à des options supplémentaires dans le menu principal. Il peut :

  • TransfĂ©rer un morceau du rĂ©pertoire musical vers une liste de lecture personnelle ;
  • Afficher le contenu de sa liste de lecture personnelle ;
  • Consulter les informations de son profil :
    • Nom d’utilisateur ;
    • Mot de passe (masquĂ© Ă  l’aide de caractères « * ») ;
    • Statut.
  • Modifier son mot de passe.

Liste de lecture personnelle​

Lorsqu’un utilisateur se connecte :

  • Si une liste de lecture personnelle existe dĂ©jĂ , elle doit ĂŞtre chargĂ©e automatiquement ;
  • Si elle n’existe pas, elle doit ĂŞtre créée automatiquement selon la nomenclature suivante :
    • ListeDeLecture_nomUtilisateur.csv oĂą nomUtilisateur correspond au nom d'utilisateur dĂ©fini lors de la crĂ©ation du compte.
attention

Important! Lorsqu’un morceau est transféré du répertoire musical vers la liste de lecture personnelle, il ne s’agit pas d’une nouvelle instance. La liste de lecture doit contenir une référence vers le morceau existant dans le répertoire musical de la radio.

À la fin du programme​

Lors de la fermeture de l’application, la liste de lecture personnelle de l’utilisateur connecté doit être sauvegardée automatiquement.

Exigences techniques​

La classe Utilisateur doit être implémentée en respectant le modèle suivant :​

Classe_Utilisateur

Propriétés​

MotDePasse : Permet d’obtenir et modifier le mot de passe de l'utilisateur. Cette propriété est en lecture seule à l’extérieur de la classe.

MotDePasseMasqué (propriété calculée) : Retourne le mot de passe sous forme masquée (suite de *). Elle permet d’afficher l’information sans exposer la valeur réelle.

NomFichierListeLecture (propriété calculée) : Génère automatiquement le nom du fichier associé à la liste de lecture personnelle de l’utilisateur selon le format requis.

NomUtilisateur : Propriété en lecture seule permettant d’obtenir le nom d’utilisateur du profil sans permettre sa modification directe.

Statut : Propriété en lecture seule indiquant le type d’utilisateur (Invité ou Étudiant), basé sur l’énumération définie dans la classe.

Méthode ModifierMDP()​

  • RĂ´le : Modifie le mot de passe de l’utilisateur.
  • Paramètre : chaĂ®ne de caractères reprĂ©sentant le nouveau mot de passe de l’utilisateur.
  • Retour : Aucun.

Constructeur par défaut​

  • RĂ´le : Initialise un utilisateur invitĂ© avec les valeurs par dĂ©faut et le statut InvitĂ©.

Constructeur paramétré​

  • RĂ´le : Initialise un utilisateur connectĂ© avec les valeurs par entrĂ©es et le statut Étudiant.

Vous devrez utiliser une énumération (enum) pour représenter le statut de l’utilisateur, comme suit :​

Enumeration

Contenu évalué​

  • DĂ©finir une nouvelle classe
  • Encapsulation
  • PropriĂ©tĂ©s calculĂ©es
  • Type par Ă©numĂ©ration
  • Documentation appropriĂ©e des classes et des mĂ©thodes
  • Gestion globale des versions (add, commit, push, merge, …)

🎥 Démonstration vidéo du résultat attendu​