第 12 回 自由課題準備 (2) レポート課題 氏名: 土門千里 学籍番号: c1111122 語学クラス: 英語5 コース: 政策マネジメント チーム名: Teamぬくぬく チームホームページアドレス: http://roy/~c111037/kadai/index.html 部門: お役立ち部門 プロジェクトコード名: 健康第一/健康維持プログラム チーム SNS アドレス: http://cms.is.koeki-u.ac.jp/sns/community/59 1. チーム全体の進み具合 2 つのプロジェクトともに、 ・プロジェクトwebページ ・企画書 ・取り扱い説明書 ・デモプログラム ・プレゼンテーション用の原稿 などはは粗方でき上がってきたため、あとは、プログラム本体の完成、不備がな いかをチェックする段階である。 2. プロジェクトの進み具合 デモ版やプレゼンテーションのための原稿、企画書、取り扱い説明書、プロジェ クトwebページなどは粗方出来たため、不備などがないかをチェックする段階に ある。 残すところは、私が担当するプログラム本体を完成させるところである。 3. プロジェクト担当部分 担当 : プログラム本体 URL : http://roy/~c111112/rubycgi/diet.html a) 考えた設定 ユーザーによって入力されたデータ、または選択された身長や体重、性別などの データを元に、標準体重を計算する。 また、その日に摂取したカロリーの合計を計算する。 b-1) 作成した html 文章 健康第一

健康第一


日付:



▼標準体重の計算



▼摂取カロリーの計算

    -- 朝 -----

  • 食べたもの : # 朝に食べたものを入力するためのテキストボックス 摂取カロリー :
  • # 朝に食べたもののカロリーを入力するためのテキストボックス

    -- 昼 -----

  • 食べたもの : # 昼に食べたものを入力するためのテキストボックス 摂取カロリー :
  • # 昼に食べたもののカロリーを入力するためのテキストボックス

    -- 夜 -----

  • 食べたもの : # 夜に食べたものを入力するためのテキストボックス 摂取カロリー :
  • # 夜に食べたもののカロリーを入力するためのテキストボックス



# 入力、選択されたデータを送信する # 入力、選択されたデータのクリア




ホームページへ戻る

b-2) 作成したプログラム本体 #!/usr/bin/env ruby #coding: euc-jp require 'cgi' # CGI を使う宣言 diet = CGI.new(:accept_charset => "EUC-JP") # 日本語で入力されたデータを受け取る # diet は CGI 変数にあたる print("Content-type: text/html; charset=EUC-JP\n\n") # 日本語でデータを出力する def kcal(cm2, cn2, ca2) # 合計カロリーの計算 cm2 + cn2 + ca2 # 朝、昼、夜のカロリーを足していく end # def の終了 def histogram(data) # 一日の食の割合を示すグラフ for kcal in data # 朝、昼、夜にとった食事のカロリーを参考にする print("*" * kcal + "
\n") end # for の終了 end # def の終了 y = diet["year"] # 日付のうちの年数のデータ m = diet["month"] # 日付のうちの月のデータ d = diet["day"] # 日付のうちの日にちのデータ s = diet["sex"] # ユーザーの性別 a = diet["age"].to_i # ユーザーの年齢 e = diet["ep"] # ユーザーの身体活動レベル h = diet["height"].to_f # ユーザーの身長 w = diet["weight"].to_i # ユーザーの体重 nm = diet["note_m"] # 朝に食べたもの cm = diet["calorie_m"].to_i # 朝に食べたもののカロリー nn = diet["note_n"] # 昼に食べたもの cn = diet["calorie_n"].to_i # 昼に食べたもののカロリー na = diet["note_a"] # 夜に食べたもの ca = diet["calorie_a"].to_i # 夜に食べたもののカロリー sw = 0 # 標準体重 mw = 0 # ユーザーの体重と標準体重との差異 bmi = 0 # BMI cm2 = 0 # 合計を求める際に使われる朝に食べたもののカロリーのデータ cn2 = 0 # 合計を求める際に使われる昼に食べたもののカロリーのデータ ca2 = 0 # 合計を求める際に使われる夜に食べたもののカロリーのデータ cm3 = cm / 10 # カロリーをグラフで表す際に 10 分の 1 にする cn3 = cn / 10 ca3 = ca / 10 total = [cm3, cn3, ca3] # グラフで使うカロリーのデータ print("\n") # html 文 print("\n") print("健康第一\n") print("") # diet.css を用いて表示させる print("\n") print("\n") print("

プログラム計算結果

\n") printf("

%s\n", y) # 年数を表示 printf("%s %s

