/// <summary> /// Adds a lesson to the timetable /// </summary> /// <param name="dayIndex">The index of the day needed.</param> /// <param name="periodIndex">The index of the period needed.</param> /// <param name="periodLength">The number of periods the lesson covers.</param> /// <param name="subjectCode">The subject code associated with the type of subject.</param> /// <param name="teacherCode">The teacher code associated with the teacher name.</param> /// <param name="roomName">The room name.</param> /// <param name="yearIndex">The index of the year group, for the lesson.</param> /// <param name="formIndex">The index of the form in the year group specified.</param> /// <param name="homeworkAmount">The amount of homework that is expected to be set in the lesson.</param> /// <returns>Whether the lesson addition has been successful.</returns> public bool AddLesson(byte dayIndex, byte periodIndex, byte periodLength, string subjectCode, string teacherCode, string roomName, byte yearIndex, byte formIndex, byte homeworkAmount, bool locked, bool invisible) { int staffIndex = GetIndexOfStaff(teacherCode); int roomIndex = GetIndexOfRoom(roomName); if (roomIndex < 0) { return(false); } if (staffIndex < 0) { return(false); } if (!finalised) { return(false); } if ((subjectCode == "") || (teacherCode == "") || (roomName == "")) { return(false); } if (dayIndex >= this.Week.Count) { return(false); } if (periodIndex + periodLength - 1 >= this.Week[dayIndex].PeriodsInDay.Count) { return(false); } //check to see whether any lessons currently exist in that space. This will therefore check for clashes. if (roomTT[dayIndex][periodIndex][roomIndex] != null) { return(false); } if (staffTT[dayIndex][periodIndex][staffIndex] != null) { return(false); } if (mainTT[dayIndex][periodIndex][yearIndex][formIndex] != null) { return(false); } Lesson newLesson = new Lesson(teacherCode, subjectCode, roomName, dayIndex, periodIndex, homeworkAmount, locked, invisible, formIndex, yearIndex); for (int periodptr = 0; periodptr < periodLength; periodptr++) { Lesson l = newLesson.Clone(); l.PeriodIndex = Convert.ToByte(periodIndex + periodptr); mainTT[dayIndex][periodIndex + periodptr][yearIndex][formIndex] = l; staffTT[dayIndex][periodIndex + periodptr][staffIndex] = l; roomTT[dayIndex][periodIndex + periodptr][roomIndex] = l; } return(true); }
/// <summary> /// Move a lesson from one year to another. /// </summary> /// <param name="LessonToMove">The lesson object to move.</param> /// <param name="newYearIndex">The new year index to move to.</param> public void MoveYears(Lesson LessonToMove, byte newYearIndex) { if (LessonToMove.YearIndex == newYearIndex) { return; //already done } if (mainTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][newYearIndex][0] != null) { return; //should throw exception really. } Lesson oldLessonToMove = LessonToMove.Clone(); byte oldYearIndex = oldLessonToMove.YearIndex; LessonToMove.YearIndex = newYearIndex; if (Years[newYearIndex].Forms.Count > oldLessonToMove.FormIndex) { LessonToMove.FormIndex = oldLessonToMove.FormIndex; } else { LessonToMove.FormIndex = 0; } if (Years[newYearIndex].Forms.Count == 0) { return; } mainTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][newYearIndex][LessonToMove.FormIndex] = LessonToMove; mainTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][oldYearIndex][oldLessonToMove.FormIndex] = null; }
/// <summary> /// Allows one to move teachers from one location to another. /// </summary> /// <param name="LessonToMove">The lesson object to move</param> /// <param name="newTeacherIndex">The new teacher index to move to.</param> public void MoveTeacher(Lesson LessonToMove, byte newTeacherIndex) { if (LessonToMove.TeacherAbbreviation == Staff[newTeacherIndex].TeacherAbbreviation) { return; //work is done. } if (staffTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][newTeacherIndex] != null) { return; //should throw an exception really. } byte oldTeacherIndex = Convert.ToByte(GetIndexOfStaff(LessonToMove.TeacherAbbreviation)); Lesson oldLessonToMove = LessonToMove.Clone(); LessonToMove.TeacherAbbreviation = Staff[newTeacherIndex].TeacherAbbreviation; int i = 0; do { staffTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex + i][newTeacherIndex] = LessonToMove; i++; } while((LessonToMove.PeriodIndex + i < Week[LessonToMove.DayIndex].PeriodsInDay.Count) && (staffTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex + i][oldTeacherIndex] == oldLessonToMove)); for (int j = 0; j < i; j++) { staffTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex + j][oldTeacherIndex] = null; } }
/// <summary> /// Adds a lesson to the timetable /// </summary> /// <param name="dayIndex">The index of the day needed.</param> /// <param name="periodIndex">The index of the period needed.</param> /// <param name="periodLength">The number of periods the lesson covers.</param> /// <param name="subjectCode">The subject code associated with the type of subject.</param> /// <param name="teacherCode">The teacher code associated with the teacher name.</param> /// <param name="roomName">The room name.</param> /// <param name="yearIndex">The index of the year group, for the lesson.</param> /// <param name="formIndex">The index of the form in the year group specified.</param> /// <param name="homeworkAmount">The amount of homework that is expected to be set in the lesson.</param> /// <returns>Whether the lesson addition has been successful.</returns> public bool AddLesson(byte dayIndex, byte periodIndex, byte periodLength, string subjectCode, string teacherCode, string roomName, byte yearIndex, byte formIndex,byte homeworkAmount, bool locked, bool invisible) { int staffIndex = GetIndexOfStaff(teacherCode); int roomIndex = GetIndexOfRoom(roomName); if (roomIndex < 0) return false; if (staffIndex < 0) return false; if (!finalised) return false; if ((subjectCode == "") || (teacherCode == "") || (roomName == "")) return false; if (dayIndex >= this.Week.Count) return false; if (periodIndex + periodLength - 1 >= this.Week[dayIndex].PeriodsInDay.Count) return false; //check to see whether any lessons currently exist in that space. This will therefore check for clashes. if (roomTT[dayIndex][periodIndex][roomIndex] != null) return false; if (staffTT[dayIndex][periodIndex][staffIndex] != null) return false; if (mainTT[dayIndex][periodIndex][yearIndex][formIndex] != null) return false; Lesson newLesson = new Lesson(teacherCode, subjectCode, roomName, dayIndex, periodIndex,homeworkAmount,locked,invisible,formIndex,yearIndex); for (int periodptr = 0; periodptr < periodLength; periodptr++) { Lesson l = newLesson.Clone(); l.PeriodIndex = Convert.ToByte(periodIndex + periodptr); mainTT[dayIndex][periodIndex+periodptr][yearIndex][formIndex] = l; staffTT[dayIndex][periodIndex+periodptr][staffIndex] = l; roomTT[dayIndex][periodIndex+periodptr][roomIndex] = l; } return true; }
/// <summary> /// Move a room to a new room index /// </summary> /// <param name="LessonToMove">Lesson to move</param> /// <param name="newRoomIndex">new Room Index to move to (byte)</param> public void MoveRooms(Lesson LessonToMove, byte newRoomIndex) { if (LessonToMove.RoomCode == Rooms[newRoomIndex].RoomCode) { return; //work is done already. } if (roomTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][newRoomIndex] != null) { return; //should throw exception really } Lesson oldLessonToMove = LessonToMove.Clone(); byte oldRoomIndex = Convert.ToByte(GetIndexOfRoom(LessonToMove.RoomCode)); LessonToMove.RoomCode = Rooms[newRoomIndex].RoomCode; roomTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][newRoomIndex] = LessonToMove; roomTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][oldRoomIndex] = null; }
/// <summary> /// Move a lesson from one year to another. /// </summary> /// <param name="LessonToMove">The lesson object to move.</param> /// <param name="newYearIndex">The new year index to move to.</param> public void MoveYears(Lesson LessonToMove, byte newYearIndex) { if (LessonToMove.YearIndex == newYearIndex) return; //already done if (mainTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][newYearIndex][0] != null) return; //should throw exception really. Lesson oldLessonToMove = LessonToMove.Clone(); byte oldYearIndex = oldLessonToMove.YearIndex; LessonToMove.YearIndex = newYearIndex; if (Years[newYearIndex].Forms.Count > oldLessonToMove.FormIndex) { LessonToMove.FormIndex = oldLessonToMove.FormIndex; } else { LessonToMove.FormIndex = 0; } if (Years[newYearIndex].Forms.Count == 0) return; mainTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][newYearIndex][LessonToMove.FormIndex] = LessonToMove; mainTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][oldYearIndex][oldLessonToMove.FormIndex] = null; }
/// <summary> /// Allows one to move teachers from one location to another. /// </summary> /// <param name="LessonToMove">The lesson object to move</param> /// <param name="newTeacherIndex">The new teacher index to move to.</param> public void MoveTeacher(Lesson LessonToMove, byte newTeacherIndex) { if (LessonToMove.TeacherAbbreviation == Staff[newTeacherIndex].TeacherAbbreviation) return; //work is done. if (staffTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][newTeacherIndex] != null) return; //should throw an exception really. byte oldTeacherIndex = Convert.ToByte(GetIndexOfStaff(LessonToMove.TeacherAbbreviation)); Lesson oldLessonToMove = LessonToMove.Clone(); LessonToMove.TeacherAbbreviation = Staff[newTeacherIndex].TeacherAbbreviation; int i = 0; do { staffTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex + i][newTeacherIndex] = LessonToMove; i++; } while((LessonToMove.PeriodIndex + i < Week[LessonToMove.DayIndex].PeriodsInDay.Count) && (staffTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex + i][oldTeacherIndex] == oldLessonToMove)); for (int j = 0; j < i; j++) staffTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex + j][oldTeacherIndex] = null; }
/// <summary> /// Move a room to a new room index /// </summary> /// <param name="LessonToMove">Lesson to move</param> /// <param name="newRoomIndex">new Room Index to move to (byte)</param> public void MoveRooms(Lesson LessonToMove, byte newRoomIndex) { if (LessonToMove.RoomCode == Rooms[newRoomIndex].RoomCode) return; //work is done already. if (roomTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][newRoomIndex] != null) return; //should throw exception really Lesson oldLessonToMove = LessonToMove.Clone(); byte oldRoomIndex = Convert.ToByte(GetIndexOfRoom(LessonToMove.RoomCode)); LessonToMove.RoomCode = Rooms[newRoomIndex].RoomCode; roomTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][newRoomIndex] = LessonToMove; roomTT[LessonToMove.DayIndex][LessonToMove.PeriodIndex][oldRoomIndex] = null; }