# | '. "\n".'Concept | '. "\n".'Correct | '. "\n".'Wrong | '. "\n".'
---|---|---|---|
".($n+1)." | ". "\n".''.$Concepts[$n]." | ". "\n".''.$data1[$n]." | ". "\n".''.$data2[$n]." | ". "\n"."From:['.localtime($ConceptData{'Int.'.$k}). '] To: ['.localtime($ConceptData{'Int.'.($k+1)}-1). "] | $Correct | $Wrong | "; $Str .= "\n".'
P# | '."\n"; for(my $nIndex=0; $nIndex < (scalar (keys %$headings)); $nIndex++) { $Result .= ''.''.' | '."\n"; } $Result .= "\n".'
---|
'; $Ptr .= '#Stdnts: | '; $Ptr .= 'Total Number of Students opened the problem.'; $Ptr .= ' |
'; $Ptr .= 'Tries: | '; $Ptr .= 'Total Number of Tries for solving the problem.'; $Ptr .= ' |
'; $Ptr .= 'Mod: | '; $Ptr .= 'Maximunm Number of Tries for solving the problem.'; $Ptr .= ' |
'; $Ptr .= 'Mean: | '; $Ptr .= 'Average Number of the tries. [ Tries / #Stdnts ]'; $Ptr .= ' |
'; $Ptr .= '#YES: | '; $Ptr .= 'Number of students solved the problem correctly.'; $Ptr .= ' |
'; $Ptr .= '#yes: | '; $Ptr .= 'Number of students solved the problem by override.'; $Ptr .= ' |
'; $Ptr .= '%Wrng: | '; $Ptr .= 'Percentage of students tried to solve the problem '; $Ptr .= 'but still incorrect. [ 100*((#Stdnts-(#YES+#yes))/#Stdnts) ]'; $Ptr .= ' |
';
# Kashy formula
# ' DoDiff : Degree of Difficulty of the problem. '. # '[ Tries/(#YES+#yes+0.1) ] '. #Gerd formula $Ptr .= 'DoDiff: | ';
$Ptr .= 'Degree of Difficulty of the problem. '; $Ptr .= '[ 1 - ((#YES+#yes) / Tries) ]'; $Ptr .= ' |
'; $Ptr .= 'S.D.: | '; $Ptr .= 'Standard Deviation of the tries. '; $Ptr .= '[ sqrt(sum((Xi - Mean)^2)) / (#Stdnts-1) '; $Ptr .= 'where Xi denotes every student\'s tries ]'; $Ptr .= ' |
'; $Ptr .= 'Skew.: | '; $Ptr .= 'Skewness of the students tries.'; $Ptr .= '[(sqrt( sum((Xi - Mean)^3) / #Stdnts)) / (S.D.^3)]'; $Ptr .= ' |
'; $Ptr .= 'Dis.F.: | '; $Ptr .= 'Discrimination Factor: A Standard for evaluating the ';
$Ptr .= 'problem according to a Criterion '; $Ptr .= '[Applied Criterion in %27 Upper Students - '; $Ptr .= 'Applied the same Criterion in %27 Lower Students] '; $Ptr .= '1st Criterion for Sorting the Students: '; $Ptr .= 'Sum of Partial Credit Awarded / Total Number of Tries '; $Ptr .= '2nd Criterion for Sorting the Students: '; $Ptr .= 'Total number of Correct Answers / Total Number of Tries'; $Ptr .= ' |
Disc. | '; $Ptr .= 'Number of Students had at least one discussion.'; $Ptr .= ' |
\# | Problem Title | "; $Str .= 'Resource | Analysis |
---|---|---|---|
'.$number.' | '; $Str .= ''.$Temp.' | '; $Str .= ''.$uri.' | '; $Str .= '
\# | Set Title | "; $Str .= 'Results | Tries |
---|---|---|---|
'.$sequence.' | '; $Str .= ''.$cache->{$sequence.':title'}.' | '; $codes = ''; $attempts = ''; foreach my $problemID (split(':', $cache->{$sequence.':problems'})) { my $problem = $cache->{$problemID.':problem'}; my $LatestVersion = $cache->{$name.':version:'.$problem}; # Output dashes for all the parts of this problem if there # is no version information about the current problem. if(!$LatestVersion) { foreach my $part (split(/\:/,$cache->{$sequence.':'. $problemID. ':parts'})) { $codes .= "-,"; $attempts .= "0,"; } next; } my %partData=undef; # Initialize part data, display skips correctly # Skip refers to when a student made no submissions on that # part/problem. foreach my $part (split(/\:/,$cache->{$sequence.':'. $problemID. ':parts'})) { $partData{$part.':tries'}=0; $partData{$part.':code'}='-'; } # Looping through all the versions of each part, starting with the # oldest version. Basically, it gets the most recent # set of grade data for each part. for(my $Version=1; $Version<=$LatestVersion; $Version++) { foreach my $part (split(/\:/,$cache->{$sequence.':'. $problemID. ':parts'})) { if(!defined($cache->{$name.":$Version:$problem". ":resource.$part.solved"})) { # No grade for this submission, so skip next; } my $tries=0; my $code='U'; $tries = $cache->{$name.":$Version:$problem". ":resource.$part.tries"}; $partData{$part.':tries'}=($tries) ? $tries : 0; my $val = $cache->{$name.":$Version:$problem". ":resource.$part.solved"}; if ($val eq 'correct_by_student') {$code = 'Y';} elsif ($val eq 'correct_by_override') {$code = 'y';} elsif ($val eq 'incorrect_attempted') {$code = 'N';} elsif ($val eq 'incorrect_by_override'){$code = 'N';} elsif ($val eq 'excused') {$code = 'x';} $partData{$part.':code'}=$code; } } # Loop through all the parts for the current problem in the # correct order and prepare the output foreach (split(/\:/,$cache->{$sequence.':'.$problemID. ':parts'})) { $codes .= $partData{$_.':code'}.','; $attempts .= $partData{$_.':tries'}.','; } } $codes =~ s/,$//; $attempts =~ s/,$//; $Str .= ''.$codes.' | '; $Str .= ''.$attempts.' | '; $Str .= '
Select Map | '."\n"; $Ptr .= ''; $Ptr .= &Apache::lonhtmlcommon::MapOptions(\%cache, 'ProblemStatistics'); $Ptr .= ' |
Select Map | '."\n"; $Ptr .= ''; $Ptr .= &Apache::lonhtmlcommon::MapOptions(\%cache, 'StudentAssessment'); $Ptr .= ' | ||||||
Select Student | '."\n"; $Ptr .= ''."\n"; $Ptr .= &Apache::lonhtmlcommon::StudentOptions(\%cache, $students, $selectedName, 'StudentAssessment'); $Ptr .= ' | ||||||
';
$Ptr .= 'print($Ptr);
if($selectedName eq 'No Student Selected') {
$r->print('WARNING: '); $r->print('Please select a student'); return; } my $selected=0; foreach (@$students) { next if ($_ ne $selectedName && $selectedName ne 'All Students'); $selected = 1; my $courseData = &Apache::loncoursedata::DownloadStudentCourseInformation($_, $courseID); last if ($c->aborted()); if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT,0640)) { &Apache::loncoursedata::ProcessStudentData(\%cache, $courseData, $_); if(!$c->aborted()) { $r->print(&StudentReport(\%cache, $_)); } untie(%cache); } } if($selected == 0) { $r->print('WARNING: '); $r->print('Please select a student'); return; } return; } sub BuildClasslist { my ($cacheDB,$students,$studentInformation,$headings,$spacePadding)=@_; my %cache; unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) { return 'Unable to tie database.'; } my $Str=''; $Str .= '
|