Vous êtes sur la page 1sur 4

#include <stdio.

h>
#include <string.h>
#define MAXNOTES
#define MAXELEVES

10
10

typedef struct {
int jour;
char mois[10];
int annee;
} DATE;
typedef struct {
char nom[10];
char prenom[10];
DATE date_naissance;
char info[3];
char redoublant;
int
groupe;
float notes[MAXNOTES];
char nom_module[MAXNOTES][30];
int
nbnotes;
// float moyenne;
} FICHE;
typedef struct {
int
n_eleves;
FICHE les_eleves[MAXELEVES];
} CLASSE;
CLASSE
CLASSE
void
void
CLASSE

LireClasse(void);
SaisieOrdonnee(void);
EcrireClasse(CLASSE);
Meilleur(CLASSE);
insertion(CLASSE, FICHE);

FICHE
void
FICHE
float
float
char

LireFiche(int);
EcrireFiche(FICHE);
AjouteNote(FICHE, char []);
Moyenne(FICHE);
MoyenneEleve(CLASSE, char []);
*touppercase(char []);

int main(void) {
CLASSE classe;
classe = LireClasse();
EcrireClasse(classe);
Meilleur(classe);
return 0;
}
CLASSE SaisieOrdonnee(void) {
CLASSE classe;
int
i, n_eleves;
do {
printf("Entrez le nombre des eleves (1 - %d): ?", MAXELEVES);
scanf("%d", &n_eleves);
if (n_eleves < 1 || n_eleves > MAXELEVES)
printf("\n\terr <--- Entrez un nombre entre 1 et %d --->\n", MAXELEVES);
} while (n_eleves < 1 || n_eleves > MAXELEVES);
classe.n_eleves=0;

for (i=0; i < n_eleves; i++)


classe = insertion(classe, LireFiche(i+1));
return classe;
}
CLASSE LireClasse(void) {
CLASSE classe;
int
i;
do {
printf("Entrez le nombre des eleves (1 - %d): ?", MAXELEVES);
scanf("%d", &classe.n_eleves);
if (classe.n_eleves < 1 || classe.n_eleves > MAXELEVES)
printf("\n\terr <--- Entrez un nombre entre 1 et %d --->\n", MAXELEVES);
} while (classe.n_eleves < 1 || classe.n_eleves > MAXELEVES);
for (i=0; i < classe.n_eleves; i++) {
classe.les_eleves[i] = LireFiche(i+1);
classe.les_eleves[i]=AjouteNote(classe.les_eleves[i], "Prog. C");
classe.les_eleves[i]=AjouteNote(classe.les_eleves[i], "Math");
}
return classe;
}
void

