(応用情報)損益分岐点の対策アプリ作りました

損益分岐点や限界利益を学ぶためのアプリ作成しました IT
広告

はじめに

チャル
チャル

令和6年春期の応用情報技術者試験の試験が近づいてますね!!

絶賛?絶叫?必死に勉強中です!!

令和元年秋期午前問77では

  • 安全余裕率
  • 限界利益率
  • 損益分岐点

令和3年秋期午前問77では

  • 限界利益率
  • 損益分岐点

が問題文の中に現れました!!

今回はこのような問題が出た際に焦らず対処できるような
対策を練ってみたのでみなさまにも共有したいとおもいます!!

損益分岐点などに慣れるための対策

損益分岐計算アプリ作成の発端

チャル
チャル

私が練った対策案…それは……

脳に染み付くまで問題解きまくる!!!!

です

上記のような過去問を解いても、
その問題の答えや数字を覚えているだけで
肝心の解き方が数日後には脳内から消失しているなぁと感じました。

そのため
問題がないなら作ればいいじゃない!!
という精神で生成アプリを作成してみました!!

作成アプリの使用例
作成アプリの解答例

損益分岐計算アプリの仕様

ページを開くたびに
売上高が
・1000 ・2000 ・3000
変動費率が
・0.1 ・0.2 ・0.3 ・0.4 ・0.5 ・0.6 ・0.7 ・0.8
固定費が
・100 ・200 ・300 ・400 ・500
でランダムに決まるようになっています。

そのランダムに決まった数値から

  • 売上高
  • 変動費
  • 固定費
  • 営業利益

が計算されて表示され、その数値を元に

  • 変動費率
  • 限界利益率
  • 損益分岐点売上高
  • 損益分岐点比率
  • 安全余裕率

を求めるという設計になっています。
※「損益分岐点比率」と「安全余裕率」 については
割り切れない場合があるため小数第3位を四捨五入したものを解答します。

専門用語の意味

【変動費】
売上に比例して増減する費用のこと。
(例)
オムライス販売店があり、1つ1000円のオムライスを作るのに材料費で200円かかります。
この場合、オムライスが売れるたびに材料費も多く発生します。
1つなら売上1,000円, 材料費200円 2つなら売上2,000円, 材料費400円
といった具合に変動する費用なので変動費です。

【固定費】
変動費に対して売上に関係なく発生する費用のこと。
(例)
オムライス店でいえば、家賃などを指します。
オムライスが1つも売れていなくてもたくさん売れていても
一律で発生するため固定費です。

【売上高】
物やサービスの対価として得たお金のこと。
(例)
オムライスが1つ売れた場合の1,000円。

【営業利益】
売上高から費用( 固定費 + 変動費 ) を引いて残った金額。
(例)
1ヶ月の家賃が100,000円で
1ヶ月でオムライスが1,000個売れたとき、
売上高 = 1,000,000円(1,000円 × 1,000個)
固定費 = 100,000円(家賃)
変動費 = 200,000円(200円 × 1,000個)
営業利益 = 700,000円(売上高 – (固定費 + 変動費)) になります。

【変動費率】
売上高に対する変動費の割合。
(例)
1000円のオムライスにつき200円なので
200 ÷ 1000 = 0.2(=20%) が変動費率になります。
オムライス40個の場合の変動費は
40,000(売上) × 0.2(変動費率) = 8,000(変動費)
といったように変動費を求めることができます。

【限界利益率】
売上高から変動費を引いたものを「限界利益」といいます。
売上高に対する限界利益率の割合。
(例)
営業利益の例を引用すると
限界利益 = 1,000,000 – 200,000 = 80万円が限界利益になり、
800,000 ÷ 1,000,000 = 0.8
0.8(=80%)が限界利益率になります。

