public class UCLAStudent {
    private String name;
    private long studentID; 
    private UCLAClass[] classes;
    private char[] grades;
    private int classesTaken; 
    
    private static final int MAX_CLASSES = 100;
    
    public UCLAStudent(long studentID, String name) {
	this.studentID = studentID;
	this.name = name;
	classesTaken = 0;
	grades = new char[MAX_CLASSES];
	classes = new UCLAClass[MAX_CLASSES];
    }
    
    public long getStudentID() {
	return studentID;
    }
    
    public String getName() {
	return name;
    }
    
    public void add(UCLAClass aClass, char grade) {
	if(classesTaken == 100) {
	    return;
	}
	classes[classesTaken] = aClass;
	grades[classesTaken] = grade;
	classesTaken++;
    }
    
    private int point(char ch) {
	switch(ch) {
	    case 'A':
	    case 'a':
	       return 4;
	    case 'B':
	    case 'b':
	       return 3;
	   case 'C':
	   case 'c':
	      return 2;
	  case 'D':
	  case 'd':
	     return 1;
	  default:
	     return 0;
	}
    }
    
    public double gpa() {
	if(classesTaken == 0) {
	    return 0;
	}
	double sumOfGP = 0; 
	double sumOfUnits = 0;
	for(int i = 0; i < classesTaken; i++) {
	    sumOfGP+=classes[i].getUnits()*point(grades[i]);
	    sumOfUnits+= classes[i].getUnits();
	}
	return sumOfGP/sumOfUnits;
    }   
    
    public void  showStudentInfo() {
	System.out.println("Student ID: " + studentID);
	System.out.println("Name: " + name);
    }
    
    public void showClasses() {
	for(int i = 0; i < classesTaken; i++) {
	    System.out.println(classes[i].getClassID() + " " + grades[i]);
	}
    }
}
