public ClassSubjectSettingCollection(ClassSubjectSettingCollection p) { this._classSubjectSettings = new Dictionary <string, ClassSubjectSetting>(p._classSubjectSettings.Count); foreach (KeyValuePair <string, ClassSubjectSetting> kvp in p._classSubjectSettings) { this._classSubjectSettings.Add(kvp.Key, new ClassSubjectSetting(kvp.Value)); } }
public ClassSubjectSettingCollection DeepClone() { ClassSubjectSettingCollection cssc = new ClassSubjectSettingCollection(_classSubjectSettings.Count); foreach (KeyValuePair <string, ClassSubjectSetting> kvp in _classSubjectSettings) { cssc._classSubjectSettings.Add(kvp.Key, new ClassSubjectSetting(kvp.Value)); } return(cssc); }
/// <summary> /// 根据指定的ClassSubjectSettingCollection安排该班的所有课程 /// </summary> /// <param name="cssc"></param> /// <returns></returns> public bool AssignLessons(ClassSubjectSettingCollection cssc) { bool error = false; foreach (ClassSubjectSetting css in cssc) { if (css.LessonsPerWeek >= Global.DayPerWeek) { foreach (DaySchedule ds in _days) { ds.RandomAssignLesson(Global.GradeTeachers[css.TeacherID]); css.Assigned++; } } } //经过第一轮安排,基本上所有的课剩余的课时都会小于每周的天数. foreach (ClassSubjectSetting css in cssc) { int flag = 0; if (error) { break; } while (css.LastCount > 0) { //如果已经标记,说明已经尝试完了 DaySchedule ds = RandomReturnValideDay(css.TeacherID, css.MaxCountPerDay); if (ds == null) { error = true; break; } //如果返回的ds为null则表示查找失败,安排不进课了. ds.RandomAssignLesson(Global.GradeTeachers[css.TeacherID]); css.Assigned++; flag++; if (flag > 20) { //在这里打一标记, error = true; //throw new SystemException("可能进入死循环"); } } } return(!error); }
/// <summary> /// 载入全年级课程设置 /// </summary> public static void LoadGradeSubjectSetting() { DataTable dt; _gradeSubjectSetting = new GradeSubjectSetting(ClassCount); for (int i = 0; i <= ClassCount; i++) { dt = StaticSQLiteHelper.GetClassSubjectSetting(i); ClassSubjectSettingCollection cssc = new ClassSubjectSettingCollection(dt.Rows.Count); foreach (DataRow row in dt.Rows) { cssc.Add(row[0].ToString(), new ClassSubjectSetting(row[0].ToString(), Convert.ToInt32(row[1]), Convert.ToInt32(row[2]), (bool)row[3], row.IsNull(3)?0:Convert.ToInt32(row[3]))); } _gradeSubjectSetting.Add(i, cssc); } }
/// <summary> /// 初始化本班级课程 /// </summary> public void InitializeSchedule(ClassSubjectSettingCollection classSubjectCollection) { _classSubjectSettingCollection = new ClassSubjectSettingCollection(classSubjectCollection); int _tryCount = 0; while (!AssignLessons(_classSubjectSettingCollection)) { _tryCount++; if (_tryCount >= 20) { throw new AssignFailedException("已经安排了400次,但是都失败了"); } //清空已经安排的课程,开始下一轮从新安排 ClearAllLesson(); ClearAsignHistory(); } }