0% ont trouvé ce document utile (0 vote)
38 vues6 pages

Complet C

Transféré par

Valisoa Sitraka
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
38 vues6 pages

Complet C

Transféré par

Valisoa Sitraka
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

#include <stdio.

h>
#include <stdlib.h>
#include <string.h>

typedef struct {
char matricule[10];
char nom[50];
char prenom[50];
char dateNaissance[11];
char nomsModules[5][50]; // Noms des modules
float notes[5][3]; // Notes (Cours, TD, TP)
float moyenneSemestre;
int aReussi; // 1 si la moyenne >= 10, 0 sinon
} Etudiant;

void trim(char *str) {


char *end;
// Supprimer les espaces à la fin
end = str + strlen(str) - 1;
while (end > str && (*end == ' ' || *end == '\n' || *end == '\r')) {
*end = '\0';
end--;
}
}

void saisirModules(Etudiant *etudiant, int moduleCount) {


for (int i = 0; i < moduleCount; i++) {
printf("Nom du module %d : ", i + 1);
scanf("%s", etudiant->nomsModules[i]);
printf("Module %d - Note cours: ", i + 1);
scanf("%f", &etudiant->notes[i][0]);
printf("Module %d - Note TD: ", i + 1);
scanf("%f", &etudiant->notes[i][1]);
printf("Module %d - Note TP (entrez -1 si pas de TP): ", i + 1);
scanf("%f", &etudiant->notes[i][2]);
}
}

void saisirEtudiant(Etudiant *etudiant, int moduleCount) {


printf("Matricule: ");
scanf("%s", etudiant->matricule);
getchar(); // Pour consommer le caractère '\n' restant

printf("Nom: ");
fgets(etudiant->nom, sizeof(etudiant->nom), stdin);
trim(etudiant->nom); // Supprimer les espaces ou '\n' à la fin

printf("Prenom: ");
fgets(etudiant->prenom, sizeof(etudiant->prenom), stdin);
trim(etudiant->prenom);

printf("Date de naissance (JJ/MM/AAAA): ");


fgets(etudiant->dateNaissance, sizeof(etudiant->dateNaissance), stdin);
trim(etudiant->dateNaissance);

saisirModules(etudiant, moduleCount);
}
float calculerMoyenneModule(float notes[], float coefficient) {
float moyenne;
if (notes[2] != -1) { // Si le TP est inclus
moyenne = 0.4 * notes[0] + 0.4 * notes[1] + 0.2 * notes[2];
} else {
moyenne = 0.5 * notes[0] + 0.5 * notes[1];
}
return moyenne * coefficient; // Moyenne pondérée par le coefficient
}

void calculerMoyenneSemestre(Etudiant *etudiant, float coefficients[], int


moduleCount) {
float sommePonderee = 0;
float sommeCoefficients = 0;

for (int i = 0; i < moduleCount; i++) {


float moyenneModule = calculerMoyenneModule(etudiant->notes[i],
coefficients[i]);
sommePonderee += moyenneModule;
sommeCoefficients += coefficients[i];
}

etudiant->moyenneSemestre = sommePonderee / sommeCoefficients;


etudiant->aReussi = (etudiant->moyenneSemestre >= 10);
}

void sauvegarderEtudiant(Etudiant etudiant, const char *nomFichier, int


moduleCount) {
FILE *fichier = fopen(nomFichier, "a");
if (fichier == NULL) {
printf("Erreur lors de l'ouverture du fichier.\n");
return;
}
fprintf(fichier, "%s;%s;%s;%s;%.2f;%s\n",
etudiant.matricule, etudiant.nom, etudiant.prenom,
etudiant.dateNaissance, etudiant.moyenneSemestre,
etudiant.aReussi ? "Reussi" : "Echoue");

for (int i = 0; i < moduleCount; i++) {


fprintf(fichier, "%s;Cours: %.2f;TD: %.2f;TP: %.2f\n",
etudiant.nomsModules[i],
etudiant.notes[i][0],
etudiant.notes[i][1],
etudiant.notes[i][2]);
}
fprintf(fichier, "----------------------------------\n");
fclose(fichier);
}

