```mermaid sequenceDiagram participant UI participant Controller participant User participant UniversityFileSystem participant Student participant Advisor participant Course participant Grade participant Transcript participant Lecturer participant Assistant participant CourseSection %% SON EDİTİ YAPARKEN Kİ YAPILACAKLAR : %% Createler ileride değişmesi şeklinde hazırlandı %% Abstract methodları ayırmak %% Sistemden çıkma opsiyonunu göstermek %% Bütün methodlara not eklenicek ki hoca method isimlerinden tahmin etmeye çalışıp sorun çıkartmasın activate Controller Controller->>UniversityFileSystem: create() activate UniversityFileSystem deactivate UniversityFileSystem %% heralde %% LİNK OLARAK GİRİNCE DİREK TEK OLARAK GİRİOR SANIRIM %% KNK CONTROLLERA STRİNG ARRAY DÖNDÜKTENS SONRA O VERİYİ PERSONA VERCEZ BİDE SANIRIM RETURN OLCAK ORDA GALİBA %% düzelttim activate Controller Controller->>UI: create() activate UI deactivate UI Controller->>UniversityFileSystem: loadFiles() activate UniversityFileSystem UniversityFileSystem->>Lecturer: create() activate Lecturer deactivate Lecturer UniversityFileSystem->>Assistant: create() activate Assistant deactivate Assistant UniversityFileSystem->>Course: create(String courseCode, String courseName, int courseCredit, int courseYear, int section1, int section2, Lecturer lecturer, Assistant assistant, List<Course> preRequisite, int capacity) activate Course Course->>CourseSection: create(int dayNumber, int sectionNumber) activate CourseSection deactivate CourseSection deactivate Course UniversityFileSystem->>Grade: create(int numericalGrade) activate Grade deactivate Grade UniversityFileSystem->>Transcript: create(List<Course> listOfCourses, List<Grade> listOfGrades) activate Transcript deactivate Transcript UniversityFileSystem->>Advisor: create() activate Advisor deactivate Advisor UniversityFileSystem->>Student: create(String name, String lastName, String username, String password, String studentID, Transcript currentTranscript, Advisor currentAdvisor) activate Student deactivate Student UniversityFileSystem->>Advisor: create(String name, String lastName, String username, String password, String lecturerID, ArrayList<Student> studentList) activate Advisor deactivate Advisor UniversityFileSystem->>Lecturer: create(String name, String lastName, String lecturerID) activate Lecturer deactivate Lecturer UniversityFileSystem->>Assistant: create(String name, String lastName, String assistantID) activate Assistant deactivate Assistant loop forEveryCourse UniversityFileSystem->>Course: setLecturer(Lecturer lecturer) activate Course Course-->>UniversityFileSystem: return deactivate Course UniversityFileSystem->>Course: setAssistant(Assistant assistant) activate Course Course-->>UniversityFileSystem: return deactivate Course UniversityFileSystem->>Course: setPreRequisite(List<Course> preRequisite) activate Course Course-->>UniversityFileSystem: return deactivate Course end loop forEveryStudent UniversityFileSystem->>Student: setCurrentAdvisor(Advisor currentAdvisor) activate Student Student-->>UniversityFileSystem: return deactivate Student UniversityFileSystem->>Student: setRegistrationWaitingCourses(List<Course> registrationWaitingCourses) activate Student Student-->>UniversityFileSystem: return deactivate Student UniversityFileSystem->>Student: setRegistrationCompleteCourses(List<Course> registrationCompleteCourses) activate Student Student-->>UniversityFileSystem: return deactivate Student UniversityFileSystem->>Student: setCancelWaitingCourses(List<Course> cancelWaitingCourses) activate Student Student-->>UniversityFileSystem: return deactivate Student UniversityFileSystem->>Student: setCurrentAvailableCourses(List<Course> currentAvailableCourses) activate Student Student-->>UniversityFileSystem: return deactivate Student UniversityFileSystem->>UniversityFileSystem: updateStudentsAvailableCourses() activate UniversityFileSystem loop goingThroughEverySystemCourse UniversityFileSystem->>Student:checkCourseAvailability(Course course) activate Student Student->>Course: getType() activate Course Course-->>Student: return String deactivate Course alt ifTypeNotEqualsNT(Non Technical) Student->>Course: checkYearMatching(int year) activate Course Course-->>Student: return boolean deactivate Course end Student->>Course: checkPreRequisite(List<Course> completedCourses, List<Grade> gradeList) activate Course Course-->>Student: return boolean deactivate Course Student->>Transcript: checkPassedCourses(Course checkedCourse) activate Transcript Transcript-->>Student: return boolean deactivate Transcript Student->>Course: Course.isFull() activate Course Course-->>Student: return boolean deactivate Course Student->>UniversityFileSystem: return isAvailableCourse deactivate Student deactivate UniversityFileSystem end UniversityFileSystem->>Student: setCurrentAvailableCourses(List<Course> currentAvailableCourses) activate Student Student-->>UniversityFileSystem: return deactivate Student end loop forEachCourse loop forEachStudent UniversityFileSystem->>Course: increaseStudentNumber() activate Course deactivate Course end end loop forEachAdvisor loop forEachStudentCheckIfIDMatchesInAdvisor UniversityFileSystem->>Student: getStudentID() activate Student deactivate Student end UniversityFileSystem->>Advisor: setStudentList(ArrayList<Student> studentList) activate Advisor deactivate Advisor end UniversityFileSystem-->>Controller:return deactivate UniversityFileSystem loop whileUserNotLoggedIn Controller->>UI: printConsoleListReturnSelection(String[] stringList, int errorInt) activate UI UI-->>Controller:return: int deactivate UI Controller->>UI: requestCredentials() activate UI UI-->>Controller:return:StringArray[2] deactivate UI Controller->>UniversityFileSystem: getSignedPerson(String[] userInfo, Controller currentController) activate UniversityFileSystem UniversityFileSystem-->>Controller: return User deactivate UniversityFileSystem Controller->>User:runUserActions()(Abstract) activate User User-->>Controller:return deactivate User Controller->>Student:startActions() activate Student loop actionsUntilExit Student->>Controller: printListReturnSelection(String[] stringsList, int errorInt) activate Controller loop incorrectCourseSelection Controller->>UI: printConsoleListReturnSelection(String[] stringsList, int errorInt) activate UI UI-->>Controller: return deactivate UI end Controller-->>Student:return actionNumber:int deactivate Controller Student->>Student: runUserAction() activate Student alt 1 loop forAllCourseInAvailableCourses Student->>Course: toString() activate Course Course-->>Student: return String deactivate Course end Student->>Controller: printListReturnSelection(String[] availableCoursesStr, int errorInt) activate Controller loop incorrectCourseSelection Controller->>UI: printConsoleListReturnSelection(String[] availableCoursesStr, int errorInt) activate UI UI-->>Controller: return int deactivate UI end Controller-->>Student: return int deactivate Controller Student->>Controller: printListReturnSelection(String[] stringsList, int errorInt) activate Controller Controller-->>Student: return int deactivate Controller alt 2 Student->>Course: checkCourseSection(List<Course> registrationCompleteCourses, List<Course> registrationWaitingCourses, List<Course> cancelWaitingCourses) activate Course loop for every course Course->>CourseSection: compareAvailability(CourseSection sectionToCompare) activate CourseSection CourseSection-->>Course: return boolean deactivate CourseSection end Course-->>Student: return String deactivate Course Student->>Course: checkTechnicalElectiveCount(List<Course> registrationCompleteCourses, List<Course> registrationWaitingCourses, List<Course> cancelWaitingCourses) activate Course Course-->>Student: return String deactivate Course Student->>Course: checkNonTechnicalElectiveCount(List<Course> registrationCompleteCourses, List<Course> registrationWaitingCourses, List<Course> cancelWaitingCourses) activate Course Course-->>Student: return String deactivate Course alt noErrorMessageReturned Student->>Controller: printSuccessMessage(String successMessage) activate Controller Controller->>UI: printConsoleSuccessMessage(String successMessage) activate UI UI-->>Controller: return deactivate UI Controller-->>Student: return deactivate Controller else Student->>Controller: printErrorMessage(String successMessage) activate Controller Controller->>UI: printConsoleErrorMessage(String successMessage) activate UI UI-->>Controller: return deactivate UI Controller-->>Student: return deactivate Controller end else 3 Student->>Course: getLecturer() activate Course Course-->>Student: return Lecturer deactivate Course Student->>Lecturer: toString() activate Lecturer Lecturer-->>Student: return String deactivate Lecturer Student->>Controller: printList(String[] stringList) activate Controller Controller->>UI: printConsoleList(String[] stringList) activate UI UI-->>Controller: return deactivate UI Controller-->>Student: return deactivate Controller else 4 Student->>Course: getAssistant() activate Course Course-->>Student: return Lecturer deactivate Course Student->>Assistant: toString() activate Assistant Assistant-->>Student: return String deactivate Assistant Student->>Controller: printList(String[] stringList) activate Controller Controller->>UI: printConsoleList(String[] stringList) activate UI UI-->>Controller: return deactivate UI Controller-->>Student: return deactivate Controller end else 2 loop forAllCourseInRegisteredCourses Student->>Course: getCourseString() activate Course Course-->>Student: return String deactivate Course end Student->>Controller: printListReturnSelection(String[] RegisteredCoursesStr, int errorInt) activate Controller loop incorrectCourseSelection Controller->>UI: printConsoleListReturnSelection(String[] RegisteredCoursesStr, int errorInt) activate UI UI-->>Controller: return int deactivate UI end Controller-->>Student: return int deactivate Controller else 3 loop forAllCourseInRegisterationWaitingCourses Student->>Course: getCourseString() activate Course Course->>Lecturer: getCourseLecturerString() activate Lecturer Lecturer-->>Course: return String deactivate Lecturer Course->>CourseSection: getCourseSectionString() activate CourseSection CourseSection-->>Course: return String deactivate CourseSection Course-->>Student: return String deactivate Course end Student->>Controller: printList(String[] registerationWaitingCoursesStr) activate Controller Controller->>UI: printConsoleList(String[] registerationWaitingCoursesStr) activate UI UI-->>Controller: return deactivate UI Controller-->>Student: return deactivate Controller else 4 loop forAllCourseInCancelWaitingCourses Student->>Course: getCourseString() activate Course Course->>Lecturer: getCourseLecturerString() activate Lecturer Lecturer-->>Course: return String deactivate Lecturer Course->>CourseSection: getCourseSectionString() activate CourseSection CourseSection-->>Course: return String deactivate CourseSection Course-->>Student: return String deactivate Course end Student->>Advisor: toString() activate Advisor Advisor-->>Student: return String deactivate Advisor Student->>Controller: printList(String[] registerationWaitingCoursesStr) activate Controller Controller->>UI: printConsoleList(String[] registerationWaitingCoursesStr) activate UI UI-->>Controller: return deactivate UI Controller-->>Student: return deactivate Controller else 5 Student->>Transcript:getTranscriptString() activate Transcript loop everyCourseInTranscript Transcript->>Grade: toString() activate Grade Grade-->>Transcript: return String deactivate Grade Transcript->>Course: toString() activate Course Course-->>Transcript: return String deactivate Course end Transcript-->>Student:return TranscriptString:String deactivate Transcript Student->>Controller: printList(String[] transcriptStr) activate Controller Controller->>UI: printConsoleList(String[] transcriptStr) activate UI UI-->>Controller: return deactivate UI deactivate Controller Controller-->>Student: return else 6 Student->>Advisor:getAdvisorString() activate Advisor Advisor-->>Student:return AdvisorString:String deactivate Advisor Student->>Controller: printList(String[] advisorStr) activate Controller Controller->>UI: printConsoleList(String[] advisorStr) activate UI UI-->>Controller: return deactivate UI Controller-->>Student: return deactivate Controller else 7 loop whileInsideMessageSection Student->>Controller: printListReturnSelection(String[] stringsList, int errorInt) activate Controller Controller->>UI: printConsoleListReturnSelection(String[] stringsList, int errorInt) activate UI UI-->>Controller: return int deactivate UI Controller-->>Student: return int deactivate Controller alt 1 loop everyMessageInRecievedMessages Student->>Message: toString() activate Message Message-->>Student:return String deactivate Message end Student->>Controller: printListReturnSelection(String[] stringsList, int errorInt) activate Controller Controller->>UI: printConsoleListReturnSelection(String[] stringsList, int errorInt) activate UI UI-->>Controller: return int deactivate UI Controller-->>Student: return int deactivate Controller Student->>Message: toString() activate Message Message-->>Student:return String deactivate Message Student->>Message: readMessage() activate Message Message-->>Student:return deactivate Message else 2 loop everyMessageInSentMessages loop everyMessageInRecievedMessages Student->>Message: toString() activate Message Message-->>Student:return String deactivate Message end Student->>Controller: printListReturnSelection(String[] stringsList, int errorInt) activate Controller Controller->>UI: printConsoleListReturnSelection(String[] stringsList, int errorInt) activate UI UI-->>Controller: return int deactivate UI Controller-->>Student: return int deactivate Controller Student->>Message: toString() activate Message Message-->>Student:return String deactivate Message end else 3 Student->>Controller: requestMessageString() activate Controller Controller->>UI: requestMessageStringFromUser() activate UI UI-->>Controller: return String deactivate UI Controller-->>Student: return String deactivate Controller Student->>Message: create(String title, String message, User sender, User receiver) activate Message deactivate Message Student->>Advisor: receiveMessage(Message message) activate Advisor Advisor-->>Student: return deactivate Advisor end end end deactivate Student Student-->>Controller: return deactivate Student end Controller->>Advisor:runUserActions() activate Advisor loop actionsUntilExit Advisor->>Controller:printListReturnSelection(String actionString, int errorInt) activate Controller loop IncorrectAction Controller-->>UI:printConsoleListReturnSelection(String actionString, int errorInt) activate UI UI-->>Controller:return ActionNumber:int end deactivate UI Controller-->>Advisor:return actionNumber:int deactivate Controller alt 1 loop forEveryStudentInAdvisor Advisor->>Student: toString() activate Student Student-->>Advisor: return String end Advisor->>Controller:printListReturnSelection(String[] studentMenuList, int errorInt) activate Controller loop incorrectCourseSelection Controller->>UI: printLUseristReturnSelection(String[] studentMenuList, int errorInt) activate UI UI-->>Controller: return(int CourseChoice) deactivate UI end Controller-->>Advisor: return (int CourseChoice) deactivate Controller loop forAllCourseInAvailableCoursesOfCurrentStudent Advisor->>Student: getRegistrationWaitingCourses activate Student Student-->>Advisor: return Course deactivate Student Advisor->>Course: getCourseString() activate Course Course->>Lecturer: getCourseLecturerString() activate Lecturer Lecturer-->>Course: return String deactivate Lecturer Course->>CourseSection: getCourseSectionString() activate CourseSection CourseSection-->>Course: return String deactivate CourseSection Course-->>Advisor: return String deactivate Course end Advisor->>Controller:printListReturnSelection(String[] courseMenuList, int errorInt) activate Controller loop incorrectCourseSelection Controller->>UI: printConsoleListReturnSelection(String[] courseMenuList, int errorInt) activate UI UI-->>Controller: return: int deactivate UI end Controller-->>Advisor: return: int deactivate Controller Advisor->>Controller:printListReturnSelection(String[] courseActionMenuList, int errorInt) activate Controller loop incorrectCourseSelection Controller->>UI: printConsoleListReturnSelection(String[] courseActionMenuList, int errorInt) activate UI UI-->>Controller: return: int deactivate UI end Controller-->>Advisor: return: int deactivate Controller alt registerWaitingCourse Advisor->>Student: removeElementFromRegistrationWaitingCourses(Course selectedCourse) activate Student Student-->>Advisor: return deactivate Student Advisor->>Student: addElementToRegistrationCompleteCourses(Course selectedCourse) activate Student Student-->>Advisor: return deactivate Student else reject Advisor->>Student: removeElementFromRegistrationWaitingCourses(Course selectedCourse) activate Student Student-->>Advisor: return deactivate Student Advisor->>Student: addElementToCurrentAvailableCourses(Course selectedCourse) activate Student Student-->>Advisor: return deactivate Student else cancelWaitingCourse Advisor->>Student: removeElementFromCancelWaitingCourses(Course selectedCourse) activate Student Student-->>Advisor: return deactivate Student Advisor->>Student: addElementToCurrentAvailableCourses(Course selectedCourse) activate Student Student-->>Advisor: return deactivate Student Advisor ->>Course: increaseStudentNumber() activate Course Course-->>Advisor: return deactivate Course Advisor->>Student: removeElementFromCancelWaitingCourses(Course selectedCourse) activate Student Student-->>Advisor: return deactivate Student Advisor->>Student: addElementToRegistrationCompleteCourses(Course selectedCourse) activate Student Student-->>Advisor: return deactivate Student Advisor ->>Course: decreaseStudentNumber() activate Course Course-->>Advisor: return deactivate Course end else isActionNumber2 Advisor ->>Controller: printListReturnSelection(String[] messageMenuList, int errorCode) activate Controller loop incorrectDecision Controller->>UI: printConsoleListReturnSelection(String[] messageMenuList, int errorCode) activate UI UI-->>Controller: return int: deactivate UI end Controller-->>Advisor: return int: deactivate Controller alt 1 loop everySentMessage Advisor->>Message: toString() activate Message Message-->>Advisor: return String deactivate Message end Advisor ->>Controller: printListReturnSelection(String[] receivedMessagesList, int errorCode) activate Controller loop incorrectDecision Controller->>UI: printConsoleListReturnSelection(String[] messageMenuList, int errorCode) activate UI UI-->>Controller: return int: deactivate UI end Controller-->>Advisor: return int: deactivate Controller Advisor->>Message: toString() activate Message Message-->>Advisor: return String deactivate Message Advisor->>Message: getMessage() activate Message Message-->>Advisor: return String deactivate Message Advisor->>Controller: printListReturnSelection(String[] messageList, int errorCode) activate Controller Controller->>UI: printConsoleListReturnSelection(String[] messageList, int errorCode) activate UI UI-->>Controller: return int: deactivate UI Controller-->>Advisor: return int: deactivate Controller Advisor->>Controller: printList(String[] messageList) activate Controller Controller->>UI: printConsoleList(String[] messageList) activate UI UI-->>Controller: return deactivate UI Controller-->>Advisor: return deactivate Controller opt ifNoMessagePrintMessage Advisor->>Controller: printList(String[] messageList) activate Controller Controller->>UI: printConsoleList(String[] messageList) activate UI UI-->>Controller: return deactivate UI Controller-->>Advisor: return deactivate Controller end else 2 loop everyRecievedMessage Advisor->>Message: toString() activate Message Message-->>Advisor: return String deactivate Message end Advisor ->>Controller: printListReturnSelection(String[] receivedMessagesList, int errorCode) activate Controller loop incorrectDecision Controller->>UI: printConsoleListReturnSelection(String[] messageMenuList, int errorCode) activate UI UI-->>Controller: return int: deactivate UI end Controller-->>Advisor: return int: deactivate Controller Advisor->>Message: toString() activate Message Message-->>Advisor: return String deactivate Message Advisor->>Message: getMessage() activate Message Message-->>Advisor: return String deactivate Message Advisor->>Controller: printListReturnSelection(String[] messageList, int errorCode) activate Controller Controller->>UI: printConsoleListReturnSelection(String[] messageList, int errorCode) activate UI UI-->>Controller: return int: deactivate UI Advisor->>Message: readMesssage() activate Message Message-->>Advisor: return %% reddit?????????? deactivate Message Controller-->>Advisor: return int: deactivate Controller Advisor->>Controller: printList(String[] messageList) activate Controller Controller->>UI: printConsoleList(String[] messageList) activate UI UI-->>Controller: return deactivate UI Controller-->>Advisor: return deactivate Controller opt ifNoMessagePrintMessage Advisor->>Controller: printList(String[] messageList) activate Controller Controller->>UI: printConsoleList(String[] messageList) activate UI UI-->>Controller: return deactivate UI Controller-->>Advisor: return deactivate Controller end else 3 loop everyStudentInAdvisor Advisor->>Student: toString() activate Student Student-->>Advisor: return deactivate Student end Advisor->>Controller: printListReturnSelection(String[] messageList, int errorCode) activate Controller Controller->>UI: printConsoleListReturnSelection(String[] messageList, int errorCode) activate UI UI-->>Controller: return int deactivate UI Controller-->>Advisor: return int deactivate Controller Advisor->>Controller: requestMessageString() activate Controller Controller->>UI: requestMessageStringFromUser() activate UI UI-->>Controller: return String[] deactivate UI Controller-->>Advisor: return String[] deactivate Controller Advisor->>Message: Message(String title, String message, User sender, User receiver) activate Message deactivate Message Advisor->>Student: receiveMessage(Message message) activate Student Student-->>Advisor: return deactivate Student end end deactivate Advisor end end Controller->>UniversityFileSystem: saveFiles() activate UniversityFileSystem loop forEveryStudent UniversityFileSystem->>Student: getStudentID() Student-->>UniversityFileSystem: return String opt ifStudentIsFound Note right of UniversityFileSystem: Get and write all the data of Student into the file end end UniversityFileSystem->>Controller: return deactivate UniversityFileSystem deactivate Controller