添付し忘れたファイルがあったので、再度送信致します。 第 10 回 CGI ことおぼえ レポート課題 氏名:齋藤允貴 学籍番号:C111069A 語学クラス:英語 2 コース:地域共創コース 1、筆記問題 授業でも使用した、「pstore」とは、第三者が書き込み可能なデータベース を使用したいときに使うものである。 「require 'pstore'」を入力することによって、受け取ったデータを貯める 宣言をすることができる。 「PStore 変数 = PStore.new("データベース.db")」を入力することによっ て、データベースを作成することができる。 データを入力させる部分は、「
tag」で作る。 もし、初めてプログラムを起動したときには、Kterm 上で、 % ls pstore 起動するプログラム.rb となるが、書き込まれたあとは、 % ls pstore 起動するプログラム.rb データベース.db となる。 プログラムには、 「PStore 変数 = PStore.new("データベースファイル名.db") 」を用いてデー タベースを書き込ませる。表示させるときには、毎度このデータベースを呼 び出し、起動プログラムに書き込ませる。その起動プログラムに書き込ませ るには PStore 変数を使用する。 2、プログラム問題 A、作成したページ 入力ページ http://roy/~c111069/rubycgi/r2_cgi_best.html 結果を表示するページ http://roy/~c111069/rubycgi/r2_cgi_best.rb (1)考えた設定 今回は、新聞などによくついている、家電のチラシを参考にして、あらか じめ選んでおいた家電を利用者に選んでもらい、その家電の情報を分かり やすく、結果を表示するページに掲載するプログラムを作成した。 (2)作成したプログラム 入力部分と結果を表示するページは以下のように作成した。 入力ページ # html の始まり # head の終わり 家電紹介ページ # ウィンドウに表示されるタイトル # css を使って色をつける。 # head の終わり # body の始まり

家電紹介コーナー

家電プレゼンター サイ堂

# 一番の見出しでタイトルを表示させる。
# 利用者にデータを入力させるため、「form」を用いて 作成する。また、結果を吐かせるプログラムにデータ を送る。

最近、気になる家電はありますか? お得な家電が目白押しだよ!!

オススメ商品

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

# テキストフィールドを使って記入欄を作成する。

今気になっている家電はありますか?

# 入力されたものを 「r2_cgi_best.rb」 に送る。 # 入力したものをすべて消す。

# form の終わり

著作権について

このプログラムでは東北公益文科大学 齋藤允貴 が著作権を保有しています。

このページを入手、実行したり、自分なりにアレンジするのは自由ですが、 取り扱った結果に対しては一切、責任を負いません。 自己責任でお願いします!!

このページに関するご意見・ご感想がありましたら、 下記のアドレスまでお願いします。

c111069@e.koeki-u.ac.jp

家計診断プログラムへ トップへ

# body の終わり # html の終わり 結果を表示するページ #!/usr/bin/env ruby #coding: euc-jp require'cgi' # CGI を使う宣言 cgi = CGI.new(:accept_charset => "EUC-JP") # CGI は EUC-JP で受け付ける。 print("Content-type: text/html; charset=EUC-JP\n\n") # CGI の値を EUC-JP で書き出す kaden2 = cgi["kaden"] namae2 = cgi["namae"] ninzu = 1 # ninzu の初期値 open("record.txt","r") do |read| # record.txt を「r」を入力して読み込 む。 while data = read.gets if/(\d+)/ =~ data # データが一つだけで、数字なので、(\d+) を使う。 ninzu = $1.to_i # その数字を整数として取り入れる。 end # if 文の終わり end # while 文の終わり end # open 文の終わり print("\n") # html 文の始まり print("\n") # head 文の始まり print("商品の詳細\n") # ウィンドウに表示させるタイトル print("\n") # head 文の終わり print("\n") # body 文の始まり printf("

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

\n",namae2,ninzu) # 表示させるさいに、「%d」の部分に数字を代入す るよう「ninzu」を代入する。 printf("

今気になっている家電は %s ですね。

\n",kaden2) # 「%s」に利用者が選択した項目を代入するよう、 「kaden2」を代入する。 if kaden2 == "テレビ" # 「テレビ」が選択された場合 print("

高画質 / 高音質はもちろん省エネ性能も高い液晶パネルを搭載しました。 さらに、LED バックライトと組み合わせることにより、光を効率良く使い、高画質と省エ ネ性能を両立している。

\n") elsif kaden2 == "洗濯機" # 「洗濯機」が選択された場合 print("

ボタンひとつで、適量の洗剤を自動で投入し、洗う度に黒カビの発生を抑制 することができ、夜に洗濯をしても低騒音だから安心ですよ。