\n", m, d) # 月日を表示 print("

標準体重の計算結果

\n") sw = h * h * 22 / 10000 # 標準体重の計算 printf("

標準体重: %3.1fkg

\n", sw) # 標準体重の表示 printf("

あなたの体重: %dkg

\n", w) # ユーザーの標準体重の表示 mw = w - sw # 標準体重とユーザーの体重との差異を計算 if w >= sw # ユーザーの体重が標準体重よりも重かった場合 printf("

標準体重まであと %3.1f kg

\n", mw) # 標準体重までの差異を表示 elsif w <= sw # ユーザーの体重が標準体重よりも軽かった場合 printf("

標準体重より %3.1f kg

\n", mw) # 標準体重まであと何キロ足りないかを表示 else # ユーザーの体重が標準体重であった場合 print("

標準体重です。

\n") # 標準体重であることを表示 end # if の終了 bmi = w / h / h * 10000 # BMI の計算(体重 / 身長(m) / 身長)m)) print("
\n") printf("

BMI: %3.1f", bmi) # ユーザーのBMI を表示 if bmi < 18.5 # BMIの値が 18.5 よりも低かった場合 print("(やせ)

\n") elsif bmi > 25 # BMIの値が 25 よりも高かった場合 print("(肥満)

\n") else # BMIの値が 18.5 よりも高く、25 よりも低い場合 print("(正常)

\n") end # if の終了 print("
\n") print("

摂取カロリー計算結果

\n") printf("

朝 - %s : %dkcla

\n", nm, cm) # 朝に食べたもののカロリーと名前を表示 printf("

昼 - %s : %dkcal

\n", nn, cn) # 昼に食べたもののカロリーと名前を表示 printf("

夜 - %s : %dkcal

\n", na, ca) # 夜に食べたものの名前とカロリーを表示 printf("

合計摂取kcal : %dkcal

\n", kcal(cm, cn, ca)) # 合計摂取カロリーを表示 print("
\n") if a == 1 || a == 2 # ユーザーの年齢が 1 歳または 2 歳である場合 if s == "男" # さらにユーザーが男性である場合 print("

▼あなたのエネルギー摂取基準は 1050kcal です。

\n") # 1 歳または 2 歳の男性の必要エネルギー摂取基準が表示される else # ユーザーが女性であった場合 print("

▼あなたのエネルギー摂取基準は 950kcal です。

\n") # 1 歳または 2 歳の女性の必要エネルギーが表示される end # if の終了 elsif a > 2 and a < 6 # ユーザの年齢が 3 歳から 5 歳である場合 if s == "男" print("

▼あなたのエネルギー摂取基準は 1400kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 1250kcal です。

\n") end elsif a == 6 || a == 7 # ユーザーの年齢が 6 歳または 7 歳である場合 if s == "男" print("

▼あなたのエネルギー摂取基準は 1650kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 1450kcal です。

\n") end elsif a == 8 || a == 9 # ユーザーの年齢が 8 歳または 9 歳である場合 if s == "男" if e == 1 || e == 2 # ここでの e とは身体活動レベルを指す print("

▼あなたのエネルギー摂取基準は 1950kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2200kcal です。

\n") end else if e == 1 || e == 2 print("

▼あなたのエネルギー摂取基準は 1800kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2000kcal です。

\n") end end elsif a == 10 || a == 11 # ユーザーの年齢が 10 歳または 11 歳である場合 if s == "男" if e == 1 || e == 2 print("

▼あなたのエネルギー摂取基準は 2300kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2550kcal です。

\n") end else if e == 1 || e == 2 print("

▼あなたのエネルギー摂取基準は 2150kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2400kcal です。

\n") end end elsif a > 11 and a < 15 # ユーザーの年齢が 12 歳から 14 歳である場合 if s == "男" if e == 1 print("

▼あなたのエネルギー摂取基準は 2350kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 2650kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2950kcal です。

\n") end else if e == 1 print("

▼あなたのエネルギー摂取基準は 2050kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 2300kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2600kcal です。

\n") end end elsif a > 14 and a < 18 # ユーザーの年齢が 15 歳から 17 歳である場合 if s == "男" if e == 1 print("

▼あなたのエネルギー摂取基準は 2350kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 2750kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 3150kcal です。

\n") end else if e == 1 print("

▼あなたのエネルギー摂取基準は 1900kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 2200kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2550kcal です。

\n") end end elsif a > 17 and a < 30 # ユーザーの年齢が 18 歳から 29 歳である場合 if s == "男" if e == 1 print("

▼あなたのエネルギー摂取基準は 2300kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 2650kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 3050kcal です。

