#!/usr/bin/perl $lock_file = "../cntrl/cg_66ock.txt"; $listfile = "../cntrl/cg_66a1list.txt"; $resultfile00 = "../cntrl/cg_60fz00rslt.html"; # ---- 複数選択項目(同一NAME)の配列・一覧設定 ---- $multi_item = 2; $multi_max = 10; @multi_nmbr = (0,0,0); @multi_name = ("ansr","---","---"); # ======== end ========================================= print "Content-type: text/html\n\n"; #print "DEBUG 00
\n"; $prg_no = "cg_6610ipt"; require '../../basiccgi/cgi-bin/jcode.pl'; require '../../basiccgi/cgi-bin/cg_00io10.pl'; require '../../basiccgi/cgi-bin/cg_00st10.pl'; &date_form; require '../../basiccgi/cgi-bin/cg_00fx10.pl'; require 'cg_6010.pl'; #****** データ受信 と デコード ****** #print "DEBUG 01
\n"; &de_code; $class1 = $cgi{'class'}; $name1 = $cgi{'name1'}; $prjcode = $cgi{'prjcode'}; $code1 = $cgi{'code1'}; $ansnmbr1 = $cgi{'ansnmbr1'}; $timespent = $cgi{'time2'}; @ansr = @multi_table; $prjdata = $prjcode; $prjdata =~ s/_/\-/; $datafile = "../".$prjcode."data/".$prjdata.$code1."data.txt"; #****** プログラム本体 ****** #print "DEBUG 03 - $g_str
\n"; if($name1 eq "" || $class1 eq ""){ $err_msg = "クラス・氏名、を入力して提出下さい。\n"; &err_exit($err_msg); } else{ #print "DEBUG 21
\n"; &basicdata; &saiten; #print "DEBUG 25 - $totalget
$note

\n"; &datafile; #print "DEBUG 26 - $display - $totalget
$note

\n"; if($display eq "yes"){ $point = $totalget; &hyoujun; &hensachi; &result; &end_exit(""); } else{ $dsp_msg="あなたの受験提出を受信しました。\n"; &end_exit($dsp_msg); } } exit; #****** Sub Routines ****** #--- 採点 --- sub saiten{ #print "DEBUG sub saiten 11 - $datafile
\n"; $totalget = 0; $note1=""; for($q=0;$q<$ansnmbr1;$q++){ #print "DEBUG sub saiten 21 - $q - @correct
\n"; $ansr=0; $crct=0; $wrng=0; $queswd = @correct[$q]; $ques1 = $ques[$q]; $ansr1 = $ansr[$q]; $ques1 =~ s/\'/’/g; $ques1 =~ s/\"/”/g; $lang1 = substr($srcno[$q],0,2); if($lang1 eq "eg"){ $ques1 =~ s/
/<> /g; # $ques1 = quotemeta $ques1; @ques2 = split(" ",$ques1); $queswd = @ques2; $ansr1 =~ s/\012/<> /g; # $ansr1 = quotemeta $ansr1; @ansr2 = split(" ",$ansr1); $ansrwd = @ansr2; @ansr3 = @ansr2; $spc=" "; } else{ &jcode'convert(*ques1, 'euc'); $ques1 =~ s/
/<>/g; $queswd = length($ques1)/2; splice(@ques2); for($j=0;$j<$queswd;$j++){ $ques2[$j] = substr($ques1,$j*2,2); } $ansr2 = $ansr1; $ansr2 =~ s/\012/
/g; &jcode'convert(*ansr1, 'euc'); $ansr1 =~ s/\012/<>/g; $ansrwd = length($ansr1)/2; splice(@ansr2); for($k=0;$k<$ansrwd;$k++){ $ansr2[$k] = substr($ansr1,$k*2,2); } @ansr3 = @ansr2; $spc=""; } $crct=0; $wrng=0; splice @rslt; #print "DEBUG sub saiten 33 - $q - @ques2
\n"; #print "DEBUG sub saiten 33 - $q - @ansr2
\n"; for($j=0;$j<$queswd;$j++){ # if($ques2[$j] eq $ansr2[$j]){ # $rslt[$j] = $j; # $ansr2[$j] = "-"; # $crct++; # } # else{ $k0=$j-5; if($k0<0){$k0=0;} $k1=$j+5; if($k1>$queswd){$k1=$queswd;} $k2 = 0; for($k=$k0;$k<$k1;$k++){ if($ques2[$j] eq $ansr2[$k]){ $rslt[$j] = $k; $ansr2[$k] = "-"; $crct++; $k2 = 1; last; } } if($k2==0){ # $str = $ques2[$j]; # &jcode'convert(*str, 'sjis'); $rslt[$j] = "*".$ques2[$j].""; } # } } #print "DEBUG sub saiten 41 - $q - $queswd - $crct - $wrng

@rslt
@ansr2
\n"; $q1=$q+1; $rsltline = ""; $rsltprv = -1; for($j=0;$j<$queswd;$j++){ #print "DEBUG sub saiten 42 - $q - $j - $rsltprv - $rslt[$j]
\n"; if($rslt[$j] =~ m/\*/){;} elsif($rslt[$j] > $rsltprv){ $rsltprv = $rslt[$j]; $rsltprv1 = $ansr3[$rsltprv+0]; $rslt[$j] = "-"; } else{ $wrng++; $rsltprv0 = $rsltprv; $rsltprv = $rslt[$j]; $rslt[$j] = $rsltprv0.$rsltprv1.">".$rsltprv.$ansr3[$rsltprv+0]; $rsltprv1 = $ansr3[$rsltprv+0]; } $rsltline = $rsltline.$rslt[$j].","; if(($j+1)%20 == 0 && $j+1 != $queswd){ $rsltline = $rsltline."
"; } } $answer[$q] = $crct-$wrng; #print "DEBUG sub saiten 51 - $q - $queswd - $answer[$q] - $crct - $wrng
@rslt
@ansr2
\n"; if($queswd <= 0){ $err_msg = "プログラムエラー:問題 ".$q1." 語(字)数が「".$queswd."」です。"; &err_exit($err_msg); exit; } $pointget[$q] = int($answer[$q]/$queswd*$point[$q]+0.5); $totalget = $totalget + $pointget[$q]; $f1_data[6+$q] = $answer[$q]; $f1_data[6+$ansnmbr1+$q] = $ansr2; &jcode'convert(*rsltline, 'sjis'); $note1 = $note1."

".$q1." 問題語(字)数:".$queswd." 解答語(字)数:".$answer[$q]."(".$crct." - ".$wrng.")
".$rsltline; } #print "DEBUG sub saiten 61 - $totalget - $note
\n"; } sub datafile{ #print "DEBUG sub datafile 11 - $datafile
\n"; $f1_key = "------------_------------"; $len = length($class1); if($len > 12){$len = 12;} substr($f1_key,0,$len) = $class1; $len = length($name1); if($len > 12){$len = 12;} substr($f1_key,13,$len) = $name1; #print "DEBUG sub datafile 12 - $f1_key
\n"; $f1_data[0] = $f1_key; $f1_data[1] = $date_day; $f1_data[2] = $totalget; $f1_data[3] = $timespent; $f1_data[4] = ""; $f1_data[5] = ""; #print "DEBUG sub datafile 12 - $datafile
\n"; &lock_up($lock_file,"err"); #print "DEBUG sub datafile 13 - $datafile
\n"; &rcrd_insert($datafile,"err"); #print "DEBUG sub datafile 21 - $datafile
\n"; if($err_msg ne "0"){ $msg1 = $f1_key.":同じキーのデータが既に存在します。"; if($err_msg eq $msg1){ $f1_keynmbr=1; $f1_keylist[0] = $f1_key; &file_search($datafile); @fld = split(",",$f2_rcrdlist[0]); $err_msg = $err_msg."
重複受験です。
氏名:".$name2."、所属:".$class2."、前回受験日:".$fld[0]."
\n"; } &un_lock($lock_file,""); &err_exit($err_exit); } $ninzuu = $ninzuu + 1; $goukei = $goukei + $totalget; $jijou = $jijou + ($totalget * $totalget); #print "DEBUG sub datafile 31 - $datafile
\n"; $f1_keynmbr = 1; $f1_keylist[0] = "000000000000_------//////"; &rcrd_search($datafile); @f1_data = split("",$f2_rcrdlist[0]); $f1_data[1] = $ninzuu; $f1_data[2] = $goukei; $f1_data[3] = $jijou; #print "DEBUG sub datafile 41 - $datafile
\n"; &rcrd_rewrite($datafile,"err"); &un_lock($lock_file,""); #print "DEBUG sub datafile 91 - $datafile
\n"; }