Exercice corrigé Langage C :
Enoncé
Soit un fichier binaire nommé PFE.bin regroupant les informations sur les projets de fin d’étude d’un établissement. Pour chaque projet, on mentionne le code du projet ( un entier ), le titre ( chaine de caractère de taille max 40 ), le nom de l’encadrant ( une chaine de caractères de taille max 20 ), le domaine traité ( une chaine de caractères de taille max 30 ).
L’application qu’on se propose de réaliser consiste à effectuer les opérations suivantes :
a. Créer le fichier PFE.bin.
b. Afficher le contenu du fichier PFE.bin.
c. Modifier les informations relatives à un projet du fichier PFE.bin
Enoncé
Soit un fichier binaire nommé PFE.bin regroupant les informations sur les projets de fin d’étude d’un établissement. Pour chaque projet, on mentionne le code du projet ( un entier ), le titre ( chaine de caractère de taille max 40 ), le nom de l’encadrant ( une chaine de caractères de taille max 20 ), le domaine traité ( une chaine de caractères de taille max 30 ).
L’application qu’on se propose de réaliser consiste à effectuer les opérations suivantes :
a. Créer le fichier PFE.bin.
b. Afficher le contenu du fichier PFE.bin.
c. Modifier les informations relatives à un projet du fichier PFE.bin
d. Supprimer les informations relatives à un projet du fichier PFE.bin
Solution :
struct PFE{
int code;
char titre[20];
char nom[20];
char domaine[20];
};
typedef struct PFE PFE;
void ajouter()
{
PFE *A; FILE *f; int i,N;
f=fopen("PFE.bin","wb");
if(!f)
exit(-1);
printf("Donner le nombre d'element : \n");
scanf("%d",&N);
A=(PFE*)malloc(N*sizeof(PFE));
for(i=0;i<N;i++)
{
printf("Donner le Num :\n");
scanf("%d",&(A+i)->code);
getchar();
printf("Donner le titre :\n");
gets((A+i)->titre);
printf("Donner le nom :\n");
gets((A+i)->nom);
printf("Donner le domaine :\n");
gets((A+i)->domaine);
fwrite((A+i),sizeof(PFE),1,f)
; }
fclose(f);
}
void afficher()
{
FILE *f; PFE A ;
f=fopen("PFE.bin","rb");
if(!f)
exit(-1);
while(fread(&A,sizeof(PFE),1,f)!=0)
{
printf(" Le numero : %d\n Le titre : %s\n Le nom : %s\n Le domaine : %s\n",A.code,A.titre,A.nom,A.domaine);
}
fclose(f);
}
PFE saisi()
{
PFE t;
printf("Donner le code : \n");
scanf("%d",&t.code);
getchar();
printf("Donner le titre : \n");
gets(t.titre);
printf("Donner le nom : \n");
gets(t.nom);
printf("Donner le domaine : \n");
gets(t.domaine);
return t;
}
void supprimer()
{
FILE *f,*g;
PFE p,z;
f=fopen("PFE.bin","rb");
if(!f)
exit(-1);
g=fopen("temp.bin","wb");
if(!g)
exit(-1);
printf("\n");
printf(" Donner le projet a supprimer : \n");
z=saisi();
while(fread(&p,sizeof(PFE),1,f)!=0)
{
if(z.code!=p.code && strcmp(z.titre,p.titre)!=0 && strcmp(z.nom,p.nom)!=0 && strcmp(z.domaine,p.domaine)!=0)
{
fwrite(&p,sizeof(PFE),1,g);
}
}
fclose(f); fclose(g);
remove("PFE.bin"); rename("temp.bin","PFE.bin");
}
void modifier()
{
FILE *f;
PFE z,p;
int test=0;
f=fopen("PFE.bin","rb+");
if(!f)
exit(-1);
printf(" --------Donner l'element a modifier : ----------\n");
z=saisi();
while(fread(&p,sizeof(PFE),1,f)!=0 && test==0)
{
if(z.code==p.code && strcmp(z.titre,p.titre)==0 && strcmp(z.nom,p.nom)==0 && strcmp(z.domaine,p.domaine)==0)
{
test=1;
}
}
printf(" -------Donner les nouvelles informations : ---------\n");
fseek(f,-sizeof(PFE),1);
p=saisi();
fwrite(&p,sizeof(PFE),1,f);
fclose(f);
}
int menu()
{
int choix;
printf(" 1: Afficher les donnees du fichier \n");
printf(" 2: supprimer les donnees du fichier \n");
printf(" 3: modifier les donnees du fichier \n");
printf(" 0: Quitter\n");
scanf("%d",&choix);
return choix;
}
int main()
{
int x;
printf(" -------Donner les informations du fichier--------- \n");
ajouter();
do
{
x=menu();
switch(x)
{
case 1:
printf("\n");
afficher();
printf("\n");
break;
case 2:
supprimer();
printf("\n");
afficher();
printf("\n");
break;
case 3:
modifier();
printf("\n");
afficher();
printf("\n");
break;
case 0:
printf("Fin de programme\n");
break;
}
}while(x!=0);
return 0;
}
Aucun commentaire:
Enregistrer un commentaire