第 9 回 CGI ことえらび レポート課題 氏名:土屋哲平 学籍番号:c1111085 語学クラス:中国語3 コース:政策マネジメント 1.筆記問題 A ラジオボタンはいくつかの候補の中から1つだけを選ぶ方法である。 講義ノートを参考にラジオボタンの仕組みを考える。 input typeを"radio"にすることでラジオボタンを使うことができる。 nameでラジオボタンの名前を指定。名前を付けることで使用するラジオボタンを 区別することが出来る。 valueでCGI変数の値を指定。これにより、ユーザーが選択した値をプログラムに 送ることができる。 これをプログラムだと 自由席 指定席 スーパーシート と表すことが出来る。 checkedは input tagにいれると、既定値として設定できる。 ここでは指定席を既定値に設定している。 B チェックボックスは、ラジオボタンとは異なり、いくつかの選択肢からいくつか 選択する方法である。 これもAの問題と同様に講義ノートを参考に仕組みを考える。 チェックボックスは、input typeを"checkbox"とすることで使用することができ る。 nameではラジオボタンと同様にチェックボタンの名前を指定することが出来る。 valueもラジオボタンと同様にCGI変数の値を指定する。ユーザーが選択した値を プログラムに送ることができる。 プログラムでは 新鮮魚介カルパッチョ 高級ソーセージ盛合 わせ 最高級牛肉ステーキサラダ と表すことが出来る。 ここでは既定値を高級ソーセージ盛合わせに設定している。 C 掲載URL:http://roy/~c111108/adv2/char_r2_c111108.png キャラクタ名「るびギタリスト」 キャラクタの解説 自分はバンド部に所属しているのでギタリストをモチーフにしてみました。 作画するにあたり、顔のパーツはコピーで使い回したり、曲線を上手く利用して 書いたり、なるべく多くのツールを使用して書くように心掛けた。 ギターのボディにRubyの文字を入れたのは愛嬌です。 ・筆記問題の参考文献 webページ 西村まどか 2012年度基礎プログラミングII 講義ノート 第9回 CGIことえらび 「ラジオボタンの作り方」 http://roy/~madoka/2012/r2/09/r2_09_04_appendix_01 radio.html 第9回 CGIことえらび 「チェックボックスの作り方」 http://roy/~madoka/2012.r2.09/r2_09_05_appendix_02_checkbox.html 西村まどか 2012年度基礎プログラミングI 講義ノート 第12回 自由課題コンペティション/画像作成 「描画ソフト」 http://roy/~madoka/2012/r1/12/r1_12_02_theme_02_painttool.html 第12回 自由課題コンペティション/画像作成 「日本語の出し方」 http://roy/~madoka/2-12/r1/12/r1_12_03_theme_03_japanese.html 2.プログラム問題 掲載したHPのURL:http://roy/~c111108/rubycgi/fork_c111108.html A. i.考えた設定 webページに訪れた人数をカウントするプログラムを作成した。 URLはhttp://roy/~c111108/rubycgi/count.rb ii.作成したプログラム #!/usr/bin/env ruby #coding: euc-jp require'cgi' #CGIの使用を宣言 cgi = CGI.new(:accept_charset => "EUC-JP") #EUC-JPで受け取る print("Content-type: text/html; charset=EUC-JP\n\n")#EUC-JPで書きこ む arv = cgi["arrive"]#arvはcgi配列のarrive number = 0 #numberの初期値は0 open("number.txt","r") do |read| #openでnumber.txtを開き、"r"で読みこむ。 while data = read.gets #読みこんだものをreadにしまう。 if /(\d+)/ =~data #データの種類が数値であった場合 number = $1.to_i #読みこんだデータをnumberとする end end end print("\n") print("\n") print("カウンター\n") print("\n") print("\n") print("

カウンターのページにようこそ!!

\n") printf("

あなたは%d人目の訪問者です。