void rechercherEtudiant(const char *nomFichier, const char *matriculeRecherche) {


FILE *fichier = fopen(nomFichier, "r");
if (fichier == NULL) {
printf("Erreur lors de l'ouverture du fichier.\n");
return;
}

char ligne[256];
int trouve = 0;
while (fgets(ligne, sizeof(ligne), fichier)) {
char matricule[10], nom[50], prenom[50], dateNaissance[11], resultat[10];
float moyenne;
if (sscanf(ligne, "%[^;];%[^;];%[^;];%[^;];%f;%[^;]",
matricule, nom, prenom, dateNaissance, &moyenne, resultat) == 6)
{
trim(resultat);
if (strcmp(matricule, matriculeRecherche) == 0) {
printf("\nEtudiant trouve :\n");
printf("Matricule : %s\n", matricule);
printf("Nom : %s\n", nom);
printf("Prenom : %s\n", prenom);
printf("Date de naissance : %s\n", dateNaissance);
printf("Moyenne semestrielle : %.2f\n", moyenne);
printf("Resultat : %s\n\n", strcmp(resultat, "Reussi") == 0 ?
"Reussi" : "Echoue");

printf("Modules et notes :\n");


while (fgets(ligne, sizeof(ligne), fichier)) {
if (strstr(ligne, "----------------------------------")) {
break;
}
char module[50];
float cours, td, tp;
sscanf(ligne, "%[^;];Cours: %f;TD: %f;TP: %f", module, &cours,
&td, &tp);
printf("- %s : Cours = %.2f, TD = %.2f, TP = %.2f\n",
module, cours, td, tp);
}
trouve = 1;
break;
}
}
}

if (!trouve) {
printf("Etudiant non trouve.\n");
}

fclose(fichier);
}

void compterEtudiantsReussis(const char *nomFichier) {


FILE *fichier = fopen(nomFichier, "r");
if (fichier == NULL) {
printf("Erreur lors de l'ouverture du fichier.\n");
return;
}

char ligne[256];
int compteur = 0;
float moyenne = 0.0;

while (fgets(ligne, sizeof(ligne), fichier)) {


if (sscanf(ligne, "%*[^;];%*[^;];%*[^;];%*[^;];%f;%*[^;]", &moyenne) == 1)
{
if (moyenne >= 10.0) {
compteur++;
}
}
}

printf("\nNombre d'etudiants ayant une moyenne >= 10 : %d\n", compteur);


fclose(fichier);
}

// Fonction pour trier les étudiants par moyenne décroissante


int comparerMoyennes(const void *a, const void *b) {
Etudiant *etudiantA = (Etudiant *)a;
Etudiant *etudiantB = (Etudiant *)b;
return (etudiantB->moyenneSemestre - etudiantA->moyenneSemestre) > 0 ? 1 : -1;
}

// Fonction pour afficher les étudiants triés par moyenne décroissante


void classerEtudiantsParMoyenne(const char *nomFichier, int moduleCount) {
FILE *fichier = fopen(nomFichier, "r");
if (fichier == NULL) {
printf("Erreur lors de l'ouverture du fichier.\n");
return;
}

Etudiant etudiants[100]; // Limiter à 100 étudiants (peut être ajusté)


int count = 0;
char ligne[256];

// Lire le fichier ligne par ligne


while (fgets(ligne, sizeof(ligne), fichier)) {
// Lire les informations générales de l'étudiant
char matricule[10], nom[50], prenom[50], dateNaissance[11], resultat[10];
float moyenne;

// Si la ligne contient les informations de l'étudiant (6 éléments)


if (sscanf(ligne, "%[^;];%[^;];%[^;];%[^;];%f;%[^;]", matricule, nom,
prenom, dateNaissance, &moyenne, resultat) == 6) {
// Stocker l'étudiant dans le tableau
strcpy(etudiants[count].matricule, matricule);
strcpy(etudiants[count].nom, nom);
strcpy(etudiants[count].prenom, prenom);
strcpy(etudiants[count].dateNaissance, dateNaissance);
etudiants[count].moyenneSemestre = moyenne;
trim(resultat);
etudiants[count].aReussi = (strcmp(resultat, "Reussi") == 0) ? 1 : 0;
count++;
}

// Ignorer les lignes de séparation


if (strstr(ligne, "----------------------------------")) {
continue;
}
}

fclose(fichier);

// Trier les étudiants par moyenne décroissante


qsort(etudiants, count, sizeof(Etudiant), comparerMoyennes);

// Afficher les étudiants triés


printf("\nClassement des etudiants par moyenne décroissante:\n");
for (int i = 0; i < count; i++) {
printf("%d. Matricule: %s, Nom: %s, Prenom: %s, Moyenne: %.2f, Resultat:
%s\n",
i + 1, etudiants[i].matricule, etudiants[i].nom,
etudiants[i].prenom,
etudiants[i].moyenneSemestre, etudiants[i].aReussi ? "Reussi" :
"Echoue");
}
printf("\nFin du classement. Retour au menu principal.\n");
}

