protected override void PrepareDataBackground() { JHClass.RemoveAll(); RatingStudent.SetClassMapping(JHClass.SelectAll()); //快取班級對照資訊。 Dictionary <string, RatingStudent> dicstuds = Students.ToDictionary(); //將學生的成績清除,並新增一個 Token 用來放成績。 foreach (RatingStudent each in Students) { each.Clear(); each.Scores.Add(ThisToken, new ScoreCollection()); } foreach (JHSemesterScoreRecord semsRecord in SemesterScores.Values) { RatingStudent student; if (!dicstuds.TryGetValue(semsRecord.RefStudentID, out student)) { continue; //找不到該學生。 } ScoreCollection scores = student.Scores[ThisToken]; foreach (K12.Data.DomainScore domainRecord in semsRecord.Domains.Values) { if (!domainRecord.Score.HasValue) { continue; //沒有成績就不處理。 } string domain = domainRecord.Domain.Trim(); if (!SelectedDomains.Contains(domain)) { continue; //不在處理的科目清單中。 } if (!NameMapping.ContainsKey(domain)) { throw new ArgumentException(string.Format("領域名稱「{0}」在此畫面沒有定議。", domain)); } if (scores.Contains(domain)) { throw new ArgumentException(string.Format("學生「{0}」在同一學期有「{1}」領域一次以上。", student.Name, domain)); } scores.Add(domain, domainRecord.Score.Value); } if (semsRecord.LearnDomainScore.HasValue) { scores.Add("學習領域", semsRecord.LearnDomainScore.Value); } if (semsRecord.CourseLearnScore.HasValue) { scores.Add("課程學習", semsRecord.CourseLearnScore.Value); } } }
protected override void PrepareDataBackground() { List <JHSCETakeRecord> scetakes = JHSCETake.SelectByCourseAndExam(Courses.Values.ToKeys(), ExamId); JHClass.RemoveAll(); RatingStudent.SetClassMapping(JHClass.SelectAll()); //快取班級對照資訊。 Dictionary <string, RatingStudent> dicstuds = Students.ToDictionary(); //將學生的成績清除,並新增一個 Token 用來放成績。 foreach (RatingStudent each in Students) { each.Clear(); each.Scores.Add(ThisToken, new ScoreCollection()); } foreach (JHSCETakeRecord take in scetakes) //特別注意 take.Score 是 Extensions 裡面的 Score 不是實體欄位的 Score。 { if (!take.Score.HasValue) { continue; //沒有成績就不處理。 } JHSCAttendRecord attend; JHCourseRecord course; RatingStudent student; if (!SCAttends.TryGetValue(take.RefSCAttendID, out attend)) { continue; //找不到該修課記錄。 } if (!Courses.TryGetValue(take.RefCourseID, out course)) { continue; //找不到該課程。 } if (!dicstuds.TryGetValue(attend.RefStudentID, out student)) { continue; //找不到該學生。 } ScoreCollection scores = student.Scores[ThisToken]; string subject = course.Subject; if (!SelectedSubjects.Contains(subject)) { continue; //不在處理的科目清單中。 } if (scores.Contains(subject)) { throw new ArgumentException(string.Format("學生「{0}」在同一學期修習「{1}」科目一次以上。", student.Name, subject)); } scores.Add(subject, take.Score.Value); } }
protected override void PrepareDataBackground() { JHClass.RemoveAll(); RatingStudent.SetClassMapping(JHClass.SelectAll()); //快取班級對照資訊。 Dictionary <string, RatingStudent> dicstuds = Students.ToDictionary(); //將學生的成績清除,並新增一個 Token 用來放成績。 foreach (RatingStudent each in Students) { each.Clear(); each.Scores.Add(ThisToken, new ScoreCollection()); } foreach (JHSemesterScoreRecord semsRecord in SemesterScores.Values) { RatingStudent student; if (!dicstuds.TryGetValue(semsRecord.RefStudentID, out student)) { continue; //找不到該學生。 } ScoreCollection scores = student.Scores[ThisToken]; foreach (K12.Data.SubjectScore subjRecord in semsRecord.Subjects.Values) { if (!subjRecord.Score.HasValue) { continue; //沒有成績就不處理。 } string subject = subjRecord.Subject; if (!SelectedSubjects.Contains(subject)) { continue; //不在處理的科目清單中。 } if (scores.Contains(subject)) { throw new ArgumentException(string.Format("學生「{0}」在同一學期修習「{1}」科目一次以上。", student.Name, subject)); } scores.Add(subject, subjRecord.Score.Value); } } }
protected override void PrepareDataBackground() { List <JHSCETakeRecord> scetakes = JHSCETake.SelectByCourseAndExam(Courses.Values.ToKeys(), ExamId); JHClass.RemoveAll(); RatingStudent.SetClassMapping(JHClass.SelectAll()); //快取班級對照資訊。 Dictionary <string, RatingStudent> dicstuds = Students.ToDictionary(); //將學生的成績清除,並新增一個 Token 用來放成績。 foreach (RatingStudent each in Students) { each.Clear(); each.Scores.Add(ThisToken, new ScoreCollection()); } //記錄每一位學生的領域成績。 Dictionary <string, DomainScoreCalculator> domainscores = new Dictionary <string, DomainScoreCalculator>(); //計算領域成績。 foreach (JHSCETakeRecord take in scetakes) //特別注意 take.Score 是 Extensions 裡面的 Score 不是實體欄位的 Score。 { if (!take.Score.HasValue) { continue; //沒有成績就不處理。 } JHSCAttendRecord attend; JHCourseRecord course; RatingStudent student; if (!SCAttends.TryGetValue(take.RefSCAttendID, out attend)) { continue; //找不到該修課記錄。 } if (!dicstuds.TryGetValue(attend.RefStudentID, out student)) { continue; //找不到該學生。 } if (!Courses.TryGetValue(take.RefCourseID, out course)) { continue; //找不到該課程。 } if (!course.Credit.HasValue) { continue; //如果課程沒有權重就不處理。 } string domain = course.Domain.Trim(); string subject = course.Subject.Trim(); decimal weight = course.Credit.Value; if (!SelectedDomains.Contains(domain)) { continue; //不在處理的領域清單中。 } if (!domainscores.ContainsKey(attend.RefStudentID)) { domainscores.Add(attend.RefStudentID, new DomainScoreCalculator()); } if (domainscores[attend.RefStudentID].Contains(course.Subject.Trim())) { throw new ArgumentException(string.Format("學生「{0}」在同一學期修習「{1}」科目一次以上。", student.Name, subject)); } domainscores[attend.RefStudentID].Add(domain, subject, take.Score.Value, weight); } foreach (KeyValuePair <string, DomainScoreCalculator> eachStudent in domainscores) { string studentId = eachStudent.Key; //學生編號。 DomainScoreCalculator calculator = eachStudent.Value; //領域成績。 foreach (DomainScore eachDomain in calculator.Domains) { dicstuds[studentId].Scores[ThisToken].Add(eachDomain.Name, eachDomain.GetScore()); } } }