File:  [LON-CAPA] / capa / capa51 / JavaTools / TScore.java
Revision 1.2: download - view: text, annotated - select for diffs
Mon Nov 29 19:56:28 1999 UTC (24 years, 7 months ago) by albertel
Branches: MAIN
CVS tags: HEAD
- moved some files around. . I don't get Java just yet.

    1: import java.applet.*;
    2: import java.awt.*;
    3: import java.lang.*;
    4: import java.util.*;
    5: import java.net.*;
    6: import java.awt.event.*;
    7: 
    8: public class TScore extends Applet implements Runnable {
    9:   public float   W[];
   10:   public int     Entry_cnt,  Exam_cnt;
   11:   public float   S[], F[];
   12:   public int     X[], C[], R[];
   13:   public float   SF_ratio[],  SF_percent[];
   14:   public float   Sum_ratio[], Sum_percent[];
   15:   public float   Exam_ratio[], Raw_exam_ratio[], Raw_epc_ratio[];
   16:   public float   Term_score;
   17:      
   18:   ExpPanel     []  HQpanel;
   19:   ExmPanel     []  EXpanel;
   20:   Label            TitleL;
   21:   Label            EqL;
   22: 
   23: public void init() {
   24:    String      p;
   25:    int         fs;
   26:    int         idx;
   27: 
   28:    C       = new int[2];
   29:    R       = new int[2];
   30:    W       = new float[5];
   31: 
   32: //  final exam set number   
   33:    p=getParameter("FS"); 
   34:    fs = (p==null)?1:Integer.valueOf(p).intValue();
   35: // how many entries 
   36:    Entry_cnt= ((fs == 0)? 2 : 1 +  2*fs); 
   37: // how many exams
   38:    Exam_cnt = (Entry_cnt - 3 ) / 2; 
   39: 
   40:    S      = new float[Entry_cnt];
   41:    F      = new float[Entry_cnt];
   42:    X      = new int[Entry_cnt];
   43:    SF_ratio  = new float[Entry_cnt];
   44:    SF_percent= new float[Entry_cnt];
   45:    Sum_ratio = new float[Entry_cnt];
   46:    Sum_percent = new float[Entry_cnt];
   47:    Raw_exam_ratio = new float[Exam_cnt];
   48:    Raw_epc_ratio  = new float[Exam_cnt];
   49:    Exam_ratio = new float[Exam_cnt];
   50: 
   51:    p=getParameter("HW_W");
   52:    W[0] =(p==null)?1:Float.valueOf(p).floatValue(); 
   53:    p=getParameter("QZ_W");
   54:    W[1] =(p==null)?1:Float.valueOf(p).floatValue();
   55:    p=getParameter("EX_W");
   56:    W[2] =(p==null)?1:Float.valueOf(p).floatValue();
   57:    p=getParameter("FE_W");
   58:    W[3] =(p==null)?1:Float.valueOf(p).floatValue();
   59:    p=getParameter("PC_W");
   60:    W[4] =(p==null)?1:Float.valueOf(p).floatValue();
   61:    
   62:    p=getParameter("HW_C");
   63:    C[0] =(p==null)?1:Integer.valueOf(p).intValue();
   64:    p=getParameter("HW_R");
   65:    R[0] =(p==null)?1:Integer.valueOf(p).intValue();
   66:    p=getParameter("QZ_C");
   67:    C[1] =(p==null)?1:Integer.valueOf(p).intValue();
   68:    p=getParameter("QZ_R");
   69:    R[1] =(p==null)?1:Integer.valueOf(p).intValue();
   70: 
   71:    for(idx=0;idx<Entry_cnt;idx++) {
   72:      p=getParameter("X"+idx);
   73:      X[idx]=(p==null)?1:Integer.valueOf(p).intValue();
   74:      if( (idx>1) && (X[idx]==1) ) {  // midterm exam, final extrapolated
   75:        SF_ratio[idx]  = (float)0.0;
   76:        SF_percent[idx]= (float)0.0;
   77:        if( idx == (Entry_cnt - 1) ) {  // final exam extrapolated, from hw
   78:          Sum_ratio[idx] = SF_ratio[0]; 
   79: 	 Sum_percent[idx] = SF_percent[0];
   80:        } 
   81:      } else {
   82:  // homework, quiz extrapolated or not;exam,final not extrapolated 
   83:        p=getParameter("S"+idx);
   84:        S[idx]=(p==null)?1:Float.valueOf(p).floatValue();
   85:        p=getParameter("F"+idx);
   86:        F[idx] =(p==null)?1:Float.valueOf(p).floatValue();
   87:        if ((float)F[idx] < 0.00000001) {
   88: 	   SF_ratio[idx] = (float) 0.0;
   89:        } else {
   90: 	   SF_ratio[idx] = (float) ((float)S[idx] / (float)F[idx]);
   91:        }
   92:        int tmp_i = (int) (10000 * SF_ratio[idx] );
   93:        SF_percent[idx]= (float)tmp_i / (float)100.0;
   94:        if( idx == (Entry_cnt - 1) ) {         // final exam
   95:          Sum_ratio[idx]   = SF_ratio[idx];
   96: 	 Sum_percent[idx] = SF_percent[idx];
   97:        }
   98:      }
   99:    }
  100:    Sum_ratio[0] = (float)(S[0] + ((float)R[0]*F[0]*SF_ratio[0]/(float)C[0])) / (float)(F[0]*(1.0 + (float)R[0]/(float)C[0]));
  101:      int tmp_i = (int)(10000 * Sum_ratio[0]);
  102:      Sum_percent[0] =  (float)tmp_i / (float)100.0;
  103:      Sum_ratio[0]   = Sum_percent[0] / (float)100.0;
  104:      Sum_ratio[1] = (float)(S[1] + (R[1]*F[1]*SF_ratio[1]/C[1])) / (float)(F[1]*(1.0 + R[1]/C[1]));
  105:      tmp_i = (int)(10000 * Sum_ratio[1]);
  106:      Sum_percent[1] =  (float)tmp_i / (float)100.0;
  107:      Sum_ratio[1]   =  Sum_percent[1] / (float)100.0;
  108: 
  109: 
  110:    // if exam 1 is not given, use homework as default to extrapolate 
  111:    //    if epc 1 is not given, use exam 1 as epc 1
  112:    // if exam 2 is not given, use exam 1 to extrapolate
  113:    // if exam 3 is not given, use exam 2 to extrapolate
  114:    // 
  115: 
  116:    float exam_sum = (float)0.0;
  117:    for(idx=0;idx<Exam_cnt;idx++) {
  118:      if( X[(idx+1)*2] == 1 ) {
  119: //      taken from homework 
  120:         Raw_exam_ratio[idx] = SF_ratio[0]; 
  121:      } else {
  122:         Raw_exam_ratio[idx] = SF_ratio[(idx+1)*2];
  123:      }
  124:      if( X[(idx+1)*2 + 1] == 1 ) {
  125:         Raw_epc_ratio[idx] = Raw_exam_ratio[idx];
  126:      } else {
  127:         Raw_epc_ratio[idx] = SF_ratio[(idx+1)*2 + 1];
  128:      }
  129:      
  130:      if( Raw_epc_ratio[idx] > Raw_exam_ratio[idx] ) {
  131:          Exam_ratio[idx] = Raw_exam_ratio[idx] + W[4]*( Raw_epc_ratio[idx] - Raw_exam_ratio[idx] ) ;
  132:      } else {
  133:          Exam_ratio[idx] = Raw_exam_ratio[idx];
  134:      }
  135:      
  136:      Sum_ratio[2*(idx+1)] = Exam_ratio[idx];
  137:      tmp_i = (int)(10000 * Exam_ratio[idx] );
  138:      Sum_percent[2*(idx+1)] = (float)tmp_i / (float)100.0;
  139:      Sum_ratio[2*(idx+1)]   = Sum_percent[2*(idx+1)] / (float)100.0;
  140:      exam_sum += Exam_ratio[idx];
  141:    }
  142:    exam_sum = (float)exam_sum / (float)Exam_cnt;
  143: 
  144:    Term_score = Sum_ratio[0] * W[0] + Sum_ratio[1] * W[1] + exam_sum * W[2] + Sum_ratio[Entry_cnt - 1] * W[3];
  145: 
  146:    tmp_i = (int)(10000 * Term_score);
  147:    Term_score = (float)tmp_i / (float)100.0;
  148: 
  149: 
  150: //    call to setup User Interface
  151: 
  152:    initGUI();
  153: 
  154:     }
  155: public void initGUI() {
  156:        int     row_cnt = Exam_cnt + 4;
  157:        int     idx;
  158:        String  [] title = {"Homework", "Quizz" }; 
  159:        HQpanel = new ExpPanel[2];
  160:        EXpanel = new ExmPanel[Exam_cnt+2];
  161: 
  162:        setLayout(new GridLayout(row_cnt,0,4,4));
  163: 
  164:        String t_str = "Term Score Extrapolation Applet";
  165:        TitleL    = new Label(t_str, Label.CENTER);
  166:        add(TitleL);
  167: 
  168:        for(idx = 0; idx < 2; idx++) {
  169:          HQpanel[idx] = new ExpPanel(this,title[idx],X[idx],
  170:                                S[idx],F[idx],C[idx],R[idx]);
  171:          add(HQpanel[idx]);
  172:        }
  173:        // Midterm Exam
  174:        for(idx =0; idx < Exam_cnt; idx++) {
  175:          EXpanel[idx] = new ExmPanel(this,idx+1,X[2*(idx+1)],1,X[2*idx+3],
  176:              S[2*(idx+1)],F[2*(idx+1)],W[4],S[2*idx+3],F[2*idx+3],Sum_ratio[2*(idx+1)]);
  177:          add(EXpanel[idx]);
  178:        }
  179:        // Final Exam
  180:        EXpanel[Exam_cnt] = new ExmPanel(this,0,X[Entry_cnt-1],0,0,
  181:              S[Entry_cnt-1],F[Entry_cnt-1],W[3],S[Entry_cnt-1],F[Entry_cnt-1],Sum_ratio[Entry_cnt-1]);
  182:        add(EXpanel[Exam_cnt]);
  183: 
  184:        String eq_str = "Term score=" + Sum_percent[0] + "*" + W[0] ;
  185:        eq_str = eq_str + "+" + Sum_percent[1] + "*" + W[1] ;
  186:        eq_str = eq_str + "+" + "(" ; 
  187:        for(idx =1;idx<=Exam_cnt;idx++) {
  188:           if(idx>1) {
  189:              eq_str = eq_str + "+ ";
  190:            }
  191:            eq_str = eq_str + Sum_percent[2*idx] ;
  192:        } 
  193:        eq_str = eq_str + ") *" + W[2] + "/" + Exam_cnt + "+";
  194:        eq_str = eq_str + Sum_percent[2*idx] + "*" + W[3] + " = ";
  195:        eq_str = eq_str + " " + Term_score + "%";
  196:        // EqL    = new Label(eq_str, Label.LEFT);
  197:        // add(EqL);
  198: 
  199:   }
  200: public void recalcTermScore() {
  201:        float  score[];
  202:        int    idx;
  203:        float  term_summ, exam_summ;
  204:  
  205:        score = new float[Exam_cnt+3];
  206:        term_summ = (float)0.0;
  207:        exam_summ = (float)0.0;
  208:        for(idx=0;idx<2;idx++) {
  209:          score[idx] = HQpanel[idx].getSubTotal();
  210:          term_summ = term_summ + score[idx] * W[idx];
  211:        }
  212:        for(idx =0; idx < Exam_cnt; idx++) {
  213:          score[idx+2] = EXpanel[idx].getSubTotal();
  214:          exam_summ = exam_summ + score[idx+2];
  215:        }
  216:        score[Exam_cnt+2] = EXpanel[Exam_cnt].getSubTotal();
  217:        exam_summ = exam_summ * W[2] / Exam_cnt;
  218:        term_summ = term_summ + exam_summ + score[Exam_cnt+2] * W[3];
  219:        int  tmp_i = (int) ((float)100.0*term_summ);
  220:        term_summ  = (float)(tmp_i / (float)100.0);
  221:        String eq_str = "Term score=" + score[0] + "*" + W[0] ;
  222:        eq_str = eq_str + "+" + score[1] + "*" + W[1] ;
  223:        eq_str = eq_str + "+" + "(" ; 
  224:        for(idx=0;idx<Exam_cnt;idx++) {
  225:           if(idx>0) {
  226:              eq_str = eq_str + "+ ";
  227:            }
  228:            eq_str = eq_str + score[idx+2] ;
  229:         } 
  230:         eq_str = eq_str + ") *" + W[2] + "/" + Exam_cnt + "+";
  231:         eq_str = eq_str + score[Exam_cnt+2] + "*" + W[3] + " = ";
  232:         eq_str = eq_str + " " + term_summ + "  %";
  233:         // TitleL.setText("TTT");
  234:         TitleL.setText(eq_str);
  235:   }
  236: public void paint(Graphics g) {
  237:         Dimension d = getSize();
  238:         g.drawRect(0,0, d.width - 1, d.height - 1);
  239:   }
  240: public void run()   {  }
  241: public void start() {
  242:         recalcTermScore();
  243:   }
  244: public void stop()  {  }
  245: 
  246: }
  247: class ExpPanel extends Panel
  248:                      implements ActionListener,
  249:                                  AdjustmentListener {
  250:     TScore     controller;
  251:     TextField  exT;
  252:     Scrollbar  sB;
  253:     Label      sumL;
  254:     int        max = 100;
  255:     int        block = 1;
  256:     float      ff,ss;
  257:     int        rr,cc;
  258: 
  259:     ExpPanel(TScore u,String t,
  260:              int x,float a,float b,int m,int n) {
  261:         GridBagConstraints   c = new GridBagConstraints();
  262:         GridBagLayout        gridbag = new GridBagLayout();
  263:         setLayout(gridbag);
  264:         int tmp_i;
  265: 
  266:         controller = u;
  267:         ss = a; ff = b; cc = m; rr = n;
  268:         float sf_ratio =  (float)ss / (float)ff;
  269:         tmp_i = (int)(10000 * sf_ratio);
  270:         float sf_percent =  (float)tmp_i / (float)100.0;
  271:         float sum_ratio = (float)(ss + ((float)rr*ff*sf_ratio/(float)cc)) / (float)(ff*(1.0 + (float)rr/(float)cc));
  272:         tmp_i = (int)(10000 * sum_ratio);
  273:         float sum_percent =  (float)tmp_i / (float)100.0;
  274: 
  275:         String cs = " " + ss + "/"  + ff; 
  276:         cs = cs + " = " + sf_percent + "%";
  277:         String r = "remaining " + rr + " sets at (%) ";
  278:         String s = " " + sum_percent + "%";
  279: 
  280:         //Set up default layout constraints.
  281:         c.fill = GridBagConstraints.NONE;
  282: 
  283:         Label tL = new Label(t, Label.LEFT);
  284:         // c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row.
  285:         c.gridwidth = 1;
  286:         c.gridx = 0;
  287:         c.gridy = 0;
  288:         gridbag.setConstraints(tL, c);
  289:         add(tL);
  290:         
  291:         Label cL = new Label(cs, Label.CENTER);
  292:         c.gridwidth = 2;
  293:         c.gridx = 1;
  294:         c.gridy = 0;
  295:         gridbag.setConstraints(cL, c);
  296:         add(cL);
  297: 
  298:         Label sL = new Label("subtotal=", Label.RIGHT);
  299:         c.gridwidth = 1;
  300:         c.gridx = 3;
  301:         c.gridy = 0;
  302:         gridbag.setConstraints(sL, c);
  303:         add(sL);
  304: 
  305:         sumL = new Label(s, Label.RIGHT);
  306:         c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row.
  307:         c.gridx = 4;
  308:         c.gridy = 0;
  309:         gridbag.setConstraints(sumL, c);
  310:         add(sumL);
  311:         if(x==1) { 
  312:           Label rL = new Label(r, Label.RIGHT);
  313:           c.gridwidth = 2;
  314:           c.gridx = 0;
  315:           c.gridy = 1;
  316:           gridbag.setConstraints(rL, c);
  317:           add(rL);
  318: 
  319:           exT = new TextField("0", 3);
  320:           c.anchor = GridBagConstraints.EAST;
  321:           c.gridwidth = 1; //The default value.
  322:           c.gridx = 2;
  323:           c.gridy = 1;
  324:           gridbag.setConstraints(exT, c);
  325:           add(exT);
  326:           exT.addActionListener(this);
  327:           c.anchor = GridBagConstraints.CENTER;  // default
  328: 
  329:         //Add the slider.  It's horizontal, and it has the maximum
  330:         //value specified by the instance variable max.  Its initial
  331:         //and minimum values are the default (0).  A click increments
  332:         //the value by block units.
  333:           sB = new Scrollbar(Scrollbar.HORIZONTAL);
  334:           sB.setMaximum(max + 10);
  335:           sB.setBlockIncrement(block);
  336:           // c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row.
  337:           c.fill = GridBagConstraints.HORIZONTAL;
  338:           c.gridwidth = 2;
  339:           c.gridx = 3;
  340:           c.gridy = 1;
  341:           gridbag.setConstraints(sB, c);
  342:           add(sB);
  343:           sB.addAdjustmentListener(this);
  344:           exT.setText(String.valueOf(sf_percent));
  345:           sB.setValue((int)sf_percent);
  346:         }
  347: 
  348:     }
  349:     // Draws a box around this panel. 
  350:     public void paint(Graphics g) {
  351:         Dimension d = getSize();
  352:         g.drawRect(0,0, d.width - 1, d.height - 1);
  353:     }
  354:     public Insets getInsets() {
  355:         return new Insets(5,5,5,8);
  356:     }
  357:     float  getSubTotal() {
  358:         String s_str = sumL.getText().replace('%','\0').trim();
  359:         float  s_real = Float.valueOf(s_str).floatValue();
  360:         return (s_real);
  361:     }
  362:     double getValue() {
  363:         double f;
  364:         try {
  365:             f = (double)Double.valueOf(exT.getText()).doubleValue();
  366:         } catch (java.lang.NumberFormatException e) {
  367:             f = 0.0;
  368:         }
  369:         return f;
  370:     }
  371:     // entered into exT
  372:     public void actionPerformed(ActionEvent e) {
  373:         int tf = (int) getValue();
  374:         if (tf > max)
  375:             tf = max;
  376:         if (tf < 0)
  377:             tf = 0;
  378:         sB.setValue(tf);
  379:         exT.setText(String.valueOf((int)tf));
  380:         recalcSumm(tf);
  381:     }    
  382:     //  slider sB changed
  383:     public void adjustmentValueChanged(AdjustmentEvent e) {
  384:         Scrollbar source = (Scrollbar)e.getSource();
  385:            int   my_i =  (int)source.getValue();
  386:            exT.setText(String.valueOf(e.getValue()));
  387:            recalcSumm(my_i);
  388:     }
  389:     void  recalcSumm(int tf) {
  390:         float my_r = (float) tf / (float)100.0;
  391:         int  tmp_i= (int)(10000*(ss+(rr*ff*my_r/cc))/(float)(ff*(1.0+rr/cc)));
  392:         float sum  = (float)tmp_i / (float)100.0;
  393:         sumL.setText(sum + "%");
  394:         controller.recalcTermScore();
  395:     }
  396:     // Set the values in the slider and text field. 
  397:     void setValue(double f) {
  398:         setSliderValue(f);
  399:         exT.setText(String.valueOf((float)f));
  400:     }
  401:     void setSliderValue(double f) {
  402:         int sliderValue = (int)f;
  403: 
  404:         if (sliderValue > max)
  405:                sliderValue = max;
  406:         if (sliderValue < 0)
  407:             sliderValue = 0;
  408:         sB.setValue(sliderValue);
  409:         
  410:     }
  411: }
  412: class ExmPanel extends Panel
  413:                      implements ActionListener,
  414:                                 AdjustmentListener {
  415:     TScore     controller;
  416:     TextField  exT_ex, exT_pc;
  417:     Scrollbar  sB_ex,  sB_pc;
  418:     Label      sumL;
  419:     int        max = 100;
  420:     int        block = 1;
  421:     int        show_pc, exam_ex, epc_ex;
  422:     float      s_ex, f_ex, s_pc, f_pc;
  423:     float      c_factor;
  424: 
  425:     // exam_type  0  Final
  426:     //            1, 2, 3, 4 
  427:     ExmPanel(TScore u,int exam_type,int exam_x,int show_epc,int epc_x,
  428:              float a,float b,float w,float m,float n,float ex_default) {
  429:         GridBagConstraints   c = new GridBagConstraints();
  430:         GridBagLayout        gridbag = new GridBagLayout();
  431:         setLayout(gridbag);
  432:         Label  tL;
  433:         float  exam_ratio, epc_ratio;
  434:         float  sum;
  435:         int    tmp_i;
  436: 
  437:         controller = u; 
  438:         c_factor   = w;
  439:         show_pc = show_epc;
  440:         exam_ex = exam_x;
  441:         epc_ex  = epc_x;
  442:         s_ex = a; f_ex = b; s_pc = m; f_pc = n;
  443:         //Set up default layout constraints.
  444:         c.fill = GridBagConstraints.NONE;
  445: 
  446:         //Add the label.  It displays this panel's title, centered.
  447:         if(exam_type == 0 ) { // Final exam
  448:            tL = new Label("Final", Label.LEFT);
  449:         } else {
  450:            tL = new Label("Exam " + exam_type, Label.LEFT);
  451:         }
  452:         c.anchor = GridBagConstraints.WEST;
  453:         c.gridwidth = 1;
  454:         c.gridx = 0;
  455:         c.gridy = 0;
  456:         gridbag.setConstraints(tL, c);
  457:         add(tL);
  458:         c.anchor = GridBagConstraints.CENTER;
  459: 
  460:         if( exam_x == 0 ) {
  461:           // exam not extrapolated
  462:           exam_ratio = (float)s_ex / (float)f_ex;
  463:           tmp_i = (int) (10000 * exam_ratio );
  464:           float percent = (float)tmp_i / (float)100.0;
  465:           String cs =  " " + a + "/" + b + " = " + percent + " %";
  466:           Label  cL = new Label(cs, Label.CENTER);
  467:           c.gridwidth = 2;
  468:           c.gridx = 1;
  469:           c.gridy = 0;
  470:           gridbag.setConstraints(cL, c);
  471:           add(cL);
  472:         } else {
  473:           // extrapolate exam
  474:           exam_ratio = ex_default;
  475:           exT_ex = new TextField("0", 3);
  476:           exT_ex.setName("EXAM");
  477:           c.gridwidth = 1; //The default value.
  478:           c.gridx = 2;
  479:           c.gridy = 0;
  480:           gridbag.setConstraints(exT_ex, c);
  481:           add(exT_ex);
  482:           exT_ex.addActionListener(this);
  483: 
  484:           sB_ex = new Scrollbar(Scrollbar.HORIZONTAL);
  485:           sB_ex.setName("EXAMS");
  486:           sB_ex.setMaximum(max + 10);
  487:           sB_ex.setBlockIncrement(block);
  488:           c.gridwidth = 2;
  489:           c.gridx = 3;
  490:           c.gridy = 0;
  491:           gridbag.setConstraints(sB_ex, c);
  492:           add(sB_ex);
  493:           sB_ex.addAdjustmentListener(this);
  494:         }
  495:         epc_ratio = exam_ratio;
  496:         if(show_pc == 1) {
  497:           if(epc_x == 1) {
  498:             epc_ratio = exam_ratio;
  499:           } else {
  500:             epc_ratio = (float)s_pc / (float)f_pc;
  501:           }
  502:           if( epc_ratio > exam_ratio ) {
  503:             tmp_i= (int)(10000 * (exam_ratio + c_factor * (epc_ratio - exam_ratio)));
  504:             sum  = (float)tmp_i / (float)100.0;
  505:           } else {
  506:             tmp_i= (int)(10000 * exam_ratio);
  507:             sum  = (float)tmp_i / (float)100.0;
  508:           }
  509:         } else { 
  510:           tmp_i= (int)(10000 * exam_ratio);
  511:           sum  = (float)tmp_i / (float)100.0;
  512:         }
  513: 
  514:         Label sL = new Label("subtotal=", Label.RIGHT);
  515:         c.gridwidth = 1;
  516:         c.gridx = 5;
  517:         c.gridy = 0;
  518:         gridbag.setConstraints(sL, c);
  519:         add(sL);
  520: 
  521:         String  s = " " + sum + "%";
  522:         sumL = new Label(s, Label.CENTER);
  523:         c.anchor = GridBagConstraints.EAST; 
  524:         c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row.
  525:         c.gridx = 6;
  526:         c.gridy = 0;
  527:         gridbag.setConstraints(sumL, c);
  528:         add(sumL);
  529:         c.anchor = GridBagConstraints.CENTER; 
  530: 
  531:         if( show_epc == 1 ) {
  532:            Label eL = new Label("Correction " + exam_type, Label.LEFT);
  533:            c.gridwidth = 1;
  534:            c.gridx = 0;
  535:            c.gridy = 1;
  536:            gridbag.setConstraints(eL, c);
  537:            add(eL);
  538:            if( epc_x == 0 ) {
  539:              float ratio = (float) ( s_pc / f_pc);
  540:              tmp_i = (int) (10000 * ratio );
  541:              float percent = (float)tmp_i / (float)100.0;
  542:              String cs =  " " + s_pc + "/" + f_pc + " = " + percent + " %";
  543:              Label  cL = new Label(cs, Label.CENTER);
  544:              c.gridwidth = 2;
  545:              c.gridx = 1;
  546:              c.gridy = 1;
  547:              gridbag.setConstraints(cL, c);
  548:              add(cL);
  549:            } else {
  550:              exT_pc = new TextField("0", 3);
  551:              exT_pc.setName("PC");
  552:              c.anchor = GridBagConstraints.EAST;
  553:              c.gridwidth = 1; //The default value.
  554:              c.gridx = 2;
  555:              c.gridy = 1;
  556:              gridbag.setConstraints(exT_pc, c);
  557:              add(exT_pc);
  558:              exT_pc.addActionListener(this);
  559: 
  560:              sB_pc = new Scrollbar(Scrollbar.HORIZONTAL);
  561:              sB_pc.setName("PCS");
  562:              sB_pc.setMaximum(max + 10);
  563:              sB_pc.setBlockIncrement(block);
  564:              c.gridwidth = GridBagConstraints.REMAINDER;
  565:              c.anchor = GridBagConstraints.CENTER;
  566:              c.fill = GridBagConstraints.HORIZONTAL;
  567:              // c.gridwidth = 2;
  568:              c.gridx = 3;
  569:              c.gridy = 1;
  570:              gridbag.setConstraints(sB_pc, c);
  571:              add(sB_pc);
  572:              sB_pc.addAdjustmentListener(this);
  573:            }
  574:         }
  575:         setExValue(exam_ratio,epc_ratio);
  576:     }
  577:     // Draws a box around this panel. 
  578:     public void paint(Graphics g) {
  579:         Dimension d = getSize();
  580:         g.drawRect(0,0, d.width - 1, d.height - 1);
  581:     }
  582:     public Insets getInsets() {
  583:         return new Insets(5,5,5,8);
  584:     }
  585:     float  getSubTotal() {
  586:         String s_str = sumL.getText().replace('%','\0').trim();
  587:         float  s_real = Float.valueOf(s_str).floatValue();
  588:         return (s_real);
  589:     }
  590:     // entered into exT
  591:     public void actionPerformed(ActionEvent e) {
  592:         TextField source = (TextField)e.getSource();
  593:         String name = source.getName();
  594:         int tf = (int)Integer.valueOf(source.getText()).intValue();
  595:         if (tf > max)
  596:             tf = max;
  597:         if (tf < 0)
  598:             tf = 0;
  599:         if( name.equals(String.valueOf("EXAM")) ) {
  600:           sB_ex.setValue(tf);
  601:           exT_ex.setText(String.valueOf((int)tf));
  602:         } else {
  603:           sB_pc.setValue(tf);
  604:           exT_pc.setText(String.valueOf((int)tf));
  605:         }
  606:         recalcSumm();
  607:     }    
  608:     //  slider sB changed
  609:     public void adjustmentValueChanged(AdjustmentEvent e) {
  610:         Scrollbar source = (Scrollbar)e.getSource();
  611:         String    name = source.getName();
  612:            int    my_i =  (int)source.getValue();
  613:         
  614:         if( name.equals(String.valueOf("EXAMS")) ) {
  615:           sB_ex.setValue(my_i);
  616:           exT_ex.setText(String.valueOf((int)my_i));
  617:         } else {
  618:           sB_pc.setValue(my_i);
  619:           exT_pc.setText(String.valueOf((int)my_i));
  620:         }
  621:         recalcSumm();
  622:     }
  623:     void  recalcSumm() {
  624:         int   tmp_i;
  625:         float exam , epc, sum;
  626:         
  627:         if( exam_ex == 1 ) {
  628:            tmp_i = (int)Integer.valueOf(exT_ex.getText()).intValue();
  629:            exam = (float) tmp_i / (float)100.0;
  630:         } else {
  631:            exam = (float)s_ex / (float)f_ex;
  632:         }
  633:         if( show_pc == 1 ) {
  634:           if(epc_ex == 1) {
  635:             tmp_i = (int)Integer.valueOf(exT_pc.getText()).intValue();
  636:             epc = (float) tmp_i / (float)100.0;
  637:           } else {
  638:             epc = (float)s_pc / (float)f_pc;
  639:           }
  640:           if( epc > exam ) {
  641:             tmp_i= (int)(10000 * (exam + c_factor * (epc - exam)));
  642:             sum  = (float)tmp_i / (float)100.0;
  643:           } else {
  644:             tmp_i= (int)(10000 * exam);
  645:             sum  = (float)tmp_i / (float)100.0;
  646:           }
  647:         } else {
  648:           tmp_i= (int)(10000 * exam);
  649:           sum  = (float)tmp_i / (float)100.0;
  650:         }
  651:         sumL.setText(sum + "%");
  652:         controller.recalcTermScore();
  653:     }
  654:     void setExValue (float a, float b) {
  655:         int  exm, epc;
  656:         exm = (int) (a*100.0); 
  657:         epc = (int) (b*100.0); 
  658:         if (exm > max)
  659:             exm = max;
  660:         if (exm < 0)
  661:             exm = 0;
  662:         if (epc > max)
  663:             epc = max;
  664:         if (epc < 0)
  665:             epc = 0;
  666:         if( exam_ex ==1 ) {
  667:           sB_ex.setValue(exm);
  668:           exT_ex.setText(String.valueOf(exm));
  669:         }
  670:         if( (show_pc == 1) && (epc_ex==1) ) {
  671:           sB_pc.setValue(epc);
  672:           exT_pc.setText(String.valueOf(epc));
  673:         }
  674:      }
  675: }
  676: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>