diff --git a/src/main/java/io/zipcoder/Classroom.java b/src/main/java/io/zipcoder/Classroom.java index 64566f0..bb55146 100644 --- a/src/main/java/io/zipcoder/Classroom.java +++ b/src/main/java/io/zipcoder/Classroom.java @@ -1,4 +1,97 @@ package io.zipcoder; -public class Classroom { +import java.util.*; + +public class Classroom{ + private Student[] studentsInClass; + + public Classroom(int numberOfStudents) { + studentsInClass = new Student[numberOfStudents]; + } + public Classroom(Student[] students){ + this.studentsInClass = new Student[students.length]; + System.arraycopy(students, 0, studentsInClass, 0, students.length); + +// for (int i = 0; i < students.length; i++) { +// studentsInClass[i] = students[i]; +// } + } + public Classroom(){ + this.studentsInClass = new Student[30]; + } + + public Student[] getStudents() { + return studentsInClass; + } + + + public Double getClassAverageExamScore() { + Double average = 0.0; + for (Student student: studentsInClass) { + average += student.getAverageExamScore(); + } + return average/studentsInClass.length; + } + + public void addStudent(Student student) { + ArrayList addingStudents = new ArrayList<>(Arrays.asList(studentsInClass)); + addingStudents.add(student); + this.studentsInClass = addingStudents.toArray(new Student[0]); + } + + public void removeStudent(String firstName, String lastName) { + ArrayList removingStudent = new ArrayList<>(Arrays.asList(studentsInClass)); + for (Student student:removingStudent) { + if(student.getFirstName().equals(firstName) && student.getLastName().equals(lastName)){ + removingStudent.remove(student); + removingStudent.add(null); + break; + } + } + this.studentsInClass = removingStudent.toArray(new Student[0]); + } + + + public void getStudentByScore() { + //Arrays.sort(studentsInClass); + + List sortMe = Arrays.asList(studentsInClass); + Comparator byScore = Comparator.comparing(Student :: getAverageExamScore); + Comparator byLastName = Comparator.comparing(Student :: getLastName); + Comparator byFirstName = Comparator.comparing(Student :: getFirstName); + + Collections.sort(sortMe, byScore.thenComparing(byLastName).thenComparing(byFirstName)); + Collections.reverse(sortMe); + this.studentsInClass = sortMe.toArray(new Student[0]); + } + + public void getGradedBook(){ + + //Assign letter grades to students + double result = 0.0; + double standardDevi = 0.0; + for (Student eachStudent : studentsInClass) { + + Double classAvg = getClassAverageExamScore(); + Double studentAvg = eachStudent.getAverageExamScore(); + + Integer numOfStudents = studentsInClass.length; + + result += Math.pow(studentAvg - classAvg, 2); + + standardDevi = Math.sqrt(result/(numOfStudents - 1)); + + if (studentAvg >= (classAvg + (standardDevi * 2))) { + eachStudent.setLetterGrade("A"); + } else if (studentAvg >= (classAvg + (standardDevi))){ + eachStudent.setLetterGrade("B"); + } else if (studentAvg < (classAvg + standardDevi) && studentAvg > classAvg){ + eachStudent.setLetterGrade("C"); + } else if (studentAvg <= (classAvg - standardDevi)) { + eachStudent.setLetterGrade("D"); + } else if (studentAvg <= (classAvg - (standardDevi * 2))) { + eachStudent.setLetterGrade("F"); } + } + + } } diff --git a/src/main/java/io/zipcoder/Student.java b/src/main/java/io/zipcoder/Student.java index b543e36..4cd19c7 100644 --- a/src/main/java/io/zipcoder/Student.java +++ b/src/main/java/io/zipcoder/Student.java @@ -1,4 +1,95 @@ package io.zipcoder; -public class Student { +import java.util.ArrayList; +import java.util.Collections; + +public class Student implements Comparable { + private String firstName; + private String lastName; + private ArrayList examScores = new ArrayList<>(); + String letterGrade; + + + public Student(String firstName, String lastName, Double[] testScores, String letterGrade) { + this.firstName = firstName; + this.lastName = lastName; + Collections.addAll(this.examScores, testScores); + this.letterGrade = letterGrade; + } + public String getLetterGrade() { + return this.letterGrade; + } + + public void setLetterGrade(String letterGrade) { + this.letterGrade = letterGrade; + } + + 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 int getNumberOfExamsTaken(){ + return examScores.size(); + } + + public String getExamScores() { + int index = 1; + String result = "Exam Scores:\n"; + for (Double score: examScores) { + result += "Exam " + index + " -> " +score + "\n"; + index++; + } + return result; + } + + public void addExamScore(double newScore) { + examScores.add(newScore); + } + + public void setExamScore(int index, double newScore) { + examScores.set(index - 1, newScore); + } + + public Double getAverageExamScore() { + Double allExamScore = 0.0; + for (Double score: examScores) { + allExamScore += score; + } + return allExamScore/examScores.size(); + } + + /** + * Student Name: Leon Hunter + * > Average Score: 125 + * > Exam Scores: + * Exam 1 -> 100 + * Exam 2 -> 150 + * Exam 3 -> 250 + * Exam 4 -> 0 + */ + + @Override + public String toString(){ + String result = "Student Name: " + firstName + " " + lastName + "\n" + + "Average Score: " + getAverageExamScore() + "\n" + getExamScores() + + "Letter Grade:" + getLetterGrade() + "\n"; + return result; + } + + @Override + public int compareTo(Student student) { + return (int) (this.getAverageExamScore() - student.getAverageExamScore()); + } } diff --git a/src/main/java/io/zipcoder/StudentSorter.java b/src/main/java/io/zipcoder/StudentSorter.java new file mode 100644 index 0000000..1c97dfc --- /dev/null +++ b/src/main/java/io/zipcoder/StudentSorter.java @@ -0,0 +1,7 @@ +package io.zipcoder; + +public class StudentSorter { + public Student[] sort(Student[] studentArray){ + return null; + } +} diff --git a/src/test/java/io/zipcoder/ClassroomTest.java b/src/test/java/io/zipcoder/ClassroomTest.java index 7bac1ff..efdf872 100644 --- a/src/test/java/io/zipcoder/ClassroomTest.java +++ b/src/test/java/io/zipcoder/ClassroomTest.java @@ -1,4 +1,196 @@ package io.zipcoder; +import org.junit.Assert; +import org.junit.Test; + +import java.util.Arrays; + public class ClassroomTest { + @Test + public void getAvgExamScoresTest(){ + // : Given + Double[] s1Scores = { 100.0, 150.0 }; + Double[] s2Scores = { 225.0, 25.0 }; + + Student s1 = new Student("student", "one", s1Scores, ""); + Student s2 = new Student("student", "two", s2Scores, ""); + + Student[] students = {s1,s2}; + Classroom classroom = new Classroom(students); + + // When + Double output = classroom.getClassAverageExamScore(); + // Then + System.out.println(output); + Assert.assertEquals(125.0, output, 0); + } + + @Test + public void addStudentTest(){ + // : Given + //Making old students + Double[] examScores1 = {123.0, 159.0, 170.0}; + Student jack = new Student("Jack","Smith", examScores1, ""); + Double[] examScores2 = {230.4, 215.0, 50.2}; + Student kate = new Student("Kate", "Green", examScores2, ""); + + //Putting students into classroom + Student[] oldStudents = {jack, kate}; + Classroom classroom = new Classroom(oldStudents); + + //New student + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student student = new Student("Leon", "Hunter", examScores, ""); + + // When + //populate class + Student[] preEnrollment = classroom.getStudents(); + //Add leon + classroom.addStudent(student); + Student[] postEnrollment = classroom.getStudents(); + + // Then + String preEnrollmentAsString = Arrays.toString(preEnrollment); + String postEnrollmentAsString = Arrays.toString(postEnrollment); + + System.out.println("==========================="); + System.out.println(preEnrollmentAsString); + System.out.println("==========================="); + System.out.println(postEnrollmentAsString); + } + + @Test + public void removeStudentTest(){ + // : Given + //Making old students + Double[] examScores1 = {123.0, 159.0, 170.0}; + Student jack = new Student("Jack","Smith", examScores1, ""); + Double[] examScores2 = {230.4, 215.0, 50.2}; + Student kate = new Student("Kate", "Green", examScores2, ""); + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student leon = new Student("Leon", "Hunter", examScores, ""); + + //Putting students into classroom + Student[] oldStudents = {jack, kate, leon}; + Classroom classroom = new Classroom(oldStudents); + + // When + //populate class + Student[] preEnrollment = classroom.getStudents(); + //Add leon + classroom.removeStudent("Leon", "Hunter"); + Student[] postEnrollment = classroom.getStudents(); + + // Then + String preEnrollmentAsString = Arrays.toString(preEnrollment); + String postEnrollmentAsString = Arrays.toString(postEnrollment); + + System.out.println("==========================="); + System.out.println(preEnrollmentAsString); + System.out.println("==========================="); + System.out.println(postEnrollmentAsString); + } + + @Test + public void getStudentByScoreTest(){ + // : Given + //Making old students + Double[] examScores1 = {123.0, 159.0, 170.0}; + Student jack = new Student("Jack","Smith", examScores1, ""); + Double[] examScores2 = {230.4, 215.0, 50.2}; + Student kate = new Student("Kate", "Green", examScores2, ""); + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student leon = new Student("Leon", "Hunter", examScores, ""); + + //Putting students into classroom + Student[] allStudents = {jack, kate, leon}; + Classroom classroom = new Classroom(allStudents); + + //Before sorting + String preSorting = Arrays.toString(classroom.getStudents()); + //Sorting students + classroom.getStudentByScore(); + String postSorting = Arrays.toString(classroom.getStudents()); + + System.out.println(preSorting); + System.out.println("===============AFTER SORTING==============="); + System.out.println(postSorting); + } + + @Test + public void getGradeBook() { + // : Given + //Making old students + Double[] examScores1 = {70.0, 90.0, 77.0}; + Student jack = new Student("Jack","Smith", examScores1, "TEST"); + + Double[] examScores2 = {69.4, 94.0, 88.2}; + Student kate = new Student("Kate", "Green", examScores2, "TEST"); + + Double[] examScores3 = { 100.0, 93.0, 87.0}; + Student leon = new Student("Leon", "Hunter", examScores3, "TEST"); + + Double[] examScores4 = {87.4, 60.0, 50.2}; + Student tim = new Student("Tim", "Bo", examScores4, "TEST"); + + Double[] examScore5 = { 71.0, 82.0, 83.0}; + Student brian = new Student("Brian", "Jackson", examScore5, "TEST"); + + //Putting students into classroom + Student[] allStudents = {jack, kate, leon, tim, brian}; + Classroom classroom = new Classroom(allStudents); + + //When + String preGrading = Arrays.toString(classroom.getStudents()); + classroom.getGradedBook(); + String postGrading = Arrays.toString(classroom.getStudents()); + + //Then + System.out.println(preGrading); + System.out.println("==============AFTER GIVING LETTER GRADE ============="); + System.out.println(postGrading); + + } + + @Test + public void sortingAndLetterGradeTest() { + // : Given + //Making old students + Double[] examScores1 = {70.0, 90.0, 77.0}; + Student jack = new Student("Jack","Smith", examScores1, "TEST"); + + Double[] examScores2 = {69.4, 94.0, 88.2}; + Student kate = new Student("Kate", "Green", examScores2, "TEST"); + + Double[] examScores3 = { 100.0, 93.0, 87.0}; + Student leon = new Student("Leon", "Hunter", examScores3, "TEST"); + + Double[] examScores4 = {87.4, 60.0, 50.2}; + Student tim = new Student("Tim", "Bo", examScores4, "TEST"); + + Double[] examScore5 = { 71.0, 82.0, 83.0}; + Student brian = new Student("Brian", "Jackson", examScore5, "TEST"); + + Double[] examScore6 = { 80.0, 87.0, 95.0}; + Student jason = new Student("Jason", "White", examScore5, "TEST"); + + Double[] examScore7 = { 80.0, 87.0, 95.0}; + Student lily = new Student("Lily", "White", examScore5, "TEST"); + + //Putting students into classroom + Student[] allStudents = {jack, kate, leon, tim, brian, jason, lily}; + Classroom classroom = new Classroom(allStudents); + + //When + String preGradeAndSort = Arrays.toString(classroom.getStudents()); + classroom.getGradedBook(); + classroom.getStudentByScore(); + String postGradeAndSort = Arrays.toString(classroom.getStudents()); + + //Then + System.out.println(preGradeAndSort); + System.out.println("==============AFTER LETTER GRADE AND SORT ============="); + System.out.println(postGradeAndSort); + } + } diff --git a/src/test/java/io/zipcoder/StudentTest.java b/src/test/java/io/zipcoder/StudentTest.java index a9fedec..21b5d37 100644 --- a/src/test/java/io/zipcoder/StudentTest.java +++ b/src/test/java/io/zipcoder/StudentTest.java @@ -1,5 +1,98 @@ package io.zipcoder; +import org.junit.Assert; +import org.junit.Test; + public class StudentTest { + @Test + public void getFirstName(){ + //given + String expectedFirst = "Sarah"; + Student sarah = new Student(expectedFirst, "Last name", new Double[] {99.0, 100.0}, ""); + //when + String retrievedFirst = sarah.getFirstName(); + //then + Assert.assertEquals(expectedFirst, retrievedFirst); + } + + @Test + public void getExamScoresTest(){ + // Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0, 95.0, 123.0, 96.0 }; + Student student = new Student(firstName, lastName, examScores, ""); + // When + String output = student.getExamScores(); + // Then + System.out.println(output); + //Exam Scores: + // Exam 1 -> 100 + // Exam 2 -> 95 + // Exam 3 -> 123 + // Exam 4 -> 96 + } + + @Test + public void addExamScoreTest(){ + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { }; + Student student = new Student(firstName, lastName, examScores, ""); + + // When + student.addExamScore(100.0); + String output = student.getExamScores(); + + // Then + System.out.println(output); + } + @Test + public void setExamScoreTest(){ + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0 }; + Student student = new Student(firstName, lastName, examScores, ""); + + // When + student.setExamScore(1, 150.0); + String output = student.getExamScores(); + + // Then + System.out.println(output); + //150 expected + } + @Test + public void getAvgExamScoreTest(){ + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student student = new Student(firstName, lastName, examScores, ""); + + // When + Double output = student.getAverageExamScore(); + + // Then + Assert.assertEquals(125.0,output,0); + System.out.println(output); + } + + @Test + public void toStringTest(){ + // : Given + String firstName = "Leon"; + String lastName = "Hunter"; + Double[] examScores = { 100.0, 150.0, 250.0, 0.0 }; + Student student = new Student(firstName, lastName, examScores, ""); + + // When + String output = student.toString(); + + // Then + System.out.println(output); + } } \ 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..3686855 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..16f4474 Binary files /dev/null and b/target/classes/io/zipcoder/Student.class differ diff --git a/target/classes/io/zipcoder/StudentSorter.class b/target/classes/io/zipcoder/StudentSorter.class new file mode 100644 index 0000000..ed12bdc Binary files /dev/null and b/target/classes/io/zipcoder/StudentSorter.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..9885296 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..9be6338 Binary files /dev/null and b/target/test-classes/io/zipcoder/StudentTest.class differ