-
Notifications
You must be signed in to change notification settings - Fork 0
/
sample7_child-dose.html
214 lines (200 loc) · 6.59 KB
/
sample7_child-dose.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
<!DOCTYPE html>
<html lang="ja">
<!--
Copyright (C) 2020 浦 公統
Released under the MIT license.
see https://opensource.org/licenses/MIT/
-->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<title>小児薬用量計算</title>
<style>
table, th, td
{
border: solid 2px;
}
</style>
<script src="./lib/anyCalculatorFramework.js"></script>
<script src="./lib/formatDecimal.js"></script>
<script src="./lib/MathWrapper.js"></script>
<script>
/**
* 初期化
*/
function init()
{
// このHTMLは1個の画面に2つの計算機アプリを表示します。
// 1つ目の計算機アプリの設定
// 成人用量 → 小児薬用量
// 入力項目
// 項目名, 入力項目ID, 単位 (省略時は空), 初期値 (省略時は空), 省略可否フラグ (省略時は false)
// 入力項目IDは1個の計算機アプリ内で同じものを重複して使うことはできません
var inputs = [
new itemInput( '性別 (1:男性 2:女性)', 'sex' ),
new itemInput( '年齢', 'age', '歳' ),
new itemInput( '体重', 'weight', 'kg' ),
new itemInput( '成人用量', 'adultDose', null, 1 )
];
// 出力項目
// 項目名, 出力項目ID, 単位 (省略時は空), 小数点以下桁数 (数値ではなく、文字列を出力する場合は -1) (省略時は 3)
// 出力項目IDは1個の計算機アプリ内で同じものを重複して使うことはできません
var outputs = [
new itemOutput( '体表面積 (概算)', 'BS', 'm<sup>2</sup>', 2 ),
new itemOutput( '小児薬用量', 'childDose', null, 2 )
];
// 計算機アプリのインスタンス生成
// 計算機アプリのID, 入力項目, 出力項目, 計算ボタンのキャプション, 計算コールバック関数, 入力エラーコールバック関数, テキストサイズ (省略時は4)
new anyCalculator( 'childDose', inputs, outputs, '小児薬用量計算', calcChildDose, onError, 3 );
// 2つ目の計算機アプリの設定
// 小児薬用量 → 成人量換算
// 入力項目
// 項目名, 入力項目ID, 単位 (省略時は空), 初期値 (省略時は空), 省略可否フラグ (省略時は false)
// 入力項目IDは1個の計算機アプリ内で同じものを重複して使うことはできません
inputs = [
new itemInput( '性別 (1:男性 2:女性)', 'sex' ),
new itemInput( '年齢', 'age', '歳' ),
new itemInput( '体重', 'weight', 'kg' ),
new itemInput( '小児薬用量', 'childDose' )
];
// 出力項目
// 項目名, 出力項目ID, 単位 (省略時は空), 小数点以下桁数 (数値ではなく、文字列を出力する場合は -1) (省略時は 3)
// 出力項目IDは1個の計算機アプリ内で同じものを重複して使うことはできません
outputs = [
new itemOutput( '換算成人量', 'adultDose', null, 1 )
];
// 計算機アプリのインスタンス生成
// 計算機アプリのID, 入力項目, 出力項目, 計算ボタンのキャプション, 計算コールバック関数, 入力エラーコールバック関数, テキストサイズ (省略時は4)
new anyCalculator( 'adultDose', inputs, outputs, '成人量換算', calcAdultDose, onError, 3 );
}
/**
* 計算コールバック関数 1
* 小児薬用量を計算する
* @param inputs 入力項目
* @param outputs 出力項目
* @note inputs[ '項目名' ] に入力数値が入る (数値が入力されてない項目には NaN が入る)
* outputs[ '項目名' ] に計算結果を入れて関数を終了すること
*/
function calcChildDose( inputs, outputs )
{
// 女性フラグ
var isFemale = null;
switch ( inputs[ 'sex' ] )
{
case 1:
isFemale = false;
break;
case 2:
isFemale = true;
break;
default:
alert( '性別が不正です' );
return;
}
// 成人基準体重
var adultWeight = 0;
if ( isFemale )
{
if ( inputs[ 'age' ] < 1.0 )
{
adultWeight = 70.0;
}
else
{
adultWeight = 62.8;
}
}
else
{
if ( inputs[ 'age' ] < 1.0 )
{
adultWeight = 70.0;
}
else
{
adultWeight = 64.3;
}
}
// 体表面積
outputs[ 'BS' ] = 1.73 * pow( inputs[ 'weight' ] / adultWeight, 2 / 3 );
// 小児薬用量
outputs[ 'childDose' ] = inputs[ 'adultDose' ] * pow( inputs[ 'weight' ] / adultWeight, 2 / 3 );
}
/**
* 計算コールバック関数 2
* 換算成人量を計算する
* @param inputs 入力項目
* @param outputs 出力項目
* @note inputs[ '項目名' ] に入力数値が入る (数値が入力されてない項目には NaN が入る)
* outputs[ '項目名' ] に計算結果を入れて関数を終了すること
*/
function calcAdultDose( inputs, outputs )
{
// 女性フラグ
var isFemale = null;
switch ( inputs[ 'sex' ] )
{
case 1:
isFemale = false;
break;
case 2:
isFemale = true;
break;
default:
alert( '性別が不正です' );
return;
}
// 成人基準体重
var adultWeight = 0;
if ( isFemale )
{
if ( inputs[ 'age' ] < 1.0 )
{
adultWeight = 70.0;
}
else
{
adultWeight = 62.8;
}
}
else
{
if ( inputs[ 'age' ] < 1.0 )
{
adultWeight = 70.0;
}
else
{
adultWeight = 64.3;
}
}
// 換算成人量
outputs[ 'adultDose' ] = inputs[ 'childDose' ] * pow( adultWeight / inputs[ 'weight' ], 2 / 3 );
}
/**
* 入力エラーコールバック関数
* @param item 入力エラー項目の itemInput オブジェクト
* item.title 項目名
* item.id ID
* item.unit 単位
* item.initValue 初期値
* item.element input 要素
*/
function onError( item )
{
alert( item.title + 'に数値を入力してください' );
item.element.focus();
}
</script>
</head>
<body onload="init();">
<!-- 計算機アプリはこれらの table に表示されます --->
<!-- id を複数使えば、1個のHTML上にいくらでも計算機アプリを配置できます -->
<!-- この table の id と、1つ目の new anyCalculator() の第1引数に、1つ目の計算機アプリのIDを指定します -->
<table id="childDose"></table>
<br>
<!-- この table の id と、2つ目の new anyCalculator() の第1引数に、2つ目の計算機アプリのIDを指定します -->
<table id="adultDose"></table>
<p>※小児薬用量の計算および成人量換算は拡張Clark式で計算しています。</p>
</body>
</html>