Project_OKI’s diary

エンジニアの勉強ブログ

生命保険料控除額(所得税、住民税)の計算をC言語で行う。

生命保険控除額の計算方法(所得税と住民税)

1.やること

  • C言語で、生命保険料控除額を自動的に計算する。

 

目次

2.生命保険料控除額の計算方法

 C言語でプログラムを作成する。

 (1) 簡単な仕様

 入力: main関数に入力

  ・各年間保険料

   ・旧保険
     一般生命保険
     個人年金保険
   ・新保険
     一般生命保険
     個人年金保険
     介護医療保険

 出力: printfで出力

  ・生命保険控除の所得税控除額

  ・生命保険控除の住民税控除額

 

 計算方法については、下記を参照

 ・生命保険料控除(所得税、住民税)の計算方法について - Project_OKI’s diary

 

 (2) プログラム処理の検討(xmindでざっくり処理を検討する)

作成xmind:保険料控除計算

 

3.プログラム作成

 今回は、多重インクルード防止などは行わず、最低限の処理のみ記載する。

 ・main.cファイル

#include <stdio.h>
#include "main.h"

int main(void){
    // Your code here!
    //変数宣言
    
    //構造体宣言
    LIFEINS lifeins;
    
    //初期化処理
    //入力
    lifeins.genelifeinsnew  = 20000;    //年間一般生命保険料(新)
    lifeins.genelifeinsold  = 60000;    //年間一般生命保険料(旧)
    lifeins.indivinsnew     = 10000;    //年間個人年金保険料(新)
    lifeins.indivinsold     = 0;        //年間個人年金保険料(旧)
    lifeins.careinsnew      = 0;        //年間介護医療保険料(新)
    
    //出力
    lifeins.incometax = 0;              //所得税控除額
    lifeins.regidenttax = 0;            //住民税控除額
    
    //生命保険料による所得税控除額計算
    LifeInsIncTax(&lifeins);
    printf("所得税控除額=%d\n",lifeins.incometax); //所得税控除額計算
    LifeInsResiTax(&lifeins);
    printf("住民税控除額=%d\n",lifeins.regidenttax);//住民税控除額計算
    
}

/***********************
 生命保険料(新)による所得税計算    
 引数:保険料(新)
 返り値:保険料控除額
***********************/
int LiIncTaxnew(int fee){
    //変数宣言
    int deduction;  //保険料控除額
    deduction = 0;  //控除額初期化
    
    if(fee<=20000)  //保険料が25000円以下の時
    {
        deduction = fee;
    }else if(20000<fee && fee <= 40000)//保険料が25000円~50000円の時
    {
        deduction = fee/2+10000;
    }else if(40000<fee && fee <= 80000)//保険料が50000~100000円の時
    {
        deduction = fee/4+20000;
    }else if(80000<fee) //保険料が100000円を超えた時
    {
        deduction = 40000;
    }
    return deduction;
}

/***********************
 生命保険料(旧)による所得税計算    
 引数:保険料(旧)
 返り値:保険料による控除額
***********************/
int LiIncTaxold(int fee){
    //変数宣言
    int deduction;  //保険料控除額
    deduction = 0;  //控除額初期化
    
    if(fee<=25000)  //保険料が25000円以下の時
    {
        deduction = fee;
    }else if(25000<fee && fee <= 50000)//保険料が25000円~50000円の時
    {
        deduction = fee/2+12500;
    }else if(50000<fee && fee <= 100000)//保険料が50000~100000円の時
    {
        deduction = fee/4+25000;
    }else if(100000<fee) //保険料が100000円を超えた時
    {
        deduction = 50000;
    }
    return deduction;
}

/***********************
 生命保険料(旧)による住民税計算    
 引数:保険料(旧)
 返り値:保険料による控除額
***********************/
int LiResiTaxold(int fee){
    //変数宣言
    int deduction;  //保険料控除額
    deduction = 0;  //控除額初期化
    
    if(fee<=15000)  //保険料が25000円以下の時
    {
        deduction = fee;
    }else if(15000<fee && fee <= 40000)//保険料が25000円~50000円の時
    {
        deduction = fee/2+7500;
    }else if(40000<fee && fee <= 70000)//保険料が50000~100000円の時
    {
        deduction = fee/4+17500;
    }else if(70000<fee) //保険料が100000円を超えた時
    {
        deduction = 35000;
    }
    return deduction;
}

