Repass OOP and UML project 2022
Deadline to make last commit in GIT - 24.02.2023 12:00 (February 24 2023, midday). Commits that will be sended to the GIT server later will not be checked! What you need to do: 1) Read the task description; 2) Analyze requirements using provided UML Class Diagram for subject domain area; 3) By text description draw UML Use-Case diagram to show all required functionality in developing application; 4) After designing a Use-Case diagram, develop a console application, to implement all entities (classes) by Subject Domain Area diagram and your application must provide all required functionality; 5) After developing an application, using your own code draw UML Sequence diagrams for algorithms, described in the end of current task;
Subject domain area - simple education application to check disciplines, attestations for students and teachers. Class diagram is provided in figure 1.
Text task description
Developed application must be a console application, where the user can register and login. When a user registers he must type his name, birthdate and choose how he is: 1) Student - if user choose that he is a student, he must choose group for his studying (choose from list of existing groups) 2) Teacher - must type his degree and years of experience. After login on the main screen, the user must see his main information like name, role (teacher or student (if student, user also must see name of his group)) and menu options, depending on role. After login, depending on role that user choose he will have different functionality in system: 1) Administrator - if authorized user also is administrator, on main screen, with all menu options for his main role (student or teacher) he must see option “Administration” with next options: ○ Show all users - after selection, on screen a list of all users in the system must be displayed with next data in each line - name of user, birthdate, role (teacher, student), is administrator (true or false). After the list of all users administrator must see a submenu with one option “Set as administrator”. To set user as administrator need to type user Id; ○ Show all disciplines - after selection, on screen a list of all disciplines in the system must be displayed. On each line with discipline must be displayed next data: id, name, hours. Also, administrator must see submenu with next options: i) Create new discipline ii) Assign a teacher to the discipline - when selected this option - admin must see a list of all teachers in the system with name and id, choose id of teacher and type id of discipline and selected teacher must be
assigned to selected discipline. If a selected discipline already has a teacher, the teacher must be reassigned to the new one. ○ Show all groups - after selection, on screen a list of all groups must be displayed. Also, admin must see next submenu: i) Create group 2) If authorized user is a student, on the main screen of application he must see his next menu options: ○ Show disciplines for my group - after selection a student must see a list of all his disciplines with next information: id, name, teacher name, hours. ○ Check my grades - after selection, the student must see a list of all disciplines, where he has created grades. In the list of all grades the next data must be provided: name of discipline, mark. 3) If authorized user is teacher, on the main screen he must see his next menu options: ○ Show my disciplines - user must see list of all disciplines, where he is assigned as a teacher. In the list the next information must be provided: id, name of discipline. After the list of all disciplines, teacher must see submenu with next options: i) Set marks for discipline - teacher must type id of discipline and after that next information of the screen must be presented: List of all students for selected discipline with next information: id of student, name of student, grade for this discipline (if it was already created, if not teacher will see text “Mark is not created yet”). After the list of all students he must see submenu with option: (1) Set mark - teacher will type id of student, choose one mark from list and this mark must be assigned (created or edited) for selected student and selected before discipline. After assigning, the application must go back to the previous menu with a list of all students to choose a new one for setting marks.
To resume, the main functionality for Administrator - manipulate data in storage (disciplines, groups), assigning teachers to disciplines. The main functionality for students is checking the list of his disciplines and checking his grades. The main functionality for the teacher - checking his own disciplines, assigning grades for students.
On the sequence diagram you must show how your application implements workflow for teacher that described with next actions of user: 1) User logged in as teacher (system must check it) 2) User select menu option “Show my disciplines” (system collect all disciplines for authorized teacher) 3) User see list of all his disciplines 4) User select submenu option “Set marks for discipline” 5) User type id of discipline (system must found it) 6) User select submenu option “Set mark” (system collect all students with their marks and show this information) 7) User type id of student (system need to found this student and show next step or error) 8) User see list of all marks in system (system will generate options for grades depending on enumeration) 9) User choose grade by typing it (for example user will type: “Excellent”) (system must check correctness of input 10) System assign grade for student (create new grade, or edit existing) 11) System go back to the previous menu and shows the list of all students for the group again.
On a Sequence diagram it is necessary to show how objects communicate with each other. The required objects to show are: Storage, UsersService, MainService.
Other required moments: In the main program for declaration of service variables it is necessary to use interface data type and write special methods for initialization of your services. It may looks like that: IMainService mainService = InitializeMainService(); // Inside of InitializeMainService() method will create an object of some implementation of the IMainService interface, because in your application there may be more than one implementation of the same service.
At the start of the application, you need to create a special user as the first administrator. Credentials for login must be stored in JSON file called “ApplicationSettings.json” and have next structure: { "AdminInfo" : { "email": "admin@hits.tsu.ru", "password": "SuperSecurePass123" } }
Name and birth date choose by yourself. This user, which will be automatically created also must be a teacher. All code and diagrams (png, jpg, pdf) must be presented in GIT!!! Do not send me archives with code. If I do not see code in git - i will not check the project that you sent me in discord! Last commit in GIT must be created BEFORE the deadline described in the beginning of the current document. Code presented in GIT must be without errors and runnable - I don’t want to fix your bugs just to run your application. If, when I click “Run” in my Visual Studio or type “dotnet run” in my VS Code and I see errors in your application - I will not check the code! ALL OOP CONCEPTS (INHERITANCE, POLYMORPHISM, ENCAPSULATION) MUST BE IMPLEMENTED IN CODE!
Figure 1 - Subject Domain Area diagram Link to diagrammer: https://drive.google.com/file/d/1VDwDbgoy6uMCmRXZsWsb5d2INC68xyfK/view?usp=sharing