private int SortMergeList(一名學生 s1, 一名學生 s2)
        {
            string ss1 = s1.seat_no.HasValue ? s1.seat_no.Value.ToString().PadLeft(3, '0') : "999";
            string ss2 = s2.seat_no.HasValue ? s2.seat_no.Value.ToString().PadLeft(3, '0') : "999";

            return(ss1.CompareTo(ss2));
        }
        /// <summary>
        /// 取得學生基本資料
        /// 學生系統編號/狀態/姓名/座號
        /// 班級ID/班級名稱/年級/班級序號
        /// 老師ID/老師名稱/老師暱稱
        /// (狀態為一般 or 延修)
        /// </summary>
        static public List <一名學生> GetStudentData()
        {
            List <一名學生>   StudentList = new List <一名學生>();
            StringBuilder sb          = new StringBuilder();

            sb.Append("select student.id as student_id,student.status,student.name as student_name,student.seat_no,student.gender,");
            sb.Append("class.id as class_id,class.class_name,class.grade_year,class.display_order,");
            sb.Append("teacher.id as teacher_id,teacher.teacher_name,teacher.nickname,");
            sb.Append("dept.name as dept_name ");
            sb.Append("from student join class on student.ref_class_id=class.id ");
            sb.Append("left join teacher on class.ref_teacher_id=teacher.id ");
            sb.Append("left join dept on class.ref_dept_id=dept.id ");
            sb.Append("where student.status in (1,2)");

            //取得學生選填志願序
            DataTable dt = tool._Q.Select(sb.ToString());

            foreach (DataRow each in dt.Rows)
            {
                一名學生 obj = new 一名學生(each);
                StudentList.Add(obj);
            }

            return(StudentList);
        }
Example #3
0
 private void Increase(Dictionary <string, 一個社團檢查> CLUBCheckDic, Dictionary <string, SCJoin> SCJLockDic)
 {
     foreach (SCJoin stud in SCJLockDic.Values)
     {
         if (CLUBCheckDic.ContainsKey(stud.RefClubID))
         {
             if (StudentDic.ContainsKey(stud.RefStudentID))
             {
                 一個社團檢查 c = CLUBCheckDic[stud.RefClubID];
                 一名學生   s = StudentDic[stud.RefStudentID];
                 SetClubGradeYearCount(c, s, true);
             }
         }
     }
 }
Example #4
0
        //2016/9/7 - 略過功能不需要再一次進行人數統計
        //private void SetCount(List<學生選社亂數檔> RunList)
        //{
        //    foreach (學生選社亂數檔 ran in RunList)
        //    {
        //        //社團選社資料
        //        VolunteerRecord vr = ran._record;
        //        string StudentID = vr.RefStudentID;
        //        //是否有社團記錄
        //        if (!SCJLockDic.ContainsKey(StudentID))
        //            continue;
        //        SCJoin scj = SCJLockDic[StudentID];
        //        //社團記錄是否有該社團
        //        if (!CLUBCheckDic.ContainsKey(scj.RefClubID))
        //            continue;
        //        一個社團檢查 一社團 = CLUBCheckDic[scj.RefClubID];
        //        //是否為學生
        //        if (!StudentDic.ContainsKey(StudentID))
        //            continue;
        //        一名學生 一學生 = StudentDic[StudentID];
        //        if (grade_yearList.Contains(一學生.grade_year))
        //        {
        //            ran.AllocationSucceeds = true;
        //        }
        //        SetClubGradeYearCount(一社團, 一學生, true);
        //    }
        //}

        private void SetClubGradeYearCount(一個社團檢查 一社團, 一名學生 一學生, bool IncreaseOrDecrease)
        {
            if (一學生.grade_year == "1" || 一學生.grade_year == "7" || 一學生.grade_year == "10")
            {
                if (IncreaseOrDecrease)
                {
                    一社團._Now_ClubStudentCount++;
                    一社團._Now_GradeYear1++;
                }
                else
                {
                    一社團._Now_ClubStudentCount--;
                    一社團._Now_GradeYear1--;
                }
            }
            else if (一學生.grade_year == "2" || 一學生.grade_year == "8" || 一學生.grade_year == "11")
            {
                if (IncreaseOrDecrease)
                {
                    一社團._Now_ClubStudentCount++;
                    一社團._Now_GradeYear2++;
                }
                else
                {
                    一社團._Now_ClubStudentCount--;
                    一社團._Now_GradeYear2--;
                }
            }
            else if (一學生.grade_year == "3" || 一學生.grade_year == "9" || 一學生.grade_year == "12")
            {
                if (IncreaseOrDecrease)
                {
                    一社團._Now_ClubStudentCount++;
                    一社團._Now_GradeYear3++;
                }
                else
                {
                    一社團._Now_ClubStudentCount--;
                    一社團._Now_GradeYear3--;
                }
            }
        }
