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 :

Mettre à jour une base de données en C


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 7
    Points
    7
    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 : 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
    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
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    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 : 792
    Points : 1 481
    Points
    1 481
    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.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 7
    Points
    7
    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 éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/04/2008, 11h28
  2. Comment mettre à jour une base de données access
    Par nicolas2603 dans le forum VB.NET
    Réponses: 11
    Dernier message: 16/10/2007, 14h40
  3. Réponses: 2
    Dernier message: 27/04/2007, 13h45
  4. Réponses: 1
    Dernier message: 15/09/2006, 11h24
  5. [SQL SERVER] Mettre à jour une base de donnée
    Par grellierj dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/05/2006, 11h33

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