\n",number) print("\n") print("\n") number += 1 #numberに+1する open("number.txt","w") do |write| #openでnumber.txtを開き、"w"で書きこむ write.printf("%d\n",number) #訪問者数を書き換える end iii.もとにしたプログラムからの変更点 レポート課題のページに掲載されていたプログラムを参考に プログラムを作成した。 変数名を変更。テキストファイルを付けたし、カウントされるようにした。 iv.実行結果 ・Ktermでの実行画面 pan{TSUCHIYA Teppei}% ./count.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-JP カウンター

カウンターのページにようこそ!!

あなたは5人目の訪問者です。

・web上での実行画面 カウンター

カウンターのページにようこそ!!

あなたは6人目の訪問者です。

v.考察 Ktermとweb上ではどちらも正しく表示することが出来た。 最初に実行したときは、上手く表示することが出来なかった。その理由は number.txtをKterm上でchmod o+wをしていなかったためである。 テキストファイルをchmod o+wすることで外部からも書き込みが可能になる。 なぜカウンターの数が増えていくのかというと、count.rbを実行するたびに、 number.txtの数が1足したものに書き換えられたからである。 これはプログラムの最後のopen("number.txt","w")の部分で1足されたものを テキストファイルに上書きしているため、アクセスするたびに数が+1されていく。 上記の理由により、カウンターが動くことが可能になる。 vi.参考文献 webページ 西村まどか 2012年度基礎プログラミングII 講義ノート 第 9 回 CGIことえらび 「File Openを使ってみよう」 http://roy/~madoka/2012/r2/09/r2_09_08_theme_03_fileopen.html 「レポート課題」内の参考プログラム http://roy/~madoka/2012/r2/09/rpt/rpt.html http://roy/~madoka/2012/cgisrc/counter.rb B. i.考えた設定 webページ上で計算させる数値を入力させるkeisan.htmlと 入力された数値を計算するkeisan.rbを作成した。 掲載URL:http://roy/~c111108/rubycgi/keisan.html http://roy/~c111108/rubycgi/keisan.rb ii.作成したプログラム 結果を表示する部分(keisan.rb) #!/usr/bin/env ruby #coding: euc-jp require'cgi' cgi = CGI.new(:accept_charset => "EUC-JP") print("Content-type: text/html; charset=EUC-JP\n\n") kazu1 = cgi["suti1"] #kazu1はhtml上のsuti1 kazu2 = cgi["suti2"] #kazu1はhtml上のsuti2 sisoku = cgi["enzan"]#sisokuはhtml上のenzan print("\n") print("\n") print("計算結果表示\n") print("\n") print("\n") if sisoku == "tasu" #sisokuがtasuなら answer = kazu1.to_i+kazu2.to_i #answerはkazu1とkazu2を足した数 elsif sisoku == "hiku" #sisokuがhikuなら answer = kazu1.to_i-kazu2.to_i #answerはkazu1からkazu2を引いた数 elsif sisoku == "kakeru" #sisokuがkakeruなら answer = kazu1.to_i*kazu2.to_i #answerはkazu1とkazu2をかけた数 else #それ以外なら answer = kazu1.to_i/kazu2.to_i #answerはkazu1をkazu2で割った数 end #if文の終了 print("

計算結果表示

\n") if sisoku == "tasu" #sisokuがtasuのとき printf("

%d + %d = %d

\n",kazu1,kazu2,answer)#計算結果の表示 elsif sisoku == "hiku" #sisokuがhikuのとき printf("

%d - %d = %d

\n",kazu1,kazu2,answer)#計算結果の表示 elsif sisoku == "kakeru" #sisokuがkakeruのとき printf("

%d * %d = %d

\n",kazu1,kazu2,answer)#計算結果の表示 else #それ以外の場合 printf("

%d / %d = %10.2f

\n",kazu1,kazu2,answer.to_f) #計算結果の表示 end #if文の終了 print("\n") print("\n") 入力部分(keisan.html) 計算プログラム

計算プログラム