Exemple #1
0
        public void Write(
            string path,
            IReadOnlyCollection <StudentPerfomance> students,
            IReadOnlyCollection <MarkForSubject> subjects,
            ICustomLogger logger)
        {
            try
            {
                int subjectCount    = 0,
                    studentCount    = 0,
                    leftEdgeOfTable = 1,
                    topEdgeOfTable  = 1,
                    headerOffset    = 1,
                    tableSplitting  = 2,
                    subjectsOffset  = students.Count() + headerOffset,
                    marksOffset     = subjectsOffset + 1,
                    totalMarkOffset = marksOffset + 1;

                ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
                using var excel             = new ExcelPackage();
                var ws = excel.Workbook.Worksheets.Add("output");
                ws.Cells.Style.Font.Size             = 11;
                ws.Cells.Style.Font.Name             = "Calibri";
                ws.Cells[1, 1, 1, 4].Style.Font.Bold = true;
                ws.Cells[1, 1].Value = "Фамилия";
                ws.Cells[1, 2].Value = "Имя";
                ws.Cells[1, 3].Value = "Отчество";
                ws.Cells[1, 4].Value = "Средняя оценка";
                foreach (var item in students)
                {
                    ws.Cells[leftEdgeOfTable, topEdgeOfTable].Style.Font.Bold = true;
                    ws.Cells[leftEdgeOfTable + headerOffset + studentCount, topEdgeOfTable].Value       = item.Student.FirstName;
                    ws.Cells[leftEdgeOfTable + headerOffset + studentCount, topEdgeOfTable + 1].Value   = item.Student.LastName;
                    ws.Cells[leftEdgeOfTable + headerOffset + studentCount, topEdgeOfTable + 2].Value   = item.Student.MiddleName;
                    ws.Cells[leftEdgeOfTable + headerOffset + studentCount++, topEdgeOfTable + 3].Value = item.AverageMark;
                }
                foreach (var item in subjects)
                {
                    ws.Cells[subjectsOffset + tableSplitting, leftEdgeOfTable + subjectCount].Style.Font.Bold = true;
                    ws.Cells[subjectsOffset + tableSplitting, leftEdgeOfTable + subjectCount].Value           = item.Subject;
                    ws.Cells[marksOffset + tableSplitting, leftEdgeOfTable + subjectCount++].Value            = item.AverageMark;
                }

                ws.Cells[totalMarkOffset + tableSplitting + 1, leftEdgeOfTable].Value           = "Средняя оценка в группе";
                ws.Cells[totalMarkOffset + tableSplitting + 1, leftEdgeOfTable].Style.Font.Bold = true;
                ws.Cells[totalMarkOffset + tableSplitting + 2, leftEdgeOfTable].Value           = subjects.Average(x => x.AverageMark);
                var file = new FileInfo(path);
                excel.SaveAs(file);
            }
            catch (ArgumentNullException e)
            {
                logger.Setup().Error(e.Message, e.GetType());
            }
            catch (InvalidOperationException e)
            {
                logger.Setup().Error(e.Message, e.GetType());
            }
        }
Exemple #2
0
        public IEnumerable <Exam> Read(string path, ICustomLogger logger)
        {
            const string CurrentEncoding = "utf-8";
            const int    OffsetOfMarks   = 3;
            var          exams           = new List <Exam>();

            try
            {
                using var reader           = new StreamReader(path);
                using var csv              = new CsvReader(reader, CultureInfo.InvariantCulture);
                csv.Configuration.Encoding = Encoding.GetEncoding(CurrentEncoding);
                var subjectName = csv.Parser.Read().Skip(OffsetOfMarks);

                while (csv.Read())
                {
                    for (int i = 0; i < subjectName.Count(); i++)
                    {
                        exams.Add(new Exam
                        {
                            Student = new Student(csv.GetField(0), csv.GetField(1), csv.GetField(2)),
                            Subject = subjectName.Skip(i).First(),
                            Mark    = csv.GetField <int>(i + OffsetOfMarks),
                        });
                    }
                }
            }
            catch (FileNotFoundException e)
            {
                logger.Setup().Fatal(e.Message, e.GetType());
            }
            catch (ArgumentOutOfRangeException e)
            {
                logger.Setup().Error(e.Message, e.GetType());
            }
            catch (TypeConverterException e)
            {
                logger.Setup().Error(e.Message, e.GetType());
            }
            catch (CsvHelper.MissingFieldException e)
            {
                logger.Setup().Error(e.Message, e.GetType());
            }
            catch (ArgumentNullException e)
            {
                logger.Setup().Error(e.Message, e.GetType());
            }

            return(exams);
        }
Exemple #3
0
 public void Write(string path, IReadOnlyCollection <StudentPerfomance> students, IReadOnlyCollection <MarkForSubject> subjects, ICustomLogger logger)
 {
     try
     {
         var totalMark = subjects.Average(x => x.AverageMark);
         using var writer = new StreamWriter(path, false, Encoding.Default);
         writer.Write(JsonConvert.SerializeObject(students));
         writer.Write(JsonConvert.SerializeObject(subjects));
         writer.Write($"Total mark: {totalMark}");
     }
     catch (ArgumentException e)
     {
         logger.Setup().Error(e.Message, e.GetType());
     }
     catch (InvalidOperationException e)
     {
         logger.Setup().Error(e.Message, e.GetType());
     }
 }