/*############################################
# (\__/)    Programme   : Statistique de Groupe
# ( . .)    Auteur      : Martin Robinson
# c(")(")   Conception  : Aujourd'hui
#		    Description : Plein d'etudian dans
						un fichier et on sort
						des statistiques
modification : 20 fev 2012
			   Martin Robinson
			   ajout de la librairie
			   creation de fonction de sortie
###########################################
         (\_/)   directive du pr�processeur
        ( . . ) /
###########################################*/

#include <iostream>
#include <fstream>
#include <iomanip>
#include <sstream>
#include <string.h>

#include "../lib/saisieMR.hpp"

#define nbEtudianMax 15

using namespace std;

const char * msgNbEtudiant = "Nombre total d'etudiants : ";
const char * msgNbEchec =    "Nombre d'echecs          : ";
const char * msgMoyenne =    "Moyenne du groupe        : ";
const char * msgMeilleur =   "Meilleur(e) etudiant (e) : ";


/*       (\_/)   Prototype de fonction
        ( . . ) /
###########################################*/

int calculNbSupMoy(float notes[],int noteQty, float moyenne);
void streamCa(ostream& ,int , int , float , char [], int );

/*       (\_/)   Programme Principal
        ( . . ) /
###########################################*/

int main ()
{
	/*  (\_/) initialisation
	___( . . )_/________________*/
	for (int i = 0; i<50; i++)											//vider l'ecran
		cout << "\n";
	saisie <void> attendre("appuyer sur une touche pour terminer");		//foncteur saisie s�curis� configurer pour faire une pause
	char nom[nbEtudianMax],							    //nom de l'etudiant
		 meilleur[nbEtudianMax];					//meilleur du groupe

	float note[20], 						//note de l'etudiant
		  moyenne = 0,					    //moyenne du groupe
		  meilleurNote = 0;					//note du meilleur etudiant

	int nbEtudiant = 0,				    //nombre d'etudiants
		nbEchec = 0,					    //nombre d'echecs
		nbSupMoy = 0;                       //nombre d'étudiants superieurs à la moyenne

	ofstream sortie("sortie.txt");		    //d�claration variable ofstream et ouverture du fichier ds m�me instruction
	lecture entree("etudiants.txt");
	if(!entree)
	{
		attendre();
		return 0;
	}

	/*  (\_/) traitement
	___( . . )_/________________*/

    entree >> nom >> note[nbEtudiant];

	while(entree)					//tant que le fichier n'est pas fini
	{
		
        cout << nom << note[nbEtudiant] << endl;
	    moyenne += note[nbEtudiant];			//battire la moyenne

	    if (note[nbEtudiant] < 60)			//le seuil de r�ussite est 60
		    nbEchec++;

	    if (meilleurNote < note[nbEtudiant])	//la meilleure note
	    {
		    meilleurNote = note[nbEtudiant];
		    strcpy(meilleur,nom);
	    }
		    
    	nbEtudiant++;				//le nombre d'etudiants augmente
    	if (entree)
    	    entree >> nom >> note[nbEtudiant];
	}
	
	moyenne /= nbEtudiant;	        //finir la moyenne
    nbSupMoy = calculNbSupMoy(note,nbEtudiant,moyenne);
    
	/*  (\_/)  sortie
	___( . . )_/________________*/
	streamCa(cout, nbEtudiant, nbEchec, moyenne, meilleur, nbSupMoy);
	streamCa(sortie, nbEtudiant, nbEchec, moyenne, meilleur, nbSupMoy);

	/*  (\_/)  fin
	___( . . )_/________________*/
	entree.fermer();
	sortie.close();
	cout << "\n\n (\\_/)\n"
		 << "( . .)\n"
		 << "c(\")(\")\n"
		 << "Fin du programme\n";
	attendre();
	return 0;
}
/*       (\_/)   fonction
        ( . . ) /
###########################################*/

//compter les etudiants superieurs à la moyenne
int calculNbSupMoy(float note[],int noteQty, float moyenne)
{
    int nbSupMoy=0;
    for (int i = 0; i<noteQty; i++)
        if (note[i]>moyenne)
            nbSupMoy++;
    return nbSupMoy;
}

//fonction de streaming de sortie, ici elle peut recevoir un objet fichier ifstream
//ou l'objet cin et elle y mettra la variable nbEtudiants, nbEchec , moyenne et meilleur
//avec le formatage requis
void streamCa(ostream& ici, int nbEtudiant, int nbEchec, float moyenne, char meilleur[], int nbSupMoy)
{
	ici << setw(50) << "Statistiques du groupe 4118\n"
		  << setw(50) << "===========================\n"
		  << msgNbEtudiant << nbEtudiant << setw(40)
		  << msgNbEchec << nbEchec << "\n"
		  << msgMoyenne << moyenne << setw(37)
		  << msgMeilleur << meilleur << "\n"
		  << "Nb. d’étudiants supp. à la moyenne :" << nbSupMoy << endl;
}



/*       (\_/)   fini
        ( . . ) /
###########################################*/
