Esempio n. 1
0
 //依名次排序副程式
 private int CompareCode(StudentData a, StudentData b)
 {
     switch (cboReportSortType.Text)
     {
         case "班級總分排名":
             return a.ClassSumRank.CompareTo(b.ClassSumRank);
         case "班級加權總分排名":
             return a.ClassSumRankA.CompareTo(b.ClassSumRankA);
         case "班級平均排名":
             return a.ClassAvgRank.CompareTo(b.ClassAvgRank);
         case "班級加權平均排名":
             return a.ClassAvgRankA.CompareTo(b.ClassAvgRankA);
         case "總分年排名":
             return a.YearSumRank.CompareTo(b.YearSumRank);
         case "加權總分年排名":
             return a.YearSumRankA.CompareTo(b.YearSumRankA);
         case "加權平均年排名":
             return a.YearAvgRankA.CompareTo(b.YearAvgRankA);
         case "班級加權平均排名進步":
             return a.ClassAvgRankAD.CompareTo(b.ClassAvgRankAD);
         case "班級加權平均成績進步排名":
             return a.ClassAvgRankAS.CompareTo(b.ClassAvgRankAS);
     }
     return 0;
 }
Esempio n. 2
0
        private void Calc_ScoreAndRank()
        {
            bool chkBtn1 = true;
            bool chkBtn2 = true;
            if (rb01.Checked == true || rb02.Checked == true)
                if (cboSortType.Text == "" && cbClass.Checked == false && cbYear.Checked == false)
                    chkBtn1 = false;
            if (rb05.Checked == true || rb06.Checked == true || rb04.Checked == true)
                if (cboExamlst.Text == "")
                    chkBtn1 = false;
            if (rb01.Checked == false && rb02.Checked == false && rb03.Checked == false && rb05.Checked == false && rb06.Checked == false && rb04.Checked == false)
                chkBtn2 = false;

            // 加權總分
            decimal SumSubjScoreA = 0;
            // 總分
            decimal SumSubjScore = 0;
            // 學分數加總
            int SumSubjCredits = 0;
            // 科目個數加總
            int SumSubjCots = 0;
            // 前次試別

            // 加權總分
            decimal SumSubj1ScoreA = 0;
            // 總分
            decimal SumSubj1Score = 0;
            // 學分數加總
            int SumSubj1Credits = 0;
            // 科目個數加總
            int SumSubj1Cots = 0;

            if (cboExam.Text != "" && chkBtn1 != false && chkBtn2 != false)
            {
                StudDatas.Clear();
                StudMissingExam.Clear();    // 小郭. 2013/12/17
                //foreach (ClassRecord cr in ClassRecs )
                //{
                foreach (StudentRecord StudRec in StudRecs)
                {
                    // 檢查是否有缺考, 小郭. 2013/12/17
                    if (IsMissingExam(StudRec) == true)
                    {
                        StudMissingExam.Add(StudRec);
                        continue;
                    }

                    StudentData sd = new StudentData();
                    sd.StudentID = StudRec.StudentID;
                    sd.StudentNum = StudRec.StudentNumber;
                    sd.ClassName = StudRec.RefClass.ClassName;
                    sd.SeatNo = StudRec.SeatNo;
                    sd.Name = StudRec.StudentName;
                    sd.ClassYear = StudRec.RefClass.GradeYear;
                    // 初始化
                    SumSubjCots = 0;
                    SumSubjCredits = 0;
                    SumSubjScoreA = 0;
                    SumSubjScore = 0;
                    //
                    SumSubj1Cots = 0;
                    SumSubj1Credits = 0;
                    SumSubj1ScoreA = 0;
                    SumSubj1Score = 0;
                    sd.AvgScore = -1;
                    sd.AvgScoreA = -1;
                    sd.ClassAvgRank = 0;
                    sd.ClassAvgRankA = 0;
                    sd.ClassSumRank = 0;
                    sd.ClassSumRankA = 0;
                    sd.SumScore = -1;
                    sd.SumScoreA = -1;
                    sd.AvgScore1 = -1;
                    sd.AvgScoreA1 = -1;
                    sd.ClassAvgRank1 = 0;
                    sd.ClassAvgRankA1 = 0;
                    sd.ClassSumRank1 = 0;
                    sd.ClassSumRankA1 = 0;
                    sd.SumScore1 = -1;
                    sd.SumScoreA1 = -1;
                    string abc;
                    // 加入考試成績 and 計算
                    foreach (ExamScoreInfo esi in StudRec.ExamScoreList)
                    {
                        abc = esi.ExamName + esi.Subject + esi.SubjectLevel + esi.StudentName;
                        if (cboExam.Text == esi.ExamName || cboExamlst.Text == esi.ExamName)
                        {
                            if ((rb01.Checked == true || rb02.Checked == true) && cboSortType.Text == "科目排名")
                            {

                                if ((esi.Subject + esi.SubjectLevel) == lbxSubjct.Text)
                                {

                                    ExamData ed = new ExamData();
                                    ed.CousreID = esi.CourseID;
                                    ed.CourseName = esi.CourseName;
                                    ed.Credit = esi.Credit;
                                    ed.ExamName = esi.ExamName;
                                    ed.SubjectName = esi.Subject;
                                    ed.SubjectLevel = esi.SubjectLevel;
                                    ed.SchoolYear = esi.SchoolYear;
                                    ed.Semester = esi.Semester;
                                    ed.Score = esi.ExamScore;
                                    //判斷科目是否重覆,未重覆再加入
                                    Boolean chkData = false;
                                    foreach (ExamData est in sd.lstStudExamScore)
                                        if ((ed.CousreID + ed.ExamName + ed.SubjectName + ed.SubjectLevel) == (est.CousreID + est.ExamName + est.SubjectName + est.SubjectLevel))
                                            chkData = true;
                                    if (!chkData)
                                    {
                                        sd.lstStudExamScore.Add(ed);
                                        SumSubjScoreA += esi.ExamScore * esi.Credit;
                                        SumSubjScore += esi.ExamScore;
                                        SumSubjCredits += esi.Credit;
                                        SumSubjCots++;
                                    }
                                    ed = null;

                                }

                            }
                            else
                            {
                                foreach (ListViewItem selSubject in lstSubject.CheckedItems)
                                {
                                    if ((esi.Subject + esi.SubjectLevel) == selSubject.Text)
                                    {

                                        ExamData ed = new ExamData();
                                        ed.CousreID = esi.CourseID;
                                        ed.CourseName = esi.CourseName;
                                        ed.Credit = esi.Credit;
                                        ed.ExamName = esi.ExamName;
                                        ed.SubjectName = esi.Subject;
                                        ed.SubjectLevel = esi.SubjectLevel;
                                        ed.SchoolYear = esi.SchoolYear;
                                        ed.Semester = esi.Semester;
                                        ed.Score = esi.ExamScore;
                                        //判斷科目是否重覆,未重覆再加入
                                        Boolean chkData = false;
                                        foreach (ExamData est in sd.lstStudExamScore)
                                            if ((ed.CousreID + ed.ExamName + ed.SubjectName + ed.SubjectLevel) == (est.CousreID + est.ExamName + est.SubjectName + est.SubjectLevel))
                                                chkData = true;
                                        if (!chkData)
                                        {
                                            if (cboExamlst.Text == esi.ExamName)
                                            {
                                                sd.lstStudExamScoreOld.Add(ed);
                                                SumSubj1ScoreA += esi.ExamScore * esi.Credit;
                                                SumSubj1Score += esi.ExamScore;
                                                SumSubj1Credits += esi.Credit;
                                                SumSubj1Cots++;
                                            }
                                            if (cboExam.Text == esi.ExamName)
                                            {
                                                sd.lstStudExamScore.Add(ed);
                                                SumSubjScoreA += esi.ExamScore * esi.Credit;
                                                SumSubjScore += esi.ExamScore;
                                                SumSubjCredits += esi.Credit;
                                                SumSubjCots++;
                                            }
                                        }
                                        ed = null;

                                    }
                                }
                            }
                        }
                    }

                    // 有成績才計算
                    if (SumSubjCots > 0)
                    {
                        sd.SumScore = SumSubjScore;
                        sd.SumScoreA = SumSubjScoreA;
                        sd.AvgScore = Math.Round(SumSubjScore / SumSubjCots, 2, MidpointRounding.AwayFromZero);
                        sd.AvgScoreA = Math.Round(SumSubjScoreA / SumSubjCredits, 2, MidpointRounding.AwayFromZero);
                    }
                    // 有成績才計算
                    if (SumSubj1Cots > 0)
                    {
                        sd.SumScore1 = SumSubj1Score;
                        sd.SumScoreA1 = SumSubj1ScoreA;
                        sd.AvgScore1 = Math.Round(SumSubj1Score / SumSubj1Cots, 2, MidpointRounding.AwayFromZero);
                        sd.AvgScoreA1 = Math.Round(SumSubj1ScoreA / SumSubj1Credits, 2, MidpointRounding.AwayFromZero);
                    }
                    StudDatas.Add(sd);
                } // StudRec

                // 班排名
                List<decimal> tmpSumRank = new List<decimal>();
                List<decimal> tmpSumRankA = new List<decimal>();
                List<decimal> tmpAvgRank = new List<decimal>();
                List<decimal> tmpAvgRankA = new List<decimal>();
                foreach (ClassRecord cr in ClassRecs)
                {
                    foreach (StudentData sd in StudDatas)
                        if (cr.ClassName == sd.ClassName)
                        {
                            tmpSumRank.Add(sd.SumScore);
                            tmpSumRankA.Add(sd.SumScoreA);
                            tmpAvgRank.Add(sd.AvgScore);
                            tmpAvgRankA.Add(sd.AvgScoreA);
                        }
                    tmpAvgRank.Sort();
                    tmpAvgRank.Reverse();
                    tmpAvgRankA.Sort();
                    tmpAvgRankA.Reverse();
                    tmpSumRank.Sort();
                    tmpSumRank.Reverse();
                    tmpSumRankA.Sort();
                    tmpSumRankA.Reverse();

                    // 放入排名
                    foreach (StudentData sd in StudDatas)
                        if (cr.ClassName == sd.ClassName)
                        {
                            sd.ClassSumRank = tmpSumRank.IndexOf(sd.SumScore) + 1;
                            sd.ClassSumRankA = tmpSumRankA.IndexOf(sd.SumScoreA) + 1;
                            sd.ClassAvgRank = tmpAvgRank.IndexOf(sd.AvgScore) + 1;
                            sd.ClassAvgRankA = tmpAvgRankA.IndexOf(sd.AvgScoreA) + 1;
                        }
                    tmpAvgRank.Clear();
                    tmpAvgRankA.Clear();
                    tmpSumRank.Clear();
                    tmpSumRankA.Clear();
                }

                // 年排名(select)

                foreach (StudentData sd in StudDatas)
                {
                    tmpSumRank.Add(sd.SumScore);
                    tmpSumRankA.Add(sd.SumScoreA);
                    tmpAvgRank.Add(sd.AvgScore);
                    tmpAvgRankA.Add(sd.AvgScoreA);
                }
                tmpAvgRank.Sort();
                tmpAvgRank.Reverse();
                tmpAvgRankA.Sort();
                tmpAvgRankA.Reverse();
                tmpSumRank.Sort();
                tmpSumRank.Reverse();
                tmpSumRankA.Sort();
                tmpSumRankA.Reverse();

                // 放入排名
                foreach (StudentData sd in StudDatas)
                {
                    sd.YearSumRank = tmpSumRank.IndexOf(sd.SumScore) + 1;
                    sd.YearSumRankA = tmpSumRankA.IndexOf(sd.SumScoreA) + 1;
                    sd.YearAvgRank = tmpAvgRank.IndexOf(sd.AvgScore) + 1;
                    sd.YearAvgRankA = tmpAvgRankA.IndexOf(sd.AvgScoreA) + 1;
                }
                tmpAvgRank.Clear();
                tmpAvgRankA.Clear();
                tmpSumRank.Clear();
                tmpSumRankA.Clear();
                //計算前次試別排名
                if (rb05.Checked == true || rb04.Checked == true)
                {
                    List<decimal> tmpAvgRankAD = new List<decimal>();
                    List<decimal> tmpAvgRankAS = new List<decimal>();
                    //班排名
                    foreach (ClassRecord cr in ClassRecs)
                    {
                        foreach (StudentData sd in StudDatas)
                            if (cr.ClassName == sd.ClassName)
                            {
                                tmpSumRank.Add(sd.SumScore1);
                                tmpSumRankA.Add(sd.SumScoreA1);
                                tmpAvgRank.Add(sd.AvgScore1);
                                tmpAvgRankA.Add(sd.AvgScoreA1);
                            }
                        tmpAvgRank.Sort();
                        tmpAvgRank.Reverse();
                        tmpAvgRankA.Sort();
                        tmpAvgRankA.Reverse();
                        tmpSumRank.Sort();
                        tmpSumRank.Reverse();
                        tmpSumRankA.Sort();
                        tmpSumRankA.Reverse();

                        // 放入排名
                        foreach (StudentData sd in StudDatas)
                            if (cr.ClassName == sd.ClassName)
                            {
                                sd.ClassSumRank1 = tmpSumRank.IndexOf(sd.SumScore1) + 1;
                                sd.ClassSumRankA1 = tmpSumRankA.IndexOf(sd.SumScoreA1) + 1;
                                sd.ClassAvgRank1 = tmpAvgRank.IndexOf(sd.AvgScore1) + 1;
                                sd.ClassAvgRankA1 = tmpAvgRankA.IndexOf(sd.AvgScoreA1) + 1;
                                if (sd.AvgScoreA != -1 && sd.AvgScoreA1 != -1)
                                {
                                    tmpAvgRankAD.Add(sd.ClassAvgRankA1 - sd.ClassAvgRankA);
                                    tmpAvgRankAS.Add(sd.AvgScoreA - sd.AvgScoreA1);
                                }
                            }
                        tmpAvgRankAD.Sort();
                        tmpAvgRankAD.Reverse();
                        tmpAvgRankAS.Sort();
                        tmpAvgRankAS.Reverse();
                        foreach (StudentData sd in StudDatas)
                            if (cr.ClassName == sd.ClassName)
                            {
                                if (sd.AvgScoreA != -1 && sd.AvgScoreA1 != -1)
                                {
                                    sd.ClassAvgRankAD = tmpAvgRankAD.IndexOf(sd.ClassAvgRankA1 - sd.ClassAvgRankA) + 1;
                                    sd.ClassAvgRankAS = tmpAvgRankAS.IndexOf(sd.AvgScoreA - sd.AvgScoreA1) + 1;
                                }
                                else
                                {
                                    sd.ClassAvgRankAD = -99;
                                    sd.ClassAvgRankAS = -99;
                                }
                            }
                        tmpAvgRankAD.Clear();
                        tmpAvgRank.Clear();
                        tmpAvgRankA.Clear();
                        tmpSumRank.Clear();
                        tmpSumRankA.Clear();
                        tmpAvgRankAS.Clear();
                    }

                    // 年排名(select)

                    foreach (StudentData sd in StudDatas)
                    {
                        tmpSumRank.Add(sd.SumScore1);
                        tmpSumRankA.Add(sd.SumScoreA1);
                        tmpAvgRank.Add(sd.AvgScore1);
                        tmpAvgRankA.Add(sd.AvgScoreA1);
                    }
                    tmpAvgRank.Sort();
                    tmpAvgRank.Reverse();
                    tmpAvgRankA.Sort();
                    tmpAvgRankA.Reverse();
                    tmpSumRank.Sort();
                    tmpSumRank.Reverse();
                    tmpSumRankA.Sort();
                    tmpSumRankA.Reverse();

                    // 放入排名
                    foreach (StudentData sd in StudDatas)
                    {
                        sd.YearSumRank1 = tmpSumRank.IndexOf(sd.SumScore) + 1;
                        sd.YearSumRankA1 = tmpSumRankA.IndexOf(sd.SumScoreA) + 1;
                        sd.YearAvgRank1 = tmpAvgRank.IndexOf(sd.AvgScore) + 1;
                        sd.YearAvgRankA1 = tmpAvgRankA.IndexOf(sd.AvgScoreA) + 1;
                    }
                    tmpAvgRank.Clear();
                    tmpAvgRankA.Clear();
                    tmpSumRank.Clear();
                    tmpSumRankA.Clear();
                }

                if (lbxSubjct.Visible == true && cboExam.Text != "")
                {
                    // 班科排名
                    List<Decimal> tmpSubjRank = new List<decimal>();
                    foreach (ClassRecord cr in ClassRecs)
                    {
                        foreach (StudentData sd in StudDatas)
                        {

                            if (cr.ClassName == sd.ClassName)
                                foreach (ExamData ed in sd.lstStudExamScore)
                                    if ((ed.SubjectName + ed.SubjectLevel) == lbxSubjct.Text && (ed.ExamName == cboExam.Text))
                                        tmpSubjRank.Add(ed.Score);

                        }
                        tmpSubjRank.Sort();
                        tmpSubjRank.Reverse();

                        foreach (StudentData sd in StudDatas)
                        {
                            if (cr.ClassName == sd.ClassName)
                                foreach (ExamData ed in sd.lstStudExamScore)
                                    if ((ed.SubjectName + ed.SubjectLevel) == lbxSubjct.Text && (ed.ExamName == cboExam.Text))
                                        ed.ClassScoreRank = tmpSubjRank.IndexOf(ed.Score) + 1;
                        }
                        tmpSubjRank.Clear();
                    }

                    // 年科排名
                    foreach (StudentData sd in StudDatas)
                    {
                        foreach (ExamData ed in sd.lstStudExamScore)
                            if ((ed.SubjectName + ed.SubjectLevel) == lbxSubjct.Text && (ed.ExamName == cboExam.Text))
                                tmpSubjRank.Add(ed.Score);

                    }
                    tmpSubjRank.Sort();
                    tmpSubjRank.Reverse();

                    foreach (StudentData sd in StudDatas)
                    {
                        foreach (ExamData ed in sd.lstStudExamScore)
                            if ((ed.SubjectName + ed.SubjectLevel) == lbxSubjct.Text && (ed.ExamName == cboExam.Text))
                                ed.YearScoreRank = tmpSubjRank.IndexOf(ed.Score) + 1;
                    }
                    tmpSubjRank.Clear();

                }
            }
            else
                MessageBox.Show("排名方式或排名名次設定不完整!");
        }