public void Generate(SchoolScores schoolScores, string outputFileName)
        {
            using (var sw = new StreamWriter(outputFileName, true))
            {
                sw.WriteLine("----- School level data ----");
                sw.WriteLine();
                sw.WriteLine("---------------------------");
                sw.WriteLine("Highest performing class considering averages only: {0}", schoolScores.HighestPerformingClass);
                sw.WriteLine("(new) Highest performing student across all classes: {0}", schoolScores.HighestPerformingStudent.Name);
                sw.WriteLine("---------------------------");
                sw.WriteLine("Students Average across all classes: {0}", schoolScores.SchoolAverage);
                sw.WriteLine("// In V2 school level median and percentile will be available.");

                sw.WriteLine();
                sw.WriteLine("----- Class level data ----");
                foreach (var classScores in schoolScores.ClassScores)
                {
                    sw.WriteLine();
                    sw.WriteLine("Class Name: {0}", classScores.ClassName);
                    sw.WriteLine("Class Average: {0}", classScores.ClassAverage);
                    sw.WriteLine("(new) Class Median: {0}", classScores.ClassMedian);
                    sw.WriteLine("(new) Class top student: {0}", classScores.TopStudent.Name);
                    sw.WriteLine("Total students: {0}", classScores.TotalStudents);
                    sw.WriteLine("Total students considered for average: {0}", classScores.TotalStudentsForAverageCalc);
                    sw.WriteLine("Ignored students: {0}", string.Join(", ", classScores.IgnoredStudents.Select(x => x.Name)));
                    sw.WriteLine();
                    sw.WriteLine();
                }
            }
        }
Beispiel #2
0
        public SchoolScores CalcuateScores(IList <SchoolClass> schoolClasses)
        {
            var schoolScores = new SchoolScores();

            foreach (var schoolClass in schoolClasses)
            {
                var classScores = new ClassScores();
                classScores.ClassName = schoolClass.ClassName;

                var     totalStudents = schoolClass.Students.Count();
                var     scores        = 0;
                Student topStudent    = null;
                foreach (var student in schoolClass.Students)
                {
                    if (student.Grade == 0)
                    {
                        classScores.IgnoredStudents.Add(student);
                        totalStudents--;
                    }
                    else
                    {
                        if (topStudent == null || topStudent.Grade < student.Grade)
                        {
                            topStudent = student;
                        }
                        scores += (int)student.Grade;
                    }
                }

                float classAverage = (float)scores / totalStudents;
                classScores.ClassAverage = MathF.Round(classAverage, 1);
                classScores.ClassMedian  = CalcuateMedian(schoolClass.Students);
                classScores.TopStudent   = topStudent;
                classScores.TotalStudentsForAverageCalc = totalStudents;
                classScores.TotalStudents = schoolClass.Students.Count();

                schoolScores.ClassScores.Add(classScores);
            }

            string  topClass         = null;
            float   topClassAverage  = 0;
            Student topSchoolStudent = null;
            float   classAverages    = 0;

            foreach (var classScore in schoolScores.ClassScores)
            {
                classAverages += classScore.ClassAverage;
                if (topClassAverage < classScore.ClassAverage)
                {
                    topClassAverage = classScore.ClassAverage;
                    topClass        = classScore.ClassName;
                }

                if (topSchoolStudent == null || topSchoolStudent.Grade < classScore.TopStudent.Grade)
                {
                    topSchoolStudent = classScore.TopStudent;
                }
            }

            schoolScores.HighestPerformingClass   = topClass;
            schoolScores.HighestPerformingStudent = topSchoolStudent;
            schoolScores.SchoolAverage            = MathF.Round(classAverages / schoolScores.ClassScores.Count(), 1);

            return(schoolScores);
        }