#include #include #include #include typedef struct { char nom[10]; char prenom[10]; int matricule; float salaire; int nbHbase; int nbHsup; char grade; //problème de lecture lors de saisie }employe; void SaisirEmploye(employe *e) { printf("donnez le nom: "); scanf("%s",e->nom); printf("donner le prenom: "); scanf("%s",e->prenom); printf("donner le matricule: "); scanf("%d",&e->matricule); printf("donner le salaire: "); scanf("%f",&e->salaire); printf("donner le nbHBase: "); scanf("%d",&e->nbHbase); printf("donner le nbHsup: "); scanf("%d",&e->nbHsup); printf("donner le grade: "); scanf("%c",&e->grade); //problème de lecture lors de saisie } void AfficherEmploye(employe e) { printf("le nom est: %s\n",e.nom); printf("le prenom est: %s\n",e.prenom); printf("le matricule est: %d\n",e.matricule); printf("le salaire est: %f\n",e.salaire); printf("le nbHBase est: %d\n",e.nbHbase); printf("le nbHsup est: %d\n",e.nbHsup); printf("le grade est: %c\n",e.grade); } void AfficherFichierEmploye(char *chemin) { FILE *f; employe e; f=fopen(chemin,"rb"); if(f==NULL) printf("erreur d'ouverture"); else { while(fread(&e,sizeof(employe),1,f)) AfficherEmploye(e); fclose(f); } } int RechercheParNom(char *chemin,employe *e,char *nom) { FILE *f; employe e1; f=fopen(chemin,"rb"); if(f==NULL) printf("erreur d'ouverture"); else { while(!feof(f)) { fread(&e1,sizeof(employe),1,f); if(strcmp(e1.nom,nom)==0) {*e=e1; //affecter le contenue de e1 dans (*e) fclose(f); return(1);} } fclose(f); } return(-1); } int RechercheParGrade(char *chemin,employe *e1,char grade) { FILE *f; employe e; f=fopen(chemin,"rb"); if(f==NULL) printf("erreur d'ouverture"); else { while(!feof(f)) { fread(&e,sizeof(employe),1,f); if(e.grade==grade) //compariason code ASCII {*e1=e; //affecter le contenue de e1 dans (*e) fclose(f); return(1);} } fclose(f); } return(-1); } int RechercheParMatricule(char *chemin,employe *e1,int matricule) { FILE *f; employe e; f=fopen(chemin,"rb"); if(f==NULL) printf("erreur d'ouverture"); else { while(!feof(f)) { fread(&e,sizeof(employe),1,f); if(e.matricule==matricule) //compariason code ASCII {*e1=e; //affecter le contenue de e1 dans (*e) fclose(f); return(1);} } fclose(f); } return(-1); } void afficherParNom(char *chemin,char *Nom) { FILE *f; employe e; f=fopen(chemin,"rb"); if(f==NULL) printf("erreur d'ouverture"); else { while(fread(&e,sizeof(employe),1,f)) { if(strcmp(e.nom,Nom)==0) AfficherEmploye(e); //printf("Nom: %s",e.nom); } fclose(f); } } void AjoutEmploye(char *chemin,employe e) { FILE *f; employe e1; f=fopen(chemin,"ab"); if(f==NULL) printf("erreur d'ouverture"); else { fread(&e1,sizeof(employe),1,f); //on peut la supprimer if(RechercheParMatricule(chemin,&e1,e.matricule)==-1) fwrite(&e,sizeof(employe),1,f); fclose(f); } } void AjoutTrie(char *chemin,employe e) { FILE *f,*f1; employe e1; f=fopen(chemin,"rb"); f1=fopen("temp.txt","wb"); if((f==NULL)||(f1==NULL)) printf("erreur d'ouverture"); else { while(fread(&e1,sizeof(employe),1,f)&&(strcmp(e1.nom,e.nom)<0)) fwrite(&e1,sizeof(employe),1,f1); fwrite(&e,sizeof(employe),1,f1); fwrite(&e1,sizeof(employe),1,f1); //parceque le curseur à avancer par le while while(fread(&e1,sizeof(employe),1,f)) fwrite(&e1,sizeof(employe),1,f1); fclose(f); fclose(f1); } f=fopen(chemin,"wb"); f1=fopen("temp.txt","rb"); while(fread(&e1,sizeof(employe),1,f1)) fwrite(&e1,sizeof(employe),1,f); fclose(f); fclose(f1); } //rename("temp.txt",chemin); // à la place d'ouvrir les deux fichiers une autre fois //trier un fichier void triefichier(char *chemin) { employe *tabE; //allocation dynamique de tableau, mais pas encore alloué FILE *f; employe e,temp; int n=0,i,j,min; f=fopen(chemin,"rb"); if(f!=NULL) { while(fread(&e,sizeof(employe),1,f)) n++; } fclose(f); tabE=(employe*)malloc(sizeof(employe)*n); f=fopen(chemin,"rb"); if(f!=NULL) fread(tabE,sizeof(employe),n,f); //remplissage de tableau else printf("erreur d'ouverture"); fclose(f); //trie de tableau for(i=0;i