第8回 基礎プログラミング II レポート課題 再提出 氏名:笹原千珠子 学籍番号:c109080A 語学クラス:英語3 コース(系):政策マネジメント ---- 再提出での変更点 ・プログラムの変更 ・説明の書き変え ・感想の書き変え ・使用した rikuusaisen.dat の添付 1. A. 〜.newで Hash のようなものを新しく作るところや、arrive という Hash の変数 のようなものがあるところが似ている。 それと、ひとつの変数に複数の値を結びつけて呼び出すことができるところが似 ていると思った。 B. .htaccess というディレクトリの中に .html や .rb をつくることで CGI と して機能する。そのためには .hataccess が無ければいけない。 .hataccess の中にある .rb は CGI になり、.html に書いた部分がページに表 示されユーザに入力してもらう部分になる。この3つがそろわないと機能しない。 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 文で表示したい文を表示する。 参考文献:ウェブページ 基礎プログラミング II 第8回 CGIことはじめ 第 8 回目次 講義ノート 西村まどか http://roy/~madoka/2010/r2/08/ 2. A. a. ドロップダウンメニューで発車駅、到着駅を選ぶとその距離にあった運賃が表 示された乗車券が出てくる仕組みにした。 b. ticket.html オンライン券売機

陸羽西線 チケット購入ページ

ticket.rb #!/usr/koeki/bin/ruby $KCODE = 'e' #日本語の文字コード require 'cgi' # cgi を使う宣言 cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-jp\n\n") #日本語のコードを使う lav = cgi["leave"] #ドロップダウンメニューで選択したものが入る arv = cgi["arrive"] tim = cgi["time"] kyori = Hash.new open("rikuusaisen.dat", "r") do |eki| #ファイルオープンで rikuusaisen.dat を開く while ichi = eki.gets if /(\S+)\s+(\d+\.\d)/ =~ ichi #もし文字列、空白文字列、小数点を含む数字の場合 kyori[$1] = $2.to_f #距離を to_f を使い文字ではなく数字として読み込ませる end end end hajime = kyori[lav] # hajime には出発駅の距離が入る oriru = kyori[arv] # oriru には到着駅の距離が入る nagasa = hajime - oriru #出発駅の距離から到着駅の距離を引く if nagasa < 0 #もし距離の差がマイナスになってしまったら nagasa *= -1 # -1をかけてプラスにする end p0 = 120 #初乗り料金 grid = (nagasa + 0.5).to_i #四捨五入 total = p0 + grid * 20 #初乗り料金に距離の差と20を掛けたものを足して料金の計算 print("\n") #以下 html で表示される部分 print("\n") print("陸羽西線 チケット\n") print("\n") print("\n") print("

陸羽西線 乗車券

") print("

\n") print("出発駅・到着駅") print("
") printf("%s -- %s間\n", lav, arv) #選んだ 発車駅と到着駅が入る printf("%d円\n", total) #上で計算した合計金額が入る print("

\n") print("発売当日限り有効 下車前途無効") print("\n") print("\n") c. 第8回でつくった ticket.html、ticket.rb をもとにファイルオープンで rikuusaisen.dat のファイルを開き、データを利用した。 そのデータにある距離を使って到着駅と発車駅間の距離を出して料金を求めた。 距離の差がマイナスになってしまう組み合わせがあるが、そのときは -1 をかけることで プラスになるようにした。 細かい距離のまま計算すると料金も半端な料金になるので grid = (nagasa + 0.5).to_i # nagasa はふたつの駅の間の距離 のようにして四捨五入した。 参考文献:ウェブページ 基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング 「券売機のしくみ」 (講義ノート) 西村まどか http://roy/~madoka/2010/r1/07/07_13_theme_11_vendingmachine.html 基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング 「走行距離を求めるには」 (講義ノート) 西村まどか http://roy/~madoka/2010/r1/07/07_14_theme_12_distance.html 基礎プログラミング II 第8回 CGIことはじめ 第 8 回目次 講義ノート 西村まどか http://roy/~madoka/2010/r2/08/ 2009年度の先輩方のページ 基礎プログラミング II 第08回 CGI ことはじめ レポート講評 西村まどか http://roy/~madoka/2009/r2/08/crt.html d. 始発を新庄駅にし、到着駅を余目にしてみると、 pan{c109080}% ./ticket.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) leave="新庄駅" arrive="余目駅" Content-type: text/html; charset=EUC-jp 陸羽西線 チケット

陸羽西線 乗車券

出発駅・到着駅
新庄駅 -- 余目駅間 980円

発売当日限り有効 下車前途無効 e. 上の結果で、料金は 980円と出たが、実際に計算してみる。 pan{c109080}% bc -l [~/public_html/rubycgi] 0.0 - 43.0 #新庄駅の距離 − 余目駅の距離 -43.0 -43.0 * -1 # -1 をかけてプラスにする 43.0 120 + 43.0 * 20 #初乗り料金 + 駅間の距離 * 追加料金 980.0 となり計算はあっている。 この例では距離を四捨五入しなくても答えが出たが、実際は四捨五入されている。 B. 作ったロゴを張り付けたページ http://roy/~c109080/index.html ロゴのアドレス http://roy/~c109080/logo_r2_c109080.png 参考文献:ウェブページ 基礎プログラミング I 第11回 自由課題準備 / ロゴ作成 第 11 回目次 講義ノート 西村まどか http://roy/~madoka/2010/r1/11/ C. pdf ファイルに直接飛ぶアドレス http://roy/~c109080/advertise2/r2_c109080.pdf pdf ファイルが張り付けてあるページのアドレス トップページ http://roy/~c109080/index.html 広告ページ http://roy/~c109080/advertise2/index.html 3. 料金の計算がわからなかったが、最終的に完成させることができてよかった。 四捨五入のところも、これが四捨五入のための計算だと意味も考えず使っていた が、どうしてこのように書くのか分かったと思う。 今回は特に意味がわからずとりあえず使えばいいという感じでやっていたので、 どこが間違っているのかすら分からなかったが、ひとつずつ理解して行くことで 何とかどこがおかしいのかくらいは分かった気がする。 今更だが、.html ではページに直接色をつけられるのに、.rbではできないことに気付い た。たぶん css を使えばできると思うので余裕があったら色もつけてみたい。 共同学習者:金田麻美