public void CalculateScore(ReportStudent student)
        {
            ItemWeightCollection subjectWeight = new ItemWeightCollection();

            foreach (string each in Subjects)
            {
                if (student.Scores[SubjectToken].Contains(each))
                {
                    subjectWeight.Add(each, student.Scores[SubjectToken].Weights[each]);
                }
            }

            ItemWeightCollection domainWeight = new ItemWeightCollection();

            foreach (string each in Domains)
            {
                if (student.Scores[DomainToken].Contains(each))
                {
                    domainWeight.Add(each, student.Scores[DomainToken].Weights[each]);
                }
            }

            if (subjectWeight.Count <= 0 && domainWeight.Count < 0)
            {
                return;
            }

            student.Scores[TargetToken].Clear();
            student.Scores[TargetToken].Add("加權平均", 加權平均(student, subjectWeight, domainWeight), 0);
            student.Scores[TargetToken].Add("加權總分", 加權總分(student, subjectWeight, domainWeight), 0);
            student.Scores[TargetToken].Add("合計總分", 合計總分(student, subjectWeight, domainWeight), 0);
            student.Scores[TargetToken].Add("算術平均", 算術平均(student, subjectWeight, domainWeight), 0);
        }
        private decimal 加權總分(ReportStudent student, ItemWeightCollection subjectWeight, ItemWeightCollection domainWeight)
        {
            decimal sum = 0;

            foreach (string scoreItem in subjectWeight.Keys)
            {
                sum += (student.Scores[SubjectToken][scoreItem] * subjectWeight[scoreItem]);
            }

            foreach (string scoreItem in domainWeight.Keys)
            {
                sum += (student.Scores[DomainToken][scoreItem] * domainWeight[scoreItem]);
            }

            return(sum);
        }
        private decimal 算術平均(ReportStudent student, ItemWeightCollection subjectWeight, ItemWeightCollection domainWeight)
        {
            decimal sum = 0, weight = subjectWeight.Count + domainWeight.Count;

            foreach (string scoreItem in subjectWeight.Keys)
            {
                sum += student.Scores[SubjectToken][scoreItem];
            }

            foreach (string scoreItem in domainWeight.Keys)
            {
                sum += student.Scores[DomainToken][scoreItem];
            }

            if (weight == 0)
            {
                return(0);
            }
            else
            {
                return(Round(sum / weight));
            }
        }