Создайте библиотеку, которая реализует такой программный интерфейс:
- добавление студентов-участников и объединение их в команды;
- создание командных и индивидуальных заданий;
- выставление оценок за задание;
- создание приоритизированных списков менторов и студентов;
- решение задачи распределения студентов среди менторов в соответствии с приоритизированными списками.
- Добавление студентов-участников
- Объединение участников в команды
- Создание командных и индивидуальных заданий
- Выставление оценок за задание:
- Cоздание приоритизированных списков менторов и студентов
- Решение задачи распределения студентов среди менторов в соответствии с приоритизированными списками
Позволяет добавить новый объект.
Cтрока
, содержащая тип объекта для добавления. Тип может быть одним из следующих:
- student - при добавлении студента-участника,
- mentor - при добавлении ментора,
- team - при создании команды,
- task - при создании задания.
Объект
, содержащий информацию о добавляемом объекте. Должен содержать хотя бы одно свойство (name
или title
).
В зависимости от заданного type, может принимать следующие свойства:
- name -
строка
с именем студента, - team -
строка
с названием команды иличисло
с ID команды илиобъект команды
; если к моменту создания студента, команда не существует, она будет создана автоматически (см. Lib.add('team', options)), - preferredMentorsList -
массив
объектов типаMentor
иличисел
ID менторов илистрок
- имён менторов, в порядке от самого приоритетного к самому нежелаемому.
Пример:
var student = Lib.add('student', {
name: 'Никита',
team: 'Новая Команда',
preferredMentorsList: [ 1, 'Иван', Lib.mentors[3] ]
});
- name -
строка
с именем ментора, - preferredStudentsList -
массив
объектов типаStudent
иличисел
ID студентов илистрок
- имён студентов, в порядке от самого приоритетного к самому нежелаемому.
Пример:
var mentor = Lib.add('mentor', {
name: 'Иван',
preferredStudentsList: [ 1, 'Никита', Lib.students[4] ]
});
- title -
строка
с названием задания, - content -
строка
с содержанием задания, - executors -
массив
объектов типаStudent
илиTeam
,строк
с именами иличисел
ID студентов и команд, выполняющих данное задание.
Пример:
var task = Lib.add('task', {
title: 'Иван',
content: 'Создайте библиотеку...',
executors: [ 1, 'Никита', 'Новая Команда' ]
});
- name -
строка
с названием команды, - teammates -
массив
объектов типаStudent
,строк
с именами иличисел
ID студентов, состоящих в команде.
Пример:
var team = Lib.add('team', {
name: 'Новая Команда',
teammates: [ 1, 'Никита', Lib.students[4] ]
});
Создаётся новый объект указанного типа с информацией, данной в options
.
Объект сохраняется в массиве Lib.type's, соответствующем типу созданного объекта (Например, Lib.students
).
Возвращает: созданный объект.
Позволяет редактировать информацию о существующих объектах.
Строка
, соответствующая name/title объекта или число
- ID объекта или сам объект
.
Объект
с новыми свойствами, которые будут присвоены выбранному по селектору объекту. Содержит свойства, соответствующие типу изменяемого объекта (те же, что в Lib.add()
).
Меняет информацию о выбранном объекте на новую, переданную через options.
Возвращает: изменённый объект.
Выбирает один из ранее добавленных объектов.
Строка
, соответствующая name/title объекта; число
- ID объекта или сам объект
.
Возвращает: выбранный объект.
Распределяет студентов среди менторов в соответствии с приоритизированными списками.
Возвращает: Массив
объектов, содержащих 3 элемента:
- index:
Число
, сумма приоритетности студента для ментора и ментора для студента. Чем меньше число, тем выше приоритетность, - mentor:
Объект Mentor
, ментор, выбранный для студента, - student:
Объект Student
, студент, выбранный для ментора.
Класс студентов-участников.
Объекты класса создаются через Lib.add('student', options)
.
Свойство, содержащее число
- уникальный ID студента.
Задается автоматически при добавлении студента через Lib.add('student', options)
.
-
Нельзя перезаписать.
-
Можно получить:
var studentId = student.id;
Свойство, содержащее строку
с именем студента.
Задается в options.name
при добавлении студента через Lib.add('student', options)
.
-
Можно перезаписать:
var student = Lib.add('student', {name: 'Никита'}); stud.name = 'Чесноков Н.';
-
Можно получить:
var studentName = student.name; // 'Чесноков Н.'
Свойство, содержащее объект
команды, к которой относится студент.
Задается в options.team
при добавлении студента Lib.add('student', options)
.
-
Можно перезаписать:
var student = Lib.add('student', {name: 'Никита', team: 'New team'}); student.team = Lib.add('team', {name: 'Another team'});
-
Можно получить:
var studentTeam = student.team; // 'Another team'
Свойство, содержащее приоритизированный список менторов в виде массива
объектов типа Mentor
(или селекторов), в котором менторы отсортированы от самого приоритетного к самому нежелательному.
Задается в options.preferredMentorsList
при добавлении студента Lib.add('student', options)
.
-
Можно перезаписать:
var student = Lib.add('student', { name: 'Никита', preferredMentorsList: ['Иван', 'Пёрт'] }); student.preferredMentorsList = ['Иван'];
-
Можно получить:
var studentMentorsList = student.preferredMentorsList; // [ Mentor objects ]
Student.prototype.addPreferredMentor(mentor: selector, priority: Number)
Метод для добавления ментора в приоритизированный список менторов. Принимает 2 параметра:
- mentor -
селектор
ментора (ID, title или объект типа Mentor), - priority -
число
приоритетности метора. Должно быть >= 1. В приоритизированном списке добавляемый ментор будет добавлен на место (priority-1), сдвигая при этом вниз всех менторов, начиная с того, который ранее занимал место (priority-1).
Пример:
student.addPreferredMentor('Иван', 3);
Возвращает: измененный объект
студента.
Student.prototype.addTasks( tasks: Task object | Array of selector )
Метод для добавления заданий студенту.
Принимает объект
задания или массив
селекторов задания (ID, title или самих объектов).
Пример:
student.addTasks([ 0, 'Задание 2', Lib.tasks[3] ]);
Возвращает: измененный объект
студента.
Student.prototype.removeTasks( tasks: Task object | Array of selector )
Метод для удаления заданий студента.
Принимает объект
задания или массив
селекторов задания (ID, title или самих объектов).
Пример:
student.removeTasks([ 0, 'Задание 2', Lib.tasks[3] ]);
Возвращает: измененный объект
студента.
Student.prototype.setMark( selector: selector, mark: Number )
Метод для выставления оценки за выполнение задания студенту. Принимает два параметра:
- selector -
Строка
,Число
илиОбъект задания
, указывающая на оцениваемое задание, - mark -
Число
, оценка.
Пример:
student.setMark([ 'Задание 2', 5 ]);
Возвращает: измененный объект
студента.
Класс команд.
Объекты класса создаются через Lib.add('team', options)
.
Свойство, содержащее число
- уникальный ID команды.
Задается автоматически при добавлении команды через Lib.add('team', options)
.
-
Нельзя перезаписать.
-
Можно получить:
var teamId = team.id;
Свойство, содержащее строку
с именем команды.
Задается в options.name
при добавлении команды через Lib.add('team', options)
.
-
Можно перезаписать:
var team = Lib.add('team', {name: 'Lakers'}); team.name = 'Chicago Bulls';
-
Можно получить:
var teamName = team.name; // 'Chicago Bulls'
Свойство, содержащее массив
объектов типа Student студентов, состоящих в команде.
Задается в options.team
при добавлении команды Lib.add('team', options)
.
-
Можно изменить с помощью Team.prototype.addTeammates и Team.prototype.removeTeammates (см.ниже)
-
Можно получить:
var teammates = team.teammates;
Team.prototype.addTeammates( students: Student object | Array of selector )
Метод для добавления членов команды.
Принимает объект
студента или массив
селекторов студентов (ID, title или самих объектов).
Пример:
team.addTeammates( Lib.students[0] );
Возвращает: измененный объект
команды.
Team.prototype.removeTeammates( students: Student object | Array of selector )
Метод для удаления членов команды.
Принимает объект
студента или массив
селекторов студентов (ID, title или самих объектов).
Пример:
team.removeTeammates( Lib.students[0] );
Возвращает: измененный объект
команды.
Team.prototype.addTasks( tasks: Task object | Array of selector )
Метод для добавления заданий команде.
Принимает объект
задания или массив
селекторов задания (ID, title или самих объектов).
Пример:
team.addTasks([ Lib.tasks[0], 2, 'New task' ]);
Возвращает: измененный объект
команды.
Team.prototype.removeTasks( tasks: Task object | Array of selector )
Метод для удаления заданий команды.
Принимает объект
задания или массив
селекторов задания (ID, title или самих объектов).
Пример:
team.removeTasks([ Lib.tasks[0], 2, 'New task' ]);
Возвращает: измененный объект
команды.
Team.prototype.setMark( selector: selector, mark: Number )
Метод для выставления оценки за выполнение задания команде. Принимает два параметра:
- selector -
Строка
,Число
илиОбъект задания
, указывающая на оцениваемое задание, - mark -
Число
, оценка.
Пример:
team.setMark( Lib.tasks[4], 4 );
Возвращает: измененный объект
команды.
Класс коммандных и индивидуальных заданий.
Объекты класса создаются через Lib.add('task', options)
.
Свойство, содержащее число
- уникальный ID задания.
Задается автоматически при добавлении задания через Lib.add('task', options)
.
-
Нельзя перезаписать.
-
Можно получить:
var taskId = task.id;
Свойство, содержащее строку
с заголовком задания.
Задается в options.title
при добавлении задания через Lib.add('task', options)
.
-
Можно перезаписать:
var task = Lib.add('task', {title: 'Первое задание'}); task.title = 'Второе задание';
-
Можно получить:
var taskTitle = task.title; // 'Второе задание'
Свойство, содержащее строку
- содержание задания.
Задается в options.content
при добавлении задания через Lib.add('task', options)
.
-
Можно перезаписать:
var task = Lib.add('task', { title: 'Первое задание', content: 'Создайте библиотеку...'}); task.content = 'Найдите и исправьте ошибки...';
-
Можно получить:
var taskContent = task.content; // 'Найдите и исправьте ошибки...'
Свойство, содержащее массив
объектов
студентов, состоящих в команде.
Задается в options.task
при добавлении задания Lib.add('task', options)
.
-
Можно изменить с помощью Task.prototype.addExecutors и Task.prototype.removeexecutors (см.ниже)
-
Можно получить:
var taskExecutors = task.executors; // [...]
Task.prototype.addExecutors( students: Student object | Array of selector )
Метод для добавления исполнителей задания.
Принимает объект
студента/команды или массив
селекторов исполнителей (ID, title или самих объектов).
Пример:
task.addExecutors([1]);
Возвращает: измененный объект
задания.
Task.prototype.removeExecutors( students: Student object | Array of selector )
Метод для удаления исполнителей задания.
Принимает объект
студента/команды или массив
селекторов исполнителей (ID, title или самих объектов).
Пример:
task.removeExecutors([1]);
Возвращает: измененный объект
задания.
Класс менторов.
Объекты класса создаются через Lib.add('mentor', options)
.
Свойство, содержащее число
- уникальный ID ментора.
Задается автоматически при добавлении ментора через Lib.add('mentor', options)
.
-
Нельзя перезаписать.
-
Можно получить:
var mentorId = mentor.id;
Свойство, содержащее строку
с именем ментора.
Задается в options.name
при добавлении ментора через Lib.add('mentor', options)
.
-
Можно перезаписать:
var mentor = Lib.add('mentor', {name: 'Иван'}); mentor.name = 'Александр';
-
Можно получить:
var mentorName = mentor.name; // 'Александр'
Свойство, содержащее приоритизированный список студентов в виде массива
объектов типа Student
(или селекторов), в котором студенты отсортированы от самого приоритетного к самому нежелательному.
Задается в options.preferredStudentsList
при добавлении ментора Lib.add('mentor', options)
.
-
Можно перезаписать:
var student = Lib.add('mentor', { name: 'Никита', preferredStudentsList: ['Никита', 'Антон'] }); student.preferredStudentsList = ['Никита'];
-
Можно получить:
var mentorStudentsList = mentor.preferredStudentsList; // [ Student objects ]
Mentor.prototype.addPreferredStudent(student: selector, priority: Number)
Метод для добавления студента в приоритизированный список студентов. Принимает 2 параметра:
- student -
селектор
студента (ID, title или объект типа Student), - priority -
число
приоритетности студента. Должно быть >= 1. В приоритизированном списке добавляемый студент будет добавлен на место (priority-1), сдвигая при этом вниз всех студентов, начиная с того, который ранее занимал место (priority-1).
Пример:
mentor.addPreferredStudent('Антон', 3);
Возвращает: измененный объект
ментора.