IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Classes Livres et classes auteurs


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Classes Livres et classes auteurs
    Bonjour,

    Je suis en train de développer une application personnelle : la gestion des bibliothèques.

    J'utilise Borland Builder C++.

    Je ne me sers pas de la base de données parce que je veux déployer cette application sur des pc qui ne sont pas puissants, pas rapides et aussi simple à installer et à utiliser. Or la plupart de la base de données, il faut installer auparavant.

    Bref, j'utilise donc des fichiers à accès séquentiel. Mais je préfère charger toutes les données de tous les fichiers dans la mémoire de l'application pour une question de simplicité à programmer.

    Le problème qui me pose est que j'ai
    • un fichier Livre qui regroupe un identifiant et un titre
    • un fichier Auteur qui regroupe un identifiant, un prénom et un nom
    • un fichier "Ecrire" qui associe entre deux entités Livre et Auteur avec l'identifiant du livre et l'identifiant Auteur


    Effectivement, un livre peut être écrit par 1 ou plusieurs auteurs et un auteur peut écrire 1 ou plusieurs livres.

    Donc j'ai une classe Livre et une classe Auteur mais je ne vois pas comment faire le lien entre ces deux classes. Je m'explique, je veux chercher l'auteur d'un livre donc je pars d'une classe Livre en récupérant son identifiant mais après mystère.

    J'ai plusieurs solutions mais je ne sais pas si elles sont bonnes :

    1. Faire un tableaux qui contiendra les données du fichier "Ecrire" qui est une association
    2. Faire une classe Ecrire qui contiendra un identifiant du Livre et un identifiant de l'auteur


    Qu'en pensez-vous? Trop compliqué? Avez vous d'autres solutions? Dois je revenir à la base de données?

    Toutes les suggestions sont les bienvenues

  2. #2
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    A ta place je prendrai le problème dans l'autre sens.

    1/ Comment organiser mes données en mémoire ?

    Par exemple :

    - Un livre c'est un couple du style <ID Livre, Nom Livre> et on veut en stocker une collection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::map<unsigned int, std::string> _mapLivres;
    - Un auteur c'est un couple du style <ID Auteur, Nom Auteur> et on veut aussi en stocker une collection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::map<unsigned int, std::string> _mapAuteurs;
    - Une bibliothèque c'est une collection de couple du style <ID Livre, Liste ID Auteurs> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::map<unsigned int, std::vector<unsigned int> > _mapBibli;
    2/ Comment sauver ces données dans un(plusieur) fichier(s) :
    Pour ça je te conseille d'utiliser la librairie Serialization dans boost. Elle te permet en quelques lignes de serialiser des types simples comme "map, vector..." en Binaire, Texte, XML... Avec ou sans compression... Bref le bonheur
    Plus y'a d'Gruyère, plus y'a d'trous !
    Plus y'a d'trous, moins y'a d'Gruyère...
    Donc, Plus y'a d'Gruyère, moins y'a d'Gruyère !!!

  3. #3
    Membre habitué Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Points : 154
    Points
    154
    Par défaut
    j'ai déjà eu ce genre de PB, voici en quelques mots comment j'ai fait:
    (je transpose selon ton exemple)
    un classe Auteur avec un un tableau (std::vector) de poiteurs (ou ref) sur une classe livre

    une classe livre

    dans le fichier cela peut se présenter comme cela

    [AUTEUR1]
    nom =
    prenom =
    liste de livre = livre1, livre2, livre12

    [LIVRE1]
    titre =
    date =

    Quand tu lis le fichier à chaque occurencede [AUTEUR] tu créer la classe associée, à chaque occurence de livre pareil. Après tu relit le ficheir une fois et tu créer les liens.
    Il y a 2 gros incovénients à cette solution:
    1) tu dois relire to ficheir de data 2 fois, donc si tu as beaucoup de données ça peut-être long.
    2) si tu cherches un auteur à partir d'un livre, il faut que tu demande à tous les auteurs 1 par 1 si c'est eux qui ont écrit le livre. Donc lenteur en cas de nombreux auteurs

    Cette solution était plutôt adaptée dans mon cas, maintenant dans le tient elle le semble moins. Mais tu peux toujours y apporter des améliroations.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci à vous deux de m'avoir répondu

    Les deux solutions sont très intéressantes mais la solution de superspag est la mieux adaptée à ma situation.

    Je ne connaissais pas le conteneur map qui est intéressants après m'être renseigné.

    En ce qui concerne l'auteur, j'ai le nom et le prénom et apparement map ne peut pas contenir plus de deux valeurs alors j'ai pensé à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::map<unsigned int, Auteur> > _mapAuteurs
    de façon à ce que je puisse accéder à plusieurs données concernant l'auteur.

    Est ce possible?

  5. #5
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    les classes de la stl comme map sont des classes template et peuvent prendre n'importe quel type...

    Tu peux donc :

    - soit definir ta propre classe auteur avec tous les attributs que tu veux (dans ce cas il faudra faire quelque petit truc pour que ça se serialise avec boost::serialization)

    - soit utiliser des types simple pour le cas ou les data sont simples. par exemple un auteur = un nom et un prenom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef std::pair<std::string, std::string> AuteurType;
     
    ou
     
    typedef boost::tuples::tuple<std::string, std::string, autres truc...> AuteurType;
     
    et
     
    std::map<unsigned int, AuteurType> > _mapAuteurs
    Avec la classe pair de la stl tu peux contenir deux valeurs du type de tu veux.

    Avec la classe tuple de boost tu peux en contenir jusqu'a 10 il me semble... à verifier...

    Plus y'a d'Gruyère, plus y'a d'trous !
    Plus y'a d'trous, moins y'a d'Gruyère...
    Donc, Plus y'a d'Gruyère, moins y'a d'Gruyère !!!

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Cool

    merci superspag

  7. #7
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    De rien

    Pense au si tout va pour le mieux dans le meilleur des monde

    bon allé... j'retourne bosser



    ++
    Plus y'a d'Gruyère, plus y'a d'trous !
    Plus y'a d'trous, moins y'a d'Gruyère...
    Donc, Plus y'a d'Gruyère, moins y'a d'Gruyère !!!

Discussions similaires

  1. Réaliser une classe "livre" en programmation Java
    Par Programmerjr dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 30/09/2014, 23h53
  2. Apple veut révolutionner les livres de classe
    Par Gordon Fowler dans le forum Autres Logiciels
    Réponses: 37
    Dernier message: 27/01/2012, 09h34
  3. class pour table + class pour td = class td non fonctionnelle ?
    Par supergrey dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/05/2009, 08h13
  4. Problème classe livre pour bibliothéque
    Par Invité dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 06/12/2008, 09h57
  5. Réponses: 31
    Dernier message: 30/03/2006, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo