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 :

Bibliothèque de musique


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Points : 29
    Points
    29
    Par défaut Bibliothèque de musique
    Bonjour,
    Je voudrais implémenter une bibliothèque très simple de musique en C, en utilisant les structures de données et les listes chainées, mon idée est la suivante (c'est pas vraiment une idée):
    Mes entités:
    une structure Track avec comme champs : Nom, Artiste, Album, Genre.
    Album une liste chainée de Track.

    la bibliothèque est une liste chainée de tout Tracks.

    quand j'ajoute un nouveau Track à la bibliothèque, je dois entré le nom d'album, chercher s'il existe déjà, ajouter le Track à l'album sinon créer un nouveau album à partir du nom entré, enfin l'ajouter à la bibliothèque.

    Je crois que tout ça est faisable en C, si quelqu'un a d'autres idées meilleurs, ça me fera plaisir de les voir ..
    Merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Une liste chainée de structures Track me semble effectivement la meilleure solution. Cependant, il te faudra penser à l'enregistrer à un moment, et il faudra choisir un format de fichier.

    Bon courage.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    voici mes entités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #define EXP 20
     
    typedef struct track   /* Definition d'un type de structures de données Track */
    {
      char nom[EXP];       /* Nom du track */
      char artiste[EXP];   /* Nom de l'artiste */
      char album[EXP];     /* Nom de l'album */
    } Track;
     
    typedef struct track_list         /* Définition d'un type de structures de données Track_list */
    {
      Track track;                    /* Comporte des track */
      struct track_list *suivant;     /* Chaque track pointe vers le suivant */
    } Track_list;
     
    typedef Track_list* Album;        /* Album est un pointeur sur une liste de Tracks */
     
    typedef Track_list* Bibliotheque; /* La bibliothèque aussi */
    Si c'est bien je commencerai les fonctions ..

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Ça me paraît très bien. En plus, tu évites l'erreur fréquente consistant à masquer un pointeur dans un typedef.

  5. #5
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Au final, non. Le pointeur est bien caché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef Track_list* Album;        /* Album est un pointeur sur une liste de Tracks */
     
    typedef Track_list* Bibliotheque; /* La bibliothèque aussi */
    Plus tu pédales moins fort, moins t'avances plus vite.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Bien vu !

    Je n'ai pas pensé à scroller !

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Salut, désolé pour ce retard j'étais en vacances,

    Retournons a mon petit programme,

    J'ai des idées, je sais pas si je peux les mettres en C ,

    déjà voilà ce que j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #define EXP 30
     
    typedef struct
    {
    	char nom[EXP] ;
    	char artiste[EXP] ;
    	char album[EXP] ;
    } Track ;
     
    typedef struct tracklist
    {
    	Track track ;
    	struct tracklist *suivant ;
    }Tracklist;
    j'ai ecris une fonction d'ajout de track mais ça me parait très normal, c'est cette fonction que je dois modifier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Tracklist * ajouter_track(Tracklist * t)
    {
    	Tracklist *nouveau_track , pivot = NULL ;
     
    	if (( nouveau_track = (Tracklist *)malloc(sizeof(Tracklist))) == NULL )
    	{
    		printf(" Erreur d'allocation !\n");
    		exit (-1);
    	}
     
    	printf("Entrer le nom du track :\n");
    	scanf("%s", nouveau_track -> track -> nom );
     
    	printf("Entrer le nom de l'artiste :\n");
    	scanf("%s", nouveau_track -> track -> artiste );
     
    	printf("Entrer le nom de l'album :\n");
    	scanf("%s", nouveau_track -> track -> album );
     
    	nouveau_track -> suivant = NULL ;
     
    	if ( tracklist_vide ( t ) == 0 )
    	  t = nouveau_track ;
    	else
    	{
    	  pivot = t ;
    	  while( pivot -> suivant != NULL )
    	    pivot = pivot -> suivant ;
    	  pivot -> suivant = nouveau_track ;
    	}
    }
    ce que je veux c'est quand j'ajoute un nouveau track, j'aurai un nom, un album et un artiste par exemple, je veux faire une sorte de base de données avec les entités (artiste album .. ) qui se mettent a jour lorsque j'ajoute un track ..

    comment je peux faire ça ? a l'aide des fichiers ?

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sépare un peu mieux tes fonctions de création et d'ajout dans la liste.
    Je conseille:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /*Alloue et initialise avec valeurs par défaut.
      Notamment, NULL pour tous les pointeurs.*/
    TrackList * alloc_chainon_track();
     
    /*Crée et remplit*/
    TrackList * nouveau_chainon_track();
     
    /*Ajoute à la liste, retourne 0 si OK, -1 si échec*/
    int ajouter_track(Tracklist **ppPremier, Tracklist *pNouveau);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Jouer de la musique en C sans bibliothèque externe
    Par AchilleFraisse dans le forum Débuter
    Réponses: 1
    Dernier message: 12/06/2014, 14h27
  2. [PHP 5.0] POO Aide pour la Modélisation d'une bibliothèque de musique
    Par tristan-f dans le forum Langage
    Réponses: 6
    Dernier message: 31/08/2013, 19h40
  3. Réponses: 15
    Dernier message: 04/09/2012, 15h49
  4. Réponses: 1
    Dernier message: 09/03/2010, 17h04
  5. Bibliothèque de musique en java, possible ?
    Par Valentin60 dans le forum Général Java
    Réponses: 5
    Dernier message: 09/10/2009, 19h19

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