第 10 回 CGI ことおぼえ レポート課題 氏名: 池田 紘平 学籍番号: c1110097 語学クラス: 英語 3 コース: 社会福祉コース 1.A require 'cgi' で cgi を使うことを宣言したように、require 'pstore' で pstore を使うことを宣言する。なお、pstore とは、第三者が書き込めるように したいときに宣言するものである。 今回の講義中は、pstore 変数を db、ファイル名を pstoreというディレクトリ の中の bbs.rb というファイルなので db = PStore.new("pstore/bbs.rb") とする。その後 db.transaction do をいれることで、CGI変数に入った値を読込み、表示するようになる。最後に end をつけることに注意する。 2.A < 設定 > 公益大にあるコース、先生の名前を選択すると先生の研究室、オフィスアワーを 表示する。 < プログラム r2_cgi_best.rb > #!/usr/bin/env ruby # coding: euc-jp require 'cgi' # CGI を使うことを宣言 c = CGI.new(:accept_charset => "EUC-JP") # EUC-jp で受け取り print("Content-type: text/html; charset=EUC-JP\n\n") # EUC-JP で書き出すようにする syozoku = c["course"] # 変数 syozoku に 所属コース(course)を代入 name = c["teacher"] # 変数 name に 名前(teacher)を代入 print("\n") # html の開始 print("
\n") # head の開始 print("名前: %s
",name) # 名前を表示 printf("所属 : %s
\n",syozoku) # コースを表示 if /政策マネジメント/ =~ syozoku # もし syozoku が政策マネジメントだったら if /出井 信夫/ =~ name # もし name が出井 信夫だったら print("研究室 : A-5
") # 研究室の表示 print("内線 : 71543
") # 内線の表示 printf("オフィスアワー : 木曜 5 限 ( 16:20 〜 17:50 )
") # オフィスアワーの表示 # 以降、上記と同じ仕組みで進む。 elsif /水田 健輔/ =~ name printf("研究室 : C-4
") print("内線 : 1263
") printf("オフィスアワー : 月曜 3 限 ( 13:00 〜 14:30 )
") elsif /阿部 公一/ =~ name printf("研究室 : H-5
") print("内線 : 1290
") printf("オフィスアワー : 月曜 5 限 ( 16:20 〜 17:50 )
") elsif /和田 明子/ =~ name printf("研究室 : B-2
") print("内線 : 1256
") printf("オフィスアワー : 月曜 3 限 ( 13:00 〜 14:30 )
") elsif /内藤 悟/ =~ name printf("研究室 : C-2
") print("内線 : 1261
") printf("オフィスアワー : 月曜 5 限 ( 16:20 〜 17:50 )
") elsif /尾身 祐介/ =~ name printf("研究室 : G-1
") print("内線 : 1281
") printf("オフィスアワー : 月曜 4 限 ( 14:40 〜 16:10 )
") elsif /三島 憲之/ =~ name printf("研究室 : I-3
") print("内線 : 1293
") printf("オフィスアワー : 水曜 2 限 ( 10:40 〜 12:10 )
") else printf("%s に %s 先生は所属していません
",syozoku,name) end end if /地域共創コース/ =~ syozoku if /杉山 肇/ =~ name printf("研究室 : D-5
") print("内線 : 1269
") printf("オフィスアワー : 木曜 6 限 ( 18:00 〜 19:30 )
") elsif /伊藤 眞知子/ =~ name printf("研究室 : F-3
") print("内線 : 1278
") printf("オフィスアワー : 火曜 3 限 ( 13:00 〜 14:30 )
") elsif /三原 容子/ =~ name printf("研究室 : D-2
") print("内線 : 1266
") printf("オフィスアワー : 木曜 4 限 ( 14:40 〜 16:10 )
") elsif /温井 亨/ =~ name printf("研究室 : G-3
") print("内線 : 1283
") printf("オフィスアワー : 火曜 3 限 ( 13:00 〜 14:30 )
") elsif /渡辺 暁雄/ =~ name printf("研究室 : H-1
") print("内線 : 1286
") printf("オフィスアワー : 木曜 6 限 ( 18:00 〜 19:30 )
") elsif /呉 尚浩/ =~ name printf("研究室 : A-2
") print("内線 : 1251
") printf("オフィスアワー : 木曜 4 限 ( 14:40 〜 16:10 )
") else printf("%s に %s 先生は所属していません
",syozoku,name) end end if /社会福祉コース/ =~ syozoku if /照井 孫久/ =~ name printf("研究室 : F-1
") print("内線 : 1276
") printf("オフィスアワー : 火曜 4 限 ( 14:40 〜 16:10 )
") elsif /澤邉 みさ子/ =~ name printf("研究室 : A-4
") print("内線 : 1253
") printf("オフィスアワー : 金曜 4 限 ( 14:40 〜 16:10 )
") elsif /武田 真理子/ =~ name printf("研究室 : E-2
") print("内線 : 1271
") printf("オフィスアワー : 火曜 4 限 ( 14:40 〜 16:10 )
") elsif /鎌田 剛/ =~ name printf("研究室 : E-4
") print("内線 : 1273
") printf("オフィスアワー : 火曜 3 限 ( 13:00 〜 14:30 )
") elsif /益子 行弘/ =~ name printf("研究室 : H-2
") print("内線 : 1287
") printf("オフィスアワー : 月曜 4 限 ( 14:40 〜 16:10 )
") elsif /竹原 幸太/ =~ name printf("研究室 : H-4
") print("内線 : 1289
") printf("オフィスアワー : 木曜 3 限 ( 13:00 〜 14:30 )
") elsif /小関 久恵/ =~ name printf("研究室 : H-3
") print("内線 : 1288
") printf("オフィスアワー : 月曜 4 限 ( 14:40 〜 16:10 )
") else printf("%s に %s 先生は所属していません
",syozoku,name) end end if /環境サイエンスコース/ =~ syozoku if /平松 緑/ =~ name printf("研究室 : B-5
") print("内線 : 1259
") printf("オフィスアワー : 月曜 5 限 ( 16:20 〜 17:50 )
") elsif /市田 光/ =~ name printf("研究室 : E-6
") print("内線 : 1275
") printf("オフィスアワー : なし
") elsif /古山 隆/ =~ name printf("研究室 : E-1
") print("内線 : 1270
") printf("オフィスアワー : 火曜 4 限 ( 14:40 〜 16:10 )
") elsif /松山 薫/ =~ name printf("研究室 : C-3
") print("内線 : 1262
") printf("オフィスアワー : 月曜 4 限 ( 14:40 〜 16:10 )
") else printf("%s に %s 先生は所属していません
",syozoku,name) end end if /リベラルアーツ/ =~ syozoku if /國眼 眞理子/ =~ name printf("研究室 : G-5
") print("内線 : 1285
") printf("オフィスアワー : 木曜 6 限 ( 18:00 〜 19:30 )
") elsif /遠山 茂樹/ =~ name printf("研究室 : E-5
") print("内線 : 1274
") printf("オフィスアワー : 火曜 3 限 ( 13:00 〜 14:30 )
") elsif /山本 裕樹/ =~ name printf("研究室 : I-5
") print("内線 : 1295
") printf("オフィスアワー : 火曜 4 限 ( 14:40 〜 16:10 )
") else printf("%s に %s 先生は所属していません
",syozoku,name) end end if /外国語特別選抜/ =~ syozoku if /呉 衛峰/ =~ name printf("研究室 : F-2
") print("内線 : 1277
") printf("オフィスアワー : 月曜 4 限 ( 14:40 〜 16:10 )
") elsif /松田 憲/ =~ name printf("研究室 : I-4
") print("内線 : 1294
") printf("オフィスアワー : 木曜 4 限 ( 14:40 〜 16:10 )
") elsif /菅井 マリー/ =~ name printf("研究室 : G-4
") print("内線 : 1284
") printf("オフィスアワー : 火曜 4 限 ( 14:40 〜 16:10 )
") else printf("%s に %s 先生は所属していません
",syozoku,name) end end if /情報特別選抜/ =~ syozoku if /広瀬 雄二/ =~ name printf("研究室 : B-3
") print("内線 : 1257
") printf("オフィスアワー : 金曜 4 限 ( 14:40 〜 16:10 )
") elsif /西村 まどか/ =~ name printf("研究室 : B-4
") print("内線 : 1258
") printf("オフィスアワー : 月曜 2 限 ( 10:30 〜 12:10 )
") elsif /神田 直弥/ =~ name printf("研究室 : F-4
") print("内線 : 1279
") printf("オフィスアワー : 木曜 3 限 ( 13:00 〜 14:30 )
") else printf("%s に %s 先生は所属していません
",syozoku,name) end end print("\n") # body の終了 print("\n") # html の終了 < ページ r2_cgi_best.html > # html の開始 # head の開始名前: 尾身 祐介
所属 : 政策マネジメントコース
研究室 : G-1
内線 : 1281
オフィスアワー : 月曜 4 限 ( 14:40 〜 16:10 )
〜 澤邉先生をせんたくした場合 〜名前: 澤邉 みさ子
所属 : 社会福祉コース
研究室 : A-4
内線 : 1253
オフィスアワー : 金曜 4 限 ( 14:40 〜 16:10 )
〜 國眼先生を選択した場合 〜名前: 國眼 眞理子
所属 : リベラルアーツ
研究室 : G-5
内線 : 1285
オフィスアワー : 木曜 6 限 ( 18:00 〜 19:30 )
< 説明 > どのように検索すれば良いのかを知らせるために、ページの最初に注意書きとし てリンクを貼ることで、親切なページになったと思う。プログラムに関しては、 第 9 回目の結果を分岐させるものを使って、もし〜だったらこれを表示するよ うにした。 < 考察 > 上記は正しいコースとそこに所属する先生が一致したため、うまく表示されたが、 実際には正しい入力がされないかもしれない。そこで、コースと名前が一致しな い場合の結果を書きに示す。 〜 尾身先生の所属を間違えた場合 〜名前: 尾身 祐介
所属 : 外国語特別選抜
外国語特別選抜 に 尾身 祐介 先生は所属していません
〜 澤邉先生の所属を間違えた場合 〜名前: 澤邉 みさ子
所属 : 地域共創コース
地域共創コース に 澤邉 みさ子 先生は所属していません
〜 國眼先生の所属を間違えた場合 〜名前: 國眼 眞理子
所属 : 情報特別選抜
情報特別選抜 に 國眼 眞理子 先生は所属していません
上記のように所属を間違えると、選択した名前とコースは表示されるが、その先 生はそのコースに所属していないことを表示できた。 2.B ロゴを作るために gimp& で立ち上げるが、日本語入力を可能にするために最初 に addfont とした後に gimp& として立ち上げる。その後は 拡張 → Script-Fu → ロゴ → (例)コミック本 というように選んでいく。フォントに関しては、aquqfont , yozfont が自分的 にオススメ。ロゴには署名がないとマイナスになるので気を付ける。保存時には 「拡張子で判別」のところを PNG にして、ファイル名を入力してから Ctrl - s をする。終了時には Ctrl - q で終了する。 基礎プログラミングII バナー http://roy/~c111009/adv2/logo_r2_c111009.png < 感想 > CGI を使うことに最初は抵抗を感じたが、作業をしているうちにおもしろくなっ てきた。この調子でグループワークも頑張りたい。 稲村洋樹君の CGI スクリプトが良いと思った。名前を入力したあとに交 付日等を選ぶことで、偽装の免許証を作れるのがおもしろいと思った。結果画面 のマチマチ感がたまらなかった。 http://roy/~c111021/rubycgi/order_input_c111021.html < 参考文献 > ・基礎プログラミング II 第 9 回 (CGI ことえらび) 「結果を分岐させるには」 西村まどか http://roy/~madoka/2012/r2/09/r2_09_02_theme_01_branch.html 追伸:プログラム CGI 傑作ページ、後期最高傑作とロゴを添付します