Annotation of capa/capa51/GUITools/manager.funct.c, revision 1.2
1.2 ! albertel 1: /*
! 2: * grader.funct.c
! 3: * Copyright Guy Albertelli II 1996-1999
! 4: * Portions Copyright Issac Tsai
! 5: */
! 6: #include <stdio.h>
! 7: #include <tk.h>
! 8: #include <Capa/capaCommon.h>
! 9: #include <manager.h>
! 10:
! 11: int capaCTcreateSummary (ClientData clientdata, Tcl_Interp *interp, int argc, char *argv[])
! 12: {
! 13: int section, set;
! 14: int studentCount,currentStudent;
! 15: int setScores, termScores, validScores, termValids;
! 16: int setIndex, maxSet=0;
! 17: int whatSection;
! 18: char fmt[64];
! 19: char grades[4], sectionChar[4], *answersPtr, buf[BUFFER_SIZE], *who,*which,*sortOne,*sortTwo;
! 20: T_student *studentPtr, *currentStudentPtr;
! 21: FILE *outputFile;
! 22:
! 23: sprintf(buf,"summary.section.%s",argv[2]);
! 24: section = atoi(Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY));
! 25: sprintf(buf,"summary.set.%s",argv[2]);
! 26: set = atoi(Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY));
! 27: sprintf(buf,"summary.who.%s",argv[2]);
! 28: who=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
! 29: sprintf(buf,"summary.which.%s",argv[2]);
! 30: which=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
! 31: sprintf(buf,"summary.first.%s",argv[2]);
! 32: sortOne=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
! 33: sprintf(buf,"summary.second.%s",argv[2]);
! 34: sortTwo=Tcl_GetVar2(interp,"gCT",buf,TCL_GLOBAL_ONLY);
! 35: maxSet=howManySetDBFile(argv[3]);
! 36: if (((strcmp(which,"upto") == 0) && ((set <= 0) || (set >= NUM_SET_LIMIT))) || (set > maxSet)) {
! 37: sprintf(buf,"displayError \"The set number (%d) doesn't exist.\"",set);
! 38: Tcl_Eval(interp,buf);
! 39: Tcl_ResetResult(interp);
! 40: Tcl_AppendResult(interp,"Error",NULL);
! 41: return TCL_ERROR;
! 42: }
! 43: outputFile=fopen(argv[1],"w");
! 44: if ( strcmp(who,"all") == 0 ) {
! 45: whatSection = GET_ALL_SECTIONS;
! 46: } else {
! 47: whatSection = section;
! 48: }
! 49: studentCount = capa_get_section(&studentPtr, whatSection);
! 50:
! 51: sprintf(buf,"updateStatusMessage \"Creating primary sort key\" %s",argv[2]);
! 52: if (Tcl_Eval(interp,buf) != TCL_OK) {
! 53: free_students(studentPtr);
! 54: fclose(outputFile);
! 55: return TCL_ERROR;
! 56: }
! 57:
! 58: if( studentCount > 0 ) {
! 59: switch (sortOne[1])
! 60: {
! 61: case 'a': /*BY_NAME*/
! 62: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 63: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 64: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 65: argv[2]);
! 66: Tcl_Eval(interp,buf);
! 67: sprintf(currentStudentPtr->s_key,"%s",currentStudentPtr->s_nm);
! 68: }
! 69: break;
! 70: case 'u': /*BY_NUMBER*/
! 71: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 72: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 73: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 74: argv[2]);
! 75: Tcl_Eval(interp,buf);
! 76: sprintf(currentStudentPtr->s_key,"%s",currentStudentPtr->s_sn);
! 77: }
! 78: break;
! 79: case 'e': /*BY_SECTION*/
! 80: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 81: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 82: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 83: argv[2]);
! 84: Tcl_Eval(interp,buf);
! 85: sprintf(currentStudentPtr->s_key,"%03d",currentStudentPtr->s_sec);
! 86: }
! 87: break;
! 88: case 'r': /*BY_GRADE*/
! 89: if(strcmp(which,"specific") == 0 ) {
! 90: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 91: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 92: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 93: argv[2]);
! 94: Tcl_Eval(interp,buf);
! 95: if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,
! 96: &validScores,&answersPtr)) == -2 )
! 97: break;
! 98: if( setScores < 0 ) {
! 99: sprintf(currentStudentPtr->s_key,"-");
! 100: } else {
! 101: sprintf(currentStudentPtr->s_key,"%03d",setScores);
! 102: }
! 103: capa_mfree(answersPtr);
! 104: }
! 105: } else {
! 106: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 107: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 108: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 109: argv[2]);
! 110: Tcl_Eval(interp,buf);
! 111: for(termScores=0, termValids=0, setIndex=1; setIndex <= set; setIndex++) {
! 112: if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex,
! 113: &validScores,&answersPtr)) >= 0 ) {
! 114: termScores += setScores;
! 115: }
! 116: capa_mfree(answersPtr);
! 117: termValids += validScores;
! 118: }
! 119: sprintf(currentStudentPtr->s_key,"%03d",termScores);
! 120: }
! 121: }
! 122: break;
! 123: }
! 124:
! 125: sprintf(buf,"updateStatusMessage \"Creating secondary sort key\" %s",argv[2]);
! 126: if (Tcl_Eval(interp,buf) != TCL_OK) {
! 127: free_students(studentPtr);
! 128: fclose(outputFile);
! 129: return TCL_ERROR;
! 130: }
! 131: switch (sortTwo[1])
! 132: {
! 133: case 'a':/*BY_NAME*/
! 134: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 135: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 136: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 137: argv[2]);
! 138: Tcl_Eval(interp,buf);
! 139: strcat(currentStudentPtr->s_key,currentStudentPtr->s_nm);
! 140: }
! 141: break;
! 142: case 'u':/*BY_NUMBER*/
! 143: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 144: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 145: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 146: argv[2]);
! 147: Tcl_Eval(interp,buf);
! 148: strcat(currentStudentPtr->s_key,currentStudentPtr->s_sn);
! 149: }
! 150: break;
! 151: case 'e':/*BY_SECTION*/
! 152: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 153: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 154: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 155: argv[2]);
! 156: Tcl_Eval(interp,buf);
! 157: sprintf(sectionChar,"%03d",currentStudentPtr->s_sec);
! 158: strcat(currentStudentPtr->s_key,sectionChar);
! 159: }
! 160: break;
! 161: case 'r':/*BY_GRADE*/
! 162: if(strcmp(which,"specific") == 0 ) {
! 163: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 164: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 165: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 166: argv[2]);
! 167: Tcl_Eval(interp,buf);
! 168: if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,&validScores,
! 169: &answersPtr) ) == -2 ) {
! 170: break;
! 171: }
! 172: if( setScores < 0 ) {
! 173: strcat(currentStudentPtr->s_key,"-");
! 174: } else {
! 175: sprintf(grades,"%03d",setScores);
! 176: strcat(currentStudentPtr->s_key,grades);
! 177: }
! 178: capa_mfree(answersPtr);
! 179: }
! 180: } else {
! 181: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 182: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 183: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 184: argv[2]);
! 185: Tcl_Eval(interp,buf);
! 186: for (termScores=0, termValids=0, setIndex=1;setIndex<=set;setIndex++) {
! 187: if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex,
! 188: &validScores,&answersPtr) ) >= 0 ) {
! 189: termScores += setScores;
! 190: }
! 191: capa_mfree(answersPtr);
! 192: termValids += validScores;
! 193: }
! 194: sprintf(grades,"%03d",termScores);
! 195: strcat(currentStudentPtr->s_key,grades);
! 196: }
! 197: }
! 198: break;
! 199: }
! 200: sprintf(buf,"updateStatusMessage \"Sorting\" %s",argv[2]);
! 201: if (Tcl_Eval(interp,buf) != TCL_OK) {
! 202: free_students(studentPtr);
! 203: fclose(outputFile);
! 204: return TCL_ERROR;
! 205: }
! 206: msort_main(&studentPtr);
! 207: Tcl_ResetResult(interp);
! 208:
! 209: sprintf(fmt,"%%-%ds\t%%-%ds %%2d\t", MAX_NAME_CHAR,MAX_STUDENT_NUMBER);
! 210: sprintf(buf,"updateStatusMessage \"Creating Report\" %s",argv[2]);
! 211: if (Tcl_Eval(interp,buf) != TCL_OK) {
! 212: free_students(studentPtr);
! 213: fclose(outputFile);
! 214: return TCL_ERROR;
! 215: }
! 216: for(currentStudentPtr=studentPtr,currentStudent=1;currentStudentPtr;
! 217: currentStudentPtr=currentStudentPtr->s_next,currentStudent++) {
! 218:
! 219: sprintf(buf,"updateStatusBar %f %s",(float)currentStudent/(float)studentCount,
! 220: argv[2]);
! 221: Tcl_Eval(interp,buf);
! 222: fprintf(outputFile,fmt,currentStudentPtr->s_nm,currentStudentPtr->s_sn,
! 223: currentStudentPtr->s_sec);
! 224: if( strcmp(which,"specific") == 0) {
! 225: setScores = 0; validScores = 0;
! 226: if( (setScores = capa_get_score(currentStudentPtr->s_sn,set,&validScores,&answersPtr) ) == -2 ) {
! 227: break;
! 228: }
! 229: if( setScores < 0 ) {
! 230: fprintf(outputFile, " -\t%3d\n", validScores);
! 231: } else {
! 232: fprintf(outputFile, "%3d\t%3d\n",setScores, validScores);
! 233: }
! 234: capa_mfree(answersPtr);
! 235: } else {
! 236: for( setScores=0, validScores=0, termScores = 0, termValids = 0, setIndex = 1;
! 237: setIndex <= set; setIndex++) {
! 238: if( (setScores = capa_get_score(currentStudentPtr->s_sn,setIndex,
! 239: &validScores,&answersPtr) ) >= 0 ) {
! 240: termScores += setScores;
! 241: }
! 242: capa_mfree(answersPtr);
! 243: termValids += validScores;
! 244: if( setScores >= 0 ) {
! 245: fprintf(outputFile, "%3d ",setScores);
! 246: } else {
! 247: fprintf(outputFile, " - ");
! 248: }
! 249: }
! 250: fprintf(outputFile, "\t %3d\t%3d\n",termScores,termValids);
! 251: }
! 252: }
! 253: free_students(studentPtr);
! 254: }
! 255: fclose(outputFile);
! 256: return TCL_OK;
! 257: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>