package edu.pdx.cs410J.grader;
import edu.pdx.cs410J.ParserException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
/**
* This is a little program that combines the grades for the midterm
* quiz, the dream job, and the resume into one grade. This way
* people who missed this quiz are not penalized unnecessarily.
*/
public class FixMidterm {
public static void main(String[] args) {
PrintStream out = System.out;
PrintStream err = System.err;
if (args.length < 1) {
err.println("** usage: java FixMidterm gradebook");
System.exit(1);
}
String xmlFile = args[0];
GradeBook book;
File file = new File(xmlFile);
if (file.exists()) {
// Parse a grade book from the XML file
try {
XmlGradeBookParser parser = new XmlGradeBookParser(file);
book = parser.parse();
} catch (FileNotFoundException ex) {
err.println("** Could not find file: " + ex.getMessage());
System.exit(1);
return;
} catch (IOException ex) {
err.println("** IOException during parsing: " + ex.getMessage());
System.exit(1);
return;
} catch (ParserException ex) {
err.println("** Error during parsing: " + ex.getMessage());
System.exit(1);
return;
}
} else {
err.println("** File " + file + " does not exist");
System.exit(1);
return;
}
book.forEachStudent(student -> {
out.print("Fixing " + student.getId() + ": ");
out.flush();
double total = 0.0;
Grade quiz3 = student.getGrade("quiz3");
if (quiz3 != null) {
total += quiz3.getScore();
} else {
quiz3 = new Grade("quiz3", 0.0);
}
out.print("midterm = " + quiz3.getScore() + ", ");
out.flush();
Grade job = student.getGrade("job");
if (job != null) {
total += job.getScore();
quiz3.addNote("Dream job score: " + job.getScore());
out.print("dream job = " + job.getScore() + ", ");
} else {
quiz3.addNote("Missing dream job");
}
Grade resume = student.getGrade("resume");
if (resume != null) {
total += resume.getScore();
quiz3.addNote("Resume score: " + resume.getScore());
out.print("resume = " + resume.getScore() + ", ");
out.flush();
} else {
quiz3.addNote("Missing resume");
}
quiz3.setScore(total);
student.setGrade(quiz3.getAssignmentName(), quiz3);
out.println("total = " + quiz3.getScore());
});
// Write the grade book to the XML file
try {
XmlDumper dumper = new XmlDumper(file);
dumper.dump(book);
} catch (IOException ex) {
err.println("** Error while writing XML file: " + ex);
System.exit(1);
}
}
}