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 :

Gestion d'une cdthèque


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut Gestion d'une cdthèque
    Bonjour,
    je suis actuellement en train d'essayer de programmer la gestion d'une cdthèque, càd que j'ai une armoire de CDs et je veux savoir quels sont les CDs qui la composent, faire une recherche de CDs, ajouter ou supprimer un CD, et signaler un emprunt de CD. Ceci est un projet dans la cadre de mon DUT mesures Physiques, je ne suis donc pas spécialisé dans la programmation en C.
    Pour le moment, j'aurais voulu savoir si quelqu'un aurait pu m'aider à intégrer la fonction "strncmp" pour effectuer une recherche de CD par chaine de caractères.
    Par ailleurs j'ai déjà insérer une fonction d'emprunt, malheuresement, je n'arrive pas à a changer la valeur de ma variable correspondante....
    Je joins donc aussi mon programme à ce message, et remercie tous ceux qui m'aideront!!
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    #include<stdio.h>
    #include<string.h>
    #define N 50
    #define NB_PISTE_MAX 50
     
    int nbCD=5;  //defini le nbr de CD dans la cdthèque
     
    struct cd //Structure definissant les infos pour un CD
    {
    	char album[50];
    	char artiste[50];
    	char titre[NB_PISTE_MAX][50];
    	int  nb_piste; //nbr de pistes max entrée dans l'album
    	int dispo; //variable de presence du CD dans la cdthèque
    };
     
    void printCD(struct cd monCD)  //fct pour l'affichage des titres d'un CD
    {
    	int j,t;
     
    	printf ("\n --> ");
    	printf ("  %s \n", monCD.album);	 // on fait defiler d'abord tous les albums, en affichant
    	printf ("  %s \n", monCD.artiste);	//les noms d'albums ensuite les artistes puis les titres d'albums
    	printf ("Il y %d pistes dans cet album \n", monCD.nb_piste);	//les noms d'albums ensuite les artistes puis les titres d'albums
          						//avec choix du nbr de titres a afficher
    	printf ("\n Combien de titres à afficher? \n");
    	scanf ("%d", &t);
     
    	if (monCD.nb_piste > t)
    	{
    		for (j=0; j<t; j++)
    		{
    			printf ("   %s \n", monCD.titre[j]);
    			printf ("............... \n");
    		}
    	}
    	else
    	{
    		for (j=0; j<monCD.nb_piste; j++)
    		{
    			printf ("   %s \n", monCD.titre[j]);
    			printf ("............... \n");
    		}
    	}
     
    	if (monCD.dispo==0)
    	{
    	    printf ("\n >>Le CD est emprunté \n", monCD.dispo);
    	}
    	if (monCD.dispo==1)
    	{
    	    printf ("\n >>Le CD est disponible \n", monCD.dispo);
        }
    }
     
    void printCD2 (struct cd monCD)
    {
        int e;
     
    	printf ("\n --> ");
    	printf ("  %s \n", monCD.album);	 // on fait defiler d'abord tous les albums, en affichant
    	printf ("  %s \n", monCD.artiste);	//les noms d'albums ensuite les artistes puis les titres d'albums
    	printf ("Il y %d pistes dans cet album \n", monCD.nb_piste);	//les noms d'albums ensuite les artistes puis les titres d'albums
          						//avec choix du nbr de titres a afficher
        if (monCD.dispo==0)
    	{
    	    printf ("\n >>Le CD est emprunté \n", monCD.dispo);
    	}
    	if (monCD.dispo==1)
    	{
    	    printf ("\n >>Le CD est disponible \n", monCD.dispo);
        }
     
        printf ("Désirez vous l'emprunter? \n Tapez 0 pour ne pas l'emprunter. \n Tapez 1 pour emprunter le CD. \n%");
        scanf ("%d",&e);
     
        if (e==1)
        {
            monCD.dispo=0;
            printf ("\n Le CD est maintenant emprunté \n");  /*!!!! PB !!!! La valeur de dispo ne change pas réellement*/
                                                            /*!!!  Au retour dans le menu, ca n'a pas changé !!!!!*/
        }
        if (e==0)
        {
            printf ("%d", e);
        }
    }
     
     
    void print_tab(struct cd tab[])  //lance la procedure d'affichage de toutes la structure, soit ts les cd
    {
    	int i;
     
    	for (i=0; i<nbCD; i++)
    	{
    		printCD(tab[i]);
    		printf ("............... \n");
    	}
    }
     
     
    void print_tab_test_A(struct cd tab[],char c)  //affiche les cd dont le nom d'album correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].album[0]);*/
     
    		if (c==tab[i].album[0])
    		{
    			printCD(tab[i]);
    			h=1;
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'albums commencant par %c \n \n", c);
    		printf ("............... \n");
    	}
    }
     
    void print_tab_test_B(struct cd tab[],char c)  //affiche les cd dont le nom d'album correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].album[0]);*/
     
    		if ( c==tab[i].album[0] )
    		{
    			printCD2(tab[i]);
    			h=1;
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'albums commencant par %c \n \n", c);
    		printf ("............... \n");
    	}
    }
     
     
    void print_tab_test2_A(struct cd tab[],char c)  //affiche les cd dont le 1er carct du nom d'artiste correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].artiste[0]);*/
     
    		if ( c==tab[i].artiste[0] )
    		{
    			printCD(tab[i]);
    			h=1;
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'artistes commencant par %c \n \n", c);
    		printf ("............... \n");
    	}
    }
     
    void print_tab_test2_B(struct cd tab[],char c)  //affiche les cd dont le 1er carct du nom d'artiste correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].artiste[0]);*/
     
    		if ( c==tab[i].artiste[0] )
    		{
    			printCD2(tab[i]);
    			h=1;
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'artistes commencant par %c \n \n", c);
    		printf ("............... \n");
    	}
    }
     
     
    main()
    {
    	char c;
    	int k,a;
    	struct cd tab_cd[nbCD];
     
    	strcpy(tab_cd[0].album,"Nevermind");
    	strcpy(tab_cd[0].artiste,"Nirvana");
    	tab_cd[0].nb_piste =  12;
    	strcpy(tab_cd[0].titre[0],"Come as you are");
    	strcpy(tab_cd[0].titre[1],"In Bloom");
    	strcpy(tab_cd[0].titre[2],"Smells like teen spirit");
    	strcpy(tab_cd[0].titre[3],"Breed");
    	strcpy(tab_cd[0].titre[4],"Lithium");
    	strcpy(tab_cd[0].titre[5],"Polly");
    	strcpy(tab_cd[0].titre[6],"Territorial pissings");
    	strcpy(tab_cd[0].titre[7],"Drain you");
    	strcpy(tab_cd[0].titre[8],"Lounge Act");
    	strcpy(tab_cd[0].titre[9],"Stay away");
    	strcpy(tab_cd[0].titre[10],"On a plain");
    	strcpy(tab_cd[0].titre[11],"Somthing in the way");
    	tab_cd[0].dispo= 0;
     
     
     
    	strcpy(tab_cd[1].album,"Révolution");
    	strcpy(tab_cd[1].artiste,"Minimum serious");
    	tab_cd[1].nb_piste =  12;
    	strcpy(tab_cd[1].titre[0],"Le dernier soir");
    	strcpy(tab_cd[1].titre[1],"R");
    	strcpy(tab_cd[1].titre[2],"Qui s'ennuie de moi");
    	strcpy(tab_cd[1].titre[3],"On m'avait dit");
    	strcpy(tab_cd[1].titre[4],"100X");
    	strcpy(tab_cd[1].titre[5],"Gloria");
    	strcpy(tab_cd[1].titre[6],"Red Light");
    	strcpy(tab_cd[1].titre[7],"Les Ombres sur la route");
    	strcpy(tab_cd[1].titre[8],"(Ma vie)");
    	strcpy(tab_cd[1].titre[9],"Ailleurs");
    	strcpy(tab_cd[1].titre[10],"88");
    	strcpy(tab_cd[1].titre[11],"Call me");
    	tab_cd[1].dispo= 1;
     
     
     
    	strcpy(tab_cd[2].album,"Fous a lier");
    	strcpy(tab_cd[2].artiste,"Les Innocents");
    	tab_cd[2].nb_piste =  11;
    	strcpy(tab_cd[2].titre[0],"Un homme extraordinaire");
    	strcpy(tab_cd[2].titre[1],"Je vais a bang bang");
    	strcpy(tab_cd[2].titre[2],"Un autre finistère");
    	strcpy(tab_cd[2].titre[3],"Mon Dernier Soldat");
    	strcpy(tab_cd[2].titre[4],"Confessions d'un vieux serpent");
    	strcpy(tab_cd[2].titre[5],"Bella Donna Mia");
    	strcpy(tab_cd[2].titre[6],"Fous a lier");
    	strcpy(tab_cd[2].titre[7],"Le paravent");
    	strcpy(tab_cd[2].titre[8],"Les remorques");
    	strcpy(tab_cd[2].titre[9],"En tapant du poing");
    	strcpy(tab_cd[2].titre[10],"Marie prends ton temps");
    	tab_cd[2].dispo= 0;
     
     
     
     
    	strcpy(tab_cd[3].album,"No need to argue");
    	strcpy(tab_cd[3].artiste,"The Cranberries");
    	tab_cd[3].nb_piste =  13;
    	strcpy(tab_cd[3].titre[0],"Olde to my family");
    	strcpy(tab_cd[3].titre[1],"I can't be with you");
    	strcpy(tab_cd[3].titre[2],"twenty one");
    	strcpy(tab_cd[3].titre[3],"Zombie");
    	strcpy(tab_cd[3].titre[4],"Empty");
    	strcpy(tab_cd[3].titre[5],"Everything I said");
    	strcpy(tab_cd[3].titre[6],"The Icicle Melts");
    	strcpy(tab_cd[3].titre[7],"Disappointment");
    	strcpy(tab_cd[3].titre[8],"Ridiculous thoughts");
    	strcpy(tab_cd[3].titre[9],"Dreaming My Dreams");
    	strcpy(tab_cd[3].titre[10],"Yeat's grave");
    	strcpy(tab_cd[3].titre[11],"Daffodil lament");
    	strcpy(tab_cd[3].titre[12],"NO need to Argue");
    	tab_cd[3].dispo= 1;
     
     
     
     
    	strcpy(tab_cd[4].album,"Innuendo");
    	strcpy(tab_cd[4].artiste,"Queen");
    	tab_cd[4].nb_piste = 12;
    	strcpy(tab_cd[4].titre[0],"Innuendo");
    	strcpy(tab_cd[4].titre[1],"I'm going slightly mad");
    	strcpy(tab_cd[4].titre[2],"Headlong");
    	strcpy(tab_cd[4].titre[3],"I can't live with you");
    	strcpy(tab_cd[4].titre[4],"Don't Try So Hard");
    	strcpy(tab_cd[4].titre[5],"Ride the wild wind");
    	strcpy(tab_cd[4].titre[6],"All god's People");
    	strcpy(tab_cd[4].titre[7],"These are the days of our lives");
    	strcpy(tab_cd[4].titre[8],"Delilah");
    	strcpy(tab_cd[4].titre[9],"The Hitman");
    	strcpy(tab_cd[4].titre[10],"Bijou");
    	strcpy(tab_cd[4].titre[11],"The show Must go on");
    	tab_cd[4].dispo= 1;
     
    	//Ajout d'un cd
    	//scanf du nom
    	//strcpy(tab_cd[nbCD].album,nom);
    	//scanf du nom
    	//strcpy(tab_cd[nbCD].artiste,nom);
    	//nbCD=nbCD+1
     
     
        //-->afficher les cd didpo ou les cd emprunte!!
     
    	do  //boucle de menu
    	{
    		printf ("\n *MENU* \n Que voulez vous faire? \n \n");
    		printf ("Afficher tous les cds, tapez 1. \n");
    		printf ("Effectuer une recherche d'artiste ou d'albums, tapez 2. \n");
    		printf ("Effectuer un emprunt, tapez 3. \n");
    		printf ("quitter la cdthèque, tapez 0. \n");
    		scanf ("%d",&a);
     
    		if (a==1)
    		{
    			printf ("\n Tous les albums \n");
    			print_tab(tab_cd);
     
    		}
    		if (a==2)
    		{
    			printf ("\n Recherche par: \n Album, tapez 0 \n Artiste, tapez 1 \n");
    			scanf ("%d",&k);
     
    			if (k==0)
    			{
    				printf ("\n entrez la 1ere lettre de l'album recherché :\n (attention: tous les albums commencent par une majuscule!!) \n");
    				scanf (" %c", &c);
     
    				print_tab_test_A (tab_cd, c);
    			}
    			if (k==1)
    			{
    				printf ("\n entrez la 1ere lettre de l'artiste recherché :\n (attention tous les noms d'artistes commencent par une majuscule!!) \n");
    				scanf (" %c", &c);
     
    				print_tab_test2_A (tab_cd, c);
    			}
    		}
    		if (a==3)
    		{
    		    printf ("\n Recherche le CD à emprunté par: \n Album, tapez 0 \n Artiste, tapez 1 \n");
    			scanf ("%d",&k);
     
    			if (k==0)
    			{
    				printf ("\n entrez la 1ere lettre de l'album recherché :\n (attention: tous les albums commencent par une majuscule!!) \n");
    				scanf (" %c", &c);
     
    				print_tab_test_B (tab_cd, c);
    			}
    			if (k==1)
    			{
    				printf ("\n entrez la 1ere lettre de l'artiste recherché :\n (attention tous les noms d'artistes commencent par une majuscule!!) \n");
    				scanf (" %c", &c);
     
    				print_tab_test2_B (tab_cd, c);
    			}
    		}
    	}
    	while (a!=0);
    }
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par hazel Voir le message
    Bonjour,
    je suis actuellement en train d'essayer de programmer la gestion d'une cdthèque, càd que j'ai une armoire de CDs et je veux savoir quels sont les CDs qui la composent, faire une recherche de CDs, ajouter ou supprimer un CD, et signaler un emprunt de CD. Ceci est un projet dans la cadre de mon DUT mesures Physiques, je ne suis donc pas spécialisé dans la programmation en C.
    Pour le moment, j'aurais voulu savoir si quelqu'un aurait pu m'aider à intégrer la fonction "strncmp" pour effectuer une recherche de CD par chaine de caractères.
    Par ailleurs j'ai déjà insérer une fonction d'emprunt, malheuresement, je n'arrive pas à a changer la valeur de ma variable correspondante....
    Je joins donc aussi mon programme à ce message, et remercie tous ceux qui m'aideront!!
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    #include<stdio.h>
    #include<string.h>
    #define N 50
    #define NB_PISTE_MAX 50
     
    int nbCD=5;  //defini le nbr de CD dans la cdthèque
     
    struct cd //Structure definissant les infos pour un CD
    {
    	char album[50];
    	char artiste[50];
    	char titre[NB_PISTE_MAX][50];
    	int  nb_piste; //nbr de pistes max entrée dans l'album
    	int dispo; //variable de presence du CD dans la cdthèque
    };
     
    void printCD(struct cd monCD)  //fct pour l'affichage des titres d'un CD
    {
    	int j,t;
     
    	printf ("\n --> ");
    	printf ("  %s \n", monCD.album);	 // on fait defiler d'abord tous les albums, en affichant
    	printf ("  %s \n", monCD.artiste);	//les noms d'albums ensuite les artistes puis les titres d'albums
    	printf ("Il y %d pistes dans cet album \n", monCD.nb_piste);	//les noms d'albums ensuite les artistes puis les titres d'albums
          						//avec choix du nbr de titres a afficher
    	printf ("\n Combien de titres à afficher? \n");
    	scanf ("%d", &t);
     
    	if (monCD.nb_piste > t)
    	{
    		for (j=0; j<t; j++)
    		{
    			printf ("   %s \n", monCD.titre[j]);
    			printf ("............... \n");
    		}
    	}
    	else
    	{
    		for (j=0; j<monCD.nb_piste; j++)
    		{
    			printf ("   %s \n", monCD.titre[j]);
    			printf ("............... \n");
    		}
    	}
     
    	if (monCD.dispo==0)
    	{
    	    printf ("\n >>Le CD est emprunté \n", monCD.dispo);
    	}
    	if (monCD.dispo==1)
    	{
    	    printf ("\n >>Le CD est disponible \n", monCD.dispo);
        }
    }
     
    void printCD2 (struct cd monCD)
    {
        int e;
     
    	printf ("\n --> ");
    	printf ("  %s \n", monCD.album);	 // on fait defiler d'abord tous les albums, en affichant
    	printf ("  %s \n", monCD.artiste);	//les noms d'albums ensuite les artistes puis les titres d'albums
    	printf ("Il y %d pistes dans cet album \n", monCD.nb_piste);	//les noms d'albums ensuite les artistes puis les titres d'albums
          						//avec choix du nbr de titres a afficher
        if (monCD.dispo==0)
    	{
    	    printf ("\n >>Le CD est emprunté \n", monCD.dispo);
    	}
    	if (monCD.dispo==1)
    	{
    	    printf ("\n >>Le CD est disponible \n", monCD.dispo);
        }
     
        printf ("Désirez vous l'emprunter? \n Tapez 0 pour ne pas l'emprunter. \n Tapez 1 pour emprunter le CD. \n%");
        scanf ("%d",&e);
     
        if (e==1)
        {
            monCD.dispo=0;
            printf ("\n Le CD est maintenant emprunté \n");  /*!!!! PB !!!! La valeur de dispo ne change pas réellement*/
                                                            /*!!!  Au retour dans le menu, ca n'a pas changé !!!!!*/
        }
        if (e==0)
        {
            printf ("%d", e);
        }
    }
     
     
    void print_tab(struct cd tab[])  //lance la procedure d'affichage de toutes la structure, soit ts les cd
    {
    	int i;
     
    	for (i=0; i<nbCD; i++)
    	{
    		printCD(tab[i]);
    		printf ("............... \n");
    	}
    }
     
     
    void print_tab_test_A(struct cd tab[],char c)  //affiche les cd dont le nom d'album correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].album[0]);*/
     
    		if (c==tab[i].album[0])
    		{
    			printCD(tab[i]);
    			h=1;
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'albums commencant par %c \n \n", c);
    		printf ("............... \n");
    	}
    }
     
    void print_tab_test_B(struct cd tab[],char c)  //affiche les cd dont le nom d'album correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].album[0]);*/
     
    		if ( c==tab[i].album[0] )
    		{
    			printCD2(tab[i]);
    			h=1;
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'albums commencant par %c \n \n", c);
    		printf ("............... \n");
    	}
    }
     
     
    void print_tab_test2_A(struct cd tab[],char c)  //affiche les cd dont le 1er carct du nom d'artiste correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].artiste[0]);*/
     
    		if ( c==tab[i].artiste[0] )
    		{
    			printCD(tab[i]);
    			h=1;
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'artistes commencant par %c \n \n", c);
    		printf ("............... \n");
    	}
    }
     
    void print_tab_test2_B(struct cd tab[],char c)  //affiche les cd dont le 1er carct du nom d'artiste correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].artiste[0]);*/
     
    		if ( c==tab[i].artiste[0] )
    		{
    			printCD2(tab[i]);
    			h=1;
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'artistes commencant par %c \n \n", c);
    		printf ("............... \n");
    	}
    }
     
     
    main()
    {
    	char c;
    	int k,a;
    	struct cd tab_cd[nbCD];
     
    	strcpy(tab_cd[0].album,"Nevermind");
    	strcpy(tab_cd[0].artiste,"Nirvana");
    	tab_cd[0].nb_piste =  12;
    	strcpy(tab_cd[0].titre[0],"Come as you are");
    	strcpy(tab_cd[0].titre[1],"In Bloom");
    	strcpy(tab_cd[0].titre[2],"Smells like teen spirit");
    	strcpy(tab_cd[0].titre[3],"Breed");
    	strcpy(tab_cd[0].titre[4],"Lithium");
    	strcpy(tab_cd[0].titre[5],"Polly");
    	strcpy(tab_cd[0].titre[6],"Territorial pissings");
    	strcpy(tab_cd[0].titre[7],"Drain you");
    	strcpy(tab_cd[0].titre[8],"Lounge Act");
    	strcpy(tab_cd[0].titre[9],"Stay away");
    	strcpy(tab_cd[0].titre[10],"On a plain");
    	strcpy(tab_cd[0].titre[11],"Somthing in the way");
    	tab_cd[0].dispo= 0;
     
     
     
    	strcpy(tab_cd[1].album,"Révolution");
    	strcpy(tab_cd[1].artiste,"Minimum serious");
    	tab_cd[1].nb_piste =  12;
    	strcpy(tab_cd[1].titre[0],"Le dernier soir");
    	strcpy(tab_cd[1].titre[1],"R");
    	strcpy(tab_cd[1].titre[2],"Qui s'ennuie de moi");
    	strcpy(tab_cd[1].titre[3],"On m'avait dit");
    	strcpy(tab_cd[1].titre[4],"100X");
    	strcpy(tab_cd[1].titre[5],"Gloria");
    	strcpy(tab_cd[1].titre[6],"Red Light");
    	strcpy(tab_cd[1].titre[7],"Les Ombres sur la route");
    	strcpy(tab_cd[1].titre[8],"(Ma vie)");
    	strcpy(tab_cd[1].titre[9],"Ailleurs");
    	strcpy(tab_cd[1].titre[10],"88");
    	strcpy(tab_cd[1].titre[11],"Call me");
    	tab_cd[1].dispo= 1;
     
     
     
    	strcpy(tab_cd[2].album,"Fous a lier");
    	strcpy(tab_cd[2].artiste,"Les Innocents");
    	tab_cd[2].nb_piste =  11;
    	strcpy(tab_cd[2].titre[0],"Un homme extraordinaire");
    	strcpy(tab_cd[2].titre[1],"Je vais a bang bang");
    	strcpy(tab_cd[2].titre[2],"Un autre finistère");
    	strcpy(tab_cd[2].titre[3],"Mon Dernier Soldat");
    	strcpy(tab_cd[2].titre[4],"Confessions d'un vieux serpent");
    	strcpy(tab_cd[2].titre[5],"Bella Donna Mia");
    	strcpy(tab_cd[2].titre[6],"Fous a lier");
    	strcpy(tab_cd[2].titre[7],"Le paravent");
    	strcpy(tab_cd[2].titre[8],"Les remorques");
    	strcpy(tab_cd[2].titre[9],"En tapant du poing");
    	strcpy(tab_cd[2].titre[10],"Marie prends ton temps");
    	tab_cd[2].dispo= 0;
     
     
     
     
    	strcpy(tab_cd[3].album,"No need to argue");
    	strcpy(tab_cd[3].artiste,"The Cranberries");
    	tab_cd[3].nb_piste =  13;
    	strcpy(tab_cd[3].titre[0],"Olde to my family");
    	strcpy(tab_cd[3].titre[1],"I can't be with you");
    	strcpy(tab_cd[3].titre[2],"twenty one");
    	strcpy(tab_cd[3].titre[3],"Zombie");
    	strcpy(tab_cd[3].titre[4],"Empty");
    	strcpy(tab_cd[3].titre[5],"Everything I said");
    	strcpy(tab_cd[3].titre[6],"The Icicle Melts");
    	strcpy(tab_cd[3].titre[7],"Disappointment");
    	strcpy(tab_cd[3].titre[8],"Ridiculous thoughts");
    	strcpy(tab_cd[3].titre[9],"Dreaming My Dreams");
    	strcpy(tab_cd[3].titre[10],"Yeat's grave");
    	strcpy(tab_cd[3].titre[11],"Daffodil lament");
    	strcpy(tab_cd[3].titre[12],"NO need to Argue");
    	tab_cd[3].dispo= 1;
     
     
     
     
    	strcpy(tab_cd[4].album,"Innuendo");
    	strcpy(tab_cd[4].artiste,"Queen");
    	tab_cd[4].nb_piste = 12;
    	strcpy(tab_cd[4].titre[0],"Innuendo");
    	strcpy(tab_cd[4].titre[1],"I'm going slightly mad");
    	strcpy(tab_cd[4].titre[2],"Headlong");
    	strcpy(tab_cd[4].titre[3],"I can't live with you");
    	strcpy(tab_cd[4].titre[4],"Don't Try So Hard");
    	strcpy(tab_cd[4].titre[5],"Ride the wild wind");
    	strcpy(tab_cd[4].titre[6],"All god's People");
    	strcpy(tab_cd[4].titre[7],"These are the days of our lives");
    	strcpy(tab_cd[4].titre[8],"Delilah");
    	strcpy(tab_cd[4].titre[9],"The Hitman");
    	strcpy(tab_cd[4].titre[10],"Bijou");
    	strcpy(tab_cd[4].titre[11],"The show Must go on");
    	tab_cd[4].dispo= 1;
     
    	//Ajout d'un cd
    	//scanf du nom
    	//strcpy(tab_cd[nbCD].album,nom);
    	//scanf du nom
    	//strcpy(tab_cd[nbCD].artiste,nom);
    	//nbCD=nbCD+1
     
     
        //-->afficher les cd didpo ou les cd emprunte!!
     
    	do  //boucle de menu
    	{
    		printf ("\n *MENU* \n Que voulez vous faire? \n \n");
    		printf ("Afficher tous les cds, tapez 1. \n");
    		printf ("Effectuer une recherche d'artiste ou d'albums, tapez 2. \n");
    		printf ("Effectuer un emprunt, tapez 3. \n");
    		printf ("quitter la cdthèque, tapez 0. \n");
    		scanf ("%d",&a);
     
    		if (a==1)
    		{
    			printf ("\n Tous les albums \n");
    			print_tab(tab_cd);
     
    		}
    		if (a==2)
    		{
    			printf ("\n Recherche par: \n Album, tapez 0 \n Artiste, tapez 1 \n");
    			scanf ("%d",&k);
     
    			if (k==0)
    			{
    				printf ("\n entrez la 1ere lettre de l'album recherché :\n (attention: tous les albums commencent par une majuscule!!) \n");
    				scanf (" %c", &c);
     
    				print_tab_test_A (tab_cd, c);
    			}
    			if (k==1)
    			{
    				printf ("\n entrez la 1ere lettre de l'artiste recherché :\n (attention tous les noms d'artistes commencent par une majuscule!!) \n");
    				scanf (" %c", &c);
     
    				print_tab_test2_A (tab_cd, c);
    			}
    		}
    		if (a==3)
    		{
    		    printf ("\n Recherche le CD à emprunté par: \n Album, tapez 0 \n Artiste, tapez 1 \n");
    			scanf ("%d",&k);
     
    			if (k==0)
    			{
    				printf ("\n entrez la 1ere lettre de l'album recherché :\n (attention: tous les albums commencent par une majuscule!!) \n");
    				scanf (" %c", &c);
     
    				print_tab_test_B (tab_cd, c);
    			}
    			if (k==1)
    			{
    				printf ("\n entrez la 1ere lettre de l'artiste recherché :\n (attention tous les noms d'artistes commencent par une majuscule!!) \n");
    				scanf (" %c", &c);
     
    				print_tab_test2_B (tab_cd, c);
    			}
    		}
    	}
    	while (a!=0);
    }
    La première chose à comprendre est qu'il faut séparer les données du traitement. En aucun cas, les données 'CD' ne doivent apparaitre dans ton code. Elles appartiennent à des fichiers.

    En principe, ce genre d'application se fait à coup de base de données et de requetes SQL. Le C n'est pas trop fait pour ça, mais en C tout est possible avec du temps et de la patience.

    Il faut donc commencer par définir la structure des données à gérer.

    On a donc une liste de CD à gerer. Quels sont les attributs d'un CD ?

    - Nom de l'album
    - Nom du groupe ou de l'artiste
    - Code CD
    - Liste des plages.

    Les attributs d'une plage sont
    - Le titre de la plage
    - La durée

    A partir de là, on peut envisager une gestion.

    - Ajout
    - Consultation
    - Recherche
    - Suppression

    C'est pas bien compliqué, mais c'est long.

    Il faut commencer par définir la manière dont vont être enregistrées les données.

    Soit un seul fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    - Nom de l'album
    - Nom du groupe ou de l'artiste
    - Code CD
    - Nombre de plages.
    -- 1.titre
    -- 1.duree
    -- 2.titre
    -- 2.duree
    <...>
    -- N.titre
    -- N.duree
    Soit un fichier pour les CDs et un fichier par CD pour les titres, etc.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    Je te remercie pour ta réponse, en fait tu me dis que je ne devrais pas entrer les données des CD dans le corps de mon programme, soit ne pas mettre tous les "strcpy". Mais dans ce cas je ne sais absolument pas comment faire appel à un ou des fichiers. De même je ne pense pas que pour mon projet je puisse le faire, quoique.... En tout cas je suis preneur pour une explication (si c'est pas trop compliqué), et encore merci.
    Je voudrais aussi signaler que j'ai résolu une partie de mes problèmes, je joint donc la dernière version de mon programme.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    #include<stdio.h>
    #include<string.h>
    #define N 50
    #define NB_PISTE_MAX 50
     
    int nbCD=5;  //defini le nbr de CD dans la cdthèque
     
    struct cd //Structure definissant les infos pour un CD
    {
    	char album[50];
    	char artiste[50];
    	char titre[NB_PISTE_MAX][50];
    	int  nb_piste; //nbr de pistes max entrée dans l'album
    	int dispo; //variable de presence du CD dans la cdthèque
    };
     
     
    void printCD(struct cd monCD)  //fct pour l'affichage des titres d'un CD
    {
    	int j,t;
     
    	printf ("\n --> ");
    	printf ("  %s \n", monCD.album);	 // on fait defiler d'abord tous les albums, en affichant
    	printf ("  %s \n", monCD.artiste);	//les noms d'albums ensuite les artistes puis les titres d'albums
    	printf ("Il y %d pistes dans cet album \n", monCD.nb_piste);	//les noms d'albums ensuite les artistes puis les titres d'albums
          						//avec choix du nbr de titres a afficher
    	printf ("\n Combien de titres à afficher? \n");
    	scanf ("%d", &t);
     
    	if (monCD.nb_piste > t)
    	{
    		for (j=0; j<t; j++)
    		{
    			printf ("   %s \n", monCD.titre[j]);
    			printf ("............... \n");
    		}
    	}
    	else
    	{
    		for (j=0; j<monCD.nb_piste; j++)
    		{
    			printf ("   %s \n", monCD.titre[j]);
    			printf ("............... \n");
    		}
    	}
     
    	if (monCD.dispo==0)
    	{
    	    printf ("\n >>Le CD est emprunté \n", monCD.dispo);
    	}
    	if (monCD.dispo==1)
    	{
    	    printf ("\n >>Le CD est disponible \n", monCD.dispo);
        }
    }
     
    void printCD_suppr (struct cd monCD[], int num_cd)
    {
        int suppr;
        int j;
        j=0;
     
        printf ("\n --> ");
    	printf ("  %s \n", monCD[num_cd].album);	 // on fait defiler d'abord tous les albums, en affichant
    	printf ("  %s \n", monCD[num_cd].artiste);	//les noms d'albums ensuite les artistes puis les titres d'albums
    	printf ("Il y %d pistes dans cet album \n", monCD[num_cd].nb_piste);	//les noms d'albums ensuite les artistes puis les titres d'albums
          						//avec choix du nbr de titres a afficher
        printf ("\n Etes vous sur de vouloir supprimer le CD? \n");
        printf("Tapez 0 pour annuler la supression. \nTapez 1 pour confirmer la supression \n");
        scanf ("%d", &suppr);
     
        if (suppr==1)
        {
            for (j=num_cd; j<nbCD-1; j++)
            {
                monCD[j]=monCD[j+1];
            }
     
            nbCD=nbCD-1;
            printf ("le CD est supprimé. \n");
            printf ("............... \n");
        }
     
        if (suppr==0)
        {
            printf ("Supression annulé! \n");
        }
    }
     
    void printCD2 (struct cd monCD[], int i)
    {
        int e;
     
    	printf ("\n --> ");
    	printf ("  %s \n", monCD[i].album);	 // on fait defiler d'abord tous les albums, en affichant
    	printf ("  %s \n", monCD[i].artiste);	//les noms d'albums ensuite les artistes puis les titres d'albums
    	printf ("Il y %d pistes dans cet album \n", monCD[i].nb_piste);	//les noms d'albums ensuite les artistes puis les titres d'albums
          						//avec choix du nbr de titres a afficher
        if (monCD[i].dispo==0)
    	{
    	    printf ("\n >>Le CD est emprunté \n", monCD[i].dispo);
    	}
    	if (monCD[i].dispo==1)
    	{
    	    printf ("\n >>Le CD est disponible \n", monCD[i].dispo);
     
    	    printf ("Désirez vous l'emprunter? \n Tapez 0 pour ne pas l'emprunter. \n Tapez 1 pour emprunter le CD. \n%");
            scanf ("%d",&e);
     
            if (e==1)
            {
                monCD[i].dispo=0;
                printf ("\n Le CD est maintenant emprunté \n");  /*!!!! PB !!!! La valeur de dispo ne change pas réellement*/
                                                            /*!!!  Au retour dans le menu, ca n'a pas changé !!!!!*/
            }
            if (e==0)
            {
                printf ("%d", e);
            }
        }
    }
     
    void print_tab(struct cd tab[])  //lance la procedure d'affichage de toutes la structure, soit ts les cd
    {
    	int i;
     
    	for (i=0; i<nbCD; i++)
    	{
    		printCD(tab[i]);
    		printf ("............... \n");
    	}
    }
     
     
    void print_tab_test_A(struct cd tab[],char c)  //affiche les cd dont le nom d'album correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].album[0]);*/
     
    		if (c==tab[i].album[0])
    		{
    			printCD(tab[i]);
    			h=1;
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'albums commencant par %c \n \n", c);
    		printf ("............... \n");
    	}
    }
     
     
    void print_tab_test_B(struct cd tab[],char*r, int taille)  //affiche les cd dont le début du nom d'album correspond a la chaine donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].album[0]);*/
     
    		if (strncmp(tab[i].album, r, taille)==0)
    		{
    		    h=1;
    			printCD2(tab, i);
    			printf ("............... \n");
    		}
    	}
     
        if (h==0)
        {
            printf ("Pas d'albums commencant par %s \n \n", r);
            printf ("............... \n");
        }
    }
     
     
    void print_tab_test_C(struct cd tab[], char*r, int taille)  //affiche les cd dont le début du nom d'album correspond a la chaine donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].album[0]);*/
     
    		if (strncmp(tab[i].album, r, taille)==0)
    		{
    		    h=1;
    			printCD(tab[i]);
    			printf ("............... \n");
    		}
    	}
     
        if (h==0)
        {
            printf ("Pas d'albums commencant par %s \n \n", r);
            printf ("............... \n");
        }
    }
     
    void print_tab_test_D(struct cd tab[],char*r, int taille)  //affiche les cd dont le début du nom d'album correspond a la chaine donné
    {
    	int i;
    	int suppr;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].album[0]);*/
     
    		if (strncmp(tab[i].album, r, taille)==0)
    		{
    		    h=1;
                printCD_suppr(tab, i);
    			printf ("............... \n");
    		}
    	}
     
        if (h==0)
        {
            printf ("Pas d'albums commencant par %s \n \n", r);
            printf ("............... \n");
        }
    }
     
    void print_tab_test2_A(struct cd tab[],char c)  //affiche les cd dont le 1er carct du nom d'artiste correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].artiste[0]);*/
     
    		if ( c==tab[i].artiste[0] )
    		{
    			printCD(tab[i]);
    			h=1;
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'artistes commencant par %c \n \n", c);
    		printf ("............... \n");
    	}
    }
     
    void print_tab_test2_B(struct cd tab[],char*r, int taille)  //affiche les cd dont le 1er carct du nom d'artiste correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].artiste[0]);*/
     
    		if (strncmp(tab[i].artiste, r, taille)==0)
    		{
                h=1;
    			printCD2(tab, i);
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'artistes commencant par %s \n \n", r);
    		printf ("............... \n");
    	}
    }
     
     
    void print_tab_test2_C(struct cd tab[],char*r, int taille)  //affiche les cd dont le 1er carct du nom d'artiste correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].artiste[0]);*/
     
    		if (strncmp(tab[i].artiste, r, taille)==0)
    		{
                h=1;
    			printCD(tab[i]);
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'artistes commencant par %s \n \n", r);
    		printf ("............... \n");
    	}
    }
     
    void print_tab_test2_D(struct cd tab[],char*r, int taille)  //affiche les cd dont le 1er carct du nom d'artiste correspond au caract donné
    {
    	int i;
    	int h;
    	h=0;
     
    	for (i=0; i<nbCD; i++)
    	{
    		/*printf("%d %c\n",i,tab[i].artiste[0]);*/
     
    		if (strncmp(tab[i].artiste, r, taille)==0)
    		{
                h=1;
    			printCD_suppr(tab, i);
    			printf ("............... \n");
    		}
    	}
     
    	if (h==0)
    	{
    		printf ("Pas d'artistes commencant par %s \n \n", r);
    		printf ("............... \n");
    	}
    }
     
     
    main()
    {
    	char c;
    	char r[50];
    	int k,a,taille;
    	struct cd tab_cd[nbCD];
     
    	strcpy(tab_cd[0].album,"Nevermind");
    	strcpy(tab_cd[0].artiste,"Nirvana");
    	tab_cd[0].nb_piste =  12;
    	strcpy(tab_cd[0].titre[0],"Come as you are");
    	strcpy(tab_cd[0].titre[1],"In Bloom");
    	strcpy(tab_cd[0].titre[2],"Smells like teen spirit");
    	strcpy(tab_cd[0].titre[3],"Breed");
    	strcpy(tab_cd[0].titre[4],"Lithium");
    	strcpy(tab_cd[0].titre[5],"Polly");
    	strcpy(tab_cd[0].titre[6],"Territorial pissings");
    	strcpy(tab_cd[0].titre[7],"Drain you");
    	strcpy(tab_cd[0].titre[8],"Lounge Act");
    	strcpy(tab_cd[0].titre[9],"Stay away");
    	strcpy(tab_cd[0].titre[10],"On a plain");
    	strcpy(tab_cd[0].titre[11],"Somthing in the way");
    	tab_cd[0].dispo= 0;
     
     
     
    	strcpy(tab_cd[1].album,"Revolution");
    	strcpy(tab_cd[1].artiste,"Minimum serious");
    	tab_cd[1].nb_piste =  12;
    	strcpy(tab_cd[1].titre[0],"Le dernier soir");
    	strcpy(tab_cd[1].titre[1],"R");
    	strcpy(tab_cd[1].titre[2],"Qui s'ennuie de moi");
    	strcpy(tab_cd[1].titre[3],"On m'avait dit");
    	strcpy(tab_cd[1].titre[4],"100X");
    	strcpy(tab_cd[1].titre[5],"Gloria");
    	strcpy(tab_cd[1].titre[6],"Red Light");
    	strcpy(tab_cd[1].titre[7],"Les Ombres sur la route");
    	strcpy(tab_cd[1].titre[8],"(Ma vie)");
    	strcpy(tab_cd[1].titre[9],"Ailleurs");
    	strcpy(tab_cd[1].titre[10],"88");
    	strcpy(tab_cd[1].titre[11],"Call me");
    	tab_cd[1].dispo= 1;
     
     
     
    	strcpy(tab_cd[2].album,"Fous a lier");
    	strcpy(tab_cd[2].artiste,"Les Innocents");
    	tab_cd[2].nb_piste =  11;
    	strcpy(tab_cd[2].titre[0],"Un homme extraordinaire");
    	strcpy(tab_cd[2].titre[1],"Je vais a bang bang");
    	strcpy(tab_cd[2].titre[2],"Un autre finistère");
    	strcpy(tab_cd[2].titre[3],"Mon Dernier Soldat");
    	strcpy(tab_cd[2].titre[4],"Confessions d'un vieux serpent");
    	strcpy(tab_cd[2].titre[5],"Bella Donna Mia");
    	strcpy(tab_cd[2].titre[6],"Fous a lier");
    	strcpy(tab_cd[2].titre[7],"Le paravent");
    	strcpy(tab_cd[2].titre[8],"Les remorques");
    	strcpy(tab_cd[2].titre[9],"En tapant du poing");
    	strcpy(tab_cd[2].titre[10],"Marie prends ton temps");
    	tab_cd[2].dispo= 0;
     
     
     
     
    	strcpy(tab_cd[3].album,"No need to argue");
    	strcpy(tab_cd[3].artiste,"The Cranberries");
    	tab_cd[3].nb_piste =  13;
    	strcpy(tab_cd[3].titre[0],"Olde to my family");
    	strcpy(tab_cd[3].titre[1],"I can't be with you");
    	strcpy(tab_cd[3].titre[2],"twenty one");
    	strcpy(tab_cd[3].titre[3],"Zombie");
    	strcpy(tab_cd[3].titre[4],"Empty");
    	strcpy(tab_cd[3].titre[5],"Everything I said");
    	strcpy(tab_cd[3].titre[6],"The Icicle Melts");
    	strcpy(tab_cd[3].titre[7],"Disappointment");
    	strcpy(tab_cd[3].titre[8],"Ridiculous thoughts");
    	strcpy(tab_cd[3].titre[9],"Dreaming My Dreams");
    	strcpy(tab_cd[3].titre[10],"Yeat's grave");
    	strcpy(tab_cd[3].titre[11],"Daffodil lament");
    	strcpy(tab_cd[3].titre[12],"NO need to Argue");
    	tab_cd[3].dispo= 1;
     
     
     
     
    	strcpy(tab_cd[4].album,"Innuendo");
    	strcpy(tab_cd[4].artiste,"Queen");
    	tab_cd[4].nb_piste = 12;
    	strcpy(tab_cd[4].titre[0],"Innuendo");
    	strcpy(tab_cd[4].titre[1],"I'm going slightly mad");
    	strcpy(tab_cd[4].titre[2],"Headlong");
    	strcpy(tab_cd[4].titre[3],"I can't live with you");
    	strcpy(tab_cd[4].titre[4],"Don't Try So Hard");
    	strcpy(tab_cd[4].titre[5],"Ride the wild wind");
    	strcpy(tab_cd[4].titre[6],"All god's People");
    	strcpy(tab_cd[4].titre[7],"These are the days of our lives");
    	strcpy(tab_cd[4].titre[8],"Delilah");
    	strcpy(tab_cd[4].titre[9],"The Hitman");
    	strcpy(tab_cd[4].titre[10],"Bijou");
    	strcpy(tab_cd[4].titre[11],"The show Must go on");
    	tab_cd[4].dispo= 1;
     
    	//Ajout d'un cd
    	//scanf du nom
    	//strcpy(tab_cd[nbCD].album,nom);
    	//scanf du nom
    	//strcpy(tab_cd[nbCD].artiste,nom);
    	//nbCD=nbCD+1
     
     
        //-->afficher les cd didpo ou les cd emprunte!!
     
    	do  //boucle de menu
    	{
    		printf ("\n *MENU* \n Que voulez vous faire? \n \n");
    		printf ("Afficher tous les cds, tapez 1. \n");
    		printf ("Effectuer une recherche d'artiste ou d'albums à l'aide de la 1ère lettre, tapez 2. \n");
    		printf ("Effectuer une recherche d'artiste ou d'albums à l'aide du début du nom, tapez 3. \n");
    		printf ("Effectuer un emprunt, tapez 4. \n");
    		printf ("Supprimer un CD, tapez 5. \n");
    		printf ("quitter la cdthèque, tapez 0. \n");
    		scanf ("%d",&a);
     
    		if (a==1)
    		{
    			printf ("\n Tous les albums \n");
    			print_tab(tab_cd);
     
    		}
    		if (a==2)
    		{
    			printf ("\n Recherche par: \n Album, tapez 0 \n Artiste, tapez 1 \n");
    			scanf ("%d",&k);
     
    			if (k==0)
    			{
    				printf ("\n entrez la 1ere lettre de l'album recherché :\n (attention: tous les albums commencent par une majuscule!!) \n");
    				scanf (" %c", &c);
     
    				print_tab_test_A (tab_cd, c);
    			}
    			if (k==1)
    			{
    				printf ("\n entrez la 1ere lettre de l'artiste recherché :\n (attention tous les noms d'artistes commencent par une majuscule!!) \n");
    				scanf (" %c", &c);
     
    				print_tab_test2_A (tab_cd, c);
    			}
    		}
    		if (a==3)
    		{
    		    printf ("\n Recherche par: \n Album, tapez 0 \n Artiste, tapez 1 \n");
    			scanf ("%d",&k);
     
    			if (k==0)
    			{
    				printf ("\n entrez le début du nom de l'album recherché :\n (attention: tous les albums commencent par une majuscule!!) \n");
    				scanf (" %s", &r);
    				taille=strlen(r);
    				print_tab_test_C (tab_cd, r, taille);
    			}
    			if (k==1)
    			{
    				printf ("\n entrez le début du nom de l'artiste recherché :\n (attention tous les noms d'artistes commencent par une majuscule!!) \n");
    				scanf (" %s", &r);
    				taille=strlen(r);
    				print_tab_test2_C (tab_cd, r, taille);
    			}
    		}
     
    		if (a==4)
    		{
    		    printf ("\n Recherche le CD à emprunté par: \n Album, tapez 0 \n Artiste, tapez 1 \n");
    			scanf ("%d",&k);
     
    			if (k==0)
    			{
    				printf ("\n entrez le début du nom de l'album recherché :\n (attention: tous les albums commencent par une majuscule!!) \n");
    				scanf (" %s", &r);
    				taille=strlen(r);
    				print_tab_test_B (tab_cd, r, taille);
    			}
                if (k==1)
                {
    				printf ("\n entrez le début du nom de l'artiste recherché :\n (attention tous les noms d'artistes commencent par une majuscule!!) \n");
    				scanf (" %s", &r);
    				taille=strlen(r);
    				print_tab_test2_B (tab_cd, r, taille);
    			}
    		}
     
    		if (a==5)
    		{
    		    printf ("\n Recherche le CD à supprimer par: \n Album, tapez 0 \n Artiste, tapez 1 \n");
    			scanf ("%d",&k);
     
    			if (k==0)
    			{
    				printf ("\n entrez le début du nom de l'album recherché :\n (attention: tous les albums commencent par une majuscule!!) \n");
    				scanf (" %s", &r);
    				taille=strlen(r);
    				print_tab_test_D (tab_cd, r, taille);
    			}
    			if (k==1)
    			{
    				printf ("\n entrez le début du nom de l'artiste recherché :\n (attention tous les noms d'artistes commencent par une majuscule!!) \n");
    				scanf (" %s", &r);
    				taille=strlen(r);
    				print_tab_test2_D (tab_cd, r, taille);
    			}
    		}
    	}
    	while (a!=0);
    }
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par hazel Voir le message
    Je te remercie pour ta réponse, en fait tu me dis que je ne devrais pas entrer les données des CD dans le corps de mon programme, soit ne pas mettre tous les "strcpy". Mais dans ce cas je ne sais absolument pas comment faire appel à un ou des fichiers.
    Eh bien il faut apprendre. Les fichiers C sont rustiques, mais suffisants pour ton application.

    http://emmanuel-delahaye.developpez....=Page6#LXXXIII

    Tu n'as pas suivi de cours de C ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    Si si, j'ai bien eu des cours de C, particulièrement l'an passée, mais je n'ai pas brillé par mon assuidité ni par mon travail....(au contraire!!!). Néanmoins cette année, je n'ai pas vu de notions sur les fichiers, on s'est cantonné aux bases de la programmation (niveau BAC+1...), et j'ai l'impression que je ne pourrais me servir de cette fonctionnalité, parce que j'ai l'impression de ne pas avoir le niveau pour assimiler avec le peu de temps qu'il me reste pour boucler le projet!
    Mais en passant, si j'ai compris le principe, il me faudrait un fichier texte contenant toutes les données de CD, bien classée et tout, non?
    Dans le même genre de ce que vous aviez écrit,
    - Nom de l'album
    - Nom du groupe ou de l'artiste
    - Code CD
    - Liste des plages.

    Les attributs d'une plage sont
    - Le titre de la plage
    - La durée

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    Ok, j'ai décide de voir sérieusement ce que je peux faire avec un fichier, mais la je me jette à l'eau! Il ya beaucoup de fonction à utiliser que je n'ai jamais vu, j'ai déjà du mal à comprendre tout ce qu'il y a écrit sur la page du lien, et enfin il ne me reste que 3 jours max pour boucler le programme, après je ne dispose plus du temps nécessaire pour rendre le dossier!
    Alors dans ce cas je vous sollcite encore pour m'aider à comprendre comment je peux faire appel à des fichiers, guidez moi je vous en prie!!
    Merci d'avance!!!

  7. #7
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Par défaut
    Salut,

    Désolé d'avance pour les fautes d'orthographe.


    L'appel du désespoir ? xD
    Pauvre de toi !


    Pour utiliser un fichier il y a 4 grande fonction de base :
    fopen()
    fread()
    fwrite()
    fclose()


    Donc dans ton fichier, faisons simple, tu vas retrouver les infos suivantes :
    - Nom de l'album
    - Nom du groupe
    - Nombre de piste
    - Etat de l'album (emprunté, dispo, ou je ne sais quoi)

    Dans ton code source tu va devoir retrouver ces éléments. Tu peux pour cela utiliser une structure

    Tu va donc avoir ta structure CD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct CD
    {
         char nomArtiste[25];
         char nomAlbum[25];
         int nbPiste;
         char etat;
    } mesCD
    25 caractères suffisent, tu peux en mettre plus mais un nom dépasse difficilement 25 caractères. Au pire mets 50/100 ! :p


    Donc dans ton fichier tu va savoir combien de ligne te prend un CD. Au pire tu peux délimiter tes CDs pas "---" comme ça tu peux pas te tromper.

    Tu dois aussi faire attention à ce que chaque CD ai le même ordre de donnée.

    Tu ne peux pas avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Nom du CD
    Nom Artiste
    NB piste
    Etat
    Nom Artiste
    Nom du CD
    nb piste
    etat
    Sinon ça va tout faire capoter !

    Donc tu li ligne par ligne et tu "rempli" ta structure.
    Il y à des fonctions qui seront plus simple pour lire ligne/ligne ton fichier. Il me semble que fgets() te le permet puisque cette fonction s'arrête au retour chariot.



    Voilou !
    Bonne chance !

    Rilou

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    Merci beaucoup pour cette réponse, mais je me demandais; dans ma structure (je les ai déjà vu!) je définis les titres avec deux dimensions:

    char titre[NB_PISTE_MAX][50];
    NB_PISTE_MAX étant une constante défini au préalable

    Mon problème est de savoir comment je dois réaliser mon fichier texte pour qu'il intègre mes titres d'albums. Car si je me contente d'écrire les pistes lignes après ligne, lors de la lecture par mon programme la seconde piste va être prises pour l'info suivante défini dans la structure, non?

    J'ai également une autre interrogations, comment mon programme sait où est mon fichier? Je ne peux pas enregistrer mon fichier texte n'importe où? Ou bien puis-je aller le chercher quasiment partout? Si oui, comment?

    Enfin, juste une confirmation, pour la fonction fopen, je peux me contenter d'utiliser l'argument "r" pour la lecture de mon fichier texte?
    Mais si je souhaite ajouter un CD, je devrais utiliser "a" (pour éviter de détruire des données existantes)? Mais d'ailleurs je pourrais utiliser aussi "a" pour modifier des infos sur mes CD?
    (Je commence à voir l'étendu des possibilités avec l'appel d'un fichier!! Ça me semble plus simple dans la pratique que tous mes strcpy...)

  9. #9
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Par défaut
    Salut !

    Alors pour ton problème de :
    Mon problème est de savoir comment je dois réaliser mon fichier texte pour qu'il intègre mes titres d'albums. Car si je me contente d'écrire les pistes lignes après ligne, lors de la lecture par mon programme la seconde piste va être prises pour l'info suivante défini dans la structure, non?
    Tu peux ajouter devant chaque ligne un code particulier qui va signifier le numéro de la piste.

    EX : #P Hope

    Ce "#P" est un symbole que tu ne trouvera vraisemblablement jamais dans un nom d'artiste ou de groupe ni même de CD.

    Si par exemple tu ne vois plus de "#P" en début de ligne alors ce n'est plus le titre d'un chanson !


    J'ai également une autre interrogations, comment mon programme sait où est mon fichier? Je ne peux pas enregistrer mon fichier texte n'importe où? Ou bien puis-je aller le chercher quasiment partout? Si oui, comment?
    La fonction fopen() prend en premier paramètre le chemin du fichier à ouvrir.
    Donc oui tu peux aller le chercher partout.

    ex: C:/MonprogCDTheque/maCDtheque.txt

    Attention cependant essais d'éviter les espaces dans le nom ou met des "".


    Et pour ta dernière question :
    Oui tu peux utiliser simplement "r" pour lire ton fichier et "a" pour ajouter un CD. Par contre pour modifier un cd il faut bouiner un truc à la main :s

    Prendre un fichier temporaire ou tu va ecrire les info de ton premier fichier jusqu'à la ou tu veux modifier, ecrire les données modifiées et enfin ecrire le reste du contenu du premier fichier.


    Voilou !

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    Merci!!
    Mais j'ai pas très bien compris l'histoire du #P?
    Hope ca correspond à un titre?

    donc, moi je viens de faire ça:
    voici la structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct cd
    {
        char album[50];
        char artiste[50];
        int nb_piste;
        char titre[NB_PISTE_MAX][50];
        int dispo;
    };
    et voici les commandes:
    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
    main()
    {
        int i;
     
        FILE*unCD;
        struct cd tab_cd[nbCD];
     
     
        printf ("appel du fichier \n");
        unCD = fopen ("CD.txt", "r");
     
        if (unCD != NULL)
        {
            char infos_cd[50];
     
            for (i=0; i<nbCD; i++)
            {
                fgets (infos_cd, sizeof infos_cd, unCD);
                fread (tab_cd[i].album, 50, *infos_cd, unCD );
            }
            fclose (unCD);
            print_tab(tab_cd);
        }
        else
        {
            printf ("Erreur d'ouverture du fichier \n");
        }
    }

    print_tab me permet juste d'afficher la structure

    et comme c'est une ébauche je gère seulement les albums

    Donc, si j'ai bien compris dans mon fichiers texte je fais précédé tous les titres par #P, mais comment je définis dans ma fonction tant qu'il ya #P c'est des titres? (C'est l'idée?)
    Je peux donc écrire un fonction "do" afficher les titres "while" (le premier caractère différent de #P)?

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    voila ce que j'ai fait (en un peu plus complet):
    Voici la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct cd //Structure definissant les infos pour un CD
    {
    	char album[50];
    	char artiste[50];
    	int  nb_piste; //nbr de pistes max entrée dans l'album
    	char titre[NB_PISTE_MAX][50];
    	int dispo; //variable de presence du CD dans la cdthèque
    };
    et voici le debut du programme:
    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
    32
    33
    34
    35
    36
    37
    38
    main()
    {
    	char c;
    	char r[50];
    	int k,a,taille;
    	struct cd tab_cd[nbCD];
        int i;
        FILE*unCD;
     
        printf ("appel du fichier \n");
        unCD = fopen ("CD.txt", "r");
     
        if (unCD != NULL)
        {
            char infos_cd[50];
     
            for (i=0; i<nbCD; i++)
            {
                fgets (infos_cd, sizeof infos_cd, unCD);
                fread (tab_cd[i].album, 50, *infos_cd, unCD );
                fread (tab_cd[i].artiste, 50, *infos_cd, unCD );
                fread (tab_cd[i].nb_piste, 50, *infos_cd, unCD );
     
                do
                {
                    fread (tab_cd[i].titre, 50, *infos_cd, unCD );
                }
                while (tab_cd[i].titre[0] != #);
     
                fread (tab_cd[i].dispo, 50, *infos_cd, unCD );
            }
            fclose (unCD);
            print_tab(tab_cd);
        }
        else
        {
            printf ("Erreur d'ouverture du fichier \n");
        }
    Avec ça, je recois des messsages d'erreurs, lors de la compilation pour les lignes de nb_pistes et de dispo, ainsi que pour mon while
    Avez des solutions à me proposer? je sèche!
    J'ai éssayer de modifier les int de nb_pistes et dispo dans la structure, mais ça n'a pas marché!
    Merci!!

  12. #12
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Par défaut
    Le #P serait à placer devant le nom d'une Piste (Hope etant ici le nom de la piste).


    Au pire tu peu mettre des identifiant parotut :
    #A nom de l'album
    #G nom du groupe
    #P nom de la piste
    #E etat du CD


    Comme ça t'es sur de pas te tromper pour lesl igne que tu traite.

    pour le nb_piste. En effet fread lit des caractères donc tu ne peux pas les placer dans un int sans convertion. Passe par un buffer temporaire afin de convertir String vers INT

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    Dernière version de l'exécution de la partie lecture à partir d'un fichier:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    main()
    {
    	char c;
    	char r[50];
    	char d[50];
    	int k,a,taille;
    	struct cd tab_cd[nbCD];
        int i,j;
     
        FILE*unCD;
     
        printf ("appel du fichier \n");
        unCD = fopen ("CD.txt", "r");
     
        if (unCD != NULL)
        {
            char infos_cd[50];
     
            for (i=0; i<nbCD-1; i++)
            {
                char nb_piste[10];
                char dispo[10];
     
                fgets (infos_cd, sizeof infos_cd, unCD);
                fread (tab_cd[i].album, 50, *infos_cd, unCD );
                fread (tab_cd[i].artiste, 50, *infos_cd, unCD );
                fread (nb_piste, 50, *infos_cd, unCD );
                tab_cd[i].nb_piste=atoi(nb_piste);
                for (j=0; j<tab_cd[i].nb_piste; j++)
                {
                    if (strcmp(tab_cd[i].titre[0],r)==0)
                    {
                        fread (tab_cd[i].titre[j], 50, *infos_cd, unCD );
                    }
                }
     
                fread (dispo, 50, *infos_cd, unCD );
                tab_cd[i].dispo=atoi(dispo);
            }
            fclose (unCD);
        }
        else
        {
            printf ("Erreur d'ouverture du fichier \n");
        }
    A ce point la j'ai un problème avec la condition dans le "if" :
    if (strcmp(tab_cd[i].titre[0],r)==0)
    Lors de la compilation, il s'affiche le message suivant:
    error: invalid token
    error: expected primary-expression before ')' token

    Et là!! Impossible de savoir quoi faire, ça me bloque depuis une heure!
    Si quelqu'un peut une nouvelle fois m'aider, ça serait génial!!!
    Merci!!

    Je rajouterais quand même quelques explications quant au modifs apporté,
    j'ai donc ajouté une boucle avec "j", pour affecter les titres à ma structure,
    j'ai également ajouté deux char, qui me peremttent d'extraire les lignes de mon fichier et ensuite les convertir en entier, à l'aide de la fonction "atoi", pour ensuite les injecter dans ma structure.
    voilà!!

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    Le pb de la condition est résolu, j'ai simplement enlevé la structure "if". En effet si le nbr de titres est bien défini la seconde boucle "for" ne s'effectuera que pour le nombre de titres qui suit. (vous suivez?)
    Enfin, en tout cas, ca donne ça:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    main()
    {
    	char c;
    	char r[50];
    	int k,a,taille;
    	struct cd tab_cd[nbCD];
        int i,j;
     
        FILE*unCD;
     
        printf ("ouverture du fichier \n");
        unCD = fopen ("CD.txt", "r");
     
        if (unCD != NULL)
        {
            char infos_cd[50];
     
            for (i=0; i<nbCD-1; i++)
            {
                char nb_piste[10];
                char dispo[10];
     
                fgets (infos_cd, sizeof infos_cd, unCD);
                fread (tab_cd[i].album, 50, *infos_cd, unCD );
                fread (tab_cd[i].artiste, 50, *infos_cd, unCD );
                fread (nb_piste, 50, *infos_cd, unCD );
                tab_cd[i].nb_piste=atoi(nb_piste);
                for (j=0; j<tab_cd[i].nb_piste; j++)
                {
                    fread (tab_cd[i].titre[j], 50, *infos_cd, unCD );
                }
                fread (dispo, 50, *infos_cd, unCD );
                tab_cd[i].dispo=atoi(dispo);
            }
            fclose (unCD);
        }
        else
        {
            printf ("Erreur d'ouverture du fichier \n");
        }
    Mais maintenant j'ai des problèmes dans ce ça m'affiche ensuite.... et j'ai du mal à, cerner le pb....
    je joins donc le fichier texte, ça peut servir... ainsi que le programme. qui tourne donc qu'à motié...
    Si une bonne âme à le courage de se pencher là dessus, c'est qu'il possède toute la bonté du monde!!!
    De mon coté je continuerais à chercher.
    Je tiens à remercier tous ceux qui m'ont déjà aidé, vraiment merci de me consacrer du temps!!
    Fichiers attachés Fichiers attachés

  15. #15
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Par défaut
    Re-salut !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
    Or toi ce que tu marques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fread (tab_cd[i].album, 50, *infos_cd, unCD );
    fread (tab_cd[i].artiste, 50, *infos_cd, unCD );
    fread (nb_piste, 50, *infos_cd, unCD );
    ...
    fread (tab_cd[i].titre[j], 50, *infos_cd, unCD );
    En gros fread demande :
    void *ptr : Pointeur sur le buffer qui va contenir les informations lu.
    size_t size : Taille d'un élement lu (ici, 1)
    size_t nmemb : Nombre d'élements à lire (ici, 50)
    FILE *stream : Pointeur vers FILE


    Donc c'est tout à fait normal que tu ai des trucs louches lors de l'écriture à l'écran du contenu de tes buffers.


    Wala bonne chance

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    Euh.... Je veux pas paraître bête, mais je ne vois pas où tu veux en venir?!
    C'est surement par mes connaissances que je pêche, mais s'agit-il d'un problème de taille? ou autre chose?

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par hazel Voir le message
    Euh.... Je veux pas paraître bête, mais je ne vois pas où tu veux en venir?!
    C'est surement par mes connaissances que je pêche, mais s'agit-il d'un problème de taille? ou autre chose?
    De toutes façons, si ton fichier est structuré comme un fichier texte (caractères imprimables organisées en lignes), il faut le lire ligne à ligne avec fgets(), puis interpréter chaque ligne.

    Commence déjà par définir un format texte. On ne peut rien coder tant que cette définition n'est pas claire.

    Une manière courante de coder des structures en format texte est d'utiliser un enregistrement par ligne, chaque champ étant séparé par des ',' ou des ';'. C'est le format bien connu 'CSV' (Comma Separated Values).

    Par exemple (pseudo-code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    STRUCT
       nom : STRING
       prenom : STRING
       age : INTEGER
    END
    avec les données : "Simpson" "Bart" et 11, se trouve ainsi dans le fichier texte :

    Simpson;Bart;11

    Pour générer la ligne, on utilise fprintf() comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf (fp, "%s;%s;%d\n", structure.nom, structure.prenom, structure.age);
    Pour lire la ligne, sont on utilise fgets() puis sscanf() ou strtok() pour en extraire les données ...

    C'est pas super pratique, mais le C n'est pas fait pour ce genre de traitements... Les bases de données sont faites pour ça ...

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    YYEEESSS!!!
    C'est bon j'ai réussi!!!
    J'ai remplacé mes fread par des fgets et enlevé le premier fgets.
    Je dois cette brillante idée à mon profs d'infos! Je lui dédicace!!
    Enfin tout ça pour aussi tous vous remercier, tous ceux qui m'ont aidé!!
    Maintenant je cherche à ajouter un CD à partir de mon programme, pour cela j'ai besion de savoir comment affecter à ma structure la chaine de caractère entrée par l'utilisateur.
    En gros après mon scanf, quelle commande utilliser pour affecter le char à ma structure?
    Encore merci!

    PS: je joindrai la dernière version de mon programme prochainement!!

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par hazel Voir le message
    En gros après mon scanf, quelle commande utilliser pour affecter le char à ma structure?
    Pour copier une chaine : strcpy().

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    Merci!
    En plus c'est pas comme si j'en avais pas utilisé avant...
    Par contre j'arrive pas à entrer des chaines de caractères avec des espaces, le programme plante, quelqu'un n'aurait-il pas une solution?
    De plus, j'aimerais obtenir quelques infos sur la façon d'effectuer une sauvegarde automatique de la version courante du programme dans un fichier? Histoire de garder les modifs effectueés.

    Je joins la dernière version de mon programme, comme promis!!!
    Merci à tous!!
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Gestion d'une liste box
    Par norwy dans le forum Windows
    Réponses: 6
    Dernier message: 01/11/2005, 12h51
  2. Gestion d'une file d'attente
    Par jesus144 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/09/2005, 19h58
  3. [Composite] Gestion d'une recherche avancée
    Par Loctar dans le forum Design Patterns
    Réponses: 12
    Dernier message: 23/06/2005, 18h32
  4. [Clavier] Gestion d'une invite de commandes
    Par Damian dans le forum Assembleur
    Réponses: 9
    Dernier message: 28/04/2005, 16h41
  5. gestion d'une erreur
    Par Jeannotc dans le forum Bases de données
    Réponses: 8
    Dernier message: 25/06/2004, 18h04

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