/// <summary> /// 處理獎勵紀錄 /// </summary> /// <param name="studentObj"></param> /// <param name="gradeMap"></param> /// <param name="meritsObj"></param> private decimal Cal_Merit(ValueObj.StudentVO studentObj, Dictionary<int, ValueObj.SchoolYearSemester> gradeMap, ValueObj.MeritsVO meritsObj) { int ItemIndex = Global.index_Merit; // 取得大項目的條件 ValueObj.ItemConditionVO itemCondition = new ValueObj.ItemConditionVO(ItemIndex); // 取得子項目的條件 ValueObj.DetailItemConditionVO detailCondition = new ValueObj.DetailItemConditionVO(ItemIndex); // 取得需要看的學年度學期 List<ValueObj.SchoolYearSemester> needSchoolYearList = Utility.GetNeedSchoolSemester(itemCondition.NeedSemester, gradeMap); // 大項目名稱 string itemName = itemCondition.ItemName; // 項目的積分 decimal ItemTotalPoints = 0; decimal[] meritCount = new decimal[Global.DetailItemNameList[ItemIndex].Length]; if (meritsObj != null) { // loop 每個學期分數的大功, 小功, 獎勵 foreach (ValueObj.SchoolYearSemester schoolYear in needSchoolYearList) { if (schoolYear == null) continue; List<Data.MeritRecord> meritList = meritsObj.GetMeritsBySchoolYear(schoolYear); foreach (Data.MeritRecord rec in meritList) { if(rec.MeritA.HasValue) meritCount[0] += rec.MeritA.Value; if(rec.MeritB.HasValue) meritCount[1] += rec.MeritB.Value; if(rec.MeritC.HasValue) meritCount[2] += rec.MeritC.Value; } } } // loop 每個子項目 for (int intI = 0; intI < Global.DetailItemNameList[ItemIndex].Length; intI++) { // 子項目名稱 string meritName = Global.DetailItemNameList[ItemIndex][intI]; // 子項目積分 decimal points = detailCondition.DetailItemListDic[meritName]; // 取得detail item in student ValueObj.DetailItemVO detailItem = studentObj.DetailItemList[itemName][meritName]; // 計算積分 decimal mixPoints = meritCount[intI] * points; // 回存此項目顯示的內容 detailItem.Value = "Points:" + points + " Counts:" + meritCount[intI].ToString(); // 回存此項目的積分 detailItem.Points = mixPoints; // 加總 ItemTotalPoints += mixPoints; } // 假如超過上限, 就以上限為主 ItemTotalPoints = (ItemTotalPoints > itemCondition.MaxItemPoints) ? itemCondition.MaxItemPoints : ItemTotalPoints; // 此學生在這個項目的積分 studentObj.ItemList[itemName] = ItemTotalPoints; return ItemTotalPoints; }
/// <summary> /// 處理德行表現 /// </summary> /// <param name="studentObj"></param> /// <param name="gradeMap"></param> /// <param name="clubsObj"></param> /// <param name="servicesObj"></param> private decimal Cal_VirtuousConduct(ValueObj.StudentVO studentObj, Dictionary<int, ValueObj.SchoolYearSemester> gradeMap, ValueObj.ClubsVO clubsObj, ValueObj.ServicesVO servicesObj) { int ItemIndex = Global.index_VirtuousConduct; // 取得大項目的條件 ValueObj.ItemConditionVO itemCondition = new ValueObj.ItemConditionVO(ItemIndex); // 取得子項目的條件 ValueObj.DetailItemConditionVO detailCondition = new ValueObj.DetailItemConditionVO(ItemIndex); // 取得需要看的學年度學期 List<ValueObj.SchoolYearSemester> needSchoolYearList = Utility.GetNeedSchoolSemester(itemCondition.NeedSemester, gradeMap); // 大項目名稱 string itemName = itemCondition.ItemName; decimal ItemTotalPoints = 0; #region 處理社團 // 社團名稱 string detailItemName = Global.DetailItemNameList[ItemIndex][0]; // 社團積分 decimal clubPoints = detailCondition.DetailItemListDic[detailItemName]; decimal clubTotalPoints = 0; if (clubsObj != null) { // loop 每個學期 foreach (ValueObj.SchoolYearSemester schoolYear in needSchoolYearList) { if (schoolYear == null) continue; List<ValueObj.ClubVO> clubList = clubsObj.GetClubsBySchoolYear(schoolYear); // 假如有參加過社團, +1分 if (clubList.Count > 0) clubTotalPoints += 1; } } // 取得detail item in student ValueObj.DetailItemVO detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 回存此項目顯示的內容 detailItem.Value = "Count:" + clubTotalPoints.ToString(); // 假如超過上限, 就以上限為主 clubPoints = (clubTotalPoints > clubPoints) ? clubPoints : clubTotalPoints; // 回存此項目的積分 detailItem.Points = clubPoints; #endregion #region 處理服務學習 decimal ServiceHours = 6; // 服務學習名稱 detailItemName = Global.DetailItemNameList[ItemIndex][1]; // 服務學習積分 decimal servicePoints = detailCondition.DetailItemListDic[detailItemName]; decimal serviceTotalPoints = 0; // 特殊條件 // 取得三下的學年度學期 ValueObj.SchoolYearSemester specilSchoolYear = gradeMap[6]; // 截止時間 103/5/9 DateTime deadTime = new DateTime(2014, 5, 9); if(servicesObj != null) { // loop 每個學期 foreach (ValueObj.SchoolYearSemester schoolYear in needSchoolYearList) { if (schoolYear == null) continue; decimal hours = 0; List<ValueObj.ServiceVO> serviceList = servicesObj.GetServicesBySchoolYear(schoolYear); // 加總此學期的時數 foreach(var serviceObj in serviceList) { if (schoolYear == specilSchoolYear) { if (serviceObj.OccurTime.HasValue && (serviceObj.OccurTime.Value <= deadTime)) hours += serviceObj.Hours; } else hours += serviceObj.Hours; } // 假如超過6小時, +1分 if (hours >= ServiceHours) serviceTotalPoints += 1; } } // 取得detail item in student detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 回存此項目顯示的內容 detailItem.Value = "Count:" + serviceTotalPoints.ToString(); // 假如超過上限, 就以上限為主 servicePoints = (serviceTotalPoints > servicePoints) ? servicePoints : serviceTotalPoints; // 回存此項目的積分 detailItem.Points = servicePoints; #endregion ItemTotalPoints = clubPoints + servicePoints; // 此學生在這個項目的積分 studentObj.ItemList[itemName] = ItemTotalPoints; return ItemTotalPoints; }
/// <summary> /// 處理無記過紀錄 /// </summary> /// <param name="studentObj"></param> /// <param name="gradeMap"></param> /// <param name="demeritObj"></param> private decimal Cal_Demerit(ValueObj.StudentVO studentObj, Dictionary<int, ValueObj.SchoolYearSemester> gradeMap, ValueObj.DemeritsVO demeritObj) { int ItemIndex = Global.index_Demerit; // 取得大項目的條件 ValueObj.ItemConditionVO itemCondition = new ValueObj.ItemConditionVO(ItemIndex); // 取得子項目的條件 ValueObj.DetailItemConditionVO detailCondition = new ValueObj.DetailItemConditionVO(ItemIndex); // 取得需要看的學年度學期 List<ValueObj.SchoolYearSemester> needSchoolYearList = Utility.GetNeedSchoolSemester(itemCondition.NeedSemester, gradeMap); // 大項目名稱 string itemName = itemCondition.ItemName; decimal ItemTotalPoints = 0; #region 處理無記過紀錄 // 無記過紀錄名稱 string detailItemName = Global.DetailItemNameList[ItemIndex][0]; // 無記過紀錄積分 decimal noDemeritPoints = detailCondition.DetailItemListDic[detailItemName]; if (demeritObj != null) { foreach (ValueObj.SchoolYearSemester schoolYear in needSchoolYearList) { if (schoolYear == null) continue; int demeritCnt = demeritObj.GetDemeritsBySchoolYear(schoolYear).Count; // 其中有一個學期被記過或警告, 就為0分 if (demeritCnt > 0) { noDemeritPoints = 0; break; } } } // 取得detail item in student ValueObj.DetailItemVO detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 回存此項目顯示的內容 detailItem.Value = "--"; // 回存此項目的積分 detailItem.Points = noDemeritPoints; #endregion if (noDemeritPoints > 0 ) { // 回存此項目顯示的內容 detailItem.Value = "無記過紀錄!"; studentObj.ItemList[itemName] = noDemeritPoints; // 不處理無小過以上記錄 return noDemeritPoints; } #region 處理無小過以上記錄 int MaxDemeritCount = 3; // 無小過以上記錄名稱 detailItemName = Global.DetailItemNameList[ItemIndex][1]; // 無小過以上記錄積分 decimal demeritPoints = detailCondition.DetailItemListDic[detailItemName]; // loop 每個學期, 取得所有的大過, 小過, 警告 decimal[] Demerit = new decimal[3]; foreach (ValueObj.SchoolYearSemester schoolYear in needSchoolYearList) { if (schoolYear == null) continue; List<Data.DemeritRecord> demeritList = demeritObj.GetDemeritsBySchoolYear(schoolYear); foreach(Data.DemeritRecord rec in demeritList) { if(rec.DemeritA.HasValue) Demerit[0] = rec.DemeritA.Value; if(rec.DemeritB.HasValue) Demerit[1] = rec.DemeritB.Value; if(rec.DemeritC.HasValue) Demerit[2] += rec.DemeritC.Value; } } if (Demerit[0] > 0 || Demerit[1] >0 ) { // 此學生在這個項目的積分 ItemTotalPoints = 0; } else { // 看警告有沒有超過三次 if (Demerit[2] >= MaxDemeritCount) ItemTotalPoints = 0; else ItemTotalPoints = demeritPoints; } // 取得detail item in student detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 回存此項目顯示的內容 detailItem.Value = "大過:" + Demerit[0] + ", 小過:" + Demerit[1] + ", 警告:" + Demerit[2]; // 回存此項目的積分 detailItem.Points = ItemTotalPoints; #endregion // 此學生在這個項目的積分 studentObj.ItemList[itemName] = ItemTotalPoints; return ItemTotalPoints; }
/// <summary> /// 處理均衡學習 /// </summary> /// <param name="studentObj"></param> /// <param name="gradeMap"></param> /// <param name="domains"></param> private decimal Cal_BalanceLearning(ValueObj.StudentVO studentObj, Dictionary<int, ValueObj.SchoolYearSemester> gradeMap, ValueObj.DomainsVO domains) { int ItemIndex = Global.index_BalanceLearning; // 取得大項目的條件 ValueObj.ItemConditionVO itemCondition = new ValueObj.ItemConditionVO(ItemIndex); // 取得子項目的條件 ValueObj.DetailItemConditionVO detailCondition = new ValueObj.DetailItemConditionVO(ItemIndex); // 取得需要看的學年度學期 Dictionary<int, ValueObj.SchoolYearSemester> needSchoolYearList = Utility.GetNeedSchoolSemesterIndex(itemCondition.NeedSemester, gradeMap); // 大項目名稱 string itemName = itemCondition.ItemName; // 及格分數 decimal PassScore = 60; // 項目的積分 decimal ItemTotalPoints = 0; if (domains != null) { // loop 每個需要的領域 for (int intI = 0; intI < Global.DetailItemNameList[ItemIndex].Length; intI++) { // 子項目名稱 string detailItemName = Global.DetailItemNameList[ItemIndex][intI]; // 子項目積分 decimal points = detailCondition.DetailItemListDic[detailItemName]; decimal totalScore = 0; decimal avgScore = 0; decimal scoreCount = 0; // loop 領域的每個學期分數 foreach (KeyValuePair<int, ValueObj.SchoolYearSemester> pair in needSchoolYearList) { ValueObj.SchoolYearSemester schoolYear = pair.Value; if (schoolYear == null) { // 少了需要的學期 if (!_WarningStudentDic.ContainsKey(studentObj)) _WarningStudentDic.Add(studentObj, new ValueObj.LackMsg()); _WarningStudentDic[studentObj].AddHistoryLack(pair.Key); continue; } List<ValueObj.DomainVO> domainList = domains.GetDomainsBySechoolYear(schoolYear, detailItemName); if (domainList.Count == 0) { // 少了需要的領域 if (!_WarningStudentDic.ContainsKey(studentObj)) _WarningStudentDic.Add(studentObj, new ValueObj.LackMsg()); _WarningStudentDic[studentObj].AddDomainLack(pair.Key); continue; } foreach (ValueObj.DomainVO domain in domainList) { totalScore += domain.DomainScore; scoreCount++; } } // 取得detail item in student ValueObj.DetailItemVO detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 領域的平均 // 原本是固定除以需要的學期, 這樣有少一個學期分數的話, 會很難看, 所以改成有幾個分數就除以幾 // avgScore = Math.Round((totalScore / needSchoolYearList.Count), 2, MidpointRounding.AwayFromZero); if (scoreCount > 0) avgScore = Math.Round((totalScore / scoreCount), 2, MidpointRounding.AwayFromZero); // 回存此項目顯示的內容 detailItem.Value = "總分: " + totalScore + ", 學期數: " + scoreCount + ", 平均: " + avgScore.ToString(); // 看學生有沒有得到此積分 if (avgScore >= PassScore) { ItemTotalPoints += points; // 回存此項目的積分 detailItem.Points = points; } } } else { // 完全沒有領域成績 if (!_WarningStudentDic.ContainsKey(studentObj)) _WarningStudentDic.Add(studentObj, new ValueObj.LackMsg()); foreach(int rec in needSchoolYearList.Keys) _WarningStudentDic[studentObj].AddDomainLack(rec); } // 假如超過上限, 就以上限為主 ItemTotalPoints = (ItemTotalPoints > itemCondition.MaxItemPoints) ? itemCondition.MaxItemPoints : ItemTotalPoints; // 此學生在這個項目的積分 studentObj.ItemList[itemName] = ItemTotalPoints; return ItemTotalPoints; }
/// <summary> /// 處理扶助弱勢 /// </summary> /// <param name="studentObj"></param> /// <param name="tagIdList"></param> private decimal Cal_VulnerableGroups(ValueObj.StudentVO studentObj, Dictionary<string, List<string>> tagIdList) { int ItemIndex = Global.index_VulnerableGroups; // 取得大項目的條件 ValueObj.ItemConditionVO itemCondition = new ValueObj.ItemConditionVO(ItemIndex); // 取得子項目的條件 ValueObj.DetailItemConditionVO detailCondition = new ValueObj.DetailItemConditionVO(ItemIndex); // 大項目名稱 string itemName = itemCondition.ItemName; // 項目的積分 decimal ItemTotalPoints = 0; // loop 每個子項目 for (int intI = 0; intI < Global.DetailItemNameList[ItemIndex].Length; intI++) { // 子項目名稱 string detailItemName = Global.DetailItemNameList[ItemIndex][intI]; // 子項目積分 decimal points = detailCondition.DetailItemListDic[detailItemName]; // 看學生的類別有沒有在TagIdList bool isFound = Utility.IsContansTagId(studentObj.StudentTagId, tagIdList[detailItemName]); if (isFound == false) { points = 0; } // 取得detail item in student ValueObj.DetailItemVO detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 回存此項目顯示的內容 detailItem.Value = "TagID: " + string.Join(",", tagIdList[detailItemName].ToArray()); // 回存此項目的積分 detailItem.Points = points; // 加總 ItemTotalPoints += points; } // 假如超過上限, 就以上限為主 ItemTotalPoints = (ItemTotalPoints > itemCondition.MaxItemPoints) ? itemCondition.MaxItemPoints : ItemTotalPoints; // 此學生在這個項目的積分 studentObj.ItemList[itemName] = ItemTotalPoints; return ItemTotalPoints; }
/// <summary> /// 處理無記過紀錄 /// </summary> /// <param name="studentObj"></param> /// <param name="gradeMap"></param> /// <param name="demeritObj"></param> private decimal Cal_Demerit(ValueObj.StudentVO studentObj, Dictionary <int, ValueObj.SchoolYearSemester> gradeMap, ValueObj.DemeritsVO demeritObj) { int ItemIndex = Global.index_Demerit; // 取得大項目的條件 ValueObj.ItemConditionVO itemCondition = new ValueObj.ItemConditionVO(ItemIndex); // 取得子項目的條件 ValueObj.DetailItemConditionVO detailCondition = new ValueObj.DetailItemConditionVO(ItemIndex); // 取得需要看的學年度學期 List <ValueObj.SchoolYearSemester> needSchoolYearList = Utility.GetNeedSchoolSemester(itemCondition.NeedSemester, gradeMap); // 大項目名稱 string itemName = itemCondition.ItemName; decimal ItemTotalPoints = 0; #region 處理無記過紀錄 // 無記過紀錄名稱 string detailItemName = Global.DetailItemNameList[ItemIndex][0]; // 無記過紀錄積分 decimal noDemeritPoints = detailCondition.DetailItemListDic[detailItemName]; if (demeritObj != null) { foreach (ValueObj.SchoolYearSemester schoolYear in needSchoolYearList) { if (schoolYear == null) { continue; } int demeritCnt = demeritObj.GetDemeritsBySchoolYear(schoolYear).Count; // 其中有一個學期被記過或警告, 就為0分 if (demeritCnt > 0) { noDemeritPoints = 0; break; } } } // 取得detail item in student ValueObj.DetailItemVO detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 回存此項目顯示的內容 detailItem.Value = "--"; // 回存此項目的積分 detailItem.Points = noDemeritPoints; #endregion if (noDemeritPoints > 0) { // 回存此項目顯示的內容 detailItem.Value = "無記過紀錄!"; studentObj.ItemList[itemName] = noDemeritPoints; // 不處理無小過以上記錄 return(noDemeritPoints); } #region 處理無小過以上記錄 int MaxDemeritCount = 3; // 無小過以上記錄名稱 detailItemName = Global.DetailItemNameList[ItemIndex][1]; // 無小過以上記錄積分 decimal demeritPoints = detailCondition.DetailItemListDic[detailItemName]; // loop 每個學期, 取得所有的大過, 小過, 警告 decimal[] Demerit = new decimal[3]; foreach (ValueObj.SchoolYearSemester schoolYear in needSchoolYearList) { if (schoolYear == null) { continue; } List <Data.DemeritRecord> demeritList = demeritObj.GetDemeritsBySchoolYear(schoolYear); foreach (Data.DemeritRecord rec in demeritList) { if (rec.DemeritA.HasValue) { Demerit[0] = rec.DemeritA.Value; } if (rec.DemeritB.HasValue) { Demerit[1] = rec.DemeritB.Value; } if (rec.DemeritC.HasValue) { Demerit[2] += rec.DemeritC.Value; } } } if (Demerit[0] > 0 || Demerit[1] > 0) { // 此學生在這個項目的積分 ItemTotalPoints = 0; } else { // 看警告有沒有超過三次 if (Demerit[2] >= MaxDemeritCount) { ItemTotalPoints = 0; } else { ItemTotalPoints = demeritPoints; } } // 取得detail item in student detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 回存此項目顯示的內容 detailItem.Value = "大過:" + Demerit[0] + ", 小過:" + Demerit[1] + ", 警告:" + Demerit[2]; // 回存此項目的積分 detailItem.Points = ItemTotalPoints; #endregion // 此學生在這個項目的積分 studentObj.ItemList[itemName] = ItemTotalPoints; return(ItemTotalPoints); }
/// <summary> /// 處理德行表現 /// </summary> /// <param name="studentObj"></param> /// <param name="gradeMap"></param> /// <param name="clubsObj"></param> /// <param name="servicesObj"></param> private decimal Cal_VirtuousConduct(ValueObj.StudentVO studentObj, Dictionary <int, ValueObj.SchoolYearSemester> gradeMap, ValueObj.ClubsVO clubsObj, ValueObj.ServicesVO servicesObj) { int ItemIndex = Global.index_VirtuousConduct; // 取得大項目的條件 ValueObj.ItemConditionVO itemCondition = new ValueObj.ItemConditionVO(ItemIndex); // 取得子項目的條件 ValueObj.DetailItemConditionVO detailCondition = new ValueObj.DetailItemConditionVO(ItemIndex); // 取得需要看的學年度學期 List <ValueObj.SchoolYearSemester> needSchoolYearList = Utility.GetNeedSchoolSemester(itemCondition.NeedSemester, gradeMap); // 大項目名稱 string itemName = itemCondition.ItemName; decimal ItemTotalPoints = 0; #region 處理社團 // 社團名稱 string detailItemName = Global.DetailItemNameList[ItemIndex][0]; // 社團積分 decimal clubPoints = detailCondition.DetailItemListDic[detailItemName]; decimal clubTotalPoints = 0; if (clubsObj != null) { // loop 每個學期 foreach (ValueObj.SchoolYearSemester schoolYear in needSchoolYearList) { if (schoolYear == null) { continue; } List <ValueObj.ClubVO> clubList = clubsObj.GetClubsBySchoolYear(schoolYear); // 假如有參加過社團, +1分 if (clubList.Count > 0) { clubTotalPoints += 1; } } } // 取得detail item in student ValueObj.DetailItemVO detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 回存此項目顯示的內容 detailItem.Value = "Count:" + clubTotalPoints.ToString(); // 假如超過上限, 就以上限為主 clubPoints = (clubTotalPoints > clubPoints) ? clubPoints : clubTotalPoints; // 回存此項目的積分 detailItem.Points = clubPoints; #endregion #region 處理服務學習 decimal ServiceHours = 6; // 服務學習名稱 detailItemName = Global.DetailItemNameList[ItemIndex][1]; // 服務學習積分 decimal servicePoints = detailCondition.DetailItemListDic[detailItemName]; decimal serviceTotalPoints = 0; // 特殊條件 // 取得三下的學年度學期 ValueObj.SchoolYearSemester specilSchoolYear = gradeMap[6]; // 截止時間 103/5/9 DateTime deadTime = new DateTime(2014, 5, 9); if (servicesObj != null) { // loop 每個學期 foreach (ValueObj.SchoolYearSemester schoolYear in needSchoolYearList) { if (schoolYear == null) { continue; } decimal hours = 0; List <ValueObj.ServiceVO> serviceList = servicesObj.GetServicesBySchoolYear(schoolYear); // 加總此學期的時數 foreach (var serviceObj in serviceList) { if (schoolYear == specilSchoolYear) { if (serviceObj.OccurTime.HasValue && (serviceObj.OccurTime.Value <= deadTime)) { hours += serviceObj.Hours; } } else { hours += serviceObj.Hours; } } // 假如超過6小時, +1分 if (hours >= ServiceHours) { serviceTotalPoints += 1; } } } // 取得detail item in student detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 回存此項目顯示的內容 detailItem.Value = "Count:" + serviceTotalPoints.ToString(); // 假如超過上限, 就以上限為主 servicePoints = (serviceTotalPoints > servicePoints) ? servicePoints : serviceTotalPoints; // 回存此項目的積分 detailItem.Points = servicePoints; #endregion ItemTotalPoints = clubPoints + servicePoints; // 此學生在這個項目的積分 studentObj.ItemList[itemName] = ItemTotalPoints; return(ItemTotalPoints); }
/// <summary> /// 處理均衡學習 /// </summary> /// <param name="studentObj"></param> /// <param name="gradeMap"></param> /// <param name="domains"></param> private decimal Cal_BalanceLearning(ValueObj.StudentVO studentObj, Dictionary <int, ValueObj.SchoolYearSemester> gradeMap, ValueObj.DomainsVO domains) { int ItemIndex = Global.index_BalanceLearning; // 取得大項目的條件 ValueObj.ItemConditionVO itemCondition = new ValueObj.ItemConditionVO(ItemIndex); // 取得子項目的條件 ValueObj.DetailItemConditionVO detailCondition = new ValueObj.DetailItemConditionVO(ItemIndex); // 取得需要看的學年度學期 Dictionary <int, ValueObj.SchoolYearSemester> needSchoolYearList = Utility.GetNeedSchoolSemesterIndex(itemCondition.NeedSemester, gradeMap); // 大項目名稱 string itemName = itemCondition.ItemName; // 及格分數 decimal PassScore = 60; // 項目的積分 decimal ItemTotalPoints = 0; if (domains != null) { // loop 每個需要的領域 for (int intI = 0; intI < Global.DetailItemNameList[ItemIndex].Length; intI++) { // 子項目名稱 string detailItemName = Global.DetailItemNameList[ItemIndex][intI]; // 子項目積分 decimal points = detailCondition.DetailItemListDic[detailItemName]; decimal totalScore = 0; decimal avgScore = 0; decimal scoreCount = 0; // loop 領域的每個學期分數 foreach (KeyValuePair <int, ValueObj.SchoolYearSemester> pair in needSchoolYearList) { ValueObj.SchoolYearSemester schoolYear = pair.Value; if (schoolYear == null) { // 少了需要的學期 if (!_WarningStudentDic.ContainsKey(studentObj)) { _WarningStudentDic.Add(studentObj, new ValueObj.LackMsg()); } _WarningStudentDic[studentObj].AddHistoryLack(pair.Key); continue; } List <ValueObj.DomainVO> domainList = domains.GetDomainsBySechoolYear(schoolYear, detailItemName); if (domainList.Count == 0) { // 少了需要的領域 if (!_WarningStudentDic.ContainsKey(studentObj)) { _WarningStudentDic.Add(studentObj, new ValueObj.LackMsg()); } _WarningStudentDic[studentObj].AddDomainLack(pair.Key); continue; } foreach (ValueObj.DomainVO domain in domainList) { totalScore += domain.DomainScore; scoreCount++; } } // 取得detail item in student ValueObj.DetailItemVO detailItem = studentObj.DetailItemList[itemName][detailItemName]; // 領域的平均 // 原本是固定除以需要的學期, 這樣有少一個學期分數的話, 會很難看, 所以改成有幾個分數就除以幾 // avgScore = Math.Round((totalScore / needSchoolYearList.Count), 2, MidpointRounding.AwayFromZero); if (scoreCount > 0) { avgScore = Math.Round((totalScore / scoreCount), 2, MidpointRounding.AwayFromZero); } // 回存此項目顯示的內容 detailItem.Value = "總分: " + totalScore + ", 學期數: " + scoreCount + ", 平均: " + avgScore.ToString(); // 看學生有沒有得到此積分 if (avgScore >= PassScore) { ItemTotalPoints += points; // 回存此項目的積分 detailItem.Points = points; } } } else { // 完全沒有領域成績 if (!_WarningStudentDic.ContainsKey(studentObj)) { _WarningStudentDic.Add(studentObj, new ValueObj.LackMsg()); } foreach (int rec in needSchoolYearList.Keys) { _WarningStudentDic[studentObj].AddDomainLack(rec); } } // 假如超過上限, 就以上限為主 ItemTotalPoints = (ItemTotalPoints > itemCondition.MaxItemPoints) ? itemCondition.MaxItemPoints : ItemTotalPoints; // 此學生在這個項目的積分 studentObj.ItemList[itemName] = ItemTotalPoints; return(ItemTotalPoints); }