第8回 基礎プログラミング II レポート課題 氏名:吉田瑞恵 学籍番号:C1082030 語学クラス:英語(?) コース(系):社会 1. A.CGIは、質問に対し解答者が答えたものを受け取り answer[1] = "好き" answer[2] = "どちらともいえない" のように、問と答えが対応した形にする。 Hashも同様、keyとvalueが対応する形になっている。 この点がCGIとHashの共通点だと考える。 B. .htaccessで、そのディレクトリ内でのみCGIを使用することを宣言する。 *.htmlで、ウェブページ閲覧者がインターネット上で入力しやすいページを作り *.rbで、解答者により入力された値を処理し、その結果を反映させる。 C.
タグで、ドロップダウン式やラジオボタン式、自由解答式など解答を選択 したり記述したり出来るフォームを作る。 そのフォームに沿って入力された解答は ※(value="ここは自由に変えることができる") を押すことにより、結果を処理するプログラム*.rbに送信される。 D. require 'cgi' ここでCGIを使用するよう要求を出し cgi = CGI.new("html4") 作成者が使いたい形式で使えるようにする print("Content-type: text/html; charset=Euc-jp\n\n") sta = cgi["start"] そして、例えばこのような時は、CGIで"start"として入力されたものを プログラム上ではstaとして取り込むことを宣言する。 2 A. a.設定 授業で扱われたticket.rbおよびticket.htmlを完成に近づけたもの。 架空の私鉄会社「格安鉄道」が発行する電子チケットを作るCGI。 b.作成プログラム #!/usr/koeki/bin/ruby require 'cgi' # CGIの実行を要求。 cgi = CGI.new("html4")# html4 に準拠してCGIを実行 print("Content-type: text/html; charset=Euc-jp\n\n") sta = cgi["start"] # CGIでのstartはstaに arr = cgi["arrive"] # CGIでのarriveはarrに station = Hash.new # 配列の使用を宣言 station["新庄"] = 0.0 station["升形"] = 7.5 station["羽前前波"] = 10.6 station["津谷"] = 12.9 station["古口"] = 17.0 station["高屋"] = 24.8 station["清川"] = 31.1 station["狩川"] = 34.9 station["南野"] = 38.9 station["余目"] = 43.0 station["北余目"] = 45.7 station["砂越"] = 48.7 station["東酒田"] = 52.0 station["酒田"] = 55.2 # ここまでは配列stationの中身。駅名がkey、新庄駅からの距離がvalue # ここからhtmlタグを表示させる print("\n") # html文を開始 print("\n") # 本文より前のheadを書き始める print("\tチケット\n") # ウィンドウ上部に表示されるタイトル print("") print("\n") # head 終了 print("\n") # 本体を書きはじめる。 if sta == arr # もし、発着点で同じ駅が選ばれたら print("

") # 一番見出しで print("※エラー※") # 大きくエラーと表示 print("

") # 一番見出し終了 print("出発と到着で同じ駅が選択されています
") # エラーの詳細 print("前のページに戻り、やり直して下さい") # 前ページに戻ることを促す print("

\n") # エラーメッセージ表示終了 else # 発着駅が違うならば print("

乗車券
----------------------------------

") # 電子チケットを発行する printf("

%s → %s間\n

",sta,arr) # 区間表示 if station[sta] > station[arr] # もし出発駅から庄内駅からの距離が、長いとき printf("

走行距離 %3.1f km",(station[sta] - station[arr]).to_f) # 走行距離を求めるために # 出発駅と庄内駅の距離から到着駅と庄内駅の距離を引く。この距離は小数にする。 printf("運賃 %d 円
",120+(station[sta] - station[arr]).to_i/2 * 20) # 運賃は初乗り120円で、2kmごとに20円足されるので、2で割り10をかける else printf("

走行距離 %3.1f km
",(station[arr]-station[sta]).to_f) # 到着駅の方が庄内駅から遠いとき printf("運賃 %d 円
",120+(station[arr]-station[sta]).to_i/2 * 20) # 到着駅と庄内駅の距離から出発駅と庄内駅の距離を引く。この距離も小数にする end #if station[sta] 〜 文 終了 print("自由席\n") # 以下は共通で表示されるもの print("

\n") # 2番目に大きな見出し終了 print("

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

