Classe inutilisable

Résolu/Fermé
barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 - 23 févr. 2022 à 11:29
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 24 févr. 2022 à 19:24
Bonjour,

Actuellement en formation développeur C#, j'ai une question concernant un TP que j'ai terminé.

Il s'agit d'une médiathèque avec 4 classes (Livre.cs, Bdd.cs, Gens.cs, Program.cs) et une énumération "Genre".

Livre.cs :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Bibliotheque
{
    internal class Livre
    {
        private string nom;
        private string auteur;
        private int nbPages;
        private Genre genre;

        // constructeur par défaut
        public Livre()
        {
            nom = "";
            auteur = "";
            nbPages = 0;
            genre = new Genre();
        }

        // surcharge du constructeur
        public Livre(string initNom, string initAuteur, int initNbPages, Genre initGenre)
        {
            nom = initNom;
            auteur = initAuteur;
            nbPages = initNbPages;
            genre = initGenre;
        }

        // getter
        public string GetNom()
        {
            return nom;
        }

        // getter
        public string GetAuteur()
        {
            return auteur;
        }
        
        // getter
        public int GetNbPages()
        {
            return nbPages;
        }

        // getter
        public Genre GetGenre()
        {
            return genre;
        }

    }
}


Bdd.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Bibliotheque
{
    internal class Bdd
    {
        private Dictionary<double, Livre> liensISBN;
        
        // constructeur par défaut
        public Bdd()
        {
            liensISBN = new Dictionary<double, Livre>();
        }

        // surcharge du constructeur
        public Bdd(Dictionary<double, Livre> initLiensISBN)
        {
            liensISBN = initLiensISBN;
        }

        // getter
        public Dictionary<double, Livre> GetLiensISBN()
        {
            return liensISBN;
        }

        // setter
        public void SetLiensISBN(Dictionary<double, Livre> newLiensISBN){
            liensISBN = newLiensISBN;
        }
    }
}


Gens.cs :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Bibliotheque
{
    internal class Gens
    {
        private List<Livre> listeEmpruntes;
        private string nom;
        private string prenom;

        // constructeur par défaut
        public Gens()
        {
            List <Livre> listeEmpruntes = new List<Livre>();
            nom = "";
            prenom = "";
        }

        // surcharge du constructeur
        public Gens(List<Livre> initListeEmpruntes, string initNom, string initPrenom)
        {
            this.listeEmpruntes = initListeEmpruntes;
            this.nom = initNom;
            this.prenom = initPrenom;
        }

        // méthode pour afficher les livres empruntés
        public List<string> AfficherEmpruntes()
        {
            List<string> collection = new List<string>();

            foreach (Livre bouquin in GetListeEmpruntes())
            {
                //Console.WriteLine(bouquin.GetNom() + " - " + bouquin.GetAuteur());
                collection.Add(bouquin.GetNom());
            }
            return collection;
        }

        // getter
        public List<Livre> GetListeEmpruntes()
        {
            return listeEmpruntes;
        }

        // getter
        public string GetNom()
        {
            return nom;
        }

        // getter
        public string GetPrenom()
        {
            return prenom;
        }
    }
}


Program.cs :
// See https://aka.ms/new-console-template for more information

using System;

namespace Bibliotheque
// Note: actual namespace depends on the project name.
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Livre book1 = new Livre("Mobydick", "Herman Melville", 426, Genre.aventure);
            Livre book2 = new Livre("Vingt Mille Lieues sous les mers", "Jules Verne", 784, Genre.thriller);
            Livre book3 = new Livre("La Vie est un roman", "Guillaume Musso", 358, Genre.roman);
            Livre book4 = new Livre("Et que ne durent que les moments doux", "Virginie Grimaldi", 269, Genre.roman);
            Livre book5 = new Livre("Né sous une bonne étoile", "Aurélie Valognes", 514, Genre.roman);
            Livre book6 = new Livre("La Commode aux tiroirs de couleurs", "Olivia Ruiz", 497, Genre.sf);

            Dictionary<double, Livre> dico = new Dictionary<double, Livre>();
            //Bdd dico = new Bdd();

            dico.Add(1478525874, book1);
            dico.Add(3698412578, book2);
            dico.Add(2587413694, book3);
            dico.Add(6547893214, book4);
            dico.Add(3210458796, book5);
            dico.Add(9512368741, book6);

            Gens nanadusud = new Gens(new List<Livre> { book3, book4, book5 }, "Rambaud", "Sarah");

            Console.WriteLine("Livres empruntés par : " + nanadusud.GetPrenom() + " " + nanadusud.GetNom());
            Console.WriteLine();

            foreach (string titre in nanadusud.AfficherEmpruntes())
            {
                for (int i = 0; i < dico.Count; i++)
                {
                    if (titre == dico.ElementAt(i).Value.GetNom())
                    {
                        Console.WriteLine("ISBN: {0}, Titre: \"{1}\"", dico.ElementAt(i).Key, titre);
                    }
                }

            }
            //nanadusud.AfficherEmpruntes();
        }
    }
}


