簡體   English   中英

使用C#進行課程安排

[英]Course Scheduling with C#

我正在為學校的日程安排項目工作,該課程將課程分配給可用的教室。 我有這樣的樹表(簡化):

TCourse:CourseID,CourseCode,小時,容量,ScheduleID ...

TClassroom:ClassroomID,ClassroomName,配額...

TCourseClassroom:CourseClassroomID,CourseID,ClassroomID,StartHour,FinishHour,ScheduleID

08:00-20:00之間的時間

下面的代碼逐一獲取課程,並為他們分配容量最接近的教室,然后更新教室以表明已使用教室。 (將代碼翻譯成英文,以供您閱讀和理解)

    public ActionResult Schedule()
    {
        int[] hours = { 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };

        using (ApsContext db = new ApsContext())
        {
            List<TCourse> courses = new List<TCourse>();
            List<TClasssroom> clasRooms = new List<TClasssroom>();
            int lastScheduleId = 0;

            courses = db.TCourse.OrderBy(x => x.Quota).ToList();

            foreach (var itemCourse in courses)
            {
                var clasRoom = db.Classroom.Where(x => x.PlanID == lastScheduleId && x.Capacity >= itemCourse.Quota).OrderBy(x => x.Capacity).FirstOrDefault();

                if (classRoom != null)
                {
                    var courseId = itemCourse.CourseID;
                    var classRoomId = clasRoom.ClassroomID;
                    var scheduleId = itemCourse.ScheduleID + 1;

                    db.Entry(classRoom).Entity.ScheduleID = scheduleId;
                    db.SaveChanges();

                    CourseClassroom newCourseClassroom = new CourseClassroom();
                    newCourseClassroom.CourseID = courseId;
                    newCourseClassroom.ClasssroomID = classRoomId;
                    newCourseClassroom.ScheduleID = scheduleId;

                    db.TCourseClassroom.Add(newCourseClassroom);
                    db.SaveChanges();
                }
            }
            return RedirectToAction("Schedule");
        }
    }

這段代碼只使用一次班,但是一天教室只有12個小時。 想想所有的課程都是2小時。 因此,我每天需要使用該教室6次。 我無法想象達到此目的的最佳方法。 我認為要更新數據庫以供教室使用數小時,還是應該僅用代碼來完成? 任何想法都會有所幫助。 提前致謝。

我有一個解決方案,但可能不是最快的解決方案。

  1. 刪除.FirstOrDefault(); 句子,因此在var classRoom您可以擁有一個Enumerable,其中所有類的大小都var classRoom容納該課程。
  2. 對於TCourseClassroom教室,請在TCourseClassroom找到包含該教室的所有CourseClassroom,並通過EndHour對其進行訂購。
  3. 檢查您的課程時數加上CourseClassroom的EndHour是否小於20,如果是,則可以將您的課程放在該課程中。

public ActionResult Schedule(){

int[] hours = { 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };

using (ApsContext db = new ApsContext())
{
    List<TCourse> courses = new List<TCourse>();
    List<TClasssroom> clasRooms = new List<TClasssroom>();
    int lastScheduleId = 0;

    courses = db.TCourse.OrderBy(x => x.Quota).ToList();

    foreach (var itemCourse in courses)
    {
        var classRoomList = db.Classroom.Where(x => x.PlanID == lastScheduleId && x.Capacity >= itemCourse.Quota).OrderBy(x <= x.Capacity);

        TClasssroom availableClassRoom;

        foreach(TClasssroom classRoom in classRoomList)
        {
            TCourseClassroom courseClassroomList = db.TCourseClassroom.FindAll(x => x.ClassroomID == clasRoom.ClassroomID).OrderBy(x > x.EndHour).First();


            if(courseClassroomList == null)
            {
                availableClassRoom = classRoom;
            }
            else
            {
                if(courseClassroomList.EndHour + itemCourse.Hour <= 20)
                {
                    availableClassRoom = classRoom;
                }

            }   

        }
        if (availableClassRoom != null)
        {
            var courseId = itemCourse.CourseID;
            var classRoomId = clasRoom.ClassroomID;
            var scheduleId = itemCourse.ScheduleID + 1;

            db.Entry(classRoom).Entity.ScheduleID = scheduleId;
            db.SaveChanges();

            CourseClassroom newCourseClassroom = new CourseClassroom();
            newCourseClassroom.CourseID = courseId;
            newCourseClassroom.ClasssroomID = classRoomId;
            newCourseClassroom.ScheduleID = scheduleId;

            db.TCourseClassroom.Add(newCourseClassroom);
            db.SaveChanges();
        }
    }
    return RedirectToAction("Schedule");
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM