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

📄 subjectui.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 SubjectUI : Form
    {
        private Subject curSubject = null;
        private bool hasModify = false;

        public SubjectUI()
        {
            InitializeComponent();
            LoadData();
        }

        //  载入初始数据
        private void LoadData()
        {
            this.listBox1.Items.Clear();
            if (School.Subjects != null)
            {
                for (int i = 0; i < School.Subjects.Count; i++)
                {
                    this.listBox1.Items.Add(School.Subjects[i].SubjectName);
                }
            }
            if (this.listBox1.Items.Count <= 0)
                return;
            this.listBox1.SelectedIndex = 0;
            if (Utility.IsNameString(this.listBox1.SelectedItem.ToString()))
            {
                this.lblSubjectInfo.Text = "当前科目: " + this.listBox1.SelectedItem.ToString();
                LoadRelateData(School.GetSubject(this.listBox1.SelectedItem.ToString()));
            }
        }

        //  载入与科目相关的信息
        private void LoadRelateData(Subject subject)
        {
            if (subject != null)
            {
                List<string> sTeacher = new List<string>();
                List<string> dTeacher = new List<string>();

                if (subject.Teachers != null)
                {
                    for (int i = 0; i < School.Teachers.Count; i++)
                    {
                        if (subject.HasTeacher(School.Teachers[i]))
                        {
                            sTeacher.Add(School.Teachers[i].TeacherName);
                        }
                        else
                        {
                            dTeacher.Add(School.Teachers[i].TeacherName);
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < School.Teachers.Count; i++)
                    {
                        dTeacher.Add(School.Teachers[i].TeacherName);
                    }
                }
                this.dragInfoControlTeacher.SourceStrings = sTeacher;
                this.dragInfoControlTeacher.DestinationStrings = dTeacher;
            }
        }

        //  保存与科目相关的信息
        private void SaveRelateData(Subject subject)
        {
            if (subject != null)
            {
                IList<string> sTeacher = dragInfoControlTeacher.SourceStrings;
                IList<string> dTeacher = dragInfoControlTeacher.DestinationStrings;
                for (int i = 0; i < sTeacher.Count; i++)
                {
                    Teacher teacher = School.GetTeacher(sTeacher[i]);
                    subject.AddTeacher(teacher);
                    teacher.AddSubject(subject);
                }
                for (int i = 0; i < dTeacher.Count; i++)
                {
                    Teacher teacher = School.GetTeacher(dTeacher[i]);
                    subject.RemoveTeacher(teacher);
                    teacher.RemoveSubject(subject);
                }
            }
        }

        #region 内部函数
        private void mDispose()
        {
            if (this.hasModify || this.dragInfoControlTeacher.HasModify)
            {
                this.hasModify = false;
                this.dragInfoControlTeacher.HasModify = false;
                if (MessageBox.Show("是否保存修改?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                {
                    SaveRelateData(this.curSubject);
                }
            }
        }

        private void AddSubject()
        {
            frmSubjectName f = new 课程安排.frmSubjectName();
            f.ShowDialog();
            if (f.DialogResult == DialogResult.Yes)
            {
                string name = f.SubjectName;
                EditLevel el = f.EditLevel;
                if (Utility.IsNameString(name))
                {
                    if (Utility.isRepeat(School.Subjects, name))
                    {
                        if (MessageBox.Show("该名称已经被使用,是否要重新输入?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                        {
                            AddSubject();
                        }
                    }
                    else
                    {
                        this.listBox1.Items.Add(name);
                        School.CreateSubject(name, el);
                        //this.hasModify = true;
                    }
                }
                else
                {
                    if (MessageBox.Show("该名称中包含了特殊字符(或为空值),是否要重新输入", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        AddSubject();
                    }
                }
            }
        }

        private void ModifySubjectName()
        {
            if (this.listBox1.SelectedIndex >= 0)
            {
                string oldName = listBox1.SelectedItem.ToString();
                frmSubjectName f = new 课程安排.frmSubjectName(oldName);
                f.ShowDialog();
                if (f.DialogResult == DialogResult.Yes)
                {
                    string name = f.SubjectName;
                    if (name != oldName)
                    {
                        if (Utility.IsNameString(name))
                        {
                            if (Utility.isRepeat(School.Subjects, name))
                            {
                                if (MessageBox.Show("该名称已经被使用,是否要重新输入?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                                {
                                    ModifySubjectName();
                                }
                            }
                            else
                            {
                                this.listBox1.Items[listBox1.SelectedIndex] = name;
                                Subject subject = School.GetSubject(oldName);
                                subject.SubjectName = name;
                            }
                        }
                        else
                        {
                            if (MessageBox.Show("该名称中包含了特殊字符(或为空值),是否要重新输入", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                            {
                                ModifySubjectName();
                            }
                        }
                    }
                }
            }
        }

        private void RemoveSubject()
        {
            if (this.listBox1.SelectedItems != null)
            {
                if (this.listBox1.SelectedItems.Count > 0)
                {
                    for (int i = 0; i < this.listBox1.SelectedItems.Count; i++)
                    {
                        string subjectName = this.listBox1.SelectedItems[i].ToString();
                        School.RemoveSubject(School.GetSubject(subjectName));
                        this.listBox1.Items.Remove(this.listBox1.SelectedItems[i]);
                    }
                }
            }
        }

        private void ClearSubject()
        {
            if (this.listBox1.Items.Count > 0)
            {
                this.listBox1.Items.Clear();
                School.RemoveAllSubject();
            }
        }
        #endregion

        #region 用户事件
        private void 保存到数据库ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.mDispose();
            if (School.WriteSubjectToDB()) 
            {
                MessageBox.Show("科目信息已经保存到数据库中", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("信息保存失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.listBox1.SelectedItem == null)
            {
                if (this.listBox1.Items.Count > 0)
                    this.listBox1.SelectedIndex = 0;
                else
                    return;
            }

            if (this.hasModify || this.dragInfoControlTeacher.HasModify)
            {
                this.hasModify = false;
                this.dragInfoControlTeacher.HasModify = false;
                if (MessageBox.Show("是否保存修改?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                {
                    SaveRelateData(this.curSubject);
                }
            }
            if (Utility.IsNameString(listBox1.SelectedItem.ToString()))
            {
                this.curSubject = School.GetSubject(listBox1.SelectedItem.ToString());
                LoadRelateData(this.curSubject);
                this.lblSubjectInfo.Text = "当前科目:  " + listBox1.SelectedItem.ToString();
            }
        }

        private void 添加学科ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AddSubject();
        }

        private void 修改科目名称ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ModifySubjectName();
        }

        private void 删除选择科目ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            RemoveSubject();
        }

        private void 删除所有科目ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ClearSubject();
        }
        #endregion

        #region 销毁对象
        protected override void OnClosing(CancelEventArgs e)
        {
            mDispose();
            base.OnClosing(e);
        }
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            mDispose();
            base.OnFormClosing(e);
        }
        #endregion

        #region 获取和失去焦点
        protected override void OnLostFocus(EventArgs e)
        {
            mDispose();
            base.OnLostFocus(e);
        }
        protected override void OnGotFocus(EventArgs e)
        {
            LoadData();
            base.OnGotFocus(e);
        }
        #endregion
    }
}

⌨️ 快捷键说明

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