Exemplo n.º 1
0
 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));
     }
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        /// <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();
            }
        }