+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité régulier
    Homme Profil pro Moussa DABO
    Étudiant
    Inscrit en
    janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Nom : Homme Moussa DABO
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2013
    Messages : 2
    Points : 5
    Points
    5

    Par défaut Mettre à jour une base de données en C

    Bonjour.
    Je dois réaliser un programme en C qui recueille des données saisies par un utilisateur et les enregistre dans un fichier.
    Le programme fait aussi un traitement des données et doit par conséquent relire dans le fichier qui sert de base de données.
    Merci d’avance pour votre aide.




    Code :
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    //Ci-dessous la structure qui comporte l'ensemble des renseignements fournis par un élève. 
    typedef struct Eleve Eleve;
    struct Eleve
    {
           char nom[30];
           char prenom[30];
           int age;
           int sexe;
    /* ………
    ….. */
    };
     
    //Ci-dessous la procédure qui permet de recueillir les informations entrées par l'utilisateur
    int input(Eleve *eleve, int i)
    {
        eleve = malloc(NBELEVES * sizeof(*eleve));
        int choice = 0;
        do{
             if(choice == 2)
             break;
             system("cls");
             printf("ETUDIANT %d\n\n", i+1);
     
                  printf("      SECTION A      \n");
                  printf("INFORMATIONS PERSONNELLES\n\n");
     
                  printf("Nom\n\n"); 
                  fflush(stdin);
                  fgets(eleve[i].nom, sizeof eleve[i].nom, stdin);
                  search(eleve[i].nom);
     
                  printf("\n\n");
     
                  printf("Prenom\n\n");
                  fflush(stdin);
                  fgets(eleve[i].prenom, sizeof eleve[i].prenom, stdin);
                  search(eleve[i].prenom);
                  printf("\n\n");
     
                  do{
                  printf("Age\n\n");
                  receive(&eleve[i].age);
                  printf("\n\n");
                  }while(eleve[i].age < 10 || eleve[i].age > 80);
    /* …………………
    …. */
     
    i++;
     
                     do{
                         printf("\n\nCONTINUER LA SAISIE            ====> 1\n");
                         printf("QUITTER LA FENETRE DE SAISIE   ====> 2\n\n");
                         receive(&choice);
                         }while(choice != 1  && choice != 2);
     
             }while(choice == 1);
     
             FILE *fichier = fopen("base.bin", "ab");//Après enregistrement j’ouvre le fichier pour ajouter les nouvelles données.
             if(fichier == NULL)
             exit(EXIT_FAILURE);
     
             fwrite(eleve, sizeof(*eleve), i, fichier);
             fclose(fichier);
     
             system("cls");
     
         return i;
    }             
     
    //Ci-dessous la procédure qui permet de recueillir les informations contenues dans le fichier externe
    void output(Eleve *eleve, int n)
    {
         int i = 0;
         FILE *fichier = fopen("base.bin", "rb");
         if(fichier == NULL) exit(EXIT_FAILURE);
     
         fread(eleve, sizeof(*eleve), n, fichier);
         fclose(fichier);
    }
     
    //Ci-dessous la procédure qui permet d'afficher le profil d'un étudiant figurant dans la base
    void display_profiles(Eleve *eleve, int n)
    {
         int choix = 0, i;
     
         eleve = malloc(NBELEVES * sizeof(*eleve));
         if(eleve == NULL) exit(EXIT_FAILURE);
     
         output(eleve, n);
     
         do{
                       printf("Veuillez saisir l'indice correspondant pour afficher le profil de l'etudiant de votre choix\n\n");
     
                       printf("|      PRENOMS      |       NOMS        | INDICES |\n\n");
                       for(i = 0; i < n; i++)
                       {  
                             printf("| %8s           %6s                %2d\n", eleve[i].prenom, eleve[i].nom, i+1); 
                       }
                       printf("\n\n");
                       receive(&choix);
         }while(choix < 1 && choix > n);
    /* ………….
    ………*/
    } C’est à ce niveau que je Remarque que la base n’est pas correctement mise à jour.

  2. #2
    Modérateur
    Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    janvier 2009
    Messages
    627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : janvier 2009
    Messages : 627
    Points : 1 113
    Points
    1 113

    Par défaut

    EDIT : le message qui suit, certes "direct", a été fait alors que le PO avait posté, 27 minutes après le premier post, un message qui se limitait à (je ne garantis pas le nombre de ...)

    Citation Envoyé par DABO03 27 minutes après le premier post
    ......... .........
    ......... .........
    ......... .........
    Il l'a supprimé. Ok. Je comprends pourquoi. Mais, la véhémence de ma réponse ne peut pas s'expliquer sans que je le remette avec les (mes) moyens du bord. Je ne peux pas ne pas le ré-écrire sous peine de passer pour un fou-furieux (déjà que ...)
    --------- fin de l'ajout



    Wouahou : quelle entrée fracassante dans le forum !

    Il y a 2 façons de faire dans cette situation :

    1. ignorer superbement tes messages et te laisser mariner dans ton jus,
    2. te dire (de façon non politiquement correcte) que tu n'es pas le bienvenu tant que tu te comporteras de la sorte.


    J'ai un peu de temps et tes (2 malheureux) messages m'ont gonflé : je choisis donc la deuxième solution.

    Au deuxième post, tu râles après (10h07 - 9h40) 27 minutes parce qu'on n'a pas pris le soin de s'occuper de tes problèmes et de ta petite personne.

    Mais pour qui te prends-tu ? Il y a des tas de gens ici qui pourraient t'en remontrer sur le C et ce forum n'est pas un distributeur de solutions/réponses.

    Je te laisse le bénéfice du doute pour la suite parce que tu es nouveau sur ce forum mais sache que cette façon de faire est complétement contre-productive. Redescends sur terre, fais preuve d'un peu plus d'humilité, et plein de gens se feront un plaisir de t'aider si tu ne les traites pas comme des larbins.

    Je ne te salue pas.

  3. #3
    Invité régulier
    Homme Profil pro Moussa DABO
    Étudiant
    Inscrit en
    janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Nom : Homme Moussa DABO
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2013
    Messages : 2
    Points : 5
    Points
    5

    Par défaut Je ne vous comprends pas

    Citation Envoyé par plxpy Voir le message
    Wouahou : quelle entrée fracassante dans le forum !

    Il y a 2 façons de faire dans cette situation :

    1. ignorer superbement tes messages et te laisser mariner dans ton jus,
    2. te dire (de façon non politiquement correcte) que tu n'es pas le bienvenu tant que tu te comporteras de la sorte.


    J'ai un peu de temps et tes (2 malheureux) messages m'ont gonflé : je choisis donc la deuxième solution.

    Au deuxième post, tu râles après (10h07 - 9h40) 27 minutes parce qu'on n'a pas pris le soin de s'occuper de tes problèmes et de ta petite personne.

    Mais pour qui te prends-tu ? Il y a des tas de gens ici qui pourraient t'en remontrer sur le C et ce forum n'est pas un distributeur de solutions/réponses.

    Je te laisse le bénéfice du doute pour la suite parce que tu es nouveau sur ce forum mais sache que cette façon de faire est complétement contre-productive. Redescends sur terre, fais preuve d'un peu plus d'humilité, et plein de gens se feront un plaisir de t'aider si tu ne les traites pas comme des larbins.

    Je ne te salue pas.

    Salut je m'excuse si je me suis mal comporté. Meme si j'ai mis des points, je ne me souviens pas d'avoir dit du mal ou d'etre monté au ciel.
    J'ai sauté de joie quand j'ai vu la notification de votre message sur mon mail.
    Mais merci quand meme pour le rappel des règles de conduites.

  4. #4
    Expert Confirmé
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 834
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 834
    Points : 2 848
    Points
    2 848

    Par défaut

    Bonsoir,

    Tout d'abord +1 pour plxpy, sans commentaire.

    Sinon quelques mauvaises habitudes:

    fflush(stdin) -> pas bon du tout, fflush est réservé aux flux de sortie.
    system("cls") -> utilise system le moins possible voir pas du tout!

    Après correction de ces éléments, quel est le problème?

    Code :
    1
    2
    3
    int input(Eleve *eleve, int i)
    {
        eleve = malloc(NBELEVES * sizeof(*eleve));
    Sinon ça non!!!

    Si tu mets eleve en paramètre, il est censé être déjà initialisé, pas besoin de le réinitialiser.

    Après j'attend de voir ton code corrigé avec les system et fflush viré de notre vue
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •