#!/usr/local/bin/perl # =============================================== # <* 問題作成CGI *> Ver. 0.1 # ----------------------------------------------- # Tomo.c # =============================================== # 環境設定 $syutudai_cgi = "cgi-bin/syutudai.cgi"; $cfg_file = "config"; @sentakusi = ("", "ア", "イ", "ウ", "エ", "オ"); # パラメタの取得 $buf = $ENV{'QUERY_STRING'}; @par = split(/&/, $buf); foreach $par (@par) { ($name, $value) = split(/=/, $par); $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $param{$name} = $value; } $syutudai_no = $param{no}; $type = $param{type}; # configファイルから情報取得 open(CFG, $cfg_file); $no = ""; while() { chop; ($no, $top_page, $mondai_file, $kaitou_file) = split(",", $_); last if($no == $param{cfg}); } close(CFG); # 該当番号なし # (未作成) # 解答の取得 open(KIT, $kaitou_file) || print "Can't open file: $!\n"; $line = ; for($i=0; $i < length($line)-2; $i+=2) { push(@kaitou_tbl, substr($line, $i, 2)); } close KIT; # 回答状況テーブル作成 $syutudaisu = $#kaitou_tbl+1; if(! exists($param{kaitou})) { $sentaku = ""; for($i=0; $i<$syutudaisu; $i++) { $sentaku = $sentaku . "0"; } } else { $sentaku = $param{kaitou}; } # 回答が選択されたとき if(exists($param{choice})) { $tmp = ""; for($i=1; $i<$syutudaisu+1; $i++) { if($i == $syutudai_no) { $tmp = $tmp . $param{choice}; } else { $tmp = $tmp . substr($sentaku, $i-1, 1); } } $sentaku = $tmp; $syutudai_no++; if($syutudai_no > $syutudaisu) { $syutudai_no = 1; } } # 問題の取得 open(INF, $mondai_file) || print "Can't open file: $!\n"; # 読み飛ばし $cnt = 0; while($line = ) { if($line =~ /^---/) { if(++$cnt == $syutudai_no) { last; } } } $header = ; $line = ; $mondai = $line; while($line = ) { if($line =~ /^---/) { last;} $mondai = $mondai . $line; } $mondai =~ s/\n*$//; $mondai =~ s/^\n*//; $mondai =~ s/\n/
/g; # HTML作成 print "Content-type: text/html\n\n"; print < $header
END ; $seikaisu = 0; for($i=1; $i<$syutudaisu+1; $i++) { print ""; $tmp1 = substr($sentaku, $i-1, 1); if($type == "k") { if(@kaitou_tbl[$i-1] eq @sentakusi[$tmp1]) { $seikaisu++; $tmp = "○"; } else { if($tmp1 == 0) { $tmp = sprintf("%2d", $i); $tmp =~ s/ /0/g; } else { $tmp = "×"; } } } else { if($tmp1 == 0) { $tmp = sprintf("%2d", $i); $tmp =~ s/ /0/g; } else { $tmp = @sentakusi[$tmp1]; } } printf("%-2s|\n", $tmp); print "
\n" if($i % 5 == 0); } $next_no = $syutudai_no + 1; if($next_no > $#kaitou_tbl+1) { $next_no = 1; } if($type == "k") { $seikairitu = int($seikaisu / $syutudaisu * 100); print < $syutudaisu 問中 $seikaisu 問正解です
正解率=$seikairitu%
END ; } if($type == "2") { print <
END ; } print <最初に戻る

第$syutudai_no問 : $header

$mondai

END ; if($type == 1) { print < 次へ($next_no) END ; } if($type == 2) { print < ア, イ, ウ,
END ; } if($type == "k") { $tmp1 = substr($sentaku, $syutudai_no-1, 1); $kait = @sentakusi[$tmp1]; $siki = @kaitou_tbl[$syutudai_no-1]; print < END ; } print <
END ;