Cours:Technologies avancées du eLearning 2/exercices/Saisie de notes
De GBLL, TAL, ALAO, etc.
Le code écrit ici réutilise des fonctions issues des exercices de saisie de nombres
/************************************
* fonctions de existantes légèrement amendées
************************************/
function isDigit(caractere){
var result;
switch(caractere.toString()){
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
result = true;
break ;
default:
result = false;
}
return result;
}
//Prend une chaine de caractère et dit si c'est un nombre
function isNumber(word,min,max){
//déclaration de variables
//isFloat : booléen qui dit si le “word” comporte (déjà) une virgule
var isFloat = word.charAt(0)==","
|| word.charAt(0)==".",
//result : booléen qui dit si le word est (pour le moment) un nombre
result = isDigit(word.charAt(0))
|| ( word.length > 1
&& (isFloat || word.charAt(0)=="-"));
//On initialise result à vrai si le premier caractère est un chiffre ou
//si c'est une virgule ou un moins, mais que le word contient d'autres caractères
/*On parcourt le reste du word (mais on s'arrête dès qu'on est sûr que ce n'est pas un
nombre. Dès que résultat sera faux, (result && i<word.length) sera faux.*/
for(let i=1;result && i<word.length;i++){
if(word.charAt(i)=="," || word.charAt(i)=="."){
if(isFloat){
result = false;
}
else{
isFloat = true;
}
}
else if(!isDigit(word.charAt(i))){
result = false;
}
}
//modification pour pouvoir demander un nombre compris entre min et max
if( (result!==false)
&& (typeof min != "undefined")//paramètre optionnel
&& (min !== false) // pas pris en compte s'il vaut faux
&& (Number(word) < min)){
result = false ;
}
if( (result!==false)
&& (typeof max != "undefined")//paramètre optionnel
&& (max !== false) // pas pris en compte s'il vaut faux
&& (Number(word) > max)){
result = false ;
}
return result;
}
function arrayToTable(theArray, tableId){
var elt = document.getElementById(tableId),
res = theArray;
if(elt == null){
//L'identifiant n'existe pas
console.error("arrayToTable : "+tableId + " n'existe pas dans le document.");
res = false;
}
else if(elt.tagName != "TABLE"){
//L'identifiant n'existe pas
console.error("arrayToTable : "+tableId + " n'est pas une table ("+elt.tagName+").");
res = false;
}
else{
//on crée du contenu
var line = document.createElement("tr");
for(let i=0;i<theArray.length;i++){
line.innerHTML += "<td>"+theArray[i]+"</td>";
}
//on le met dans l'élément
elt.appendChild(line);
}
return res;
}
/*************************************
* Nouvelles fonctions
*************************************/
//renvoie un nombre de notes (≥ 1) ou false
function getNbCount(){
var res = window.prompt("Combien y a-t-il eu de notes dans le trimestre ?");
//Tant que l'utilisateur saisit une valeur qui n'est pas un nombre ≥ 1 on continue
while(res == "" || !isNumber(res,1) ){
res = window.prompt("Combien y a-t-il eu de notes dans le trimestre ?");
}
if(res == null){
res = false;
}
else{
res = Number(res);
}
return res;
}
//Renvoie un nom (ou false)
function getName(){
var userText = window.prompt("Entrez le nom de l'élève");
//on renvoie faux si l'utilisateur dit stop (ou annuler)
if((userText == null) || (userText =="stop")){
userText = false;
}
return userText ;
}
//Récupère le nom et les notes
function getLine(nb){
var res = false,
userText = getName();
//si la saisie ne demande pas la fin du travail, on modifie res
if(userText!==false){
nb = Number(nb);
res = [] ;
res.push(userText);
//on ajoute les notes (on interrompt le travail si l'utilisateur appuie sur annuler)
while( (res.length <= nb) && (userText != null) ){
userText = window.prompt("Entrez la note n°"+res.length+"/"+nb+" de "+res[0]);
if(userText=="-"){
//autoriser les absences
res.push("-");
}
else if(isNumber(userText,0,20)){
//refuser les notes non comprises entre 0 et 20
res.push(Number(userText));
}
}
if(userText == null){
res = false;
}
}
return res ;
}
//Gère les interactions pour remplir la table
function fillTable(tableId){
var count = getNbCount();
if(count !== false){
line = getLine(count);
while(line !== false){
line.push(mean(line,false,1));
arrayToTable(line, tableId);
line = getLine(count);
}
}
}
//Remplit les tables et ajouter des moyennes
function fillTableWithMeans(tableId){
var count = getNbCount();
let completeTable = [] ;
if(count !== false){
line = getLine(count);
while(line !== false){
line.push(mean(line,false,1));
completeTable.push(line);
arrayToTable(line, tableId);
line = getLine(count);
}
let means=["Moyenne"];
for(let i=1;i<count;i++){
means.push(mean(completeTable,i));
}
}
}