生命保険控除額の計算方法(所得税と住民税)
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 | なし |
関連記事
C言語:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary
・知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - 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