IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Manipulation de fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Par défaut Manipulation de fichier
    bonjour ,

    je fais face a une difficulté pour terminer mon exercice

    je dois créer un programme qui permettra de créer un fichier pour les ouvriers d`une société avec leur nom , leur prénom , sexe et date de naissance , leur matricule . Ensuite ce programme doit être capable de demander à l'aide d'un menu :

    1. si on veut ajouter un ouvrier a la liste de ce fichier

    2. si on veut supprimer la liste des ouvriers en saisissant leur numéro matricule

    3. si on veut on veut consulter l'information d'un ouvrier en saisissant son numéro matricule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    #include<stdio.h>
    #include<conio.h>
    #include <stdlib.h>
     
    main()
    {
        FILE *FICHIER ;
        char nom[30] ,prenom[30] ,NOM_FICHIER[30] ,sexe[10];
        int matricule , datedenaissance ,n,i ;
     
        /*creer le fichier a remplir */
        printf("Entrez le nom du fichier :\n ");
      scanf("%s", NOM_FICHIER);
      FICHIER = fopen(NOM_FICHIER, "w");
     
        for ( i=0 ;i<1;i++)
        {
            printf("ouvrier Numero %d \n ",i+1);
            printf("entrez votre matricule SVP \n");
            scanf("%d", &matricule);
            printf("entrez votre nom SVP \n");
            scanf("%s", nom);
            printf("entrez votre prenom svp\n");
            scanf("%s", prenom);
            printf("sexe M/F \n");
            scanf("%s", sexe);
            printf("entrez votre date de naissance\n");
            scanf("%d", &datedenaissance);
            fprintf(FICHIER, "%d\n%s\n%s\n%s\n%d\n", matricule,nom ,prenom,sexe,datedenaissance);
        }/*fermetture du fichier */
        fclose(FICHIER);
     
        printf("------------menu--------------------------\n");
        printf("1- Ajouter un ouvrier a la liste \n ");
        printf("2-affichage de tous les enregistrements de ce fichier \n");
        printf("3-consulter une info grace a son matricule  \n");
        printf("4-supprimer une info grace a son matricule \n");
        scanf("%d",&n);
     
     
        switch(n)
                {
                case 1:    
     
                break;
     
                case 2:    
                 /* Affichage du fichier */
     
      printf("*** Contenu du fichier  %s ***\n", NOM_FICHIER);
     
    for ( i=0 ;i<1;i++)
        {
     
         fscanf(FICHIER, "%d\n%s\n%s\n", &matricule, nom, prenom,sexe);
     
         printf("Matricule : %d\t", matricule);
     
         printf("Nom et prénom : %s %s\n", nom, prenom);
     
        }
     
      /* Fermeture du fichier */
     
      fclose(FICHIER);
     
     
                break;
     
                case 3:    
                printf("");
                break;
     
                case 4:    
                printf("");
                break;
     
                }  
     
        getch();
    }
    mon problème je bloque à partir du menu

    quelqu'un pourrait m'aider SVP ?

    merci d'avance

  2. #2
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    Ou est-ce que tu bloques exactement ? Pour ce que je peux voir de ton code, tu n'as pas encore réussi à récupérer la fiche d'un ouvrier à partir de son matricule. C'est donc une idée de fonction à écrire.

    un conseil général : tu dois découper ton codes en petites fonctions. Ordre de grandeur : 1 fonction = 5 à 10 lignes de code.

    un autre conseil général : regroupes les données d'un ouvrier dans une structure (struct UnOuvrier { ... }. Ca te facilitera le travail.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Par défaut
    Au fait je débute en c donc c'est pourquoi j'aimerais d'abord le faire sans créer des fonctions. C'est ce qui me bloque

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,
    Citation Envoyé par KEVIN.DLL Voir le message
    Au fait je débute en c donc c'est pourquoi j'aimerais d'abord le faire sans créer des fonctions. C'est ce qui me bloque
    Vouloir commencer ainsi est une TRÈS mauvaise idée !!

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Par défaut
    Mais bon je ne comprend pas encore les fonctions or je dois vite rendre ce exercice

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 831
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par KEVIN.DLL Voir le message
    Mais bon je ne comprend pas encore les fonctions or je dois vite rendre ce exercice
    Bonjour

    Menu 1: ajouter un ouvrier => tu devrais savoir le faire vu que l'ajout c'est exatement comme le remplissage et que le remplissage tu l'as déjà fait. Donc pour l'ajout tu fais la même chose (saisie des infos et écritures dans le fichier)
    Menu 2: afficher les ouvriers => tu ouvres ton fichier, tu récupères les informations via fscanf au lieu de scanf
    Menu 3: afficher l'ouvrier ayant un certain matricule => c'est comme le 2 sauf que tu n'affiches que si le matricule lu correspond au matricule demandé
    Menu 4: effacer l'ouvrier => là c'est plus difficile car il faut comprendre qu'on n'efface pas ce qu'il y a dans un fichier. On ne peut que réécrire d'autres infos à la place des infos déjà existantes. Ou alors on réécrit un second fichier ne contenant plus l'info "effacée" puis on vient écraser le premier avec le second mais ça c'est super lourd.
    Donc là il faut réfléchir à une convention signifiant "cette info n'existe plus". Tu as pour ça seulement deux méthodes
    1. chaque info de ton fichier contient en plus un petit marqueur de ton choix (1 caractère). Quand ce caractère change, (par exemple '+' devient '-') c'est que l'info est "effacée" et dans ce cas tu ne l'affiches pas. Ensuite ne te reste plus qu'à parcourir ton fichier et à remplacer le '+' par le '-' pour l'ouvrier dont le matricule correspond
    2. Ou alors tu remplaces tes infos "effacées" par une ligne vide

    Il faut aussi savoir que quand tu as lu l'info, ton pointeur fichier est alors placé sur l'info suivante. Si tu écris quelque chose, tu écrases alors l'info suivante et non l'info que tu viens de lire; Il faut donc savoir se déplacer en arrière (et en avant) via la fonction fseek().

    Dans ton code, un des principaux problèmes c'est que tu écris un champ par ligne. Donc un ouvrier prend 5 lignes. C'est plus galère ensuite pour se positionner sur l'ouvrier X (il faut sauter (X -1) * 5 lignes). Généralement on a plutôt l'habitude d'écrire tous les champs sur une seule ligne (avec un séparateur spécifique comme par exemple ":") => fprintf(FICHIER, "%d:%s:%s:%s:%d\n", matricule,nom ,prenom,sexe,datedenaissance);. C'est plus facile à traiter car la fonction fgets() récupère une ligne d'un coup.

    Voilà pour l'aide. Maintenant mon avis perso, c'est que tu devrais très vite te mettre à bosser sérieusement. On ne peut pas t'avoir donné cet exercice sans t'avoir expliqué les fonctions, et tu mettras 50 fois plus de temps à le faire sans fonction (tu devras dupliquer plusieurs fois des codes identiques) qu'à les travailler, les comprendre et les appliquer. Parce que le C sans les fonctions c'est infaisable (ou presque)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 10h26
  2. Manipulation des fichiers
    Par monsau dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2004, 17h45
  3. [LG]Manipulation de fichiers
    Par yffick dans le forum Langage
    Réponses: 29
    Dernier message: 10/01/2004, 15h04
  4. Manipulation de fichiers - gestion d'extensions
    Par ulukai dans le forum Linux
    Réponses: 13
    Dernier message: 02/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo