// ********************************************* client program import java.util.Scanner; public class CompositionDemo5 { public static void main(String[] args) { Student[] classRoster = new Student[5]; // class of 5 students // for example, Jane Doe is in 10th grade. Here courses are English, Algebra, History, & Biology. Her semester 1 grade in English was 88% and her semester 2 grade in // English was a 92%. Her first and second semester grades in Algebra were 75% and 78%. classRoster[0] = new Student(new Name("Jane", "Doe"), 10, new String[]{"English", "Algebra", "History", "Biology"}, new int[][]{{88, 92}, {75, 78}, {80, 93}, {99, 94}}); classRoster[1] = new Student(new Name("Bill", "Smith"), 10, new String[]{"Algebra", "English", "History", "Biology"}, new int[][]{{80, 90}, {90, 100}, {70, 80}, {70, 90}}); classRoster[2] = new Student(new Name("Mary", "Jones"), 11, new String[]{"English", "Algebra", "Biology", "History"}, new int[][]{{85, 85}, {85, 85}, {85, 85}, {85, 85}}); classRoster[3] = new Student(new Name("John", "Mason"), 12, new String[]{"Algebra", "History", "English", "Biology"}, new int[][]{{0, 0}, {0, 0}, {0, 0}, {0, 0}}); classRoster[4] = new Student(new Name("Sally", "Smith"), 10, new String[]{"Biology", "Algebra", "History", "English"}, new int[][]{{100, 100}, {100, 100}, {100, 100}, {100, 100}}); // display all information for (int i = 0; i < classRoster.length; i++) { System.out.println(classRoster[i]); } // using linear search to find class valedictorian double maxGPA = classRoster[0].computeGPA(); Name nameOfStudentWithMaxGPA = classRoster[0].getName(); for (int i = 1; i < classRoster.length; i++) { double nextStudentGPA = classRoster[i].computeGPA(); if (nextStudentGPA > maxGPA) { maxGPA = nextStudentGPA; nameOfStudentWithMaxGPA = classRoster[i].getName(); } } System.out.println(nameOfStudentWithMaxGPA.getFirstName() + " " + nameOfStudentWithMaxGPA.getLastName() + " is the class valedictorian with a gpa of " + maxGPA); // input a student's name and the name of a class Scanner keyboard = new Scanner(System.in); System.out.print("Enter a student's last name (e.g. Smith): "); String lastName = keyboard.nextLine(); System.out.print("Enter a student's first name: "); String firstName = keyboard.nextLine(); System.out.print("Enter a course (e.g. English): "); String course = keyboard.nextLine(); // display what class period he/she attends that course for (int studentNum = 0; studentNum < classRoster.length; studentNum++) { if (classRoster[studentNum].getName().getLastName().equals(lastName) && classRoster[studentNum].getName().getFirstName().equals(firstName)) { for (int period = 0; period < classRoster[studentNum].getSchedule().length; period++) { if (classRoster[studentNum].getSchedule()[period].equals(course)) { System.out.println("He/she has " + course + " class during period: " + (period + 1)); } } } } // input a student's last name, first name, a class period, and a semester number (1 or 2) System.out.print("Enter a student's last name: "); lastName = keyboard.nextLine(); System.out.print("Enter a student's first name: "); firstName = keyboard.nextLine(); System.out.print("Enter a class period (1, 2, 3, or 4): "); int classPeriod = keyboard.nextInt(); System.out.print("Enter a semester number (1 or 2): "); int semesterNum = keyboard.nextInt(); // display that semester's grade percent for (int studentNum = 0; studentNum < classRoster.length; studentNum++) { if (classRoster[studentNum].getName().getLastName().equals(lastName) && classRoster[studentNum].getName().getFirstName().equals(firstName)) { int grade = classRoster[studentNum].getGrades()[classPeriod - 1][semesterNum - 1]; System.out.println("His/her gpa in that class in that semester was: " + grade); } } keyboard.close(); } } ///////////////////////////////////////////////// Name class class Name { // ************************************ instance fields private String myFirstName; private String myLastName; // ************************************ constructors public Name(String first, String last) { myFirstName = first; myLastName = last; } // ************************************ accessor methods public String getLastName() { return myLastName; } public String getFirstName() { return myFirstName; } // ************************************ modifier methods public void setFirstName(String first) { myFirstName = first; } public void setLastName(String last) { myLastName = last; } // *********************************** interesting methods public String toString() { return myFirstName + " " + myLastName; } } /////////////////////////////////////////// Student class class Student { // ************************************ instance fields private Name myName; private int myGradeLevel; private String[] mySchedule; private int[][] myGrades; // ************************************ constructors public Student(Name name, int gradeLevel, String[] schedule, int[][] grades) { myName = name; myGradeLevel = gradeLevel; mySchedule = schedule; myGrades = grades; } // ************************************ accessor methods public Name getName() { return myName; } public int getGradeLevel() { return myGradeLevel; } public String[] getSchedule() { return mySchedule; } public int[][] getGrades() { return myGrades; } // *********************************** interesting methods public String scheduleList() { String listOfClasses = ""; for (int i = 0; i < mySchedule.length; i++) { listOfClasses = listOfClasses + " " + mySchedule[i]; } return listOfClasses; } public String displayGrades() { String listOfGrades = ""; for (int course = 0; course < mySchedule.length; course++) { listOfGrades = listOfGrades + mySchedule[course] + " "; for (int semester = 0; semester < myGrades[course].length; semester++) { listOfGrades = listOfGrades + "S" + (semester + 1) + "=" + myGrades[course][semester] + " "; } } return listOfGrades; } /** Computes a student's grade point average (gpa). precondition: none postcondition: Returns the sum of all grade percents in myGrade. @return the average of all grade percents in myGrade. */ public double computeGPA() { double sum = 0; // sum of all semester grades double average = 0; // grade point average for (int course = 0; course < myGrades.length; course++) { for (int semester = 0; semester < myGrades[course].length; semester++) { sum += myGrades[course][semester]; } } average = sum / (myGrades.length * myGrades[0].length); return average; } public String toString() { return myName.toString() + " " + myGradeLevel + " " + displayGrades(); } }