Example #5
0
        /// <summary>
        /// 傳入分配
        /// </summary>
        private bool Allocation(學生選社亂數檔 ran, int NumberIndex)
        {
            //社團選社資料
            VolunteerRecord vr = ran._record;

            XmlElement xml = XmlHelper.LoadXml(vr.Content);

            //每一個社團
            foreach (XmlElement each in xml.SelectNodes("Club"))
            {
                int index = 0;
                int.TryParse(each.GetAttribute("Index"), out index);
                //當進行第一輪志願分配時
                if (index != NumberIndex)
                {
                    continue;
                }

                string clubID    = each.GetAttribute("Ref_Club_ID");
                string StudentID = vr.RefStudentID;

                //2013/4/8號
                //需建立一個ClubCount字典
                //覆蓋 - 把本期除了鎖定學生之社團記錄清除
                //略過 - 本期的社團記錄不予更動

                //1.須檢查目前系統是否有要加入的社團(例如該社團被選社後刪除)
                //2.目前此社團是否已額滿或目前社團人數為可加入狀態
                if (!CLUBDic.ContainsKey(clubID))
                {
                    continue;
                }

                //不存在社團記錄,表示可以新增
                if (!SCJLockDic.ContainsKey(StudentID))
                {
                    #region  存在社團記錄,表示可以新增
                    SCJoin scj = new SCJoin();
                    一個社團檢查 一社團 = CLUBCheckDic[clubID];

                    if (!一社團.人數未滿)
                    {
                        if (StudentDic.ContainsKey(StudentID))
                        {
                            一名學生 一學生 = StudentDic[StudentID];
                            sb_Log.AppendLine(string.Format("序號「{0}」班級「{1}」學生「{2}」開始進行第「{3}」志願分配", ran._Index, 一學生.class_name, 一學生.student_name, NumberIndex.ToString()));
                            sb_Log.AppendLine(string.Format("分配失敗原因:社團「{0}」人數已滿", 一社團._ClubObj.ClubName));
                            sb_Log.AppendLine("");
                            return(false);
                        }
                    }

                    if (StudentDic.ContainsKey(StudentID))
                    {
                        一名學生 一學生 = StudentDic[StudentID];
                        //序號「{0}」  ran._Index
                        sb_Log.AppendLine(string.Format("序號「{0}」班級「{1}」學生「{2}」開始進行第「{3}」志願分配", ran._Index, 一學生.class_name, 一學生.student_name, NumberIndex.ToString()));

                        //你必須是本社團科別限制之學生
                        //Count大於0,表示有科別限制
                        if (一社團.DeptList.Count > 0)
                        {
                            if (!一社團.DeptList.Contains(一學生.dept_name))
                            {
                                sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」受到科別限制「{1}」", 一社團._ClubObj.ClubName, 一學生.dept_name));
                                sb_Log.AppendLine("");
                                //本社團選社失敗
                                continue;
                            }
                        }

                        if (一社團.男女限制 == 一學生.gender || 一社團.男女限制 == GetVolunteerData.男女.限制)
                        {
                            if (一學生.grade_year == "1" || 一學生.grade_year == "7" || 一學生.grade_year == "10")
                            {
                                if (一社團.一年級未滿)
                                {
                                    scj.RefClubID    = clubID;
                                    scj.RefStudentID = StudentID;

                                    一社團._Now_ClubStudentCount++;
                                    一社團._Now_GradeYear1++;

                                    sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName));
                                    sb_Log.AppendLine("");
                                    InsertList1.Add(scj);
                                    return(true);
                                }
                                else
                                {
                                    sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year));
                                    sb_Log.AppendLine("");
                                }
                            }
                            else if (一學生.grade_year == "2" || 一學生.grade_year == "8" || 一學生.grade_year == "11")
                            {
                                if (一社團.二年級未滿)
                                {
                                    scj.RefClubID    = clubID;
                                    scj.RefStudentID = StudentID;

                                    一社團._Now_ClubStudentCount++;
                                    一社團._Now_GradeYear2++;

                                    sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName));
                                    sb_Log.AppendLine("");
                                    InsertList1.Add(scj);
                                    return(true);
                                }
                                else
                                {
                                    sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year));
                                    sb_Log.AppendLine("");
                                }
                            }
                            else if (一學生.grade_year == "3" || 一學生.grade_year == "9" || 一學生.grade_year == "12")
                            {
                                if (一社團.年級未滿)
                                {
                                    scj.RefClubID    = clubID;
                                    scj.RefStudentID = StudentID;

                                    一社團._Now_ClubStudentCount++;
                                    一社團._Now_GradeYear3++;

                                    sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName));
                                    sb_Log.AppendLine("");
                                    InsertList1.Add(scj);
                                    return(true);
                                }
                                else
                                {
                                    sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year));
                                    sb_Log.AppendLine("");
                                }
                            }
                            else
                            {
                                sb_Log.AppendLine(string.Format("分配社團「{0}」失敗,未符合年級設定", 一社團._ClubObj.ClubName));
                                sb_Log.AppendLine("");
                            }
                        }
                        else
                        {
                            sb_Log.AppendLine(string.Format("分配社團「{0}」失敗,未符合男女限制「{1}」", 一社團._ClubObj.ClubName, 一社團.男女限制));
                            sb_Log.AppendLine("");
                        }
                    }
                    #endregion
                }
                else //已存在,要判斷是覆蓋還是略過
                {
                    #region 已存在,要判斷是覆蓋還是略過
                    //已有社團記錄時 - 覆蓋
                    if (By_V.已有社團記錄時)
                    {
                        #region 覆蓋
                        SCJoin scj_del = SCJLockDic[StudentID];

                        if (!scj_del.Lock)
                        {
                            #region 未鎖定
                            //新增一筆資料
                            SCJoin scj = new SCJoin();

                            //因為覆蓋所以 - 列入刪除
                            if (!DeleteList.Contains(scj_del))
                            {
                                DeleteList.Add(scj_del);
                            }

                            一個社團檢查 一社團 = CLUBCheckDic[clubID];
                            if (!一社團.人數未滿)
                            {
                                if (StudentDic.ContainsKey(StudentID))
                                {
                                    一名學生 一學生 = StudentDic[StudentID];
                                    sb_Log.AppendLine(string.Format("序號「{0}」班級「{1}」學生「{2}」開始進行第「{3}」志願分配", ran._Index, 一學生.class_name, 一學生.student_name, NumberIndex.ToString()));
                                    sb_Log.AppendLine(string.Format("分配失敗原因:社團「{0}」人數已滿", 一社團._ClubObj.ClubName));
                                    sb_Log.AppendLine("");
                                    return(false);
                                }
                            }

                            if (StudentDic.ContainsKey(StudentID))
                            {
                                一名學生 一學生 = StudentDic[StudentID];

                                string clubName = "";
                                if (CLUBDic.ContainsKey(scj_del.RefClubID))
                                {
                                    clubName = CLUBDic[scj_del.RefClubID].ClubName;
                                }
                                //序號「{0}」  ran._Index
                                sb_Log.AppendLine(string.Format("序號「{0}」班級「{1}」學生「{2}」開始進行第「{3}」志願分配", ran._Index, 一學生.class_name, 一學生.student_name, NumberIndex.ToString()));
                                sb_Log.AppendLine(string.Format("已是社團「{0}」參與學生,因「未被鎖定」將進行重新分配", clubName));

                                //你必須是本社團科別限制之學生
                                //Count大於0,表示有科別限制
                                if (一社團.DeptList.Count > 0)
                                {
                                    if (!一社團.DeptList.Contains(一學生.dept_name))
                                    {
                                        sb_Log.AppendLine(string.Format("社團「{0}」分配失敗!原因:志願「{1}」受到科別限制「{2}」", 一社團._ClubObj.ClubName, NumberIndex, 一學生.dept_name));
                                        sb_Log.AppendLine("");
                                        //本社團選社失敗
                                        continue;
                                    }
                                }

                                if (一社團.男女限制 == 一學生.gender || 一社團.男女限制 == GetVolunteerData.男女.限制)
                                {
                                    if (一學生.grade_year == "1" || 一學生.grade_year == "7" || 一學生.grade_year == "10")
                                    {
                                        if (一社團.一年級未滿)
                                        {
                                            scj.RefStudentID = StudentID;
                                            scj.RefClubID    = clubID;

                                            一社團._Now_ClubStudentCount++;
                                            一社團._Now_GradeYear1++;

                                            InsertList2.Add(scj);

                                            sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName));
                                            sb_Log.AppendLine("");

                                            return(true);
                                        }
                                        else
                                        {
                                            sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year));
                                            sb_Log.AppendLine("");
                                        }
                                    }
                                    else if (一學生.grade_year == "2" || 一學生.grade_year == "8" || 一學生.grade_year == "11")
                                    {
                                        if (一社團.二年級未滿)
                                        {
                                            scj.RefStudentID = StudentID;
                                            scj.RefClubID    = clubID;

                                            一社團._Now_ClubStudentCount++;
                                            一社團._Now_GradeYear2++;

                                            InsertList2.Add(scj);

                                            sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName));
                                            sb_Log.AppendLine("");
                                            return(true);
                                        }
                                        else
                                        {
                                            sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year));
                                            sb_Log.AppendLine("");
                                        }
                                    }
                                    else if (一學生.grade_year == "3" || 一學生.grade_year == "9" || 一學生.grade_year == "12")
                                    {
                                        if (一社團.年級未滿)
                                        {
                                            scj.RefStudentID = StudentID;
                                            scj.RefClubID    = clubID;

                                            一社團._Now_ClubStudentCount++;
                                            一社團._Now_GradeYear3++;

                                            sb_Log.AppendLine(string.Format("已入選社團「{0}」", 一社團._ClubObj.ClubName));
                                            sb_Log.AppendLine("");

                                            InsertList2.Add(scj);
                                            return(true);
                                        }
                                        else
                                        {
                                            sb_Log.AppendLine(string.Format("分配失敗原因:志願「{0}」年級「{1}」人數已滿", 一社團._ClubObj.ClubName, 一學生.grade_year));
                                            sb_Log.AppendLine("");
                                        }
                                    }
                                    else
                                    {
                                        sb_Log.AppendLine(string.Format("分配社團「{0}」失敗,未符合年級設定", 一社團._ClubObj.ClubName));
                                        sb_Log.AppendLine("");
                                    }
                                }
                                else
                                {
                                    sb_Log.AppendLine(string.Format("分配社團「{0}」失敗,未符合男女限制「{1}」", 一社團._ClubObj.ClubName, 一社團.男女限制));
                                    sb_Log.AppendLine("");
                                }
                            }
                            #endregion
                        }
                        else
                        {
                            //取得社團記錄
                            SCJoin scj = SCJLockDic[StudentID];

                            string clubName = "";
                            if (CLUBDic.ContainsKey(scj.RefClubID))
                            {
                                clubName = CLUBDic[scj_del.RefClubID].ClubName;
                            }
                            // 2018/03/08 羿均 同步code
                            //2017/9/1 - 修正Bug
                            //這是多餘的程式邏輯 - By Dylan
                            if (StudentDic.ContainsKey(StudentID))
                            {
                                一名學生 一學生 = StudentDic[StudentID];
                                //序號「{0}」  ran._Index
                                sb_Log.AppendLine(string.Format("序號「{0}」班級「{1}」學生「{2}」開始進行第「{3}」志願分配", ran._Index, 一學生.class_name, 一學生.student_name, NumberIndex.ToString()));
                                sb_Log.AppendLine(string.Format("已是社團「{0}」鎖定學生,將不變更社團", clubName));
                                sb_Log.AppendLine("");

                                return(true);
                            }
                            #region 鎖定
                            //一個社團檢查 一社團 = CLUBCheckDic[scj_del.RefClubID];

                            //if (StudentDic.ContainsKey(StudentID))
                            //{
                            //    一名學生 一學生 = StudentDic[StudentID];

                            //    if (一學生.grade_year == "1" || 一學生.grade_year == "7" || 一學生.grade_year == "10")
                            //    {
                            //        一社團._Now_ClubStudentCount++;
                            //        一社團._Now_GradeYear1++;
                            //        return true;

                            //    }
                            //    else if (一學生.grade_year == "2" || 一學生.grade_year == "8" || 一學生.grade_year == "11")
                            //    {
                            //        一社團._Now_ClubStudentCount++;
                            //        一社團._Now_GradeYear2++;
                            //        return true;

                            //    }
                            //    else if (一學生.grade_year == "3" || 一學生.grade_year == "9" || 一學生.grade_year == "12")
                            //    {
                            //        一社團._Now_ClubStudentCount++;
                            //        一社團._Now_GradeYear3++;
                            //        return true;

                            //    }
                            //}
                            #endregion
                        }
                        #endregion
                    }
                    else
                    {
                        //2017/9/1 - 修正Bug
                        //這是多餘的程式邏輯 - By Dylan
                        #region 略過
                        //取得社團記錄
                        SCJoin scj = SCJLockDic[StudentID];

                        string clubName = "";
                        if (CLUBDic.ContainsKey(scj.RefClubID))
                        {
                            clubName = CLUBDic[scj.RefClubID].ClubName;
                        }

                        if (StudentDic.ContainsKey(StudentID))
                        {
                            一名學生 一學生 = StudentDic[StudentID];

                            //序號「{0}」  ran._Index
                            sb_Log.AppendLine(string.Format("目前設定:「略過」已入選學生,序號「{0}」學生「{1}」社團「{2}」將不變更", ran._Index, 一學生.student_name, clubName));
                            sb_Log.AppendLine("");

                            return(true);

                            //if (一學生.grade_year == "1" || 一學生.grade_year == "7" || 一學生.grade_year == "10")
                            //{
                            //    一社團._Now_ClubStudentCount++;
                            //    一社團._Now_GradeYear1++;
                            //    return true;

                            //}
                            //else if (一學生.grade_year == "2" || 一學生.grade_year == "8" || 一學生.grade_year == "11")
                            //{
                            //    一社團._Now_ClubStudentCount++;
                            //    一社團._Now_GradeYear2++;
                            //    return true;

                            //}
                            //else if (一學生.grade_year == "3" || 一學生.grade_year == "9" || 一學生.grade_year == "12")
                            //{
                            //    一社團._Now_ClubStudentCount++;
                            //    一社團._Now_GradeYear3++;
                            //    return true;

                            //}
                        }
                        #endregion
                    }
                    #endregion
                }
            }
            //選社失敗
            return(false);
        }