[LON-CAPA-cvs] cvs: loncom /interface/statistics lonstudentassessment.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Fri, 07 Mar 2003 17:01:45 -0000
matthew Fri Mar 7 12:01:45 2003 EDT
Modified files:
/loncom/interface/statistics lonstudentassessment.pm
Log:
Added summary table to html output. Added new output mode to let instructors
get just the summary table, without all those pesky students.
Rewrote &StudentAverageTotal to implement this.
Index: loncom/interface/statistics/lonstudentassessment.pm
diff -u loncom/interface/statistics/lonstudentassessment.pm:1.38 loncom/interface/statistics/lonstudentassessment.pm:1.39
--- loncom/interface/statistics/lonstudentassessment.pm:1.38 Fri Mar 7 10:18:39 2003
+++ loncom/interface/statistics/lonstudentassessment.pm Fri Mar 7 12:01:45 2003
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstudentassessment.pm,v 1.38 2003/03/07 15:18:39 matthew Exp $
+# $Id: lonstudentassessment.pm,v 1.39 2003/03/07 17:01:45 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -305,11 +305,19 @@
{ name => 'HTML, totals',
value => 'html, totals',
description => 'Output HTML, but only the summary statistics for each'.
- ' sequence selected.',
+ ' sequence selected for each student.',
mode => 'html',
show => 'totals',
show_links => 'no',
},
+ { name => 'HTML, summary table only',
+ value => 'html summary table only',
+ description => 'Output HTML, but only the final summary table for '.
+ 'all students across all sequences.',
+ mode => 'html',
+ show => 'final table',
+ show_links => 'no',
+ },
{ name => 'Excel, scores only',
value => 'excel, scores only',
description => 'Output an Excel file (compatable with Excel 95), '.
@@ -446,14 +454,27 @@
my $padding;
my $count;
+ my $nodata_count; # The number of students for which there is no data
+ my %prog_state; # progress state used by loncommon PrgWin routines
+
sub html_initialize {
my ($r) = @_;
#
$padding = ' 'x3;
$count = 0;
+ $nodata_count = 0;
#
$r->print("<h3>".$ENV{'course.'.$ENV{'request.course.id'}.'.description'}.
" ".localtime(time)."</h3>");
+
+ #
+ # Set up progress window for 'final table' display only
+ if ($show eq 'final table') {
+ my $studentcount = scalar(@Apache::lonstatistics::Students);
+ %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
+ ($r,'Summary Table Status',
+ 'Summary Table Compilation Progress', $studentcount);
+ }
my $Str = "<pre>\n";
# First, the @StudentData fields need to be listed
my @to_show = &get_student_fields_to_show();
@@ -472,6 +493,11 @@
}
$Str .= "total (of shown problems)</pre>\n";
$Str .= "<pre>";
+ #
+ # Check for suppression of output
+ if ($show eq 'final table') {
+ $Str = '';
+ }
$r->print($Str);
$r->rflush();
return;
@@ -501,6 +527,8 @@
%StudentsData = @tmp;
}
if (scalar(@tmp) < 1) {
+ $nodata_count++;
+ return if ($show eq 'final table');
$Str .= '<font color="blue">No Course Data</font>'."\n";
$r->print($Str);
$r->rflush();
@@ -545,6 +573,14 @@
}
$Str .= ' '.' 'x(length($max)-length($score)).$score.'/'.$max;
$Str .= " \n";
+ #
+ # Check for suppressed output and update the progress window if so...
+ if ($show eq 'final table') {
+ $Str = '';
+ &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
+ 'last student');
+ }
+ #
$r->print($Str);
#
$r->rflush();
@@ -553,11 +589,51 @@
sub html_finish {
my ($r) = @_;
- $r->print("</pre>\n");
+ #
+ # Check for suppressed output and close the progress window if so
+ if ($show eq 'final table') {
+ &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
+ } else {
+ $r->print("</pre>\n");
+ }
+ $r->print(&StudentAverageTotal());
$r->rflush();
return;
}
+sub StudentAverageTotal {
+ my $Str = "<h3>Summary Tables</h3>\n";
+ my $num_students = scalar(@Apache::lonstatistics::Students);
+ my $total_ave = 0;
+ my $total_max = 0;
+ $Str .= '<table border=2 cellspacing="1">'."\n";
+ $Str .= "<tr><th>Title</th><th>Average</th><th>Maximum</th></tr>\n";
+ foreach my $seq (&get_sequences_to_show) {
+ my $ave = int(100*($Statistics->{$seq->{'symb'}}->{'score'}/
+ ($num_students-$nodata_count)))/100;
+ $total_ave += $ave;
+ my $max = $seq->{'num_assess_parts'};
+ $total_max += $max;
+ if ($ave == 0) {
+ $ave = "0.00";
+ }
+ $ave .= ' ';
+ $max .= ' ';
+ $Str .= '<tr><td>'.$seq->{'title'}.'</td>'.
+ '<td align="right">'.$ave.'</td>'.
+ '<td align="right">'.$max.'</td></tr>'."\n";
+ }
+ $total_ave = int(100*$total_ave)/100; # only two digit
+ $Str .= "</table>\n";
+ $Str .= '<table border=2 cellspacing="1">'."\n";
+ $Str .= '<tr><th>Number of Students</th><th>Average</th>'.
+ "<th>Maximum</th></tr>\n";
+ $Str .= '<tr><td>'.($num_students-$nodata_count).'</td>'.
+ '<td>'.$total_ave.'</td><td>'.$total_max.'</td>';
+ $Str .= "</table>\n";
+ return $Str;
+}
+
}
#######################################################
@@ -1082,69 +1158,6 @@
$Str .= $value;
}
return ($Str,$sum,$max);
-}
-
-#######################################################
-#######################################################
-sub StudentAverageTotal {
- my ($cache, $students, $sequenceKeys)=@_;
- my $Str = "\n<b>Summary Tables:</b>\n";
- my %Correct = ();
- my $ProblemsSolved = 0;
- my $TotalProblems = 0;
- my $StudentCount = 0;
-
- foreach my $name (@$students) {
- $StudentCount++;
- foreach my $sequence (@$sequenceKeys) {
- $Correct{$sequence} +=
- $cache->{$name.':'.$sequence.':problemsCorrect'};
- }
- $ProblemsSolved += $cache->{$name.':problemsSolved'};
- $TotalProblems += $cache->{$name.':totalProblems'};
- }
- if ($StudentCount) {
- $ProblemsSolved = sprintf( "%.2f",
- $ProblemsSolved/$StudentCount);
- $TotalProblems /= $StudentCount;
- } else {
- $ProblemsSolved = 0;
- $TotalProblems = 0;
- }
-
- $Str .= '<table border=2 cellspacing="1">'."\n";
- $Str .= '<tr><td><b>Students Count</b></td><td><b>'.
- $StudentCount.'</b></td></tr>'."\n";
- $Str .= '<tr><td><b>Total Problems</b></td><td><b>'.
- $TotalProblems.'</b></td></tr>'."\n";
- $Str .= '<tr><td><b>Average Correct</b></td><td><b>'.
- $ProblemsSolved.'</b></td></tr>'."\n";
- $Str .= '</table>'."\n";
-
- $Str .= '<table border=2 cellspacing="1">'."\n";
- $Str .= '<tr><th>Title</th><th>Total Problems</th>'.
- '<th>Average Correct</th></tr>'."\n";
- foreach my $S(@$sequenceKeys) {
- my $title=$cache->{$S.':title'};
- #$Str .= $cache->{$S.':problems'};
- #my @problems=split(':', $cache->{$S.':problems'});
- #my $pCount=scalar @problems;
- my $pCount=MaxSeqPr($cache,@$students[0],$S);
- my $crr;
- if ($StudentCount) {
- $crr=sprintf( "%.2f", $Correct{$S}/$StudentCount );
- } else {
- $crr="0.00";
- }
- $Str .= '<tr><td>'.$title.
- '</td><td align=center>'.$pCount.
- '</td><td align=center>'.$crr.
- '</td></tr>'."\n";
- }
-
- $Str .= '</table>'."\n";
-
- return $Str;
}
#######################################################