Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MetodUkaz_VP_S.docx
Скачиваний:
16
Добавлен:
11.03.2015
Размер:
14.12 Mб
Скачать

Задания к выполнению

Написать программу позволяющую строить диаграмму по введенным данным. Данные должны вводится в DataGridView, диаграмма должна рисоваться без применения элемента управленияChart. Вид диаграммы определяется из варианта.

вари- анта

Размерность таблицы

Наименование диаграммы

Вид диаграммы

1

3х3

Пузырьковая диаграмма. Отображает на плоскости наборы из трех значений. Подобна точечной диаграмме, но третья величина отображает размер пузырька.

2

2х3

Линейчатая диаграмма с накоплением. Отражает вклад каждой категории в общую сумму

3

2х4

Заполненная лепестковая диаграмма.

4

2х2

Кольцевая диаграмма, отображающая несколько рядов данных.

5

3х2

Диаграмма с областями. Хорошо отображает изменение значений ряда с течением времени.

6

5х1

Вторичная круговая диаграмма с частью значений, вынесенных во вторую диаграмму.

7

1х5

Обычная диаграмма, отображающая значения различных категорий.

8

3х3

Нормированная линейчатая диаграмма. Отражает долю каждой категории в общей сумме.

9

1х5

Линейчатая диаграмма. Отображает значения различных категорий.

10

2х3

Гистограмма со столбцами в виде конусов.

11

5х1

Вторичная гистограмма. Круговая диаграмма с частью значений, вынесенных в гистограмму.

12.

3х1

Кольцевая диаграмма.

13

2х3

Гистограмма с накоплением. Отражает вклад каждой категории в общую сумму.

14

3х1

Разрезанная кольцевая диаграмма.

15

3х3

Нормированная гистограмма. Отображает долю каждой категории в общей сумме.

Лабораторная работа №6

Работа с массивами и коллекциями.

Цель работы: организовать работу с массивами и коллекциями через меню.

Теоритические сведения

Интерфейсы

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

С помощью интерфейсов можно, например, включить поведение из нескольких источников в классе. Эта возможность важна в C#, поскольку язык не поддерживает множественное наследование классов. Кроме того, необходимо использовать интерфейс, если требуется имитировать наследование для структур, поскольку они фактически не могут наследоваться из других структур или классов.

Определен интерфейс с помощью ключевого слова интерфейс, как показано в следующем примере.

interface IEquatable<T> {

bool Equals(T obj);

}

Любой класс или структура, реализующие интерфейс IEquatable<T>, должны содержать определение метода Equals, который соответствует сигнатуре, интерфейс определяет. В результате можно рассчитывать на то, что класс, реализующий интерфейс IEquatable<T>, будет содержать метод Equals, с которым экземпляр класса может определить, является ли он равным другому экземпляру класса.

Определение IEquatable<T> не предоставляет реализацию Equals. Интерфейс определяет только сигнатуру. В этом смысле интерфейс в C# аналогичен абстрактному классу, в котором все методы являются абстрактными. Однако класс или структура может реализовывать несколько интерфейсов, но класс может наследовать только один класс, абстрактные или нет. Таким образом, с помощью интерфейсов можно включить расширение функциональности из нескольких источников в классе.

Интерфейсы могут содержать методы, свойства, события, индексаторы или любое сочетание этих типов 4 элементов. Для ссылки на примеры см. в разделе Связанные разделы. Интерфейс не может содержать константы, поля, оператор, конструктор, деструктор экземпляра, или типы. Члены интерфейса автоматически открытыми, и они не могут включать все модификаторы доступа. Члены также не могут быть статический.

Для реализации члена интерфейса соответствующий член класса должен быть открытым, нестатическим, и иметь то же имя и сигнатуру, что и член интерфейса.

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

В следующем примере показана реализация интерфейса<T> IEquatable. Класс, реализующий Car, должен предоставить реализацию метода Equals.

public class Car : IEquatable<Car>

{

public string Make { get; set; }

public string Model { get; set; }

public string Year { get; set; }

// Реализация метода сравнения определенного в интерфейсе

public bool Equals(Car car)

{

if (this.Make == car.Make &&

this.Model == car.Model &&

this.Year == car.Year)

{

return true;

}

else

return false;

}

}

Свойства класса и индексаторы могут определять дополнительные методы доступа для свойства или индексатора, определенный в интерфейсе. Например, интерфейс может объявить свойство, которое имеет доступ получение. Класс, реализующий интерфейс может объявлять то же свойство как с get, так и с доступом набор. Если же свойство или индексатор использует явную реализацию, методы доступа должны совпадать.

