Skip to content

nednassim/TP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

No packages published

Languages