/*############################################
# (\__/)    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 "martinrobinson.hpp"
//#include "../librairie/martinrobinsonv2.hpp"
#include "../../lib/saisieMR.hpp"

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
        ( . . ) /
###########################################*/

bool lireEtudiant(ifstream &, string &, float &);
void streamCa(ostream& ,int , int , float , string );

/*       (\_/)   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
	string nom,							//nom de l'etudiant
		   meilleur = "";					//meilleur du groupe

	float note, 						//note de l'etudiant
		  moyenne = 0,					//moyenne du groupe
		  meilleurNote = 0;					//note du meilleur etudiant

	int nbEtudiants = 0,				//nombre d'etudiants
		nbEchec = 0;					//nombre d'echecs

	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
	___( . . )_/________________*/


	do
	{
		entree >> nom >> note;
		nbEtudiants++;				//le nombre d'etudiants augmente
		moyenne += note;			//battire la moyenne

		if (note < 60)				//le seuil de r�ussite est 60
			nbEchec++;

		if (meilleurNote < note)	//la meilleure note
		{
			meilleurNote = note;
			meilleur = nom;
		}
	}while(entree);					//tant que le fichier n'est pas fini
	moyenne /= nbEtudiants;	//finir la moyenne

	/*  (\_/)  sortie
	___( . . )_/________________*/
	streamCa(cout, nbEtudiants, nbEchec, moyenne, meilleur);
	streamCa(sortie, nbEtudiants, nbEchec, moyenne, meilleur);

	/*  (\_/)  fin
	___( . . )_/________________*/
	entree.fermer();
	sortie.close();
	cout << "\n\n (\\_/)\n"
		 << "( . .)\n"
		 << "c(\")(\")\n"
		 << "Fin du programme\n";
	attendre();
	return 0;
}
/*       (\_/)   fonction
        ( . . ) /
###########################################*/

//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 nbEtudiants, int nbEchec, float moyenne, string meilleur)
{
	ici << setw(50) << "Statistiques du groupe 4118\n"
		  << setw(50) << "===========================\n"
		  << msgNbEtudiant << nbEtudiants << setw(40)
		  << msgNbEchec << nbEchec << "\n"
		  << msgMoyenne << moyenne << setw(37)
		  << msgMeilleur << meilleur << "\n";
}

/*       (\_/)   fini
        ( . . ) /
###########################################*/