Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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;
        }
Beispiel #3
0
        /// <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;
            }
        }
Beispiel #4
0
        /// <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;
        }
Beispiel #5
0
        /// <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;
        }
Beispiel #6
0
        /// <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;
        }
Beispiel #7
0
        /// <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;
        }
Beispiel #8
0
 /// <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;
 }