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 :

recherche d'un enregistrement dans un fichier: marche pas !!


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Points : 34
    Points
    34
    Par défaut recherche d'un enregistrement dans un fichier: marche pas !!
    Bonjour,

    je suis en train de realiser un programme de "gestion des comptes bancaires" en langage C;

    Dans le programme, j'ai une structure compte declarée comme une variable globale:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct compte
    {
           char numeroCpte [11]; //numero du compte
           char typeCompte [7]; //type du compte: cheque ou epargne
           char nomClient [50]; //nom du client
           char prenomClient [50]; //prenom(s) du client
           char statutClient [12]; //statut social du client: salarie ou non salarie
           char categorieCompte [13]; //categorie du compte: particulier ou professionnel
           char numeroClient [11]; //numero du client
           char dateCreation [10]; //date de creation du compte
    };
     
    struct compte cpt; // declaration d'une variable cpt de type compte


    J'enregistre les donnees dans la structure compte dans un fichier.

    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
    void EnregDansFichier ()
    {
         char nomFichier [26]; //nom du fichier dans lequel il faut sauvegarder
         int erreur;
         int i;
         FILE *sortie;
     
         printf("Entrez le nom du fichier: ");
         scanf("%s",&nomFichier);
     
           sortie=fopen(nomFichier,"at");
     
           if (sortie == NULL)
           {
                printf("Un probleme est survenue lors de la tentative d'enregistrement de vos donnees dans le fichier %s\n",nomFichier);
           }
           else
           {
                fprintf(sortie,"%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n", cpt.numeroCpte, cpt.typeCompte, cpt.nomClient, cpt.prenomClient, cpt.statutClient, cpt.categorieCompte, cpt.numeroClient, cpt.dateCreation);
           } 
           fclose(sortie);
    }


    Je voudrais effectuer une recherche à partir du nomClient, ou à partir du numeroCpte, dans le fichier, et afficher l'enregistrement correspondant:

    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
    void RechercheCpte ()
    {
         char numeroCpte [11];
         char nomClient [50];
         char nomFichier [26];
         int trouve1, trouve2=0;
         FILE *sortie;
     
         printf ("Entrez le nom du fichier: "); scanf ("%s", nomFichier);
         sortie=fopen(nomFichier, "rt");
     
         printf ("\n\n\nEntrez le nom du client, ou le numero de compte que vous cherchez");
         printf ("\n\n\nNumero compte: "); scanf ("%s", numeroCpte);
         printf ("\n\n\nNom client: "); scanf ("%s", nomClient);
     
         while (!EOF || !trouve1 || !trouve2) // tant que la fin du fichier n'est pas atteint
         {
             if (numeroCpte) // si un numero de compte a ete saisi
             {
                 if (nomClient) // si un numero de compte et un nom de client ont ete saisi
                 {
                    trouve1=(strcmp(nomClient, cpt.nomClient));
                 }
                 else // si un numero de compte a ete saisi, mais pas de nom client
                 {
                     trouve2=(strcmp(numeroCpte, cpt.numeroCpte));
                 }
             }
             else // si aucun numero de compte n'a ete saisi
             {
                 if (nomClient) // si aucun numero de compte n'a ete saisi, mais qu'un numero de client a ete saisie
                 {
                    trouve1=(strcmp(nomClient, cpt.nomClient));
                 }
             } // fin du if
     
             fscanf(sortie,"%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);              
     
         } // fin du while
     
         fscanf(sortie,"%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);
             // fscanf(sortie,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",                &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);
     
        system ("pause");
    }
    [/code]

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: recherche d'un enregistrement dans un fichier: marche pa
    Citation Envoyé par tonguim
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         FILE *sortie;
         sortie=fopen(nomFichier, "rt");
     
         while (!EOF || !trouve1 || !trouve2) // tant que la fin du fichier n'est pas atteint
         {
             fscanf(sortie,"%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);              
     
         } // fin du while
     
         fscanf(sortie,"%s \n %s \n %s \n %s \n %s \n %s \n %s \n %s \n", &cpt.numeroCpte, &cpt.typeCompte, &cpt.nomClient, &cpt.prenomClient, &cpt.statutClient, &cpt.categorieCompte, &cpt.numeroClient, &cpt.dateCreation);
    Quand je vois ça, j'ai peur. Est-ce donc la première fois que tu lis un fichier ? Si c'est le cas, il faut commencer par des choses simples afin de maitriser le rôle des fonctions et l'algorithme de lecture.

    Je te conseille une approche pas à pas.

    1 er exercice :

    Soit une fichier le fichier texte suivant nommé "data.txt" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pomme 12
    poire 15
    banane 13
    Ecrire le programme qui lit le fichier, affiche ses lignes et le nombre de lignes lues.

    Rappels :
    • fopen() peut echouer
    • tout fichier ouvert doit être ensuite refermé.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Points : 34
    Points
    34
    Par défaut
    Merci, pour les conseils. Le problème est que je dois rendre le travail demain. Vu les quelques heures qui me restent, je dois assimiler beaucoup en tres peu de temps, pour que mon programme marche au moins. Quand a l'optimisation du programme, ou bien l'apprentissage du langage, je continuerai à le faire même après le projet.

    Si quelqu'un veut bien m'aider, je serai vraiment reconnaissant.

Discussions similaires

  1. Recherche dans un fichier impossible enregistré dans un fichier
    Par cdjkhdjlhxjklnjskznj dans le forum Langage
    Réponses: 19
    Dernier message: 03/12/2014, 01h09
  2. Rechercher un enregistrement dans un fichier dBase
    Par mèmaton dans le forum WinDev
    Réponses: 1
    Dernier message: 22/06/2006, 21h22
  3. [LG]Enregistrements dans un fichier
    Par ticoude dans le forum Langage
    Réponses: 1
    Dernier message: 26/11/2004, 19h33
  4. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 01h59
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 16h17

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