Опубликован: 19.02.2009 | Доступ: свободный | Студентов: 3075 / 803 | Оценка: 4.35 / 4.11 | Длительность: 16:28:00
ISBN: 978-5-94774-401-9
Лекция 15:

Интерфейсы и структуры

< Лекция 14 || Лекция 15: 123 || Лекция 16 >

15.2. Практикум

Замечания.
  1. Во всех задачах данного раздела подразумевается, что исходная информация хранится в текстовом файле input.txt, каждая строка которого содержит полную информацию о некотором объекте, результирующая информация должна быть записана в файл output.txt.
  2. Для хранения данных внутри программы организовать массив структур.
  3. В типе структура реализуется метод CompareTo интерфейса IComparable, перегружается метод ToString базового класса object и необходимые операции отношения, поля данных и дополнительные методы продумайте самостоятельно.
  1. На основе данных входного файла составить список студентов группы, включив следующие данные: ФИО, год рождения, домашний адрес, какую школу окончил. Вывести в новый файл информацию о студентах, окончивших заданную школу, отсортировав их по году рождения.
  2. На основе данных входного файла составить список студентов группы, включив следующие данные: ФИО, номер группы, результаты сдачи трех экзаменов. Вывести в новый файл информацию о студентах, успешно сдавших сессию, отсортировав по номеру группы.
  3. На основе данных входного файла составить багажную ведомость камеры хранения, включив следующие данные: ФИО пассажира, количество вещей, общий вес вещей. Вывести в новый файл информацию о тех пассажирах, средний вес багажа которых превышает заданный, отсортировав их по количеству вещей, сданных в камеру хранения.
  4. На основе данных входного файла составить автомобильную ведомость, включив следующие данные: марка автомобиля, номер автомобиля, фамилия его владельца, год приобретения, пробег. Вывести в новый файл информацию об автомобилях, выпущенных ранее определенного года, отсортировав их по пробегу.
  5. На основе данных входного файла составить список сотрудников учреждения, включив следующие данные: ФИО, год принятия на работу, должность, зарплата, рабочий стаж. Вывести в новый файл информацию о сотрудниках, имеющих зарплату ниже определенного уровня, отсортировав их по рабочему стажу.
  6. На основе данных входного файла составить инвентарную ведомость склада, включив следующие данные: вид продукции, стоимость, сорт, количество. Вывести в новый файл информацию о той продукции, количество которой менее заданной величины, отсортировав ее по количеству продукции на складе.
  7. На основе данных входного файла составить инвентарную ведомость игрушек, включив следующие данные: название игрушки, ее стоимость (в руб.), возрастные границы детей, для которых предназначена игрушка. Вывести в новый файл информацию о тех игрушках, которые предназначены для детей от N до M лет, отсортировав их по стоимости.
  8. На основе данных входного файла составить список вкладчиков банка, включив следующие данные: ФИО, № счета, сумма, год открытия счета. Вывести в новый файл информацию о тех вкладчиках, которые открыли вклад в текущем году, отсортировав их по сумме вклада.
  9. На основе данных входного файла составить список студентов, включающий фамилию, факультет, курс, группу, 5 оценок. Вывести в новый файл информацию о тех студентах, которые имеют хотя бы одну двойку, отсортировав их по курсу.
  10. На основе данных входного файла составить список студентов, включающий ФИО, курс, группу, результат забега. Вывести в новый файл информацию о студентах, показавших три лучших результата в забеге. Если окажется, что некоторые студенты получили такие же высокие результаты, то добавить их к списку победителей.

15.3. Самостоятельная работа

Теоретический материал

В пространстве имен System.Collection определено несколько интерфейсов, определяющих функциональность многих стандартных классов в С#, в том числе и коллекций (которые будет рассматриваться в следующем разделе). Рассмотрим более подробно интерфейсные коллекции, описание которых приведено в следующей таблице:

Интерфейс Описание
IEnumerator Содержит методы, которые позволяют поэлементно получать содержимое коллекции
IEnumerable Определяет метод GetEnumerator( ), который поддерживает нумератор для любого класса коллекции
ICollection Определяет элементы, которые должны иметь все коллекции
IComparer Определяет метод Compare( ) , который выполняет сравнение объектов, хранимых в коллекции
IList Определяет коллекцию, к которой можно получить доступ посредством индексатора
IDictionary Определяет коллекцию (словарь), которая состоит из пар ключ/значение
IDictionaryEnumerator Определяет нумератор для коллекции, которая реализует интерфейс IDictionary
IHashCodeProvider Определяет хеш-функцию

Основополагающим для всех коллекций является реализация перечислителя (нумератора),который поддерживается интерфейсами IEnumerator и IEnumerable. Перечислитель обеспечивает стандартизованный способ поэлементного доступа к содержимому коллекции, в том числе и через использование цикла foreach.

Интерфейс ICollection наследует интерфейс IEnumerable. В ICollection объявлены основные методы и свойства, без которых не может обойтись ни одна коллекция:

