Citation:
Enoncé
Votre programme doit aider la société Schtroumf pour la paye de son personnel (10 personnes max).
Monsieur Schtroumf, le directeur, est de la vielle école et à chaque fin de mois, il tient à donner lui-même à chaque membre du personnel une enveloppe contenant le salaire de la personne en argent liquide.
En fonction des salaires des différents membres du personnel, le directeur doit savoir combien de pièces et billets des différentes valeurs il doit aller chercher à la banque et comment les répartir dans les différentes enveloppes.
Les salaires seront compris entre 500 et 5.000 € et votre programme mémorisera dans des tableaux toutes les données et résultats nécessaire pour afficher ensuite données et résultats dans la page en cours.
Conseil*: travailler en centimes d’euro permet d’utiliser des entiers et donc de faire des divisions entières (quotient entier) et calculer le reste de cette division ( 13 % 5 = 3 ).
Pour transformer un réel en entier, vous pouvez utiliser la fonction Math.floor ( var monEntier*=Math.floor (monReel)*; )
Ou la fonction parseInt( ) si on part d’une chaîne de caractère.
Pour faire un tableau à 2 dimensions, il suffit de faire un tableau dont chaque case est un tableau
Exemple*:
var monTableau= new Array(new Array(11,22,33),new Array(111,222,333),new Array(1111,2222,3333));
document.write(monTableau[3][1])*; // affiche 1111
et voila le programme
Citation:
<html>
<head>
<title>Salaire</title>
<script language="javascript">
var resultat = new Array(new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array());
//variable contenant la valeur des billets
var billet = new Array(500,200,100,50,20,10,5,2,1,0.5,0.2,0.1,0.05,0.02,0.01);
//variable pour de test, elle ne sert normalement plus à rien à la phase final mais est laissé au cas où que j'aurais oublié de modifié de nom la variable définitive
var test="";
//variable qui servira de limitation de boucle en fonction du nombre de valeur encodée
var employeNbr=10;
//fonction qui supprime les cases vides...Enfin, pas très au point...
function Nettoyage()
{
for(o=9;o>-1;o--)
{
if (document.paie.salaire[o].value == "")
{
employeNbr = o;
}
}
}
//fonction qui vérifira les données encodées par l'utilisateur
function Vérification(compt)
{
//variable qui indiquera la ligne du formulaire où peut se trouve l'erreur
var precision = compt+1;
//on récupére chaques valeurs du formulaire
//une fois en numérique
var salaireTemp = parseFloat(document.paie.salaire[compt].value);
//une fois en chaîne de caractère
var salaireTempTexte = document.paie.salaire[compt].value;
//condition de chaîne numérique uniquement (cf plus bas)
var salaireTempChiffre = salaireTemp*0;
//condition du nombre de décimal (cf plus bas)
//on récupère la longueur de la chaîne
var salaireTempLongueur = salaireTempTexte.length;
//on récupère la position de la "virgule"
var salaireTempVirguleTemp = salaireTempTexte.indexOf(".");
//on fait la soustraction des deux pour connaître la position par rapport au bout de chaîne
var salaireTempVirgule = salaireTempLongueur - salaireTempVirguleTemp;
if(document.paie.employe[compt].value == "")
{
alert("Veuillez préciser à qui sera attribué le salaire de la ligne:"+precision);
exit;
}
else if(salaireTempChiffre != 0)
//On multiplie le nombre par 0, et on vérifie si ca fait bien 0
//Si ce n'est pas le cas, ce n'est pas un nombre
{
alert("Veuillez mettre vous salaire en décimal à la ligne:"+precision);
exit;
}
else if(salaireTempVirgule > 3 && salaireTempVirguleTemp != -1)
//Si il y a une virgule, la position de la virgule est différente de -1.
//ET
//Si la postion de la virgule est supérieur à trois => plus de deux chiffres derrière la virgule
{
alert("Veuillez encoder un salaire payable (chiffre au centième!) à la ligne:"+precision);
exit;
}
else if(salaireTemp < 500)
{
alert("N'exploitez pas vos employés: 500€ minimum!");
exit;
}
else if(salaireTemp > 5000)
{
alert("Vous êtez trop généreux: 5000€ maximum!");
exit;
}
else
{
//Si tout va bien, le salaire, placé dans la deuxième colonne
resultat[1][compt] = salaireTemp;
}
}
//la fonction qui calculera le nombre de billet en fonction du salaire
function BilletCalcul(compt)
{
//création d'une variable qui contiendra le reste de chaque division
var temp = resultat[1][compt];
var z;
for(z=0;z<billet.length;z++)
{
//calcul du nombre de billet
resultat[z+2][compt] = Math.floor(temp/billet[z]);
//récupération du reste de la divisition
temp = (temp-resultat[z+2][compt]*billet[z]);
}
}
//fonction qui calculera le nombre de billet au total
function Totaux()
{
var temp = 0;
//on fait le tour colonne par colonne
for(c=0;c<billet.length+1;c++)
{
for(l=0;l<employeNbr;l++)
{
//on addition chaque ligne d'une colonne
temp = resultat[c+1][l]+temp;
}
//on place la somme dans en bas de la colonne
resultat[c+1][employeNbr] = temp;
//on n'oublie surtout pas de remettre la varialbe temporaire à 0 pour la prochaine colonne
temp = 0;
}
//Tant qu'on y est, autant remplir toute la dernière ligne
resultat[0][employeNbr] = "Totaux";
}
//fonction qui affiche le tableau resultat
function Affiche()
{
var tableau = "";
var ligne = new Array("","","","","","","","","","");
for(l=0;l<employeNbr+1;l++)
{
for(c=0;c<billet.length+2;c++)
{
//on génère chaque colonne pour une ligne: employé, nombre de billet
ligne[l] += "<td width=\"30px\">"+resultat[c][l]+"</td>";
}
//on rassemble les lignes générés
tableau += "<tr align=\"center\">"+ligne[l] + "</tr>";
}
//on génére l'entête du tableau
var entete = "<td><strong>Employé</strong></td><td><strong>Salaire</strong></td>";
for(z=0;z<billet.length;z++)
{
entete += "<td><font color=\"#FF0000\">"+billet[z]+"</font></td>";
}
document.write("<table border=\"1px\" bordercolor=\"#333333\" cellpadding=\"3px\" cellspacing=\"0\"><tr align=\"center\">"+entete+"</tr>"+tableau+"</table>");
}
function Main()
{
Nettoyage();
var i;
for(i=0;i<employeNbr;i++)
{
Vérification(i);
//ici, le nom des employés qui va être placé dans la première colonne
resultat[0][i] = document.paie.employe[i].value;
//Calcul du nombres de billets
BilletCalcul(i);
}
Totaux();
Affiche();
}
</script>
</head>
<body>
Attention, veuillez remplir le formulaire ligne par ligne sans en sauter!<br>
Si il y a une ligne de vide, toutes les valeurs qui suivent ne seront pas prises en compte!<br> <br>
<!-- il est possible de faire une boule mais le copier coller reste plus simple -->
<form name="paie">
nom:<input name="employe" type="text">salaire:<input name="salaire" type="text"><br>
nom:<input name="employe" type="text">salaire:<input name="salaire" type="text"><br>
nom:<input name="employe" type="text">salaire:<input name="salaire" type="text"><br>
nom:<input name="employe" type="text">salaire:<input name="salaire" type="text"><br>
nom:<input name="employe" type="text">salaire:<input name="salaire" type="text"><br>
nom:<input name="employe" type="text">salaire:<input name="salaire" type="text"><br>
nom:<input name="employe" type="text">salaire:<input name="salaire" type="text"><br>
nom:<input name="employe" type="text">salaire:<input name="salaire" type="text"><br>
nom:<input name="employe" type="text">salaire:<input name="salaire" type="text"><br>
nom:<input name="employe" type="text">salaire:<input name="salaire" type="text"><br>
<input type="button" onClick="Main();" value="Calculer">
</form>
</body>
</html>