//Calcul de la moyenne des élèves pour une classe, une séquence, une matière et une année donnée
        //il s'agit de remplir la table "moyennes"
        public void calculerMoyenne(String codeClasse, String codeSequence, int annee)
        {
            ClasseBE classe = new ClasseBE();

            classe.codeClasse = codeClasse;

            ClasseBE classeBE = rechercherClasse(classe);

            //on liste les matières de la classe pour l'année choisi
            List <MatiereBE> LMatiere = listeDesMatieresDuneClasse(classeBE, annee);

            //on calcul les moyennes trimestrielles par matières
            for (int j = 0; j < LMatiere.Count; j++)
            {
                string codemat = LMatiere.ElementAt(j).codeMat;
                // calcul de la moyenne Sequentielle des élèves sur chacune des matières individuellement
                List <String[]> List = moyennesDA.calculMoyenneSequentielle(codeClasse, LMatiere.ElementAt(j).codeMat, codeSequence, annee);
                if (List != null && List.Count != 0)
                {
                    //on fabrique les objets de type moyennes Sequentielle et on les mets dans le BD
                    List <MoyennesBE> LMoyennesSequentielle = new List <MoyennesBE>();
                    for (int i = 0; i < List.Count; i++)
                    {
                        /*
                         * List.ElementAt(i)[0] : matricule;
                         * List.ElementAt(i)[1] : codeMatiere;
                         * List.ElementAt(i)[2] : codeseq;
                         * List.ElementAt(i)[3] : moyenne;
                         */
                        MoyennesBE moyenneSequentielle = new MoyennesBE();
                        moyenneSequentielle.codeMat       = List.ElementAt(i)[1];
                        moyenneSequentielle.codeSeq       = codeSequence;
                        moyenneSequentielle.matricule     = List.ElementAt(i)[0];
                        moyenneSequentielle.moyenne       = Convert.ToDouble(List.ElementAt(i)[3]);
                        moyenneSequentielle.annee         = annee;
                        moyenneSequentielle.rang          = 0;
                        moyenneSequentielle.moyenneClasse = 0;

                        if (getMention(moyenneSequentielle.moyenne) != null)
                        {
                            moyenneSequentielle.mention = getMention(moyenneSequentielle.moyenne);
                        }
                        else
                        {
                            moyenneSequentielle.mention = "";
                        }

                        moyenneSequentielle.moyenneMin = 0;
                        moyenneSequentielle.moyenneMax = 0;

                        LMoyennesSequentielle.Add(moyenneSequentielle);
                    }

                    //-------------- on calcule le rang, la moyenne générale de la classe, les moyennes min et max

                    double moyenneDeLaClasse = 0;                                          // moyenne générale de la classe
                    double moyenneMin        = LMoyennesSequentielle.ElementAt(0).moyenne; // moyenne mininale des élèves de la classe
                    double moyenneMax        = LMoyennesSequentielle.ElementAt(0).moyenne; // moyenne maximale des élèves de la classe

                    MoyennesBE moyennePrecedente = new MoyennesBE();
                    //on trie la liste
                    LMoyennesSequentielle = LMoyennesSequentielle.OrderByDescending(o => o.moyenne).ToList();

                    for (int i = 0; i < LMoyennesSequentielle.Count; i++)
                    {
                        // ------------------- DEBUT détermination du rang
                        if (i == 0)
                        {                                                               // on est sur le premier (celui qui a la plus grande note)
                            MoyennesBE oldMoyenne = LMoyennesSequentielle.ElementAt(i); // l'ancienne version de la moyenne (sera utilisé pour la modification)

                            LMoyennesSequentielle.ElementAt(i).rang = 1;                // le premier pour cette séquence et cette matière

                            //on met à jour le rang dans la BD
                            //modifierMoyenne(oldMoyenne, LMoyennesSequentielle.ElementAt(j));

                            moyennePrecedente = LMoyennesSequentielle.ElementAt(i);
                        }
                        else
                        {
                            if (LMoyennesSequentielle.ElementAt(i).moyenne == moyennePrecedente.moyenne)
                            {
                                MoyennesBE oldMoyenne = LMoyennesSequentielle.ElementAt(i); // l'ancienne version de la moyenne (sera utilisé pour la modification)

                                //alors on a un ex éco (ils ont le même rang)
                                LMoyennesSequentielle.ElementAt(i).rang = moyennePrecedente.rang;

                                //on met à jour le rang dans la BD
                                //modifierMoyenne(oldMoyenne, LMoyenneAvecRang.ElementAt(j));
                            }
                            else
                            {
                                MoyennesBE oldMoyenne = LMoyennesSequentielle.ElementAt(i); // l'ancienne version de la moyenne (sera utilisé pour la modification)

                                //alors l'élève prend le rend suivant
                                //LMoyenneAvecRang.ElementAt(j).rang = moyennePrecedente.rang + 1;
                                LMoyennesSequentielle.ElementAt(i).rang = i + 1;

                                //on met à jour le rang dans la BD
                                //modifierMoyenne(oldMoyenne, LMoyenneAvecRang.ElementAt(j));
                            }

                            moyennePrecedente = LMoyennesSequentielle.ElementAt(i);
                        }
                        // ------------------- FIN détermination du rang

                        // ------------------- DEBUT détermination de la moyenne de la classe

                        moyenneDeLaClasse = moyenneDeLaClasse + LMoyennesSequentielle.ElementAt(i).moyenne;

                        // ------------------- FIN détermination de la moyenne de la classe

                        // ------------------- DEBUT détermination des moyennes minimales et maximales

                        if (LMoyennesSequentielle.ElementAt(i).moyenne < moyenneMin)
                        {
                            moyenneMin = LMoyennesSequentielle.ElementAt(i).moyenne;
                        }

                        if (LMoyennesSequentielle.ElementAt(i).moyenne > moyenneMax)
                        {
                            moyenneMax = LMoyennesSequentielle.ElementAt(i).moyenne;
                        }

                        // ------------------- FIN détermination des moyennes minimales et maximales
                    }

                    moyenneDeLaClasse = moyenneDeLaClasse / LMoyennesSequentielle.Count;

                    //------------------- DEBUT mise à jour des moyennes avec les infos telles que : moyenneClasse, mention, moyenneMin, moyenneMax

                    for (int i = 0; i < LMoyennesSequentielle.Count; i++)
                    {
                        LMoyennesSequentielle.ElementAt(i).moyenneClasse = moyenneDeLaClasse;
                        LMoyennesSequentielle.ElementAt(i).moyenneMin    = moyenneMin;
                        LMoyennesSequentielle.ElementAt(i).moyenneMax    = moyenneMax;

                        //on met à jour le rang dans la BD
                        if (moyennesDA.rechercher(LMoyennesSequentielle.ElementAt(i)) != null)
                        {
                            moyennesDA.supprimer(LMoyennesSequentielle.ElementAt(i));
                        }

                        moyennesDA.ajouter(LMoyennesSequentielle.ElementAt(i));

                        //modifierMoyenneTrimestriel(LMoyennesTrimestriels.ElementAt(i), LMoyennesTrimestriels.ElementAt(i));
                    }

                    //------------------- FIN mise à jour des moyennes avec les infos telles que : moyenneClasse, mention, moyenneMin, moyenneMax
                }
            }

            journalDA.journaliser("Calcul de la moyenne séquentielle des élèves de la classe : " + codeClasse + ", séquence : " + codeSequence + ", année : " + annee);
        }