1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
void __fastcall TDM::calculNoteMatiere(int etudiant, int matiere)
{
// CALCUL DE LA NOTE DE LA MATIERE POUR LA SESSION NORMALE
// Locate dans la table Etudiants
fctLocate (tb_etud, "ID_ETUDIANT", IntToStr(etudiant));
// Locate dans la table Matieres
fctLocate (tb_mat, "ID_MATIERE", IntToStr(matiere));
float noteMatiere = 0;
float sommePonderation = 0;
tb_controles->First();
while (!tb_controles->Eof)
{
if(tb_controlesTYPE_CONTROLE->Value == "RATTRAPAGE") {tb_controles->Next(); continue;}
// Locate dans la table tb_note_controle détail de la table controles
fctLocate (tb_notes_controles, "ID_ETUDIANT_FK", IntToStr(etudiant));
noteMatiere += tb_notes_controlesNOTE_CONTROLE->Value * tb_controlesPONDERATION->Value;
sommePonderation += tb_controlesPONDERATION->Value;
tb_controles->Next();
}
if( sommePonderation != 1.0)
{
ShowMessage("ATTENTION ! La somme des pondérations des contrôles pour cette matière est différente de 1");
return ;
}
noteMatiere = noteMatiere/sommePonderation;
// Stocker la note de la matière dans la table tb_note_mat
// Vérifier d'abord si la note existe dèjà (modification)
TLocateOptions Opts;
Opts.Clear();
Opts << loPartialKey;
Variant locvalues[2];
locvalues[0] = Variant(IntToStr(matiere));
locvalues[1] = Variant(IntToStr(etudiant));
locvalues[2] = Variant("NORMALE");
bool LocateSuccess = tb_notes_mat->Locate("ID_MATIERE_FK;ID_ETUDIANT_FK;SESSION", VarArrayOf(locvalues, 2), Opts);
if(LocateSuccess)
{
tb_notes_mat->Edit();
tb_notes_mat->FieldByName("NOTE_MAT")->Value = noteMatiere;
tb_notes_mat->Post();
}
else
{
tb_notes_mat->Append();
tb_notes_mat->FieldByName("NOTE_MAT")->Value = noteMatiere;
tb_notes_mat->FieldByName("SESSION")->Value = "NORMALE";
tb_notes_mat->Post();
}
// CALCUL DE LA NOTE DE LA MATIERE POUR LA SESSION DE RATTRAPAGE
// Vérifier que l'étudiant a bien une note dans la session de rattrapage dans cette matière
// Locate dans la table tb_controle
if(!fctLocate (tb_controles, "TYPE_CONTROLE", "RATTRAPAGE"))
{
ShowMessage("Examen de rattrapage inexistant dans la liste des contrôles pour cette matière. La moyenne a été calculée pour la session normale uniquement.");
return; // Sortir de la fonction
}
else
{
// Locate dans la table tb_note_controle
fctLocate (tb_notes_controles, "ID_ETUDIANT_FK", IntToStr(etudiant));
if(tb_notes_controlesNOTE_CONTROLE->Value == NULL)
{
// Effacer l'enregistrement correspondant dans la table notes_etudiants_matières
TLocateOptions Opts;
Opts.Clear();
Opts << loPartialKey;
Variant locvalues[2];
locvalues[0] = Variant(IntToStr(matiere));
locvalues[1] = Variant(IntToStr(etudiant));
locvalues[2] = Variant("RATTRAPAGE");
bool LocateSuccess = tb_notes_mat->Locate("ID_MATIERE_FK;ID_ETUDIANT_FK;SESSION", VarArrayOf(locvalues, 2), Opts);
if(LocateSuccess)
{
tb_notes_mat->Edit();
tb_notes_mat->Delete();
}
return; // Sortir de la fonction
}
}
// Commencer le CALCUL DE LA NOTE DE LA MATIERE POUR LA SESSION DE RATTRAPAGE
noteMatiere = 0;
sommePonderation = 0;
tb_controles->First();
while (!tb_controles->Eof)
{
if(tb_controlesTYPE_CONTROLE->Value == "FINAL") {tb_controles->Next(); continue; }
// Locate dans la table tb_note_controle
fctLocate (tb_notes_controles, "ID_ETUDIANT_FK", IntToStr(etudiant));
noteMatiere += tb_notes_controlesNOTE_CONTROLE->Value * tb_controlesPONDERATION->Value;
sommePonderation += tb_controlesPONDERATION->Value;
tb_controles->Next();
}
if( sommePonderation != 1.0)
{
ShowMessage("ATTENTION ! La somme des pondérations des contrôles pour cette matière est différente de 1");
return ;
}
noteMatiere = noteMatiere/sommePonderation;
// Stocker la note de la matière dans la table tb_note_mat
// Vérifier d'abord si la note existe dèjà (modification)
Opts.Clear();
Opts << loPartialKey;
locvalues[2];
locvalues[0] = Variant(IntToStr(matiere));
locvalues[1] = Variant(IntToStr(etudiant));
locvalues[2] = Variant("RATTRAPAGE");
LocateSuccess = tb_notes_mat->Locate("ID_MATIERE_FK;ID_ETUDIANT_FK;SESSION", VarArrayOf(locvalues, 2), Opts);
if(LocateSuccess)
{
tb_notes_mat->Edit();
tb_notes_mat->FieldByName("note_mat")->Value = noteMatiere;
tb_notes_mat->Post();
tb_notes_mat->Refresh();
}
else
{
tb_notes_mat->Append();
tb_notes_mat->FieldByName("NOTE_MAT")->Value = noteMatiere;
tb_notes_mat->FieldByName("SESSION")->Value = "RATTRAPAGE";
tb_notes_mat->Post();
}
} |
Partager