第10回 ことおぼえ レポート課題 氏名:名和 大翔 学籍番号:C1101678 語学クラス:英語6 コース(系):政策マネジメント 1.筆記問題 A.pstore を使った CGI の使い方について CGI が起動する rubycgi の中に pstore という directory を作り、それだけを 第三者書き込み可能とする。 % mkdir pstore # pstore というdirectory を作成する % chmod o+w pstore # psrore のファイルの下は全て書き込み可能とする この中に入力されたデータをだして、データベースにデータをしまうプログラム を作る。データの名前を sales.db とする。 % touch sales.db # データファイルを作成する % chmod o+w sales.db # 書き込み可能とする データベースにしまったデータを書き出すプログラムを sales.rb とする。 % chmod o+w sales.rb # プログラムから得た値を機械が書き込みできるようにする % chmod +x sales.rb # プログラムを実行可能にする ・プログラム部分 sales.rb #!/usr/bin/env ruby # ruby を動かす宣言 $KCODE ='e' require'cgi' # CGI を使う require'pstore' cgi = CGI.new("html4") # CGI を HTML 文書に使う db = PStore.new("./pstore/sales.db") # 日本語コードの定義 t = Time.now.to_i print("Content-type: text/html; charset=EUC-JP\n\n") station = cgi["sales"] # Ruby に CGI でもらってきた値を代入 db.transaction do if db == nil db[t] = Hash.new end # if station == "東酒田" # p fare = 120 # else # p fare = 240 # end db[t] = [station,fare] end p db[t] ・解説 CGIライブラリの他に、PStoreライブラリを使用して、CGI変数をデータベースに しまう。 require'pstore' # 受け取ったデータをためる宣言をする db = PStore.new("./pstore/sales.db") # データベースの作成をする
# データを入力させる部分 ・データベースに入力する部分 db.transaction do # 入力されたデータを読みこんで出力する部分 if db == nil # dbの情報がないとき、つまり新規のときの場合に実行する db[t] = Hash.new # 時間を Key とした Hash 作成 end # if - end のend db[t] = [station,fare] # 時間と駅名、料金をHashのセットにする あとは、open -- end でファイルに書き込むCGIと同じ構造であり、sales.html で入力をさせて、sales.rbで結果を出力し、sales.dbに書き込んでいる。 2.プログラム問題 CGI作品の最高傑作 作成したもの http://roy/~c110167/advertise2/rubycgi/r2_cgi_best.html http://roy/~c110167/advertise2/rubycgi/r2_cgi_best.rb リンク先アドレス http://roy/~c110167/advertise2/index.html A.考えた設定 CGIを使って、旅行にいきたい場所をユーザーに選ばせて、その場所の情報を簡潔に伝えるプログラムを作った。 B.入力部分 r2_cgi_best.html CGI最高傑作 # ページのカラーを設定

旅行にいこうよ

こんにちわ!

このプログラムはユーザーに旅行に行きたい場所を選んでもらい、
その場所に関した情報を簡潔にお伝えするものです。

# 結果を吐かせるプログラムにデータを送る。

あなたの名前を教えて下さい。

# テキストフィールドを作る。

