-
Notifications
You must be signed in to change notification settings - Fork 0
nednassim/TP
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
********************************************************************************* * * * 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
About
La structure de fichier LObarreF
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published