/***********************
 生命保険料(新)による住民税計算    
 引数:保険料(新)
 返り値:保険料による控除額
***********************/
int LiResiTaxnew(int fee){
    //変数宣言
    int deduction;  //保険料控除額
    deduction = 0;  //控除額初期化
    
    if(fee<=12000)  //保険料が25000円以下の時
    {
        deduction = fee;
    }else if(12000<fee && fee <= 32000)//保険料が25000円~50000円の時
    {
        deduction = fee/2+6000;
    }else if(32000<fee && fee <= 56000)//保険料が50000~100000円の時
    {
        deduction = fee/4+14000;
    }else if(56000<fee) //保険料が100000円を超えた時
    {
        deduction = 28000;
    }
    return deduction;
}

/***********************
 生命保険料による所得税控除額計算    
 引数:生命保険料入出力情報構造体
 返り値:なし
***********************/
void LifeInsIncTax(LIFEINS *lifeins){
    //変数宣言
  int genelifeinstaxnew;    //一般生命保険料による控除額(新)
  int genelifeinstaxold;    //一般生命保険料による控除額(旧)
  int genelifeinstax;       //一般生命保険料控除額       
  int indivistaxnew;        //個人年金保険料による控除額(新)
  int indivistaxold;        //個人年金保険料による控除額(旧)
  int indivistax;           //個人年金保険料控除額
  int careinstax;           //介護医療保険料による控除額
    
    //一般生命保険料による所得控除計算 
    genelifeinstaxnew = LiIncTaxnew(lifeins-> genelifeinsnew);
    genelifeinstaxold = LiIncTaxold(lifeins-> genelifeinsold);
    //一般生命保険料控除額の合計算出
    genelifeinstax = genelifeinstaxnew + genelifeinstaxold;
    //上限額確認
    if(genelifeinstax>40000) //控除合計額が上限額より大きい時
    {
        genelifeinstax = 40000; //上限額に設定
    }
    //一般生命保険料による控除額確定
    //一般生命保険料による控除額(旧)が控除合計額より大きい時
    if(genelifeinstaxold>genelifeinstax){
        //一般生命保険料控除額 = 一般生命保険料による控除額(旧)とする。
        genelifeinstax=genelifeinstaxold;
    }
    
    //個人年金保険料の控除計算
    indivistaxnew = LiIncTaxnew(lifeins-> indivinsnew);
    indivistaxold = LiIncTaxold(lifeins-> indivinsold);
    //個人年金保険料控除額の合計算出
    indivistax = indivistaxnew + indivistaxold;
    //上限額確認
    if(indivistax>40000)            //上限値より大きい時
    {
        indivistax = 40000;         //上限額に設定
    }
    if(indivistaxold>indivistax)    //旧>合計の時
    {
        indivistax = indivistaxold; //控除額 = 旧とする。
    }
    //介護保険料の控除計算
    careinstax = LiIncTaxnew(lifeins-> careinsnew);
    
    //控除額合計算出(所得控除額算出)
    lifeins->incometax = genelifeinstax + indivistax + careinstax;
}

/***********************
 生命保険料による住民税控除額計算    
 引数      :生命保険料入出力情報構造体
 返り値    :なし
***********************/
void LifeInsResiTax(LIFEINS *lifeins){
    //変数宣言
  int genelifeinstaxnew;    //一般生命保険料による控除額(新)
  int genelifeinstaxold;    //一般生命保険料による控除額(旧)
  int genelifeinstax;       //一般生命保険料控除額       
  int indivistaxnew;        //個人年金保険料による控除額(新)
  int indivistaxold;        //個人年金保険料による控除額(旧)
  int indivistax;           //個人年金保険料控除額
  int careinstax;           //介護医療保険料による控除額
    
    
    //一般生命保険料による所得控除計算 
    genelifeinstaxnew = LiResiTaxnew(lifeins-> genelifeinsnew);
    genelifeinstaxold = LiResiTaxold(lifeins-> genelifeinsold);
    //一般生命保険料控除額の合計算出
    genelifeinstax = genelifeinstaxnew + genelifeinstaxold;
    //上限額確認
    if(genelifeinstax>28000) //控除合計額が上限額より大きい時
    {
        genelifeinstax = 28000; //上限額に設定
    }
    //一般生命保険料による控除額確定
    //一般生命保険料による控除額(旧)が控除合計額より大きい時
    if(genelifeinstaxold>genelifeinstax){
        //一般生命保険料控除額 = 一般生命保険料による控除額(旧)とする。
        genelifeinstax = genelifeinstaxold;
    }
    
    //個人年金保険料の控除計算
    indivistaxnew = LiResiTaxnew(lifeins-> indivinsnew);
    indivistaxold = LiResiTaxold(lifeins-> indivinsold);
    //個人年金保険料控除額の合計算出
    indivistax = indivistaxnew + indivistaxold;
    //上限額確認
    if(indivistax>28000)            //上限値より大きい時
    {
        indivistax = 28000;         //上限額に設定
    }
    if(indivistaxold>indivistax)    //旧>合計の時
    {
        indivistax = indivistaxold; //控除額 = 旧とする。
    }
    //介護保険料の控除計算
    careinstax = LiResiTaxnew(lifeins-> careinsnew);
    
    //控除額合計算出(所得控除額算出)
    lifeins->regidenttax =genelifeinstax + indivistax + careinstax;    
}

 ・main.hファイル

