import org.w3c.dom.*;
import org.apache.xerces.parsers.DOMParser;
class Grades
{
static float grades[][] = new float[100][5];
static int nstudent = 0;
static int gi = -1;
public static void computeGrades(String uri)
{
try {
DOMParser parser = new DOMParser();
parser.parse(uri);
Document doc = parser.getDocument();
traverse_tree(doc);
compute_final_grades();
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
private static void compute_final_grades()
{
float Ave = 0;
int i = 0, j = 0;
System.out.println("Grades");
for(i = 0; i < nstudent ; i++)
{
float total = 0;
for(j = 0; j < 4; j++) {
total += grades[i][j];
}
grades[i][4] = total/4;
Ave += grades[i][4];
System.out.println("Student " + i + "=" + grades[i][4]);
}
Ave /= nstudent;
System.out.println("Class Average =" + Ave);
}
private static void traverse_tree(Node node)
{
if(node == null) {
return;
}
int type = node.getNodeType();
switch (type) {
case Node.DOCUMENT_NODE: {
traverse_tree(((Document)node).getDocumentElement());
break;
}
case Node.ELEMENT_NODE: {
String elementName = node.getNodeName();
gi = -1;
if(elementName.equals("hw1"))
gi = 0;
else if(elementName.equals("hw2"))
gi = 1;
else if(elementName.equals("project"))
gi = 2;
else if(elementName.equals("final"))
gi = 3;
else if(elementName.equals("student"))
nstudent++;
NodeList childNodes = node.getChildNodes();
if(childNodes != null) {
int length = childNodes.getLength();
for (int loopIndex = 0; loopIndex < length ; loopIndex++)
{
traverse_tree(childNodes.item(loopIndex));
}
}
break;
}
case Node.TEXT_NODE: {
String chData = node.getNodeValue().trim();
if(chData.indexOf("\n") < 0 && chData.length() > 0) {
if(gi >= 0)
grades[nstudent-1][gi] = Integer.parseInt(chData);
}
}
}
}
}
public class DOMGrades
{
public static void main(String[] args)
{
Grades.computeGrades(args[0]);
}
}