第 8 回 ことはじめ レポート課題
氏名:森桂太
学籍番号:c110190
語学クラス:中国語
コース(系):社会福祉コース
A. CGI 変数と Hash の似ている点を挙げよ。
CGI変数とHashが似ている点は、複数の選択肢があるうちから選んだものを取りだせると いうことだと思う。
CGIは選んだ項目が何かの項目と結びつく。 hash でいえば key が項目
で 、選択肢は value のようなもの。
B.CGI のしくみについて、.htaccess, *.html, *.rb は互いにどのような関係にあるか解 説せよ。
htaccessでCGIを作ることを表す。htmlは内容を入力させる。その入力内容をrbで結果を出力している。三つの内一つが欠けると役目を果たさない。
C.*.html で CGI 変数を渡すのはどのしくみか。必要な行を解説せよ。
ticket.html で使ったのは、
この部分で選ばれた option が
で現れたボタンを押すことで値が送られる。
D.*.rb で CGI 変数を受け取って HTML 文書にするしくみはどのようになっているか、必 要な行を挙げて説明せよ。
ticket.rb で説明すると、
require 'cgi'
この部分で CGI を使う宣言をして
cgi = CGI.new("html4")
print("Content-type: text/html; charset=EUC-jp\n\n")
で受け取ったデータを使う宣言をする。
この後に print で表示したい文を表示させる。
A
1.設定
授業で扱われたticket.rbおよびticket.htmlを完成に近づけたもの。
乗車券を発券するCGI。
2.作成プログラム
a. ticket.rb
#!/usr/koeki/bin/ruby
require 'cgi'
cgi = CGI.new("html4")
print("Content-type: text/html; charset=Euc-jp\n\n")
sta = cgi["startingpoint"]
des = cgi["destination"]
station = Hash.new
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
station["北余目"] = 45.7
station["砂越"] = 48.7
station["東酒田"] = 52.0
station["酒田"] = 55.2
print("\n")
print("
\n")
print("\tチケット\n")
print("")
print("\n")
print("\n")
if sta == arr
print("")
print("※エラー※")
print("
")
print("出発と到着で同じ駅が選択されています
")
print("前のページに戻り、やり直して下さい")
print("\n")
else
print("乗車券
----------------------------------
")
printf("%s → %s間\n
",sta,des)
if station[sta] > station[des]
printf("走行距離 %3.1f km",(station[sta] - station[des]).to_f)
printf("運賃 %d 円
",120+(station[sta] - station[des]).to_i/2 * 20)
else
printf("走行距離 %3.1f km
",(station[des]-station[sta]).to_f)
printf("運賃 %d 円
",120+(station[des]-station[sta]).to_i/2 * 20)
end
print("自由席\n")
print("
\n")
print("----------------------------------
発券から3ヶ月間有効
")
print("格安鉄道
")
end
print("\n")
print("\n")
b. ticket.html
乗車券売機
〜!!警告!!〜
このプログラムは東北公益文科大学2年 森桂太 が著作権を所有しています。
プログラムを入手・改変・再配布は自由に行っても構いませんが
このプログラムを取り扱って生じた問題は一切責任を負いませんのでご了承ください.
このプログラムに対する要件がありましたら下記まで連絡してください。
c110190@e.koeki-u.ac.jp
3.基にしたプログラムからの変更点
・cgi=[""]内の変数名を変えた。
・value=""内の変数名を変えた。
4.プログラム説明
・require 'cgi' はCGIで実行する事を宣言する。
・cgi = CGI.new(" ")
print("Content-type: text/html; charset=Euc-jp\n\n")
()内の受け取ったデータに準拠してCGIを実行させる。
・sta = cgi["startingpoint"] CGIで startingpoint を sta に省略。
・des = cgi["destination"] CGIで destination を des に省略。
・station = Hash.new 新しい配列使用を宣言。
・station["新庄"] = 0.0 station が Hash 、"新庄" が key 、0.0 が value の役割。
それを繰り返し作って置く。
・print("\n") html文を表示。
・print("\n") headを書き始める。
・print("\tチケット\n") ウィンドウ上部にタイトルが表示される。
・print("\n") head を終わらせる。
・print("\n") 本体を書きはじめる。
・if sta == arr もし、発着点で同じ駅が選ばれたら、
・print("") 見出しで、
・print("※エラー※") エラーを表示させる。
・print("
") 見出しを終わらせる。
・print("出発と到着で同じ駅が選択されています
") エラーの内容表示。
・print("前のページに戻り、やり直して下さい") 前ページに戻ることを促す。
・ print("\n") エラーメッセージ表示終了させる。
・else 発着駅が違うならば、
・print("乗車券
--------------------------------
") 乗車券を発行する
・printf("%s → %s間\n
",sta,des) sta 〜 des の区間表示。
・if station[sta] > station[des] もし出発駅、庄内駅からの距離が長いときは、
・printf("走行距離 %3.1f km",(station[sta] - station[des]).to_f)
走行距離を求めるため、出発駅と庄内駅の距離から到着駅と庄内駅の距離を引く。
また、この距離は小数で表示する
。
・printf("運賃 %d 円
",120+(station[sta] - station[des]).to_i/2 * 20)
運賃は初乗り120円で、2kmごとに20円足されるので、2で割り10をかける。
・else 違うならば、
・print("乗車券
----------------------
") 乗車券を発行する。
・printf("走行距離 %3.1f km
",(station[des]-station[sta]).to_f)
到着駅の方が庄内駅から遠い場合、
・printf("運賃 %d 円
",120+(station[des]-station[sta]).to_i/2 * 20)
到着駅と庄内駅の距離から出発駅と庄内駅の距離を引く。この距離も小数にする。
・end if 文を終わらせる。
・print("自由席\n") 共通で表示されるもの。
・print("
\n") 2番目に大きな見出し終了させる。
・print("------------
発券から3ヶ月間有効
") 段落文。
・print("格安鉄道
") ""内に内容を書き、 で終了。
・end if 文 を終わらせる。
・print("\n") 本体書き終了。
・print("\n") html書き終了。
5.実行結果
今回何度やっても結果が上手く表示されなかった。
原因として、入力ミスが根本的に悪かったことが分かった。
pan{MORI Keita}% ./ticket.rb [~/public_html/rubycgi]
(offline mode: enter name=value pairs on standard input)
startingpoint="東酒田"
destination="升形"
Content-type: text/html; charset=Euc-jp
チケット
乗車券
----------------------------------
東酒田 → 升形間
走行距離 44.5 km運賃 560 円
自由席
----------------------------------
発券から3ヶ月間有効
格安鉄道
となった。
ウェブページでは、
乗車券
----------------------------------
東酒田 → 升形間
走行距離 44.5 km運賃 560 円
自由席
----------------------------------
発券から3ヶ月間有効
格安鉄道
と表示され双方の結果が一致した。
6.考察
ktermでの結果と、ウェブページでの結果が同じになったのでプログラムは正しく起動している事が分かった。しかし、初歩的な入力ミスで全く起動しなかったこともあり、間違った入力に対する表示が出来るプログラムが課題として残りました。
7.感想
今回も友人や先輩方のページ、先生の講義ページのおかげで何とか完成できました。
8.参考文献
先輩ページ
http://roy/~madoka/2010/r2/08/rpt/c108203.txt
http://roy/~madoka/2010/r2/08/rpt/c109058.txt
http://roy/~madoka/2010/r2/08/rpt/c109080.txt
神田先生ページ
http://roy/~naoya/cgi-bin/9.html
西村先生ページ
http://roy/~madoka/2011/r2/08/r2_08_06_theme_06_firstcgi.html
http://roy/~madoka/2011/r2/08/r2_08_08_theme_08_ruby.html
9.ページアドレス
CGIのアドレス
http://roy/~c110190/rubycgi/ticket.html
作成したロゴ
logo_r2_c110190.png
PDFファイル
r2_c110190.pdf .pdf
掲載アドレス
http://roy/~c110190/advertise2/