第8回 基礎プログラミング II レポート課題 氏名:布川大地 学籍番号:c1091230 語学クラス:英語3 コース(系):政策 1、筆記問題 A、Hash は key と value を使用し、任意の値に任意の値を結び付けて保存することが出来る変数である。Hashは key と valueがペアになって代入され実行する。 CGIは HTML内にデータ入力エリアを配置し、あらかじめ定められていた処理を行うことにより、結果が表示されるという特別な変数である。いくつかの分担プログラムとその連係動作から成り立っている。なので、CGI変数と Hash変数の似ている点は、最初に必要事項を定めておき、それらを結び付けることでプログラムが実行されるという点が似ている。 B、ディレクトリでCGIを利用する宣言のためにhtaccessを作成する。ユーザーがデータを入力するためにHTML文書の*htmlを作成する。入力したデータを受け取って処理するためのプログラム *rbを作成することで CGIのしくみが成り立つ。 C、 HTML文書で CGI変数を渡すには *.html に form と呼ばれる tagを作る必要がある。
この作業をすることでCGI変数を渡すことが出来る。 D、 *.rbでCGI変数を受け取って HTML文書にするしくみはどのようになっているか、必要な行を挙げて説明せよ。 *rbでCGI変数を受け取って、HTML文書にするには受け取ったデータを使うための 宣言をする必要がある。普段は #!/usr/koeki/bin/ruby と表記するところをCGI 変数を用いる場合には、#!/usr/bin/env ruby とする必要がある。次に受け取ったデータを使う宣言をする。 require 'cgi' CGI変数 =CGI.new("html4") print("Content-type: text/html; charset=EUC-JP\n\n") と入力し、作った CHIスクリプトの名前定義のためにHashを用いる。 実行するためにprint文 で HTML 文書を出力することでプログラムが実行され、 HTML文書が完成する。 2、プログラム問題 A、 ・設定 山形駅から新庄駅までの料金を出すプログラムです。 ・データ本体 山形 0 北山形 2 羽前千歳 5 南出羽 7 漆山 8 高擶 10 天童 13 乱川 16 神町 19 さくらんぼ東根 22 東根 24 村山 26 袖崎 34 大石田 40 北大石田 44 芦沢 47 舟形 53 新庄 62 ・プログラム本体 #!/usr/koeki/bin/ruby require 'cgi' # CGI を使う cgi = CGI.new("html4") # CGI を HTML 文書に使う data = Hash.new # データの Hash を使う print("Content-type: text/html; charset=EUC-jp\n\n") #日本語コードの定義 def cost(h,o) # h = 出発駅、o = 到着駅 if h > o # もし、hazimeの値 が owariの値 より大きい時 (h - o) / 2 * 20 + 120 # (hazime値 - owari値) / 2kmごと * 20円 + 基本料金 elsif h < o # もし、hazimeの値 が owariの値 より小さい時 (o - h) / 2 * 20 + 120 # (owari値 - hazime値) / 2kmごと * 20円 + 基本料金 end end lea = cgi["leave"] # CGI から取って、leave を lea に変える arv = cgi["arrive"] # CGI から取って、arrive を arv に変える。 open("ticket.dat","r") do |eki| while line = eki.gets if/(\S+)\s+(\S+)/ =~ line data[$1] = $2.to_i # データ内の2番目を数値とし、data[$1] とする end end end hazime = data[lea] # データから取りだした出発駅の部分を hazime とする owari = data[arv] # データから取りだした出発駅の部分を owari とする print("\n") #HTML文書 print("\n") print("\t券売機\n") print("\n") print("\n") print("------------------------------------------

\n") printf("

奥羽本線Yamagata Train

\n") printf("

山形急行特急券 %s -- %s\n", lea, arv) printf("

運賃: %d [円]

\n", cost(hazime,owari)) print("------------------------------------------

\n") print("\n") print("\n") ・ホームページ http://roy/~c109123/rubycgi/ticket.html オンライン券売機

☆券売機☆

著作権

© c1091230 布川大地

連絡先

c109123@e.koeki-u.ac.jp

トップへ

・元にしたプログラム 授業で使った ticket.rb を改良しました。 ・実行結果 「行きの場合」 ------------------------------------------ 奥羽本線Yamagata Train 山形急行特急券 山形 -- 天童 運賃: 240 [円] ------------------------------------------ 「帰りの場合」 ------------------------------------------ 奥羽本線Yamagata Train 山形急行特急券 新庄 -- 天童 運賃: 600 [円] ------------------------------------------ ・考察 うまく実行できた。もうちょっと改良すれば、いろいろできそうだった。 B、 http://roy/~c109123/logo_r2_c109123.png C、 http://roy/~c109123/advertise2/ このページに掲載しました。 ●参考文献 えきから時刻表 ホーム http://www.ekikara.jp/top.htm ●感想 今回はやることがたくさんあったので、大変だった。プログラムもうまくできた のでよかった。