Les classes, attributs et méthodes sont imposés. Mon code fonctionne, cependant je n'utilise pas et je n'arrive pas à utiliser la classe Bdd.cs qui contient uniquement un dictionnaire avec le titre et le numéro ISBN des livres. Tout ce qui provient de cette classe (getter, setter) n'est pas reconnu dans le main.

Merci d'avance pour votre aide.

Configuration: Windows / Firefox 97.0

6 réponses

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
Modifié le 23 févr. 2022 à 23:57
Bonsoir

tu n'as pas donné le code de l'enum Genre, j'ai donc pris les valeurs que tu utilises au début du programme.

    enum Genre
    {
        aventure,
        thriller,
        roman,
        sf,
    }



J'ai modifié la fin du programme comme suit
            //nanadusud.AfficherEmpruntes();

            Console.WriteLine("Test Bdd");
            Bdd testBdd = new Bdd(dico);
            foreach (var item in testBdd.GetLiensISBN())
                Console.WriteLine("clé {0}, valeur {1}", item.Key, item.Value.GetNom());

            Console.ReadKey();// pour ne pas que la console se ferme à la fin et qu'on puisse lire


Et j'ai ça


Peux tu essayer chez toi et me dire ce qui se passe?


0
barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905
Modifié le 24 févr. 2022 à 01:43
Bien joué ! J'obtiens le même résultat que toi.

En fait en voyant tes modifications je me rend compte que je n'arrivais pas à trouver la bonne syntaxe pour instancier la classe Bdd, je n'avais pas pensé à mettre dico entre parenthèses, pourtant c'est bête il suffisait de se référer au constructeur.

J'ai modifié la fin du programme en remplaçant dico par testBdd.GetLiensISBN() et ça fonctionne comme attendu.

Je te remercie pour ton aide et te souhaite une bonne journée.

0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
24 févr. 2022 à 07:04
De rien
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
24 févr. 2022 à 17:35
Bonsoir

ce matin, je n'avais pas trop le temps, mais ta classe est prévue aussi pour fonctionner avec le constructeur sans paramètres.

De cette façon
            Bdd testBdd = new Bdd();
            foreach (var item in dico)
                testBdd.GetLiensISBN().Add(item.Key, item.Value);

            foreach (var item in testBdd.GetLiensISBN())
                Console.WriteLine("clé {0}, valeur {1}", item.Key, item.Value.GetNom());

Ou évidement en créant directement les items sans passer par dico.
            Bdd testBdd = new Bdd();
            testBdd.GetLiensISBN().Add(1478525874, book1);
            testBdd.GetLiensISBN().Add(3698412578, book2);
            testBdd.GetLiensISBN().Add(2587413694, book3);
            testBdd.GetLiensISBN().Add(6547893214, book4);
            testBdd.GetLiensISBN().Add(3210458796, book5);
            testBdd.GetLiensISBN().Add(9512368741, book6);

            foreach (var item in testBdd.GetLiensISBN())
                Console.WriteLine("clé {0}, valeur {1}", item.Key, item.Value.GetNom());



Mais aussi de cette façon
            Bdd testBdd = new Bdd();
            foreach (var item in dico)
                testBdd.GetLiensISBN().Add(item.Key, item.Value);

            foreach (var item in testBdd.GetLiensISBN())
                Console.WriteLine("clé {0}, valeur {1}", item.Key, item.Value.GetNom());


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905
24 févr. 2022 à 19:09
Effectivement il y a aussi le constructeur sans paramètre.

La première façon et la dernière sont identiques, non ?
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
24 févr. 2022 à 19:24
Ha oui, erreur de copier coller ;)

            Bdd testBdd = new Bdd();
            testBdd.SetLiensISBN(dico);

            foreach (var item in testBdd.GetLiensISBN())
                Console.WriteLine("clé {0}, valeur {1}", item.Key, item.Value.GetNom());

0