Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/01/2013, 09h40   #1
DABO03
Invité régulier
 
Homme Moussa DABO
Étudiant
Inscription : 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 : 6
Points : 6
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.
DABO03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2013, 14h58   #2
plxpy
Membre émérite
 
Avatar de plxpy
 
Homme
Ingénieur
Inscription : janvier 2009
Messages : 494
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

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

Informations forums :
Inscription : janvier 2009
Messages : 494
Points : 893
Points : 893
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.
plxpy est déconnecté   Envoyer un message privé Réponse avec citation 60
Vieux 15/01/2013, 15h22   #3
DABO03
Invité régulier
 
Homme Moussa DABO
Étudiant
Inscription : 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 : 6
Points : 6
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.
DABO03 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 15/01/2013, 18h06   #4
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 322
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 322
Points : 1 820
Points : 1 820
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?

Citation:
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h54.


 
 
 
 
Partenaires

Hébergement Web