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)); } }