第 8 回 ことはじめ レポート課題 
氏名:加藤恭平
学籍番号:c1100549
語学クラス:英語2
コース(系):政策マネジメント
1.筆記問題
  A.CGIは質問に対して解答者が答えたものを受け取り、問と答えを対にする。
    これがHashでいうところのKeyとvalue関係と似ていると思った。
  
  B.「hataccess」 は保存したディレクトリの中の .rb ファイルのみをCGIとし
     て読みこむ。
    「.html」 はホームぺージを表示させる。また、「.rb」は「.html」で入力
    したものを綺麗に並べて表示するといった結果を出すことができる。
  C.
     	  
    
    
        # CGI変数の 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)考えた設定
   出発駅と到着駅を選択し、乗車券を発行するCGI(ticket.rb ticket.html)
  b)作成したプログラム
#!/usr/koeki/bin/ruby
$KCODE = 'e'                  # 文字コードの設定。この場合は EUC コードで漢字  
require 'cgi'                 # cgiの実行を要求
cgi = CGI.new("html4")        #  html4 に準拠してCGIを実行
print("Content-type: text/html; charset=EUC-jp\n\n")
sta = cgi["start"]            # Ruby に CGIでもらってきた値を代入(staになる)
arv = cgi["arrive"]           # Ruby に CGIでもらってきた値を代入(arvになる)
station = Hash.new            # 新たに配列stationを作成
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となる
p arv  # Ruby の変数に入ったか確認
# ここからhtmlタグを表示
print("\n")             # html文を開始する  
print("\n")             # headを書きはじめる  
print("\t発券結果\n")  # ページのタイトル 
print("")
print("\n")            # head終了
print("\n")             # 本体を書きはじめる
if sta == arv                 # 出発駅と到着駅が同じ場合
  print("")               # 大見出し   
  print("!エラーが発生しました!") # エラーメッセージを表示
  print("
")              # 大見出し終了
  print("出発駅と到着駅が同じに選択されています。
") # エラーの解説
  print("前のページにブラウザバックして再度実行して下さい。") 
  print("\n")             # エラーメッセージを終了     
else                          # 出発駅と到着駅が違うとき     
  print("乗車券
----------------------------------
")
  printf("%s → %s間\n
",sta,arv)    #区間表示
  if station[sta] > station[arv]    # 出発駅から庄内駅までの距離が長いとき
    printf("走行距離 %3.1f km",(station[sta] - station[arv]).to_f)
  # 出発駅と庄内駅の距離から到着駅と庄内駅の距離を引き、小数に変換する。 
   printf("運賃 %d 円
",120+(station[sta] - station[arv]).to_i/2*20)
  # 運賃は初乗り120円で、2kmごとに20円足されるので、2で割って20をかける
else                          # 到着駅から庄内駅までの距離が長いとき  
  printf("走行距離 %3.1f km
",(station[arv]-station[sta]).to_f)  
  # 到着駅と庄内駅の距離から出発駅と庄内駅の距離を引き、小数に変換する。 
  printf("運賃 %d 円
",120+(station[arv]-station[sta]).to_i/2*20)
  # 同じ理由で2で割って20をかける
 end                          # ifに対するend
print("自由席\n")             # 共通で表示されるもの  
print("
\n")                
print("----------------------------------
発券から3日間有効
") 
 # 区切り+段落文
  print("Ruby鉄道
")       # 段落文終了
end
print("\n")            # 本体を描き終わる  
print("\n")            # html文を終了する 
-------------------------------------------------------------------------------
以下はticket.htmlを貼り付ける
券売機
券売機
c)元にしたプログラム
授業中に作成したticket.rbおよびticket.htmlを改良し作成した。
d)実行結果
pan{c110054}% ./ticket.rb                               [~/public_html/rubycgi]
(offline mode: enter name=value pairs on standard input)
start="羽前前波"
arrive="南野"
Content-type: text/html; charset=Euc-jp
        チケット
乗車券
----------------------------------
羽前前波 → 南野間
走行距離 28.3 km
運賃 400 円
自由席
----------------------------------
発券から3日間有効
Ruby鉄道
e)考察
royで選択した通りにウェブの方でも入力してみる。
乗車券
----------------------------------
羽前前波 → 南野間
走行距離 28.3 km
運賃 400 円
自由席
----------------------------------
発券から3日間有効
Ruby鉄道
となった。
bc -lで確かめ算を行う
羽前前波と南野間は28.3kmであるので、
pan{c110054}% bc -l                                     [~/public_html/rubycgi]
120+(28*10)
400
quit
となり、プログラムの計算結果と一致する。
よってこのプログラムは正しいといえる。
A 券売機へのリンクを貼った作品広告ページ
「http://roy/~c110054/advertise2/」
  券売機のページ
「http://roy/~c110054/rubycgi/ticket.html」
B バナーへのリンクを貼ったトップページ 
「http://roy/~c110054/」
  バナーのページ
「http://roy/~c110054/banar.html」
C.PDFファイルへのリンクを貼った広告ページ
 「http://roy/~c110054/advertise2/r2_c110054.pdf」
3.感想
今回は作業する内容が多く、課題の提出までにかなり時間がかかってしまったが、
GINPの使用方法やPDFファイルへの変換など忘れていた内容が復習できたので良
かった。
券売機の完成にも思ったより時間を要したので次回までにもう一度今回の授業要ページを
見直し、理解を深めておきたいと思った。
-------------------------------------------------------------------------------
参考文献
基礎プログラミング II 第 8 回 (ことはじめ) 「基本の CGI ホームページの作りかた」
http://roy/~madoka/2011/r2/08/r2_08_06_theme_06_firstcgi.html
著者 西村まどか
基礎プログラミング II 第 8 回 (ことはじめ) 「CGI スクリプトの解説」 
http://roy/~madoka/2011/r2/08/r2_08_07_theme_07_actionprogram.html
著者 西村まどか
基礎プログラミング II 第 8 回 (ことはじめ) 「動作プログラム作成」 
http://roy/~madoka/2011/r2/08/r2_08_08_theme_08_ruby.html
著者 西村まどか
基礎プログラミング II 第 8 回 (ことはじめ) 「Ruby で CGI を作る宣言」 
http://roy/~madoka/2011/r2/08/r2_08_09_theme_09_declare.html
著者 西村まどか
2010年度 基礎プログラミング II 第8回 CGIことはじめ 第 8 回 レポート講評 
http://roy/~madoka/2010/r2/08/rpt/c108203.txt
著者 西村まどか
     昨年度の先輩