private void WriteDuplicateCourse(decimal school_year, string semester, List<CourseSection> CourseSections)
        {
            List<KeyValuePair<CourseSection, CourseSection>> ChongTongCourseSections = new List<KeyValuePair<CourseSection, CourseSection>>();
            List<int> CourseIDs = new List<int>();
            CourseSections.ForEach((x) =>
            {
                if (!CourseIDs.Contains(x.CourseID))
                {
                    List<CourseSection> SameSubjectSections = CourseSections.Where(y => (y.SubjectID == x.SubjectID && y.CourseID != x.CourseID)).GroupBy(y => y.CourseID).Select(y => y.First()).ToList();
                    SameSubjectSections.ForEach((y) =>
                    {
                        ChongTongCourseSections.Add(new KeyValuePair<CourseSection, CourseSection>(x, y));
                    });
                    CourseIDs.Add(x.CourseID);
                }
            });
            List<UDT.ConflictCourse> conflict_courses = new List<UDT.ConflictCourse>();
            ChongTongCourseSections.ForEach((x) =>
            {
                UDT.ConflictCourse conflict_course = new UDT.ConflictCourse();

                conflict_course.SchoolYear = x.Key.SchoolYear;
                conflict_course.Semester = x.Key.Semester;
                conflict_course.CourseID_A = x.Key.CourseID;
                conflict_course.CourseID_B = x.Value.CourseID;
                conflict_course.CourseName_A = x.Key.CourseName;
                conflict_course.CourseName_B = x.Value.CourseName;
                conflict_course.ConflictDate = string.Empty;
                conflict_course.ConflictWeek = string.Empty;
                conflict_course.ConflictTime = string.Empty;
                conflict_course.IsSameSubject = true;

                conflict_courses.Add(conflict_course);
            });
            conflict_courses.SaveAll();
        }
        private void WriteChongTongCourse(decimal school_year, string semester, List<CourseSection> CourseSections)
        {
            if (CourseSections.Count == 0)
                return;

            string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
            List<UDT.ConflictCourse> conflict_courses = new List<UDT.ConflictCourse>();
            Dictionary<int, Dictionary<string, List<CourseSection>>> dicCourseSections = new Dictionary<int, Dictionary<string, List<CourseSection>>>();
            Dictionary<int, CourseSection> dicCourseIDs = new Dictionary<int, CourseSection>();
            CourseSections.ForEach((x) =>
            {
                if (!dicCourseIDs.ContainsKey(x.CourseID))
                    dicCourseIDs.Add(x.CourseID, x);
            });
            CourseSections.ForEach((x) =>
            {
                if (!dicCourseSections.ContainsKey(x.CourseID))
                    dicCourseSections.Add(x.CourseID, new Dictionary<string,List<CourseSection>>());

                if (!dicCourseSections[x.CourseID].ContainsKey(x.BeginTime.ToShortDateString()))
                    dicCourseSections[x.CourseID].Add(x.BeginTime.ToShortDateString(), new List<CourseSection>());

                dicCourseSections[x.CourseID][x.BeginTime.ToShortDateString()].Add(x);
            });
            foreach (int CourseID in dicCourseSections.Keys)
            {
                foreach (string date in dicCourseSections[CourseID].Keys)
                {
                    CourseSection A = dicCourseIDs[CourseID];
                    Dictionary<int, List<CourseSection>> dicBs = new Dictionary<int, List<CourseSection>>();
                    foreach (CourseSection x in dicCourseSections[CourseID][date])
                    {
                        List<CourseSection> ChongTongCourseSections = CourseSections.Where(y => (y.SubjectID != x.SubjectID && y.CourseID != x.CourseID && x.BeginTime.ToShortDateString() == y.BeginTime.ToShortDateString())).Where(y => ((x.BeginTime <= y.BeginTime && x.EndTime >= y.EndTime) || (x.BeginTime >= y.BeginTime && x.BeginTime <= y.EndTime) || (x.EndTime >= y.BeginTime && x.EndTime <= y.EndTime))).ToList();

                        foreach (CourseSection cs in ChongTongCourseSections)
                        {
                            if (!dicBs.ContainsKey(cs.CourseID))
                                dicBs.Add(cs.CourseID, new List<CourseSection>());

                            dicBs[cs.CourseID].Add(cs);
                        }
                    }
                    foreach (int course_id in dicBs.Keys)
                    {
                        UDT.ConflictCourse conflict_course = new UDT.ConflictCourse();

                        CourseSection B = dicBs[course_id].ElementAt(0);

                        DateTime begin_time = DateTime.MaxValue;
                        DateTime end_time = DateTime.MinValue;

                        if (dicBs[course_id].Min(y => y.BeginTime) < begin_time)
                            begin_time = dicBs[course_id].Min(y => y.BeginTime);
                        if (dicBs[course_id].Max(y => y.EndTime) > end_time)
                            end_time = dicBs[course_id].Max(y => y.EndTime);

                        //if (A.CourseID != 649)
                        //    continue;

                        conflict_course.SchoolYear = A.SchoolYear;
                        conflict_course.Semester = A.Semester;
                        conflict_course.CourseID_A = A.CourseID;
                        conflict_course.CourseName_A = A.CourseName;
                        conflict_course.CourseID_B = B.CourseID;
                        conflict_course.CourseName_B = B.CourseName;
                        conflict_course.ConflictDate = date;
                        conflict_course.ConflictWeek = Day[Convert.ToInt16(DateTime.Parse(date).DayOfWeek)];
                        conflict_course.IsSameSubject = false;
                        conflict_course.ConflictTime = begin_time.ToString("HH:mm") + "~" + end_time.ToString("HH:mm");

                        conflict_courses.Add(conflict_course);
                    }
                }
            }
            conflict_courses.SaveAll();
        }