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: SF_ratio[idx] = (float) ((float)S[idx] / (float)F[idx]);
88: int tmp_i = (int) (10000 * SF_ratio[idx] );
89: SF_percent[idx]= (float)tmp_i / (float)100.0;
90: if( idx == (Entry_cnt - 1) ) { // final exam
91: Sum_ratio[idx] = SF_ratio[idx];
92: Sum_percent[idx] = SF_percent[idx];
93: }
94: }
95: }
96: 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]));
97: int tmp_i = (int)(10000 * Sum_ratio[0]);
98: Sum_percent[0] = (float)tmp_i / (float)100.0;
99: Sum_ratio[0] = Sum_percent[0] / (float)100.0;
100: Sum_ratio[1] = (float)(S[1] + (R[1]*F[1]*SF_ratio[1]/C[1])) / (float)(F[1]*(1.0 + R[1]/C[1]));
101: tmp_i = (int)(10000 * Sum_ratio[1]);
102: Sum_percent[1] = (float)tmp_i / (float)100.0;
103: Sum_ratio[1] = Sum_percent[1] / (float)100.0;
104:
105:
106: // if exam 1 is not given, use homework as default to extrapolate
107: // if epc 1 is not given, use exam 1 as epc 1
108: // if exam 2 is not given, use exam 1 to extrapolate
109: // if exam 3 is not given, use exam 2 to extrapolate
110: //
111:
112: float exam_sum = (float)0.0;
113: for(idx=0;idx<Exam_cnt;idx++) {
114: if( X[(idx+1)*2] == 1 ) {
115: // taken from homework
116: Raw_exam_ratio[idx] = SF_ratio[0];
117: } else {
118: Raw_exam_ratio[idx] = SF_ratio[(idx+1)*2];
119: }
120: if( X[(idx+1)*2 + 1] == 1 ) {
121: Raw_epc_ratio[idx] = Raw_exam_ratio[idx];
122: } else {
123: Raw_epc_ratio[idx] = SF_ratio[(idx+1)*2 + 1];
124: }
125:
126: if( Raw_epc_ratio[idx] > Raw_exam_ratio[idx] ) {
127: Exam_ratio[idx] = Raw_exam_ratio[idx] + W[4]*( Raw_epc_ratio[idx] - Raw_exam_ratio[idx] ) ;
128: } else {
129: Exam_ratio[idx] = Raw_exam_ratio[idx];
130: }
131:
132: Sum_ratio[2*(idx+1)] = Exam_ratio[idx];
133: tmp_i = (int)(10000 * Exam_ratio[idx] );
134: Sum_percent[2*(idx+1)] = (float)tmp_i / (float)100.0;
135: Sum_ratio[2*(idx+1)] = Sum_percent[2*(idx+1)] / (float)100.0;
136: exam_sum += Exam_ratio[idx];
137: }
138: exam_sum = (float)exam_sum / (float)Exam_cnt;
139:
140: Term_score = Sum_ratio[0] * W[0] + Sum_ratio[1] * W[1] + exam_sum * W[2] + Sum_ratio[Entry_cnt - 1] * W[3];
141:
142: tmp_i = (int)(10000 * Term_score);
143: Term_score = (float)tmp_i / (float)100.0;
144:
145:
146: // call to setup User Interface
147:
148: initGUI();
149:
150: }
151: public void initGUI() {
152: int row_cnt = Exam_cnt + 4;
153: int idx;
154: String [] title = {"Homework", "Quizz" };
155: HQpanel = new ExpPanel[2];
156: EXpanel = new ExmPanel[Exam_cnt+2];
157:
158: setLayout(new GridLayout(row_cnt,0,4,4));
159:
160: String t_str = "Term Score Extrapolation Applet";
161: TitleL = new Label(t_str, Label.CENTER);
162: add(TitleL);
163:
164: for(idx = 0; idx < 2; idx++) {
165: HQpanel[idx] = new ExpPanel(this,title[idx],X[idx],
166: S[idx],F[idx],C[idx],R[idx]);
167: add(HQpanel[idx]);
168: }
169: // Midterm Exam
170: for(idx =0; idx < Exam_cnt; idx++) {
171: EXpanel[idx] = new ExmPanel(this,idx+1,X[2*(idx+1)],1,X[2*idx+3],
172: S[2*(idx+1)],F[2*(idx+1)],W[4],S[2*idx+3],F[2*idx+3],Sum_ratio[2*(idx+1)]);
173: add(EXpanel[idx]);
174: }
175: // Final Exam
176: EXpanel[Exam_cnt] = new ExmPanel(this,0,X[Entry_cnt-1],0,0,
177: S[Entry_cnt-1],F[Entry_cnt-1],W[3],S[Entry_cnt-1],F[Entry_cnt-1],Sum_ratio[Entry_cnt-1]);
178: add(EXpanel[Exam_cnt]);
179:
180: String eq_str = "Term score=" + Sum_percent[0] + "*" + W[0] ;
181: eq_str = eq_str + "+" + Sum_percent[1] + "*" + W[1] ;
182: eq_str = eq_str + "+" + "(" ;
183: for(idx =1;idx<=Exam_cnt;idx++) {
184: if(idx>1) {
185: eq_str = eq_str + "+ ";
186: }
187: eq_str = eq_str + Sum_percent[2*idx] ;
188: }
189: eq_str = eq_str + ") *" + W[2] + "/" + Exam_cnt + "+";
190: eq_str = eq_str + Sum_percent[2*idx] + "*" + W[3] + " = ";
191: eq_str = eq_str + " " + Term_score + "%";
192: // EqL = new Label(eq_str, Label.LEFT);
193: // add(EqL);
194:
195: }
196: public void recalcTermScore() {
197: float score[];
198: int idx;
199: float term_summ, exam_summ;
200:
201: score = new float[Exam_cnt+3];
202: term_summ = (float)0.0;
203: exam_summ = (float)0.0;
204: for(idx=0;idx<2;idx++) {
205: score[idx] = HQpanel[idx].getSubTotal();
206: term_summ = term_summ + score[idx] * W[idx];
207: }
208: for(idx =0; idx < Exam_cnt; idx++) {
209: score[idx+2] = EXpanel[idx].getSubTotal();
210: exam_summ = exam_summ + score[idx+2];
211: }
212: score[Exam_cnt+2] = EXpanel[Exam_cnt].getSubTotal();
213: exam_summ = exam_summ * W[2] / Exam_cnt;
214: term_summ = term_summ + exam_summ + score[Exam_cnt+2] * W[3];
215: int tmp_i = (int) ((float)100.0*term_summ);
216: term_summ = (float)(tmp_i / (float)100.0);
217: String eq_str = "Term score=" + score[0] + "*" + W[0] ;
218: eq_str = eq_str + "+" + score[1] + "*" + W[1] ;
219: eq_str = eq_str + "+" + "(" ;
220: for(idx=0;idx<Exam_cnt;idx++) {
221: if(idx>0) {
222: eq_str = eq_str + "+ ";
223: }
224: eq_str = eq_str + score[idx+2] ;
225: }
226: eq_str = eq_str + ") *" + W[2] + "/" + Exam_cnt + "+";
227: eq_str = eq_str + score[Exam_cnt+2] + "*" + W[3] + " = ";
228: eq_str = eq_str + " " + term_summ + " %";
229: // TitleL.setText("TTT");
230: TitleL.setText(eq_str);
231: }
232: public void paint(Graphics g) {
233: Dimension d = getSize();
234: g.drawRect(0,0, d.width - 1, d.height - 1);
235: }
236: public void run() { }
237: public void start() {
238: recalcTermScore();
239: }
240: public void stop() { }
241:
242: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>