Annotation of 43BSD/contrib/apl/lib/ngradesys, revision 1.1

1.1     ! root        1: n��*.KB�&       H idn { id nam; sname; sum; n; v; index
        !             2:   nam { ,nam
        !             3:   sname {  ((1YRname),Rnam)Yname
        !             4:   sum { +/v{^/sname=(Rsname)Rnam
        !             5:   n { 0
        !             6:   } (0=sum)/nfind
        !             7:   } (1#sum)/mfind
        !             8:   n { vI1
        !             9:   } (^/((1URname)Ynam)=name[n;])/0
        !            10:   L { ' ',' ','full name: ',name[n;]
        !            11:   }0
        !            12: nfind: L { 'name not found'
        !            13:   } 0
        !            14: mfind: L { 'ambiguous names'
        !            15:   sname { v/[1]name
        !            16:   } (0=^/^/((Rsname)Rsname[1;])=sname)/dfind
        !            17:   L { ' ',(NJ(((1YRsname),1)R index { v/I1YRname)),':',' ',sname
        !            18: getidx: n { 'Enter index of desired name: ' getnum '-'
        !            19:   } (0=V/n=index,`1)/error
        !            20:   } 0
        !            21: dfind: L { ' ',' ',sname
        !            22:   } 0
        !            23: error: L { '*** illegal index, try again ***'
        !            24:   } getidx
        !            25:       dstatdstat x; z
        !            26:   z { stat x
        !            27: ' '
        !            28: ' '
        !            29:   'sample size          ';z[1]
        !            30:   'maximum              ';z[2]
        !            31:   'minimum              ';z[3]
        !            32:   'range                ';z[4]
        !            33:   'mean                 ';z[5]
        !            34:   'variance             ';z[6]
        !            35:   'standard deviation   ';z[7]
        !            36:   'mean deviation       ';z[8]
        !            37:   'median               ';z[9]
        !            38: summarysummary; i
        !            39: L{' '
        !            40: L{'     score summary'
        !            41: L{'  '
        !            42: L { ((4+1URname),(`1+1YRlist)R4)fhead list
        !            43: L { name,(5 0 NJ ((1YRname),1)RI1YRname),4 0NJ score
        !            44: L { 3 1 R ' '
        !            45: dropdrop ;nam;idx;mask
        !            46: L { 'Enter names (one per line) end with an empty line.'
        !            47: getname: L'{'name: '
        !            48:   } (0=Rnam{L')/0
        !            49:   idx { id nam
        !            50:   } (0=idx)/getname
        !            51:   L { ((4 + 1URname),(`1+1YRlist)R4)fhead list
        !            52:   L { name[idx;],(5 0NJidx),4 0NJscore[idx;]
        !            53:   L'{'ok? (y/n): '
        !            54:   }('y'#'L)/nogo
        !            55:   mask { (1YRname)R1
        !            56:   mask[idx]{0
        !            57:   name {mask/[1]name
        !            58:   } ((`1YRssn)=0)/nossn
        !            59:   ssn { mask/[1]ssn
        !            60:   } ssnd
        !            61: nossn: ssn { ((1YRname),0)R''
        !            62: ssnd: } ((`1YRscore)=0)/noscore
        !            63:   score { mask/[1]score
        !            64:   } done
        !            65: noscore: score { ((1YRname),0)R0
        !            66: done: L{'drop completed'
        !            67:   } getname
        !            68: nogo: L { 'nobody dropped'
        !            69:   } getname
        !            70:       statz{stat x;r;max;min;mean;var;sd;md;med;mode;v;m;n
        !            71: n{Rx
        !            72: r{(max{x[n])-min{(x{x[|Hx])[1]
        !            73: sd{(var{(+/(|x-nRmean{(+/x)%n)*2)%n-1)*0.5
        !            74: md{(+/|x-nRmean)%n
        !            75: med{0.5X+/x[(Sn%2),1+Dn%2]
        !            76: z{n,max,min,r,mean,var,sd,md,med
        !            77: &     statname`H number  maximum minimum range   mean    variancestd dev mean devmedian   newstatstatscore { newstat data ;i
        !            78:  statscore { (9,1URdata)R0
        !            79:  i {1
        !            80: next: statscore[;i]{stat data[;i]
        !            81:  } ((1URstatscore) & i{i+1)/next
        !            82:  statscore[1;]{+/[1]0#data
        !            83: statsummarystatsummary 
        !            84: L{' '
        !            85: L{'      statistics summary'
        !            86: L{' '
        !            87: L { (11,(`2+1YRlist)R4) fhead 1 0Ulist
        !            88: L { statname,4 0 NJ D newstat score
        !            89: L { 3 1 R ' '
        !            90:      newscorenewscore ;pos;i;mask;listn;p;tp;it
        !            91:   L { 'current types are:'
        !            92:   L { type
        !            93:   L' { 'type ? '
        !            94:   p { type find it { L'
        !            95:   }(V/p)/oktype
        !            96:   L { 'type not found'
        !            97:   }0
        !            98: oktype: tp { p/IRp
        !            99:   pos { (tp<scoretype)I1
        !           100:   mask { 1,(Rscoretype)R1
        !           101:   mask[pos] { 0
        !           102:   score { mask\score
        !           103:   scoremax { mask\scoremax
        !           104:   list { (1,mask)\[1]list
        !           105:   scoretype { mask\scoretype
        !           106:   scoretype[pos] { tp
        !           107:   scoremax[pos] { 'scoremax ? ' getnum '.'
        !           108:   listn { 2 0NJ+/,scoretype=scoretype[pos]
        !           109:   list[pos+1;] { (1URlist)Yit,listn
        !           110: CJ now input new scores
        !           111:   i { 1
        !           112: next: score[i;pos] { (name[i;],': ') getnum '-.'
        !           113:   }((1YRname)&i { i+1)/next
        !           114:   L { 'new score complete'
        !           115: newnamenewname; nname; nssn
        !           116:   L { 'enter names (one per line) end with an empty line.'
        !           117: getname: L' { 'name: '
        !           118:   }(0=Rnname{L')/done
        !           119:   name { name addrow nname
        !           120:   nssn { ''
        !           121:   } (~askedssn)/addssn
        !           122:   L' { 'ssn : '
        !           123:   nssn { L'
        !           124: addssn: ssn { ssn addrow nssn
        !           125:   } getname
        !           126: done: score { ((1YRname),`1YRscore)Yscore
        !           127:   L { 'newname complete'
        !           128:      analysisanalysis; i; mk; n 
        !           129: n { 1YRname
        !           130: means{ (n,1+1YRtype)R0
        !           131: i{1
        !           132: next: mk{ scoretype=i
        !           133:  }done XI 0=V/,mk
        !           134: means[;i]{ 100X(+/mk/score) % +/mk/scoremax
        !           135: done: }((1YRtype) >= i{ i+1 )/next
        !           136: means[;i]{ (+/(means[;Ii-1]X(n,Rweight)Rweight)) %+/weight
        !           137: 
        !           138: histgm title histgm data ; i;h;m50
        !           139: m50 { 51 > S/data
        !           140: data { S data%2-m50
        !           141: h {51R0
        !           142: i{0
        !           143: loop: h[i+1] { +/data =i
        !           144: }loop XI 50 & i {i+1
        !           145: ''
        !           146: '              histogram of ',title
        !           147: ''
        !           148: i { S/h
        !           149: loop2: ' *'[1+ h&i]
        !           150: }loop2 XI 0< i{i-1
        !           151: '|----|----|----|----|----|----|----|----|----|----|'
        !           152: }m50/low
        !           153: '0   10   20   30   40   50   60   70   80   90   100'
        !           154: }0
        !           155: low:'0    5   10   15   20   25   30   35   40   45   50'
        !           156: 
        !           157: findp { list find item
        !           158: p { ^/list=(Rlist)R(1URlist)Y item,'        '
        !           159:       
        !           160: printstatprintstat colnam;data
        !           161: }(0=Rdata{ getcol colnam)/0
        !           162: dstat data
        !           163:       printstat0printstat0 colnam;data
        !           164: }(0=Rdata{ getcol colnam)/0
        !           165: data { (0#data)/data
        !           166: dstat data
        !           167:       getcoldata { getcol colnam;p
        !           168: p { 1U list find colnam
        !           169: }(~V/p)/snf
        !           170: data { ,p/score
        !           171: }0
        !           172: snf:p { tlist find colnam
        !           173: }(~V/p)/nnf
        !           174: data {,p/means
        !           175: }0
        !           176: nnf:'column name ',colnam,' not found'
        !           177: data { 0R0
        !           178:       
        !           179: printhistprinthist colnam;data
        !           180: }(0=Rdata{ getcol colnam)/0
        !           181: colnam histgm data
        !           182:       printhist0printhist0 colnam;data
        !           183: }(0=Rdata{ getcol colnam)/0
        !           184: data { (0#data)/data
        !           185: colnam histgm data
        !           186: setupsetup ;i;tt;nname;wt
        !           187:   } askedsetup/exit
        !           188:   L{ 'enter the score types (one per line) end with an empty line.'
        !           189:   type { 0 0 R' '
        !           190: gettype: L' { 'type: '
        !           191:   }next XI 0=Rtt { 'L
        !           192:   type { type addrow tt
        !           193:   }gettype
        !           194: next: L{ 'enter the weights for each type'
        !           195:   list{(1,Rlist)Rlist { (6S3+1URtype)Y'number'
        !           196:   i { 1
        !           197:   weight { (1YRtype)R0
        !           198: nextweight: weight[i] { (type[i;],' = ') getnum '.'
        !           199:   }nextweight XI (1YRtype)&i { i+1
        !           200:   name { 0 0 R' '
        !           201:   L { 'enter names (one per line) end with an empty line.'
        !           202: getname: L' { 'name: '
        !           203:   } next2 XI 0=Rnname { L'
        !           204:   name { name addrow nname
        !           205:   } getname
        !           206: next2: score { ((1YRname),0)R0
        !           207:   scoretype { 0R0
        !           208:   scoremax { 0R0
        !           209:   ssn { 0 0R0
        !           210:   askedssn { 0
        !           211:   subs { 0
        !           212:   L { 'setup complete'
        !           213:   askedsetup { 1
        !           214:   } 0
        !           215: exit: L { 'setup previously completed'
        !           216: changechange;nam;stype;idx;ip;ic
        !           217:   L' { 'Enter the item to be changed: '
        !           218:   stype { L',' '
        !           219:   ic { list find stype
        !           220:   newtype { nwscore
        !           221:   }(0#V/ic)/ok
        !           222:   newtype { nwname
        !           223:   }(^/stype=(Rstype)Y'name          ')/ok
        !           224:   newtype { nwssn
        !           225:   }(^/stype=(Rstype)Y'ssn           ')/ok
        !           226:   L{'type not found'
        !           227:   }0
        !           228: ok:col { `1 + ic I 1
        !           229:   L { 'Enter names (one per line) end with an empty line.'
        !           230: getname: L' { 'name: '
        !           231:   nam { L'
        !           232:   } (0=Rnam)/0
        !           233:   idx { id nam
        !           234:   }(0=idx)/getname
        !           235:   } newtype
        !           236: nwscore: L{name[idx;],' - ',list[1+col;],'old score ',Bscore[idx;col]
        !           237:   }(1#R ip{'new score: ' getnum '-.')/nc
        !           238:   }(0>ip)/nc
        !           239:   score[idx;col]{ip
        !           240:  L { 'score change complete'
        !           241:   }getname
        !           242: nwname: L' { 'new name: '
        !           243:   } (0=Rnam{L')/nc
        !           244:   name { name addrow nam
        !           245:   name[idx;] { name[1YRname;]
        !           246:   name { name[I`1+1YRname;]
        !           247:   L { 'name change complete'
        !           248:   }getname
        !           249: nwssn: L { name[idx;],' -  old ssn = ',ssn[idx;]
        !           250:   L' { 'new ssn: '
        !           251:   } (0=Rsin{L')/nc
        !           252:   ssn[idx;] { 9Y (~sinE' -')/sin
        !           253:   L { 'ssn change complete'
        !           254:   }getname
        !           255: nc: L{'no change'
        !           256:   }getname
        !           257: 
        !           258: analstatsanalstats 
        !           259: L {''
        !           260: L {'   analysis statistics'
        !           261: L { ''
        !           262: tlist { type,[1](1URtype)Y'total'
        !           263: L{(11,(`1+1YRtlist)R4) fhead tlist
        !           264: L { statname,4 0 NJD newstat means
        !           265: L { 3 1 R ' '
        !           266: 
        !           267: analprintanalprint; rank ;tlist
        !           268:   tlist { type,[1](1URtype)Y'total'
        !           269:   rank {  |V ,means[;1URmeans]
        !           270:   L { ' '
        !           271:   L { '   ranking of score totals'
        !           272:   L { ' '
        !           273:   L { ((3+1URname),(1YRtlist)R5) fhead ((1,1URtlist)R'rank    '),[1]tlist
        !           274:   L { name[rank;],(4 0NJ(((Rrank),1)RIRrank)),5 1NJmeans[rank;]
        !           275:   L { 3 1 R' '
        !           276: anal466anal466; i; mk; ds; dt; dm; scoret; low 
        !           277: CJ assume types hw, test and final
        !           278: means{ ((Rnumber),1+1YRtype)R0
        !           279: scoret { tscore score
        !           280:   i{1
        !           281: CJ for each student
        !           282: loop: ds{ scoret[i;]
        !           283: CJ homework
        !           284:   mk { scoretype=1
        !           285:   dt { mk/ds
        !           286:   dm { mk/scoremax
        !           287: CJ drop lowest homework
        !           288:   low { (dtID/dt)#IRdt
        !           289:   means[i;1]{(+/low/dtXdm)%+/low/dm
        !           290: CJ tests (skip if none)
        !           291:   }l1 XI ~V/mk{scoretype=2
        !           292:   dt { mk/ds
        !           293:   dm { mk/scoremax
        !           294:   low { dtID/dt
        !           295:   dt[low] { means[i;3] { S/dt[low],(scoretype=3)/ds
        !           296:   means[i;2]{(+/dtXdm)%+/dm
        !           297:   }loop XI (1YRmeans)&i{i+1
        !           298: l1: means[;4]{ (+/(means[;1 2 3]X((Rnumber),Rweight)Rweight)) %+/weight
        !           299: analprint
        !           300:       tscoreres { tscore data; i; dt; mn; sd
        !           301: CJ tscore computes the tscores for a vector
        !           302: CJ or matrix <data>.
        !           303:   res { (Rdata)R0
        !           304:   i{1
        !           305:   }loop XI 2=RRdata
        !           306:   dt { data
        !           307:   }l1
        !           308: loop: dt { data[;i]
        !           309: l1: mn { (+/dt)%Rdt
        !           310:   sd { ((+/(dt-mn)*2)%`1+Rdt)*.5
        !           311:   dt { 50 + 10 X (dt-mn)%sd
        !           312:   }end XI 1=RRdata
        !           313:   res[;i]{dt
        !           314:   }loop X (1URres)&i{i+1
        !           315: end: res{dt
        !           316:      tsummarytsummary
        !           317: L{' '
        !           318: L{'     t-score summary'
        !           319: L{'  '
        !           320: L { ((4+1URname),(`1+1YRlist)R4)fhead list
        !           321: L { name,(5 0 NJ numc),4 0NJ D tscore score
        !           322: 
        !           323: fheadr { f fhead list
        !           324: r{((I+/f)E+\f)\O\ list
        !           325: 
        !           326: addrowr { mx addrow row; l
        !           327: CJ add a new row to a matrix
        !           328: l { (Rrow)S1URmx
        !           329: r { (((1YRmx),l)Ymx),[1]lYrow
        !           330: lgradelgrade 
        !           331: CJ compute lettergrade
        !           332: L{'enter cutoff values'
        !           333: L{'        a    b    c    d'
        !           334: cut { L
        !           335: letter { ((1YRmeans),1)R'fdcba'[1++/means[;1URmeans]J.>cut]
        !           336: alphabetizealphabetize;cols;order;alphabet
        !           337: CJ alphabetize the name list and reorder the scores
        !           338:   alphabet { ' ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
        !           339:   cols { I 10 D Rname[1;]
        !           340:   order { |H +/ (alphabetIname[;cols])X((Rname[;1]),10 D Rname[1;])RO|((Ralphabet)*cols)
        !           341:   name { name[order;]
        !           342:   score { score[order;]
        !           343:   ssn { ssn[order;]
        !           344: askssnaskssn ;i;sin
        !           345:   } askedssn/enter
        !           346: CJ ask for a ssn for each person in the name list
        !           347:   i { 1
        !           348:   ssn { ((Rname[;1]),9)R ' '
        !           349: loop: L' { name[i;],': '
        !           350:   sin { L', ' '
        !           351:   ssn[i;] { 9Y (~ sin E ' -')/sin
        !           352:   } ((1YRssn) & i { i+1)/loop
        !           353:   L { 'ssn entry complete'
        !           354:   askedssn { 1
        !           355:   } 0
        !           356: enter: L { 'ssn previously completed.'
        !           357:      analgrinanalgrin;i;means;mk;ds;dt;dm;low;n;w
        !           358:   n { 1YRname
        !           359:   w { Rweight
        !           360:   scoret { tscore score
        !           361:   rank { means { (n,1+1YRtype)R0
        !           362:   i { 1
        !           363:   } subs/loop2
        !           364: loop1: }enter1 XI ~V/mk{scoretype=i
        !           365:   dm { mk/scoremax
        !           366:   means[;i] { \O(+/(mk/scoret)X((n,Rdm)Rdm))%+/dm
        !           367:   rank[;i] { \O|H|Gmeans[;i]
        !           368: enter1: }loop1 XI (w&i{i+1)
        !           369:   rank[;1+w] { \O|H|G(+/means[;1 2 3]X(n,w)Rweight)%+/weight
        !           370:   } 0
        !           371: loop2: ds { scoret[i;]
        !           372:   mk { scoretype=1
        !           373:   dt { mk/ds
        !           374:   dm { mk/scoremax
        !           375:   low { (dtID/dt)#IRdt
        !           376:   means[i;1]{(+/low/dtXdm)%+/low/dm
        !           377:   }enter2 XI ~V/mk{scoretype=2
        !           378:   dt { mk/ds
        !           379:   dm { mk/scoremax
        !           380:   low { dtID/dt
        !           381:   dt[low] { means[i;3] { S/dt[low],(scoretype=3)/ds
        !           382:   means[i;2] { (+/dtXdm)%+/dm
        !           383:   }loop2 XI (1YRmeans)&i{i+1
        !           384: enter2: means[;4] { (+/(means[;1 2 3]X(n,w)Rweight)%+/weight
        !           385:   rank { |H[1]|G[1]means
        !           386: gringrin;ss;n
        !           387:   ss { 'L,' '
        !           388:   ss { 9Y(ss#'-')/ss
        !           389:   n { (^/ssn=(Rssn)Rss)I1
        !           390:   } (n$1YRssn)/ok
        !           391:   L { 'invalid student id: ',ss
        !           392:   } 0
        !           393: ok: L { (13,(`2+1YRlist)R4) fhead 1 0 U list
        !           394:   'max score', 4 0 NJ scoremax
        !           395:   'raw score', 4 0 NJ score[n;]
        !           396:   ' t  score', 4 0 NJ scoret[n;]
        !           397:   ''
        !           398: } (subs)/enter
        !           399:   'Based on T scores but without using the substitution'
        !           400:   '  algorithm (i.e. - no scores have been droped or replaced yet)'
        !           401: enter: 'The total number of students in class is ',(3 0NJ `1URssn),'.'
        !           402:   ''
        !           403:   '        homework  test   final   total'
        !           404:   'rank ', 8 0NJ rank[n;]
        !           405: &LlxK&  77'type ''describe'' for a description of this workspace'               ssnprintssnprint function ;name
        !           406: name { ssn
        !           407: BJ function
        !           408: &askedsetup&  &
        !           409: getnumnum { prompt getnum let;str
        !           410: again: L' { prompt
        !           411:   str { L'
        !           412:   } (1<+/strE'.')/error
        !           413:   } (1<+/strE'-')/error
        !           414:   }goodnum XI ^/strElet,'0123456789'
        !           415: error: L { '*** illegal number, try again. ***'
        !           416:   }again
        !           417: goodnum: num { BJ str
        !           418:   } (1#R,num)/error
        !           419: analizeanalize ;data;mean;didanal;tlist
        !           420:   didanal { 0
        !           421:   } ((RBN27)>1)/cont1
        !           422:   L' { 'do you want names or ssn to be listed? (n/s): '
        !           423:   } ('n'=1YL')/cont1
        !           424:   ssnprint 'analize'
        !           425:   }0
        !           426: cont1: L' { 'do you want a score summary? (y/n): '
        !           427:   } ('n'=1YL')/cont2
        !           428:   summary
        !           429: cont2:  L' { 'do you want raw score statistics? (y/n): '
        !           430:   } ('n'=1YL')/cont3
        !           431:   statsummary
        !           432: cont3: L' { 'do you want a mean score summary? (y/n): '
        !           433:   } ('n'=1YL')/cont7
        !           434:   analysis
        !           435:   analprint
        !           436:   didanal { 1
        !           437: cont7: L' { 'do you want individual score type rankings? (y/n): '
        !           438:   } ('n'=1YL')/cont4
        !           439:   } (didanal)/analcont2
        !           440:   analysis
        !           441:   didanal { 1
        !           442: analcont2:  rankprint
        !           443: cont4:  L' { 'do you want mean score statistics? (y/n): '
        !           444:   } ('n'=1YL')/cont5
        !           445:   } (didanal)/analcont1
        !           446:   analysis
        !           447:   didanal { 1
        !           448: analcont1: analstats
        !           449: cont5: L' { 'do you want histogram and statistics for any specific score? (y/n): '
        !           450:   } ('n'=1YL')/0
        !           451:   L { 'enter score types (one per line) end with an empty line.'
        !           452: cont6: L' { 'type: '
        !           453:   tp { L'
        !           454:   } (0=Rtp)/0
        !           455:   tlist { type,[1](1URtype)Y'total'
        !           456:   data { (0#data)/data { getcol tp
        !           457:   }(0=Rdata)/cont6
        !           458:   tp histgm data
        !           459:   L { 3 1 R' '
        !           460:   L { (3R' '),'statistics of ',tp
        !           461:   dstat data
        !           462:   L { 3 1 R' '
        !           463:   } cont6
        !           464: 
        !           465: rankprintrankprint;  av1; tlist
        !           466:   tlist { type,[1](1URtype)Y'total'
        !           467:   av1 { |H [1]|V [1]means
        !           468:   L { ' '
        !           469:   L { '   ranking for each score type'
        !           470:   L { ' '
        !           471:   L { ((3+1URname),(`1+1URav1)R4) fhead tlist
        !           472:   L { name,4 0 NJav1
        !           473:   L { 3 1 R' '
        !           474: &     describe�&synnnew apl score system                                               spring 1982
        !           475: 
        !           476:      an apl workspace is available which is designed to maintain and perform
        !           477: analysis on a set of class grades.  the system is interactive in nature
        !           478: allowing each user to select the set of functions suitable for his or her
        !           479: needs.
        !           480: 
        !           481:      to obtain a frech copy of this system, type ')load ngradesys' after
        !           482: entering apl.
        !           483: 
        !           484: 
        !           485: setting up the system:
        !           486:      to set the system up for a new class, the function 'setup' is used.
        !           487: 'setup' will respond by asking score types, score weights and student names.
        !           488: names may be added or deleted at any time so an accurate name list is not
        !           489: required to setup the system.
        !           490: 
        !           491:      the system is now setup.  save a copy of this setup workspace by typing
        !           492: ')save xxx'.  the workspace will be saved in the file xxx and may be loaded
        !           493: in the future with the load command.  it is advisable to keep several backup
        !           494: copies of an active grade workspace.
        !           495: 
        !           496: 
        !           497: alphabetizing the name list:
        !           498:      to enter new scores into the system efficiently it is best to have the
        !           499: names alphabetized both in the system and the stack of new scores.  to
        !           500: alphabetize the name list, type 'alphabetize'.  this will also reorder the
        !           501: previously entered scores and ssn.  this function may be called any time after
        !           502: the system is setup, ussually the function is called just after setup and
        !           503: then each time a list of new names is added to the system.
        !           504: 
        !           505: 
        !           506: entering the social security numbers (ssn):
        !           507:      social security numbers can be entered by typing 'askssn'.  the system
        !           508: will then prompt with a name and ask for the corresponding ssn.  this
        !           509: sequence will continue until all ssn are entered.
        !           510: 
        !           511: entering a new set of grades:
        !           512:      to enter a new score, type 'newscore' and you will be promted for the
        !           513: grade type and the maximum possible score.  you will then be prompted for a
        !           514: grade for each student.
        !           515: 
        !           516: 
        !           517: adding and dropping students:
        !           518:      to add a list of students, type 'newname'.  you will then be prompted
        !           519: for a list of names.  enter each on a new line and then terminate the list
        !           520: with a null line.  note, any old scores for these new students must be
        !           521: inserted with the 'change' function. (described later)
        !           522: 
        !           523:      to drop a list of students, type 'drop'.  you will then be prompted
        !           524: for a list of names.  enter each on a new line and then terminate the list
        !           525: with a null line.  for each name entered, the system will display all grades
        !           526: recorded for that student and then request confirmation that you still want
        !           527: to drop the student.
        !           528: 
        !           529: changing names, scores, ssn:
        !           530:      to change the spelling of a name, change the grade of a student or
        !           531: correct a students ssn, type 'change'.  the function will then prompted
        !           532: for the type of change needed.  the available types include 'name', 'ssn',
        !           533: or one of the previously entered score types.  example, if the score types
        !           534: available are 'hw', 'test', and 'quiz' and you are wanting to change the
        !           535: second homework score, then enter 'hw 2' when prompted.  next, the function
        !           536: will prompt for a name, the function verifies the name exists and then
        !           537: prompts for the new data (the name, score or ssn).
        !           538: 
        !           539: 
        !           540: analizing the scores:
        !           541:      to analize the scores, type 'analize'.  this function will guide the
        !           542: user through the analysis sequence.  just answer 'y' or 'n' for each of
        !           543: the questions asked.
        !           544:      the following analysis functions are available:
        !           545:         1) score summary - a list of raw scores for all score types and
        !           546:                all students.  this is a convienent method of obtaining
        !           547:                a hardcopy back up of all scores for the current class.
        !           548:         2) statistics summary - this function computes simple statistics
        !           549:                each set of scores and prints out the results.
        !           550:         3) mean score summary - this computes the average percent grade
        !           551:                for each grade type for each student and also the total
        !           552:                percent grade based on the weights entered for the score
        !           553:                types.
        !           554:         4) individual score rankings - this functions lists the students
        !           555:                ordered by their rank of the total and their ranking for
        !           556:                each score type is also listed.
        !           557:         5) mean score statistics - this function will compute simple
        !           558:                statistics on the data generated by the mean score summary
        !           559:                (function 3 above).
        !           560:         6) histogram and statistics for any specific score - this will
        !           561:                generate simple statistics and a histogram for and
        !           562:                individual score or any score type.  example: if 'hw' is
        !           563:                a score type then 'hw' would generate data for the
        !           564:                combined homeworks and 'hw 2' would generate data for
        !           565:                just homework #2.
        !           566: 
        !           567: 
        !           568: ***** notes on using the system
        !           569:      1) at no time should a function be interrupted midway through
        !           570:        completion for this may cause inconsistencies in the workspace.
        !           571:      2) the function which looks up names is able to look up a partial
        !           572:        name and match it.  this implies that any time a name is required
        !           573:        to be typed in, only the first few letters which unambiguously
        !           574:        identify it are needed.  if a partial match is found, then the full
        !           575:        name will be displayed so you can verify that the correct name was
        !           576:        matched.  if you enter an ambiguous set of letters for a match,
        !           577:        then the system will display all names which matched correctly.
        !           578:      3) three digit scores and fractional scores upset the printing
        !           579:        format of the score summary in analysis.  therefore it is best to
        !           580:        limit maximum scores to 100.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.