/// <summary> /// 取的Score 看是要用哪一種 回傳不同 /// </summary> /// <returns>定期加平時 or 定期 or 平時</returns> internal decimal?GetScore(IScore socreInfo, EnumScoreComposition EnumScoreComposition) { if (EnumScoreComposition == EnumScoreComposition.成績) { if (socreInfo.ScoreT.HasValue && Program.ScoreValueMap.ContainsKey(socreInfo.ScoreT.Value)) { return(Program.ScoreValueMap[socreInfo.ScoreT.Value].Score); } return(socreInfo.ScoreT); } else if (EnumScoreComposition == EnumScoreComposition.定期成績) { if (socreInfo.ScoreF.HasValue && Program.ScoreValueMap.ContainsKey(socreInfo.ScoreF.Value)) { return(Program.ScoreValueMap[socreInfo.ScoreF.Value].Score); } return(socreInfo.ScoreF); } else if (EnumScoreComposition == EnumScoreComposition.平時成績) // 因目前沒有平時成績排名需求 應該用不到 { if (socreInfo.ScoreA.HasValue && Program.ScoreValueMap.ContainsKey(socreInfo.ScoreA.Value)) { return(Program.ScoreValueMap[socreInfo.ScoreA.Value].Score); } return(socreInfo.ScoreA); } else { return(null); } }
/// <summary> /// 取的算術總分 /// </summary> /// <param name="isContainFlex">是否包含彈性課程</param> /// <param name="scoreType">領域成績 OR 科目成績</param> /// <param name="enumScoreComposition">定期、平時、定期加平時</param> /// <returns></returns> public decimal?GetScoreArithmeticTotal(bool isContainFlex, EnumScoreType scoreType, EnumScoreComposition enumScoreComposition) { Dictionary <string, IScore> dicScoreInfo = new Dictionary <string, IScore>(); // 確認 是哪一種成績要計算 取用不同dictionary if (scoreType == EnumScoreType.領域) { dicScoreInfo = _ExamDomainScoreDict; } else if (scoreType == EnumScoreType.科目) { dicScoreInfo = _ExamSubjectScoreDict; } else if (scoreType == EnumScoreType.參考科目) { dicScoreInfo = _RefExamSubjectScoreDict; } decimal?result = null; decimal?totalScore = null; //if (dicScoreInfo.Count > 0) //如果有成績紀錄(至少有一科) //{ // totalScore = 0; //} if (isContainFlex) { foreach (IScore sc in dicScoreInfo.Values) { if (this.GetScore(sc, enumScoreComposition).HasValue&& sc.Credit.HasValue) { totalScore = (totalScore.HasValue ? totalScore.Value : 0) + GetScore(sc, enumScoreComposition).Value; } } } else { foreach (IScore sc in dicScoreInfo.Values) { // 過濾彈性課程 if (string.IsNullOrEmpty(sc.DomainName) || sc.DomainName == "彈性課程") { continue; } if (this.GetScore(sc, enumScoreComposition).HasValue&& sc.Credit.HasValue) { totalScore = (totalScore.HasValue ? totalScore.Value : 0) + this.GetScore(sc, enumScoreComposition).Value; } } } result = totalScore; return(result); }
/// <summary> /// 取的算術平均 /// </summary> /// <param name="isContainFlex">是否包含彈性課程</param> /// <param name="scoreType">領域成績 OR 科目成績</param> /// <param name="enumScoreComposition">定期、平時、定期加平時</param> /// <returns></returns> public decimal?GetScoreArithmeticMean(bool isContainFlex, EnumScoreType scoreType, EnumScoreComposition enumScoreComposition) { Dictionary <string, IScore> dicScoreInfo = new Dictionary <string, IScore>(); decimal?result = null; if (scoreType == EnumScoreType.領域) { dicScoreInfo = _ExamDomainScoreDict; } else if (scoreType == EnumScoreType.科目) { dicScoreInfo = _ExamSubjectScoreDict; } else if (scoreType == EnumScoreType.參考科目) { dicScoreInfo = this._RefExamSubjectScoreDict; } decimal?totalScore = null; decimal SubjCount = 0; if (isContainFlex) { foreach (IScore sc in dicScoreInfo.Values) { if (this.GetScore(sc, enumScoreComposition).HasValue&& sc.Credit.HasValue) { totalScore = (totalScore.HasValue ? totalScore.Value : 0) + GetScore(sc, enumScoreComposition).Value; SubjCount++; } } } else { foreach (IScore sc in dicScoreInfo.Values) { // 過濾彈性課程 if (string.IsNullOrEmpty(sc.DomainName) || sc.DomainName == "彈性課程") { continue; } if (this.GetScore(sc, enumScoreComposition).HasValue&& sc.Credit.HasValue) { totalScore = (totalScore.HasValue ? totalScore.Value : 0) + this.GetScore(sc, enumScoreComposition).Value; SubjCount++; } } } if (SubjCount > 0) { result = _Calculator.ParseSubjectScore((totalScore.HasValue ? totalScore.Value : 0) / SubjCount); } // 確認 是哪一種成績要計算 取用不同dictionary return(result); }