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 :

Gestion de notes d'étudiants avec menu


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Gestion de notes d'étudiants avec menu
    Bonjour a tous,
    Je voudrais faire un programme de gestion de notes d'étudiants d'une classe:
    -ajouter un étudiant et sa note
    -modifier un étudiant
    -supprimer un étudiant
    -lister les étudiant par ordre de mérite
    -lister les étudiants par ordre alphabétique

    Je vous propose mon code ci-dessous mais qui marche pas comme je l'ai voulu, si quelqu'un pourrait m'aider a améliorer mon projet comme je l'ai libelle ci haut
    Ca reste la fonction modifier

    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    #include<iostream.h>
     #include<string.h>
     #include<malloc.h>
     #include<stdio.h>
     
     struct elevnot
     {
     char eleve[20];
     int note;
     };
     
     struct liste
     {
     elevnot * releve;
     int nbmax;
     int nb;
     };
     
     liste bulletin;
     
     void initliste()
     {
     bulletin.releve=NULL;
     bulletin.nbmax=0;
     bulletin.nb=0;
     }
     
     
     
     void ajoute()
     {
     int r=0,i;
     elevnot * inter;
     elevnot ajout;
     bool sortir;
     do
     {
     printf("Veuillez entrer le nom de : \n");
     scanf("%s",&ajout.eleve);
     sortir=true;
     for (i=0;i<bulletin.nb;i++)
     {
     if(strcmp(bulletin.releve[i].eleve,ajout.eleve)==0)
     {sortir=false;}
     }
     }while (sortir==false);
     do
     {
     printf("Veuillez entrer la note de %s\n",ajout.eleve);
     scanf("%d",&ajout.note);
     }while ((ajout.note<0)||(ajout.note>20));
     if(bulletin.nb<bulletin.nbmax)
     {bulletin.releve[bulletin.nb]=ajout;
     bulletin.nb++;}
     else
     {
     inter=(elevnot *)malloc((bulletin.nbmax+5)*sizeof(elevnot));
     if(inter==NULL) r=-1;
     else
     {
     for(i=0;i<bulletin.nb;i++)inter[i]=bulletin.releve[i];
     bulletin.nbmax=bulletin.nbmax+5;
     free(bulletin.releve);
     bulletin.releve=inter;
     bulletin.releve[bulletin.nb]=ajout;
     bulletin.nb++;
     }
     }
     }
     
     void supprime(char mot[])
     {
     int i;
     for (i=0;i<bulletin.nb;i++)
     {
     if (strcmp(bulletin.releve[i].eleve,mot)==0)
     {
     bulletin.releve[i]=bulletin.releve[bulletin.nb-1];
     bulletin.nb--;
     }
     }
     }
     
     void viretout()
     {
     free(bulletin.releve);
     initliste();
     }
     
     void showmethenotes()
     {
     int i;
     for (i=0;i<bulletin.nb;i++)
     {
     printf("NOM : %s NOTE : %d/20\n",bulletin.releve[i].eleve,bulletin.releve[i].note);
     }
     }
     
     void whatsthemoyenne()
     {
     int i;
     double moyenne=0;
     for (i=0;i<bulletin.nb;i++) moyenne+=bulletin.releve[i].note;
     moyenne=moyenne/bulletin.nb;
     if (bulletin.nb!=0) printf("MOYENNE : %d\n",moyenne);
     }
     
     //void main()
     int main(void)
     {
     int choix,i;
     char nom[20];
     do
     {
     
     
     
     printf("                  ---------------\n");
     printf("                 |      Menu     |\n");
     printf("                  ---------------\n\n\n");     
     printf("1. Ajouter une note\n");
     printf("2. Supprimer une note au nom de\n");
     printf("3. Afficher les notes\n");
     printf("4. Afficher la moyenne\n");
     printf("5. Supprimer toutes les notes\n");
     printf("6. Quitter\n");
     printf("Votre choix : \n");
     scanf("%d",&choix);
     switch(choix)
     {
     case 1: ajoute();
     break;
     case 2: printf("Quel nom ? \n");scanf("%s",&nom[i]);
     supprime(nom);
     break;
     case 3: showmethenotes();
     break;
     case 4: whatsthemoyenne();
     break;
     case 5: viretout();
     break;
     case 6: viretout();
     break;
     };
     } while (choix!=6);
     }

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Et la question est ... ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Quel est ton problème hormis l'utilisation du scanf ?
    http://c.developpez.com/faq/?page=bo...scanf_vs_fgets

    PS : Merci d'utiliser les balises code

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Gestion des notes étudiants
    Bonjour a tous,
    Si quelqu'un pourrait m'aider a finir mon code, je n'arrive pas faire correctement la fonction Tri "tri_insertio()", et aussi la recherche et aussi le listage par ordre alphabetique
    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     #include<string.h>
     #include<malloc.h>
     #include<stdio.h>
     
     struct elevnot
     {
     char eleve[20];
     int note;
     };
     
     struct liste
     {
     elevnot * releve;
     int nbmax;
     int nb;
     };
     
     liste bulletin;
     
     void initliste()
     {
     bulletin.releve=NULL;
     bulletin.nbmax=0;
     bulletin.nb=0;
     }
     
     
     
     void ajoute()
     {
     int r=0,i;
     elevnot * inter;
     elevnot ajout;
     bool sortir;
     do
     {
     printf("Veuillez entrer le nom de : \n");
     scanf("%s",&ajout.eleve);
     sortir=true;
     for (i=0;i<bulletin.nb;i++)
     {
     if(strcmp(bulletin.releve[i].eleve,ajout.eleve)==0)
     {sortir=false;}
     }
     }while (sortir==false);
     do
     {
     printf("Veuillez entrer la note de %s\n",ajout.eleve);
     scanf("%d",&ajout.note);
     }while ((ajout.note<0)||(ajout.note>20));
     if(bulletin.nb<bulletin.nbmax)
     {bulletin.releve[bulletin.nb]=ajout;
     bulletin.nb++;}
     else
     {
     inter=(elevnot *)malloc((bulletin.nbmax+5)*sizeof(elevnot));
     if(inter==NULL) r=-1;
     else
     {
     for(i=0;i<bulletin.nb;i++)inter[i]=bulletin.releve[i];
     bulletin.nbmax=bulletin.nbmax+5;
     free(bulletin.releve);
     bulletin.releve=inter;
     bulletin.releve[bulletin.nb]=ajout;
     bulletin.nb++;
     }
     }
     }
     
     void supprime(char mot[])
     {
     int i;
     for (i=0;i<bulletin.nb;i++)
     {
     if (strcmp(bulletin.releve[i].eleve,mot)==0)
     {
     bulletin.releve[i]=bulletin.releve[bulletin.nb-1];
     //free(bulletin.releve);
     bulletin.nb--;
     }
     }
     }
     void recherche(char mot[])
     {
     int i;
     for (i=0;i<bulletin.nb;i++)
     {
     if (strcmp(bulletin.releve[i].eleve,mot)==0)
     {
      bulletin.releve[i]=bulletin.releve[bulletin.nb-1];
     }
     }
     }
     
     void viretout()
     {
     free(bulletin.releve);
     initliste();
     }
     
     void listernotes()
     {
     int i;
     for (i=0;i<bulletin.nb;i++)
     {
     printf("NOM : %s NOTE : %d/20\n",bulletin.releve[i].eleve,bulletin.releve[i].note);
     }
     }
     void tri_insertion()
         {
            int tmp,j,i;
            char tmp1[20];
            for (i=0;i<bulletin.nb;i++)
             {
             tmp=bulletin.releve[i].note;
             tmp1[i]=bulletin.releve[i].eleve;
             j=i-1;
     
             while(j>=0 && tmp>bulletin.releve[j].note)
              {
              bulletin.releve[j+1].note=bulletin.releve[j].note;
              bulletin.releve[j+1].eleve=bulletin.releve[j].eleve;
              j=j-1;
              }
              bulletin.releve[j+1].note=tmp;
              bulletin.releve[j+1].eleve=tmp1[j];
             } 
         }
     
     
     void listermoyenne()
     {
     int i;
     double moyenne=0;
     for (i=0;i<bulletin.nb;i++) moyenne+=bulletin.releve[i].note;
     moyenne=moyenne/bulletin.nb;
     if (bulletin.nb!=0) printf("MOYENNE : %d\n",moyenne);
     }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    Deja il y a un probleme avec tes struct:
    tu dois réutiliser le mot clé struc au moment de les déclarer, ou alors faire un typedef de ce genre
    typedef struct elevenote
    {/*tes declarations
    } elevnot;

    struct liste
    {elevnot /* ou struct elevenote */ *releve;

    //
    //
    };

    //declaration de ta variable
    struct liste bulletin;



    Pour la recherche:
    Qu'est sensée faire cette fonction? Quand je la regarde elle écrase le dernier élément.Ne devrait-elle pas plutot garder la structure inchangée, et renvoyer la position de l'element trouvé (-1 si pas de resultat), ou alors un pointeur vers l'element trouvé ( éventuellement NULL). J'ai jamais vu une fonction de recherche de type void avant...

    pour le tri par insertion:
    déjà pourquoi avoir 2 variables temporaires, alors qu'en fait ce qu'il te faudrait c'est:
    elevnot tmp;
    de plus le fait de remplacer tes 2 affectations par une seule (affecter directement les structures) corrigerait l'erreur suivant : tu assignes un tableau à un autre, ce n'est pas autorise s'il sont déclarés comme tableau et non comme pointeur , et en plus ça ne ferait pas forcément ce que tu attends (tu veux copier le contenu , pas forcement changer l'adresse mémoire)


    pour l'affichage par ordre, tu cree un index ( tableau d'entiers) de la taille de ta liste, et tu ordonne ce tableau par ordre alphabetique avec un algorithme de tri sur le meme principe que le tri par insertion précédent, mais en utilisant la fonction strcmp (#include<string.h>)

    Et pitié Indente ton code proprement , c'est illisible tous ces if, while, do-while et for alignés verticalement alors qu'ils sont imbriqués.

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Salut.

    Citation Envoyé par isyldur Voir le message
    Et pitié Indente ton code proprement , c'est illisible tous ces if, while, do-while et for alignés verticalement alors qu'ils sont imbriqués.
    +1 (à mettre en évidence)

    Sinon pas de ; à la fin de ton switch (...) {} (dans ton main()), ton main() doit être de type int et doit retourner un int (0, EXIT_SUCCESS ou EXIT_FAILURE pour indiquer la fin du programme) et il est plus rigoureux de mettre void entre parenthèse lorsqu'une fonction ne prend pas de paramètres (c'est valable pour main()).

    Pour le reste, c'est trop illisible ... indentes ton code.

    Cordialement,
    Idriss

Discussions similaires

  1. Projet de gestion de notes d'étudiants
    Par soub dans le forum Débuter
    Réponses: 4
    Dernier message: 22/05/2014, 22h22
  2. [Turbo Pascal] Programme de gestion de fichier texte avec menu
    Par malek096 dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 05/11/2012, 23h32
  3. Gestion des notes étudiants
    Par baye7 dans le forum C
    Réponses: 0
    Dernier message: 22/03/2010, 12h38
  4. [MCD] gestion des notes étudiants
    Par Milleras dans le forum Schéma
    Réponses: 8
    Dernier message: 19/11/2009, 12h13
  5. [debutant] pour debbuger un petit prog avec menu
    Par niluge01 dans le forum Windows
    Réponses: 3
    Dernier message: 22/11/2003, 14h03

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