Example #1
0
        private void btn_Kmean_Click(object sender, EventArgs e)
        {
            this.Ana = new BLAnalysis((int)numericUpDown_ClusterAmount.Value);
            if (Ana.Kmean(radioButton_KmeanPlusPlus.Checked, cbb_Deparment.Text, cbb_Subject.Text, ProfessorID) == 0)
            {
                MessageBox.Show("Your data contains null value in some grade ! Please Check !");
                return;
            }

            chart_AmountStudent.Show();
            chart_PercentClusters.Show();
            chart_AverageGrade.Show();

            chart_AmountStudent.Series["Student"].Points.Clear();
            chart_AverageGrade.Series["Average Grade"].Points.Clear();
            chart_PercentClusters.Series["Student"].Points.Clear();

            chart_PercentClusters.Series["Student"].IsValueShownAsLabel = true;
            using (var ctx = new UniversityContext())
            {
                int studentAmount;
                if (cbb_Deparment.Text == "All")
                {
                    studentAmount = ctx.Students.Count();
                }
                else
                {
                    if (cbb_Deparment.Text != string.Empty)
                    {
                        var departmentid = ctx.Departments.FirstOrDefault(d => d.DeparmentName == cbb_Deparment.Text).DepartmentID;
                        studentAmount = ctx.Students.Where(s => s.DepartmentID == departmentid).Count();
                    }
                    else
                    {
                        var subject = ctx.Subjects.SingleOrDefault(s => s.SubjectName == cbb_Subject.Text);
                        var classes = ctx.Classes.Where(s => s.SubjectID == subject.SubjectID && s.ProfessorID == ProfessorID);
                        var points  = from grade in ctx.Grades
                                      join eachclass in classes
                                      on grade.ClassID equals eachclass.ClassID
                                      select grade;
                        var pointList = points.GroupBy(s => s.StudentID).ToList();
                        studentAmount = pointList.Count;
                    }
                }
                int count = 0;
                foreach (var cluster in Ana.Clusters)
                {
                    chart_AmountStudent.Series["Student"].Points.AddXY("Cluster" + count.ToString(), cluster.Count());
                    chart_AmountStudent.Series["Student"].Points[count].Label = cluster.Count().ToString();

                    chart_PercentClusters.Series["Student"].Points.AddXY("Cluster" + count.ToString(), (cluster.Count() * 100 / studentAmount));

                    double?averageGrade = 0;
                    foreach (var grade in Ana.CentralPoint[count])
                    {
                        averageGrade += grade.Mark;
                    }
                    averageGrade = averageGrade / Ana.CentralPoint[count].Count();
                    chart_AverageGrade.Series["Average Grade"].Points.AddXY("Cluster" + count.ToString(), averageGrade);
                    chart_AverageGrade.Series["Average Grade"].Points[count].Label = String.Format("{0:0.00}", averageGrade);
                    count++;
                }
            }
        }