예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }