第 8 回 ことはじめ レポート課題 氏名: 吉住 貴則 学籍番号: C1101980 語学クラス: 英語 2 コース(系): 地域共創コース 1 A、 CGI と HASH の 共通点は、 CGI は、RUBY と別に作った HTML 形式で作ったものを CGI を使って表示することが出来て、 また、HASH は、KEY や VALUE で関係を作ったものを HASH によってプログラムにすることが出来る。 よって、どちらも作ったものを引用、取り出すことができる点が 共通点だと思う。 B、 .htaccessで、そのディレクトリ中だけでCGIを 使うことを宣言する。 *.htmlで、WEB ページ を 見る方がインターネット上で 入力できるページを作り、 *.rbで、答えた方により入力された値を処理し、結果を表示する。 C、 ticket.html で 使用したのは、 ここでドロップダウンメニューを作り、 選ばれた option が だった。 それから、 現れたボタンを押すことで値が送られる。 D、 ticket.rb で 使用したのは、 require 'cgi' で、 ここを CGI を使う宣言をして cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-jp\n\n") 上記の部分で受け取ったデータを使う宣言して、 この後に print 文で表示したい文を入力。 2 A、プログラム問題 1) 考え方 私の実家は、鶴岡にあり、 温かい時期は自転車で通学していたが、 最近は、寒くなり電車で来ている。 そこで、私が利用している区間を 選択性にしてそこまでの料金の目安を表示するようにした。 2) 作成したプログラム & html <プログラム> #!/usr/bin/env ruby #ruby を 使うのに env コマンドを立ち上げて使う $KCODE = 'e' # 日本語 で 表示 require 'cgi' # CGI を使う cgi = CGI.new('html4') # CGI を HTML 文書に使う pay = Hash.new # pay を HASH 関数にする def okane(de,syu) # def メソッド 関数 : okane … お金 # 仮引数 : de(出発)、syu(終着) if de > syu # もし出発が終着より大きいとき (de-syu) * 12 + 150 # (出発 - 終着) * 12(円 : 1km あたり) + 150(円 :初乗り) elsif de < syu # もし終着が出発より大きいとき (syu-de) * 12 + 150 # (終着 - 出発) * 12(円 : 1km あたり) + 150(円 :初乗り) end # if の end end # def の end print("Content-type: text/html; charset=EUC-JP\n\n") # 日本語コードの定義 arv = cgi["arrive"] # Ruby に CGI でもらってきた arrive を代入 str = cgi["start"] # Ruby に CGI でもらってきた start を代入 mon = cgi["month"] # Ruby に CGI でもらってきた month を代入 day = cgi["day"] # Ruby に CGI でもらってきた day を代入 open("ticket.dat","r") do |kippu| # データ ticket.dat を 変数 kippu に読みこむ while line = kippu.gets # 変数 kippu に データを繰り返し読ませる if /(\S+)\s+(\S+)/ =~line # /S+ : 1文字以上の空白以外 # /s+ : 1文字以上の空白 # ( ) : 正規表現 の くくり pay[$1]=$2.to_f # データを取り出す # $1 : 1つ目の (\S+) # $2 : 2つめの 、、 end # if の end end # while の end end # open 〜 do の end deru = pay[str] # hash を 定義した pay を配列のように使い # deru(出発) , syuryo(終着) を 定義する syuryo = pay[arv] #p arv # Ruby の変数に入ったか確認 print("\n") # 以下 html で表示される部分 print("\n") print("券売結果\n") print("\n") print("\n") print("

乗車券

\n") printf("

乗車間: %s -- %s間

\n",str,arv) # 選んだ 出発駅 と 到着駅が入る printf("

乗車日: %s月%s日

\n",mon,day) # 選んだ 日付が入る printf("

運 賃: %d円

\n",okane(deru,syuryo)) # 計算された運賃が表示される print("

〜ご到着までよい旅をお送り下さい!〜

") print("

〜NR 東日本を御利用下さいましてありがとうございました〜

") print("

NR 東日本 株式会社

\n") print("\n") print("\n") <このプログラムで使用した txt データ> 酒田 0.0 東酒田 3.2 砂越 6.5 北余目 9.5 余目 12.2 西袋 15.8 藤島 20.9 鶴岡 27.5 < html > 券売機

券売機

3) もとにしたプログラム 授業で作った、ticket.rb と ticket.html を もとに作成しました。 最初、砂越までしか出来ていなかったものを、 鶴岡までに延ばし、その上、 日付と運賃を表示できるようにした。 そして、運賃の 計算式なのだが、 先生のおっしゃったものではなく 「酒田」から「鶴岡」までの 料金をもとに新たに作成したので そこが1番の変更点です。 4) 実行結果 a : 酒田駅 から 余目駅 まで の場合 乗車券 乗車間: 酒田 -- 余目間 乗車日: 12月15日 運 賃: 296円 〜ご到着までよい旅をお送り下さい!〜 〜NR 東日本を御利用下さいましてありがとうございました〜 NR 東日本 株式会社 b : 余目駅 から 鶴岡駅 まで の 場合 乗車券 乗車間: 余目 -- 鶴岡間 乗車日: 11月25日 運 賃: 333円 〜ご到着までよい旅をお送り下さい!〜 〜NR 東日本を御利用下さいましてありがとうございました〜 NR 東日本 株式会社 c : 酒田駅 から 鶴岡駅 まで の 場合 乗車券 乗車間: 酒田 -- 鶴岡間 乗車日: 11月25日 運 賃: 480円 〜ご到着までよい旅をお送り下さい!〜 〜NR 東日本を御利用下さいましてありがとうございました〜 NR 東日本 株式会社 5) 考察 実行結果で出したものを bc -l で計算したみたいと思う。 pan{YOSHIZUMI Takanori}% bc -l [~/public_html/rubycgi] 12.2-0.0 12.2 12.2*12 146.4 # 小数点以下を切り捨てにしている 146+150 296 pan{c110198}% bc -l [~/public_html/rubycgi] 27.5-12.2 15.3 15.3*12 183.6 # 小数点以下を切り捨てにしている 183+150 333 pan{c110198}% bc -l [~/public_html/rubycgi] 27.5-0.0 27.5 27.5*12 330.0 330+150 480 以上の計算の答えと実行結果の答えが一致したため、 このプログラムは正常である。 B、ロゴを掲載したところ (http://roy/~c110198/advertise2/logo_r2_c110198.png) C、Writer の 復習ページ (http://roy/~c110198/advertise2/r2_c110198.pdf) 3、感想 CGI 変数が新しく出てきて、最初不安だったのですが、 何とか、完成しました。電車の料金など自分なりに工夫することが 出来たので、気持ちがとても充実しています。 これからも、一歩一歩亀の歩みで頑張ります。 4、参考文献 WEBサイト :西村まどか先生 <前期> 第 9 回 「Ruby であそぼ / 広告ページの作成」 (http://roy/~madoka/2011/r1/09/) 第 11 回 「自由課題準備 / ロゴ作成」 (http://roy/~madoka/2011/r1/11/) <後期> 第 8 回 「ゼミ紹介」 (http://roy/~madoka/2011/r2/08/) <鉄道距離関係> :羽越本線 (http://www.mds.gr.jp/~jp3nfp/station/list/jr/uetsu.html) ノート :自分で作成した ticket.rb、ticket.html 5、添付