Introduction à PHP 5 par l'exemple


précédentsommairesuivant

V. Exercice d'application - IMPOTS

V-A. Le problème

On se propose d'écrire un programme permettant de calculer l'impôt d'un contribuable. On se place dans le cas simplifié d'un contribuable n'ayant que son seul salaire à déclarer :

  • on calcule le nombre de parts du salarié nbParts=nbEnfants/2 +1 s'il n'est pas marié, nbEnfants/2+2 s'il est marié, où nbEnfants est son nombre d'enfants.
  • on calcule son revenu imposable R=0.72*S où S est son salaire annuel
  • on calcule son coefficient familial Q=R/N

on calcule son impôt I d'après les données suivantes

12620.0 0 0
13190 0.05 631
15640 0.1 1290.5
24740 0.15 2072.5
31810 0.2 3309.5
39970 0.25 4900
48360 0.3 6898.5
55790 0.35 9316.5
92970 0.4 12106
127860 0.45 16754.5
151250 0.50 23147.5
172040 0.55 30710
195000 0.60 39312
0 0.65 49062

Chaque ligne a 3 champs. Pour calculer l'impôt I, on recherche la première ligne où QF<=champ1. Par exemple, si QF=30000 on trouvera la ligne

247400.152072.5

L'impôt I est alors égal à 0.15*R - 2072.5*nbParts. Si QF est tel que la relation QF<=champ1 n'est jamais vérifiée, alors ce sont les coefficients de la dernière ligne qui sont utilisés. Ici :

00.6549062

ce qui donne l'impôt I=0.65*R - 49062*nbParts.

V-B. Version avec tableaux (impots_01)

Nous présentons un premier programme où :

  • les données nécessaires au calcul de l'impôt sont dans trois tableaux (limites, coeffR, coeffN)
  • les données des contribuables (marié, enfants, salaire) sont dans un premier fichier texte
  • les résultats du calcul de l'impôt (marié, enfants, salaire, impôt) sont mémorisés dans un second fichier texte
 
CacherSélectionnez

Le fichier des données data.txt (marié, enfants, salaire) :

 
CacherSélectionnez

Les fichier résultats.txt (marié, enfants, salaire, impôt) des résultats obtenus :

 
CacherSélectionnez

Commentaires

  • ligne 4 : le nom du fichier texte contenant les données des contribuables (marié, enfants, salaire)
  • ligne 5 : le nom du fichier texte contenant les résultats (marié, enfants, salaire, impôt) du calcul de l'impôt
  • lignes 6-8 : les trois tableaux des données permettant le calcul de l'impôt
  • lignes 11-15 : ouverture en lecture du fichier des données contribuables
  • lignes 18-22 : ouverture en écriture du fichier des résultats
  • ligne 25 : boucle de lecture des lignes (marié, enfants, salaire) du fichier des contribuables
  • ligne 27 : la marque de fin de ligne est enlevée
  • ligne 29 : les composantes (marié, enfants, salaire) de la ligne sont récupérées
  • ligne 31 : l'impôt est calculé
  • ligne 33 : l'impôt est mémorisé dans le fichier des résultats
  • lignes 37-38 : une fois le fichier des contribuables exploité totalement, les fichiers sont fermés
  • ligne 44 : la fonction qui supprime la marque de fin de ligne d'une ligne $ligne. La marque de fin de ligne est la chaîne "\r\n" sur les systèmes windows, "\n" sur les systèmes Unix. Le résultat est la chaîne d'entrée sans sa marque de fin de ligne.
  • lignes 47-48 : substr($chaîne,$début,$taille) est la sous-chaîne de $chaîne commençant au caractère $début et ayant au plus $taille caractères.
  • ligne 63 : strtolower($chaîne) rend $chaîne en minuscules
  • ligne 76 : array_push($tableau,$élément) ajoute $élément à la fin du tableau $tableau. On notera que le tableau $limites est passé par valeur à la fonction calculerImpot (ligne 56). Cet ajout d'élément se fait donc sur la copie du paramètre effectif, celui-ci restant inchangé.
  • ligne 84 : la fonction floor($x) rend la valeur entière immédiatement inférieure à $x.

V-C. Version avec fichiers texte (impots_02)

Cette nouvelle version ne diffère de la précédente que par le fait que les données ($limites, $coeffR, $coeffN) nécessaires au calcul de l'impôt sont maintenant dans un fichier texte sous la forme suivante :

Fichier impots.txt :

 
CacherSélectionnez

La nouvelle version se contente de lire les données du fichier [impots.txt] afin de les mettre dans trois tableaux ($limites, $coeffR, $coeffN). On est alors ramené au cas précédent. Nous ne présentons que les changements :

 
CacherSélectionnez

Commentaires

  • ligne 11 : la fonction getTables($IMPOTS) exploite le fichier texte $IMPOTS pour en extraire les trois tableaux ($limites, $coeffR, $coeffN). Le résultat rendu est ($erreur, $limites, $coeffR, $coeffN) où $erreur est un message d'erreur, vide s'il n'y a pas eu d'erreur.
  • ligne 40 : la fonction getTables($IMPOTS).
  • ligne 43 : la fonction files_exists(nom_fichier) rend le booléen true si le fichier nom_fichier existe, le booléen false sinon.
  • ligne 46 : la fonction file(nom_fichier) lit tout le fichier texte nom_fichier. Elle rend un tableau où chaque élément est une ligne du fichier texte. Comme ici, le fichier impots.txt a trois lignes de texte, la fonction va rendre un tableau à trois éléments.
  • lignes 50-52 : exploitation des trois lignes récupérées pour créer les trois tableaux ($limites, $coeffR, $coeffN)

Les résultats obtenus sont les mêmes qu'obtenus dans la version précédente.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Serge Tahé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.