jeudi 21 janvier 2016

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
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