【損益分岐点売上高】
売上高から費用( 固定費 + 変動費 )を引いて0になる売上高のこと。
固定費 ÷ (1 – 変動費率) で 求めることができる。
(例)
100,000(家賃) ÷ (1 – 0.2) = 125,000
オムライスを125個以上売ると利益が0円になる、
つまり124個以下だと赤字で126個以上だと黒字になります。

【損益分岐点比率】
売上高に対する損益分岐点売上高の割合。
(例)
営業利益の例を引用すると
125,000(損益分岐点売上高) ÷ 1,000,000 = 0.125(=12.5%)となります。

【安全余裕率】
売上高の中で売上高が損益分岐点をどれだけ超えているかの割合。
( 売上高 – 損益分岐点 ) ÷ 売上高 で求めることができます。
(例)
営業利益の例を引用すると
( 1,000,000 – 125,000 ) ÷ 1,000,000 = 0.875(=87.5%)となります。

さいごに

チャル
チャル

今回は自分の学習用に作成したプログラミングなため、
cssやjavaの記述をすべてjsp内に組み込んでいます。
またソースコードの解説は省略させていただきました、
↓のjspファイルをコピペして使用ください。
アプリの起動仕方は「こちら」を参照し、

viewファイルに入れて実行ください。

それでは最後までお読みいただきありがとうございました!!

ソースコード配布

<%@page contentType="text/html; charset=UTF-8" %>

<%
// 売上高
int sales = (int)(Math.random() * 3);
if(sales == 0) {
	sales = 1000;
} else if(sales == 1) {
	sales = 2000;
} else if(sales == 2) {
	sales = 3000;
}
// 固定費
int fix = (int)(Math.random() * 5);
if(fix == 0) {
	fix = 100;
} else if(fix == 1) {
	fix = 200;
} else if(fix == 2) {
	fix = 300;
} else if(fix == 3) {
	fix = 400;
} else if(fix == 4) {
	fix = 500;
}

// 変動費率
int num = (int)(Math.random() * 8);
double variable = 0.0;
if(num == 0) {
	variable = 0.1;
} else if(num == 1) {
	variable = 0.2;
} else if(num == 2) {
	variable = 0.3;
} else if(num == 3) {
	variable = 0.4;
} else if(num == 4) {
	variable = 0.5;
} else if(num == 5) {
	variable = 0.6;
} else if(num == 6) {
	variable = 0.7;
} else if(num == 7) {
	variable = 0.8;
}

// 限界利益率
double marginalProfit = (sales - (sales * variable)) / (double)sales;
// 損益分岐点売上高
int breakEvenPoint = (int)(fix / (1 - variable));
// 損益分岐点比率
double breakEvenPointRate = (double)(Math.round(breakEvenPoint / (double)sales * 100)) / 100;
// 安全余裕率
double safetyMarginRatio = (double)(Math.round((sales - breakEvenPoint) / (double)sales * 100)) / 100; 

%>