\n") elsif kaden2 == "冷蔵庫" # 「冷蔵庫」が選択された場合 print("

ドアの開閉方向をつけ換えられることが可能。自分の利き手に合わせ瑠こと が出来ます。また、電子レンジをのせて便利に使える耐熱 100℃ のトップテーブルで消 費電力を大幅に抑えることが出来ます。

\n") elsif kaden2 == "空気清浄機" # 「空気清浄機」が選択された場合 print("

浮遊アレル物質(ダニのふん・死骸)や気になる臭いなどの空気の汚れを集中 的に浄化する。部屋全体の空気の循環スピードを速めることで、室内のハウスダストや花粉を効率良く集め、一気に吸い込み、素早く除去します。

\n") elsif kaden2 == "エアコン" # 「エアコン」が選択された場合 print("

+(プラス)と-(マイナス)のイオンで空気をキレイにする。気流に乗ってお部 屋中にイオンが行き渡り、空気浄化岳でなく脱臭や美肌効果もあります。

\n") elsif kaden2 == "携帯電話" # 「携帯電話」が選択された場合 print("

迫力の画面と幅を抑えたボディで高精細になったディスプレイを搭載。 バッテリーが大容量でなおかつ、素早く充電をすることができる。

\n") elsif kaden2 == "電気コタツ" # 「電気コタツ」が選択された場合 print("

洋室や和室に合うベーシックなコタツ。薄型温風ヒーターを使っているため 、余計な出っぱりが無く、足元がスッキリ快適!!

\n") elsif kaden2 == "羽毛布団" # 「羽毛布団」が選択された場合 print("

襟には首周りの形状に合わせた「V ネック形状」を採用。首元まで隙間を無 くし、しっかりフィットするので暖かさを逃さない。 また、体のふくらみに合わせてフィットし、寝返りをうっても、布団がずれることはない。

\n") elsif kaden2 == "フライパン" # 「フライパン」が選択された場合 print("

フライパンとウォックパンの内面はキズや摩擦からしっかり守る 6 層のコ ーティングを採用。表面のキズを目立ちにくくし、美しさを保つことができる。 また、フライパンの中心にはおいしさの決め手である、「適温」が一目で確認することが できる。

\n") elsif kaden2 == "電子辞書" # 「電子辞書」が選択された場合 print("

知的好奇心に応えるため、国語辞典の他、100 のコンテンツはもちろん、日 本と世界合わせて 2000 作品も収録されていて充実な内容となっている。 また、操作方法も非常に簡単で、「手書き入力」や、パネルの右側に搭載されている「スクロールパッド」などを採用しているため、様々な機能を搭載している。

\n") end # if 文の終わり print("\n") # body の終わり print("\n") # html の終わり ninzu += 1 # ninzu に 1 を足す。 open("record.txt","w") do |write| # record.txt を「w」と入力して書き込 む機能を作成する。 write.printf("%d\n",ninzu) # 書き込む内容は「ninzu」。 end # open 文の終わり (3)各部の解説 入力ページ 利用者にデータを入力させるには、「form」と呼ばれる tag で作る。 action の所には、結果を吐かせるプログラムを作成した。
今回のページには、名前を入力してもらう欄を作成するため、 を用いて作成した。 「input type="text"」 を使うことによってテキストフィールドを作成す ることになる。 「maxlength」を使うことにより、半角文字で指定した分だけ入力するこ とが可能である。今回の場合は最大で 20 文字入力することができる。 次に、気になっている家電を選択する項目を作成した。 テレビ
「input type="radio"」を使うことによって、一つだけ選択することがで きる、「ラジオボタン」を作成する。 「name」 の部分で使うラジオボタンを区別するため、「value」で利用者 が選んだときにこの値がプログラムに送られる。 結果を表示するページ まず、利用者が何人目のお客様かを表示するため、以前のレポート課題で 作成したカウンターのプログラムを参考に「open -- end」を使って作成 した。 open("record.txt","r") do |read| while data = read.gets if/(\d+)/ =~ data ninzu = $1.to_i end end end 「(\d+)」というのは、数字を読み込むことを表している。 「to_i」を使うことにより、整数として取り入れることが可能である。 そして、人数を書き込ませるため、「open -- end」を使って以下のよう に作成した。 open("record.txt","w") do |write| write.printf("%d\n",ninzu) end 「w」を使うことによって「record.txt」に書き込ませる。「%d」には、 変数「ninzu」を代入する。 また、record.txt は、Kterm 上で、「chmod o+w」を入力することにより、 他者がアクセスすることが可能となる。これにより、他の人がアクセスを する度に record に 1 ずつプラスされて、カウンターが回ることができ る。 そして、今回は、利用者が選択した家電のくわしい解説を表示するプログ ラムを作成するので、if 文を使って、以下のように作成した。 if kaden2 == "テレビ" print("

高画質 / 高音質はもちろん省エネ性能も高い液晶パネルを 搭載しました。 さらに、LED バックライトと組み合わせることにより、光を効率良く使い、高画質と省エ ネ性能を両立している。

\n") もし利用者が「テレビ」を選択したときに、テレビの解説が、if 文の中 にある、print文が表示される。 なお、2 項目目以降は、「elsif」を使って作成してみた。 そして、カウンター機能と、選択した商品を検索するため、以下の項目を 作成してみた。 printf("

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

\n",namae2,ninzu) 「%s」の機能には、テキストフィールドに入力した名前を代入し、「%d」 の機能には、数字を代入させて表示する。 printf("

今気になっている家電は %s ですね。

\n",kaden2) 「%s」には、利用者が選択した項目を代入して表示させる。 (4)実行結果 pan{c111069}% ./r2_cgi_best.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) kaden="テレビ" namae="齋藤允貴" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP 商品の詳細

齋藤允貴さんは 30 人目の訪問者です

今気になっている家電は テレビ ですね。

高画質 / 高音質はもちろん省エネ性能も高い液晶パネルを搭載しました。 さらに、LED バックライトと組み合わせることにより、光を効率良く使い、高画質と省エ ネ性能を両立している。

pan{c111069}% ./r2_cgi_best.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) kaden="洗濯機" namae="齋藤允貴" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP 商品の詳細

