第 8 回 ことはじめ レポート課題 氏名: 鈴木椎菜 学籍番号: C1101276 語学クラス: 英語6 コース(系): 社会福祉コース 1.筆記問題 A. Hashでは、 --------------------- Hash変数[ key ] = value --------------------- keyとvalueが対になって表示された。 CGI変数では、 ------------------------- ------------------------- 入力されたものがもともと指定していた変数と対になる。 ということは、もともと指定していた変数が key で、入力されたものが value ということになると考えられる点で似ている。 B. <.htaccss> CGIを使用することを宣言する。このファイルが入っているディレクトリの.rbで 終わるファイルは CGIスクリプトとして認識される。 <.html> 利用者にデータを入力させる部分。
入力させる部分
この要素を書くことによって指定した .rbのファイル をそのファイルに入力結 果を吐かせることができる。 <.rb> htmlによって入力されたデータを受け取って処理をするプログラム。 C. ------------------------- ------------------------- option で指定した要素が "変数A" に入る。 D. ------------------------- # プログラ厶の初めの部分 cgi = CGI.new('htmla4') # CGI変数を使用したい部分 変数B = cgi["変数A"] ------------------------- 初めに CGI変数をHTMLから受け取る定義をする。 その後、筆記問題C で解説した、 変数A に入っているoptionを cgi変数を利用 して 変数B に取りこむ。 以後、プログラム内では 変数B として扱う。 <参考文献等> 基礎プログラミングII 西村クラス 第8回講義ノート URL; http://roy/~madoka/2011/r2/08/lec/resume.html 2.プログラム問題 A. <設定> 陸羽西線の乗車券のWebチケットが発券するオンライン発券システム。 発着駅と到着駅を指定することによって発券される。 <プログラム本体 ticket.rb> #!/usr/bin/env ruby $KCODE = 'e' # 日本語コードの定義 require 'cgi' # CGI を使います cgi = CGI.new('htmla4') # CGI変数は HTML に使用する print("Content-type: text/html; charset=EUC-jp\n\n") # 日本語コードの定義 station = Hash.new # station を Hash配列として設定 # station配列の key に駅名、 value に新庄からの距離を代入する station["新庄駅"] = 0.0 station["升形駅"] = 7.5 station["羽前前波駅"] = 10.6 station["津谷駅"] = 12.9 station["古口駅"] = 17.0 station["高屋駅"] = 24.8 station["清川駅"] = 31.1 station["狩川駅"] = 34.9 station["南野駅"] = 38.9 station["余目駅"] = 43.0 stt = cgi["start"] # Ruby に CGI でもらってきた値を代入する # ticket.html で の部分 name = cgi["namae"] # Ruby に CGI でもらってきた値を代入する # ticket.html で の部分 m = cgi["month"] # Ruby に CGI でもらってきた値を代入する # ticket.html で の部分 # p stt # Ruby の変数に入ったか確認 # p arv # Ruby の変数に入ったか確認 kyori = station[arv] - station[stt] # 到着駅の距離から出発駅の距離を引いて、kyori に代入 if kyori < 0 # もし kyori が負の値であったら kyori *= -1 # kyori に -1 をかける end price = 120 + (kyori.to_i / 2) * 20 # 小数点以下四捨五入したkyoriを2で割り、それを20倍した値をpriceに代入 if kyori == 0 # kyori が 0 の場合。つまり、出発駅と到着駅が同じ時 print("\n") # HTMLの規定 print("\n") # HTMLの設定 print("発券結果\n") # HTMLのタイトル設定 print("\n") # HTMLの設定(閉) print("\n") # HTMLの表示部分 print("

エラー

\n") print("

同じ駅を選んでいます。

\n") print("\n") # HTMLの表示部分(閉) print("\n") # HTMLの規定(閉) else print("\n") # HTMLの規定 print("\n") # HTMLの設定 print("Webチケット\n") # HTMLのタイトル設定 print("\n") # HTMLの設定(閉) print("\n") # HTMLの表示部分 print("

JR山形 JR Yamagata

\n") printf("

利用者名: %s樣

\n", name) printf("

陸羽西線 乗車券: %s--%s間

\n", stt, arv) printf("

料金: %d円

\n", price) printf("

使用日: %s %s %s

\n", y, m, d) print("

御利用は使用日のみ有効。

\n") ptint("\n\n") print("