<html>
	<head>
		<title>利益計算</title>
	</head>

	<body>
		<div>
			<table style="margin-left: 4vw; margin-top: 3vw; border-spacing: 1vw; text-align: left;">
				<tr>
					<th>単位</th>
					<td>億円</td>
				<tr>
					<th>売上高</th>
					<td><%= sales %></td>
				</tr>
				<tr>
					<th>変動費</th>
					<td><%= (int)(sales * variable) %></td>
				</tr>
				<tr>
					<th>固定費</th>
					<td><%= fix %></td>
				</tr>
				<tr>
					<th>営業利益</th>
					<td><%= (int)(sales - (sales * variable + fix)) %></td>
				<tr>
			</table>
			
			<form onsubmit="check(); return false">
				<table style="margin-left: 4vw; border-spacing: 1vw; text-align: left;">
					<tr>
						<th>変動費率</th>
						<td><input type="text" id="variableRate"></td>
					</tr>
					<tr>
						<th>限界利益率</th>
						<td><input type="text" id="marginalProfit"></td>
					</tr>
					<tr>
						<th>損益分岐点売上高</th>
						<td><input type="text" id="breakEvenPoint"></td>
					</tr>
					<tr>
						<th>損益分岐点比率</th>
						<td><input type="text" id="breakEvenPointRate"></td>
					</tr>
					<tr>
						<th>安全余裕率</th>
						<td><input type="text" id="safetyMarginRatio"></td>
					</tr>
				</table>
				<input type="submit" value="答え合わせ" style="margin-left: 13vw; margin-top: 2vw;">
			</form>
			<p style="margin-left: 3vw; margin-top: 4vw;">【損益分岐点比率】<br>
			実際の売上高に対する損益分岐点の割合を示し、この値が低いほど収益性が高く、かつ売上減少に耐える力が強い</p>
			<p style="margin-left: 3vw;">【安全余裕率】<br>
			実際の売上高と損益分岐点の差がどれくらいあるかを示し、この値が高いほど経営に余裕があることを意味する</p>
		</div>
		
		<script type="text/javascript">

		function check() {
			var myVariableRate = document.getElementById('variableRate').value;
			var myMarginalProfit = document.getElementById('marginalProfit').value;
			var myBreakEvenPoint = document.getElementById('breakEvenPoint').value;
			var myBreakEvenPointRate = document.getElementById('breakEvenPointRate').value;
			var mySafetyMarginRatio = document.getElementById('safetyMarginRatio').value;

			var ans1;
			var ans2;
			var ans3;
			var ans4;
			var ans5;

			// 変動費率答え合わせ
			if(myVariableRate == <%= variable %>) {
				ans1 = "正解⭕️( 変動費 ÷ 売上高 )" + '\n' + "答え:" + <%= variable %>;
			} else {
				ans1 = "不正解❌( 変動費 ÷ 売上高 )" + '\n' + "答え:" + <%= variable %>;
			}

			// 限界利益率答え合わせ
			if(myMarginalProfit == <%= marginalProfit %>) {
				ans2 = "正解⭕( (売上高 - 変動費) ÷ 売上高 )" + '\n' + "答え:" + <%= marginalProfit %>;
			} else {
				ans2 = "不正解❌( (売上高 - 変動費) ÷ 売上高 )" + '\n' + "答え:" + <%= marginalProfit %>;
			}

			// 損益分岐点答え合わせ
			if(myBreakEvenPoint == <%= breakEvenPoint %>) {
				ans3 = "正解⭕( 固定費 ÷ (1 - 変動費率) )" + '\n' + "答え:" + <%= breakEvenPoint %>;
			} else {
				ans3 = "不正解❌( 固定費 ÷ (1 - 変動費率) )" + '\n' + "答え:" + <%= breakEvenPoint %>;
			}

			// 損益分岐点比率答え合わせ
			if(myBreakEvenPointRate == <%= breakEvenPointRate %>) {
				ans4 = "正解⭕( 損益分岐点売上高 ÷ 売上高 )" + '\n' + "答え:" + <%= breakEvenPointRate %>;
			} else {
				ans4 = "不正解❌( 損益分岐点売上高 ÷ 売上高 )" + '\n' + "答え:" + <%= breakEvenPointRate %>;
			}

			// 安全余裕率答え合わせ
			if(mySafetyMarginRatio == <%= safetyMarginRatio %>) {
				ans5 = "正解⭕( (売上高 - 損益分岐点売上高) ÷ 売上高 )" + '\n' + "答え:" + <%= safetyMarginRatio %>;
			} else {
				ans5 = "不正解❌( (売上高 - 損益分岐点売上高) ÷ 売上高 )" + '\n' + "答え:" + <%= safetyMarginRatio %>;
			}

			alert(ans1 + '\n' + ans2 + '\n' + ans3 + '\n' + ans4 + '\n' + ans5);
		}

		</script>
	</body>
</html>
タイトルとURLをコピーしました