Reimplement Exercise P16.7 so that the keys of the map are objects of class Student. A student should have a first name, a last name, and a unique integer ID. For grade changes and removals, lookup should be by ID. The printout should be sorted by last name. If two students have the same last name, then use the first name as tie breaker. If the first names are also identical, then use the integer ID. Hint: Use two maps.

Complete the following files:

Gradebook.java

Student.java

/** A student with an ID. */ public class Student implements Comparable { private String firstName; private String lastName; private int id; /** Constructs a Student object. @param aFirstName the first name @param aLastName the last name @param anId the ID */ public Student(String aFirstName, String aLastName, int anId) { firstName = aFirstName; lastName = aLastName; id = anId; } /** Gets the student's first name. @return firstName the first name */ public String getFirstName() { return firstName; } /** Gets the student's last name. @return lastName the last name */ public String getLastName() { return lastName; } /** Gets the student's ID. @return id the ID */ public int getId() { return id; } public int compareTo(Object otherObject) { . . . } }