Advertisement
Soft_

Untitled

Jun 7th, 2023
669
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 23.59 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6.  
  7.  
  8. // Класс для хранения данных о скачке
  9. class Race
  10. {
  11.     public int Id { get; set; } // Ключ
  12.     public string Name { get; set; } // Название
  13.     public string Track { get; set; } // Ипподром
  14.     public DateTime Date { get; set; } // Дата
  15.     public TimeSpan Time { get; set; } // Время
  16.     public decimal Prize { get; set; } // Величина приза
  17.     public List<(string Horse, string Jockey)> Results { get; set; } // Список пар (кличка лошади, ФИО жокея) по местам
  18.  
  19.     // Конструктор с параметрами
  20.     public Race(int id, string name, string track, DateTime date, TimeSpan time, decimal prize, List<(string Horse, string Jockey)> results)
  21.     {
  22.         Id = id;
  23.         Name = name;
  24.         Track = track;
  25.         Date = date;
  26.         Time = time;
  27.         Prize = prize;
  28.         Results = results;
  29.     }
  30.  
  31.     // Метод для вывода данных о скачке на консоль
  32.     public void Print()
  33.     {
  34.         Console.WriteLine($"Скачка №{Id}: {Name}");
  35.         Console.WriteLine($"Ипподром: {Track}");
  36.         Console.WriteLine($"Дата и время: {Date:dd.MM.yyyy} {Time:hh\\:mm}");
  37.         Console.WriteLine($"Величина приза: {Prize} руб.");
  38.         Console.WriteLine("Результаты:");
  39.         for (int i = 0; i < Results.Count; i++)
  40.         {
  41.             Console.WriteLine($"{i + 1}-е место: лошадь {Results[i].Horse}, жокей {Results[i].Jockey}");
  42.         }
  43.         Console.WriteLine();
  44.     }
  45. }
  46.  
  47. // Класс для хранения данных о лошади
  48. class Horse
  49. {
  50.     public int Id { get; set; } // Ключ
  51.     public string Name { get; set; } // Кличка
  52.     public string Color { get; set; } // Масть
  53.     public int Age { get; set; } // Возраст
  54.     public string Owner { get; set; } // Владелец
  55.     public int Place { get; set; } // Место
  56.  
  57.     // Конструктор с параметрами
  58.     public Horse(int id, string name, string color, int age, string owner, int place)
  59.     {
  60.         Id = id;
  61.         Name = name;
  62.         Color = color;
  63.         Age = age;
  64.         Owner = owner;
  65.         Place = place;
  66.     }
  67.  
  68.     // Метод для вывода данных о лошади на консоль
  69.     public void Print()
  70.     {
  71.         Console.WriteLine($"Лошадь №{Id}: {Name}");
  72.         Console.WriteLine($"Масть: {Color}");
  73.         Console.WriteLine($"Возраст: {Age} лет");
  74.         Console.WriteLine($"Владелец: {Owner}");
  75.         Console.WriteLine($"Место: {Place}");
  76.         Console.WriteLine();
  77.     }
  78. }
  79.  
  80. // Класс для хранения данных о жокее
  81. class Jockey
  82. {
  83.     public int Id { get; set; } // Ключ
  84.     public string Name { get; set; } // ФИО
  85.     public int Age { get; set; } // Возраст
  86.  
  87.     // Конструктор с параметрами
  88.     public Jockey(int id, string name, int age)
  89.     {
  90.         Id = id;
  91.         Name = name;
  92.         Age = age;
  93.     }
  94.  
  95.     // Метод для вывода данных о жокее на консоль
  96.     public void Print()
  97.     {
  98.         Console.WriteLine($"Жокей №{Id}: {Name}");
  99.         Console.WriteLine($"Возраст: {Age} лет");
  100.         Console.WriteLine();
  101.     }
  102. }
  103.  
  104. // Класс для работы с информационной системой "Жокейские Скачки"
  105. class RacingSystem
  106. {
  107.     private List<Race> races; // Список сведений о скачках
  108.     private List<Horse> horses; // Список сведений о лошадях
  109.     private List<Jockey> jockeys; // Список сведений о жокеях
  110.  
  111.     // Конструктор без параметров
  112.     public RacingSystem()
  113.     {
  114.         races = new List<Race>();
  115.         horses = new List<Horse>();
  116.         jockeys = new List<Jockey>();
  117.     }
  118.  
  119.     // Метод для загрузки данных из текстового файла
  120.     public void LoadData(string fileName)
  121.     {
  122.         using (StreamReader sr = new StreamReader(fileName))
  123.         {
  124.             // Читаем количество скачек
  125.             int n = int.Parse(sr.ReadLine());
  126.             // Читаем данные о каждой скачке
  127.             for (int i = 0; i < n; i++)
  128.             {
  129.                 // Читаем ключ, название, ипподром, дату, время и величину приза
  130.                 int id = int.Parse(sr.ReadLine());
  131.                 string name = sr.ReadLine();
  132.                 string track = sr.ReadLine();
  133.                 DateTime date = DateTime.Parse(sr.ReadLine());
  134.                 TimeSpan time = TimeSpan.Parse(sr.ReadLine());
  135.                 decimal prize = decimal.Parse(sr.ReadLine());
  136.                 // Читаем количество результатов
  137.                 int m = int.Parse(sr.ReadLine());
  138.                 // Читаем список пар (кличка лошади, ФИО жокея) по местам
  139.                 List<(string Horse, string Jockey)> results = new List<(string Horse, string Jockey)>();
  140.                 for (int j = 0; j < m; j++)
  141.                 {
  142.                     string horse = sr.ReadLine();
  143.                     string jockey = sr.ReadLine();
  144.                     results.Add((horse, jockey));
  145.                 }
  146.                 // Создаем объект скачки и добавляем его в список
  147.                 Race race = new Race(id, name, track, date, time, prize, results);
  148.                 races.Add(race);
  149.             }
  150.             // Читаем количество лошадей
  151.             n = int.Parse(sr.ReadLine());
  152.             // Читаем данные о каждой лошади
  153.             for (int i = 0; i < n; i++)
  154.             {
  155.                 // Читаем ключ, кличку, масть, возраст, владельца и место
  156.                 int id = int.Parse(sr.ReadLine());
  157.                 string name = sr.ReadLine();
  158.                 string color = sr.ReadLine();
  159.                 int age = int.Parse(sr.ReadLine());
  160.                 string owner = sr.ReadLine();
  161.                 int place = int.Parse(sr.ReadLine());
  162.                 // Создаем объект лошади и добавляем его в список
  163.                 Horse horse = new Horse(id, name, color, age, owner, place);
  164.                 horses.Add(horse);
  165.             }
  166.             // Читаем количество жокеев
  167.             n = int.Parse(sr.ReadLine());
  168.             // Читаем данные о каждом жокее
  169.             for (int i = 0; i < n; i++)
  170.             {
  171.                 // Читаем ключ, ФИО и возраст
  172.                 int id = int.Parse(sr.ReadLine());
  173.                 string name = sr.ReadLine();
  174.                 int age = int.Parse(sr.ReadLine());
  175.                 // Создаем объект жокея и добавляем его в список
  176.                 Jockey jockey = new Jockey(id, name, age);
  177.                 jockeys.Add(jockey);
  178.             }
  179.         }
  180.     }
  181.  
  182.     // Метод для вывода всех обобщенных списков на консоль
  183.     public void PrintAllLists()
  184.     {
  185.         Console.WriteLine("Список сведений о скачках:");
  186.         foreach (var race in races)
  187.         {
  188.             race.Print();
  189.         }
  190.         Console.WriteLine("Список сведений о лошадях:");
  191.         foreach (var horse in horses)
  192.         {
  193.             horse.Print();
  194.         }
  195.         Console.WriteLine("Список сведений о жокеях:");
  196.         foreach (var jockey in jockeys)
  197.         {
  198.             jockey.Print();
  199.         }
  200.     }
  201.  
  202.     // Метод для вывода списка лошадей и жокеев, занявших призовые места на заданную дату
  203.     public void PrintWinnersByDate(DateTime date)
  204.     {
  205.         Console.WriteLine($"Список лошадей и жокеев, занявших призовые места {date:dd.MM.yyyy}:");
  206.         // Находим все скачки на заданную дату
  207.         var racesByDate = races.Where(r => r.Date == date);
  208.         // Для каждой скачки выводим первые три места
  209.         foreach (var race in racesByDate)
  210.         {
  211.             Console.WriteLine($"Скачка №{race.Id}: {race.Name}");
  212.             for (int i = 0; i < 3 && i < race.Results.Count; i++)
  213.             {
  214.                 Console.WriteLine($"{i + 1}-е место: лошадь {race.Results[i].Horse}, жокей {race.Results[i].Jockey}");
  215.             }
  216.             Console.WriteLine();
  217.         }
  218.     }
  219.  
  220.     // Метод для вывода списка скачек, в которых принимала участие заданная лошадь
  221.     public void PrintRacesByHorse(string horse)
  222.     {
  223.         Console.WriteLine($"Список скачек, в которых принимала участие лошадь {horse}:");
  224.         // Находим все скачки, в которых участвовала заданная лошадь
  225.         var racesByHorse = races.Where(r => r.Results.Any(p => p.Horse == horse));
  226.         // Выводим данные о каждой скачке
  227.         foreach (var race in racesByHorse)
  228.         {
  229.             race.Print();
  230.         }
  231.     }
  232.  
  233.     // Метод для вывода списка скачек, в которых принимал участие заданный жокей
  234.     public void PrintRacesByJockey(string jockey)
  235.     {
  236.         Console.WriteLine($"Список скачек, в которых принимал участие жокей {jockey}:");
  237.         // Находим все скачки, в которых участвовал заданный жокей
  238.         var racesByJockey = races.Where(r => r.Results.Any(p => p.Jockey == jockey));
  239.         // Выводим данные о каждой скачке
  240.         foreach (var race in racesByJockey)
  241.         {
  242.             race.Print();
  243.         }
  244.     }
  245.  
  246.     // Метод для вывода клички лошади, занявшей больше всего призовых мест
  247.     public void PrintBestHorse()
  248.     {
  249.         Console.WriteLine("Кличка лошади, занявшей больше всего призовых мест:");
  250.         // Создаем словарь для подсчета количества призовых мест для каждой лошади
  251.         Dictionary<string, int> horseWins = new Dictionary<string, int>();
  252.         // Для каждой скачки обновляем словарь
  253.         foreach (var race in races)
  254.         {
  255.             for (int i = 0; i < 3 && i < race.Results.Count; i++)
  256.             {
  257.                 string horse = race.Results[i].Horse;
  258.                 if (horseWins.ContainsKey(horse))
  259.                 {
  260.                     horseWins[horse]++;
  261.                 }
  262.                 else
  263.                 {
  264.                     horseWins[horse] = 1;
  265.                 }
  266.             }
  267.         }
  268.         // Находим максимальное количество призовых мест
  269.         int maxWins = horseWins.Values.Max();
  270.         // Находим всех лошадей с таким количеством призовых мест и выводим их клички
  271.         var bestHorses = horseWins.Where(p => p.Value == maxWins).Select(p => p.Key);
  272.         foreach (var horse in bestHorses)
  273.         {
  274.             Console.WriteLine(horse);
  275.         }
  276.     }
  277.  
  278.     // Метод для вывода ФИО жокея, занявшего больше всего призовых мест
  279.     public void PrintBestJockey()
  280.     {
  281.         Console.WriteLine("ФИО жокея, занявшего больше всего призовых мест:");
  282.         // Создаем словарь для подсчета количества призовых мест для каждого жокея
  283.         Dictionary<string, int> jockeyWins = new Dictionary<string, int>();
  284.         // Для каждой скачки обновляем словарь
  285.         foreach (var race in races)
  286.         {
  287.             for (int i = 0; i < 3 && i < race.Results.Count; i++)
  288.             {
  289.                 string jockey = race.Results[i].Jockey;
  290.                 if (jockeyWins.ContainsKey(jockey))
  291.                 {
  292.                     jockeyWins[jockey]++;
  293.                 }
  294.                 else
  295.                 {
  296.                     jockeyWins[jockey] = 1;
  297.                 }
  298.             }
  299.         }
  300.         // Находим максимальное количество призовых мест
  301.         int maxWins = jockeyWins.Values.Max();
  302.         // Находим всех жокеев с таким количеством призовых мест и выводим их ФИО
  303.         var bestJockeys = jockeyWins.Where(p => p.Value == maxWins).Select(p => p.Key);
  304.         foreach (var jockey in bestJockeys)
  305.         {
  306.             Console.WriteLine(jockey);
  307.         }
  308.     }
  309.  
  310.     // Метод для вывода названия ипподрома, на котором чаще всего проводились скачки
  311.     public void PrintMostPopularTrack()
  312.     {
  313.         Console.WriteLine("Название ипподрома, на котором чаще всего проводились скачки:");
  314.         // Создаем словарь для подсчета количества скачек на каждом ипподроме
  315.         Dictionary<string, int> trackRaces = new Dictionary<string, int>();
  316.         // Для каждой скачки обновляем словарь
  317.         foreach (var race in races)
  318.         {
  319.             string track = race.Track;
  320.             if (trackRaces.ContainsKey(track))
  321.             {
  322.                 trackRaces[track]++;
  323.             }
  324.             else
  325.             {
  326.                 trackRaces[track] = 1;
  327.             }
  328.         }// Находим максимальное количество скачек на одном ипподроме
  329.         int maxRaces = trackRaces.Values.Max();
  330.         // Находим все ипподромы с таким количеством скачек и выводим их названия
  331.         var mostPopularTracks = trackRaces.Where(p => p.Value == maxRaces).Select(p => p.Key);
  332.         foreach (var track in mostPopularTracks)
  333.         {
  334.             Console.WriteLine(track);
  335.         }
  336.     }
  337.  
  338.     // Метод для добавления лошади для заданного жокея
  339.     public void AddHorseForJockey(string jockey)
  340.     {
  341.         Console.WriteLine($"Добавление лошади для жокея {jockey}:");
  342.         // Проверяем, есть ли такой жокей в списке
  343.         if (jockeys.Any(j => j.Name == jockey))
  344.         {
  345.             // Вводим данные о новой лошади
  346.             Console.Write("Введите ключ: ");
  347.             int id = int.Parse(Console.ReadLine());
  348.             Console.Write("Введите кличку: ");
  349.             string name = Console.ReadLine();
  350.             Console.Write("Введите масть: ");
  351.             string color = Console.ReadLine();
  352.             Console.Write("Введите возраст: ");
  353.             int age = int.Parse(Console.ReadLine());
  354.             Console.Write("Введите владельца: ");
  355.             string owner = Console.ReadLine();
  356.             Console.Write("Введите место: ");
  357.             int place = int.Parse(Console.ReadLine());
  358.             // Создаем объект лошади и добавляем его в список
  359.             Horse horse = new Horse(id, name, color, age, owner, place);
  360.             horses.Add(horse);
  361.             // Выводим сообщение об успешном добавлении
  362.             Console.WriteLine("Лошадь успешно добавлена.");
  363.         }
  364.         else
  365.         {
  366.             // Выводим сообщение об ошибке
  367.             Console.WriteLine("Такого жокея нет в списке.");
  368.         }
  369.     }
  370.  
  371.     // Метод для удаления лошади для заданного жокея
  372.     public void RemoveHorseForJockey(string jockey)
  373.     {
  374.         Console.WriteLine($"Удаление лошади для жокея {jockey}:");
  375.         // Проверяем, есть ли такой жокей в списке
  376.         if (jockeys.Any(j => j.Name == jockey))
  377.         {// Вводим кличку лошади, которую хотим удалить
  378.             Console.Write("Введите кличку лошади: ");
  379.             string name = Console.ReadLine();
  380.             // Проверяем, есть ли такая лошадь в списке
  381.             if (horses.Any(h => h.Name == name))
  382.             {
  383.                 // Находим индекс лошади в списке
  384.                 int index = horses.FindIndex(h => h.Name == name);
  385.                 // Удаляем лошадь из списка
  386.                 horses.RemoveAt(index);
  387.                 // Выводим сообщение об успешном удалении
  388.                 Console.WriteLine("Лошадь успешно удалена.");
  389.             }
  390.             else
  391.             {
  392.                 // Выводим сообщение об ошибке
  393.                 Console.WriteLine("Такой лошади нет в списке.");
  394.             }
  395.         }
  396.         else
  397.         {
  398.             // Выводим сообщение об ошибке
  399.             Console.WriteLine("Такого жокея нет в списке.");
  400.         }
  401.     }
  402.  
  403.     // Метод для запуска меню выбора запроса и обработки ввода пользователя
  404.     public void RunMenu()
  405.     {
  406.         bool exit = false; // Флаг выхода из цикла
  407.         while (!exit)
  408.         {
  409.             // Выводим меню на консоль
  410.             Console.WriteLine("Меню выбора запроса:");
  411.             Console.WriteLine("1 - Вывод всех обобщенных списков");
  412.             Console.WriteLine("2 - Вывод списка лошадей и жокеев, занявших призовые места на заданную дату");
  413.             Console.WriteLine("3 - Вывод списка скачек, в которых принимала участие заданная лошадь");
  414.             Console.WriteLine("4 - Вывод списка скачек, в которых принимал участие заданный жокей");
  415.             Console.WriteLine("5 - Вывод клички лошади, занявшей больше всего призовых мест");
  416.             Console.WriteLine("6 - Вывод ФИО жокея, занявшего больше всего призовых мест");
  417.             Console.WriteLine("7 - Вывод названия ипподрома, на котором чаще всего проводились скачки");
  418.             Console.WriteLine("8 - Добавление лошади для заданного жокея");
  419.             Console.WriteLine("9 - Удаление лошади для заданного жокея");
  420.             Console.WriteLine("0 - Выход из программы");
  421.             // Считываем выбор пользователя
  422.             Console.Write("Введите номер запроса: ");
  423.             int choice = int.Parse(Console.ReadLine());
  424.             // Обрабатываем выбор пользователя с помощью switch-case
  425.             switch (choice)
  426.             {
  427.                 case 1:
  428.                     // Вывод всех обобщенных списков
  429.                     PrintAllLists();
  430.                     break;
  431.                 case 2:
  432.                     // Вывод списка лошадей и жокеев, занявших призовые места на заданную дату
  433.                     Console.Write("Введите дату в формате дд.мм.гггг: ");
  434.                     DateTime date = DateTime.Parse(Console.ReadLine());
  435.                     PrintWinnersByDate(date);
  436.                     break;
  437.                 case 3:
  438.                     // Вывод списка скачек, в которых принимала участие заданная лошадь
  439.                     Console.Write("Введите кличку лошади: ");
  440.                     string horse = Console.ReadLine();
  441.                     PrintRacesByHorse(horse);
  442.                     break;
  443.                 case 4:
  444.                     // Вывод списка скачек, в которых принимал участие заданный жокей
  445.                     Console.Write("Введите ФИО жокея: ");
  446.                     string jockey = Console.ReadLine();
  447.                     PrintRacesByJockey(jockey);
  448.                     break;
  449.                 case 5:
  450.                     // Вывод клички лошади, занявшей больше всего призовых мест
  451.                     PrintBestHorse();
  452.                     break;
  453.                 case 6:
  454.                     // Вывод ФИО жокея, занявшего больше всего призовых мест
  455.                     PrintBestJockey();
  456.                     break;
  457.                 case 7:
  458.                     // Вывод названия ипподрома, на котором чаще всего проводились скачки
  459.                     PrintMostPopularTrack();
  460.                     break;
  461.                 case 8:
  462.                     // Добавление лошади для заданного жокея
  463.                     Console.Write("Введите ФИО жокея: ");
  464.                     jockey = Console.ReadLine();
  465.                     AddHorseForJockey(jockey);
  466.                     break;
  467.                 case 9:
  468.                     // Удаление лошади для заданного жокея
  469.                     Console.Write("Введите ФИО жокея: ");
  470.                     jockey = Console.ReadLine();
  471.                     RemoveHorseForJockey(jockey);
  472.                     break;
  473.                 case 0:
  474.                     // Выход из программы
  475.                     exit = true;
  476.                     break;
  477.                 default:
  478.                     // Неверный ввод
  479.                     Console.WriteLine("Неверный номер запроса. Повторите ввод.");
  480.                     break;
  481.             }
  482.         }
  483.     }
  484. }
  485.  
  486.  
  487.  
  488. // Класс с точкой входа в программу
  489. class Program
  490. {
  491.     static void Main(string[] args)
  492.     {
  493.         // Создаем объект информационной системы
  494.         RacingSystem rs = new RacingSystem();
  495.         // Загружаем данные из текстового файла
  496.         rs.LoadData("123.txt");
  497.         // Запускаем меню выбора запроса и обработку ввода пользователя
  498.         rs.RunMenu();
  499.     }
  500. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement