Grades[] data = new Grades[NUM_PERSON];
This code creates an array capable of storing NUM_PERSON Grades objects.
By default, each index is initialized to null.
data[index].setGrades(firstName, lastName, classNum, grade);
You are attempting to call the method setGrades on null, hence the NullPointerException.
One solution is to initialize each index of data to a new instance of Grades in the GradeReader class' constructor, which will be called when a new instance of GradeReader is created:
public class GradeReader {
public GradeReader() {
for (int i = 0; i < NUM_PERSON; i++)
data[i] = new Grades();
}
...