\n") end else if e == 1 print("

▼あなたのエネルギー摂取基準は 1750kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 2050kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2350kcal です。

\n") end end elsif a > 29 and a < 50 # ユーザーの年齢が 30 歳から 49 歳である場合 if s == "男" if e == 1 print("

▼あなたのエネルギー摂取基準は 2250kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 2650kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 3050kcal です。

\n") end else if e == 1 print("

▼あなたのエネルギー摂取基準は 1700kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 2000kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2300kcal です。

\n") end end elsif a > 49 and a < 70 # ユーザーの年齢が 50 歳から 69 歳である場合 if s == "男" if e == 1 print("

▼あなたのエネルギー摂取基準は 2050kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 2400kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2750kcal です。

\n") end else if e == 1 print("

▼あなたのエネルギー摂取基準は 1650kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 1950kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2200kcal です。

\n") end end elsif a > 69 # ユーザーの年齢が 70 歳以上である場合 if s == "男" if e == 1 print("

▼あなたのエネルギー摂取基準は 1600kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 1850kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 2100kcal です。

\n") end else if e == 1 print("

▼あなたのエネルギー摂取基準は 1350kcal です。

\n") elsif e == 2 print("

▼あなたのエネルギー摂取基準は 1550kcal です。

\n") else print("

▼あなたのエネルギー摂取基準は 1750kcal です。

\n") end end else print("

入力に誤りがあります。

\n") # 年齢などが記入されなかった場合 end print("
\n") print("
\n") print("

一日の食のバランス

\n") print("

上から朝、昼、夜に摂ったカロリーの割合を示しています。

\n") print("

なるべく偏らないように気を付けましょう。

\n") print("
\n") histogram(total) # 一日分の朝、昼、夜の食事の割合がグラフで表示される print("
\n") print("
\n") print("

結果記録帳へ移動

\n") # 記録帳へのリンク print("
\n") print("
\n") print("
\n") print("

プログラムへ戻る

\n") # プログラムへのリンク print("\n") print("\n") open("./mydb/diet.dat", "a+") do |diet| # ./mydb/diet.dat のファイルへと書き込む # a+ は追加的に書き込んでいくことを表す diet.printf("%s ", y) # 年数を表示 diet.printf("%s %s\n", m, d) # 月日を表示 diet.print("\n") diet.print("▽摂取カロリーの計算\n") diet.printf("朝 - %s : %dkcla\n", nm, cm) # 朝に食べたものとカロリーを表示 diet.printf("昼 - %s : %dkcal\n", nn, cn) # 昼に食べたものとカロリーを表示 diet.printf("夜 - %s : %dkcal\n", na, ca) # 夜に食べたものとカロリーを表示 diet.printf("合計摂取kcal : %dkcal\n", kcal(cm, cn, ca)) # 合計摂取カロリーを表示 diet.print("\n") diet.print("▽標準体重の計算結果\n") diet.printf("標準体重: %3.1fkg\n", sw) # 標準体重の表示 diet.printf("あなたの体重: %dkg\n", w) # ユーザーの体重を表示 if w >= sw # ユーザーの体重が標準体重よりも重かった場合 diet.printf("標準体重まであと %3.1f kg\n", mw) # 標準体重との差異を表示 elsif w <= sw # ユーザーの体重が標準体重よりも軽かった場合 diet.printf("標準体重より %3.1f kg\n", mw) # 何キロ足りないのかを表示 else # ユーザーの体重が標準体重であった場合 diet.print("標準体重です。\n") # 標準体重であることを表示する end # if の終了 diet.print("\n") diet.printf("-----------------------------------------------\n") diet.print("\n") end # open の終了 c) プログラム実行結果 1) 年齢 18 歳、男性、身長 170 cm、体重 58 kg、身体活動レベル III で実行した場合 健康第一

プログラム計算結果

2012年 1月 3日

標準体重の計算結果

標準体重: 63.6kg

あなたの体重: 58kg

標準体重より -5.6 kg


BMI: 20.1(正常)


摂取カロリー計算結果

朝 - ごはん : 500kcla

昼 - ラーメン : 700kcal

夜 - カツ丼 : 800kcal

合計摂取kcal : 2000kcal


▼あなたのエネルギー摂取基準は 3050kcal です。



一日の食のバランス

上から朝、昼、夜に摂ったカロリーの割合を示しています。

なるべく偏らないように気を付けましょう。


**************************************************
**********************************************************************
********************************************************************************


結果記録帳へ移動




プログラムへ戻る

