- StudentNode extends Student
public class StudentNode extends Student
{
private StudentNode next;
public StudentNode(int number, String name, int grade)
{
super(number, name, grade);
this.next = null;
}
public StudentNode(int number)
{
super(number, "", 0);
this.next = null;
}
public StudentNode getNext()
{
return next;
}
public void setNext(StudentNode next)
{
this.next = next;
}
public boolean equals(Object obj)
{
if(obj instanceof StudentNode)
{
StudentNode studentNode = (StudentNode)obj;
return getNumber() == studentNode.getNumber();
} else
{
return false;
}
}
public int compareTo(Object obj)
throws ClassCastException
{
int i = getGrade();
int j = ((StudentNode)obj).getGrade();
return i != j ? i >= j ? 1 : -1 : 0;
}
}
- LinkedListStudentDB
public class LinkedListStudentDB {
private StudentNode sList;
public LinkedListStudentDB() {
sList = null;
}
public void addStudent(StudentNode studentNode) {
if (! checkStudent(studentNode)) {
if (sList == null)
sList = studentNode;
else {
StudentNode p = sList;
while ((p != null) && (p.compareTo(studentNode) > 0))
p = p.getNext();
if (p == sList) {
studentNode.setNext(sList);
sList = studentNode;
} else {
StudentNode q = sList;
while (q.getNext() != p)
q = q.getNext();
q.setNext(studentNode);
studentNode.setNext(p);
}
}
}
}
public void removeStudent(StudentNode studentNode) {
StudentNode p;
if (checkStudent(studentNode)) {
for (p = sList; !(p.equals(studentNode)); p = p.getNext());
if (p == sList) {
sList = sList.getNext();
} else {
StudentNode q = sList;
while (q.getNext() != p)
q = q.getNext();
q.setNext(p.getNext());
}
}
}
public boolean checkStudent(StudentNode studentNode) {
for (StudentNode ptr = sList; ptr != null; ptr = ptr.getNext())
if (ptr.equals(studentNode))
return true;
return false;
}
public String toString() {
String s = "";
for (StudentNode ptr = sList; ptr != null; ptr = ptr.getNext())
s += ptr.toString() + '\n';
return s;
}
}
- StudentTester
import java.awt.*;
import java.applet.*;
import java.util.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class LinkedListStudentDBTester extends Applet
implements ItemListener,
ActionListener {
LinkedListStudentDB studentDB;
TextArea result;
TextField tfNumber;
Choice fileURL;
Label label1,label2;
String datafile[] = { "studfile1.html",
"studfile2.html",
"studfile3.html",
"studfile4.html" };
public void init() {
result = new TextArea(12,80);
label1 = new Label("Test Case");
label2 = new Label("Remove Student");
tfNumber = new TextField(10);
fileURL = new Choice();
for (int i = 0; i < datafile.length; i++)
fileURL.add(datafile[i]);
add(label1);
add(fileURL);
add(label2);
add(tfNumber);
add(result);
fileURL.addItemListener(this);
tfNumber.addActionListener(this);
}
public void itemStateChanged(ItemEvent ie) {
studentDB = new LinkedListStudentDB();
try {
URL url = new URL("http://personal.cityu.edu.hk/~dcywchan/2003dco10103/" +
fileURL.getSelectedItem());
URLConnection data = url.openConnection();
BufferedReader inFile = new BufferedReader(new InputStreamReader(data.getInputStream()));
String textLine;
while((textLine = inFile.readLine()) != null) {
StringTokenizer st = new StringTokenizer(textLine, "_");
studentDB.addStudent(new StudentNode(Integer.parseInt(st.nextToken()),
st.nextToken(),
Integer.parseInt(st.nextToken())));
}
result.setText("");
result.setText(studentDB.toString());
inFile.close();
} catch(MalformedURLException mue) {}
catch(IOException ioe) {}
}
public void actionPerformed(ActionEvent e) {
studentDB.removeStudent(new StudentNode(Integer.parseInt(tfNumber.getText())));
result.setText("");
result.setText(studentDB.toString());
}
}