第8回 基礎プログラミング II レポート課題 氏名: 池田博哉 学籍番号: c1090147 語学クラス: 英語3 コース(系): 地域共創 1.筆記問題 A. html文書にあらかじめ入力されたデータをプログラムに持ってくるという部 分が、Hashのプログラム内に入力されたデータをそのまま持ってくる部分と 似ていると思いました。 B. .htaccess で .rb と付いたプログラムを CGI として扱う。 .html は選択肢を表示し、その結果を .rb で表示するようになっている。 C.
# actionで結果を表示する先を指定

# .rb に 選択した結果を渡す # 選択した結果を reset する

・form タグで、次のページを指定 ・select タグで、CGI専用の名前を決める ・option タグで、実際に表示される選択肢を決める ・input タグで、.rbに選択結果を渡す 選択結果をやり直す D. require 'cgi' # CGI を使う cgi = CGI.new("html4") # CGI を html文書に使う print("Content-type: text/html; charset=EUC-jp\n\n") # 日本語コードの定義 arv = cgi["arrive"] # CGI から取ってくるうち、arrive の部分を arv にする # これにより、htmlから取ってきたものを使用できるよう # になる 2.プログラム問題 A.◯考えた設定 酒田駅から鶴岡駅へ行く人のための発券システム。データ内の距離は小数 第1位で四捨五入したもので料金を計算することにした。 アドレス「http://roy/~c109014/rubycgi/ticket.html」 ◯元にしたプログラムからの変更点 講義で作成した「ticket.rb」 前期レポート課題「open_battery.rb」「battery.dat」 ・プログラム名はそのままで、中身を改良 ・データを開いて、そこから取ってくる文を追加 ・def 文を追加し、各計算を行うようにした ・実行したページをチケットらしくするため、「-」を大量に追加 ◯データ本体「ticket.dat」 #駅 #酒田駅からの距離 酒田 0 東酒田 3 砂越 7 北余目 10 余目 12 西袋 16 藤島 21 鶴岡 28 ◯プログラム本体「ticket.rb」 -------------------------------------------------------------------------------- #!/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 ryokin(h,o) # h = 出発駅、o = 到着駅 if h > o # もし、hazimeの値 が owariの値 より大きい時 120 + (h - o) / 2 * 20 # 基本料金 + (hazime値 - owari値) / 2kmごと * 20円 elsif h < o # もし、hazimeの値 が owariの値 より小さい時 120 + (o - h) / 2 * 20 # 基本料金 + (owari値 - hazime値) / 2kmごと * 20円 end end def kyori(ha,ow) # h = 出発駅、o = 到着駅 if ha > ow # もし、hazimeの値 が owariの値 より大きい時 ha - ow # hazime までの距離 - owari までの距離 elsif ha < ow # もし、hazimeの値 が owariの値 より小さい時 ow - ha # hazime までの距離 - owari までの距離 end end str = cgi["start"] # CGI から取ってくるうち、start の部分を str とする arv = cgi["arrive"] # CGI から取ってくるうち、arrive の部分を arv とする open("ticket.dat", "r") do |station| while line = station.gets if/(\S+)\s+(\S+)/ =~ line data[$1] = $2.to_i # データ内の2番目を数値とし、data[$1] とする end end end hazime = data[str] # データから取り出した出発駅の部分を hazime とする owari = data[arv] # データから取り出した到着駅の部分を owari とする print("\n") print("\n") print("\tチケット\n") print("\n") print("\n") print("

------------------------------------------------------------

\n") print("

◎乗車券◎

\n") printf("

\t出発駅:%s -- 到着駅:%s

\n", str, arv) printf("

\t料金: %d [円]

\n", ryokin(hazime,owari)) printf("

\t走行距離: %d [km]

\n", kyori(hazime,owari)) print("

\n") print("

どうぞ、快適な旅をお楽しみ下さい。

\n") print("

------------------------------------------------------------

\n") print("\n") print("\n") -------------------------------------------------------------------------------- ◯html本体「ticket.html」 -------------------------------------------------------------------------------- オンライン券売機

乗車発券システム

「 酒田〜鶴岡 間 」







※著作権について※

このプログラムは、東北公益文科大学 池田博哉が著作権を保有しています。

プログラムの入手・改変・再配布は、自由に行っても構いません。

なお、このプログラムの取り扱いによって生じた問題については責任を負いませんので、注意して下さい。

このプログラムに対する感想・意見・苦情など言いたいことがありましたら、

c109014@e.koeki-u.ac.jp 」へお願いします。


トップページへ

-------------------------------------------------------------------------------- ◯実行結果 ------------------------------------------------------------ ◎乗車券◎ 出発駅:酒田 -- 到着駅:鶴岡 料金: 400 [円] 走行距離: 28 [km] どうぞ、快適な旅をお楽しみ下さい。 ------------------------------------------------------------ ・Ktermで計算確認 pan{c109014}% bc -l [~] 120 + (28 - 0) / 2 * 20 400.00000000000000000000 ------------------------------------------------------------ ◎乗車券◎ 出発駅:藤島 -- 到着駅:東酒田 料金: 300 [円] 走行距離: 18 [km] どうぞ、快適な旅をお楽しみ下さい。 ------------------------------------------------------------ ・ktermで計算確認 pan{c109014}% bc -l [~] 120 + (21 - 3) / 2 * 20 300.00000000000000000000 ◯考察 計算は合っていたが、データ本体で先に四捨五入してから計算したことが 気になった。データ内の数字は小数点まで正確な数値で入力し、プログラ ム本体で四捨五入出来れば、もっと良くなったと思う。 乗車券が実際に表示されるページでは、チケットらしくするために上部と 下部に線を入れた。本当は左右にも線を入れて表示したかったが、 ・ print("

| ◎乗車券◎

\n") と、スペースで空白を空けて実際に実行しても、「|」と「◎乗車券◎」が 隣り合ったままだった。 また、 ・ print("

|\t\t\t\t\t◎乗車券◎\t\t\t\t\t\t

\n") と、print文で間隔を空けるようにしてみたが、半角英数字の1文字分しか 空白が出来なかった。 おそらく、html の p文 扱いになっているので、スペースで空白を作って も文字と文字が詰められてしまうのではないかと思う。 B.ロゴを掲載したアドレス 「http://roy/~c109014/logo_r2_c109014.png」 C.「r2_c109014.pdf」を掲載したページ 広告ページ「http://roy/~c109014/advertise2/」 3.感想 ロゴは前期のチームで作って以来だったので、楽しみつつ復習も出来ました。 CGIは初めてなので大変だったところが沢山あったけれど、なかなか便利なも のだと思いました。一番大変だったところが、print文のなかにhtml文を入力 していくところで、実際にホームページではどんな風に表示されるか想像しな がら取り組みました。 CGIはまだまだ奥が深いと思うので、次回も頑張っていきたいです。 4.参考文献 ◯えきから時刻表 ホーム 「http://www.ekikara.jp/top.htm」 共同学習者 ◯遠藤孝之 ◯藤井駿 ◯佐藤裕康 ◯布川大地