・記録帳への出力結果 2012年 1月 3日 ▽摂取カロリーの計算 朝 - ごはん : 500kcla 昼 - ラーメン : 700kcal 夜 - カツ丼 : 800kcal 合計摂取kcal : 2000kcal ▽標準体重の計算結果 標準体重: 63.6kg あなたの体重: 58kg 標準体重より -5.6 kg ----------------------------------------------- 2) 年齢 66 歳、女性、身長 154 cm、体重 45 kg、身体活動レベル IIで実行した場合 健康第一

プログラム計算結果

2012年 1月 4日

標準体重の計算結果

標準体重: 52.2kg

あなたの体重: 45kg

標準体重より -7.2 kg


BMI: 19.0(正常)


摂取カロリー計算結果

朝 - パン : 300kcla

昼 - うどん : 400kcal

夜 - ラーメン : 800kcal

合計摂取kcal : 1500kcal


▼あなたのエネルギー摂取基準は 2200kcal です。



一日の食のバランス

上から朝、昼、夜に摂ったカロリーの割合を示しています。

なるべく偏らないように気を付けましょう。


******************************
****************************************
********************************************************************************


結果記録帳へ移動




プログラムへ戻る

・記録帳への出力結果 2012年 1月 3日 ▽摂取カロリーの計算 朝 - ごはん : 500kcla 昼 - ラーメン : 700kcal 夜 - カツ丼 : 800kcal 合計摂取kcal : 2000kcal ▽標準体重の計算結果 標準体重: 63.6kg あなたの体重: 58kg 標準体重より -5.6 kg ----------------------------------------------- 2012年 1月 4日 ▽摂取カロリーの計算 朝 - パン : 300kcla 昼 - うどん : 400kcal 夜 - ラーメン : 800kcal 合計摂取kcal : 1500kcal ▽標準体重の計算結果 標準体重: 52.2kg あなたの体重: 45kg 標準体重より -7.2 kg ----------------------------------------------- d) 考察 1) 年齢 18 歳、男性、身長 170 cm、体重 58 kg、身体活動レベル III で実行した場合 ・bc - l による計算結果 pan{DOMON Chisato}% bc -l [~] 500 + 700 + 800 # カロリーの計算 2000 # 合計カロリー 170 * 170 * 22 # 標準体重の計算 635800 # 標準体重 635800 / 10000 63.58000000000000000000 63.6 - 58 # ユーザーの体重と標準体重の比較 5.6 quit bc -l による計算結果と、プログラムによる計算結果は同じであった。 また、年齢、性別、活動による必要エネルギー摂取量も正しく表示されたため、 プログラムは正しく動いているといえる。 2) 年齢 66 歳、女性、身長 154 cm、体重 45 kg、身体活動レベル IIで実行した場合 ・bc - l による計算結果 pan{DOMON Chisato}% bc -l [~] 300 + 400 + 800 # カロリーの計算 1500 # 合計カロリー 154 * 154 * 22 / 10000 # 標準体重の計算 52.17520000000000000000 # 標準体重 52.2 - 45 # ユーザーの体重と標準体重の比較 7.2 quit bc -l による計算結果と、プログラムによる計算結果は同じであった。 また、年齢、性別、活動による必要エネルギー摂取量も正しく表示されたため、 プログラムは正しく動いているといえる。 それと、一日の食事の朝、昼、夜の割合のグラフも正しく表示された。 4. チームのプロジェクト外メンバーに指摘された点 グラフなどを入れた方が、より視覚的にも良いのではないかと指摘された。 5. 指摘されたところの改善 ヒストグラムを取り入れた。 このヒストグラムを取り入れたことにより、ユーザーが朝、昼、夜でどのような バランスで食事をとっているかを視覚的に離開できるようになった。 ・付け加えた部分 def histogram(data) # 一日の食の割合を示すグラフ for kcal in data # 朝、昼、夜にとった食事のカロリーを参考にする print("*" * kcal + "
\n") end # for の終了 end # def の終了 6.参考文献 作者不明 15~69歳における各身体活動レベルの活動内容 http://fkenkan.or.jp/kenmori/level.html TATSUO IKURA 条件分岐 http://www.rubylife.jp/ini/if/ まつもとゆきひろ 制御構造 より 条件分岐 http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fcontrol.html#if 西村 まどか 基礎プログラミング I 第 4 回 (プログラミングの方法) より 「比較演算子」 http://roy/~madoka/2012/r1/04/r1_04_05_theme_02_comparison.html 西村 まどか 基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) より 「ヒストグラム」 http://roy/~madoka/2012/r2/04/r2_04_11_appendix_03_histogram.html