Элемент интерфейса Его тип описание
int Сount {get;} Свойство Определяет количество элементов коллекции в данный момент. Если Count равно нулю, то коллекция пуста.
void CopyTo (Array target, int startIdx) Метод Обеспечивает переход от коллекции к стандартному С#-массиву, копируя содержимое коллекции в массив, заданный параметром target, начиная с индекса, заданного параметром startIdx .

Интерфейс IList наследует интерфейс ICollection и определяет поведение коллекции, доступ к элементам которой разрешен посредством индекса с отсчетом от нуля. Помимо методов, определенных в интерфейсе ICollection, интерфейс IList определяет и собственные методы:

Элемент интерфейса Его тип Описание
int Add(object obj) Метод Добавляет объект obj в вызывающую коллекцию. Возвращает индекс, по которому этот объект сохранен
void Clear() Метод Удаляет все элементы из вызывающей коллекции
bool Contains(object obj) Метод Возвращает значение true, если вызывающая коллекция содержит объект, переданный в параметре obj, и значение false в противном случае
int IndexOf(object obj) Метод Возвращает индекс объекта obj, если он (объект) содержится в вызывающей коллекции. Если объект obj не обнаружен, метод возвращает -1
void Insert(int idx, object obj) Метод Вставляет в вызывающую коллекцию объект obj по индексу, заданному параметром idx. Элементы, находившиеся до этого по индексу idx и далее, смещаются вперед, чтобы освободить место для вставляемого объекта obj
void Remove(object obj) Метод Удаляет первое вхождение объекта obj из вызывающей коллекции. Элементы, находившиеся до этого за удаленным элементом, смещаются назад, чтобы ликвидировать образовавшуюся "брешь"
void RemoveAt(int idx) Метод Удаляет из вызывающей коллекции объект, расположенный по индексу, заданному параметром idx. Элементы, находившиеся до этого за удаленным элементом, смещаются, ликвидируя образовавшуюся "брешь"
bool IsFixedSize { get; } Свойство Принимает значение true, если коллекция имеет фиксированный размер. Это означает, что в такую коллекцию нельзя вставлять элементы и удалять их из нее.
bool IsReadOnly { get; } Свойство Принимает значение true, если коллекция предназначена только для чтения.
object this[int idx] { get; set; } Индексатор Используется для считывания или записи значения элемента с индексом idx. Нельзя применить для добавления в коллекцию нового элемента.

Интерфейс IDictionary наследует интерфейс ICollection. Он определяет поведение коллекции, которая устанавливает соответствие между уникальными ключами и значениями. Коллекции, реализующии интерфейс IDictionary называют словарями. Ключ - это объект, который используется для получения соответствующего ему значения. Сохраненную однажды пару можно затем извлечь по заданному ключу.

Элемент интерфейса Его тип Описание
void Add (object к, object v) метод Добавляет в вызывающую коллекцию пару ключ/значение, заданную параметрами к и v. Ключ к не должен быть нулевым. При попытке задать нулевой ключ генерируют исключение типа NotSupportedException Если окажется, что ключ к уже хранится в коллекции, генерируется исключение типа ArgumentException
void Clear () метод Удаляет все пары ключ/значение из вызывающей коллекции
bool Contains (object к) метод Возвращает значение true , если вызывающая коллекция содержит объект к в качестве ключа. В противном случае возвращает значение false
IDictionaryEnumerator GetEnumerator() метод Возвращает нумератор для вызывающей коллекции
void Remove (object к) метод Удаляет элемент, ключ которого равен значению к
bool isFixedSize { get } свойство Равно значению true , если коллекция имеет фиксированный размер
bool isReadOnly { get } свойство Равно значению true, если коллекция предназначена только для чтения
ICollection Keys { get } свойство Получает коллекцию ключей
icollection Values { get} свойство Получает коллекцию значений
object this[object key] { get; set; } индексатор Этот индексатор можно использовать для получения или установки значения элемента, а также для добавления в коллекцию нового элемента. "Индекс" в данном случае является ключом элемента.

Интерфейс IDictionaryEnumerator является производным от интерфейса IEnumerator и распространяет свои функциональные возможности нумератора на область словарей.

В интерфейсе IComparer определен метод Compare (), который позволяет сравнивать два объекта:

int Compare(object vl, object v2)

Метод Compare () возвращает положительное число, если значение vl больше значения v2, отрицательное, если vl меньше v2, и нуль, если сравниваемые значения равны. Этот интерфейс можно использовать для задания способа сортировки элементов коллекции.

Интерфейс IHashCodeProvider должен быть реализован коллекцией, если программисту необходимо определить собственную версию метода GetHashCode ().

Задание

Для получения дополнительной информации по данным интерфейсам обратитесь к дополнительной литературе, интернет и документации по С#

< Лекция 14 || Лекция 15: 123 || Лекция 16 >