diff --git a/.idea/misc.xml b/.idea/misc.xml index 4e2f650..e3cffb8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + diff --git a/JavaFinalProject.iml b/JavaFinalProject.iml index c90834f..f9f9807 100644 --- a/JavaFinalProject.iml +++ b/JavaFinalProject.iml @@ -4,8 +4,25 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/generation/Main.java b/src/com/generation/Main.java index 9e24556..4f9a655 100644 --- a/src/com/generation/Main.java +++ b/src/com/generation/Main.java @@ -69,7 +69,6 @@ private static void enrollStudentToCourse( StudentService studentService, Course courseService.enrollStudent( courseId, student ); studentService.enrollToCourse( studentId, course ); System.out.println( "Student with ID: " + studentId + " enrolled successfully to " + courseId ); - } private static void showCoursesSummary( CourseService courseService, Scanner scanner ) diff --git a/src/com/generation/model/Student.java b/src/com/generation/model/Student.java index 0897ebe..a447b65 100644 --- a/src/com/generation/model/Student.java +++ b/src/com/generation/model/Student.java @@ -21,9 +21,21 @@ public Student( String id, String name, String email, Date birthDate ) super( id, name, email, birthDate ); } - public void enrollToCourse( Course course ) + + public void enrollToCourse(Course course ) { //TODO implement this method + if(!(isAttendingCourse(course.getCode()))) { + //Initially I did correctly. I overthought add all registered courses to approvedCourses. + //Modified back again + courses.add(course); + + //Used for isAttendingCourse + registerApprovedCourse(course); + } + else { + System.out.println("The student has been enrolled"); + } } public void registerApprovedCourse( Course course ) @@ -35,7 +47,13 @@ public void registerApprovedCourse( Course course ) public boolean isAttendingCourse( String courseCode ) { //TODO implement this method - return false; + if(approvedCourses.containsKey(courseCode)) { + return true; + } + else { + return false; + } + } @Override diff --git a/src/com/generation/service/CourseService.java b/src/com/generation/service/CourseService.java index 24df98b..10e18c5 100644 --- a/src/com/generation/service/CourseService.java +++ b/src/com/generation/service/CourseService.java @@ -95,4 +95,5 @@ public void showSummary() } } } + } diff --git a/src/com/generation/service/StudentService.java b/src/com/generation/service/StudentService.java index f980e40..df36430 100644 --- a/src/com/generation/service/StudentService.java +++ b/src/com/generation/service/StudentService.java @@ -3,13 +3,18 @@ import com.generation.model.Course; import com.generation.model.Student; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; public class StudentService { private final Map students = new HashMap<>(); + //Keep track of the courses that each student registered. + private final Map> enrolledStudents = new HashMap<>(); + public void subscribeStudent( Student student ) { students.put( student.getId(), student ); @@ -17,7 +22,7 @@ public void subscribeStudent( Student student ) public Student findStudent( String studentId ) { - if ( students.containsKey( studentId ) ) + if ( students.containsKey( studentId )) { return students.get( studentId ); } @@ -27,6 +32,49 @@ public Student findStudent( String studentId ) public void showSummary() { //TODO implement + System.out.println( "List of Students:" ); + + //Enhanced for loop for the students + for ( String key : students.keySet()) { + Student student = students.get(key); + List courseList = enrolledStudents.get(student.getId()); + + //Print out the student information + System.out.print(student); + if (courseList != null) { + System.out.println(courseList); + } else { + System.out.println("[{}]"); + } + System.out.println(); + } + } + + //Keeping track of the course for the student + public void addEnrollStudents(String studentId, Course course) { + + + if ( (enrolledStudents.containsKey( studentId ) )) + { + ArrayList courseList = enrolledStudents.get(studentId); + System.out.println("CourseList" + courseList); + + //For avoiding ConcurrentModificationException,used for loop + boolean flag = false; + for(int i = 0; i < courseList.size(); i++) { + if (courseList.get(i).getCode().equals(course.getCode())) { + flag = true; + } + } + if(!(flag)) { + enrolledStudents.get(studentId).add( course ); + } + } + else { + enrolledStudents.put( studentId, new ArrayList<>() ); + enrolledStudents.get(studentId).add( course ); + } + } public void enrollToCourse( String studentId, Course course ) @@ -34,6 +82,9 @@ public void enrollToCourse( String studentId, Course course ) if ( students.containsKey( studentId ) ) { students.get( studentId ).enrollToCourse( course ); + + //Keeping the information of enrolled course for the student + addEnrollStudents(studentId, course); } } diff --git a/src/com/generation/utils/PrinterHelper.java b/src/com/generation/utils/PrinterHelper.java index 6f1ca9b..8e94050 100644 --- a/src/com/generation/utils/PrinterHelper.java +++ b/src/com/generation/utils/PrinterHelper.java @@ -26,26 +26,35 @@ public static void showMainMenu(){ } public static Student createStudentMenu( Scanner scanner ) - throws ParseException { - System.out.println( "|-------------------------------------|" ); - System.out.println( "| . 1 Register Student |" ); - System.out.println( "|-------------------------------------|" ); - System.out.println( "| Enter student name: |" ); - String name = scanner.next(); - System.out.println( "| Enter student ID: |" ); - String id = scanner.next(); - System.out.println( "| Enter student email: |" ); - String email = scanner.next(); - System.out.println( "| Enter student birth date(mm/dd/yyyy)|" ); - DateFormat formatter = new SimpleDateFormat( "mm/dd/yyyy"); - //TODO validate date format and catch exception to avoid crash - Date birthDate = formatter.parse( scanner.next()); - System.out.println( "|-------------------------------------|" ); - Student student = new Student( id, name, email, birthDate ); - System.out.println( "Student Successfully Registered! " ); - System.out.println(student); - return student; - } + System.out.println("|-------------------------------------|"); + System.out.println("| . 1 Register Student |"); + System.out.println("|-------------------------------------|"); + System.out.println("| Enter student name: |"); + String name = scanner.next(); + System.out.println("| Enter student ID: |"); + String id = scanner.next(); + System.out.println("| Enter student email: |"); + String email = scanner.next(); + System.out.println("| Enter student birth date(mm/dd/yyyy)|"); + DateFormat formatter = new SimpleDateFormat("mm/dd/yyyy"); + //TODO validate date format and catch exception to avoid crash + //Initialize the birthday + Date birthDate = null; + //While the invalid format is added, birthDate is null + while(birthDate == null) { + try { + birthDate = formatter.parse(scanner.next()); + } catch (ParseException e) { + System.err.println("ParseException: " + e.getMessage()); + System.out.println("| Enter student birth date(mm/dd/yyyy)|"); + } + } + Student student = new Student(id, name, email, birthDate); + System.out.println("|-------------------------------------|"); + System.out.println("Student Successfully Registered! "); + System.out.println(student); + return student; + } } diff --git a/test/com/generation/service/CourseServiceTest.java b/test/com/generation/service/CourseServiceTest.java new file mode 100644 index 0000000..7511101 --- /dev/null +++ b/test/com/generation/service/CourseServiceTest.java @@ -0,0 +1,24 @@ +package com.generation.service; + +import com.generation.model.Course; +import com.generation.model.Module; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CourseServiceTest { + + //Declare courseService variable for the test + CourseService courseService = new CourseService(); + + ////Only method's type that is not void can be tested. So, I created two for getting course information below + @Test + void getCourse() { + assertEquals(courseService.getCourse("INTRO-CS-1").getCredits(), 9); + } + + @Test + void getCourse2() { + assertEquals(courseService.getCourse("INTRO-CS-4").getName(), "Algorithm Design and Problem Solving - Advanced"); + } +} \ No newline at end of file diff --git a/test/com/generation/service/StudentServiceTest.java b/test/com/generation/service/StudentServiceTest.java new file mode 100644 index 0000000..0a4077c --- /dev/null +++ b/test/com/generation/service/StudentServiceTest.java @@ -0,0 +1,38 @@ +package com.generation.service; + +import com.generation.model.Student; +import org.junit.jupiter.api.Test; +import java.util.Date; +import static org.junit.jupiter.api.Assertions.*; + + +class StudentServiceTest { + + //Declare instances for tests + Date date = new Date(12/12/1212); + Date date2 = new Date(11/11/1111); + Student student = new Student("1", "Makiko", "makiko@gmail.com", date); + Student student2 = new Student("2", "Randy", "randyo@gmail.com", date2); + StudentService studentService = new StudentService(); + + //Only method's type that is not void can be tested. So, I created two for find students below + @Test + void findStudent() { + + //Add the student in the students(Map) + studentService.subscribeStudent(student); + + //Test the method + assertEquals(studentService.findStudent(student.getId()).getId(), "1"); + } + + @Test + void findStudent2() { + //Add the student in the students(Map) + studentService.subscribeStudent(student2); + + //Test the method + assertEquals(studentService.findStudent(student2.getId()).getName(), "Randy"); + } + +} \ No newline at end of file