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

📄 courseui.cs

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

namespace 课程安排
{
    public partial class CourseUI : Form
    {
        //private bool hasModify = false;
        private Grade curGrade = null;
        private Class curClass = null;

        private List<Teacher> effectTeachers = new List<Teacher>();

        public CourseUI()
        {
            InitializeComponent();
            this.txtTerm.Text = School.Term;
            LoadGrade();
        }

        #region 载入(保存)数据
        private void LoadGrade()
        {
            if (School.Grades != null)
            {
                this.comboBox1.Items.Clear();
                for (int i = 0; i < School.Grades.Count; i++)
                {
                    Grade grade = School.Grades[i];
                    this.comboBox1.Items.Add(Utility.GetShowGradeNameFromObject(grade));
                }
                if (this.comboBox1.Items.Count <= 0)
                    return;
                this.comboBox1.SelectedIndex = 0;
                if (this.comboBox1.Items.Count > 0)
                {
                    this.curGrade = Utility.GetGradeObjectFromShowName(this.comboBox1.Text);
                    LoadCourseTableCollection(this.curGrade);
                    LoadClass(this.curGrade);
                }
            }
        }

        private void LoadClass(Grade grade)
        {
            if (grade != null)
            {
                if (grade.Classes != null)
                {
                    comboBox2.Items.Clear();
                    for (int i = 0; i < grade.Classes.Count; i++)
                    {
                        this.comboBox2.Items.Add(grade.Classes[i].ClassName);
                    }
                    if (this.comboBox2.Items.Count <= 0)
                        return;
                    this.comboBox2.SelectedIndex = 0;
                    if (this.comboBox2.Items.Count > 0)
                    {
                        this.curClass = School.GetClass(comboBox2.Text);
                        LoadCourseTable(this.curClass);
                    }
                }
            }
        }

        private void LoadCourseTableCollection(Grade grade)
        {
            List<CourseTableBodyControl.BodySubjectItem> bsis = new List<CourseTableBodyControl.BodySubjectItem>();
            if (grade != null)
            {
                if (grade.Subjects != null)
                {
                    for (int i = 0; i < grade.Subjects.Count; i++)
                    {
                        CourseTableBodyControl.BodySubjectItem bsi = new CourseTableBodyControl.BodySubjectItem();
                        bsi.SubjectName = grade.Subjects[i].SubjectName;
                        IList<Teacher> teachers = grade.GetTeachers(grade.Subjects[i]);
                        if (teachers != null)
                        {
                            List<string> teacherNames = new List<string>();
                            for (int j = 0; j < teachers.Count; j++)
                            {
                                teacherNames.Add(teachers[j].TeacherName);
                            }
                            bsi.Teachers = teacherNames;
                        }
                        bsis.Add(bsi);
                    }
                }

                List<CourseTableBodyControl.BodyTimeItem> btis = new List<CourseTableBodyControl.BodyTimeItem>();
                for (int i = 1; i <= Constant.weekNum; i++)
                {
                    for (int j = 1; j <= Constant.courseNum; j++)
                    {
                        CourseTableBodyControl.BodyTimeItem bti = new CourseTableBodyControl.BodyTimeItem();
                        bti.CourseOrder = j;
                        bti.Week = i;
                        if (grade.Teachers != null)
                        {
                            List<string> teacherNames = new List<string>();
                            for (int k = 0; k < grade.Teachers.Count; k++)
                            {
                                Teacher teacher = grade.Teachers[k];
                                if (teacher.CourseTable != null)
                                {
                                    if (teacher.CourseTable.GetCourse(Utility.IntToWeek(i), j) == null)
                                    {
                                        //  该老师在该时间里还没有安排课程
                                        teacherNames.Add(teacher.TeacherName);
                                    }
                                }
                                else
                                {
                                    teacherNames.Add(teacher.TeacherName);
                                }
                            }
                            bti.Teachers = teacherNames;
                        }
                        btis.Add(bti);
                    }
                }
                this.courseTableControl1.SetCourseTableBodyControl(null, bsis, btis);
            }
        }

        private void LoadCourseTable(Class cls)
        {
            if (cls != null)
            {
                if (cls.CourseTable != null)
                {
                    if (cls.CourseTable.Courses != null)
                    {
                        List<CourseTableBodyControl.BodyCourseItem> bcis = new List<CourseTableBodyControl.BodyCourseItem>();
                        for (int i = 0; i < cls.CourseTable.Courses.Count; i++)
                        {
                            Course course = cls.CourseTable.Courses[i];

                            CourseTableBodyControl.BodyCourseItem bci = new CourseTableBodyControl.BodyCourseItem();
                            bci.CourseOrder = course.CourseTime.CourseNum;
                            bci.Week = Utility.WeekToInt(course.CourseTime.Week);
                            bci.Subject = course.Subject.SubjectName;
                            bci.Teacher = course.Teacher.TeacherName;

                            bcis.Add(bci);
                            AddEffectTeacher(course.Teacher);
                        }
                        this.courseTableControl1.SetCourseTable(bcis);
                    }
                }
                else
                {
                    this.courseTableControl1.SetCourseTable(null);
                }
            }
        }