Интерфейсы могут реализовывать другие интерфейсы Класс может содержать несколько раз интерфейса через базовые классы, которые он наследует или через другие интерфейсы, которые реализуют интерфейсы. Однако класс может предоставить реализацию интерфейса только один раз и только если класс объявляет интерфейс как часть определения класса (class ClassName : InterfaceName). Если интерфейс наследуется, поскольку его унаследованные базовый класс, реализующий интерфейс, базовый класс предоставляет реализацию членов интерфейса. Однако производный класс может повторно реализовать член интерфейса вместо использования унаследованной реализации.

Интерфейс имеет следующие свойства:

  • Интерфейс похож на абстрактный базовый класс. Любой класс или структура, реализующие интерфейс должны реализовать все его члены.

  • Невозможно создать экземпляр интерфейса напрямую. Его члены реализованы всеми классом или структурой, реализующей интерфейс.

  • Интерфейсы могут содержать события, индексаторы, методы и свойства в качестве членов.

  • Интерфейсы не содержат реализации методов.

  • Класс или структура может реализовывать несколько интерфейсов. Класс может наследовать базовый класс и реализовать один или несколько интерфейсов.

Array

Вы уже познакомились с массивами во втором пункте первой лабораторной работы. Итак, В C# массивы фактически являются объектами, а не только адресуемыми областями непрерывной памяти, как в C и C++. Элементом называется значение, содержащееся в объекте Array. Длина объекта Array равна общему числу элементов, которые могут в нем содержаться. Ранг объекта Array равен размерности объекта Array. Нижняя граница измерения объекта Array является начальным индексом этого измерения объекта Array; в многомерном массиве Array у каждого измерения могут быть свои нижние границы. Массив может иметь максимум 32 размерности. Array является абстрактным базовым типом всех типов массивов, тем не менее, явно наследовать от класса Array может только система и компиляторы. Пользователи должны применять конструкции массивов, предоставляемые языком программирования. Можно использовать свойства и другие члены класса, которые имеет Array. В примере используется свойство Length для получения длины массива. В следующем коде длина массива numbers, равная 5, присваивается переменной lengthOfNumbers:

int[] numbers = { 1, 2, 3, 4, 5 };

int lengthOfNumbers = numbers.Length;

Класс Array позволяет использовать много других полезных методов и свойств для выполнения сортировки, поиска и копирования массивов. Например метод Array.Copy копирует элементы из массива в массив, не только когда типы этих массивов совпадают, но и когда они различны; приведение типов при этом выполняется автоматически. А для сортировки можно использовать метод Array.Sort, для бинарного поиска методArray.BinarySearch. Существует еще множество других методов, например определение первого вхождения элемента или последнего и т.д. о них рекомендуется почитать наMSDN.

Примечание: Сортировка объекта Array не гарантируется. Объект Array должен быть отсортирован до выполнения операций (таких, как BinarySearch), для которых требуется сортировка объекта Array.

Коллекции

Во многих приложениях требуется создавать группы связанных объектов и управлять этими группами. Существует два способа группировки объектов: создать массив объектов и создать коллекцию.

Массивы удобнее всего использовать для создания и работы с фиксированным числом строго типизированных объектов.

Коллекции предоставляют более гибкий способ работы с группами объектов. В отличие от массивов, группа объектов в классе может динамически возрастать и сокращаться в соответствии с потребностями приложения. Некоторые коллекции допускают назначение ключа любому объекту, который добавляется в коллекцию, чтобы в дальнейшем можно было быстро извлечь связанный с ключом объект из коллекции.

Коллекция является классом, поэтому необходимо объявить новую коллекцию перед добавлением в неё элементов.

Если коллекция содержит элементы только одного типа данных, можно использовать один из классов в пространстве имен System.Collections.Generic. Универсальная коллекция обеспечивает безопасность типов, так что другие типы данных не могут быть в нее добавлены. При извлечении элемента из универсальной коллекции нет необходимости определять или преобразовывать его тип данных.

Многие типовые коллекции предоставляются платформой .NET Framework. Каждый тип коллекции предназначен для определенной цели:

  • Классы System.Collections.Generic

  • Классы System.Collections.Concurrent

  • Классы System.Collections

Классы System.Collections.Generic

Класс

Описание

Dictionary<TKey, TValue>

Предоставляет коллекцию пар ключ/значение, которые упорядочены по ключу.

List<T>

Представляет список объектов, доступных по индексу. Предоставляет методы для поиска по списку, выполнения сортировки и изменения списка.

Queue<T>

Предоставляет коллекцию объектов, которая обслуживается по принципу "первым пришел — первым вышел" (FIFO).

SortedList<TKey, TValue>

Представляет коллекцию пар ключ/значение, упорядоченных по ключу

на основе реализации IComparer<T>.

Stack<T>

Представляет коллекцию объектов, которая обслуживается по принципу "последним пришел — первым вышел" (LIFO).

Продемонстрируем работу с коллекцией на примере с List<T>.

