コード例 #1
0
        protected void SetNationalAverages(List <MedusaTest> testResults, MedusaKey key)
        {
            var gradeGroups = testResults.GroupBy(i => i.Grade);

            foreach (var gradeGroup in gradeGroups)
            {
                NationalAverage.Add(gradeGroup.Key, gradeGroup.Average(i => i.GetCorrectAnswers(key)).ToString("F1"));
            }
        }
コード例 #2
0
ファイル: SchoolCsvReport.cs プロジェクト: CodyRaffy/Medusa
        private void GenerateSchoolReport(string baseReportPath, MedusaKey key, string school, List <MedusaTest> testResults)
        {
            var filename = $"{baseReportPath}//{school}_MedusaReport.csv";

            using (StreamWriter sw = new StreamWriter(filename))
            {
                // Header
                sw.WriteLine("Student,Grade,Gender,Teacher,Raw Score,National Average,Award");

                var sorted = testResults
                             .OrderBy(i => i.Grade)
                             .ThenBy(i => i.GetCorrectAnswers(key))
                             .ThenBy(i => i.Name)
                             .ToList();

                foreach (var tr in sorted)
                {
                    var    nationalAvg = NationalAverage[tr.Grade];
                    string award       = "N/A";
                    sw.WriteLine($"{tr.Name},{tr.Grade},{tr.Gender},{tr.Teacher},{tr.GetCorrectAnswers(key)},{nationalAvg},{award}");
                }
            }
        }
コード例 #3
0
ファイル: SummaryReport.cs プロジェクト: CodyRaffy/Medusa
        private static List <ReportItem> CreateReportItemList(List <MedusaTest> list, MedusaKey key)
        {
            var reportItemList = new List <ReportItem>();

            for (var index = 0; index <= 40; index++)
            {
                var reportItem = new ReportItem
                {
                    Exactly = list.Count(i => i.GetCorrectAnswers(key) == index),
                    AtLeast = list.Count(i => i.GetCorrectAnswers(key) >= index)
                };
                reportItemList.Add(reportItem);
            }

            return(reportItemList);
        }
