第 8 回 ことはじめ レポート課題 氏名: 薮田 大樹 学籍番号: c1101916 語学クラス: 中国語3 コース(系): 地域共創コース 1、筆記問題 A: CGI 変数と Hash の似ている点 ・CGIでは、html内にあるあらかじめ複数の選択できるものから、 取り出したいものを取り出せる。Hashでもプログラム内に入力された データをそのまま持ってくる事が出来る。そこが似ていると思いました。 B: .htaccess で .rb と付いたプログラムを CGI として扱う。 .html は選択肢を表示し、その結果を .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 a:ドロップダウンメニューで発車駅、到着駅を選び ticket.rbプログラムにより 運賃を計算する。この時、基本運賃(120円)+2kmごとに20円づつ加算するもの と、新幹線運賃として2kmごとに50円づつ加算する設定を作り、よりリアリティ を追究したプログラムを作成した。 アドレス http://roy/~c110191/rubycgi/ticket.html b:作成したプログラム (ticket.rbプログラム) #!/usr/bin/env ruby $KCODE = "e" #日本語の文字コード require "cgi" # CGIの実行を要求。 cgi = CGI.new("html4") # CGIをHTML文書で使用する train = Hash.new # ハッシュを設定 def price(zr,arv) # zeroを出発駅とし、arriveを到着駅とし defを設定する。 if zr > arv (zr-arv)/2*20 + 120 # 料金を出す計算 zrは出発駅、arvは到着駅 # 基本料金は120円、そこから2kmごとに20円づつ加算。 elsif arv > zr (arv-zr)/2*20 + 120 end # if - end end # def - end def price2(zr2,arv2) # 2つ目の def は、新幹線料金を作る為に設定。 # zeroを出発駅、arriveを到着駅に。 if zr2 > arv2 (zr2-arv2)/2*50 # 新幹線料金は2kmごとに50円づつ加算する。 elsif arv2 > zr2 (arv2-zr2)/2*50 end # if - end end # def - end print("Content-type: text/html; charset=EUC-JP\n\n") # 日本語コードの定義 sta = cgi["start"] # CGIでのstartはstaに fin = cgi["finish"] # CGIでのfinishはfinに open("ticket.dat","r") do |cut| # open method(rなので読み込み専用) によりticket.datを読みこむ。 while station = cut.gets if /(\S+)\s+(\S+)\s+(\S+)/ =~station train[$1] = $2.to_f #データをきりだす($1は駅名を、$2は距離を読み込む) end end end zero = train[sta] arrive = train[fin] zero2 = train[sta] arrive2 = train[fin] total = price(zero,arrive) total2 = price2(zero2,arrive2) # 基本料金をtotalに、新幹線料金をtotal2に設定 print("\n") print("\n") print("\n") print("\n") print("ネットDEチケット<title>\n") print("<link rel=\"stylesheet\"type=\"text/css\"href=\"ticket.css\">\n") print("<center>") print("<h2>ネットDEチケット〜山形新幹線乗車券〜</h1>\n") print("<h2><p>*-------------------------------------------*</p><h2>\n") printf("<h2><p> [ %s駅発 ] → [ %s駅着 ]</p></h2>\n",sta ,fin) printf("<p> <h2>[ 基本運賃 ]: ¥ %d [円]</p><h2>\n",total) printf("<h2><p> [ 新幹線料金 ]:¥ %d [円]</p><h2>\n",total2) printf("<h2><p> [ 合計料金 ]: ¥ %d [円]</p><h2>\n",total + total2) print("<p>山形新幹線の御利用ありがとうございます</p>\n") print("<p>*-------------------------------------------*</p>\n") print("</body>\n") print("</html>\n") (ticket.html) <html> <head> <title>ネットDEチケット<title> <link rel="stylesheet" type="text/css" href="ticket.css"> <h1> <hr width="60%" color="green"size="7"> <center> <center><font size="6">ネットDEチケット 〜山形新幹線〜</font> <hr width="60%" color="green"size="7"> <center> <center><font size="5">*山形新幹線の切符を購入出来ます*</font> <h1> <form method="POST" action="ticket.rb"> <font size = "5"> <li>出発駅 : <select name="start"> <option> 新庄 <option> 大石田 <option> 村山 <option> さくらんぼ東根 <option> 天童 <option> 山形 <option> かみのやま温泉 <option> 赤湯 <option> 高畠 <option> 米沢 <option> 福島 <option> 郡山 <option> 宇都宮 <option> 大宮 <option> 上野 <option> 東京 </select> <p> <font size = "5"> <li>到着駅 : <select name="finish"> <option> 新庄 <option> 大石田 <option> 村山 <option> さくらんぼ東根 <option> 天童 <option> 山形 <option> かみのやま温泉 <option> 赤湯 <option> 高畠 <option> 米沢 <option> 福島 <option> 郡山 <option> 宇都宮 <option> 大宮 <option> 上野 <option> 東京 </select> <p> <input type="submit" value="購入画面へ"> <input type="reset" value="やりなおし"> <p> </form> <body> </html> <center><font size="5"> <font color="#ff0000">※著作権について※</font> <p>このプログラムは、東北公益文科大学 薮田大樹が著作権を保有しています。</p> <p>プログラムの入手・改変・再配布は、自由に行っても構いません。</p> <p>なお、このプログラムの取り扱いによって生じた問題については責任を負いませんので、注意して下さい。</p> <p>このプログラムに対する感想・意見・苦情など言いたいことがありましたら、</p><font> <p>「 <font color="#ff0000">c110191@f.koeki-u.ac.jp </font>」へお願いします。</p> <br> <p><a href="http://roy/~c110191/index.html">トップページへ</a></p> </body> </html> c:実行結果 ネットDEチケット〜山形新幹線乗車券〜 *-------------------------------------------* [ 新庄駅発 ] → [ 東京駅着 ] [ 基本運賃 ]: ¥ 4334 [円] [ 新幹線料金 ]:¥ 10535 [円] [ 合計料金 ]: ¥ 14869 [円] 山形新幹線の御利用ありがとうございます *-------------------------------------------* となる。確かめ算を行うと以下となる pan{c110191}% bc -l [~] (421.4 - 0.0)/2 * 20 + 120 4334.00000000000000000000 pan{c110191}% bc -l [~] (421.4 - 0.0)/2 * 50 10535.00000000000000000000 pan{c110191}% bc -l [~] 4334+10535 14869 計算結果から、このプログラムは正常に作動することが確認できた。 d:考察 授業で使用した、ticket.html、ticket.rbに手を加えた。 open - methodを使用し、ticket.datを開きプログラムを使えるようにした。 本当ならば、JRの切符のように端数を四捨五入し計算したかったが どうしてもならなかった。加えて、所要時間も読み込ませ出そうと 努力したが、今度は所要時間が出ても切符の値段が半分に なってしまうという事態が起き断念せざる負えなかった。 e: ロゴを掲載したアドレス http://roy/~c110191/logo_r2_c110191.png f: r2_c110191.pdfを掲載した広告ページ http://roy/~c110191/advertise2/index.html 3:感想 今回はより工夫を凝らしたプログラムを目指したが、なかなか 上手くいかず結局妥協してしまった。計算の簡略化、所要時間や 距離などもっと出来ることはあると思う。 CGIは良く見るものだし、もっと勉強していきたい。 4:参考文献 (山形新幹線の情報を調べるのに参考にしたページ) 山形新幹線 時刻表 - goo 路線 http://transit.goo.ne.jp/timetable/area_code/7/line_code/%BB%B3%B7%C1%BF%B7%B4%B4%C0%FE/ 山形新幹線 ウィキペディア http://ja.wikipedia.org/wiki/%E5%B1%B1%E5%BD%A2%E6%96%B0%E5%B9%B9%E7%B7%9A (プログラムを作るのに参考にしたページ) 西村まどか 基礎プログラミング II 第 8 回 (ことはじめ) 「Ruby の print() 文」 http://roy/~madoka/2011/r2/08/r2_08_11_appendix_01_rubyprint.html 基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) 「Hash の作りかた」 http://roy/~madoka/2011/r2/04/r2_04_14_review_01_hash.html Royサーバー Webページ作成の基礎 http://roy/web/index.html 5:添付ファイル