1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
Dismiss Notice
Welcome to our Education website, plz like our page facebook to support us. Thank You and wish you good navigation

Les fichiers langage c - TD sur les fichiers- gestion de fichier en c/c++

abdelouafiJan 2, 2017

    1. abdelouafi

      abdelouafi Administrator Staff Member

      Messages:
      165
      Likes Received:
      7
      Trophy Points:
      18
      Joined
      Sep 13, 2016

      Exercice 1:

      Ecrire un programme qui permet de copier le contenu d'un fichier texte F1 dans un autre fichier texte F2?

      Exercice 2:

      On suppose qu'une personne est caractérisé par le nom, le prénom et son numéro de téléphone. Notre objectif est de créer un répertoire téléphonique, on peut définir une structure peronne qui contient deux variables de types chaîne de caractères et une variable de type entier pour les numéros de téléphone.
      1. Erire une fonction void ajout_personne (FILE *rep) qui saisit une personne et l'ajoute à la fin du fichier passé en paramètre
      2. Ecrire une fonction void affiche_ensemble_personne (FILE *rep) qui affiche le contenu du fichier
      3. Ecrire une fonction void trouve_numéro_personne (FILE *rep, char *nom) qui permet de trouver le numéro de téléphone d??une personne donnée en paramètre
      4. Ecrire une fonction void changer_numéro_personne (FILE *rep, char *nom) qui permet de changer le numéro de téléphone d'une personne donnée en paramètre
      5. Ecrire une fonction void menu(FILE *rep) qui demande l'opération à exécuter : ajouter une personne, afficher le contenu du répertoire, trouver un numéro ou quitter le programme
      6. Ecrire le programme principal
      Remarques:
      On travail avec des fichier de type DAT: repertoire.dat
      la fonction fseek(f1, 0, SEEK_SET); permet de placer le curseur en début de fichier.
      Au lieu d'utiliser la fonction fprint pour l'écriture dans le fichier repertoire.dat on va utiliser la fonction fwrite comme suit:
      Code:
      fprintf( fichier , "%d\n" , personne.age);
      fprintf( fichier , "%s\n" , personne.nom);
      fprintf( fichier , "%s\n" , personne.prenom);
      fprintf( fichier , "%s\n" , personne.adresse);
      fprintf( fichier , "%d\n" , personne.nombreFreres);
      
      est remplacé par l'instruction
      Code:
      fwrite( &personne , sizeof(personne) , 1 , fichier);
      Pour la lecture on va utiliser la fonction fread comme suit:
      Prenons un exemple simple: Si l'on a une variable 'var' qu'on a sauvegardée par fwrite dans le fichier 'fichier' alors on peut la charger ainsi :
      Code:
      int var;
      
      fread( &var , sizeof(var) , 1 , fichier );
      
      Pour la structure Personne:
      Code:
      personne pers;
      FILE *rep
      fread(&pers,sizeof(personne),1,rep)
      Le code suivant vérifie si la fonction fread a lu des données ou non
      Code:
      while (fread(&pers,sizeof(personne),1,rep) != 0) {
           traitement.....
         }

      L'exécution du programme sera comme suit:
      file.png
       
      Last edited: Jan 9, 2017
      1 People like this
      Loading...
      Exercice 2:
      Code:
      #include <stdio.h>
      
      #include <string.h>
      
      typedef struct
      {
        char nom[10];
        char prenom[10];
        int tel;
      } personne;
      
      void ajout_personne (FILE *rep);
      void affiche_ensemble_personne(FILE *rep);
      void trouve_numero_personne(FILE *rep, char *nom);
      void menu(FILE *rep);
      
      void ajout_personne (FILE *rep) {
        personne pers;
        printf ("nom : ");
        scanf ("%s", pers.nom);
        printf ("prenom : ");
        scanf ("%s", pers.prenom);
        printf ("tel : ");
        scanf ("%d", &pers.tel);
        fwrite (&pers, sizeof(pers), 1, rep);
      }
      
      void affiche_ensemble_personne(FILE *rep) {
         personne pers;
      
         fseek(rep,0,SEEK_SET);
         while (fread(&pers,sizeof(personne),1,rep) != 0) {
           printf("nom .....: %s\n",pers.nom);
           printf("prenom ..: %s\n",pers.prenom);
           printf("tel .....: %d\n\n",pers.tel);
         }
      }
      
      void trouve_numero_personne(FILE *rep, char *nom) {
        personne pers;
        int trouve = 1;
       
        printf("Donnez le nom : ");
        scanf("%s",nom);
        fseek(rep, 0, SEEK_SET);
        while (fread(&pers, sizeof(personne), 1, rep) != 0 && trouve != 0) {
          if ((trouve = strcmp(pers.nom, nom)) == 0)
            printf("Tel de %s %s : %d\n\n",pers.prenom, pers.nom, pers.tel);
        }
        if (trouve != 0) {
          printf("Ce nom n'existe pas\n");
        }
      } 
      
      void menu(FILE *rep) {
        char reponse, nom[10];
        do {
          printf("AJOUTER.... : A\n");
          printf("LISTER..... : L\n");
          printf("CHERCHER....: T\n");
          printf("QUITER......: Q\n");
          printf("  votre choix: ");
          scanf(" %c",&reponse);
          switch(reponse) {
          case 'a':case 'A': ajout_personne (rep);
            break;
          case 'l':case 'L': affiche_ensemble_personne(rep);
            break;
          case 't':case 'T': trouve_numero_personne(rep, nom);
          }
        }
        while( reponse != 'q' && reponse != 'Q');
      }
      
      int main () {
        FILE *repertoire;   
       
        repertoire = fopen ("reper.dat", "a+");   
        menu(repertoire);
        fclose (repertoire);
        return 0;
      }

Share This Page

Share