EcrireClasse(CLASSE classe) {
int i;

for (i=0; i<classe.n_eleves; i++) {


EcrireFiche(classe.les_eleves[i]);
printf("\n ----------------------------------------------------------------------------\n"
}
}
float MoyenneEleve(CLASSE classe, char Nom[]) {
int i;
for (i=0; i<classe.n_eleves; i++)
if (strcmp(classe.les_eleves[i].nom, Nom)==0) return (Moyenne(classe.les_eleves[i]));
return -1;
}
void Meilleur(CLASSE classe) {
int i, j, max_index;
struct {
char nom[30];
float moyenne;
} moyenne_eleves[MAXELEVES], temp;
for (i=0; i<classe.n_eleves; i++) {
moyenne_eleves[i].moyenne = Moyenne(classe.les_eleves[i]);
strcpy(moyenne_eleves[i].nom, classe.les_eleves[i].nom);
strcat(moyenne_eleves[i].nom, " ");
strcat(moyenne_eleves[i].nom, classe.les_eleves[i].prenom);
}
/* sorting */
for (i=0; i<classe.n_eleves; i++) {
max_index = i;
for (j= i + 1; j<classe.n_eleves; j++)
if (moyenne_eleves[max_index].moyenne < moyenne_eleves[j].moyenne)

max_index=j;

if (i != max_index) {
temp = moyenne_eleves[max_index];
moyenne_eleves[max_index] = moyenne_eleves[i];
moyenne_eleves[i] = temp;
}
}

/* Listing best students along with their GPAs */


printf("\n------------------------------------------------------------------------------\n")
printf("\tLe(s) etudiant(s) ayant obtenu la meilleure moyenne\n");
printf("------------------------------------------------------------------------------\n\n")
printf ("%25s\t\t\t%s", "Nom,
Prnom
", "Moyenne\n");
for (i=0; i < classe.n_eleves && moyenne_eleves[0].moyenne == moyenne_eleves[i].moyenne; i++
printf("%20s\t\t\t\t%4.2f\n", moyenne_eleves[i].nom, moyenne_eleves[i].moyenne);
}
CLASSE insertion(CLASSE classe, FICHE fiche) {
int i, index=0;
for (i=0; i<classe.n_eleves; i++)
if (strcmp(touppercase(classe.les_eleves[i].nom), touppercase(fiche.nom)) > 0) {
index = i;
break;
}

if ((index == i) && classe.n_eleves) {


/* shift all elements after index by one to the rigth */
for (i=classe.n_eleves; i > index; i--)
classe.les_eleves[i] = classe.les_eleves[i-1];
classe.les_eleves[index] = fiche;
classe.les_eleves[index]=AjouteNote(classe.les_eleves[index], "Prog. C");
classe.les_eleves[index]=AjouteNote(classe.les_eleves[index], "Math");
}
else {
classe.les_eleves[classe.n_eleves] = fiche;
classe.les_eleves[classe.n_eleves]=AjouteNote(classe.les_eleves[classe.n_eleves], "Prog. C"
classe.les_eleves[classe.n_eleves]=AjouteNote(classe.les_eleves[classe.n_eleves], "Math");
}
classe.n_eleves++;
return classe;
}
float Moyenne(FICHE f) {
float somme=0;
int i;
for (i=0; i < f.nbnotes; i++)
somme += f.notes[i];
return (f.nbnotes)?(somme/f.nbnotes) :((float) -1);
}
FICHE AjouteNote(FICHE fiche, char module[]) {
int i;
for (i=0; i<fiche.nbnotes; i++)
if (strcmp(fiche.nom_module[i], module) == 0) return fiche;
/* if the module name exists then simply return without doing anything */

if (fiche.nbnotes < MAXNOTES) {


strcpy(fiche.nom_module[fiche.nbnotes], module);
printf("Entrez sa notes pour le module de %s: ? ", module);

scanf("%f", &fiche.notes[fiche.nbnotes]);
fiche.nbnotes++;
}
else
printf("\n <---- c'est pas possible d'ajuter une note ---->\n");
return fiche;
}
FICHE LireFiche(int number) {
FICHE fiche;
printf("Entrez le nom de l'etudiant # %d:? ", number);
scanf(" %s", fiche.nom);
printf("Son prenom:? ");
scanf(" %s", fiche.prenom);

printf("Sa date de Naissance: (dd mm yyyy) ? ");


scanf("%d %s %d", &fiche.date_naissance.jour, fiche.date_naissance.mois, &fiche.date_naissance
printf("Sa formation: ? ");
scanf(" %s", fiche.info);
printf("Il est redoublant ou non (O:Oui, N:Non) ? ");
scanf(" %c", &fiche.redoublant);
printf("Son groupe: ?");
scanf("%d", &fiche.groupe);
fiche.nbnotes=0;
return fiche;
}
void
EcrireFiche(FICHE fiche) {
int i;
printf("\n------------------------------------------------\n");
printf("La fiche de %s, %s\n", fiche.nom, fiche.prenom);
printf("------------------------------------------------\n");
printf("\tSa date de Naissance est le %d %s %d\n", fiche.date_naissance.jour,












fiche.date_naissance.mois,












fiche.date_naissance.annee);
printf("\tSa formation: %s\n", fiche.info);
printf("\tSon groupe: %d\n", fiche.groupe);
printf("\tIl est redoublant: %s\n", (fiche.redoublant == 'O')? "Oui":"Non");
printf("\nSes notes: \n");
printf("\t
Nom de Module
Note\n");
printf("\t-----------------------------------\n");
for (i=0; i<fiche.nbnotes; i++)
printf("\t %17s \t %5.2f\n", fiche.nom_module[i], fiche.notes[i]);
}
char

*touppercase(char str[]) {
int i;
for( i=0; str[i]; i++)
if (str[i] >= 'a' && str[i] <= 'z') str[i] = 'A' + str[i] - 'a';
return str;

Vous aimerez peut-être aussi