예제 #1
0
        public FormSemestersRating()
            : base()
        {
            InitializeComponent();
            SemesterScores  = new List <JHSemesterScoreRecord>();
            SemesterHistory = new HistoryQuery(new List <JHSemesterHistoryRecord>());

            // TODO: 特教改
            //NameMapping.Add("語文", "語文");
            //NameMapping.Add("數學", "數學");
            //NameMapping.Add("社會", "社會");
            //NameMapping.Add("自然與生活科技", "自然與生活科技");
            //NameMapping.Add("藝術與人文", "藝術與人文");
            //NameMapping.Add("健康與體育", "健康與體育");
            //NameMapping.Add("綜合活動", "綜合活動");
            foreach (string domain in Domain.SelectGeneral())
            {
                NameMapping.Add(domain, domain);
            }
            foreach (string domain in Domain.SelectSpecial())
            {
                NameMapping.Add(domain, domain);
            }
            NameMapping.Add("學習領域", "學習領域");
            NameMapping.Add("課程學習", "課程學習");
        }
예제 #2
0
        protected override void PrepareDataBackground()
        {
            JHClass.RemoveAll();
            RatingStudent.SetClassMapping(JHClass.SelectAll()); //快取班級對照資訊。
            Dictionary <string, RatingStudent> dicstuds = Students.ToDictionary();

            //學期歷程查詢類別。
            SemesterHistory = new HistoryQuery(JHSemesterHistory.SelectByStudentIDs(Students.ToKeys()));

            //將學生的成績清除。
            foreach (RatingStudent each in Students)
            {
                each.Clear();
            }

            foreach (JHSemesterScoreRecord semsRecord in SemesterScores)
            {
                RatingStudent student;

                if (!dicstuds.TryGetValue(semsRecord.RefStudentID, out student))
                {
                    continue; //找不到該學生。
                }
                ScoreCollection subjScores = null, domainScores = null;

                if (SemesterHistory.Contains(semsRecord.RefStudentID, semsRecord.SchoolYear, semsRecord.Semester))
                {
                    //tokne 意思是特定學期的識別字串,例如「一上」。
                    string token = SemesterHistory.GetToken(semsRecord.RefStudentID, semsRecord.SchoolYear, semsRecord.Semester);

                    //不在使用者選擇的學期中,就不處理。
                    if (!Tokens.Contains(token))
                    {
                        continue;
                    }

                    if (!student.Scores.Contains(ScoreType.Subject.Regulation(token))) //如果學生不包含該學期的成績,就加上該學期。
                    {
                        student.Scores.Add(ScoreType.Subject.Regulation(token), new ScoreCollection());
                    }

                    if (!student.Scores.Contains(ScoreType.Domain.Regulation(token))) //如果學生不包含該學期的成績,就加上該學期。
                    {
                        student.Scores.Add(ScoreType.Domain.Regulation(token), new ScoreCollection());
                    }

                    subjScores   = student.Scores[ScoreType.Subject.Regulation(token)];
                    domainScores = student.Scores[ScoreType.Domain.Regulation(token)];
                }
                else
                {
                    continue; //沒有該學期的學期歷程就不處理。
                }
                #region 科目
                foreach (K12.Data.SubjectScore subjRecord in semsRecord.Subjects.Values)
                {
                    if (!subjRecord.Score.HasValue)
                    {
                        continue;                             //沒有成績就不處理。
                    }
                    ScoreItem subject = new ScoreItem(subjRecord.Subject, ScoreType.Subject);

                    if (!SelectedItems.Contains(subject))
                    {
                        continue; //不在處理的科目清單中。
                    }
                    if (subjScores.Contains(subject.Name))
                    {
                        throw new ArgumentException(string.Format("學生「{0}」在同一學期修習「{1}」科目一次以上。", student.Name, subject.Name));
                    }

                    subjScores.Add(subject.Name, subjRecord.Score.Value);
                }
                #endregion

                #region 領域
                foreach (K12.Data.DomainScore domainRecord in semsRecord.Domains.Values)
                {
                    if (!domainRecord.Score.HasValue)
                    {
                        continue;                               //沒有成績就不處理。
                    }
                    ScoreItem domain = new ScoreItem(domainRecord.Domain, ScoreType.Domain);

                    if (!SelectedItems.Contains(domain))
                    {
                        continue; //不在處理的領域清單中。
                    }
                    if (domainScores.Contains(domain.Name))
                    {
                        throw new ArgumentException(string.Format("學生「{0}」在{1}學年第{2}學期「{3}」領域成績出現一次以上。", student.Name, domainRecord.SchoolYear, domainRecord.Semester, domain.Name));
                    }

                    domainScores.Add(domain.Name, domainRecord.Score.Value);
                }

                if (semsRecord.LearnDomainScore.HasValue)
                {
                    domainScores.Add("學習領域", semsRecord.LearnDomainScore.Value);
                }

                if (semsRecord.CourseLearnScore.HasValue)
                {
                    domainScores.Add("課程學習", semsRecord.CourseLearnScore.Value);
                }

                #endregion
            }
        }