#define _C_td2 /* * ---------------------------------------------------------------------------- * * Fichier : td2.c * Langage : C ANSI * Auteur : P. Dechamboux * Creation : 16 octobre 1995 * ---------------------------------------------------------------------------- * Description : * Programme de gestion des informations relatives a des etudiants. * ---------------------------------------------------------------------------- * Interventions * >>>>>>>>>>>>> * ---------------------------------------------------------------------------- * Fonctions definies * Locales : EntrerEtudiant, * ListerEtudiant, * NotesParMatiere. * Exportees : main. * * ---------------------------------------------------------------------------- */ /****************************************************************************/ /*------------------- INCLUSION DES INTERFACES SYSTEMES --------------------*/ /****************************************************************************/ #include /****************************************************************************/ /*----------------- INCLUSION DES INTERFACES APPLICATIVES ------------------*/ /****************************************************************************/ /****************************************************************************/ /*------------------- CONSTANTES, MACROS & TYPES LOCAUX --------------------*/ /****************************************************************************/ #define TAILLE_NOM 32 /* nbre max de caracteres dans un nom d'etudiant */ #define NB_MATIERES 4 /* nbre de matieres */ #define MAX_ETUDIANTS 300 /* nbre max d'etudiants */ struct s_etudiant { char nom[TAILLE_NOM]; unsigned short age; float notes[NB_MATIERES]; }; /****************************************************************************/ /*------------------- SIGNATURES DES FONCTIONS LOCALES ---------------------*/ /****************************************************************************/ static void EntrerEtudiant (void); static void ListerEtudiant (void); static void NotesParMatiere(void); /****************************************************************************/ /*------------------- DEFINITIONS DES VARIABLES LOCALES --------------------*/ /****************************************************************************/ static struct s_etudiant TabEtudiants[MAX_ETUDIANTS]; static int NbEtudiants = 0; /****************************************************************************/ /*------------------- IMPLANTATION DES FONCTIONS LOCALES -------------------*/ /****************************************************************************/ /* * ---------------------------------------------------------------------------- * * Fonction : EntrerEtudiant * Resultat : void Aucun. * Parametres : * Nom Type Role * Description : * Ajoute un nouvel etudiant, avec ses notes. * ---------------------------------------------------------------------------- */ static void EntrerEtudiant( void) { unsigned short n; if (NbEtudiants >= MAX_ETUDIANTS) return; printf("Saisie d'un etudiant :\n"); printf("\tNom ? "); fflush(stdin); scanf("%s", TabEtudiants[NbEtudiants].nom); printf("\tAge ? "); fflush(stdin); scanf("%hu", &TabEtudiants[NbEtudiants].age); for (n = 0; n < NB_MATIERES; n++) { switch (n) { case 0 : printf("\tNote de Systeme ? "); break; case 1 : printf("\tNote de Langage ? "); break; case 2 : printf("\tNote de Programmation ? "); break; case 3 : printf("\tNote d'Algorithmique ? "); break; } fflush(stdin); scanf("%f", &TabEtudiants[NbEtudiants].notes[n]); } NbEtudiants += 1; } /* * ---------------------------------------------------------------------------- * * Fonction : ListerEtudiant * Resultat : void Aucun. * Parametres : * Nom Type Role * Description : * Affiche la liste des etudiants avec pour chaque etudiant la liste * de ses notes. * ---------------------------------------------------------------------------- */ static void ListerEtudiant( void) { unsigned short ne, n; for (ne = 0; ne < NbEtudiants; ne++) { printf("Etudiant #%03u-> Nom: %s, Age: %hu, Notes:\n", ne + 1, TabEtudiants[ne].nom, TabEtudiants[ne].age); for (n = 0; n < NB_MATIERES; n++) { switch (n) { case 0 : printf("\tSysteme= %5.2f\n", TabEtudiants[ne].notes[n]); break; case 1 : printf("\tLangage= %5.2f\n", TabEtudiants[ne].notes[n]); break; case 2 : printf("\tProgrammation= %5.2f\n", TabEtudiants[ne].notes[n]); break; case 3 : printf("\tAlgorithmique= %5.2f\n", TabEtudiants[ne].notes[n]); break; } } } } /* * ---------------------------------------------------------------------------- * * Fonction : NotesParMatiere * Resultat : void Aucun. * Parametres : * Nom Type Role * Description : * Affiche la liste des couples (etudiant,note) pour une matiere donnee * ---------------------------------------------------------------------------- */ static void NotesParMatiere( void) { unsigned matiere, ne; printf("Quelle matiere a visualiser\n"); printf("\t1:Systeme, 2:Langage, 3:Programmation, 4:Algorithmique ? "); fflush(stdin); scanf("%u", &matiere); if ((matiere < 1) || (matiere > 4)) return; matiere -= 1; for (ne = 0; ne < NbEtudiants; ne++) { printf("Etudiant #%03u-> Nom: %s, Note: %5.2f.\n", ne + 1, TabEtudiants[ne].nom, TabEtudiants[ne].notes[matiere]); } } /****************************************************************************/ /*------------------ IMPLANTATION DES FONCTIONS EXPORTEES ------------------*/ /****************************************************************************/ /* * ---------------------------------------------------------------------------- * * Fonction : main * Resultat : long Code d'erreur commande. * Parametres : * Nom Type Role * Description : * Point d'entree du programme "td2" obtenu par compilation du fichier * "td2.c" (gcc -o td2 td2.c). * * ---------------------------------------------------------------------------- */ long main() { char choix; do { printf("**************************\n"); printf("*** Menu Etudiants ***\n"); printf("**************************\n"); printf("Entrer un etudiant .............................. 1\n"); printf("Visualiser les notes des etudiants .............. 2\n"); printf("Visualiser les notes des etudiants par matiere .. 3\n"); printf("Quitter le programme ............................ Q\n"); printf(" Votre choix ? "); fflush(stdin); scanf("%c", &choix); if (choix == 'Q') break; switch (choix) { case '1' : EntrerEtudiant(); break; case '2' : ListerEtudiant(); break; case '3' : NotesParMatiere(); break; default : printf("Mauvais choix !!\n"); } printf("\n"); } while (1); return(0); }