Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- // Класс для хранения данных о скачке
- class Race
- {
- public int Id { get; set; } // Ключ
- public string Name { get; set; } // Название
- public string Track { get; set; } // Ипподром
- public DateTime Date { get; set; } // Дата
- public TimeSpan Time { get; set; } // Время
- public decimal Prize { get; set; } // Величина приза
- public List<(string Horse, string Jockey)> Results { get; set; } // Список пар (кличка лошади, ФИО жокея) по местам
- // Конструктор с параметрами
- public Race(int id, string name, string track, DateTime date, TimeSpan time, decimal prize, List<(string Horse, string Jockey)> results)
- {
- Id = id;
- Name = name;
- Track = track;
- Date = date;
- Time = time;
- Prize = prize;
- Results = results;
- }
- // Метод для вывода данных о скачке на консоль
- public void Print()
- {
- Console.WriteLine($"Скачка №{Id}: {Name}");
- Console.WriteLine($"Ипподром: {Track}");
- Console.WriteLine($"Дата и время: {Date:dd.MM.yyyy} {Time:hh\\:mm}");
- Console.WriteLine($"Величина приза: {Prize} руб.");
- Console.WriteLine("Результаты:");
- for (int i = 0; i < Results.Count; i++)
- {
- Console.WriteLine($"{i + 1}-е место: лошадь {Results[i].Horse}, жокей {Results[i].Jockey}");
- }
- Console.WriteLine();
- }
- }
- // Класс для хранения данных о лошади
- class Horse
- {
- public int Id { get; set; } // Ключ
- public string Name { get; set; } // Кличка
- public string Color { get; set; } // Масть
- public int Age { get; set; } // Возраст
- public string Owner { get; set; } // Владелец
- public int Place { get; set; } // Место
- // Конструктор с параметрами
- public Horse(int id, string name, string color, int age, string owner, int place)
- {
- Id = id;
- Name = name;
- Color = color;
- Age = age;
- Owner = owner;
- Place = place;
- }
- // Метод для вывода данных о лошади на консоль
- public void Print()
- {
- Console.WriteLine($"Лошадь №{Id}: {Name}");
- Console.WriteLine($"Масть: {Color}");
- Console.WriteLine($"Возраст: {Age} лет");
- Console.WriteLine($"Владелец: {Owner}");
- Console.WriteLine($"Место: {Place}");
- Console.WriteLine();
- }
- }
- // Класс для хранения данных о жокее
- class Jockey
- {
- public int Id { get; set; } // Ключ
- public string Name { get; set; } // ФИО
- public int Age { get; set; } // Возраст
- // Конструктор с параметрами
- public Jockey(int id, string name, int age)
- {
- Id = id;
- Name = name;
- Age = age;
- }
- // Метод для вывода данных о жокее на консоль
- public void Print()
- {
- Console.WriteLine($"Жокей №{Id}: {Name}");
- Console.WriteLine($"Возраст: {Age} лет");
- Console.WriteLine();
- }
- }
- // Класс для работы с информационной системой "Жокейские Скачки"
- class RacingSystem
- {
- private List<Race> races; // Список сведений о скачках
- private List<Horse> horses; // Список сведений о лошадях
- private List<Jockey> jockeys; // Список сведений о жокеях
- // Конструктор без параметров
- public RacingSystem()
- {
- races = new List<Race>();
- horses = new List<Horse>();
- jockeys = new List<Jockey>();
- }
- // Метод для загрузки данных из текстового файла
- public void LoadData(string fileName)
- {
- using (StreamReader sr = new StreamReader(fileName))
- {
- // Читаем количество скачек
- int n = int.Parse(sr.ReadLine());
- // Читаем данные о каждой скачке
- for (int i = 0; i < n; i++)
- {
- // Читаем ключ, название, ипподром, дату, время и величину приза
- int id = int.Parse(sr.ReadLine());
- string name = sr.ReadLine();
- string track = sr.ReadLine();
- DateTime date = DateTime.Parse(sr.ReadLine());
- TimeSpan time = TimeSpan.Parse(sr.ReadLine());
- decimal prize = decimal.Parse(sr.ReadLine());
- // Читаем количество результатов
- int m = int.Parse(sr.ReadLine());
- // Читаем список пар (кличка лошади, ФИО жокея) по местам
- List<(string Horse, string Jockey)> results = new List<(string Horse, string Jockey)>();
- for (int j = 0; j < m; j++)
- {
- string horse = sr.ReadLine();
- string jockey = sr.ReadLine();
- results.Add((horse, jockey));
- }
- // Создаем объект скачки и добавляем его в список
- Race race = new Race(id, name, track, date, time, prize, results);
- races.Add(race);
- }
- // Читаем количество лошадей
- n = int.Parse(sr.ReadLine());
- // Читаем данные о каждой лошади
- for (int i = 0; i < n; i++)
- {
- // Читаем ключ, кличку, масть, возраст, владельца и место
- int id = int.Parse(sr.ReadLine());
- string name = sr.ReadLine();
- string color = sr.ReadLine();
- int age = int.Parse(sr.ReadLine());
- string owner = sr.ReadLine();
- int place = int.Parse(sr.ReadLine());
- // Создаем объект лошади и добавляем его в список
- Horse horse = new Horse(id, name, color, age, owner, place);
- horses.Add(horse);
- }
- // Читаем количество жокеев
- n = int.Parse(sr.ReadLine());
- // Читаем данные о каждом жокее
- for (int i = 0; i < n; i++)
- {
- // Читаем ключ, ФИО и возраст
- int id = int.Parse(sr.ReadLine());
- string name = sr.ReadLine();
- int age = int.Parse(sr.ReadLine());
- // Создаем объект жокея и добавляем его в список
- Jockey jockey = new Jockey(id, name, age);
- jockeys.Add(jockey);
- }
- }
- }
- // Метод для вывода всех обобщенных списков на консоль
- public void PrintAllLists()
- {
- Console.WriteLine("Список сведений о скачках:");
- foreach (var race in races)
- {
- race.Print();
- }
- Console.WriteLine("Список сведений о лошадях:");
- foreach (var horse in horses)
- {
- horse.Print();
- }
- Console.WriteLine("Список сведений о жокеях:");
- foreach (var jockey in jockeys)
- {
- jockey.Print();
- }
- }
- // Метод для вывода списка лошадей и жокеев, занявших призовые места на заданную дату
- public void PrintWinnersByDate(DateTime date)
- {
- Console.WriteLine($"Список лошадей и жокеев, занявших призовые места {date:dd.MM.yyyy}:");
- // Находим все скачки на заданную дату
- var racesByDate = races.Where(r => r.Date == date);
- // Для каждой скачки выводим первые три места
- foreach (var race in racesByDate)
- {
- Console.WriteLine($"Скачка №{race.Id}: {race.Name}");
- for (int i = 0; i < 3 && i < race.Results.Count; i++)
- {
- Console.WriteLine($"{i + 1}-е место: лошадь {race.Results[i].Horse}, жокей {race.Results[i].Jockey}");
- }
- Console.WriteLine();
- }
- }
- // Метод для вывода списка скачек, в которых принимала участие заданная лошадь
- public void PrintRacesByHorse(string horse)
- {
- Console.WriteLine($"Список скачек, в которых принимала участие лошадь {horse}:");
- // Находим все скачки, в которых участвовала заданная лошадь
- var racesByHorse = races.Where(r => r.Results.Any(p => p.Horse == horse));
- // Выводим данные о каждой скачке
- foreach (var race in racesByHorse)
- {
- race.Print();
- }
- }
- // Метод для вывода списка скачек, в которых принимал участие заданный жокей
- public void PrintRacesByJockey(string jockey)
- {
- Console.WriteLine($"Список скачек, в которых принимал участие жокей {jockey}:");
- // Находим все скачки, в которых участвовал заданный жокей
- var racesByJockey = races.Where(r => r.Results.Any(p => p.Jockey == jockey));
- // Выводим данные о каждой скачке
- foreach (var race in racesByJockey)
- {
- race.Print();
- }
- }
- // Метод для вывода клички лошади, занявшей больше всего призовых мест
- public void PrintBestHorse()
- {
- Console.WriteLine("Кличка лошади, занявшей больше всего призовых мест:");
- // Создаем словарь для подсчета количества призовых мест для каждой лошади
- Dictionary<string, int> horseWins = new Dictionary<string, int>();
- // Для каждой скачки обновляем словарь
- foreach (var race in races)
- {
- for (int i = 0; i < 3 && i < race.Results.Count; i++)
- {
- string horse = race.Results[i].Horse;
- if (horseWins.ContainsKey(horse))
- {
- horseWins[horse]++;
- }
- else
- {
- horseWins[horse] = 1;
- }
- }
- }
- // Находим максимальное количество призовых мест
- int maxWins = horseWins.Values.Max();
- // Находим всех лошадей с таким количеством призовых мест и выводим их клички
- var bestHorses = horseWins.Where(p => p.Value == maxWins).Select(p => p.Key);
- foreach (var horse in bestHorses)
- {
- Console.WriteLine(horse);
- }
- }
- // Метод для вывода ФИО жокея, занявшего больше всего призовых мест
- public void PrintBestJockey()
- {
- Console.WriteLine("ФИО жокея, занявшего больше всего призовых мест:");
- // Создаем словарь для подсчета количества призовых мест для каждого жокея
- Dictionary<string, int> jockeyWins = new Dictionary<string, int>();
- // Для каждой скачки обновляем словарь
- foreach (var race in races)
- {
- for (int i = 0; i < 3 && i < race.Results.Count; i++)
- {
- string jockey = race.Results[i].Jockey;
- if (jockeyWins.ContainsKey(jockey))
- {
- jockeyWins[jockey]++;
- }
- else
- {
- jockeyWins[jockey] = 1;
- }
- }
- }
- // Находим максимальное количество призовых мест
- int maxWins = jockeyWins.Values.Max();
- // Находим всех жокеев с таким количеством призовых мест и выводим их ФИО
- var bestJockeys = jockeyWins.Where(p => p.Value == maxWins).Select(p => p.Key);
- foreach (var jockey in bestJockeys)
- {
- Console.WriteLine(jockey);
- }
- }
- // Метод для вывода названия ипподрома, на котором чаще всего проводились скачки
- public void PrintMostPopularTrack()
- {
- Console.WriteLine("Название ипподрома, на котором чаще всего проводились скачки:");
- // Создаем словарь для подсчета количества скачек на каждом ипподроме
- Dictionary<string, int> trackRaces = new Dictionary<string, int>();
- // Для каждой скачки обновляем словарь
- foreach (var race in races)
- {
- string track = race.Track;
- if (trackRaces.ContainsKey(track))
- {
- trackRaces[track]++;
- }
- else
- {
- trackRaces[track] = 1;
- }
- }// Находим максимальное количество скачек на одном ипподроме
- int maxRaces = trackRaces.Values.Max();
- // Находим все ипподромы с таким количеством скачек и выводим их названия
- var mostPopularTracks = trackRaces.Where(p => p.Value == maxRaces).Select(p => p.Key);
- foreach (var track in mostPopularTracks)
- {
- Console.WriteLine(track);
- }
- }
- // Метод для добавления лошади для заданного жокея
- public void AddHorseForJockey(string jockey)
- {
- Console.WriteLine($"Добавление лошади для жокея {jockey}:");
- // Проверяем, есть ли такой жокей в списке
- if (jockeys.Any(j => j.Name == jockey))
- {
- // Вводим данные о новой лошади
- Console.Write("Введите ключ: ");
- int id = int.Parse(Console.ReadLine());
- Console.Write("Введите кличку: ");
- string name = Console.ReadLine();
- Console.Write("Введите масть: ");
- string color = Console.ReadLine();
- Console.Write("Введите возраст: ");
- int age = int.Parse(Console.ReadLine());
- Console.Write("Введите владельца: ");
- string owner = Console.ReadLine();
- Console.Write("Введите место: ");
- int place = int.Parse(Console.ReadLine());
- // Создаем объект лошади и добавляем его в список
- Horse horse = new Horse(id, name, color, age, owner, place);
- horses.Add(horse);
- // Выводим сообщение об успешном добавлении
- Console.WriteLine("Лошадь успешно добавлена.");
- }
- else
- {
- // Выводим сообщение об ошибке
- Console.WriteLine("Такого жокея нет в списке.");
- }
- }
- // Метод для удаления лошади для заданного жокея
- public void RemoveHorseForJockey(string jockey)
- {
- Console.WriteLine($"Удаление лошади для жокея {jockey}:");
- // Проверяем, есть ли такой жокей в списке
- if (jockeys.Any(j => j.Name == jockey))
- {// Вводим кличку лошади, которую хотим удалить
- Console.Write("Введите кличку лошади: ");
- string name = Console.ReadLine();
- // Проверяем, есть ли такая лошадь в списке
- if (horses.Any(h => h.Name == name))
- {
- // Находим индекс лошади в списке
- int index = horses.FindIndex(h => h.Name == name);
- // Удаляем лошадь из списка
- horses.RemoveAt(index);
- // Выводим сообщение об успешном удалении
- Console.WriteLine("Лошадь успешно удалена.");
- }
- else
- {
- // Выводим сообщение об ошибке
- Console.WriteLine("Такой лошади нет в списке.");
- }
- }
- else
- {
- // Выводим сообщение об ошибке
- Console.WriteLine("Такого жокея нет в списке.");
- }
- }
- // Метод для запуска меню выбора запроса и обработки ввода пользователя
- public void RunMenu()
- {
- bool exit = false; // Флаг выхода из цикла
- while (!exit)
- {
- // Выводим меню на консоль
- Console.WriteLine("Меню выбора запроса:");
- Console.WriteLine("1 - Вывод всех обобщенных списков");
- Console.WriteLine("2 - Вывод списка лошадей и жокеев, занявших призовые места на заданную дату");
- Console.WriteLine("3 - Вывод списка скачек, в которых принимала участие заданная лошадь");
- Console.WriteLine("4 - Вывод списка скачек, в которых принимал участие заданный жокей");
- Console.WriteLine("5 - Вывод клички лошади, занявшей больше всего призовых мест");
- Console.WriteLine("6 - Вывод ФИО жокея, занявшего больше всего призовых мест");
- Console.WriteLine("7 - Вывод названия ипподрома, на котором чаще всего проводились скачки");
- Console.WriteLine("8 - Добавление лошади для заданного жокея");
- Console.WriteLine("9 - Удаление лошади для заданного жокея");
- Console.WriteLine("0 - Выход из программы");
- // Считываем выбор пользователя
- Console.Write("Введите номер запроса: ");
- int choice = int.Parse(Console.ReadLine());
- // Обрабатываем выбор пользователя с помощью switch-case
- switch (choice)
- {
- case 1:
- // Вывод всех обобщенных списков
- PrintAllLists();
- break;
- case 2:
- // Вывод списка лошадей и жокеев, занявших призовые места на заданную дату
- Console.Write("Введите дату в формате дд.мм.гггг: ");
- DateTime date = DateTime.Parse(Console.ReadLine());
- PrintWinnersByDate(date);
- break;
- case 3:
- // Вывод списка скачек, в которых принимала участие заданная лошадь
- Console.Write("Введите кличку лошади: ");
- string horse = Console.ReadLine();
- PrintRacesByHorse(horse);
- break;
- case 4:
- // Вывод списка скачек, в которых принимал участие заданный жокей
- Console.Write("Введите ФИО жокея: ");
- string jockey = Console.ReadLine();
- PrintRacesByJockey(jockey);
- break;
- case 5:
- // Вывод клички лошади, занявшей больше всего призовых мест
- PrintBestHorse();
- break;
- case 6:
- // Вывод ФИО жокея, занявшего больше всего призовых мест
- PrintBestJockey();
- break;
- case 7:
- // Вывод названия ипподрома, на котором чаще всего проводились скачки
- PrintMostPopularTrack();
- break;
- case 8:
- // Добавление лошади для заданного жокея
- Console.Write("Введите ФИО жокея: ");
- jockey = Console.ReadLine();
- AddHorseForJockey(jockey);
- break;
- case 9:
- // Удаление лошади для заданного жокея
- Console.Write("Введите ФИО жокея: ");
- jockey = Console.ReadLine();
- RemoveHorseForJockey(jockey);
- break;
- case 0:
- // Выход из программы
- exit = true;
- break;
- default:
- // Неверный ввод
- Console.WriteLine("Неверный номер запроса. Повторите ввод.");
- break;
- }
- }
- }
- }
- // Класс с точкой входа в программу
- class Program
- {
- static void Main(string[] args)
- {
- // Создаем объект информационной системы
- RacingSystem rs = new RacingSystem();
- // Загружаем данные из текстового файла
- rs.LoadData("123.txt");
- // Запускаем меню выбора запроса и обработку ввода пользователя
- rs.RunMenu();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement