version 1.1, 1999/09/28 21:25:36
|
version 1.3, 1999/12/07 19:10:47
|
Line 0
|
Line 1
|
|
/* |
|
* grader.funct.c |
|
* Copyright Guy Albertelli II 1996-1999 |
|
* Portions Copyright Issac Tsai |
|
*/ |
|
#include <stdio.h> |
|
#include <tk.h> |
|
#include <Capa/capaCommon.h> |
|
#include <manager.h> |
|
|
|
int capaCTcreateSummary (ClientData clientdata, Tcl_Interp *interp, int argc, char *argv[]) |
|
{ |
|
int section, set; |
|
int studentCount,currentStudent; |
|
int setScores, termScores, validScores, termValids; |
|
int setIndex, maxSet=0; |
|
int whatSection; |
|
char fmt[64]; |
|
char grades[4], sectionChar[4], *answersPtr, buf[BUFFER_SIZE], *who,*which,*sortOne,*sortTwo; |
|
T_student *studentPtr, *currentStudentPtr; |
|
FILE *outputFile; |
|
|
|
sprintf(buf,"summary.section.%s",argv[2]); |
|
section = atoi(Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY)); |
|
sprintf(buf,"summary.set.%s",argv[2]); |
|
set = atoi(Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY)); |
|
sprintf(buf,"summary.who.%s",argv[2]); |
|
who=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY); |
|
sprintf(buf,"summary.which.%s",argv[2]); |
|
which=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY); |
|
sprintf(buf,"summary.first.%s",argv[2]); |
|
sortOne=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY); |
|
sprintf(buf,"summary.second.%s",argv[2]); |
|
sortTwo=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY); |
|
maxSet=howManySetDBFile(); |
|
if (((strcmp(which,"upto") == 0) && ((set <= 0) || (set >= NUM_SET_LIMIT))) || (set > maxSet)) { |
|
sprintf(buf,"displayError \"The set number (%d) doesn't exist.\"",set); |
|
Tcl_Eval(interp,buf); |
|
Tcl_ResetResult(interp); |
|
Tcl_AppendResult(interp,"Error",NULL); |
|
return TCL_ERROR; |
|
} |
|
outputFile=fopen(argv[1],"w"); |
|
if ( strcmp(who,"all") == 0 ) { |
|
whatSection = GET_ALL_SECTIONS; |
|
} else { |
|
whatSection = section; |
|
} |
|
studentCount = capa_get_section(&studentPtr, whatSection); |
|
|
|
sprintf(buf,"updateStatusMessage \"Creating primary sort key\" %s",argv[2]); |
|
if (Tcl_Eval(interp,buf) != TCL_OK) { |
|
free_students(studentPtr); |
|
fclose(outputFile); |
|
return TCL_ERROR; |
|
} |
|
|
|
if( studentCount > 0 ) { |
|
switch (sortOne[1]) |
|
{ |
|
case 'a': /*BY_NAME*/ |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
sprintf(currentStudentPtr->s_key,"%s",currentStudentPtr->s_nm); |
|
} |
|
break; |
|
case 'u': /*BY_NUMBER*/ |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
sprintf(currentStudentPtr->s_key,"%s",currentStudentPtr->s_sn); |
|
} |
|
break; |
|
case 'e': /*BY_SECTION*/ |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
sprintf(currentStudentPtr->s_key,"%03d",currentStudentPtr->s_sec); |
|
} |
|
break; |
|
case 'r': /*BY_GRADE*/ |
|
if(strcmp(which,"specific") == 0 ) { |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
if( (setScores = capa_get_score(currentStudentPtr->s_sn,set, |
|
&validScores,&answersPtr)) == -2 ) |
|
break; |
|
if( setScores < 0 ) { |
|
sprintf(currentStudentPtr->s_key,"-"); |
|
} else { |
|
sprintf(currentStudentPtr->s_key,"%03d",setScores); |
|
} |
|
capa_mfree(answersPtr); |
|
} |
|
} else { |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
for(termScores=0, termValids=0, setIndex=1; setIndex <= set; setIndex++) { |
|
if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex, |
|
&validScores,&answersPtr)) >= 0 ) { |
|
termScores += setScores; |
|
} |
|
capa_mfree(answersPtr); |
|
termValids += validScores; |
|
} |
|
sprintf(currentStudentPtr->s_key,"%03d",termScores); |
|
} |
|
} |
|
break; |
|
} |
|
|
|
sprintf(buf,"updateStatusMessage \"Creating secondary sort key\" %s",argv[2]); |
|
if (Tcl_Eval(interp,buf) != TCL_OK) { |
|
free_students(studentPtr); |
|
fclose(outputFile); |
|
return TCL_ERROR; |
|
} |
|
switch (sortTwo[1]) |
|
{ |
|
case 'a':/*BY_NAME*/ |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
strcat(currentStudentPtr->s_key,currentStudentPtr->s_nm); |
|
} |
|
break; |
|
case 'u':/*BY_NUMBER*/ |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
strcat(currentStudentPtr->s_key,currentStudentPtr->s_sn); |
|
} |
|
break; |
|
case 'e':/*BY_SECTION*/ |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
sprintf(sectionChar,"%03d",currentStudentPtr->s_sec); |
|
strcat(currentStudentPtr->s_key,sectionChar); |
|
} |
|
break; |
|
case 'r':/*BY_GRADE*/ |
|
if(strcmp(which,"specific") == 0 ) { |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,&validScores, |
|
&answersPtr) ) == -2 ) { |
|
break; |
|
} |
|
if( setScores < 0 ) { |
|
strcat(currentStudentPtr->s_key,"-"); |
|
} else { |
|
sprintf(grades,"%03d",setScores); |
|
strcat(currentStudentPtr->s_key,grades); |
|
} |
|
capa_mfree(answersPtr); |
|
} |
|
} else { |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
for (termScores=0, termValids=0, setIndex=1;setIndex<=set;setIndex++) { |
|
if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex, |
|
&validScores,&answersPtr) ) >= 0 ) { |
|
termScores += setScores; |
|
} |
|
capa_mfree(answersPtr); |
|
termValids += validScores; |
|
} |
|
sprintf(grades,"%03d",termScores); |
|
strcat(currentStudentPtr->s_key,grades); |
|
} |
|
} |
|
break; |
|
} |
|
sprintf(buf,"updateStatusMessage \"Sorting\" %s",argv[2]); |
|
if (Tcl_Eval(interp,buf) != TCL_OK) { |
|
free_students(studentPtr); |
|
fclose(outputFile); |
|
return TCL_ERROR; |
|
} |
|
msort_main(&studentPtr); |
|
Tcl_ResetResult(interp); |
|
|
|
sprintf(fmt,"%%-%ds\t%%-%ds %%2d\t", MAX_NAME_CHAR,MAX_STUDENT_NUMBER); |
|
sprintf(buf,"updateStatusMessage \"Creating Report\" %s",argv[2]); |
|
if (Tcl_Eval(interp,buf) != TCL_OK) { |
|
free_students(studentPtr); |
|
fclose(outputFile); |
|
return TCL_ERROR; |
|
} |
|
for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr; |
|
currentStudentPtr=currentStudentPtr->s_next,currentStudent++) { |
|
|
|
sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount, |
|
argv[2]); |
|
Tcl_Eval(interp,buf); |
|
fprintf(outputFile,fmt,currentStudentPtr->s_nm,currentStudentPtr->s_sn, |
|
currentStudentPtr->s_sec); |
|
if( strcmp(which,"specific") == 0) { |
|
setScores = 0; validScores = 0; |
|
if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,&validScores,&answersPtr) ) == -2 ) { |
|
break; |
|
} |
|
if( setScores < 0 ) { |
|
fprintf(outputFile, " -\t%3d\n", validScores); |
|
} else { |
|
fprintf(outputFile, "%3d\t%3d\n",setScores, validScores); |
|
} |
|
capa_mfree(answersPtr); |
|
} else { |
|
for( setScores=0, validScores=0, termScores = 0, termValids = 0, setIndex = 1; |
|
setIndex <= set; setIndex++) { |
|
if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex, |
|
&validScores,&answersPtr) ) >= 0 ) { |
|
termScores += setScores; |
|
} |
|
capa_mfree(answersPtr); |
|
termValids += validScores; |
|
if( setScores >= 0 ) { |
|
fprintf(outputFile, "%3d ",setScores); |
|
} else { |
|
fprintf(outputFile, " - "); |
|
} |
|
} |
|
fprintf(outputFile, "\t %3d\t%3d\n",termScores,termValids); |
|
} |
|
} |
|
free_students(studentPtr); |
|
} |
|
fclose(outputFile); |
|
return TCL_OK; |
|
} |