# Task 2 (3 days) Set up a new repository named `ruby_school_oop` and create a file named main.rb with the code ```ruby= puts "Hello World" ``` ### Create the Student class * Create a new file student.rb * Attributes - id, name, birth_date, :email, :phone_number * Create the following instance method * `save` - save the record to `@@record` class variable * `destroy` - destroy the record from `@@record` * `display` - simple string that represents the instance. * Create the following class method * `all` - return all the records * `find` - return the first instance by id * `find_by_email` - returns the instance by email ### Add a new student * In main.rb file, import the student class `require_relative 'student'` * Remove the puts "Hello, World!" line. * Write a script that prompts the user to input the attributes from the student class to add a new record * id must be base the size of the records (starts from 1) * If the student is added successfully, display the new added student * If the student is added successfully, print a success message like `"Student added successfully!"` ### Delete a student record * Modify the program to allow the user to choose between two actions like adding or deleting a student. * If the user choose the delete action, prompt for the student's id to delete it frmo the records * If the student is destroyed successfully, print a success message like `"Student destroyed successfully!"` ### Repeat Actions Using a Loop Use a while loop to keep the program running until the user decides to stop (exit keyword). After each action (add_student or delete_student), allow the user to perform another action or exit the program. ### Create the Course class * Create a new file `course.rb` * Attributes - id, name * Create the following instance method * `save` - save the record to `@@record` class variable * `destroy` - destroy the record from `@@record` * `display` - simple string that represents the instance. * Create the following class method * `all` - return all the records * `find` - return the first instance by id ### Add a new Course * In main.rb file, import the cousrse class `require_relative 'course'` * Modify the program to allow the user to choose between two actions like `student management` and `course management`. Under these management actions allow the user choose if they will add or delete a record * Write a script that prompts the user to input the attributes from the course class to add a new record * id must be base the size of the records (starts from 1) * If the course is added successfully, display the new added course * If the course is added successfully, print a success message like `"Course added successfully!"` ### Delete a course record * Add a new action under the `course management` * If the user choose the delete action, prompt for the course's id to delete it from the records. * If the course is destroyed successfully, print a success message like `"Course destroyed successfully!"` ### Create the Subject class * Create a new file `subject.rb` * Attributes - id, name * Create the following instance method * `save` - save the record to `@@record` class variable * `destroy` - destroy the record from `@@record` * `display` - simple string that represents the instance. * Create the following class method * `all` - return all the records * `find` - return the first instance by id ### Add a new Subject record * In main.rb file, import the subject class `require_relative 'subject'` * Modify the program and a new prompt for `subject management`. Under these management allow the user to add a new record * Write a script that prompts the user to input the attributes from the `subject` class to add a new record * id must be base the size of the records (starts from 1) * If the subject is added successfully, display the new added subject record * If the subject is added successfully, print a success message like `"Subject added successfully!"` ### Delete a Subject record * Add a new action under the `Subject management` * If the user choose the delete action, prompt for the subject's id to delete it from the records. * If the subject is destroyed successfully, print a success message like `"Subject destroyed successfully!"` ### Create the Teacher class * Create a new file `teacher.rb` * Attributes - id, name, birth_date, email, phone_number, department * Create the following instance method * `save` - save the record to `@@record` class variable * `destroy` - destroy the record from `@@record` * `display` - simple string that represents the instance. * Create the following class method * `all` - return all the records * `find` - return the first instance by id * `find_by_email` - returns the instance by email ### Add a new teacher record * In main.rb file, import the teacher class `require_relative 'teacher'` * Modify the program and a new prompt for `teacher management`. Under these management allow the user to add a new record * Write a script that prompts the user to input the attributes from the teacher class to add a new record * id must be base the size of the records (starts from 1) * If the teacher is added successfully, print the new added teacher record * If the teacher is added successfully, print a success message like `"Teacher added successfully!"` ### Delete a Teacher record * Add a new action under the `teacher management` * If the user choose the delete action, prompt for the teacher's id to delete it from the records. * If the teacher is destroyed successfully, print a success message like `"Teacher destroyed successfully!"` <hr> ### Add display for records * Add a new action to each management section (e.g., student, course, subject, teacher) to display its records. ### Add soft delete * Add a `deleted_at` attribute to the following classes: `Student`, `Course`, `Subject`, and `Teacher`. * Modify the destroy method to update the `deleted_at` attribute with `Time.now` instead of permanently removing the records. * Modify the all method to return only records where `deleted_at` is `nil`. * Ensure that your display does not include any deleted records. ### Add Update Functionality for Each Record * Modify the `save` method so that it can either update an existing record or save a new one. * Add a new action for each management section that allows users to edit records. * Ensure that you only update the existing record instead of replacing it with a new one. * Make sure the creation of new records still works. - Hint: You can use the `id` attribute to check if an instance already exists. * If the record is updated successfully, print a success message like: `#{class} updated successfully!` ### Let user to pick the student course * Modify the `Student` class to add a new attribute: `course_id`. * Update the "add student" action to: * Display the available courses. * Allow the user to input the `course_id`. * Update the display action in student management to show the course name for each student by using the `Course` class. <hr> ### Let each management continuous * Modify each management and add a new loop * Prompt the actions for that management * Add a `back to school management` actions and return to the main prompt. ### Create the CourseSubject class * Create a new file `course_subject.rb` * Attributes - id, course_id, subject_id * Create the following instance method * `save` - save the record to `@@record` class variable * `destroy` - destroy the record from `@@record` * `display` - simple string that represents the instance. * Create the following class method * `all` - return all the records * `find` - return the first instance by id ### Let user bind course to subject * In the `course management`, modify the `display` action and allow user to input the `course_id` and display additional prompts. * Display the course details. * Add `add subjects` action to allow the user add new subjects * Display the available courses. * Add `remove subjects` action to allow the user subjects * Display the course subjects * Add a new loop to allow the user to keep switching ### Modify course display action * Modify the `Course` class and add a new instance methods: * Add the `students` method, this method will return the collection of student object belongs to this course * Add the `subjects` method, this method will return the collection of subject object belongs to this course * In the `course management -> display`, allow user to have more actions like: * Add a new prompt that will allow the user to view all the students belongs to this course * Add a new prompt that will allow the user to view all the subjects belongs to this course ### Create the StudentSubject class * Create a new file `student_subject.rb` * Attributes - id, student_id, subject_id * Create the following instance method * `save` - save the record to `@@record` class variable * `destroy` - destroy the record from `@@record` * `display` - simple string that represents the instance. * Create the following class method * `all` - return all the records * `find` - return the first instance by id ### Let students to enroll subjects * When we are creating a new student, we assign them to a course and those course have subjects assign those to the new student using the `StudentSubject` class. ### Show Student Subjects * Add a `subjects` instance method in the `Student` class and return a collection of subjects. * In the `student_management`, modify the display action and allow user to input the `student_id` and display additional prompts. * Display the student details with the enrolled subjects . ### Modify the student and teacher class * Create a new class and let the `Student` and `Teacher` class to inherit the new class