мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
java:pervyj_semestr [19/01/2015 09:23] – создано ybezrukovjava:pervyj_semestr [19/01/2015 09:24] (текущий) ybezrukov
Строка 843: Строка 843:
 [[https://drive.google.com/file/d/0B88BcoMr40VINTJIX1VuSlAxSTA/view?usp=sharing|Задание]] [[https://drive.google.com/file/d/0B88BcoMr40VINTJIX1VuSlAxSTA/view?usp=sharing|Задание]]
  
-==== Второй семестр ==== 
  
-===== Задание 1. Тур де Франс ===== 
- 
-Наша задача состоит в том, чтобы написать красивую объектно-ориентированную программу, которая будет заниматься обработкой данных результатов велогонки Тур де Франс. Данные гонки хранятся в трех текстовых файлах. 
- 
-Файл 1. tdf14_teams.txt 
- 
-В нем перечислены участники и команды. В каждой строке файла хранится запись вида: 
- 
-<code> 
-национальность фамилия имя год_рождения номер команда 
-</code> 
- 
-Например 
- 
-<code> 
-SUI ALBASINI Michael 1980 182 ORICA GREENEDGE 
-</code> 
- 
-Каждый участник однозначно идентифицируется по своему имени, а команда по названию (т.е. дубликатов нет) 
- 
-Файл 2. tdf14_stage.txt 
- 
-В нем перечислены этапы гонки в виде: 
- 
-<code> 
-номер_этапа дата место_отправления место_прибытия дистанция 
-</code> 
- 
-Например 
- 
-<code> 
-1 05/07/14 Leeds Harrogate 190 
-</code> 
- 
-Файл 3. tdf14_ranks.txt 
- 
-В этом файле содержатся рейтинги участников на разных этапах. Каждая строка содержит следующее: 
- 
-<code> 
-Номер_этапа место_участника номер_участника время_участника 
-</code> 
- 
-Участники, сошедшие с дистанции во время этапа с номером i, где (1 ≤ i ≤ 21) исключены из рейтингов для всех последующих этапов. 
- 
-Класс-обертка для чтения из файла прилагается. 
- 
-<code java> 
-import java.io.*; 
- 
-public class ReadData { 
- private BufferedReader reader; // читатель из файла 
- 
- /** 
- * Конструктор. 
- */ 
- public ReadData() { 
- reader = null; 
- } 
- 
- /** 
- * открывает текстовый файл 
- * @param fileName имя файла 
- * @return true если открыли успешно, false иначе. 
- */ 
- public boolean open(String fileName) { 
- try { 
- FileReader fr = new FileReader(fileName); 
- reader = new BufferedReader(fr); 
- return true; 
- } 
- catch(IOException ex) { 
- return false; 
- } 
- } 
- 
- /** 
- * Читает строку из файла, открытого методом open() 
- * @return прочитанная строка или null, если прочитать не удалось 
- */ 
- public String readLine() { 
- try { 
- return reader.readLine(); 
- } 
- catch(IOException ex) { 
- return null; 
- } 
- } 
- 
- /** 
- * Закрывает файл 
- */ 
- public void close() { 
- if (reader != null) { 
- try { 
- reader.close(); 
- } 
- catch(IOException ex) { 
- } 
- } 
- } 
-} 
- 
-</code> 
- 
-Работа делится на две части. Первая заключается в создании системы классов и объектов для представления данных и начальном заполнении их информацией из файла. Вторая в статистической обработке данных. 
- 
-Часть 1. 
- 
-Наша задача состоит в обработке файла tdf14_teams.txt. Для этого требуется создать следующие 4 класса. 
- 
-1. Racer. У нашего участника есть имя, фамилия, национальность, год рождения и номер участия. В классе должны быть необходимые геттеры и сеттеры, а так же метод int age(int year), который позволяет вычислить возраст участника, год передается в качестве параметра (например 2014) 
-2. Team. Команда имеет название и список участников. Должны быть реализованы следующие методы: 
-- Team(String name) конструктор, который принимает в качестве аргумента название команды. Список гонщиков инициализируется пустным списком 
-- void insert(Racer racer) добавляет гонщика в команду 
-- String getName() геттер для названия команды 
-- int numberOfRacers() возвращает количество гонщиков в команде 
-- Racer getRacers(int i) возвращает гонщика по номеру. Нумерация идет с нуля. 
-- int totalAge(int year) возвращает суммарный возраст участников. Год передается в качестве параметра. 
-3. TeamsList. Класс для списка команд. Должны быть реализованы следующие методы: 
-- TeamsList() конструктор, инициализирующий список команд пустым списком. 
-- void insert(Team team) добавляет команду в общий список. 
-- Team getTeam(String teamName) возвращает команду по ее названию. Если такой команды не найдено, должен возвращаться null. 
-- int numberOfTeams() возвращает количество команд 
-- Team getTeam(int i) возвращает i-ю команду. Нумерация с нуля. 
-4. TourDeFrance главный класс программы, содержащий метод main. В этом классе должны выполнятся вызовы методов для чтения данных о велосипедистах, создаваться необходимые объекты (участники, команды, список команд), показываться информация о командах и их участниках. После чтения данных и заполнения объектов нужно ответить на вопрос: каков средний возраст участников Тур де Франс 2014. Ответ округлить до двух знаков после запятой. Набросок для этого класса приведен далее. 
- 
-<code java> 
- 
-public class TourDeFrance { 
- /** 
- * Метод для создания гонщика, на основани файла с списком гонщиков/команд 
- * @param line одна строка из файла 
- * @param teamsList список команд, который заполняется на основании строки из файла 
- */ 
- public static void parceTeamLine(String line, ListeEquipe teamsList) { 
- // Элементы в строках нашего файла разделени знаками табуляции, их мы 
- // и будем использовать чтобы отличить один элемет от другого.  
- String[] elem = line.split("\t"); 
- 
- // Информация о гонщике 
- String nat = elem[0]; 
- String racerFamilyName = elem[1]; 
- String racerName = elem[2]; 
- int year = Integer.parseInt(elem[3]); 
- int number = Integer.parseInt(elem[4]); 
- String teamName = elem[5]; 
- 
- // TODO Найти команду по имени в списке 
- // TODO Если не найдено, то создать команду и добавить в список 
- // TODO Создать гонщика и добавить в команду 
- } 
- 
- /** 
- * Метод для создания команд 
- * @param  fileName Имя файла для команд 
- * @param  teamsList список команд 
- * @return если чтение данных прошло успешно, то возвращается true (это значит, 
- *    что все команды/участники прочитаны и занесены в список) 
- *    В противном случае возвращается false 
- */ 
- public static boolean createTeams(String fileName, ListeEquipe teamsList) { 
- // Объект, связанный с файлом, откуда мы будем построчно читать данные 
- ReadData reader = new ReadData(); 
- 
- if (reader.open(fileName)) { 
- // Пропустим заголовок 
- String line = reader.readLine(); 
- 
- // Обработаем строку для добавления в список 
- while ((line = reader.readLine()) != null) { 
- parceTeamLine(line, teamsList); 
- } 
- reader.close(); 
- return true; // все прошло хорошо 
- } 
- else { 
- return false; // или плохо 
- } 
- } 
- 
- /** 
- * Главный метод  
- * @param args аргументы командной строки 
- */ 
- public static void main(String[] args) { 
- final int currentYear = 2014; 
- final String teamsFileName = "tdf14_teams.txt"; 
- 
- // TODO Создать список команд (и инициализировать!) 
- 
- // Обработка файла с командами 
- boolean res = createTeams(teamsFileName, temsList); 
- if (!res) { 
- System.out.println("Произошла ошибка с чтением списка команд"); 
- } 
- else { 
- // TODO Оставшаяся часть программы (вывести данные, чтобы удостовериться в корректном чтении файла, 
- // вычислить средний возраст участников и т.д. 
- } 
- } 
-} 
- 
-</code>