第9回 ことえらび レポート課題
氏名:小川まどか
学籍番号:C1100420
語学クラス:英語2
コース:社会福祉
1.筆記問題
A.複数の中から1つだけ選択するのがラジオボタンである。
  例として、喫煙席か禁煙席かどちらでもよいかを選ぶプログラムを挙げる。
  喫煙席
  禁煙席
  どちらでもよい
  type=radioでラジオボタンを使う宣言をし、nameにはラジオボタンの名前を、
  valueにはCGIの変数の値を入れるとラジオボタンが作成できる。
B.複数の中から複数選択できるのがチェックボックスである。
  例として、欲しい賞品を選ぶプログラムを挙げる。
  3万円分の商品券
  松阪牛
  電子レンジ
  type=checkboxでチェックボックスを使う宣言をし、nameにはチェックボック
  スの名前を、valueにはCGIの変数の値を入れるとチェックボックスが作成でき
  る。
2.プログラム問題
A.カウンタ
A.リンクのアドレス
http://roy/~c110042/advertise2/rubycgi/fork.html
B.CGIの題名とその意図
題名 : カウンタ
意図 : CGIを使い、ホームページにアクセスした人数を知ることができないかと
       思った。
C.入力部分
#!/usr/koeki/bin/ruby
require 'cgi'              # cgiを使う宣言をする
cgi = CGI.new("html4")    
print("Content-type: text/html; charset=EUC-jp\n\n")
count = 0                  # 最初は0を代入する
open("number.txt" , "r") do |read|     # rで読み込む
  while people = read.gets # 繰り返し
    if /(\d+)/ =~ people   # もしnumber.txtが数字だったら
      count = $1.to_i      # countにnumber.txtを代入する
    end                    # ifを終了する
  end                      # whileを終了する
end                        # openを終了する
print("\n")          
print("
\n")      
print("カウンタ\n")   
print("\n")
print("\n")                   
print("\n")                    
printf("ようこそ!あなたは%d番目のお客様です
\n",count)       
print("\n")                   
print("\n")               
count += 1     # countが1増えることに1を足していく
open("number.txt" , "w") do |write|  # wで読み込む
  write.printf("%d\n",count)         # countを代入する
end                                  # openを終了する
D.各部の解説
require 'cgi'              
cgi = CGI.new("html4") 
まずここでCGIを使う宣言をしている。
count = 0                  
open("number.txt" , "r") do |read|     
  while people = read.gets 
    if /(\d+)/ =~ people   
      count = $1.to_i      
    end                    
  end                     
end                        
ここでnumber.txtを読み込む。
count += 1     # countが1増えることに1を足していく
open("number.txt" , "w") do |write|
  write.printf("%d\n",count)         
end                                  
ここで数字を1ずつ足していき、countに数を代入している。
E.実行結果
roy{c110042}% ./number.rb                     [~/public_html/advertise2/rubycgi]
(offline mode: enter name=value pairs on standard input)
Content-type: text/html; charset=EUC-jp
       
      
カウンタ
                   
                    
ようこそ!あなたは20番目のお客様です
      
                  
ホームページ上でもきちんとようこそ!あなたは20番目のお客様ですと表示された。
B.計算プログラム
A.リンクのアドレス
http://roy/~c110042/advertise2/rubycgi/fork.html
B.CGIの題名とその意図
題名 : 計算
意図 : CGIを使って計算ができないかと思った。
C.入力部分
・keisan.html
計算プログラム
計算機
計算をするプログラムです
・keisan.rb
#!/usr/bin/env ruby
$KCODE = 'e' #文字コードの設定
require 'cgi' # CGIを使うことを宣言
cgi = CGI.new("html4")
print("Content-type: text/html; charset=EUC-jp\n\n")
number1 = cgi["number1"]
number2 = cgi["number2"]
number3 = cgi["number3"]
print("\n") 
print("\n")
print("計算結果\n") # タイトルを表示
print("\n")
print("\n")
print("\n")
if number3 == "tasizan"              # もし足し算だったら
  k = number1.to_i + number2.to_i
elsif number3 == "hikizan"           # 引き算だったら
  k = number1.to_i - number2.to_i   
else number3 == "kakezan"           # かけ算だったら
  k = number1.to_i * number2.to_i   
end
print("計算結果
\n")    
if number3 == "tasizan"              
  printf("%d + %d = %d
\n",number1,number2,k)
elsif number3 == "hikizan"           
  printf("%d - %d = %d
\n",number1,number2,k)
else number3 == "kakezan"           
  printf("%d * %d = %d
\n",number1,number2,k)
end                             
print("\n")              
print("\n")
D.各部の解説
・keisan.html
数字を入れてください:
数字をいれてください:
ここでテキストフィールドを作成している。
+
-
×
ここでラジオボタンを作成している。
・keisan.rb
if number3 == "tasizan"              # もし足し算だったら
  k = number1.to_i + number2.to_i
elsif number3 == "hikizan"           # 引き算だったら
  k = number1.to_i - number2.to_i   
else number3 == "kakezan"           # かけ算だったら
  k = number1.to_i * number2.to_i   
end
ここで足し算の場合、引き算の場合、かけ算の場合それぞれを計算している。
if number3 == "tasizan"              
  printf("%d + %d = %d
\n",number1,number2,k)
elsif number3 == "hikizan"           
  printf("%d - %d = %d
\n",number1,number2,k)
else number3 == "kakezan"           
  printf("%d * %d = %d
\n",number1,number2,k)
end                    
ここで計算結果を表示している。
E.実行結果
何回も見直して間違いが無いか確認したが、実行できなかった。
自分では間違いを見つけることができなかった。
◎tgif
題名:テディベア
解説:プログラミングの課題をしている際、癒しになるキャラクターがほしいと
思った。
作った方法:円を活用して作成した。
工夫した点:ほっぺたをつけて可愛らしくしたところ。
3.感想
今回のCGIを使った課題は前回よりも難しくて大変だった。
tgifは始めて使ったので、うまく使いこなせなかったが何とかできてよかった。 
4.参考文献
基礎プログラミングI 第12回 「自由課題コンペティション / 画像作成」
・描画ソフト
(http://roy/~madoka/2011/r1/12/r1_12_02_theme_02_painttool.html)
・2D Draw 系ツール での作画
(http://roy/~madoka/2011/r1/12/r1_12_03_theme_03_tgifexample.html)
・ツールバー各部分の解説
(http://roy/~madoka/2011/r1/12/r1_12_04_theme_04_tgiftoolbar.html)
基礎プログラミングII 第9回 「ことえらび」
・ラジオボタンの作り方
(http://roy/~madoka/2011/r2/09/r2_09_04_theme_04_radio.html)
・チェックボックスの作り方
(http://roy/~madoka/2011/r2/09/r2_09_05_theme_05_checkbox.html)
・テキストフィールドの作り方
(http://roy/~madoka/2011/r2/09/r2_09_06_theme_06_textfield.html)
西村まどか先生