Examen C# Énoncés de TP de C#.NET Marc Chevaldonné IUT Informatique Clermont1 2ème année orientation GI 30 septembre 2010 Règles du jeu À LIRE IMPÉRATIVEMENT MATÉRIEL AUTORISÉ 1 stylo le reste n est pas autorisé, en particulier : les téléphones portables (l heure est affichée en bas à droite de l écran), les clés USB, les documents... MATÉRIEL FOURNI feuilles de brouillon LES QUESTIONS NE SONT PAS AUTORISÉES DOCUMENTS INFORMATIQUES AUTORISÉS vous êtes autorisés à vider votre disque dur ou votre clé usb sur la machine (C:\Temp ou C: \Travail avant la distribution des énoncés). DOCUMENTS INFORMATIQUES À REMETTRE avant de quitter la salle, vous devez impérativement remettre les documents demandés sur \\Kirov\TP-GI\DS-C#.NET\NOM_Prénom\ (cf. exemple KENOBI_Obiwan) À FAIRE IMPÉRATIVEMENT À LA FIN DE L EXAMEN après avoir remis vos documents sur le serveur, vous devez venir me retrouver en salle A10 pour VÉRIFIER que tous vos documents sont présents et SIGNER la feuille de sortie. Le non respect de cette règle sera sanctionné. SAUVEGARDES RÉGULIÈRES enregistrez très régulièrement vos fichiers et documents. Les plantages des machines, les pieds sur les prises multiples ou les bugs de Visual Studio ne seront pas considérés comme responsables. Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 1
Déroulement de l épreuve 0h : démarrez sous Windows.Vides les dossiers C:\Travail et C:\Temp. Montrez ces deux dossiers et la corbeille vide au surveillant de votre salle. 1h45 : préparez votre dossier de fichiers de résultats comme indiqué dans les règles de la page précédente. Créez le dossier NOM_Prénom dans le dossier \\Kirov \TP-GI\DS-C#.NET\NOM_Prénom\ puis déposez vos fichiers de résultats dans ce dossier. Prévoyez au moins 1/4 d heure pour cela. Vous pouvez faire cette étape avant si vous avez terminé l épreuve plus tôt... Descendez en A10 vérifier avec moi que tous vos documents sont bien sur le serveur et signez la feuille de sortie. 2h00 : il n est plus possible de déposer les fichiers de résultats sur le serveur Kirov. Contenu de l épreuve et barême L épreuve est constituée de plusieurs questions qui ne sont pas toutes dépendantes. Lisez l énoncé en entier avant de débuter pour répondre d abord aux questions qui vous conviennent le plus! Une part très importante des points sera attribuée pour : le respect des consignes au niveau de l organisation des solutions, projets et dossiers; le respect des règles de codage; l utilisation de commentaires (en particulier avant les définitions des s, méthodes et membres); la compilation de la solution, l exécution. Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 2
Sujet - Guide de randonnées OBJECTIFS L objectif de cet examen est de réaliser une bibliothèque permettant la gestion de randonnées à pied ou en VTT, ainsi que des sommets et des pays en Auvergne. Vous devrez créer un assemblage de type Bibliothèque de s contenant : une structure Sommet représentant... des sommets (montagne ou volcans), leur nom, leur altitude et une petite description, une Randonnée dérivée en deux s : RandonnéeÀPied et RandonnéeEnVTT contenant la durée de la balade, la distance à parcourir, le dénivelée... une Pays contenant le nom du pays, et les randonnées dans ce pays, une Guide contenant l ensemble des sommets, randonnées et pays. Vous créerez ensuite une application Console de test de cette bibliothèque (une seule pour toutes les s et structure de la bibliothèque pour gagner du temps), puis une application Console représentant l application finale. Les listes des randonnées, sommets et pays à utiliser pour les tests sont les suivantes : Sommets Nom Altitude Description Puy d Olloix 1002 mètres Très joli panorama du haut de ce puy! Puy de Saint Sandoux 848 mètres Un millefeuille volcanique Puy de Jussat 661 mètres composé de roches sédimentaires Puy de Grandeyrolles 706 mètres Entre la Couze Chambon et la Ravin de Quinsat Montagne de la Noue Basse 1259 mètres Grand plateau de verdure Montagne de Riocros Haute 1289 mètres vue sur le lac de St-Alyre Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 3
Pays Nom Sancy-Volcans Pays d Issoire-Val d Allier Nom Distance Dénivelée Temps Pays Sommets Type Randol 7,5 km 214 m 2h15 Sancy-Volcans Puy d Olloix à pieds Le Puy de Saint- Sandoux Le Puy de Saint- Sandoux 9 km 377 m 2h45 Sancy-Volcans Puy d Olloix Puy de Saint Sandoux 9 km 377 m 1h30 Sancy-Volcans Puy d Olloix Puy de Saint Sandoux à pieds VTT Les cirques de Longevette et des Côtes 6 km 377 m 1h45 Sancy-Volcans à pieds Les cirques de Longevette et des Côtes 6 km 377 m 0h45 Sancy-Volcans VTT Le Puy de Jussat 5 km 165 m 1h30 Sancy-Volcans Puy de Jussat à pieds Le Puy de Jussat 5 km 165 m 1h Sancy-Volcans Puy de Jussat VTT Le Ravin de Quinsat 6 km 309 m 2h30 Pays d Issoire- Val d Allier Jassy 14 km 321 m 3h45 Pays d Issoire- Val d Allier Puy de Jussat Montagne de la Noue Basse à pieds à pieds Montagne de Riocros Haute Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 4
QUESTION 1 : PRÉPARATION DU PROJET Solutions et projets VisualStudio Sous Windows, créez l arborescence suivante : GuideRando > VisualStudio2010 > Applications > Tests > girandocore Créez une solution Rando.sln et un projet girandocore de type «bibliothèque de s» et générant une bibliothèque girandocore.dll. Ajoutez un projet de Tests à la solution de type ConsoleApplication qui sera «ami» de girandocore.dll, c est-à-dire qui aura accès aux s et méthodes internes de girandocore.dll. Ajoutez un projet à la solution de type ConsoleApplication qui ne sera pas «ami» et n aura donc accès qu aux s et méthodes publiques. Tous les projets seront compilés dans le dossier GuideRando > bin. QUESTION 2 : STRUCTURE SOMMET 1/3 - PROPRIÉTÉS (nécessite d avoir fait la question 1) structure propriété Ajoutez une structure publique non-mutable («write-once immutable») Sommet à ce projet, représentant un puy ou une montagne, et contenant les propriétés suivantes : le nom du sommet (chaîne de caractères), l altitude du sommet (entier), une brève description (chaîne de caractères). QUESTION 3 : STRUCTURE SOMMET 2/3 - TOSTRING (nécessite d avoir fait la question 2) ToString Réécrivez la méthode ToString. Testez-la dans l application de Tests. Exemple de résultat : Nom (Altitude mètres) - Description Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 5
QUESTION 4 : STRUCTURE SOMMET 3/3 - PROTOCOLES D ÉGALITÉ (nécessite d avoir fait la question 2) Equality Permettez la comparaison de deux valeurs de Sommet en réécrivant les protocoles d égalité nécessaires. Deux valeurs de Sommet seront égales si et seulement si les propriétés Nom sont égales et les propriétés Altitude sont égales. QUESTION 5 : CLASSE PAYS 1 - PROPRIÉTÉ (nécessite d avoir fait la question 1) propriété Écrivez une interne Pays possédant une propriété Nom (de type chaîne de caractères). QUESTION 6 : CLASSE RANDONNÉE 1 - PROPRIÉTÉS (nécessite d avoir fait la question 1) propriété Écrivez une interne Randonnée possédant les propriétés suivantes (ajoutez un constructeur permettant de les initialiser) : Nom (de type chaîne de caractères), Distance (de type réel) qui décrit la distance à parcourir en kilomètres, Dénivelée (de type entier) qui décrit le dénivelée de la randonnée, Durée (d un type qui permet de stocker une durée...) qui décrit le temps moyen nécessaire pour effectuer cette randonnée. QUESTION 7 : ENUM TYPENIVEAU (nécessite d avoir fait la question 1) enum Ajoutez un projet un nouveau type publique enum : TypeNiveau qui pourra prendre les valeurs : Inconnu, Facile, Normal, Difficile, TrèsDifficile. QUESTION 8 : CLASSE RANDONNÉE 3 - PROPRIÉTÉS (nécessite d avoir fait les questions 6 et 7 [6 au moins partiellement]) propriété Ajoutez une propriété Niveau du type de cette enum à la Randonnée et modifiez le constructeur pour pouvoir l initialiser. Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 6
QUESTION 9 : CLASSE RANDONNÉE 2 - COLLECTIONS (nécessite d avoir fait les questions 2 et 6 ; c est mieux si la question 4 a été faite) méthode collection Ajoutez une collection de Sommet à la Randonnée. Ajoutez une méthode permettant d ajouter une valeur de type Sommet. Cette méthode devra vérifier que le Sommet n existe pas déjà dans la collection avant de l ajouter. S il existe, le Sommet n est pas ajouté et la méthode renvoie false. Sinon, il est ajouté et la méthode renvoie true. Ajoutez une méthode qui permet d ajouter plusieurs valeurs de Sommet d un coup (un nombre indéterminé de Sommet). Cette méthode utilisera la méthode précédente. Testez la collection et les méthodes d ajout dans le projet Tests. QUESTION 10 : CLASSE RANDONNÉE 3 - PROPRIÉTÉ (nécessite d avoir fait les questions 5 et 6 [au moins partiellement]) propriété Ajoutez un membre interne de type Pays à la Randonnée QUESTION 11 : CLASSE RANDONNÉE 4 - PROTOCOLES D ÉGALITÉ (nécessite d avoir fait la question 6 [au moins partiellement]) Equality Implémentez les protocoles d égalité nécessaires à la comparaison de deux instances de Randonnée. Deux instances de Randonnée seront considérées comme égales si elles ont le même nom et la même durée. QUESTION 12 : CLASSE PAYS 2 - COLLECTION (nécessite d avoir fait les questions 5 et 6 [au moins partiellement] ; c est mieux si la question 11 a été faite) méthode collection Ajoutez à Pays un membre de type collection de Randonnée. Ajoutez une méthode permettant d ajouter une Randonnée : cette méthode rend false si la Randonnée existe déjà dans la collection, et rend true si elle n existe pas et est donc ajoutée dans ce cas. Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 7
QUESTION 13 : CLASSE RANDONNÉE 5 - CONSTRUCTEUR (nécessite d avoir fait la question 12) constructeur Modifiez le constructeur de Randonnée pour que la construction d une instance de Randonnée ajoute automatiquement la Randonnée dans la collection de Randonnée du Pays auquel elle appartient. QUESTION 14 : CLASSE RANDONNÉE 6 - TOSTRING (nécessite d avoir fait la question 6 [et 8 pour pouvoir ajouter la fin du résultat]) ToString Réécrivez la méthode ToString. Testez-la dans l application de Tests. Exemple de résultat : Rando : Nom ( Dénivelée m / XhXXmin Niveau : Niveau) QUESTION 15 : CLASSE PAYS 6 - TOSTRING (nécessite d avoir fait les questions 12 et 14) ToString Réécrivez la méthode ToString. Testez-la dans l application de Tests. Exemple de résultat : Nom :! Rando : Nom ( Dénivelée m / XhXXmin Niveau : Niveau)! Rando : Nom ( Dénivelée m / XhXXmin Niveau : Niveau)! Rando : Nom ( Dénivelée m / XhXXmin Niveau : Niveau)!... QUESTION 16 : CLASSE RANDONNÉE 6 - ABSTRAITE (nécessite d avoir fait la question 6) abstraite Rendez la Randonnée abstraite et rendez son constructeur protégé. QUESTION 17 : CLASSE RANDONNÉE 6 - PROPRIÉTÉ ABSTRAITE (nécessite d avoir fait les questions 8 et 16) propriété abstraite Dans la Randonnée, rendez la propriété Niveau abstraite (si vous ne réussissez pas, faites une méthode abstraite). Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 8
QUESTION 18 : CLASSE RANDONNÉEÀPIED (nécessite d avoir fait les questions 16 et 17 ) fille Ajoutez au projet la RandonnéeÀPied, héritant de Randonnée. Écrivez son constructeur et réécrivez la propriété Niveau. La formule de calcul du niveau est la suivante : (int)(dénivelée*2 / (nombre de minutes de Durée)) -2 Si cette valeur vaut :! 0 => Facile!!! 1 => Normal!!! 2 => Difficile!!! 3 ou plus => TrèsDifficile Testez cette dans l application de Tests. QUESTION 19 : CLASSE RANDONNÉEENVTT (nécessite d avoir fait les questions 16 et 17 ) fille Ajoutez au projet la RandonnéeEnVTT, héritant de Randonnée. Écrivez son constructeur et réécrivez la propriété Niveau. La formule de calcul du niveau est la suivante : (int)(dénivelée / (Distance*13)) Si cette valeur vaut :! 0 => Facile!!! 1 => Normal!!! 2 => Difficile!!! 3 ou plus => TrèsDifficile Testez cette dans l application de Tests. Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 9
QUESTION 20 : ENCAPSULATION (nécessite d avoir fait les questions 2, 9, 10 et 12 ) interfaces encapsulation Ajoutez au projet deux interfaces publiques : IPays contenant : une propriété Nom et une collection de randonnées (type à choisir pour garantir l encapsulation et la protection des données des s Pays et Randonnée) IRandonnée contenant : les propriétés Nom, Distance, Dénivelée, Durée, Niveau, une propriété permettant d accéder au pays (choisissez le type permettant de garantir l encapsulation et la protection des données des s Pays et Randonnée) une collection de Sommet (choisir le type de la collection pour garantir l encapsulation et la protection des données de la collection et des sommets). Faites en sorte que Pays implémente IPays et que Randonnée implémente IRandonnée. Testez ces interfaces et s dans l application de Tests. QUESTION 21 : CLASSE GUIDE (nécessite d avoir fait les questions 2, 9, 10 et 12 / ou la question 20 ) collections encapsulation Ajoutez au projet une Guide. a) Si vous n avez pas fait la question 20, rendez cette interne et ajoutez-lui des collections de Sommet, de Randonnée et de Pays internes. b) Si vous avez fait la question 20, rendez cette publique et ajoutez-lui des collections de sommets, randonnées et pays publiques (en choisissant bien vos types pour garantir l encapsulation, la protection et l accès aux données). Dans tous les cas, dans le constructeur de Guide, construisez-les ajoutez les randonnées, les sommets et les pays donnés en introduction dans le constructeur. Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 10
QUESTION 22 : LINQ (nécessite d avoir fait la question 21 [a ou b]) LINQ Réalisez les requêtes suivantes et affichez les résultats à l aide de LINQ. Dans l application («non amie» de la dll si vous avez fait 20.a, «amie» de la dll si vous avez fait 20.b), affichez tous les sommets du guide de plus de 1000 mètres d altitude. Dans l application («non amie» de la dll si vous avez fait 20.a, «amie» de la dll si vous avez fait 20.b), affichez toutes les randonnées du guide dont le dénivelée est supérieur à 300 mètres et la distance supérieure à 7 kilomètres. Vous afficherez le nom, le dénivelée et la distance de ces randonnées. Dans l application («non amie» de la dll si vous avez fait 20.a, «amie» de la dll si vous avez fait 20.b), affichez toutes les randonnées du guide par ordre de la plus courte à la plus longue. Dans l application («non amie» de la dll si vous avez fait 20.a, «amie» de la dll si vous avez fait 20.b), affichez le nom du pays qui possède le plus de randonnées (à l aide d une requête LINQ bien sûr... pas à la main...). Dans l application («non amie» de la dll si vous avez fait 20.a, «amie» de la dll si vous avez fait 20.b), à l aide d une requête LINQ et d un opérateur de projection, affichez le nom et la pente moyenne (Dénivelée / Distance) de toutes les randonnées du guide par ordre de pente moyenne croissante. Vous ne devez utiliser qu une seule instruction, au moins pour la création d une liste de pentes moyennes ordonnée (liste de flottants). Notez toutefois qu il est possible de tout faire (y compris l affichage en Console) avec une seule instruction. Essayez. Ajoutez à la Guide, une propriété (ou une méthode) rendant la liste des randonnées en VTT. Utilisez-la dans l application («non amie» de la dll si vous avez fait 20.a, «amie» de la dll si vous avez fait 20.b) et affichez le résultat. Marc Chevaldonné marc.chevaldonne@u-clermont1.fr IUT Informatique Clermont1 11