Bonsoir ,
j'ai un problème avec les listes chaines
le problème c'est de créer un programme (gérer les utilisateurs d'un service informatique) comporte trois listes chainés : groupes , utilisateurs et droits.
l'utilisateur s'affecte au groupe avec des droits spécifique , j'ai commencé mais il y a des erreurs au niveau de la modification du groupe quand je saisie une valeur , la valeur se change !
le code :
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
#‎include‬ <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct droit droit;
struct droit
{
int code;
char categorie[30];
char description[30];
char dateattribution[30];
struct droit *nxt;
};
typedef droit* listdroit;
typedef struct utilisateur utilisateur;
struct utilisateur
{
int cin;
char nom[30];
char prenom[30];
char datenaissance[30];
listdroit droits;
struct utilisateur *nxt;
};
typedef utilisateur* listutilisateur;
 
typedef struct groupe groupe;
struct groupe
{
int numero;
char nom[30];
char datecreation[30];
listutilisateur users;
struct groupe *nxt;
};
typedef groupe* listgroupe;
 
listgroupe ajouterdebut(listgroupe liste, int num,char nom[30], char date[30])
{
groupe* nouvelElement = (groupe*)malloc(sizeof(groupe));
nouvelElement->numero = num;
strcpy(nouvelElement->nom, nom);
strcpy(nouvelElement->datecreation, date);
nouvelElement->nxt = liste;
return nouvelElement;
}
 
int affichermenu(void){
int rep;
 
printf("Votre choix : ");
 
scanf("%i",&rep);
printf("votre choix saisie est : %d \n",rep);
return rep;
}
 
void afficherListe(listgroupe liste)
{
groupe *tmp = liste;
while(tmp != NULL)
{
printf("Numero : %d \n", tmp->numero);
printf("Nom : %s \n", tmp->nom);
printf("Date creation : %s \n", tmp->datecreation);
tmp = tmp->nxt;
}
}
listgroupe modifier(listgroupe liste, int valeur)
{ int num;
char nom[30];
char date[30];
groupe *tmp=liste;
/* Tant que l'on n'est pas au bout de la liste */
while(tmp != NULL)
{printf("le numero dans la liste est %i \n",tmp->numero);
printf("le numero saisie est %i \n",valeur);
if(tmp->numero == valeur)
{
/* Si l'élément a la valeur recherchée, on renvoie son adresse */
printf("trouve");
printf("donner le nouveau numero du groupe:");scanf("%i",&num);
printf("donner le nouveau nom du groupe:");scanf("%s",nom);
printf("donner la nouvelle date de creation du groupe:");scanf("%s",date);
liste->numero = num;
strcpy(liste->nom, nom);
strcpy(liste->datecreation, date);
return tmp;
}
tmp = tmp->nxt;
}
 
return NULL;
}
int main()
{int rep;
listgroupe ma_liste2 = NULL;
 
printf("---Menu---\n\n");
printf("Gestion des droits d'acces \n\n");
printf("1-ajouter un droit d'acces \n\n");
printf("2-Modifier un droit d'acces \n\n");
printf("3-Supprimer un droit d'acces \n\n");
printf("Gestion des utilisateurs \n\n");
printf("4-Ajouter un utilisateur a un groupe \n\n");
printf("5-Affichler liste utilisateurs/groupe \n\n");
printf("6-Supprimer un utilisateur d'un groupe \n\n");
printf("7-Supprimer un utilisateur de tous les groupes \n\n");
printf("Gestion des Groupes \n\n");
printf("8-Ajouter un groupe d'utilisateur \n\n");
printf("9-Modifier un groupe \n\n");
printf("10-Supprimer un groupe \n\n");
printf("11- Afficher les groupes \n\n");
printf("12-Quitter \n\n");
do{
switch(affichermenu())
{
case 8:{
printf("vous avez choisis ajouter un groupe \n");
int num;
char nom[30];
char date[30];
printf("donner le numero du groupe:");scanf("%i",&num);
printf("donner le nom du groupe:");scanf("%s",nom);
printf("donner la date ce creation du groupe:");scanf("%s",date);
ma_liste2=ajouterdebut(ma_liste2,num,nom,date);
while ((rep = getchar ()) != '\n' && rep != EOF);
break;
}
case 9:{ int numr;
while ((numr = getchar ()) != '\n' && numr != EOF);
printf("donner le numero de groupe a modifier :");
scanf("$i",&numr);
printf("le numero saisie est : %i \n",numr);
modifier(ma_liste2,numr);
break;
}
case 11:{
printf("affichage de la liste des groupes \n");
afficherListe(ma_liste2);
while ((rep = getchar ()) != '\n' && rep != EOF);
break;
}
default:printf("choix invalide");
while ((rep = getchar ()) != '\n' && rep != EOF);
affichermenu();
break;
 
}
}while(rep!=11);
 
return 0;
}