OOP PROJECT: STUDENT INFORMATION SYSTEM The focus of this project is to build a system that allows students to catalog and access their own information (in regards to an university program). The system should have a log-in system ( file-based log-in or database ) which allows two kinds of users: - A Student user who has access to his own data only. A Test user who has full access to all of the students, can change or remove or even add new students. The Student has a profile with information ranging from personal (Name, Last Name, Birthday, Birthplace, Parents’ Full Names) to study-related, including their student ID (unique identifier), course, current year and semester, registration date, status (whether they are still taking courses or have been held back, or if they have graduated) and CGPA. They should have access to a transcript page which should be downloadable into a file, including their personal information as well as all of their evaluations from all of their courses, with the associated course name, code and credits. They should also have a CGPA value, which should be calculated and updated every time a final grade is entered into the system. The student has access to the Course page, which contains all information about a course. The professor, the syllabus, as well as the grades received during that course. The final grade (which is added into the transcript) for a course is calculated automatically from the grades and weights entered in (you multiply the grade and the weight and add all of them together). A student should have access to a list of current courses and a list of old courses. Students should be able to remove current courses (which do not have a finalized grade) that they have taken. Courses come in three categories: compulsory, non-technical elective and technical elective. A semester has a limit of compulsory, non technical and technical elective courses (e.g 3 compulsory, 1 technical elective, 1 non technical elective). A student cannot take courses beyond this limit (and the system should not allow them to select more than this amount of courses. A student can take up to 2 courses they already have a grade for (retake courses) on top of their per-semester requirements. Keep in mind that even if they get a grade for this course, it will NOT overwrite their prior grade in the transcript, but it WILL be calculated in the CGPA (so the new grade replaces the old one in the CGPA calculation. Hint: Use unique Course Codes). Keep in mind to use all of the below concepts in your code: - Inheritance Polymorphism Abstract Classes Interfaces Exception Handling File Handling (.txt and binary) JavaFX elements Anonymous Inner Classes (for event handling) MVC paradigm (Only if we manage to study it within the course time)