-
Notifications
You must be signed in to change notification settings - Fork 0
/
Gestion.h
236 lines (236 loc) · 4.88 KB
/
Gestion.h
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
#include<stdio.h>
#include<string.h>
struct entite // Entité Principale
{
int code;
char nom[100];
float valeur;
};
void nouveau(struct entite E[], int N) // Initialiser les éléments de la liste
{
int i;
for(i=0; i<N; i++)
{
E[i].code = 0;
strcpy(E[i].nom,"");
E[i].valeur = 0;
}
}
int rechercher(struct entite E[], int N, int code) // Rechercher un élément par attribut clé
{
int i;
for(i=0; i<N; i++)
{
if(code == E[i].code)
{
return i;
}
}
return -1;
}
int rechercheAV(struct entite E[], int N, char* nom) // Rechercher des éléments par un attribut non-clé
{
int i;
for(i=0; i<N; i++)
{
if(strcmp(nom,E[i].nom) == 0)
{
return i;
}
}
return -1;
}
void afficher(struct entite E) // Afficher un élément de type entité
{
printf("%d \t\t| %s \t\t| %.2f\n", E.code,E.nom,E.valeur);
}
void afficher_liste(struct entite E[], int N) // Afficher tous les éléments de la liste
{
int i;
printf("-------------------------------------------------\n");
printf("Code \t\t| Nom \t\t| Valeur\n");
printf("-------------------------------------------------\n");
for(i=0; i<N; i++)
{
afficher(E[i]);
}
printf("-------------------------------------------------\n");
}
void lire(struct entite E[], int N, struct entite* e) // Lire un élément pour l'ajouter à la liste
{
int code, p;
do
{
printf("\tEntrer code: "); scanf("%d",&code);
p = rechercher(E,N,code);
if(p != -1) printf("Code exite deja!\n");
} while(p != -1);
e->code = code;
printf("\tEntrer nom: "); fflush(stdin); gets(e->nom);
printf("\tEntrer valeur: "); scanf("%f",&(*e).valeur);
}
void lire_liste(struct entite E[], int* N) // Créer une liste et lire ses éléments à ajouter
{
printf("---> Entrer taille liste: "); scanf("%d",&(*N));
int i;
for(i=0; i<*N; i++)
{
printf("[*] Entrer entite %d:\n", i+1);
lire(E, *N, &E[i]);
}
}
void ajouter(struct entite E[], int* N) // Insérer un nouveau élément dans la liste
{
int i, p;
do
{
printf("---> Entrer position [1,%d]: ", *N); scanf("%d",&p);
p--;
if(p < 0 || p > *N-1) printf("Position invalide!\n");
} while(p < 0 || p > *N-1);
for(i=*N; i>p; i--)
{
E[i] = E[i-1];
}
(*N)++;
printf("[*] Entrer entite %d:\n", p+1);
lire(E, *N, &E[p]);
}
void modifier(struct entite E[], int N) // Modifier un élément existant dans la liste
{
int code, p, c;
printf("\tEntrer code: "); scanf("%d",&code);
p = rechercher(E,N,code);
if(p == -1) printf("Code introuvable!\n");
else
{
do
{
afficher(E[p]);
printf("\t*--------------------*\n");
printf("\t| 1. Modifier nom |\n");
printf("\t| 2. Modifier valeur |\n");
printf("\t| 3. Retour |\n");
printf("\t*--------------------*\n");
printf("=> Entrer choix: "); scanf("%d",&c);
switch(c)
{
case 1: printf("\tEntrer nom: "); scanf("%s", E[p].nom); break;
case 2: printf("\tEntrer valeur: "); scanf("%f", &E[p].valeur); break;
case 3: break;
default: printf("Choix invalide!\n");
}
} while(c != 3);
}
}
void supprimer(struct entite E[], int* N) // Supprimer un élément existant dans la liste
{
int i, code, p;
printf("\tEntrer code: "); scanf("%d", &code);
p = rechercher(E,*N,code);
if(p == -1) printf("Code introuvable!\n");
else
{
for(i=p; i<*N; i++)
{
E[i] = E[i+1];
}
(*N)--;
}
}
void trier(struct entite E[], int N, int ordre) // Trier les éléments par un attribut clé
{
int i, j;
struct entite tmp;
for(i=0; i<N; i++)
{
for(j=i+1; j<N-1; j++)
{
if(ordre == 0) // Ordre croissant
{
if(E[i].code > E[j].code)
{
tmp = E[i];
E[i] = E[j];
E[j] = tmp;
}
}
else // Ordre décroissant
{
if(E[i].code < E[j].code)
{
tmp = E[i];
E[i] = E[j];
E[j] = tmp;
}
}
}
}
}
void triAV(struct entite E[], int N, int ordre) // Trier les éléments par un attribut non-clé
{
int i, j;
struct entite tmp;
for(i=0; i<N; i++)
{
for(j=i+1; j<N-1; j++)
{
if(ordre == 0) // Ordre croissant
{
if(strcmp(E[i].nom,E[j].nom) > 0)
{
tmp = E[i];
E[i] = E[j];
E[j] = tmp;
}
}
else // Ordre décroissant
{
if(strcmp(E[i].nom,E[j].nom) < 0)
{
tmp = E[i];
E[i] = E[j];
E[j] = tmp;
}
}
}
}
}
void sauvegarder(struct entite E[], int N, char* nom_fichier) // Enregistrer la liste dans un fichier
{
FILE* fichier = NULL;
fichier = fopen(nom_fichier,"w");
if(fichier == NULL)
{
printf("Fichier inaccessible!\n");
}
else
{
int i;
for(i=0; i<N; i++)
{
fprintf(fichier,"%d,%s,%f\n",E[i].code,E[i].nom,E[i].valeur);
}
fclose(fichier);
}
}
void charger(struct entite E[], int* N, char* nom_fichier) // Récupérer la liste depuis un fichier
{
FILE* fichier = NULL;
fichier = fopen(nom_fichier,"r");
if(fichier == NULL)
{
printf("Fichier inaccessible!\n");
}
else
{
(*N) = 0;
while(!feof(fichier))
{
fscanf(fichier,"%d,%s,%f\n",&E[*N].code,E[*N].nom,&E[*N].valeur);
(*N)++;
}
(*N)--;
fclose(fichier);
}
}