JR山形

\n") print("\n") # HTMLの表示部分(閉) print("\n") # HTMLの規定(閉) end 券売機

券売機

陸羽西線(新庄--余目間)

◯お名前

◯乗車について



JR山形

<実行結果> 1回目 [arrive = 余目駅(43.0) start = 津谷駅(12.9)] ------------------------------------------ pan{SUZUKI Shiina}% ./ticket.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) namae="しいな" year=" 平成23年" month="1月" day="1日" start="津谷駅" arrive="余目駅" Content-type: text/html; charset=EUC-jp Webチケット

JR山形 JR Yamagata

利用者名: しいな樣

陸羽西線 乗車券: 津谷駅--余目駅間

料金: 420円

使用日: 癖神3年 1月 1日

御利用は使用日のみ有効。

./ticket.rb:71: undefined method `ptint' for main:Object (NoMethodError) ------------------------------------------ 2回目[start = 南野駅(38.9) arrive = 古口駅(17.0)] ------------------------------------------ pan{SUZUKI Shiina}% ./ticket.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) namae="しいな" year="24年" month="8月" day="4日" start="南野駅" arrive="古口駅" Content-type: text/html; charset=EUC-jp Webチケット

JR山形 JR Yamagata

利用者名: しいな樣

陸羽西線 乗車券: 南野駅--古口駅間

料金: 320円

使用日: 24年 8月 4日

御利用は使用日のみ有効。

./ticket.rb:71: undefined method `ptint' for main:Object (NoMethodError) ------------------------------------------ <考察> (1)同じ駅を指定した時 htmlの表示を行う部分に、if文を取り入れた。 kyori とは、到着駅と出発駅の距離の差であるから、値が 0 の時は両者が同 じ時であると考えた。 そのため、 kyori == 0 のときはエラーページを表示させるようにした。 (2)走行距離の計算 初乗りが 120円であるため、120円は必ず加算される。 続いて、2[km] ごとに 20円 加算していく。 距離を 2[km] で割ると、2[km]が何回あるかわかるため、それに 20(円)をかけ れば 2[km] ごとに 20(円) の計算ができる。 (3)計算結果 1回目[arrive = 余目駅(43.0) start = 津谷駅(12.9)] 1. kyori = station[arv] - station[stt] ---------------------------- pan{SUZUKI Shiina}% bc -l [~] 43.0 - 12.9 30.1 ---------------------------- 2. if kyori < 0 該当しない 3. price = 120 + (kyori.to_i / 2) * 20 ---------------------------- pan{SUZUKI Shiina}% bc -l 120 + (30 / 2 ) * 20 420.00000000000000000000 ---------------------------- 結果は合った。 2回目[start = 南野駅(38.9) arrive = 古口駅(17.0)] 1. kyori = station[arv] - station[stt] ---------------------------- pan{SUZUKI Shiina}% bc -l 17.0 - 38.9 -21.9 ---------------------------- 2. if kyori < 0 該当する kyori *= -1 ---------------------------- -21.9 * -1 21.9 ---------------------------- 3. price = 120 + (kyori.to_i / 2) * 20 ---------------------------- 120 + (21 / 2) * 20 330.00000000000000000000 ---------------------------- 結果が合わない。 これは、21 / 2 をする時に、bc -l で計算をしたときには計算結果が 10.5 となっている。 しかし、プログラムでは、kyori.to_i / 2 としているため、計算結果 も小数点以下が切り捨てられている。 よって計算結果が合わなくなる、と考えられる。 <参考文献等> 基礎プログラミングII 西村クラス 第8回講義ノート URL; http://roy/~madoka/2011/r2/08/lec/resume.html 基礎プログラミングII 西村クラス 第8回課題ページ station.dat のデータ B. http://roy/~c110127/advertise/logo_r2_c110127.png C. http://roy/~c110127/advertise2/r2_c110127.pdf 3.感想 今回の課題では、プログラム問題は講義ノートを見ながら、さくさくと取り組 むことができた。筆記問題も、講義ノートを見ながら自分の言葉で書くことで、 より一層理解を深めることができた。 Writer の課題では、この講義を学んでからのことについて振り返ることができ た。 4.参考文献など 各項目に記している。 --------------------------- 東北公益文科大学 公益学部 公益学科 2年 鈴木椎菜 c110127@f.koeki-u.ac.jp