コード例 #4
0
ファイル: SummaryReport.cs プロジェクト: CodyRaffy/Medusa
        public static void GenerateTestSummaryReport(string baseReportPath, MedusaKey key, List <MedusaTest> testResults)
        {
            var perfecto = testResults.Where(i => i.GetCorrectAnswers(key) >= 39);

            foreach (var person in perfecto)
            {
                Console.WriteLine($"{person.Name} - {person.Gender} - {person.School}: {person.GetCorrectAnswers(key)} - Q9: {person.Answers[8]} - Q30: {person.Answers[29]}");
            }

            var middleSchoolTestResults = testResults
                                          .Where(i => i.Grade == 6 || i.Grade == 7 || i.Grade == 8)
                                          .ToList();

            var ninthGradeTestResults    = testResults.Where(i => i.Grade == 9).ToList();
            var tenthGradeTestResults    = testResults.Where(i => i.Grade == 10).ToList();
            var eleventhGradeTestResults = testResults.Where(i => i.Grade == 11).ToList();
            var twelvthGradeTestResults  = testResults.Where(i => i.Grade == 12).ToList();

            var middleSchoolReportList  = CreateReportItemList(middleSchoolTestResults, key);
            var ninthGradeReportList    = CreateReportItemList(ninthGradeTestResults, key);
            var tenthGradeReportList    = CreateReportItemList(tenthGradeTestResults, key);
            var eleventhGradeReportList = CreateReportItemList(eleventhGradeTestResults.ToList(), key);
            var twelvthGradeReportList  = CreateReportItemList(twelvthGradeTestResults.ToList(), key);
            var allReportList           = CreateReportItemList(testResults, key);

            var all = CreateReportItemList(testResults, key);

            using (StreamWriter sw = new StreamWriter($"{baseReportPath}\\Distribution.csv"))
            {
                var totalCount = middleSchoolReportList.Count;
                var header     = "# EX,# A.L.,PCT";
                sw.WriteLine($"# Correct,{header},{header},{header},{header},{header},{header}");

                for (var i = 0; i < totalCount; i++)
                {
                    sw.Write($"{i},");
                    WriteItemFromList(sw, middleSchoolReportList, i, middleSchoolTestResults.Count);
                    WriteItemFromList(sw, ninthGradeReportList, i, ninthGradeTestResults.Count);
                    WriteItemFromList(sw, tenthGradeReportList, i, tenthGradeTestResults.Count);
                    WriteItemFromList(sw, eleventhGradeReportList, i, eleventhGradeTestResults.Count);
                    WriteItemFromList(sw, twelvthGradeReportList, i, twelvthGradeTestResults.Count);
                    WriteItemFromList(sw, allReportList, i, testResults.Count);
                    sw.WriteLine("");
                }

                // Write Totals
                sw.Write($",,Total,{middleSchoolTestResults.Count},,");
                sw.Write($"Total,{ninthGradeTestResults.Count},,");
                sw.Write($"Total,{tenthGradeTestResults.Count},,");
                sw.Write($"Total,{eleventhGradeTestResults.Count},,");
                sw.Write($"Total,{twelvthGradeTestResults.Count},,");
                sw.Write($"Total,{testResults.Count}");
                sw.WriteLine("");

                // Write Averages
                sw.Write($",,Average,{Math.Round(middleSchoolTestResults.Average(i => i.GetCorrectAnswers(key)), 1)},,");
                sw.Write($"Average,{Math.Round(ninthGradeTestResults.Average(i => i.GetCorrectAnswers(key)), 1)},,");
                sw.Write($"Average,{Math.Round(tenthGradeTestResults.Average(i => i.GetCorrectAnswers(key)), 1)},,");
                sw.Write($"Average,{Math.Round(eleventhGradeTestResults.Average(i => i.GetCorrectAnswers(key)), 1)},,");
                sw.Write($"Average,{Math.Round(twelvthGradeTestResults.Average(i => i.GetCorrectAnswers(key)), 1)},,");
                sw.Write($"Average,{Math.Round(testResults.Average(i => i.GetCorrectAnswers(key)), 1)}");
                sw.WriteLine("");

                // Item Analysis
                //Question	Correct	    Percent	    Correct
                //Number	Responses	Correct	    Answer
                sw.WriteLine("Question,Correct,Percent,Correct");
                sw.WriteLine("Number,Responses,Correct,Answer");
                for (var i = 0; i < 40; i++)
                {
                    var numberCorrect  = testResults.Count(test => test.IsAnswerCorrect(key, i));
                    var percentCorrect = ((decimal)numberCorrect / (decimal)testResults.Count).ToString("P1");
                    sw.WriteLine($"{i + 1},{numberCorrect},{percentCorrect},{key.Answers[i]}");
                }
            }
        }
コード例 #5
0
ファイル: SchoolCsvReport.cs プロジェクト: CodyRaffy/Medusa
        public override void GenerateSchoolReports(string baseReportPath, List <MedusaTest> testResults, MedusaKey key)
        {
            SetNationalAverages(testResults, key);

            var schoolGroups = testResults.GroupBy(i => i.School);

            foreach (var schoolGroup in schoolGroups)
            {
                GenerateSchoolReport(baseReportPath, key, schoolGroup.Key, schoolGroup.ToList());
            }
        }
コード例 #6
0
 public abstract void GenerateSchoolReports(string baseReportPath, List <MedusaTest> testResults, MedusaKey key);
コード例 #7
0
ファイル: SchoolExcelReport.cs プロジェクト: CodyRaffy/Medusa
        private void GenerateSchoolReport(string baseReportPath, MedusaKey key, string school, List <MedusaTest> testResults)
        {
            using (var package = new ExcelPackage())
            {
                // Add a new worksheet to the empty workbook
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(school);
                //Add the headers
                worksheet.Cells[1, 1].Value = "Student";
                worksheet.Cells[1, 2].Value = "Grade";
                //worksheet.Cells[1, 3].Value = "Gender";
                worksheet.Cells[1, 3].Value          = "Teacher";
                worksheet.Cells[1, 4].Value          = "Raw Score";
                worksheet.Cells[1, 4].Style.WrapText = true;
                worksheet.Cells[1, 5].Value          = "National Average";
                worksheet.Cells[1, 5].Style.WrapText = true;
                worksheet.Cells[1, 6].Value          = "Award";

                // Put border after header row
                worksheet.Cells["A1:F1"].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
                worksheet.Cells["A1:F1"].Style.Border.Bottom.Color.SetColor(Color.Black);

                // This is super slow but could not find a way to not show the excess columns without this
                for (int i = 7; i <= 16384; i++)
                {
                    worksheet.Column(i).Hidden = true;
                }

                //Add some items...
                var sorted = testResults
                             .OrderBy(i => i.Grade)
                             .ThenBy(i => i.GetCorrectAnswers(key))
                             .ThenBy(i => i.Name)
                             .ToList();

                var row = 2;
                foreach (var tr in sorted)
                {
                    var nationalAvg = NationalAverage[tr.Grade];

                    worksheet.Cells[$"A{row}"].Value = tr.Name;
                    worksheet.Cells[$"B{row}"].Value = tr.Grade;
                    //worksheet.Cells[$"C{row}"].Value = tr.Gender;
                    worksheet.Cells[$"C{row}"].Value = tr.Teacher;
                    worksheet.Cells[$"D{row}"].Value = tr.GetCorrectAnswers(key);
                    worksheet.Cells[$"E{row}"].Value = nationalAvg;
                    worksheet.Cells[$"F{row}"].Value = tr.GetAward(key);

                    row++;
                }

                worksheet.Column(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                worksheet.Column(4).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                worksheet.Column(5).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;


                using (ExcelRange r = worksheet.Cells["A1:F1"])
                {
                    //r.Style.Font.SetFromFont(new Font("Britannic Bold", 22, FontStyle.Italic));
                    r.Style.Font.Bold = true;
                    r.Style.Font.Color.SetColor(Color.Black);
                    r.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.CenterContinuous;
                    //r.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
                    //r.Style.Fill.BackgroundColor.SetColor(Color.LightGray);
                }

                worksheet.Cells.AutoFitColumns(8);  //Autofit columns for all cells

                // Autofit fits with additional empty columns.  The following code uses the full width
                var totalWidth = worksheet.Column(1).Width +
                                 worksheet.Column(2).Width +
                                 worksheet.Column(3).Width +
                                 worksheet.Column(4).Width +
                                 worksheet.Column(5).Width +
                                 worksheet.Column(6).Width;

                var diff = 90 - totalWidth;
                if (diff > 2)
                {
                    int additional = (int)diff / 2;
                    // Split the available width between name and teacher column
                    worksheet.Column(1).Width = worksheet.Column(1).Width + additional;
                    worksheet.Column(3).Width = worksheet.Column(3).Width + additional;
                }

                // lets set the header text
                worksheet.HeaderFooter.OddHeader.CenteredText = $"&24&\"Arial,Regular Bold\" {school}";
                // add the page number to the footer plus the total number of pages
                worksheet.HeaderFooter.OddFooter.RightAlignedText =
                    string.Format("Page {0} of {1}", ExcelHeaderFooter.PageNumber, ExcelHeaderFooter.NumberOfPages);
                // add the sheet name to the footer
                worksheet.HeaderFooter.OddFooter.CenteredText = ExcelHeaderFooter.SheetName;
                // add the file path to the footer
                //worksheet.HeaderFooter.OddFooter.LeftAlignedText = ExcelHeaderFooter.FileName;

                worksheet.PrinterSettings.RepeatRows    = worksheet.Cells["1:1"];
                worksheet.PrinterSettings.RepeatColumns = worksheet.Cells["A:G"];

                // Change the sheet view to show it in page layout mode
                worksheet.View.PageLayoutView = true;

                // set some document properties
                package.Workbook.Properties.Title    = $"School Report: {school}";
                package.Workbook.Properties.Author   = "Melissa Raffensperger";
                package.Workbook.Properties.Comments = "Medusa 2018 Test";

                // set some extended property values
                package.Workbook.Properties.Company = "Raffy6Pack";

                // set some custom property values
                package.Workbook.Properties.SetCustomPropertyValue("Checked by", "Cody Raffensperger");
                package.Workbook.Properties.SetCustomPropertyValue("AssemblyName", "EPPlus");

                var filename = $"{baseReportPath}//{school}_MedusaReport.xlsx";
                var xlFile   = GetFileInfo(filename);
                // save our new workbook in the output directory and we are done!
                package.SaveAs(xlFile);
            }
        }