diff --git a/src/main/java/io/zipcoder/Classroom.java b/src/main/java/io/zipcoder/Classroom.java index 64566f0..59232c2 100644 --- a/src/main/java/io/zipcoder/Classroom.java +++ b/src/main/java/io/zipcoder/Classroom.java @@ -1,4 +1,85 @@ package io.zipcoder; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Map; +import java.util.TreeMap; + public class Classroom { + Student[] students; + int maxNumberOfStudents; + + public Classroom(int maxNumberOfStudent){ + maxNumberOfStudents = maxNumberOfStudent; + } + public Classroom(Student[] allStudents){ + this.students = allStudents; + } + public Classroom(){ + this.students = new Student[30]; + } + public Student[] getStudents() { + return students; + } + public Double getAverageExamScore(){ + Double examSum = 0.0; + for(int i = 0; i < students.length; i++){ + examSum += students[i].getAverageExamScore(); + } + return examSum/students.length; + } + public void addStudent(Student student){ + students = new Student[maxNumberOfStudents]; + for (int i = 0; i < this.students.length; i++){ + if(this.students[i] == null){ + students[i] = student; + break; + } + } + } + public void removeStudent(String firstName, String lastName) { + for (int i = 0; i < students.length; i++) { + if ((students[i].firstName + students[i].lastName).equals(firstName + lastName)) { + System.arraycopy(students, i + 1, students, i, students.length - 1 - i); + } + students[students.length - 1] = null; + break; + } + } + public Student[] getStudentsByScore () { + Student[] scoreArr = new Student[students.length]; + for (int i=0 ; i gradeBook = new TreeMap(); + for (int i = 0; i < students.length; i++) { + if (students[i].getAverageExamScore() >= 90) { + gradeBook.put(students[i].getFirstName(), "A"); + } else if (students[i].getAverageExamScore() >= 80) { + gradeBook.put(students[i].getFirstName(), "B"); + } else if (students[i].getAverageExamScore() >= 70) { + gradeBook.put(students[i].getFirstName(), "C"); + } else if (students[i].getAverageExamScore() >= 60) { + gradeBook.put(students[i].getFirstName(), "D"); + } else { + gradeBook.put(students[i].getFirstName(), "F"); + } + + } + for (Map.Entry g : gradeBook.entrySet()) { + System.out.println(g); + } + return gradeBook; + } } diff --git a/src/main/java/io/zipcoder/Student.java b/src/main/java/io/zipcoder/Student.java index b543e36..48bce97 100644 --- a/src/main/java/io/zipcoder/Student.java +++ b/src/main/java/io/zipcoder/Student.java @@ -1,4 +1,63 @@ package io.zipcoder; +import java.util.ArrayList; +import java.util.Arrays; + public class Student { + String firstName; + String lastName; + ArrayList examScores; + + public Student(String firstName, String lastName, ArrayList examScores) { + this.firstName = firstName; + this.lastName = lastName; + this.examScores = examScores; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getExamScores(){ + String output = "Exam Scores:\n"; + int counter = 1; + for(int i = 0; i <= examScores.size() - 1; i++){ + output +=" \tExam " + counter + " -> " + examScores.get(i) + "\n"; + counter++; + } + return output; + } + + public int getNumberOfExamsTaken() { + return examScores.size(); + } + + public void addExamScore(Double score){ examScores.add(score); } + + public void setExamScores(int examNumber, double newScore) { examScores.set(examNumber, newScore); } + + public Double getAverageExamScore(){ + Double average = 0.0; + for(int i = 0; i < examScores.size(); i++){ + average += examScores.get(i); + } + return average/examScores.size(); + } + + @Override + public String toString(){ + return "Student: " + getFirstName() + getLastName() + ", Average Scores: " + getAverageExamScore() + getExamScores(); + } } diff --git a/src/test/java/io/zipcoder/ClassroomTest.java b/src/test/java/io/zipcoder/ClassroomTest.java index 7bac1ff..70eaff2 100644 --- a/src/test/java/io/zipcoder/ClassroomTest.java +++ b/src/test/java/io/zipcoder/ClassroomTest.java @@ -1,4 +1,94 @@ package io.zipcoder; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Map; + + public class ClassroomTest { + @Test + public void testGetAvergeExamScore() { + ArrayList s1Scores = new ArrayList(Arrays.asList(84.00, 92.00)); + ArrayList s2Scores = new ArrayList(Arrays.asList(96.0, 100.00)); + + Student s1 = new Student("Kai", "Shields", s1Scores); + Student s2 = new Student("Kendra", "Ng", s2Scores); + + Double expectedAverage = 93.0; + Student[] students = {s1, s2}; + Classroom classroom = new Classroom(students); + + Double actual = classroom.getAverageExamScore(); + + Assert.assertEquals(expectedAverage, actual); + } + + @Test + public void testAddStudent() { + int maxNumberOfStudents = 1; + Classroom classroom = new Classroom(maxNumberOfStudents); + ArrayList examScores = new ArrayList<>(Arrays.asList(100.0, 85.0, 76.0, 0.0)); + Student student = new Student("Kai", "Shields", examScores); + + Student[] preEnrollment = classroom.getStudents(); + classroom.addStudent(student); + Student[] postEnrollment = classroom.getStudents(); + + String preEnrollmentAsString = Arrays.toString(preEnrollment); + String postEnrollmentAsString = Arrays.toString(postEnrollment); + } + + @Test + public void testRemoveStudent() { + Integer maxNumberOfStudents = 1; + Classroom classroom = new Classroom(maxNumberOfStudents); + ArrayList s2Scores = new ArrayList<>(Arrays.asList(89.0, 100.0, 50.0)); + Student s1 = new Student("Kai", "Shields", s2Scores); + classroom.addStudent(s1); + + Integer actual = classroom.getStudents().length; + + classroom.removeStudent("Kai", "Shields"); + + Assert.assertEquals(maxNumberOfStudents, actual); + } + + @Test + public void testGetStudentsByScore() { + ArrayList s1Scores = new ArrayList(Arrays.asList(100.0, 93.0)); + ArrayList s2Scores = new ArrayList(Arrays.asList(78.0, 85.0)); + Student s1 = new Student("Kendra", "Ng", s2Scores); + Student s2 = new Student("Kai", "Shields", s1Scores); + Student[] students = {s1, s2}; + Classroom classroom = new Classroom(students); + classroom.addStudent(s1); + classroom.addStudent(s2); + + Student[] preEnrollment = classroom.getStudents(); + String preEnrollmentAsString = Arrays.toString(preEnrollment); + classroom.getStudentsByScore(); + Student[] postEnrollment = classroom.getStudents(); + + String postEnrollmentAsString = Arrays.toString(postEnrollment); + } + + @Test + public void testGetGradeBook() { + ArrayList s1Scores = new ArrayList(Arrays.asList(70.0, 100.0)); + ArrayList s2Scores = new ArrayList(Arrays.asList(94.0, 85.0)); + ArrayList s3Scores = new ArrayList(Arrays.asList(62.0, 96.0)); + + Student s1 = new Student("Kai", "Shields", s1Scores); + Student s2 = new Student("Kendra", "Ng", s2Scores); + Student s3 = new Student("Val", "Fraiger", s3Scores); + + Student[] students = {s1, s2, s3}; + Classroom classroom = new Classroom(students); + + Map gradeBook = classroom.getGradeBook(); + } + } diff --git a/src/test/java/io/zipcoder/StudentTest.java b/src/test/java/io/zipcoder/StudentTest.java index a9fedec..499437e 100644 --- a/src/test/java/io/zipcoder/StudentTest.java +++ b/src/test/java/io/zipcoder/StudentTest.java @@ -1,5 +1,108 @@ package io.zipcoder; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicReferenceArray; + public class StudentTest { + @Test + public void testGetFirstName(){ + Student s = new Student("Bob", "Bobert", null); + String expected = "Bob"; + String actual = s.getFirstName(); + Assert.assertEquals(expected, actual); + } + @Test + public void testGetLastName(){ + Student s = new Student("Bob", "Bobert", null); + String expected = "Bobert"; + String actual = s.getLastName(); + Assert.assertEquals(expected, actual); + } + @Test + public void testGetExamScores(){ + String firstName = "Kai"; + String lastName = "Shields"; + ArrayList examScores = new ArrayList(Arrays.asList(80.0, 87.0, 100.0)); + Student s = new Student(firstName, lastName, examScores); + + String expected ="Exam Scores:\n" + + " \tExam 1 -> 80.0\n" + + " \tExam 2 -> 87.0\n" + + " \tExam 3 -> 100.0\n"; + String actual = s.getExamScores(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testAddExamScore(){ + String firstName = "Kai"; + String lastName = "Shields"; + ArrayList examScores = new ArrayList(Arrays.asList(80.0, 87.0, 100.0)); + Student student = new Student(firstName, lastName, examScores); + String expected ="Exam Scores:\n" + + " \tExam 1 -> 80.0\n" + + " \tExam 2 -> 87.0\n" + + " \tExam 3 -> 100.0\n" + + " \tExam 4 -> 90.0\n"; + + student.addExamScore(90.0); + String actual = student.getExamScores(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testSetExamScore(){ + String firstName = "Kai"; + String lastName = "Shields"; + ArrayList examScores = new ArrayList(Arrays.asList(80.0, 87.0, 100.0, 90.0)); + Student student = new Student(firstName, lastName, examScores); + String expected ="Exam Scores:\n" + + " \tExam 1 -> 70.0\n" + + " \tExam 2 -> 87.0\n" + + " \tExam 3 -> 100.0\n" + + " \tExam 4 -> 90.0\n"; + + student.setExamScores(0, 70.0); + String actual = student.getExamScores(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testAverageExamScore(){ + String firstName = "Kai"; + String lastName = "Shields"; + ArrayList examScores = new ArrayList(Arrays.asList(80.0, 87.0, 100.0, 90.0)); + Student student = new Student(firstName, lastName, examScores); + Double expected = 89.25; + + Double actual = student.getAverageExamScore(); + + Assert.assertEquals(expected, actual); + + } + + @Test + public void testToString(){ + String firstName = "Kai"; + String lastName = "Shields"; + ArrayList examScores = new ArrayList(Arrays.asList(80.0, 87.0, 100.0, 90.0)); + Student student = new Student(firstName, lastName, examScores); + String expected ="Student: Kai Shields" + + ", Average Scores: 89.25" + + "Exam Scores:\n" + + " \tExam 1 -> 80.0\n" + + " \tExam 2 -> 87.0\n" + + " \tExam 3 -> 100.0\n" + + " \tExam 4 -> 90.0\n"; + String actual = student.toString(); + Assert.assertEquals(expected, actual); + } } \ No newline at end of file diff --git a/target/classes/io/zipcoder/Classroom.class b/target/classes/io/zipcoder/Classroom.class new file mode 100644 index 0000000..aa25d2f Binary files /dev/null and b/target/classes/io/zipcoder/Classroom.class differ diff --git a/target/classes/io/zipcoder/Student.class b/target/classes/io/zipcoder/Student.class new file mode 100644 index 0000000..62c3a9f Binary files /dev/null and b/target/classes/io/zipcoder/Student.class differ diff --git a/target/test-classes/io/zipcoder/ClassroomTest.class b/target/test-classes/io/zipcoder/ClassroomTest.class new file mode 100644 index 0000000..be0649d Binary files /dev/null and b/target/test-classes/io/zipcoder/ClassroomTest.class differ diff --git a/target/test-classes/io/zipcoder/StudentTest.class b/target/test-classes/io/zipcoder/StudentTest.class new file mode 100644 index 0000000..35039ac Binary files /dev/null and b/target/test-classes/io/zipcoder/StudentTest.class differ