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); }
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); } } } }
//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--; } } }
/// <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); }