齋藤允貴さんは 31 人目の訪問者です

今気になっている家電は 洗濯機 ですね。

ボタンひとつで、適量の洗剤を自動で投入し、洗う度に黒カビの発生を抑制 することができ、夜に洗濯をしても低騒音だから安心ですよ。

pan{SAITO Masataka}% ./r2_cgi_best.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) kaden="電子辞書" namae="齋藤允貴" /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/koeki/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP 商品の詳細

齋藤允貴さんは 32 人目の訪問者です

今気になっている家電は 電子辞書 ですね。

知的好奇心に応えるため、国語辞典の他、100 のコンテンツはもちろん、日 本と世界合わせて 2000 作品も収録されていて充実な内容となっている。 また、操作方法も非常に簡単で、「手書き入力」や、パネルの右側に搭載されている「スクロールパッド」などを採用しているため、様々な機能を搭載している。

(5)考察 プログラムを Kterm 上でもしっかりと表示することができ、選択した家電 の解説が自分の思った通りに表示することができた。 また、ウェブページ上では、 齋藤允貴さんは 34 人目の訪問者です 今気になっている家電は テレビ ですね。 高画質 / 高音質はもちろん省エネ性能も高い液晶パネルを搭載しました。さら に、LED バックライトと組み合わせることにより、光を効率良く使い、高画質と 省エネ性能を両立している。 と表示され、自分が選択した家電の解説がしっかりと掲載することができ た。したがって、このプログラムは成立する。 B、「GIMP」を使って、基礎プログラミングII の時に制作した自分の最高傑作 「家計診断センター」に関連した「ロゴ」を作成した。 今回のロゴは、お金にまつわるプログラムを作成したので、「光沢」を使っ て「MONEY CENTER」 を入力して作成した。 作成したロゴは、http://roy/~c111069/adv2/ に掲載している。 3、感想 今回「CGI」でとても興味があったのは、小野貴己さんの作品である。 ことはじめのウェブページを見たさいに、非常にインパクトがあった。 テキストフィールドを入力する欄はもちろん、活動時間や、出現場所を設定 するさいに、ドロップダウンメニューに掲載されていた項目がとても多かっ たので驚いた。 小野貴己さんの作品のアドレス http://roy/~c111038/rubycgi/order_input_c111038.html 4、参考文献 http://roy/~madoka/2012/r2/10/r2_10_02_theme_02_program.html 西村まどか 基礎プログラミングII 第 10 回 CGI ことおぼえ 「プログラム部分について」 http://roy/~madoka/2012/r2/09/r2_09_04_appendix_01_radio.html 西村まどか 基礎プログラミングII 第 9 回 CGI ことえらび 「ラジオボタンの作り方」 http://roy/~madoka/2012/r2/09/r2_09_06_appendix_03_textfield.html 西村まどか 基礎プログラミングII 第 9 回 CGI ことえらび 「短い記入欄の作り方」 http://roy/~madoka/2012/r2/09/r2_09_08_theme_03_fileopen.html 西村まどか 基礎プログラミングII 第 9 回 CGI ことえらび 「File open を使ってみよう」 共同学習者 小野貴己、渡辺十夢