//生命保険料入出力情報構造体
typedef struct{
 	int	genelifeinsnew; //年間一般生命保険料(新)
 	int	indivinsnew;    //年間個人年金保険料(新)
 	int	careinsnew;     //年間介護医療保険料(新)
 	int	genelifeinsold; //年間一般生命保険料(旧)
 	int	indivinsold;    //年間個人年金保険料(旧)
 	int	incometax;      //所得税控除額
 	int	regidenttax;    //住民税控除額
}LIFEINS;

//関数宣言
extern int LiIncTaxnew(int fee);  //生命保険料(新)による、所得税控除計算
extern int LiIncTaxold(int fee);  //生命保険料(旧)による、所得税控除計算
extern int LiResiTaxnew(int fee); //生命保険料(新)による、住民税控除計算
extern int LiResiTaxold(int fee); //生命保険料(旧)による、住民税控除計算
extern void LifeInsIncTax(LIFEINS *lifeins); //生命保険料(新)による、住民税控除計算の分岐
extern void LifeInsResiTax(LIFEINS *lifeins); //生命保険料(旧)による、住民税控除計算の分岐

 出力結果:https://paiza.io/projects/e4ZFXpvD4adp5jp9vNlUKg

 

4.作成する変数、構造体、関数について

 (1) 変数について

変数名 役割
int Taxold 控除計算値(旧)
int Taxnew 控除計算値(新)
int Taxtotal 控除合計金額
int genelifeinstaxnew  一般生命保険料による控除額(新) 
int genelifeinstaxold 一般生命保険料による控除額(旧)
int indivistaxnew 個人年金保険料による控除額(新)
int indivistaxold 個人年金保険料による控除額(旧)
int careinstax 介護医療保険料による控除額

 

 (2) 生命保険料入出力情報構造体について

  変数名 役割
構造体名:LIFEINS
  int  genelifeinsnew   一般生命保険料(新) 
  int  indivinsnew  個人年金保険料(新)
  int  careinsnew  介護医療保険料(新)
  int  genelifeinsold  一般生命保険料(旧) 
  int  indivinsold  個人年金保険料(旧) 
  int  incometax  所得税控除額
  int  regidenttax  住民税控除額

 

 (3) 作成関数について

関数名 役割 引数 返り値
LiIncTaxnew 生命保険料(新)による、所得税控除計算 保険料:int fee 保険料控除額:int deduction
LiIncTaxold 生命保険料(旧)による、所得税控除計算 保険料:int fee 保険料控除額:int deduction
LiResiTaxnew 生命保険料(新)による、住民税控除計算 保険料:int fee 保険料控除額:int deduction
LiResiTaxold 生命保険料(旧)による、住民税控除計算 保険料:int fee 保険料控除額:int deduction
LifeInsIncTax 生命保険による所得税控除額計算 保険構造体:LIFEINS なし
LifeInsResiTax 生命保険による住民税控除計算 保険構造体:LIFEINS なし

 

関連記事

過去の記事:

知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - Project_OKI’s diary

C言語基礎知識6(関数) - Project_OKI’s diary

C言語基礎知識7(構造体1) - Project_OKI’s diary

C言語基礎知識8(enum:列挙型) - Project_OKI’s diary

C言語基礎知識9(typedef) - Project_OKI’s diary

C言語基礎知識10(extern宣言) - Project_OKI’s diary

C言語基礎知識11(#define) - Project_OKI’s diary