発券から3ヶ月間有効
") # 段落文 print("格安鉄道

") # 段落文 終了 end # if sta=〜 文 終了 print("\n") # ページ本体書き終了 print("\n") # html書き終了 ##################### ticket.htmlも貼り付ける。 オンライン券売機

格安鉄道 オンライン券売機

  • 出発駅を選択して下さい
  • 到着駅を選択して下さい
  • c.変更点 ・変数を少し変更 ・出発駅も選べるようにした ・背景に色を付けた ・ハッシュを使い、新庄駅からの距離をあらかじめ登録した。 ・その登録しておいた距離で、運賃を求めるようにした。 ・出発駅 = 行先の場合エラーが出るようにした。 ・「初乗り120円で2キロで20円上がる料金」の 計算法が分からなくなったため単純に1キロ10円で上げることにした。 西村先生の出題意図とは違っていると思う。 d.実行結果 roy{c108203}% ./ticket.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) start="新庄" arrive="東酒田" Content-type: text/html; charset=Euc-jp チケット

    乗車券
    ----------------------------------

    新庄 → 東酒田間

    走行距離 52.0 km
    運賃 640 円
    自由席

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

    発券から3ヶ月間有効
    格安鉄道

    e.考察 royで実行したところ、 roy{c108203}% ./ticket.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) start="新庄" arrive="酒田" Content-type: text/html; charset=Euc-jp チケット

    乗車券
    ----------------------------------

    新庄 → 酒田間

    走行距離 55.2 km
    運賃 670 円
    自由席

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

    発券から3ヶ月間有効
    格安鉄道

    となった。 ウェブページでは 乗車券 ---------------------------------- 新庄 → 酒田間 走行距離 55.2 km 運賃 670 円 自由席 ---------------------------------- 発券から3ヶ月間有効 格安鉄道 と表示される。 計算式があっているか確かめる。 新庄酒田間は55.2kmだ。 120+(55*10)=120+550=670 計算式も合っている。 ######################### roy{c108203}% ./ticket.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) start="砂越" arrive="狩川" Content-type: text/html; charset=Euc-jp チケット

    乗車券
    ----------------------------------

    砂越 → 狩川間

    走行距離 13.8 km運賃 250 円
    自由席

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

    発券から3ヶ月間有効
    格安鉄道

    CGIでは 乗車券 ---------------------------------- 砂越 → 狩川間 走行距離 13.8 km運賃 250 円 自由席 ---------------------------------- 発券から3ヶ月間有効 格安鉄道 このように表示された。 念のためもう一例で確かめ算をする 120+(13*10)=250 ↑小数点以下切り捨て なので正しく表示されると言える。 CGIのアドレス http://roy/~c108203/rubycgi/ticket.html B. 作成したロゴ logo_r2_c108203.png 掲載アドレス http://roy/~c108203/ C.r2_c108203.pdf 掲載アドレス http://roy/~c108203/ 今回作成のCGI、ロゴ、pdfはいずれも http://roy/~c108203/ の下部にリンクを張った。 3.感想 インターネットをしていると目にすることが多いCGIだが、それを自分で作るこ とになるとは驚きだ。ネット上には多くの、面白く役に立つCGIがある。 仕組みを理解して、自分でも面白いCGIを作れるようになりたいと感じた。 今回の課題では、電車賃の計算式がどうしても納得のいくものにならなかった。 2kmで20円上がると言うことは、1kmや1.5kmでは料金は上がらず、2kmごとでのみ 20円上がるというのではないだろうかと考えたが、計算式に表せなかったので残 念だ。 今回やっと、プログラムのプリント文でのcssの付け方が分かった。 これから、活用していけたらいいと思う。 4.参考文献 ブログでもだいたい使えるHTMLタグリファレンス http://html.appelle.jp/ 16進数カラー見本:オレンジ〜黄色系 http://html.appelle.jp/2006/01/16_1.html 16進数カラー見本:グリーン系 http://html.appelle.jp/2006/01/16_2.html 基礎プログラミング II 第8回 CGIことはじめ (講義ノート) 「動作プログラム作成」 http://roy/~madoka/2010/r2/08/08_08_theme_07_ruby.html 「試作品のエラーを探せ」 http://roy/~madoka/2010/r2/08/08_13_theme_11_tryanderror.html 作成者:西村まどか