private void SemesterChanged(object sender, EventArgs e) { cbbSemester.Enabled = gridviewStudentScore.Enabled = false; lbScoreTittle.Text = string.Format("Bảng điểm của học sinh {0} ({1}) - HK {2} - năm {3}", studentName, studentID, cbbSemester.Text, DateTime.Now.Year.ToString()); BackgroundWorker worker = new BackgroundWorker(); gridviewStudentScore.Rows.Clear(); mainProgressbar.Visible = lbInformation.Visible = true; Dictionary <string, List <Score> > subjectScores = new Dictionary <string, List <Score> >(); Dictionary <string, double> averageSubjectScore = new Dictionary <string, double>(); List <Subject> subjects = new List <Subject>(); LearniningCapacity learniningCapacitySemester = new LearniningCapacity(); LearniningCapacity learniningCapacityYear = new LearniningCapacity(); List <AverageScore> averageScores = new List <AverageScore>(3); int semester = Int32.Parse(cbbSemester.Text); worker.DoWork += (s, e) => { subjects = subjectController.LoadSubjects(); subjectScores = scoreController.GetAllScores(studentID, semester, grade); averageSubjectScore = scoreController.GetYearAverageListScore(studentID, grade); System.Threading.Thread.Sleep(300); learniningCapacitySemester = studentController.GetStudentLearnCapacity(studentID, grade, semester); learniningCapacityYear = studentController.GetStudentLearnCapacity(studentID, grade); averageScores = scoreController.GetAverageScores(studentID, grade); }; worker.RunWorkerCompleted += (s, e) => { cbbSemester.Enabled = gridviewStudentScore.Enabled = true; mainProgressbar.Visible = lbInformation.Visible = false; int index = 0; if (averageScores != null && learniningCapacitySemester != null) { lbLearningCapacitySem.Text = string.Format("Điểm trung bình HK {0}: {1} - Học lực: {2}", semester.ToString(), (averageScores[semester - 1].Value > -1) ? averageScores[semester - 1].Value.ToString() : "Chưa có", learniningCapacitySemester.ToString()); } if (averageScores != null && learniningCapacitySemester != null) { lbLearningCapacityYear.Text = string.Format("Điểm trung bình cả năm: {0} - Học lực cả năm: {1}", (averageScores[2].Value > -1) ? averageScores[2].Value.ToString() : "Chưa có", learniningCapacityYear.ToString()); } foreach (Subject subject in subjects) { gridviewStudentScore.Rows.Add(subject.Name); for (int i = 0; i < 9; i++) { try { if (subjectScores[subject.ID][i].Value != -1) { gridviewStudentScore.Rows[index].Cells[i + 1].Value = subjectScores[subject.ID][i].Value; } } catch (Exception ex) { break; //MessageBox.Show(ex.Message); } } if (averageSubjectScore[subject.ID] != -1) { gridviewStudentScore.Rows[index].Cells[10].Value = averageSubjectScore[subject.ID]; } index++; } }; worker.RunWorkerAsync(); }
public LearniningCapacity GetStudentLearnCapacity(string _studentID, int _grade, int _semester = 3) { ScoreDA scoreDA = new ScoreDA(); double[] scoreLimit = { 8.0, 6.5, 5.0, 3.5, 2.0 }; LearniningCapacity learniningCapacity = new LearniningCapacity(); learniningCapacity.type = (AbstractLearn.Type)(_semester - 1); List <AverageScore> averageScores = new List <AverageScore>(); bool success = scoreDA.GetAverageScore(_studentID, _grade, averageScores); if (!success) { return(null); } int result = 5; if (averageScores[_semester - 1].Value == -1) { learniningCapacity.LearnCapacity = LearniningCapacity.HocLuc.ChuaXet; return(learniningCapacity); } else { for (int i = 0; i < scoreLimit.Length; i++) { if (averageScores[_semester - 1].Value >= scoreLimit[i]) { result = i; break; } } if (result < 4) { //xét điều kiện điểm từng môn List <Score> subjectScore = new List <Score>(); //cả năm if (_semester > 2) { List <Score> subjectScore2 = new List <Score>(); scoreDA.GetAllAverageSubjectScore(_studentID, _grade, 1, subjectScore); scoreDA.GetAllAverageSubjectScore(_studentID, _grade, 2, subjectScore2); for (int i = 0; i < subjectScore.Count; i++) { subjectScore[i].Value = (subjectScore[i].Value + subjectScore2[i].Value) / 2; if (subjectScore[i].Value < scoreLimit[result + 1]) { result++; break; } } } else { scoreDA.GetAllAverageSubjectScore(_studentID, _grade, _semester, subjectScore); for (int i = 0; i < subjectScore.Count; i++) { if (subjectScore[i].Value < scoreLimit[result + 1]) { result++; break; } } } } } learniningCapacity.LearnCapacity = (LearniningCapacity.HocLuc)result; return(learniningCapacity); }