Exemple programme JAVA - impots - Exercice corrigé code source java

Exemple impots en JAVA - Niveau Débutant - les notions de bases en JAVA

Nous terminerons ce chapitre par un exemple que nous reprendrons à diverses reprises dans ce document. 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. 
  • s'il a au moins trois enfants, il a une demi-part de plus 
  • on calcule son revenu imposable R=0.72*S où S est son salaire annuel 
  • on calcule son coefficient familial QF=R/nbParts 
  • on calcule son impôt I. Considérons le tableau suivant : 



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=23000 on trouvera la ligne  

 24740  0.15  2072.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 : 

 0    0.65  49062 

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

Le programme Java correspondant est le suivant : 


import java.io.*; 

public class impots{ 

  // ------------ main 
  public public public public static static static static void void void void main(String arg[]){ 

   // données 

   // limites des tranches d'impôts 
   double Limites[]={12620, 13190, 15640, 24740, 31810, 39970, 48360,55790, 92970, 127860, 151250, 
172040, 195000, 0};     

   // coeff appliqué au nombre de parts 

double Coeffn[]={0, 631, 1290.5, 2072.5, 3309.5, 4900, 6898.5, 9316.5,12106, 16754.5, 23147.5, 30710, 

39312, 49062}; 


   // le programme

   // création du flux d'entrée clavier
  BufferedReader IN=null ;
try{
   IN= new BufferedReader(new InputStreamReader(System.in));
  }
catch(Exception e){
   erreur("Création du flux d'entrée", e, 1);
  }

    // on récupère le statut marital
boolean OK=false;
  String reponse=null;
while(! OK){
try{
    System.out.print("Etes-vous marié(e) (O/N) ? ");
    reponse=IN.readLine();
    reponse=reponse.trim().toLowerCase();
if (! reponse.equals("o") && !reponse.equals("n"))
     System.out.println("Réponse incorrecte. Recommencez");
else OK=true ;
   } catch(Exception e){
    erreur("Lecture état marital",e,2);
   }
  }
boolean Marie = reponse.equals("o");

    // nombre d'enfants
  OK=false;
int NbEnfants=0;
while(! OK){
try{
    System.out.print("Nombre d'enfants : ");
    reponse=IN.readLine();
try{
     NbEnfants=Integer.parseInt(reponse);
if(NbEnfants>=0) OK=true true true true;
else System.err.println("Réponse incorrecte. Recommencez");
    }catch(Exception e){

    }// try
   } catch(Exception e){
    erreur("Lecture état marital",e,2);
   }// try
  }// while

   // salaire
  OK=false ;
long Salaire=0;
while(! OK){
try{
    System.out.print("Salaire annuel : ");
    reponse=IN.readLine();
try{
     Salaire=Long.parseLong(reponse);
if(Salaire>=0)  OK=true;
else System.err.println("Réponse incorrecte. Recommencez");
    }catch(Exception e){
     System.err.println("Réponse incorrecte. Recommencez");
    }// try
   } catch(Exception e){
    erreur("Lecture Salaire",e,4);
   }// try
  }// while

    // calcul du nombre de parts
double NbParts;
if(Marie) NbParts=(double)NbEnfants/2+2;
else NbParts=(double)NbEnfants/2+1;
if (NbEnfants>=3) NbParts+=0.5;
 
    // revenu imposable
double Revenu;
  Revenu=0.72*Salaire;

    // quotient familial
   double double double double QF;
  QF=Revenu/NbParts;
 
    // recherche de la tranche d'impots correspondant à QF
int i;
int NbTranches=Limites.length;
  Limites[NbTranches-1]=QF;
  i=0;
while(QF>Limites[i]) i++;
    // l'impôt
long impots=(long long long long)(i*0.05*Revenu-Coeffn[i]*NbParts);

   // on affiche le résultat
  System.out.println("Impôt à payer : " + impots);
 }// main

  // ------------ erreur
private static void erreur(String msg, Exception e,int exitCode){
  System.err.println(msg+"("+e+")");
  System.exit(exitCode);
 }// erreur

}// class



Les résultats obtenus sont les suivants : 
--------------------------------------------------------------------------------------------------------------------- 



---------------------------------------------------------------------------------------------------------------------




C:\Serge\java\impots\1>java impots

Etes-vous marié(e) (O/N) ? o
Nombre d'enfants : 3
Salaire annuel : 200000
Impôt à payer : 16400

C:\Serge\java\impots\1>java impots

Etes-vous marié(e) (O/N) ? n
Nombre d'enfants : 2
Salaire annuel : 200000
Impôt à payer : 33388

C:\Serge\java\impots\1>java impots

Etes-vous marié(e) (O/N) ? w
Réponse incorrecte. Recommencez
Etes-vous marié(e) (O/N) ? q
Réponse incorrecte. Recommencez
Etes-vous marié(e) (O/N) ? o
Nombre d'enfants : q
Réponse incorrecte. Recommencez
Nombre d'enfants : 2

Salaire annuel : q
Réponse incorrecte. Recommencez
Salaire annuel : 1
Impôt à payer : 0



---------------------------------------------------------------------------------------------------------------------



---------------------------------------------------------------------------------------------------------------------










Article plus récent Article plus ancien

Leave a Reply

Telechargement