import java.awt.*;
import java.applet.*;
import java.util.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import student.Student;
import student.StudentFormatException;
public class VectorStudentDBTester extends Applet
implements ItemListener,
ActionListener {
Vector studentDB;
TextArea result,errMessage;
Button sortButton;
Choice fileURL;
Label label1,label2;
TextField tfNumber;
String datafile[] = { "studfile1.html",
"studfile2.html",
"studfile3.html",
"studfile4.html",
"studfile5.html",
"studfile6.html",
"studfile7.html",
"studfile8.html" };
public void init() {
sortButton = new Button("Sort by Number");
result = new TextArea(12,80);
errMessage = new TextArea(4,80);
label1 = new Label("Test Case");
label2 = new Label("Search Grade #");
tfNumber = new TextField(10);
fileURL = new Choice();
for (int i = 0; i < datafile.length; i++)
fileURL.add(datafile[i]);
add(label1);
add(fileURL);
add(sortButton);
add(label2);
add(tfNumber);
add(result);
add(errMessage);
fileURL.addItemListener(this);
tfNumber.addActionListener(this);
sortButton.addActionListener(this);
}
public void itemStateChanged(ItemEvent ie) {
studentDB = new Vector();
String textLine="",name;
int number,grade;
StringTokenizer st;
try {
URL url = new URL("http://personal.cityu.edu.hk/~dcywchan/2003dco10103/" +
fileURL.getSelectedItem());
URLConnection data = url.openConnection();
Reader inFile = new InputStreamReader(data.getInputStream());
studentDB = makeVectorFromReader(inFile,"_");
result.setText("");
result.setText(studentDB.toString());
inFile.close();
} catch(StudentFormatException se) {
errMessage.setText("");
errMessage.setText(se.toString());
}
catch(MalformedURLException mue) {}
catch(IOException ioe) {}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(sortButton)) {
int[] arr = getNumbers(studentDB);
String s = "";
result.setText("");
for (int i = 0; i < arr.length; i++)
s = s+arr[i]+'\n';
result.setText(s);
}
else if (e.getSource().equals(tfNumber)) {
int grade = Integer.parseInt(tfNumber.getText());
int lookUpResult = countGradeGreaterOEqual(studentDB,grade);
result.setText("");
result.setText("Number of student with Grade >= " + grade + " is " + lookUpResult);
}
}
public static int countGradeGreaterOEqual(Vector vector, int n) {
int count = 0;
for (Iterator i = vector.iterator(); i.hasNext(); ) {
if (((Student) i.next()).getGrade() >= n) {
count++;
}
}
return count;
}
public static int[] getNumbers(Vector vector) {
int nums[] = new int[vector.size()];
int i = 0;
for (Iterator it = vector.iterator() ; it.hasNext();) {
nums[i++] = ((Student) it.next()).getNumber();
}
Arrays.sort(nums);
return nums;
}
public static Vector makeVectorFromReader(Reader r, final String DELIM)
throws IOException, StudentFormatException {
BufferedReader br = new BufferedReader(r);
Vector v = new Vector();
StringTokenizer st;
String line = "";
int number;
String name;
int grade;
try {
line = br.readLine();
while (line != null) {
st = new StringTokenizer(line, DELIM);
number = Integer.parseInt(st.nextToken());
name = st.nextToken();
grade = Integer.parseInt(st.nextToken());
if (st.hasMoreTokens()) {
throw new StudentFormatException(line);
}
v.add(new Student(number, name, grade));
line = br.readLine();
}
} catch (NoSuchElementException nsee) {
throw new StudentFormatException(line);
} catch (NumberFormatException nfe) {
throw new StudentFormatException(line);
}
return v;
}
}