В следующем примере создается список строк, а затем просматриваются строки с помощью оператора или foreach (C#).

// Создание списка строк

var salmons = new List<string>();

salmons.Add("chinook");

salmons.Add("coho");

salmons.Add("pink");

salmons.Add("sockeye");

// Удаление из списка строки "coho"

salmons.Remove("coho");

// Проход по списку

foreach (var salmon in salmons)

{

Console.Write(salmon + " ");

}

// Вывод: chinook pink sock

Следующий пример демонстрирует процедуру сортировки коллекции, В примере сортируются экземпляры класса Car, которые хранятся в List<T>. Класс Car реализует интерфейс IComparable<T>, который требует, чтобы метод CompareTo был реализован. Каждый вызов метода CompareTo делает одно сравнение, используемое для сортировки. Написанный пользователем код в методе CompareTo возвращает значение для каждого сравнения текущего объекта с другим объектом. Возвращаемое значение меньше нуля, если текущий объект меньше другого объекта, больше нуля, если текущий объект больше другого объекта, а также равняется нулю, если объекты равны. Это позволяет определить в коде условия для отношения "больше", "меньше" и "равно". В методе ListCars оператор cars.Sort() сортирует список. Этот вызов метода SortList<T> приводит к тому, что метод CompareTo вызывается автоматически для объектов Car в List.

private void ListCars()

{

var cars = new List<Car>

{

{ new Car() { Name = "car1", Color = "blue", Speed = 20}},

{ new Car() { Name = "car2", Color = "red", Speed = 50}},

{ new Car() { Name = "car3", Color = "green", Speed = 10}},

{ new Car() { Name = "car4", Color = "blue", Speed = 50}},

{ new Car() { Name = "car5", Color = "blue", Speed = 30}},

{ new Car() { Name = "car6", Color = "red", Speed = 60}},

{ new Car() { Name = "car7", Color = "green", Speed = 50}}

};

// Сортировка машин по цветам в алфавитном порядке

// и сортировка по скорости в обратном порядке

cars.Sort();

// Вывод всех машин

foreach (Car thisCar in cars)

{

Console.Write(thisCar.Color.PadRight(5) + " ");

Console.Write(thisCar.Speed.ToString() + " ");

Console.Write(thisCar.Name);

Console.WriteLine();

}

// Вывод:

// blue 50 car4

// blue 30 car5

// blue 20 car1

// green 50 car7

// green 10 car3

// red 60 car6

// red 50 car2

}

public class Car : IComparable<Car>

{

public string Name { get; set; }

public int Speed { get; set; }

public string Color { get; set; }

public int CompareTo(Car other)

{

// Вызов этого метода делает еденичное сравнение для сортировки

// Сравнение цветов (О методе String.Compare прочтите на MSDN)

int compare;

compare = String.Compare(this.Color, other.Color, true);

// Если цвета одинаковы, то сравниваем скорости

if (compare == 0)

{

compare = this.Speed.CompareTo(other.Speed);

// Используем обратное упорядочивание по цветам.

compare = -compare;

}

return compare;

}}

Интерфейсы ICollection и IList

Интерфейс ICollection — это базовый интерфейс для классов в пространстве имен System.Collections.

Интерфейс IList- представляет неуниверсальную коллекцию объектов с индивидуальным доступом, осуществляемым при помощи индекса. Универсальный интерфейс IList является потомком интерфейса ICollection и базовым интерфейсом всех неуниверсальных списков. Реализации интерфейса IList можно разделить на три категории: доступные только для чтения, с фиксированным размером и с переменным размером. Доступный только для чтения список IList не может быть изменен. Список IList с фиксированным размером не допускает добавление или удаление элементов, но позволяет выполнять изменение существующих. Список IList с переменным размером позволяет выполнять добавление, удаление и изменение элементов. Пример с созданием собственного типа коллекции с реализациейIListрекомендуется посмотреть наMSDN.

ArrayList

Реализует интерфейс IList с помощью массива с динамическим изменением размера по требованию. В отличии от Arrayкогда в список ArrayList добавляются элементы, его емкость автоматически увеличивается должным образом посредством перераспределения. Емкость может быть уменьшена посредством вызова метода TrimToSize или с помощью явного задания свойства Capacity.

Доступ к элементам этой коллекции осуществляется с помощью целочисленного индекса. Индексы в этой коллекции начинаются с нуля. Коллекция ArrayList принимает null как допустимое значение и разрешает дублировать элементы. Использование многомерных массивов в качестве элементов коллекции ArrayList не поддерживается.

Примечание: сортировка списка ArrayList не гарантируется. 

Меню

MenuStripэто контейнер верхнего уровня, предоставляет систему меню для формы. С ним легко работать через конструктор, для начала добавьте элемент управления на форму, а затем просто кликните на нем для создания новой вкладки, после этого он предложит создать дополнительные и подчиненные вкладки и тд.

Для создания контекстного меню можно использовать класс ContextMenuилиContextMenuStrip, о их использовании, различиях и сходствах можно прочитать наMSDN.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]