📄 courseui.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 + -