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;idx<Entry_cnt;idx++) {
p=getParameter("X"+idx);
X[idx]=(p==null)?1:Integer.valueOf(p).intValue();
if( (idx>1) && (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<Exam_cnt;idx++) {
if( X[(idx+1)*2] == 1 ) {
// taken from homework
Raw_exam_ratio[idx] = SF_ratio[0];
} else {
Raw_exam_ratio[idx] = SF_ratio[(idx+1)*2];
}
if( X[(idx+1)*2 + 1] == 1 ) {
Raw_epc_ratio[idx] = Raw_exam_ratio[idx];
} else {
Raw_epc_ratio[idx] = SF_ratio[(idx+1)*2 + 1];
}
if( Raw_epc_ratio[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;idx<Exam_cnt;idx++) {
if(idx>0) {
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() { }
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>