東京、京都、大阪から、旅行にいきたい所を選んで下さい。

  • 旅行先

    tgif を使って描いてみました。良かったら見て下さい。

    東京タワー
    グリコくん
    金閣寺
    # tgifとリンクを貼った。
  • 知りたいこと!

    観光 グルメ その他

    # ラジオボタンを作る。checkedをいれると最初そこにカーソルがある。

    # プログラムにデータを送る。


  • このプログラムは名和大翔が著作権を保有しています。このプログラムの入 手・実行・改変・再配布は、いずれも無料で自由に行なうことができます。ただしこのプログラムを取り扱うことで生じたいかなる結果に対しても著作権者は断じて責任を負いません。

    このプログラムに対する、感想や助言を大歓迎致します。
    c110167@f.koeki-u.ac.jp
    までメッセージをお送り下さい。ただし、迷惑メール防止のため@は全角にしています。コピーして使用する場合は半角にしてください。

    後期広告ページ

    C.送信結果の表示する部分 r2_cgi_best.rb #!/usr/bin/env ruby # rubyを動かす宣言を行う。 require 'cgi' # 受け取ったデータを使う宣言を行う。 cgi = CGI.new("html4") # cgiをHTML文書に使う宣言を行う。 print("Content-type: text/html; charset=EUC-JP\n\n") # 日本語コードの定義 tabi2 = cgi["tabi"] # 変数をcgiのkeyに設定 topic2 = cgi["topic"] namae2 = cgi["namae"] ninzu = 1 # 初期値を1に設定 open("kiroku.txt","r") do |read| # ファイルを読みこむ動作を行う。 while data = read.gets if/(\d+)/ =~ data ninzu = $1.to_i end end end print("\n") print("\n") print("旅行先\n") print("\n") print("\n") print("\n") printf("

    %sさんは %d 人目の訪問者です

    \n",namae2,ninzu) # 受け取ったデータを表示する。 printf("

    行きたいのは %s ですね

    \n",tabi2) printf("

    知りたい情報は %s ですね

    \n",topic2) if tabi2 == "東京" # if-end を使った。 if topic2 == "観光" print("

    東京といえば、やはり東京タワーですよね。東京タワーとは、昭和33年に建てられた高さ333mのラジオやテレビの電波塔のことです。大展望台は150m、特別展望台は250mあり、夜のライトアップは季節やイベントによって変わるそうです。

    \n") elsif topic2 == "グルメ" print("

    東京は大都市でもあり、いろいろな食文化が集まってますね。ひよこまんじゅうはたまらないおいしさですね!

    ") else print("

    東京ディズニーランドは日本で一番にぎわいのある遊園地といっても過言ではないでしょう。

    ") end elsif tabi2 == "京都" if topic2 == "観光" print("

    金閣寺や銀閣寺、清水寺など多くの寺がありますね。日本の古き時代を想像しますね。

    ") elsif topic2 == "グルメ" print("

    京都といえば、八つ橋ですよね。種類が豊富で悩みますが、普通のが一番おいしいのでは。

    ") else print("

    古き日本を漂わせる雰囲気にのまれたいですね。

    ") end else if topic2 == "観光" print("

    大阪といえば、やはり通天閣ですよね。高さが100mあり、結構高いですね。

    ") elsif topic2 == "グルメ" print("

    やっぱり、タコ焼きにかぎりますね。本場のタコ焼きは絶品だそうです。

    ") else print("

    大阪といえば、昔は天下の台所だといわれていましたが、今はお笑いの台所といえますね。

    ") end end print("\n") print("\n") ninzu += 1 # ここで +1 される。 open("kiroku.txt","w") do |write| # ファイルを読みこむ。 write.printf("%d\n",ninzu) end D.実行結果 ドロップダウンメニューから、東京を選び、ラジオボタンから、観光を選ぶと次 のようになる。 名和さんは 4 人目の訪問者です 行きたいのは 東京 ですね 知りたい情報は 観光 ですね 東京といえば、やはり東京タワーですよね。東京タワーとは、昭和33年に建てら れた高さ333mのラジオやテレビの電波塔のことです。大展望台は150m、特別展望 台は250mあり、夜のライトアップは季節やイベントによって変わるそうです。 次に京都とグルメを選ぶ。名和さんは 5 人目の訪問者です 行きたいのは 京都 ですね 知りたい情報は グルメ ですね 京都といえば、八つ橋ですよね。種類が豊富で悩みますが、普通のが一番おいし いのでは。 # if-endで設定したとおりになっている、つまりこのプログラムはCGIの機能を はたして正常に起動しているといえる。 3.感想 興味あるスクリプト http://roy/~c110158/advertise2/rubycgi/graph.rb 根拠 グラフをつくってるのがすごい。ページのソースを見てもなにをどうすればグラ フがつくれるのかわからない。 4.参考文献 http://roy/~madoka/2011/r2/10/ 基礎プログラミング II 第 10 回 「ことおぼえ」 西村まどか先生 http://roy/~madoka/2011/r2/09/ 基礎プログラミング II 第 9 回 「ことえらび」 西村まどか先生 http://roy/~madoka/2011/r2/08/ 基礎プログラミング II 第 8 回 「ことはじめ」 西村まどか先生 # 作成したものを添付します。