--- capa/capa51/JavaTools/TScore.java 1999/11/29 19:45:13 1.1 +++ capa/capa51/JavaTools/TScore.java 1999/11/29 19:56:28 1.2 @@ -84,7 +84,11 @@ public void init() { S[idx]=(p==null)?1:Float.valueOf(p).floatValue(); p=getParameter("F"+idx); F[idx] =(p==null)?1:Float.valueOf(p).floatValue(); - SF_ratio[idx] = (float) ((float)S[idx] / (float)F[idx]); + if ((float)F[idx] < 0.00000001) { + SF_ratio[idx] = (float) 0.0; + } else { + SF_ratio[idx] = (float) ((float)S[idx] / (float)F[idx]); + } int tmp_i = (int) (10000 * SF_ratio[idx] ); SF_percent[idx]= (float)tmp_i / (float)100.0; if( idx == (Entry_cnt - 1) ) { // final exam @@ -240,3 +244,433 @@ public void start() { public void stop() { } } +class ExpPanel extends Panel + implements ActionListener, + AdjustmentListener { + TScore controller; + TextField exT; + Scrollbar sB; + Label sumL; + int max = 100; + int block = 1; + float ff,ss; + int rr,cc; + + ExpPanel(TScore u,String t, + int x,float a,float b,int m,int n) { + GridBagConstraints c = new GridBagConstraints(); + GridBagLayout gridbag = new GridBagLayout(); + setLayout(gridbag); + int tmp_i; + + controller = u; + ss = a; ff = b; cc = m; rr = n; + float sf_ratio = (float)ss / (float)ff; + tmp_i = (int)(10000 * sf_ratio); + float sf_percent = (float)tmp_i / (float)100.0; + float sum_ratio = (float)(ss + ((float)rr*ff*sf_ratio/(float)cc)) / (float)(ff*(1.0 + (float)rr/(float)cc)); + tmp_i = (int)(10000 * sum_ratio); + float sum_percent = (float)tmp_i / (float)100.0; + + String cs = " " + ss + "/" + ff; + cs = cs + " = " + sf_percent + "%"; + String r = "remaining " + rr + " sets at (%) "; + String s = " " + sum_percent + "%"; + + //Set up default layout constraints. + c.fill = GridBagConstraints.NONE; + + Label tL = new Label(t, Label.LEFT); + // c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row. + c.gridwidth = 1; + c.gridx = 0; + c.gridy = 0; + gridbag.setConstraints(tL, c); + add(tL); + + Label cL = new Label(cs, Label.CENTER); + c.gridwidth = 2; + c.gridx = 1; + c.gridy = 0; + gridbag.setConstraints(cL, c); + add(cL); + + Label sL = new Label("subtotal=", Label.RIGHT); + c.gridwidth = 1; + c.gridx = 3; + c.gridy = 0; + gridbag.setConstraints(sL, c); + add(sL); + + sumL = new Label(s, Label.RIGHT); + c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row. + c.gridx = 4; + c.gridy = 0; + gridbag.setConstraints(sumL, c); + add(sumL); + if(x==1) { + Label rL = new Label(r, Label.RIGHT); + c.gridwidth = 2; + c.gridx = 0; + c.gridy = 1; + gridbag.setConstraints(rL, c); + add(rL); + + exT = new TextField("0", 3); + c.anchor = GridBagConstraints.EAST; + c.gridwidth = 1; //The default value. + c.gridx = 2; + c.gridy = 1; + gridbag.setConstraints(exT, c); + add(exT); + exT.addActionListener(this); + c.anchor = GridBagConstraints.CENTER; // default + + //Add the slider. It's horizontal, and it has the maximum + //value specified by the instance variable max. Its initial + //and minimum values are the default (0). A click increments + //the value by block units. + sB = new Scrollbar(Scrollbar.HORIZONTAL); + sB.setMaximum(max + 10); + sB.setBlockIncrement(block); + // c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row. + c.fill = GridBagConstraints.HORIZONTAL; + c.gridwidth = 2; + c.gridx = 3; + c.gridy = 1; + gridbag.setConstraints(sB, c); + add(sB); + sB.addAdjustmentListener(this); + exT.setText(String.valueOf(sf_percent)); + sB.setValue((int)sf_percent); + } + + } + // Draws a box around this panel. + public void paint(Graphics g) { + Dimension d = getSize(); + g.drawRect(0,0, d.width - 1, d.height - 1); + } + public Insets getInsets() { + return new Insets(5,5,5,8); + } + float getSubTotal() { + String s_str = sumL.getText().replace('%','\0').trim(); + float s_real = Float.valueOf(s_str).floatValue(); + return (s_real); + } + double getValue() { + double f; + try { + f = (double)Double.valueOf(exT.getText()).doubleValue(); + } catch (java.lang.NumberFormatException e) { + f = 0.0; + } + return f; + } + // entered into exT + public void actionPerformed(ActionEvent e) { + int tf = (int) getValue(); + if (tf > max) + tf = max; + if (tf < 0) + tf = 0; + sB.setValue(tf); + exT.setText(String.valueOf((int)tf)); + recalcSumm(tf); + } + // slider sB changed + public void adjustmentValueChanged(AdjustmentEvent e) { + Scrollbar source = (Scrollbar)e.getSource(); + int my_i = (int)source.getValue(); + exT.setText(String.valueOf(e.getValue())); + recalcSumm(my_i); + } + void recalcSumm(int tf) { + float my_r = (float) tf / (float)100.0; + int tmp_i= (int)(10000*(ss+(rr*ff*my_r/cc))/(float)(ff*(1.0+rr/cc))); + float sum = (float)tmp_i / (float)100.0; + sumL.setText(sum + "%"); + controller.recalcTermScore(); + } + // Set the values in the slider and text field. + void setValue(double f) { + setSliderValue(f); + exT.setText(String.valueOf((float)f)); + } + void setSliderValue(double f) { + int sliderValue = (int)f; + + if (sliderValue > max) + sliderValue = max; + if (sliderValue < 0) + sliderValue = 0; + sB.setValue(sliderValue); + + } +} +class ExmPanel extends Panel + implements ActionListener, + AdjustmentListener { + TScore controller; + TextField exT_ex, exT_pc; + Scrollbar sB_ex, sB_pc; + Label sumL; + int max = 100; + int block = 1; + int show_pc, exam_ex, epc_ex; + float s_ex, f_ex, s_pc, f_pc; + float c_factor; + + // exam_type 0 Final + // 1, 2, 3, 4 + ExmPanel(TScore u,int exam_type,int exam_x,int show_epc,int epc_x, + float a,float b,float w,float m,float n,float ex_default) { + GridBagConstraints c = new GridBagConstraints(); + GridBagLayout gridbag = new GridBagLayout(); + setLayout(gridbag); + Label tL; + float exam_ratio, epc_ratio; + float sum; + int tmp_i; + + controller = u; + c_factor = w; + show_pc = show_epc; + exam_ex = exam_x; + epc_ex = epc_x; + s_ex = a; f_ex = b; s_pc = m; f_pc = n; + //Set up default layout constraints. + c.fill = GridBagConstraints.NONE; + + //Add the label. It displays this panel's title, centered. + if(exam_type == 0 ) { // Final exam + tL = new Label("Final", Label.LEFT); + } else { + tL = new Label("Exam " + exam_type, Label.LEFT); + } + c.anchor = GridBagConstraints.WEST; + c.gridwidth = 1; + c.gridx = 0; + c.gridy = 0; + gridbag.setConstraints(tL, c); + add(tL); + c.anchor = GridBagConstraints.CENTER; + + if( exam_x == 0 ) { + // exam not extrapolated + exam_ratio = (float)s_ex / (float)f_ex; + tmp_i = (int) (10000 * exam_ratio ); + float percent = (float)tmp_i / (float)100.0; + String cs = " " + a + "/" + b + " = " + percent + " %"; + Label cL = new Label(cs, Label.CENTER); + c.gridwidth = 2; + c.gridx = 1; + c.gridy = 0; + gridbag.setConstraints(cL, c); + add(cL); + } else { + // extrapolate exam + exam_ratio = ex_default; + exT_ex = new TextField("0", 3); + exT_ex.setName("EXAM"); + c.gridwidth = 1; //The default value. + c.gridx = 2; + c.gridy = 0; + gridbag.setConstraints(exT_ex, c); + add(exT_ex); + exT_ex.addActionListener(this); + + sB_ex = new Scrollbar(Scrollbar.HORIZONTAL); + sB_ex.setName("EXAMS"); + sB_ex.setMaximum(max + 10); + sB_ex.setBlockIncrement(block); + c.gridwidth = 2; + c.gridx = 3; + c.gridy = 0; + gridbag.setConstraints(sB_ex, c); + add(sB_ex); + sB_ex.addAdjustmentListener(this); + } + epc_ratio = exam_ratio; + if(show_pc == 1) { + if(epc_x == 1) { + epc_ratio = exam_ratio; + } else { + epc_ratio = (float)s_pc / (float)f_pc; + } + if( epc_ratio > exam_ratio ) { + tmp_i= (int)(10000 * (exam_ratio + c_factor * (epc_ratio - exam_ratio))); + sum = (float)tmp_i / (float)100.0; + } else { + tmp_i= (int)(10000 * exam_ratio); + sum = (float)tmp_i / (float)100.0; + } + } else { + tmp_i= (int)(10000 * exam_ratio); + sum = (float)tmp_i / (float)100.0; + } + + Label sL = new Label("subtotal=", Label.RIGHT); + c.gridwidth = 1; + c.gridx = 5; + c.gridy = 0; + gridbag.setConstraints(sL, c); + add(sL); + + String s = " " + sum + "%"; + sumL = new Label(s, Label.CENTER); + c.anchor = GridBagConstraints.EAST; + c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row. + c.gridx = 6; + c.gridy = 0; + gridbag.setConstraints(sumL, c); + add(sumL); + c.anchor = GridBagConstraints.CENTER; + + if( show_epc == 1 ) { + Label eL = new Label("Correction " + exam_type, Label.LEFT); + c.gridwidth = 1; + c.gridx = 0; + c.gridy = 1; + gridbag.setConstraints(eL, c); + add(eL); + if( epc_x == 0 ) { + float ratio = (float) ( s_pc / f_pc); + tmp_i = (int) (10000 * ratio ); + float percent = (float)tmp_i / (float)100.0; + String cs = " " + s_pc + "/" + f_pc + " = " + percent + " %"; + Label cL = new Label(cs, Label.CENTER); + c.gridwidth = 2; + c.gridx = 1; + c.gridy = 1; + gridbag.setConstraints(cL, c); + add(cL); + } else { + exT_pc = new TextField("0", 3); + exT_pc.setName("PC"); + c.anchor = GridBagConstraints.EAST; + c.gridwidth = 1; //The default value. + c.gridx = 2; + c.gridy = 1; + gridbag.setConstraints(exT_pc, c); + add(exT_pc); + exT_pc.addActionListener(this); + + sB_pc = new Scrollbar(Scrollbar.HORIZONTAL); + sB_pc.setName("PCS"); + sB_pc.setMaximum(max + 10); + sB_pc.setBlockIncrement(block); + c.gridwidth = GridBagConstraints.REMAINDER; + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.HORIZONTAL; + // c.gridwidth = 2; + c.gridx = 3; + c.gridy = 1; + gridbag.setConstraints(sB_pc, c); + add(sB_pc); + sB_pc.addAdjustmentListener(this); + } + } + setExValue(exam_ratio,epc_ratio); + } + // Draws a box around this panel. + public void paint(Graphics g) { + Dimension d = getSize(); + g.drawRect(0,0, d.width - 1, d.height - 1); + } + public Insets getInsets() { + return new Insets(5,5,5,8); + } + float getSubTotal() { + String s_str = sumL.getText().replace('%','\0').trim(); + float s_real = Float.valueOf(s_str).floatValue(); + return (s_real); + } + // entered into exT + public void actionPerformed(ActionEvent e) { + TextField source = (TextField)e.getSource(); + String name = source.getName(); + int tf = (int)Integer.valueOf(source.getText()).intValue(); + if (tf > max) + tf = max; + if (tf < 0) + tf = 0; + if( name.equals(String.valueOf("EXAM")) ) { + sB_ex.setValue(tf); + exT_ex.setText(String.valueOf((int)tf)); + } else { + sB_pc.setValue(tf); + exT_pc.setText(String.valueOf((int)tf)); + } + recalcSumm(); + } + // slider sB changed + public void adjustmentValueChanged(AdjustmentEvent e) { + Scrollbar source = (Scrollbar)e.getSource(); + String name = source.getName(); + int my_i = (int)source.getValue(); + + if( name.equals(String.valueOf("EXAMS")) ) { + sB_ex.setValue(my_i); + exT_ex.setText(String.valueOf((int)my_i)); + } else { + sB_pc.setValue(my_i); + exT_pc.setText(String.valueOf((int)my_i)); + } + recalcSumm(); + } + void recalcSumm() { + int tmp_i; + float exam , epc, sum; + + if( exam_ex == 1 ) { + tmp_i = (int)Integer.valueOf(exT_ex.getText()).intValue(); + exam = (float) tmp_i / (float)100.0; + } else { + exam = (float)s_ex / (float)f_ex; + } + if( show_pc == 1 ) { + if(epc_ex == 1) { + tmp_i = (int)Integer.valueOf(exT_pc.getText()).intValue(); + epc = (float) tmp_i / (float)100.0; + } else { + epc = (float)s_pc / (float)f_pc; + } + if( epc > exam ) { + tmp_i= (int)(10000 * (exam + c_factor * (epc - exam))); + sum = (float)tmp_i / (float)100.0; + } else { + tmp_i= (int)(10000 * exam); + sum = (float)tmp_i / (float)100.0; + } + } else { + tmp_i= (int)(10000 * exam); + sum = (float)tmp_i / (float)100.0; + } + sumL.setText(sum + "%"); + controller.recalcTermScore(); + } + void setExValue (float a, float b) { + int exm, epc; + exm = (int) (a*100.0); + epc = (int) (b*100.0); + if (exm > max) + exm = max; + if (exm < 0) + exm = 0; + if (epc > max) + epc = max; + if (epc < 0) + epc = 0; + if( exam_ex ==1 ) { + sB_ex.setValue(exm); + exT_ex.setText(String.valueOf(exm)); + } + if( (show_pc == 1) && (epc_ex==1) ) { + sB_pc.setValue(epc); + exT_pc.setText(String.valueOf(epc)); + } + } +} +