int main() {
const char *nomFichier = "etudiants.txt";
Etudiant etudiant;
int moduleCount = 0; // Initialisation à 0 pour vérifier si le nombre de
modules a déjà été défini
float *coefficients = NULL; // Utilisation d'un pointeur pour pouvoir allouer
dynamiquement la mémoire

// Demander le nombre de modules et les coefficients si ce n'est pas encore


fait
if (moduleCount == 0) {
printf("Entrez le nombre de modules : ");
scanf("%d", &moduleCount);

// Allocation dynamique pour les coefficients


coefficients = (float *)malloc(moduleCount * sizeof(float));

for (int i = 0; i < moduleCount; i++) {


printf("Entrez le coefficient pour le module %d : ", i + 1);
scanf("%f", &coefficients[i]);
}
}

int choix;
do {
printf("\n===== Gestion des Etudiants =====\n");
printf("1. Saisir un etudiant\n");
printf("2. Calculer la moyenne d'un etudiant\n");
printf("3. Sauvegarder un etudiant dans le fichier\n");
printf("4. Rechercher un etudiant par matricule\n");
printf("5. Compter les etudiants ayant la moyenne >= 10\n");
printf("6. Classer les etudiants par moyenne décroissante\n");
printf("7. Quitter\n");
printf("Votre choix : ");
scanf("%d", &choix);

switch (choix) {
case 1:
printf("\n--- Saisie d'un etudiant ---\n");
saisirEtudiant(&etudiant, moduleCount);
break;

case 2:
printf("\n--- Calcul de la moyenne de l'etudiant ---\n");
calculerMoyenneSemestre(&etudiant, coefficients, moduleCount);
printf("Moyenne semestrielle : %.2f\n", etudiant.moyenneSemestre);
printf("Resultat : %s\n", etudiant.aReussi ? "Reussi" : "Echoue");
break;

case 3:
printf("\n--- Sauvegarde de l'etudiant dans le fichier ---\n");
sauvegarderEtudiant(etudiant, nomFichier, moduleCount);
printf("Etudiant sauvegarde avec succes.\n");
break;

case 4:
printf("\n--- Recherche d'un etudiant par matricule ---\n");
char matriculeRecherche[10];
printf("Entrez le matricule a rechercher : ");
scanf("%s", matriculeRecherche);
rechercherEtudiant(nomFichier, matriculeRecherche);
break;

case 5:
printf("\n--- Nombre d'etudiants ayant la moyenne >= 10 ---\n");
compterEtudiantsReussis(nomFichier);
break;

case 6:
printf("\n--- Classement des etudiants par moyenne décroissante
---\n");
classerEtudiantsParMoyenne(nomFichier, moduleCount);
break;

case 7:
printf("\nAu revoir !\n");
break;

default:
printf("\nChoix invalide. Veuillez reessayer.\n");
}
} while (choix != 7); // Remarquez que la boucle se termine lorsque
l'utilisateur choisit "Quitter"

// Libération de la mémoire allouée


free(coefficients);

return 0;
}

Vous aimerez peut-être aussi