import java.applet.*; import java.awt.*; import java.lang.*; import java.util.*; import java.net.*; import java.awt.event.*; public class TScore extends Applet implements Runnable { public float W[]; public int Entry_cnt, Exam_cnt; public float S[], F[]; public int X[], C[], R[]; public float SF_ratio[], SF_percent[]; public float Sum_ratio[], Sum_percent[]; public float Exam_ratio[], Raw_exam_ratio[], Raw_epc_ratio[]; public float Term_score; ExpPanel [] HQpanel; ExmPanel [] EXpanel; Label TitleL; Label EqL; public void init() { String p; int fs; int idx; C = new int[2]; R = new int[2]; W = new float[5]; // final exam set number p=getParameter("FS"); fs = (p==null)?1:Integer.valueOf(p).intValue(); // how many entries Entry_cnt= ((fs == 0)? 2 : 1 + 2*fs); // how many exams Exam_cnt = (Entry_cnt - 3 ) / 2; S = new float[Entry_cnt]; F = new float[Entry_cnt]; X = new int[Entry_cnt]; SF_ratio = new float[Entry_cnt]; SF_percent= new float[Entry_cnt]; Sum_ratio = new float[Entry_cnt]; Sum_percent = new float[Entry_cnt]; Raw_exam_ratio = new float[Exam_cnt]; Raw_epc_ratio = new float[Exam_cnt]; Exam_ratio = new float[Exam_cnt]; p=getParameter("HW_W"); W[0] =(p==null)?1:Float.valueOf(p).floatValue(); p=getParameter("QZ_W"); W[1] =(p==null)?1:Float.valueOf(p).floatValue(); p=getParameter("EX_W"); W[2] =(p==null)?1:Float.valueOf(p).floatValue(); p=getParameter("FE_W"); W[3] =(p==null)?1:Float.valueOf(p).floatValue(); p=getParameter("PC_W"); W[4] =(p==null)?1:Float.valueOf(p).floatValue(); p=getParameter("HW_C"); C[0] =(p==null)?1:Integer.valueOf(p).intValue(); p=getParameter("HW_R"); R[0] =(p==null)?1:Integer.valueOf(p).intValue(); p=getParameter("QZ_C"); C[1] =(p==null)?1:Integer.valueOf(p).intValue(); p=getParameter("QZ_R"); R[1] =(p==null)?1:Integer.valueOf(p).intValue(); for(idx=0;idx1) && (X[idx]==1) ) { // midterm exam, final extrapolated SF_ratio[idx] = (float)0.0; SF_percent[idx]= (float)0.0; if( idx == (Entry_cnt - 1) ) { // final exam extrapolated, from hw Sum_ratio[idx] = SF_ratio[0]; Sum_percent[idx] = SF_percent[0]; } } else { // homework, quiz extrapolated or not;exam,final not extrapolated p=getParameter("S"+idx); 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]); int tmp_i = (int) (10000 * SF_ratio[idx] ); SF_percent[idx]= (float)tmp_i / (float)100.0; if( idx == (Entry_cnt - 1) ) { // final exam Sum_ratio[idx] = SF_ratio[idx]; Sum_percent[idx] = SF_percent[idx]; } } } 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])); int tmp_i = (int)(10000 * Sum_ratio[0]); Sum_percent[0] = (float)tmp_i / (float)100.0; Sum_ratio[0] = Sum_percent[0] / (float)100.0; Sum_ratio[1] = (float)(S[1] + (R[1]*F[1]*SF_ratio[1]/C[1])) / (float)(F[1]*(1.0 + R[1]/C[1])); tmp_i = (int)(10000 * Sum_ratio[1]); Sum_percent[1] = (float)tmp_i / (float)100.0; Sum_ratio[1] = Sum_percent[1] / (float)100.0; // if exam 1 is not given, use homework as default to extrapolate // if epc 1 is not given, use exam 1 as epc 1 // if exam 2 is not given, use exam 1 to extrapolate // if exam 3 is not given, use exam 2 to extrapolate // float exam_sum = (float)0.0; for(idx=0;idx Raw_exam_ratio[idx] ) { Exam_ratio[idx] = Raw_exam_ratio[idx] + W[4]*( Raw_epc_ratio[idx] - Raw_exam_ratio[idx] ) ; } else { Exam_ratio[idx] = Raw_exam_ratio[idx]; } Sum_ratio[2*(idx+1)] = Exam_ratio[idx]; tmp_i = (int)(10000 * Exam_ratio[idx] ); Sum_percent[2*(idx+1)] = (float)tmp_i / (float)100.0; Sum_ratio[2*(idx+1)] = Sum_percent[2*(idx+1)] / (float)100.0; exam_sum += Exam_ratio[idx]; } exam_sum = (float)exam_sum / (float)Exam_cnt; Term_score = Sum_ratio[0] * W[0] + Sum_ratio[1] * W[1] + exam_sum * W[2] + Sum_ratio[Entry_cnt - 1] * W[3]; tmp_i = (int)(10000 * Term_score); Term_score = (float)tmp_i / (float)100.0; // call to setup User Interface initGUI(); } public void initGUI() { int row_cnt = Exam_cnt + 4; int idx; String [] title = {"Homework", "Quizz" }; HQpanel = new ExpPanel[2]; EXpanel = new ExmPanel[Exam_cnt+2]; setLayout(new GridLayout(row_cnt,0,4,4)); String t_str = "Term Score Extrapolation Applet"; TitleL = new Label(t_str, Label.CENTER); add(TitleL); for(idx = 0; idx < 2; idx++) { HQpanel[idx] = new ExpPanel(this,title[idx],X[idx], S[idx],F[idx],C[idx],R[idx]); add(HQpanel[idx]); } // Midterm Exam for(idx =0; idx < Exam_cnt; idx++) { EXpanel[idx] = new ExmPanel(this,idx+1,X[2*(idx+1)],1,X[2*idx+3], S[2*(idx+1)],F[2*(idx+1)],W[4],S[2*idx+3],F[2*idx+3],Sum_ratio[2*(idx+1)]); add(EXpanel[idx]); } // Final Exam EXpanel[Exam_cnt] = new ExmPanel(this,0,X[Entry_cnt-1],0,0, S[Entry_cnt-1],F[Entry_cnt-1],W[3],S[Entry_cnt-1],F[Entry_cnt-1],Sum_ratio[Entry_cnt-1]); add(EXpanel[Exam_cnt]); String eq_str = "Term score=" + Sum_percent[0] + "*" + W[0] ; eq_str = eq_str + "+" + Sum_percent[1] + "*" + W[1] ; eq_str = eq_str + "+" + "(" ; for(idx =1;idx<=Exam_cnt;idx++) { if(idx>1) { eq_str = eq_str + "+ "; } eq_str = eq_str + Sum_percent[2*idx] ; } eq_str = eq_str + ") *" + W[2] + "/" + Exam_cnt + "+"; eq_str = eq_str + Sum_percent[2*idx] + "*" + W[3] + " = "; eq_str = eq_str + " " + Term_score + "%"; // EqL = new Label(eq_str, Label.LEFT); // add(EqL); } public void recalcTermScore() { float score[]; int idx; float term_summ, exam_summ; score = new float[Exam_cnt+3]; term_summ = (float)0.0; exam_summ = (float)0.0; for(idx=0;idx<2;idx++) { score[idx] = HQpanel[idx].getSubTotal(); term_summ = term_summ + score[idx] * W[idx]; } for(idx =0; idx < Exam_cnt; idx++) { score[idx+2] = EXpanel[idx].getSubTotal(); exam_summ = exam_summ + score[idx+2]; } score[Exam_cnt+2] = EXpanel[Exam_cnt].getSubTotal(); exam_summ = exam_summ * W[2] / Exam_cnt; term_summ = term_summ + exam_summ + score[Exam_cnt+2] * W[3]; int tmp_i = (int) ((float)100.0*term_summ); term_summ = (float)(tmp_i / (float)100.0); String eq_str = "Term score=" + score[0] + "*" + W[0] ; eq_str = eq_str + "+" + score[1] + "*" + W[1] ; eq_str = eq_str + "+" + "(" ; for(idx=0;idx0) { eq_str = eq_str + "+ "; } eq_str = eq_str + score[idx+2] ; } eq_str = eq_str + ") *" + W[2] + "/" + Exam_cnt + "+"; eq_str = eq_str + score[Exam_cnt+2] + "*" + W[3] + " = "; eq_str = eq_str + " " + term_summ + " %"; // TitleL.setText("TTT"); TitleL.setText(eq_str); } public void paint(Graphics g) { Dimension d = getSize(); g.drawRect(0,0, d.width - 1, d.height - 1); } public void run() { } public void start() { recalcTermScore(); } public void stop() { } }