        private void SaveCourseTable(Class cls)
        {
            int tempi = 0;
            int tempx = 0;
            int tempy = 0;
            if (cls != null)
            {
                List<CourseTableBodyControl.BodyCourseItem> bcis = this.courseTableControl1.GetCourseTable();
                if (bcis != null)
                {
                    for (int i = 0; i < bcis.Count; i++)
                    {
                        CourseTableBodyControl.BodyCourseItem bci = bcis[i];
                        Teacher teacher = School.GetTeacher(bci.Teacher);
                        Subject subject = School.GetSubject(bci.Subject);
                        CourseTime courseTime = new CourseTime(bci.Week, bci.CourseOrder);

                        
                        if (teacher != null && subject != null && courseTime != null)
                        {
                            if (!Utility.isRepeatCourse(School.Courses as List<Course>, teacher, cls, courseTime, subject))
                            {
                                Course course = School.CreateCourse(teacher, subject, cls, courseTime);
                                if (cls.CourseTable == null)
                                    cls.CourseTable = new CourseTable();
                                cls.CourseTable.AddCourse(course);

                                tempx++;
                            }
                            else
                            {
                                Course course = School.GetCourse(cls, courseTime);
                                if (course != null)
                                {
                                    course.Teacher = teacher;
                                    if (cls.CourseTable == null)
                                        cls.CourseTable = new CourseTable();
                                    cls.CourseTable.AddCourse(course);
                                }
                                else
                                {
                                    course = School.CreateCourse(teacher, subject, cls, courseTime);
                                    if (cls.CourseTable == null)
                                        cls.CourseTable = new CourseTable();
                                    cls.CourseTable.AddCourse(course);
                                }
                                tempy++;
                            }
                        }
                        else
                        {
                            tempi++;
                        }
                        if (teacher != null)
                            AddEffectTeacher(teacher);
                    }

                    //  重建该班级的课程表
                    if (cls.CourseTable == null)
                        cls.CourseTable = new CourseTable();
                    cls.CourseTable.Courses = School.GetCourses(cls);

                    //  重建被影响教师的课程表
                    for (int i = 0; i < effectTeachers.Count; i++)
                    {
                        if (effectTeachers[i].CourseTable == null)
                            effectTeachers[i].CourseTable = new CourseTable();
                        effectTeachers[i].CourseTable.Courses = School.GetCourses(effectTeachers[i]);
                    }
                }
            }
            IList<Course> cs = School.Courses;

            showCourseTableData(cls.CourseTable);
        }

        #region  通过测试窗体输出课程表
        private void showCourseTableData()
        {
            Form f = new Form();
            f.Size = new Size(600, 600);
            f.Location = new Point(100,100);
            

            RichTextBox rtb = new RichTextBox();
            rtb.Dock = DockStyle.Fill;
            f.Controls.Add(rtb);

            string str = "";
            string[] strs = new string[School.Courses.Count];
            for (int i = 0; i < School.Courses.Count; i++)
            {
                Course course = School.Courses[i];
                str = "班级: " + course.Class.ClassName + "        教师:  " + course.Teacher.TeacherName
                      + "        课程: " + course.Subject.SubjectName
                      + "        时间: 星期" + Utility.WeekToString(course.CourseTime.Week) + " 第" + course.CourseTime.CourseNum.ToString() + "节课";
                strs[i] = str;
            }
            rtb.Lines = strs;

            f.ShowDialog();
        }

        private void showCourseTableData(CourseTable courseTable)
        {
            Form f = new Form();
            f.Size = new Size(600, 600);
            f.Location = new Point(100, 100);


            RichTextBox rtb = new RichTextBox();
            rtb.Dock = DockStyle.Fill;
            f.Controls.Add(rtb);

            string str = "";
            string[] strs = new string[courseTable.Courses.Count];
            for (int i = 0; i < courseTable.Courses.Count; i++)
            {
                Course course = courseTable.Courses[i];
                str = "班级: " + course.Class.ClassName + "        教师:  " + course.Teacher.TeacherName
                      + "        课程: " + course.Subject.SubjectName
                      + "        时间: 星期" + Utility.WeekToString(course.CourseTime.Week) + " 第" + course.CourseTime.CourseNum.ToString() + "节课";
                strs[i] = str;
            }
            rtb.Lines = strs;

            f.ShowDialog();
        }
        #endregion

        private void AddEffectTeacher(Teacher teacher)
        {
            if (teacher == null) return;
            if (!this.effectTeachers.Contains(teacher))
                this.effectTeachers.Add(teacher);
        }
        #endregion

        //  所选择的年级改变
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.comboBox2.Items.Clear();
            this.comboBox2.Text = "";
            this.courseTableControl1.ClearAllContent();
            if (Utility.CheckComboText(this.comboBox1))
            {
                Grade grade = Utility.GetGradeObjectFromShowName(this.comboBox1.Text);
                this.curGrade = grade;
                LoadClass(grade);
            }
        }

        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (Utility.CheckComboText(this.comboBox2))
            {
                Class cls = School.GetClass(this.comboBox2.Text);
                this.curClass = cls;
                
                LoadCourseTableCollection(curGrade);
                LoadCourseTable(cls);
                
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.SaveCourseTable(curClass);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.SaveCourseTable(curClass);
            if (School.WriteCoursesToDB())
            {
                MessageBox.Show("课程表信息已经保存到数据库中", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("信息保存失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void txtTerm_TextChanged(object sender, EventArgs e)
        {
            School.Term = this.txtTerm.Text;
        }
    }
}

⌨️ 快捷键说明

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