Софтуерно Инженерство
Loading...
+ Нов въпрос
Tatyana avatar Tatyana 99 Точки

Поправка по Advanced JS

Колеги, някой може ли да поясни как е решил следните задания:

  • teachingSubject parameter – should set the teacher’s teaching subject. Could be null (if we have a class teacher for example).
  • _teachingSubject – a Subject (should be one of the subjects given by Subject.getSubjects()), could be null.
    Could be null ме озадачи и съм го решила по особено тъп начин.
  • addGradeToStudent(student, gradeParams) – adds a grade to a student.
    • student – a Student (only Student instances allowed)
    • gradeParams – an object with the following properties:
      • subject – A Subject (should be one of the subjects given by Subject.getSubjects()).
         If the teacher’s _teachingSubject is null, this property is obligatory because the system wouldn’t know for what subject the grade is.
         Otherwise if null, the system will use the _teachingSubject property.
         Even if _teachingSubject of the teacher isn’t null, you can still pass this parameter and a grade to the given subject will be added, not the teacher’s teaching subject.

Ще цитирам моите измишльотини, но нещо куца :) в реализацията ми:

Teacher.prototype.setTeachingSubject = function (teachingSubject) {
        if (!teachingSubject) {
          this._teachingSubject = null;
        } else if((teachingSubject instanceof schoolSystem.Subject) && schoolSystem.Subject.isValidSubject(teachingSubject)) {
          this._teachingSubject = teachingSubject;
        } else {
          throw new ArgumentException('Subject');
        }
    }

    Teacher.prototype.addGradeToStudent = function (student, gradeParams) {
        if(!(student instanceof schoolSystem.Student)) {
           throw new ArgumentException('Student');
        } 

        if (!gradeParams.subject) {
            this.gradeParams.subject = null;
        } else if(!((gradeParams.subject instanceof schoolSystem.Subject) && schoolSystem.Subject.isValidSubject(gradeParams.subject))) {
            throw new ArgumentException('Subject');
        } else if(typeof gradeParams.mark !== 'number') {
            throw new ArgumentException('Grade');
        } else if(!(gradeParams.semester instanceof schoolSystem.Semester)) {
            throw new ArgumentException('Semester');
        }

        var grade = new schoolSystem.Grade(gradeParams.mark, gradeParams.subject, gradeParams.semester);
        if(grade instanceof schoolSystem.Grade) {
            student.addGradeToStudent(grade);
        }
    }

Не знам за вас, но сега си откривам уникално тъпи грешки - първо две незатворени функции с }.

Второ вместо this.setTeachingSubject(teachingSubject); съм написала в конструктора teachingSubject.setTeachingSubject(teachingSubject);

И трето вместо функцията на студента за добавяна на оценки съм пльоснала функцията на учителя за добавяне на оценки:

student.addGradeToStudent(grade); вместо student.addGrades(grade);

И като махнах валидацията, която явно е оплескана - всичко тръгна. :) Дано поне останалите са внимавали повече от мен! Успех!

Тагове:
0
Advanced Level: Front-End 13/05/2016 16:52:59
Tatyana avatar Tatyana 99 Точки

Уффффффффф!

Докарах я задачата до работещо състояние. Прсто явно на изпит мозъкът ми е в неработещо състояние от паника! :)

Ето двете функции, които не работеха, вече работещи перфектно:

Teacher.prototype.setTeachingSubject = function (teachingSubject) {
        if (teachingSubject === null) {
          this._teachingSubject = null;
        } else if (schoolSystem.Subject.isValidSubject(teachingSubject)) {
            this._teachingSubject = teachingSubject;
        } else if (teachingSubject !== null && !schoolSystem.Subject.isValidSubject(teachingSubject)) {
          throw new ArgumentException('Subject');
        }
 }

Teacher.prototype.addGradeToStudent = function (student, gradeParams) {
        if(!(student instanceof schoolSystem.Student)) {
           throw new ArgumentException('Student');
        }

        if(typeof gradeParams.mark !== 'number') {
            throw new ArgumentException('Grade');
        }

        if (!gradeParams.subject) {
            gradeParams.subject = this.getTeachingSubject();
        }

        if (gradeParams.subject !== null && (gradeParams.subject instanceof schoolSystem.Subject)) {
            if(!schoolSystem.Subject.isValidSubject(gradeParams.subject)) {
                throw new ArgumentException('Subject');
            }
        }

        if(!(gradeParams.semester instanceof schoolSystem.Semester)) {
            throw new ArgumentException('Semester');
        }

        var grade = new schoolSystem.Grade(gradeParams.mark, gradeParams.subject, gradeParams.semester);
        student.addGrades(grade);
    }

И последно - условието изобщо не съм го разбрала - ако gradeParams.subject === null, то трябва да се вземе _ teachingSubject, но това го видях, естествено, като се прибрах в къщи.

0
DiyanTonchev92 avatar DiyanTonchev92 233 Точки

Ами ето го моето решение => School-System. Можеш да го разгледаш.

2
Tatyana avatar Tatyana 99 Точки

Хубаво решение, благодаря! 

Аз успях да го докарам до работещо приложение, но твоето решение е по-елегантно и изчистено. 

1
xenonbg avatar xenonbg 9 Точки

Колеги, откъде мога да сваля скелета и условието на изпит, защото гледам, че още няма нищо в инстанцията на курса. Благодаря предварително

0
DiyanTonchev92 avatar DiyanTonchev92 233 Точки

Свяляхме го от нещо подобно на dox.bg, няма го в системата. Аз решавах дикретно върху скелета и не го пазя - нито него, нито условието (изтрих дори папката, в която го бях свалил). Вариант е някой от колегите, ако си пази поне условието, да го качи тук и вземаш решението, което съм "постнал" горе, триеш папката models в js и 2 реда от app.js (в първия forEach) и ето ти го скелетът. Друг вариант е някой от екипа на СофтУни да се сети да го качи в курса.  

1
14/05/2016 17:39:54