⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapuserinterface.cs

📁 实现课程表编排和打印功能,通过在候选列表中选择课程和教师(没有被排课且该教师教授所选择的课程)来完成排课,代码约8000行
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;

namespace 课程安排
{
    public class MapUserInterface
    {
        private static CourseTableControl courseTableControl = null;       //始终保存当前课程表的引用(程序中有可能在多个窗体中使用了多个控件,该值始终指向当前窗体中的课程表控件)
        private static CourseTableBodyControl courseTableBodyControl = null;

        
        #region 课程表转换
        public static void SetCourseTable(string gradeName, string clsName)
        {
            courseTableControl.GradeName = gradeName;
            courseTableControl.ClsName = clsName;

            Grade grade = null;
            for (int i = 0; i < School.Grades.Count; i++)
            {
                if (School.Grades[i].GradeName.ToLower() == gradeName.ToLower())
                {
                    grade = School.Grades[i];
                }
            }
            //  设置侯选课程及教师
            List<CourseTableBodyControl.BodySubjectItem> subjects = new List<CourseTableBodyControl.BodySubjectItem>();
            for (int i = 0; i < grade.Subjects.Count; i++)
            {
                Subject subject = grade.Subjects[i];
                CourseTableBodyControl.BodySubjectItem bsi = new CourseTableBodyControl.BodySubjectItem();
                bsi.SubjectName = subject.SubjectName;
                for (int j = 0; j < subject.Teachers.Count; j++)
                {
                    bsi.Teachers.Add(subject.Teachers[j].TeacherName);
                }
                subjects.Add(bsi);
            }
            courseTableBodyControl.Subjects = subjects;


            //  设置课程时间及侯选教师
            List<CourseTableBodyControl.BodyTimeItem> courseTimes = new List<CourseTableBodyControl.BodyTimeItem>();
            for (int week = 1; week <= 6; week++)
            {
                for (int courseOrder = 1; courseOrder <= 7; courseOrder++)
                {
                    CourseTableBodyControl.BodyTimeItem bti = new CourseTableBodyControl.BodyTimeItem();
                    bti.Week = week;
                    bti.CourseOrder = courseOrder;
                    for (int i = 0; i < grade.Teachers.Count; i++)
                    {
                        Teacher teacher = grade.Teachers[i];
                        bool hasTime = false;
                        for (int j = 0; j < teacher.CourseTable.Courses.Count; j++)
                        {
                            Course course = teacher.CourseTable.Courses[j];
                            if (week.ToString().ToLower() == Utility.WeekToString(course.CourseTime.Week).ToLower() && courseOrder.ToString().ToLower() == course.CourseTime.CourseNum.ToString().ToLower())
                            {
                                // 该老师在该时间已经安排了课程
                                hasTime = true;
                            }
                        }
                        if (!hasTime)
                        {
                            bti.Teachers.Add(teacher.TeacherName);
                        }
                    }
                    courseTimes.Add(bti);
                }
            }
            courseTableBodyControl.Times = courseTimes;
            

            Class cls = null;
            for (int i = 0; i < School.Classes.Count; i++)
            {
                if (School.Classes[i].ClassName.ToLower() == clsName.ToLower())
                {
                    cls = School.Classes[i];
                }
            }
            //  载入已经编排的课程
            List<CourseTableBodyControl.BodyCourseItem> courses = new List<CourseTableBodyControl.BodyCourseItem>();
            for (int i = 0; i < cls.CourseTable.Courses.Count; i++)
            {
                CourseTableBodyControl.BodyCourseItem bci = new CourseTableBodyControl.BodyCourseItem();
                Course course = cls.CourseTable.Courses[i];
                bci.Teacher = course.Teacher.TeacherName;
                bci.Subject = course.Subject.SubjectName;
                bci.Week = Utility.WeekToInt(course.CourseTime.Week);
                bci.CourseOrder = course.CourseTime.CourseNum;
                courses.Add(bci);
            }
            courseTableBodyControl.Courses = courses;
        }

        public static void GetCourseTable()
        {
            string clsName = courseTableControl.ClsName;
            Class cls = null;
            for (int i = 0; i < School.Classes.Count; i++)
            {
                if (School.Classes[i].ClassName.ToLower() == clsName.ToLower())
                {
                    cls = School.Classes[i];
                    break;
                }
            }
            if (cls != null)
            {
                // 获取年级对象
                Grade grade = null;
                for (int i=0; i < School.Grades.Count; i ++)
                {
                    if (School.Grades[i].GradeName.ToLower() == courseTableControl.GradeName.ToLower())
                    {
                        grade = School.Grades[i];
                        break;
                    }
                }
                for (int i = 0; i < courseTableBodyControl.Courses.Count; i++)
                {
                    Course course = cls.CourseTable.GetCourse(Utility.IntToWeek(courseTableBodyControl.Courses[i].Week), courseTableBodyControl.Courses[i].CourseOrder);
                    //  没有编排课程
                    if (course == null)
                    {
                        course = new Course();
                        for (int j = 0; j < grade.Classes.Count; i++)
                        {
                            if (grade.Classes[j].ClassName == courseTableControl.ClsName)
                            {
                                course.Class = grade.Classes[j];
                                break;
                            }
                        }
                        CourseTime ct = new CourseTime(courseTableBodyControl.Courses[i].Week, courseTableBodyControl.Courses[i].CourseOrder);
                        course.CourseTime = ct;
                        School.AddCourse(course);
                    }
                    for (int j = 0; j < grade.Subjects.Count; j++)
                    {
                        if (grade.Subjects[j].SubjectName == courseTableBodyControl.Courses[i].Subject)
                        {
                            course.Subject = grade.Subjects[j];
                            break;
                        }
                    }
                    for (int j = 0; j < grade.Teachers.Count; i++)
                    {
                        if (grade.Teachers[j].TeacherName == courseTableBodyControl.Courses[i].Teacher)
                        {
                            course.Teacher = grade.Teachers[j];
                        }
                    }
                }
            }
        }

        #endregion
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -