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

📄 coursetablebodycontrol.cs

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

namespace 课程安排
{
    [Serializable]
    public partial class CourseTableBodyControl : UserControl
    {
        private const int DefaultCols = 8;
        private const int DefaultRows = 9;
        private const int CourseControlsWidth = 105;
        private const int CourseControlsHeight = 45;

        private List<CourseArrangeControl> courseControls = new List<CourseArrangeControl>();

        //  用于获取编排的课程结果,以及载入已经编排的课程
        private List<BodyCourseItem> courses = null;
        public List<BodyCourseItem> Courses
        {
            get { GetCourse(); return courses; }
            set { courses = value; SetCourse(); }
        }

        //  设置可供选择的课程,以及该课程相关的教师
        private List<BodySubjectItem> subjects = null;
        public List<BodySubjectItem> Subjects
        {
            get { return subjects; }
            set { subjects = value; InitControl(); }
        }

        //  设置课程表中的时间集合,已及该时间有空的教师
        private List<BodyTimeItem> times = null;
        public List<BodyTimeItem> Times
        {
            get { return times; }
            set { times = value; InitControl(); }
        }

        //  上午的课程数量,默认值为4
        private int monningCourseCount = 4;

        public int MonningCourseCount
        {
            get { return monningCourseCount; }
            set 
            {   
                if (value >= 2 && value <= 6)
                    monningCourseCount = value; 
            }
        }

        public CourseTableBodyControl()
        {
            InitializeComponent();
        }

        public void ClearAllText()
        {
            foreach (object o in this.Controls)
            {
                if (o is CourseArrangeControl)
                {
                    (o as CourseArrangeControl).ClearText();
                }
            }
        }
        public void ClearAllItems()
        {
            foreach (object o in this.Controls)
            {
                if (o is CourseArrangeControl)
                {
                    (o as CourseArrangeControl).ClearItems();
                }
            }
        }

        //  根据行数、列数常量等信息设置控件的最小规模
        private void CourseTableBodyControl_Resize(object sender, EventArgs e)
        {
            int w = CourseControlsWidth * DefaultCols + 10;
            int h = CourseControlsHeight * DefaultRows + 10;
            if (this.Width != w)
                this.Width = w;
            if (this.Height != h)
                this.Height = h;
        }

        private void InitControl()
        {
            if (this.times != null && this.subjects != null)
            {
                // 控制对每一节课程的控制
                for (int i = 0; i < times.Count; i++)
                {
                    int week = times[i].Week;
                    int courseOrder = times[i].CourseOrder;
                    string controlName = "courseArrangeControl" + week.ToString() + courseOrder.ToString();
                    foreach (object o in this.Controls)
                    {
                        if (o is CourseArrangeControl)
                            if ((o as CourseArrangeControl).Name.ToLower() == controlName.ToLower())
                            {
                                (o as CourseArrangeControl).Time = times[i];
                                (o as CourseArrangeControl).Subjects = subjects;
                            }
                    }
                }
            }
        }

        private void SetCourse()
        {
            if (this.courses == null)
                this.courses = new List<BodyCourseItem>();
            for (int i = 0; i < this.courses.Count; i++)
            {
                string controlName = "courseArrangeControl" + this.courses[i].Week.ToString() + this.courses[i].CourseOrder.ToString();
                foreach (object o in this.Controls)
                {
                    if (o is CourseArrangeControl)
                        if ((o as CourseArrangeControl).Name.ToLower() == controlName.ToLower())
                        {
                            (o as CourseArrangeControl).Course = this.courses[i];
                        }
                }
            }
        }

        private void GetCourse()
        {
            if (this.courses == null)
                this.courses = new List<BodyCourseItem>();
            this.courses.Clear();
            foreach (object o in this.Controls)
            {
                if (o is CourseArrangeControl)
                {
                    this.courses.Add((o as CourseArrangeControl).Course);
                }
            }
        }


        #region 内部类
        [Serializable]
        public class BodyCourseItem
        {

            private int week;

            public int Week
            {
                get { return week; }
                set { week = value; }
            }
            private int courseOrder;

            public int CourseOrder
            {
                get { return courseOrder; }
                set { courseOrder = value; }
            }
            private string subject;

            public string Subject
            {
                get { return subject; }
                set { subject = value; }
            }
            private string teacher;

            public string Teacher
            {
                get { return teacher; }
                set { teacher = value; }
            }
        }

        [Serializable]
        public class BodySubjectItem
        {

            private string subjectName;

            public string SubjectName
            {
                get { return subjectName; }
                set { subjectName = value; }
            }
            private List<string> teachers;

            public List<string> Teachers
            {
                get { return teachers; }
                set { teachers = value; }
            }
        }

        [Serializable]
        public class BodyTimeItem
        {

            private int week;

            public int Week
            {
                get { return week; }
                set { week = value; }
            }
            private int courseOrder;

            public int CourseOrder
            {
                get { return courseOrder; }
                set { courseOrder = value; }
            }
            private List<string> teachers;

            public List<string> Teachers
            {
                get { return teachers; }
                set { teachers = value; }
            }
        }
        #endregion
    }
}

⌨️ 快捷键说明

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