private static void ParsePupilLine(string line, ref Pupil pupil)
        {
            string[] lineArray = line.Split(new char[] { ' ' });
            if (5 != lineArray.Length)
            {
                throw new PupilAccountException("Неверный формат записи ученика.");
            }

            if (lineArray[0].Length > 20 || lineArray[1].Length > 15)
            {
                throw new PupilAccountException("Дина имени ученика не должно " +
                                                "превышать 15 символов, а длина фамилии - 20 символов.");
            }

            pupil           = new Pupil();
            pupil.Surname   = lineArray[0];
            pupil.Name      = lineArray[1];
            pupil.Estimate1 = int.Parse(lineArray[2]);
            pupil.Estimate2 = int.Parse(lineArray[3]);
            pupil.Estimate3 = int.Parse(lineArray[4]);
        }
 public static Pupil[] ReadPupiles(string filename)
 {
     try
     {
         Pupil[] pupilArray = null;
         using (StreamReader sr = new StreamReader(filename))
         {
             int pupilCount = int.Parse(sr.ReadLine());
             pupilArray = new Pupil[pupilCount];
             for (int i = 0; i < pupilCount; ++i)
             {
                 string line = sr.ReadLine();
                 ParsePupilLine(line, ref pupilArray[i]);
             }
         }
         return(pupilArray);
     }
     catch (Exception ex)
     {
         throw new PupilAccountException(
                   "Ошибка при считывании учеников из файла. ", ex);
     }
 }
Beispiel #3
0
        //На вход программе подаются сведения о сдаче экзаменов учениками 9-х
        //классов некоторой средней школы.В первой строке сообщается количество
        //учеников N, которое не меньше 10, но не превосходит
        //100, каждая из следующих N строк имеет следующий формат:
        //<Фамилия> <Имя> <оценки>,
        //где<Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка,
        //состоящая не более чем из 15 символов, <оценки> – через пробел
        //три целых числа, соответствующие оценкам по пятибалльной системе.
        //<Фамилия> и<Имя>, а также<Имя> и<оценки> разделены одним пробелом. Пример входной строки:
        //Иванов Петр 4 5 3
        //Требуется написать как можно более эффективную программу,
        //которая будет выводить на экран фамилии и имена трех
        //худших по среднему баллу учеников. Если среди остальных
        //есть ученики, набравшие тот же средний балл, что и один из трех худших, то следует вывести и их фамилии и имена.
        static void Main(string[] args)
        {
            string[] rawData = Input.LoadDataFromFile("..\\Pupils.txt");
            Console.WriteLine($"В файле содержаться данные на {rawData[0]} учеников");

            Pupil[] pupils = Pupil.ListPupils(rawData);
            int     i      = 1;

            //список учеников, если нужен
            //foreach (var p in pupils)
            //{
            //    Console.WriteLine($"Ученик {i} {p.Name} {p.Surename} средний бал {p.Average}");
            //    i++;
            //}

            //Сортирую учеников
            PupilBuble(pupils);

            Console.WriteLine("\n");

            Console.WriteLine("Вывод трёх самых худших по среднему баллу учеников:");
            for (i = 0; i < 3; i++)
            {
                Console.WriteLine($"Ученик {i}\t {pupils[i].Name} {pupils[i].Surename} средний бал {pupils[i].Average}");
            }
            Console.WriteLine("\nДругие ученики с таким же средним баллом");
            i = 3;
            while (pupils[i].Average == pupils[2].Average)
            {
                Console.WriteLine($"Ученик {i}\t {pupils[i].Name} {pupils[i].Surename} средний бал {pupils[i].Average}");
                i++;
            }


            Console.ReadKey();
        }