-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
322 lines (259 loc) · 12.5 KB
/
README
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
*********************************************************************************
* *
* Ecole Nationale Superieure d'Informatique (ESI) *
* *
* TP SFSD *
* Structure simple de fichiers - Methode: LObarreF *
* *
* Supervise par : Dr Kermi Adel *
* *
* NEDJAR Nassim groupe 4 *
* Annee Universitaire : 2021/2022 *
* *
* *
*********************************************************************************
// Module pour trier la table d'index par tri fusion
void Tri(Index *index, int l, int r, int opt)
- Les parametres sont :
+ index : la table d'index
+ l : la borne inferieure
+ r : la borne superieure
+ opt : le critere de tri :
* 1 : cle
* 2 : adresse
* 3 : age
* 4 : grade
* 5 : force armee
* 6 : region militaire
// Module pour chargement initial du fichier LObarreF
void Chargement_Initial(char *nom_fichier, int N)
Creation du fichier de donnees PERSONNEL-ANP_DZ.bin :
-Les parametres sont :
+ nom_fichier : le nom du fichier a charger
+ N : le nombre de personnels a creer
- On recupere les nombre de force armees, grades, regions militaires et wilayas des fichiers de la base de
donnees BDD force_armee.bin, grade.bin, region_militaire.bin et wilaya.bin
- On ouvre le fichier de donnees PERSONNEL-ANP_DZ.bin en mode nouveau et le fichier d'index
- On boucle jusqu'a N , a chaque iteration :
|
|__ - On cree un personnel aleatoirement et on l'ajoute a buffer
|__ - Si le buffer est plein, on l'ecrit et on alloue un nouveau bloc, sinon on continue
|
|__ - On ajoute ce personnel a la table d'index
- On met a jour l'entete
- On ecrit la table d'index dans le fichier d'index
- On ferme le fichier de donnees PERSONNEL-ANP_DZ.bin et le fichier d'index
Cout :
(N / b) EcrireDir : fichier de donnees + 1 ecriture : fichier d'index
Total : (N / b) + 1 acces disque
// Module pour la recherche dichotomique dans la table d'index
void Recherche_Dichotomique(Index *index, int N, int cle, int opt, int *pos, int *trouve)
La recherche dichotomique :
- Les parametres sont :
+ N : la taille de la table d'index
+ cle : la cle a rechercher
+ opt : le critere a rechercher :
* 1 : cle
* 2 : adresse
* 3 : age
* 4 : grade
* 5 : force armee
* 6 : region militaire
+ pos : la position dans la table d'index(passe par variable)
+ trouve : un booleen pour indiquer si le personnel est trouve
// Module pour rechercher un personnel selon la matricule
void Recherche(LObarreF *F, int matricule, int *trouve, int *i, int *j)
Les parametres sont :
+ F : fichier de type LObarreF
+ matricule : la matricule du personnel a rechercher
+ trouve : un booleen pour indiquer si le personnel est trouve (passage par variable)
+ i : le bloc ou le personnel se trouve (passage par variable)
+ j : la position dans le bloc ou le personnel se trouve (passage par variable)
- On ouvre le fichier d'index
- On charge la table d'index en MC
- On execute une recherche dichotomique de la matricule dans la table d'index
- Si le personnel est trouve : on renvoit le numero de bloc et sa position
- Sinon : on renvoie la position libre dans le bloc queue
Cout :
1 lecture : le fichier d'index
Total : 1 acces disque
// Module d'insertion dans un fichier LObarreF
void Insertion(LObarreF *F)
Les parametres sont :
+ F : fichier de type LObarreF
- On recupere les nombre de force armees, grades, regions militaires et wilayas des fichiers de la base de
donnees BDD force_armee.bin, grade.bin, region_militaire.bin et wilaya.bin
- On cree un personnel aleatoirement
- on recherche si le personnel existe deja dans le fichier de donnees
- Si le personnel est inexistant :
- On l'insere et on met a jour le fichier de donnees (bloc, entete)
- On ouvre le fichier d'index
- On construit un index pour le nouveau personnel
- On ajoute l'index a la table d'index
- On met a jour la table d'index dans le fichier d'index
- On ferme le fichier d'index
Cout :
4 lectures : fichiers de la base de donnees (force_armee, grade, region_militaire, wilaya)
+ 1 LireDir(dans le pire des cas) + 1 EcrireDir + (1 lecture + 2 ecriture) : fichier d'index
Total : 8 acces disque au meilleur cas
9 acces disque au pire cas
// Module pour supprimer un personnel a une position donnee
void Suppression1(LObarreF *F, int i, int j)
Les parametres sont :
+ F : fichier de type LObarreF
+ i : le bloc cible
+ j : la position dans le bloc
- On supprime le personnel
- On met a jour le bloc concerne et l'entete
Cout :
1 LireDir(2 au pire des cas) + 1 EcrireDir(2 au pire des cas) : fichier de donnees
Total : 2 acces disque au meilleur cas
4 acces disque au pire cas
// Module d'epuration dans un fichier LObarreF
void Epuration(LObarreF *F)
Les parametres sont :
+ F : fichier de type LObarreF
- On ouvre le fichier d'index
- On charge la table d'index dans la MC
- On alloue une table d'index temporaire
- On itere jusqu'a N :
|
|__ - Si deux index consecutive ont la meme matricule, on supprime le deuxieme
|__ - Sinon, on ajoute l'index a la table temporaire
- On ecrit la table temporaire (qui ne contient pas de duplique) dans le fichier d'index
- On ferme le fichier d'index
Cout :
2 lectures : fichier d'index + cout(Suppression1) + 2 ecriture : fichier d'index
Total : 6 acces disque au meilleur cas
8 acces disque au pire cas
// Module pour modifier la region militaire d'un personnel donnee par son matricule
Tenreg Modifier_Region_Militaire(LObarreF *F, int matricule, int region_militaire, int *pos)
Les parametres sont :
+ F : fichier de type LObarreF
+ matricule : la matricule du personnel concerne
+ region_militaire : la nouvelle region militaire
+ pos : la position du personnel dans la table d'index
- On recherche si le personnel existe deja dans le fichier de donnees
- Si le personnel est trouve :
- On modifie la region militaire du personnel et on met a jour le bloc concerne
- On ouvre le fichier d'index
- On se positionne sur l'index correspondant a ce personnel
- On change sa region militaire
- On ferme le fichier d'index
- On retourne le personnel (pour faciliter son affichage)
Cout :
cout(Recherche) + 1 LireDir + 1 EcrireDir : fichier de donnees + 1 lecture + 1 ecriture : fichier d'index
Total : 5 acces disque
// Module de suppression physique dans un fichier LObarreF
void Suppression(LObarreF *F, int matricule)
Les parametres sont :
+ F : fichier de type LObarreF
+ matricule : la matricule du personnel concerne
- Si le personnel est trouve :
- On ecrase le personnel par le dernier personnel
- On met a jour le bloc et l'entete
- On ouvre le fichier d'index
- On charge la table d'index dans la MC
- On trie la table d'index selon les adresses
- On ecrase l'index du personnel par l'index du dernier personnel
- On met a jour le fichier d'index
- On ferme le fichier d'index
Cout :
cout(Recherche) + 1 LireDir(2 au pire des cas) + 1 EcrireDir(2 au pire des cas) + 1 lecture + 2 ecriture (fichier d'index)
Total : 6 acces disque au meilleur cas
8 acces disque au pire cas
// Module pour supprimer les personnels d'une force armee
void Suppression_Force_Armee(LObarreF *F, int force_armee)
Les parametres sont :
+ F : fichier de type LObarreF
+ force_armee : la force armee concernee
- On ouvre le fichier d'index
- On charge la table d'index dans la MC
- On trie la table d'index selon la force armee
- On recherche cette force armee dans la table d'index
- Si la force armee est trouvee :
- Tant que le personnel appartient a cette force armee
|
|__ - On supprime le personnel du fichier de donnees
|__ - On continue a iterer au precedent
|
|__ - On supprime le personnel du fichier de donnees
|__ - On continue a iterer au prochain
- On met a jour le fichier d'index
- On ferme le fichier d'index
Cout :
2 lecture : fichier d'index, + N cout(Suppression1) + 2 ecriture : fichier d'index // N le nombre de personnels a supprimer
Total :
4 + N acces disque
// Module pour consulter tous les personnels d'une region donnee ayant l'age dans l'intervalle donne
Tenreg *Recherche_Intervale(LObarreF *F, int region_militaire, int age_min, int age_max, int *n)
Les parametres sont :
+ F : fichier de type LObarreF
+ region_militaire : la region militaire concernee
+ age_min : la borne inferieure de l'intervalle d'age
+ age_max : la borne superieure de l'intervalle d'age
+ n : le nombre de personnels concernes (passage par variable)
- On ouvre le fichier d'index
- On charge la table d'index dans la MC
- On trie la table d'index selon la region militaire
- On alloue une table d'index temporaire
- Si la region militaire est trouvee :
- Tant que le personnel appartient a cette force armee
|
|__ - On ajoute l'index du personnel a la table d'index temporaire
|__ - On continue a iterer au precedent
|
|__ - On ajoute l'index du personnel a la table d'index temporaire
|__ - On continue a iterer au prochain
- On alloue une table de personnels
- On itere dans le tableau d'index temporaire:
|__ - On lit le bloc concerne
- On ajoute le personnel a la table de personnels
- On ferme le fichier d'index
- On retourne la table de personnels
Cout :
2 lectures : fichier d'index, + N LireDir + 2 ecritures : fichier d'index // N le nombre de personnels a supprimer
Total :
4 + N acces disque
// Module pour consulter tous les personnels appartenant a une categorie de grade donnee
Tenreg *Recherche_Categorie_Grade(LObarreF *F, int categorie, int *n)
Les categories de grade disponibles :
1 : Officiers-generaux : 1 : Général de corps d’armée, 2 : Général-Major, 3 : Général [1, 2, 3]
2 : Officiers-superieurs : 4 : Colonel, 5: Lieutenant-colonel, 6 : Commandant [4, 5, 6]
3 : Officiers : 7 : Capitaine, 8 : Lieutenant, 9 : Sous-lieutenant, 10 : Aspirant [7, 8, 9, 10]
4 : Sous-officiers : 11 : Adjudant-chef, 12 : Adjudant, 13 : Sergent-chef, 14 : Sergent [11, 12, 13, 14]
5 : Hommes de troupes : 15 : Caporal-chef, 16 : Caporal, 17 : Djoundi [15, 16, 17]
Les parametres sont :
+ F : fichier de type LObarreF
+ categorie : la categorie de grade
+ n : le nombre de personels concernes (passage par variable)
- On ouvre le fichier d'index
- On charge la table d'index dans la MC
- On trie la table d'index selon le grade
- On alloue une table d'index temporaire
- Si la categorie est :
1 : on cherche l'un des grades 1, 2, 3, continuer a iterer tant qu'on a pas recuperer tous les personnels concernes
2 : on cherche l'un des grades 4, 5, 6, continuer a iterer tant qu'on a pas recuperer tous les personnels concernes
3 : on cherche l'un des grades 7, 8, 9, 10 continuer a iterer tant qu'on a pas recuperer tous les personnels concernes
4 : on cherche l'un des grades 11, 12, 13, 14 continuer a iterer tant qu'on a pas recuperer tous les personnels concernes
5 : on cherche l'un des grades 15, 16, 17, continuer a iterer tant qu'on a pas recuperer tous les personnels concernes
- On alloue une table de personnels
- On itere dans le tableau d'index temporaire:
|__ - On lit le bloc concerne
- On ajoute le personnel a la table de personnels
- On ferme le fichier d'index
- On retourne la table de personnels
Cout :
2 lectures : fichier d'index, + N LireDir + 2 ecritures : fichier d'index // N le nombre de personnels a supprimer
Total :
4 + N acces disque
// Module pour fragmenter le fichier en 6 fichiers selon la region militaire
void Fragmentation(LObarreF *F)
Les parametres sont :
+ F : fichier de type LObarreF
- On ouvre les fichiers F1, F2, F3, F4, F5 et F6 correspondant a la region militaire 1, 2, 3, 4, 5 et 6 respectivement
- On itere jusqu'a N (le nombre de personnels dans le fichier de donnees) :
|__ Si le personnel appartient a une region i, il sera ajouter au fichier Fi (i = (1, 2 ,3 4, 5, 6))
- On ferme les fichiers F1, F2, F3, F4, F5 et F6 correspondant a la region militaire 1, 2, 3, 4, 5 et 6 respectivement
Cout :
N LireDir : fichier de donnees + N EcrireDir : fichiers fragmentes