/// <summary> /// 取得學生清單 /// </summary> public Dictionary <string, OnlineStudent> GetStuentList(Connection me, Dictionary <string, OnlineSCJoin> SCJoinDic) { Envelope rsp = me.SendRequest("_.GetStudentsCanChoose", new Envelope(RunService.GetRequest(null, null))); XElement students = XElement.Parse(rsp.Body.XmlString); Dictionary <string, OnlineStudent> StudentDic = new Dictionary <string, OnlineStudent>(); foreach (XElement stud in students.Elements("Student")) { OnlineStudent os = new OnlineStudent(stud); os.School = me.AccessPoint.Name; if (!StudentDic.ContainsKey(os.Id)) { StudentDic.Add(os.Id, os); } //是否有社團參與記錄 if (SCJoinDic.ContainsKey(os.Id)) { os.原有社團 = SCJoinDic[os.Id]; } } return(StudentDic); }
/// <summary> /// 學生是否符合本社團資格 /// </summary> public string EligibilityCheck(OnlineStudent oStudent) { List <string> list = new List <string>(); string message = ""; //科別是否符合 message = CheckDept(oStudent); if (!string.IsNullOrEmpty(message)) { list.Add(message); } //男女是否符合 message = CheckGender(oStudent); if (!string.IsNullOrEmpty(message)) { list.Add(message); } //人數是否已達上限 message = CheckLimit(oStudent); if (!string.IsNullOrEmpty(message)) { list.Add(message); } return(string.Join(",", list)); }
/// <summary> /// 開始進行志願序資料整合 /// </summary> public void 開始進行志願序資料整合() { //整理志願序資料 foreach (OnlineVolunteer each in VolunteerList) { if (StudentDic.ContainsKey(each.RefStudentId)) { //學生 OnlineStudent OnlineStud = StudentDic[each.RefStudentId]; if (!string.IsNullOrEmpty(each.Content)) { XmlElement xml = DSXmlHelper.LoadXml(each.Content); int ClubNumber = 1; foreach (XmlElement node in xml.SelectNodes("Club")) { if (node.GetAttribute("Index") == ClubNumber.ToString()) { string clubID = node.GetAttribute("Ref_Club_ID"); if (ClubDic.ContainsKey(clubID)) { //社團 OnlineClub OnlineClub = ClubDic[clubID]; if (!OnlineStud.VolunteerList.ContainsKey(ClubNumber)) { OnlineStud.VolunteerList.Add(ClubNumber, OnlineClub); } } } ClubNumber++; } } } } }
private int SortMergeList(OnlineStudent s1, OnlineStudent s2) { string ss1 = s1.SeatNo.PadLeft(3, '0'); string ss2 = s2.SeatNo.PadLeft(3, '0'); return(ss1.CompareTo(ss2)); }
/// <summary> /// 檢查科別 /// </summary> private string CheckDept(OnlineStudent oStudent) { if (DeptRestrict.Count > 0) //無科別限制 { if (!DeptRestrict.Contains(oStudent.DeptName)) //不包含在內,即為科別不符 { return("科別不符"); } } return(""); }
/// <summary> /// 檢查男女生 /// </summary> private string CheckGender(OnlineStudent oStudent) { if (!string.IsNullOrEmpty(GenderRestrict)) { if (oStudent.Gender != GenderRestrict) { return("男女性別不符"); } } return(""); }
/// <summary> /// 減少人數 /// </summary> public void Decrease(OnlineStudent student) { if (student.GradeYear == "1" || student.GradeYear == "4" || student.GradeYear == "7" || student.GradeYear == "10") { Grade1.SetDecrease(student.School, 1); } else if (student.GradeYear == "2" || student.GradeYear == "5" || student.GradeYear == "8" || student.GradeYear == "11") { Grade2.SetDecrease(student.School, 1); } else if (student.GradeYear == "3" || student.GradeYear == "6" || student.GradeYear == "9" || student.GradeYear == "12") { Grade3.SetDecrease(student.School, 1); } NowStudentCount--; }
/// <summary> /// 檢查人數上限 /// </summary> private string CheckLimit(OnlineStudent oStudent) { if (tool.CheckValue(Limit)) { if (int.Parse(Limit) <= NowStudentCount) { return("總人數已達上限"); } } string message = oStudent.GradeYear + "年級人數已達上限"; if (oStudent.GradeYear == "1" || oStudent.GradeYear == "4" || oStudent.GradeYear == "7" || oStudent.GradeYear == "10") { if (tool.CheckValue(Grade1Limit)) { if (int.Parse(Grade1Limit) <= Now_Grade1Limit) { return(message); } } } else if (oStudent.GradeYear == "2" || oStudent.GradeYear == "5" || oStudent.GradeYear == "8" || oStudent.GradeYear == "11") { if (tool.CheckValue(Grade2Limit)) { if (int.Parse(Grade2Limit) <= Now_Grade2Limit) { return(message); } } } else if (oStudent.GradeYear == "3" || oStudent.GradeYear == "6" || oStudent.GradeYear == "9" || oStudent.GradeYear == "12") { if (tool.CheckValue(Grade3Limit)) { if (int.Parse(Grade3Limit) <= Now_Grade3Limit) { return(message); } } } return(""); }
/// <summary> /// 學生亂數排序 /// </summary> private int SortStudent(OnlineStudent os1, OnlineStudent os2) { return(os1.Random_Number.CompareTo(os2.Random_Number)); }
/// <summary> /// 進行學生的志願分配 /// </summary> private void VolunteersDistributor(OnlineStudent oStudent, int Number, bool IsStep1) { string message = ""; if (oStudent.VolunteerList.Count != 0) { //如果學生身上有此志願,無此志願則視為選社失敗 if (oStudent.VolunteerList.ContainsKey(Number)) { OnlineClub oc = oStudent.VolunteerList[Number]; if (IsStep1) //高優先權 { if (oc.ClubName == oStudent.LastClubName) { #region 如果共同資源包含本社團 if (MergerClubDic.ContainsKey(oc.ClubName)) { OnlineMergerClub Mclub = MergerClubDic[oc.ClubName]; //不符資格,將帶有錯誤訊息 oStudent.ErrorMessage = Mclub.EligibilityCheck(oStudent); //符合資格 if (string.IsNullOrEmpty(oStudent.ErrorMessage)) { //符合資格 oStudent.SuccessSetupClub(Mclub); LogAssignRecord lar = new LogAssignRecord(); if (string.IsNullOrEmpty(LoginSchoolDic[oStudent.School])) { lar.部別 = oStudent.School + "(" + LoginSchoolDic[oStudent.School] + ")"; } else { lar.部別 = oStudent.School; } lar.班級 = oStudent.ClassName; lar.姓名 = oStudent.Name; lar.座號 = oStudent.SeatNo; lar.志願 = Number.ToString(); lar.社團名稱 = Mclub.ClubName; lar.其它 = "(高優先學生)"; LogDic.Add(lar); } } #endregion } } else //第二優先權 { #region 如果共同資源包含本社團 if (MergerClubDic.ContainsKey(oc.ClubName)) { OnlineMergerClub Mclub = MergerClubDic[oc.ClubName]; //不符資格,將帶有錯誤訊息 oStudent.ErrorMessage = Mclub.EligibilityCheck(oStudent); //符合資格 if (string.IsNullOrEmpty(oStudent.ErrorMessage)) { //符合資格 oStudent.SuccessSetupClub(Mclub); LogAssignRecord lar = new LogAssignRecord(); lar.部別 = GetSchoolName(oStudent.School); lar.班級 = oStudent.ClassName; lar.姓名 = oStudent.Name; lar.座號 = oStudent.SeatNo; lar.志願 = Number.ToString(); lar.社團名稱 = Mclub.ClubName; lar.其它 = ""; LogDic.Add(lar); } } #endregion } } } }