Разработка справочно-информационной системы "Справочник по оборудованию"

Использование бинарных деревьев для поиска данных. Схемы алгоритмов работы с бинарным деревом. Проектирование алгоритмов и программ. Структура программного комплекса. Язык С# как средство для разработки автоматизированной информационной системы "Адрес".

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.11.2013
Размер файла 914,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство Образования Республики Беларусь

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ

ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО

Факультет автоматизированных и информационных систем

Кафедра: «Информационные технологии»

РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по дисциплине: «Объектно-ориентированное программирование»

на тему: «Разработка справочно-информационной системы «Справочник по оборудованию»»

Исполнитель: студент группы ИТ-22

Ясонов В.А.

Руководитель: преподаватель

Кухаренко А.А.

Гомель 2013

Реферат

Курсовой работы Ясонова В.А.

«Разработка автоматизированной информационной системы «Справочник по оборудованию »»

Объем работы 64 страницы, в том числе 15 рисунков, 16 таблиц, 6 использованных источников, 12 приложений.

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

Объектом разработки является Windows-приложение поиска информации в бинарном дереве.

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

Разработана структура Windows-приложения и определены его основные функциональные возможности.

Данная работа показывает, как, используя бинарные деревья, можно ускорить процесс поиска данных в большом объёме информации.

В процессе работы сформулированы задачи и основные требования к проектируемому Windows-приложению, среди которых: расширяемость, универсальность и легкость применения, модульность, совместимость, устойчивость и защищенность.

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

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

СОДЕРЖАНИЕ

Введение

1. Использование бинарных деревьев для поиска данных

1.1 Бинарные деревья

1.2 Способы поиска в бинарном дереве

1.2.1 Обход дерева в глубину

1.2.2 Обход дерева в ширину

1.3 Использование средств C# для работы с бинарным деревом

2. Алгоритмический анализ задачи

2.1 Постановка задачи

2.2 Исходные данные

2.3 Графические схемы алгоритмов работы с бинарным деревом

3. Подходы к проектированию алгоритмов и программ

3.1 История

3.2 Основные понятия

3.3 Определение ООП и его основные концепции

3.4 Язык С# - инструментальное средство для разработки Автоматизированной информационной системы «Адрес»

3.4.1 Общие сведения о языке C#

3.4.2 Использованные элементы управления

3.4.3 Использованные стандартные коллекции

3.4.4 Обработка исключительных ситуаций

3.4.5 Описание использованных интерфейсов

4. Описание разработанного приложения

4.1 Структура программного комплекса

4.2 Инструкция пользователя

4.3 Описание результатов

Заключение

Список использованных источников

Приложение А Текст класса Guide_of_Equipment

Приложение Б Текст класса Tree

Приложение В Текст класса Node

Приложение Г Текст класса About

Приложение Д Текст класса Change

Приложение Е Текст класса Delete

Приложение Ж Текст класса Find

Приложение З Текст класса Information

Приложение И Текст класса Insert

Приложение К Текст класса Main

Приложение Л Текст класса Overload

Приложение М Текст исходного файла для тестирования

ВВЕДЕНИЕ

В наше время люди повсюду работают с данными. Естественно, возникает необходимость управления этими данными: запись, хранение, обработка и удаление являются инструментами в наших руках. А в условиях нашей жизни при рыночной экономике мы тем более задумываемся над надежностью, целесообразностью и скоростью работы выбранных методов. Все данные, в большинстве случаев, располагаются в структурах данных. Здесь вопрос заключается лишь в том, как будет организована эта самая база данных.

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

Структуры данных подразделяются на линейные и нелинейные.

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

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

В данной курсовой работе разработана программа для работы с бинарным деревом поиска. Программа была создана в среде Microsoft Visual C# 2010.

В пояснительной записке объясняются алгоритмы основных процедур для работы с бинарным деревом. В теоретической части описаны общие сведения о бинарных деревьях, что позволяет первоначально ознакомиться с такого типа структурой. В практической рассмотрены практические аспекты создания программы, рассказывается, каким образом была создана программа и как она действует, представлены графические изображения различных компонентов среды MS Visual C# 2010, а так же код самой программы.

1. ИСПОЛЬЗОВАНИЕ БИНАРНЫХ ДЕРЕВЬЕВ ДЛЯ ПОИСКА ДАННЫХ

1.1 Бинарные деревья

Бинарное дерево - это конечное множество элементов, которое либо пусто, либо содержит один элемент, называемый корнем дерева, а остальные элементы множества делятся на два непересекающихся подмножества, каждое из которых само является бинарным деревом [2].

Эти подмножества называются левым и правым поддеревьями исходного дерева. Каждый элемент бинарного дерева называется узлом дерева. Пример дерева на рисунке 1.1.

Рисунок 1.1 - Пример бинарного дерева (корень обычно изображается сверху, хотя изображение можно и перевернуть)

Пример организации структуры данных на рисунке 1.2.

Рисунок 1.2 - Пример организации структуры данных

Если дерево организовано так, что для каждого узла все ключи его левого поддерева меньше ключа этого узла, а все ключи его правого поддерева - больше, оно называется деревом поиска. Одинаковые ключи здесь не допускаются [6].

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

В программировании наиболее часто используются бинарные деревья, в которых число исходящих рёбер не превосходит 2, и N-арные деревья с произвольным количеством исходящих ребер.

В памяти компьютера деревья обычно представляют в виде связной структуры, где каждый узел помимо ключа (key) хранит указатели на дочерние узлы и иногда на родительский.

Двоичным или бинарным деревом поиска называется бинарное дерево, для каждого узла x которого выполняется следующее свойство:

- если узел y лежит в левом поддереве узла x, то key[y] < key[x];

- если узел y лежит в правом поддереве узла x, то key[y] ? key[x] [3].

1.2 Способы поиска в бинарном дереве

Существует достаточно много алгоритмов работы с древовидными структурами, в которых часто встречается понятие обхода (traversing) дерева или "прохода" по дереву. При таком методе исследования дерева каждый узел посещается только один раз, а полный обход задает линейное упорядочивание узлов, что позволяет упростить алгоритм, так как при этом можно использовать понятие "следующий" узел, т.е. узел стоящий после данного при выбранном порядке обхода [4].

Существует два основных способа обхода дерева: в глубину и в ширину.

1.2.1 Обход дерева в глубину

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

- префиксный (прямой) обход - сначала обрабатывается текущий узел, затем левое и правое поддеревья;

- инфиксный (симметричный) обход - сначала обрабатывается левое поддерево текущего узла, затем корень, затем правое поддерево;

- постфиксный (обратный) обход - сначала обрабатываются левое и правое поддеревья текущего узла, затем сам узел [2].

бинарный дерево программный алгоритм

1.2.2 Обход дерева в ширину

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

- Из очереди выталкивается очередной узел;

- Этот узел обрабатывается;

- В очередь добавляются оба сына этого узла.

Заметим, что перечисление узлов происходит в порядке удаления от корня, что делает поиск в ширину удобным, например, для поиска узла дерева со значением k, наиболее близкого к корню [2].

1.3 Средства языка С# для работы с бинарными деревьями

Язык С# предоставляет больше возможности для работы с бинарными деревьями. Фактически бинарное дерево представляет собой структуру, состоящую из множества узлов, связанных ссылками. Каждый узел дерева имеет поля, содержащие ссылки на левый и правый дочерний элемент, а так же на родительский элемент данного узла. Элемент TreeView предназначен для иерархического отображения дерева. Узлы в TreeView это экземпляры класса TreeNode [1].

Свойства TreeView:

- CheckBoxes - true, если рядом с узлами отображаются значки для выбора позиции;

- ImageList - отображает картинки рядом с узлами;

- SelectedNode - выбранный в текущий момент узел;

- Nodes - коллекция узлов TreeNode.

Эта коллекция содержит следующие методы:

- Add - добавление узла;

- Add(string text) - параметр text - строка, которая будет отражаться рядом с узлом;

- Add(TreeNode node) - добавляет узел node;

- Clear() - удаляет все узлы из коллекции;

- Remove(TreeNode node) - удаляет узел node из коллекции;

- RemoveAt(int index) - удаляет узел с индексом index из коллекции;

- Insert(int index,TreeNode node) - вставляет узел node на место определенное индексом index.

2. АЛГОРИТМИЧЕСКИЙ АНАЛИЗ ЗАДАЧИ

2.1 Постановка задачи

Необходимо разработать Windows-приложение на языке С#, выполняющее следующие действия:

1. Чтение из текстового файла информации объектах класса согласно варианту. Количество записей не менее 50 (см. табл. 2.1);

2. Вывод исходных данных в виде таблицы;

3. Выбрать самостоятельно визуальные компоненты для реализации операций перегрузки;

4. Построение бинарного дерева (ключ - номер дома, способ обхода - рекурсивный);

5. Визуализация бинарного дерева;

6. Редактирование исходных данных (вставка, удаление, замена) с внесением соответствующих изменений в бинарное дерево;

7. Поиск информации по заданному ключу;

8. Справочную информацию о программном продукте и об авторе.

Создать класс согласно варианту. Класс должен содержать следующие элементы:

1. Описание полей класса (поле характеристика дома оформить как перечисление);

2. Конструкторы с параметрами и по умолчанию, а также необходимые свойства и методы;

3. Перегрузку бинарного оператора сложения (сложение номеров домов и создание нового адреса с номером дома равным сумме номеров домов слагаемых);

4. Перегрузку операторов отношения “больше” и “меньше” (сравнивает адреса по номерам домов);

5. Перегрузку префиксного и постфиксного инкремента (выбирает следующую характеристику дома из перечисления);

6. Создание массива из объектов класса;

7. Функцию, определяющую максимальный объект. Для сравнения использовать перегруженный оператор отношения (находит адрес с максимальным номером дома);

8. Предусмотреть обработку и инициализацию исключительных ситуаций;

9. Класс должен реализовывать интерфейс IComparable.

Таблица 2.1 - Описание класса

№ варианта

Название класса

Поля

32

Справочник по

Оборудованию

наименование оборудования,

страна-изготовитель, стоимость,

год изготовления

2.2 Исходные данные

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

- наименование оборудование;

- страна-изготовитель;

- стоимость;

- год изготовления;

Ключ, по которому осуществляется поиск информации, и способ обхода бинарного дерева, заданы согласно варианту и представлены в таблице 2.2

Файл находится в директории: Курсовой проект\test.txt.

Таблица 2.2 - Способ обхода бинарного дерева и ключ

Вариант

Ключ

Способ обхода бинарного дерева

Обход производить с помощью

32

Наименование

Оборудования

Обход в по уровням

стека

2.3 Графические схемы алгоритмов работы с бинарным деревом

При редактировании ячейки с информацией об наименовании оборудования, происходит поиск данного элемента в бинарном дереве (блок-схема см. рис. 2.1). Если элемент найден - возвращается узел дерева, содержащий информацию об этом элементе, если нет - возвращается null.

Рисунок 2.1 - Блок-схема «Обход дерева»

При выборе действия «Добавить» (блок-схема см. рис. 2.2) вызывается подпрограмма, которая добавляет заданный элемент в бинарное дерево.

Рисунок 2.2 - Блок-схема подпрограммы «Добавить»

При выборе действия «Удалить» (блок-схема см. рис. 2.3) вызывается подпрограмма, которая находит заданный элемент и удаляет его из дерева.

Рисунок 2.3 - Блок-схема подпрограммы «Удалить»

3. Подходы к проектированию алгоритмов и программ

3.1 История

В последние годы большое распространение получила парадигма объектно-ориентированного программирования и языков на ее основе. ООП возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Для дальнейшего развития объектно-ориентированного программирования часто большое значение имеют понятия события (так называемое событийно-ориентированное программирование) и компонента (компонентное программирование, КОП).

Формирование КОП от ООП произошло, как случилось формирование модульного от процедурного программирования: процедуры сформировались в модули - независимые части кода до уровня сборки программы, так объекты сформировались в компоненты - независимые части кода до уровня выполнения программы. Взаимодействие объектов происходит посредством сообщений. Результатом дальнейшего развития ООП, по-видимому, будет агентно-ориентированое программирование, где агенты - независимые части кода на уровне выполнения. Взаимодействие агентов происходит посредством изменения среды, в которой они находятся.

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

Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.

В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека Qt, написанная на языке C++.

3.2 Основные понятия

- Абстракция

Абстрагирование - это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция - это набор всех таких характеристик.

- Инкапсуляция

Инкапсуляция - это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.

- Наследование

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

- Полиморфизм

Полиморфизм - это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

- Класс

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

- Объект

Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа (например, после запуска результатов компиляции и связывания исходного кода на выполнение).

- Прототип

Прототип - это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.

3.3 Определение ООП и его основные концепции

В центре ООП находится понятие объекта. Объект - это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Объект - это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.

Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности - для этого требуется наличие наследования.

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

Сложности определения

ООП имеет уже более чем сорокалетнюю историю, но, несмотря на это, до сих пор не существует чёткого общепринятого определения данной технологии. Основные принципы, заложенные в первые объектные языки и системы, подверглись существенному изменению (или искажению) и дополнению при многочисленных реализациях последующего времени. Кроме того, примерно с середины 1980-х годов термин «объектно-ориентированный» стал модным, в результате с ним произошло то же самое, что несколько раньше с термином «структурный» (ставшим модным после распространения технологии структурного программирования) - его стали искусственно «прикреплять» к любым новым разработкам, чтобы обеспечить им привлекательность. Бьёрн Страуструп в 1988 году писал, что обоснование «объектной ориентированности» чего-либо, в большинстве случаев, сводится к ложному силлогизму: «X - это хорошо. Объектная ориентированность - это хорошо. Следовательно, X является объектно-ориентированным».

Тимоти Бадд пишет:

Роджер Кинг аргументированно настаивал, что его кот является объектно-ориентированным. Кроме прочих своих достоинств, кот демонстрирует характерное поведение, реагирует на сообщения, наделён унаследованными реакциями и управляет своим, вполне независимым, внутренним состоянием.

По мнению Алана Кея, создателя языка Smalltalk, которого считают одним из «отцов-основателей» ООП, объектно-ориентированный подход заключается в следующем наборе основных принципов (цитируется по вышеупомянутой книге Т. Бадда).

1. Всё является объектом.

2. Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение - это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.

3. Каждый объект имеет независимую память, которая состоит из других объектов.

4. Каждый объект является представителем класса, который выражает общие свойства объектов (таких, как целые числа или списки).

5. В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.

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

Таким образом, программа представляет собой набор объектов, имеющих состояние и поведение. Объекты взаимодействуют посредством сообщений. Естественным образом выстраивается иерархия объектов: программа в целом - это объект, для выполнения своих функций она обращается к входящим в неё объектам, которые, в свою очередь, выполняют запрошенное путём обращения к другим объектам программы. Естественно, чтобы избежать бесконечной рекурсии в обращениях, на каком-то этапе объект трансформирует обращённое к нему сообщение в сообщения к стандартным системным объектам, предоставляемым языком и средой программирования.

Устойчивость и управляемость системы обеспечивается за счёт чёткого разделения ответственности объектов (за каждое действие отвечает определённый объект), однозначного определения интерфейсов межобъектного взаимодействия и полной изолированности внутренней структуры объекта от внешней среды (инкапсуляции).

Определить ООП можно и многими другими способами.

Появление в ООП отдельного понятия класса закономерно вытекает из желания иметь множество объектов со сходным поведением. Класс в ООП - это в чистом виде абстрактный тип данных, создаваемый программистом. С этой точки зрения объекты являются значениями данного абстрактного типа, а определение класса задаёт внутреннюю структуру значений и набор операций, которые над этими значениями могут быть выполнены. Желательность иерархии классов (а значит, наследования) вытекает из требований к повторному использованию кода - если несколько классов имеют сходное поведение, нет смысла дублировать их описание, лучше выделить общую часть в общий родительский класс, а в описании самих этих классов оставить только различающиеся элементы.

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

Отдельного пояснения требует понятие обмена сообщениями. Первоначально (например, в том же Smalltalk) взаимодействие объектов представлялось как «настоящий» обмен сообщениями, то есть пересылка от одного объекта другому специального объекта-сообщения. Такая модель является чрезвычайно общей. Она прекрасно подходит, например, для описания параллельных вычислений с помощью активных объектов, каждый из которых имеет собственный поток исполнения и работает одновременно с прочими. Такие объекты могут вести себя как отдельные, абсолютно автономные вычислительные единицы. Посылка сообщений естественным образом решает вопрос обработки сообщений объектами, присвоенными полиморфным переменным - независимо от того, как объявляется переменная, сообщение обрабатывает код класса, к которому относится присвоенный переменной объект.

Однако общность механизма обмена сообщениями имеет и другую сторону - «полноценная» передача сообщений требует дополнительных накладных расходов, что не всегда приемлемо. Поэтому в большинстве ныне существующих объектно-ориентированных языков программирования используется концепция «отправка сообщения как вызов метода» - объекты имеют доступные извне методы, вызовами которых и обеспечивается взаимодействие объектов. Данный подход реализован в огромном количестве языков программирования, в том числе C++, Object Pascal, Java, Oberon-2. В настоящий момент именно он является наиболее распространённым в объектно-ориентированных языках.

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

3.4 Язык С# - инструментальное средство для разработки автоматизированной информационной системы «Справочник по оборудованию»

3.4.1 Общие сведения о языке C#

С# - новый язык программирования, который был спроектирован специально для работы с .NET. Используя С#, вы можете, например, написать динамическую Web-страницу, Web-службу XML, компонент распределенного приложения, компонент доступа к базе данных, классическое настольное приложение Windows или даже приложение интеллектуального клиента, оснащенного онлайновыми и автономными возможностями.

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

3.4.2 Использованные элементы управления

Button

Класс Button представляет простую командную кнопку и наследуется от ButtonBase. Чаще всего требует написания кода обработки события Click.

RadioButton

Последний элемент управления, унаследованный от ButtonBase - это RadioButton (переключатель). Переключатели обычно используются в составе групп [6].

Иногда называемые кнопками выбора (option buttons), переключатели дают возможность пользователю выбирать одну из нескольких опций. Когда вы используете множество элементов управления RadioButton в одном контейнере, выбранным может быть только один из них. Поэтому если у вас есть три опции, например, Red, Green и Blue, и если выбрана опция Red, а пользователь щелкает на Blue, то Red автоматически отключается.

Событие CheckedChanged возникает всякий раз, когда значение свойства Checked изменяется. Подобным образом можно выполнить другие действия на основе нового значения элемента управления.ComboBox, ListBox и CheckedListBox

ComboBox, ListBox и CheckedListBox - все унаследованы от класса ListControl. Этот класс определяет некоторую базовую функциональность управления списками. Самое главное в использовании списочных элементов управления - это добавление и выбор элементов списка. То, какой список нужно применять, в основном определяется тем, как его предполагается использовать, и типом данных, которые в нем должны содержаться. Если необходимо иметь возможность множественного выбора, или пользователю нужно видеть в любой момент несколько позиций списка, то лучше всего подойдут ListBox или CheckListBox. Если же в списке может быть выбран только один элемент за раз, то больше подойдет ComboBox.

Label

Метки Label применяются для представления пользователю описательного текста. Текст может иметь отношение к другому элементу управления либо к текущему состоянию системы. Обычно метки помещаются рядом с текстовыми полями. Метка предлагает пользователю описание типа данных для ввода в текстовое поле. Элемент управления Label всегда доступен только для чтения - пользователь не может изменить значение строки в его свойстве Text. Однако вы можете изменять значение свойства Text программно.

TextBox и RichTextBox

Элемент управления TextBox - один из наиболее часто используемых. TextBox и RichTextBox унаследованы от TextBoxBase. Класс TextBoxBase представляет такие свойства, как MultiLine и Lines. Свойство MultiLine - булевское значение, позволяющее элементу управления TextBox отображать текст в более чем одной строке. При этом каждая строка в текстовом окне является частью массива строк. Этот массив доступен через свойство Lines. Свойство Text возвращает полное содержимое текстового окна в виде одной строки.

MenuStrip

Элемент управления MenuStrip - это контейнер для структур меню в приложении. Класс MenuStrip унаследован от ToolStrip. Система меню строится добавлением объектов ToolStripMenu к MenuStrip. Это можно сделать в коде или в дизайнере Visual Studio. Для этого нужно перетащить элемент управления MenuStrip на форму в дизайнере, и этот MenuStrip позволит вводить текст меню непосредственно в элементы меню.

DataGridView

В .NET 2.0 появился дополнительный сеточный элемент управления - DataGridView.

Он восполнил многие недостатки своего предшественника и добавил важную функциональность, которая до этого была реализована лишь в продуктах независимых поставщиков. Этот элемент оснащен такими же средствами привязки данных, как и старый DataGrid, а потому может работать совместно с классами Array, DataTable, DataView или DataSet либо компонентами, реализующими интерфейс IListSource или IList. Элемент управления DataGridView обеспечивает возможности разнообразного представления одних и тех же данных. В простейшем случае отображаемые данные указываются установкой значений свойств DataSource и DataMember.

3.4.3 Использованные стандартные коллекции

При разработке данного программного обеспечения одним из использованных классов стандартных коллекций является List<T>. Класс List<T> в пространстве имен System.Collections.Generic очень похож по своему использованию на класс ArrayList из пространства имен System.Collections. Этот класс реализует интерфейсы IList, ICollection и IEnumerable.

Вы можете создавать списочные объекты, вызывая конструктор по умолчанию. С обобщенным классом List<T> вы должны специфицировать тип хранимых значений в его объявлении.

Конструктор по умолчанию создает пустой список. Как только элементы начинают добавляться в список, его емкость увеличивается до 4 элементов. При добавлении пятого элемента размер списка изменяется так, чтобы уместить 8 элементов. Если же и этого недостаточно, список вновь расширяется, на этот раз до 16 элементов. При каждом расширении емкость списка удваивается.

ArrayList objectList = new ArrayList ();

List<int> intList = new List<int>();

При изменении емкости списка вся коллекция целиком перемещается в новый блок памяти. В реализации List<T> используется массив типа Т. При перемещении создается новый массив и Array. Сору() копирует элементы старого массива в новый. Чтобы сэкономить время, когда количество элементов, подлежащих размещению в списке, известно заранее, емкость можно определить в конструкторе. Ниже создается коллекция емкостью в 10 элементов. Если этой емкости будет недостаточно для размещения всех элементов, то она удваивается - сначала до 20, затем до 40 элементов.

ArrayList objectList = new ArrayList(10);

List<int> intList = new List<int>(10);

Вы можете удалять элементы по индексу либо передавая подлежащий удалению элемент. Ниже удаляется четвертый по порядку элемент:

racer.RemoveAt(3);

Также вы можете непосредственно передать объект Racer методу Remove(), чтобы удалить его. Удаление по индексу работает быстрее, поскольку в этом случае не приходится выполнять поиск удаляемого элемента по всей коллекции. Метод Remove() сначала ищет в коллекции индекс удаляемого элемента с помощью метода IndexOf(), а затем использует этот индекс для удаления элемента. IndexOf() сначала проверяет, реализует ли тип элемента интерфейс IEquatable. Если это так, вызывается метод Equals() этого интерфейса для нахождения элемента в коллекции, совпадающего с переданным методу. Если же этот интерфейс не реализован, для сравнения элементов применяется метод Equals() класса Object. Реализация по умолчанию метода Equals() класса Object выполняет побитовое сравнение типов значений, но для ссылочных типов сравнивает только ссылки.

3.4.4 Обработка исключительных ситуаций

Для обработки исключительных ситуаций использовалась следующая конструкция:

try{}

catch { MessageBox.Show(“Текст ошибки”, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error); }

3.4.5 Описание использованных интерфейсов

При разработке программного продукта был использован интерфейс IComparable. Если вы используете с массивом собственные классы, то должны реализовать интерфейс IComparable. Этот интерфейс определяет единственный метод CompareTo(), который должен возвращать 0, если сравниваемые объекты эквивалентны, значение меньше 0, если данный экземпляр должен следовать перед объектом, переданным в параметре, и значение больше 0, если экземпляр должен следовать за объектом, переданным в параметре.

В данном случае объекты класса Guide_of_Equipment сравниваются по температуре. Листинг программы выглядит следующим образом:

public int CompareTo(object ob)

{

Guide_of_Equipment tmp = (Guide_of_Equipment)ob;

if (DateTime.Compare(this.year, tmp.year) > 0) return 1;

if (DateTime.Compare(this.year, tmp.year) < 0) return -1;

return 0;

}

4. ОПИСАНИЕ РАЗРАБОТАННОГО ПРИЛОЖЕНИЯ

4.1 Структура программного комплекса

Программа состоит из 11 классов:

- класс Guide_of_Equipment, экземпляры которого, содержат информацию оборудовании, элементы класса описаны в таблице 4.1;

- класс Node, экземпляр которого, представляет собой узел бинарного дерева, элементы класса описаны в таблице 4.2;

- класс Tree, экземпляр которого представляет собой бинарное дерево, элементы класса описаны в таблице 4.3;

- класс Change, служит для замены элементов в дереве, элементы класса описаны в таблице 4.4;

- класс About, который содержит информацию об авторе, таблица 4.5;

- класс Delete, служит для удаления элемента из дерева, элементы класса описаны в таблице 4.6;

- класс Find, осуществляет поиск элемента в дереве, элементы класса описаны в таблице 4.7;

- класс Information, содержит информацию о программе, элементы класса описаны в таблице 4.8;

- класс Insert, служит для добавления элементов в дерево, элементы класса описаны в таблице 4.9;

- класс Main, содержит элементы контроля для работы с программой, элементы класса описаны в таблице 4.10;

- класс Overload, предоставляет демонстрацию перегрузок, элементы класса описаны в таблице 4.11;

В таблице 4.1 описаны элементы, которые используются в классе Student.

Таблица 4.1 - Элементы класса Guide_of_Equipment

Имя

Вид элемента

Тип

Специ-фикатор

Описание

1

2

3

4

5

name_equi-pment

Пере-чесления

Enum

Public

Перечисление, содержащее страны изготовителей

country

Поле

name_equi- pment

Public

Наименование оборудования

equipment

Поле

String

Public

Страна-изготовитель

Cost

Поле

Int

Public

Стоимость

Year

Поле

DateTime

Public

Год изготовления

Guide_of_Equipment

Конструктор без параметров

-

Public

Присваивает начальные значения полям класса

Guide_of_Equipment

Конструктор с параметрами

-

Public

Задает значения всех полей при создании объекта

Country

Свойство

string

Public

Возвращает наименование оборудования

cost

Свойство

int

Public

Возвращает стоимость

Year

Метод

DataTime

Public

Возвращает год изготовления

operator ++

Перегружен-ный оператор сложения

Guide_of_Equipment

Public

Увеличивает стоимость на единицу

operator --

Перегруженный оператор вычитания

Guide_of_Equipment

Public

Уменьшает стоимость на единицу

operator <

Перегруженный оператор отношения (меньше)

bool

Public

Сравнивает года изготовления

operator >

Перегруженный оператор отношения (больше)

bool

Public

Сравнивает года изготовления

operator +

Перегруженный оператор отношения

Guide_of_Equipment

Public

Складывает цены

Compare

Статический метод

int

Public

Сравнивает наименования оборудования

array

Статический метод

Guide_of_Equipment[]

Public

Добавляет заданный элемент в начало массива

Max

Статический метод

Guide_of_Equipment

Public

Находит наименование оборудования с максимальным годом изготовления

CompareTo

Статический метод

int

Public

Сравнивает оборудование по году изготовления

Out

Метод

ArrayList

Public

Возвращает данные полей класса

ToString

Метод

String

Public

Возвращает строку содержащую данные полей

В таблице 4.2 описаны элементы, которые используются в классе Node.

Таблица 4.2 - Элементы класса Node

Имя

Вид элемента

Тип

Специ-фикатор

Описание

Node

Конструк-тор

-

Public

Корень дерева

Left

Свойство

Node

Public

Возвращает левого потомка

Right

Свойство

Node

Public

Возвращает правого потомка

Top

Свойство

Node

Public

Возвращает предка

Get_J

Свойства

Guide_of_Equipment

Public

Возвращает сведения о наименовании оборудования, соответствующему данному узлу

В таблице 4.3 описаны элементы, используемые в классе Tree.

Таблица 4.3 - Элементы класса Tree

Имя

Вид элемента

Тип

Специ-фикатор

Описание

Root

Поле

Node

Private

Узел дерева

Root

Свойство

Node

Public

Возвращает узел дерева

Adding

Поле

Void

Public

Добавление нового элемента дерева

search

Поле

Node

Public

Осуществляет поиск элементов дерева

MostRightNode

Метод

Node

Private

Находит самый правый элемент дерева

MostLeftNode

Метод

Node

Private

Находит самый левый элемент дерева

ChangeData

Метод

Void

Public

Заменяет данные узла

Search

Метод

Node

Public

Осуществляет поиск элементов

Remove

Метод

Node

Private

Удаляет элементы дерева

В таблице 4.4 описаны элементы, используемые в классе Change.

Таблица 4.4 - Элементы класса Change

Имя

Вид

элемента

Специ-фикатор

Описание

1

2

3

4

label1

(Наименование оборудования для поиска)

Label

Private

Представляет элементу управления текст

label2

(Наименование оборудования)

Label

Private

Представляет элементу управления текст

label3

(Стоимость)

Label

Private

Представляет элементу управления текст

label4

(Год изготовления)

Label

Private

Представляет элементу управления текст

label5

(Страна-изготовитель)

Label

Private

Представляет элементу управления текст

textBox1

TextBox

Private

Позволяет осуществлять ввод текста

textBox2

TextBox

Private

Позволяет осуществлять ввод текста

textBox3

TextBox

Private

Позволяет осуществлять ввод текста

textBox4

TextBox

Private

Позволяет осуществлять ввод текста

textBox5

TextBox

Private

Позволяет осуществлять ввод текста

button1

Button

Private

Позволяет выполнять действия связанные с нажатием кнопки

button2

Botton

Private

Позволяет выполнять действия связанные с нажатием кнопки

В таблице 4.5 описаны элементы, используемые в классе About.

Таблица 4.5 - Элементы класса

Имя

Вид элемента

Специ-фикатор

Описание

pictureBox1

PictureBox

Private

Позволяет показывать изображение

button1

Button

Private

Позволяет выполнять действия связанные с нажатием кнопки

richTextBox1

RichTextBox

Private

Позволяет выводить текстовую информацию

В таблице 4.6 описаны элементы, используемые в классе Delete.

Таблица 4.6 - Элементы класса Delete

Имя

Вид

Элемента

Специ-фикатор

Описание

label1

(Наименование оборудования)

Label

Private

Представляет элементу управления текст

pictureBox1

PictureBox

Private

Позволяет показывать изображение

button1

Button

Private

Позволяет выполнять действия связанные с нажатием кнопки

button2

Botton

Private

Позволяет выполнять действия связанные с нажатием кнопки

В таблице 4.7 описаны элементы, используемые в классе Find.

Таблица 4.7 - Элементы класса Find

Имя

Вид

элемента

Специ-фикатор

Описание

label1

(Наименование оборудования)

Label

Private

Представляет элементу управления текст

textBox1

TextBox

Private

Позволяет осуществлять ввод текста

button1

Button

Private

Позволяет выполнять действия связанные с нажатием кнопки

button2

Botton

Private

Позволяет выполнять действия связанные с нажатием кнопки

dataGriedView1

DataGriedView

Private

Выводит информацию в виде таблицы

В таблице 4.8 описаны элементы, используемые в классе Information.

Таблица 4.8 - Элементы класса Information

Имя

Вид

элемента

Специ-фикатор

Описание

richTextBox1

RichTextBox

Private

Позволяет выводить текстовую информацию

button1

Button

Private

Позволяет выполнять действия связанные с нажатием кнопки

В таблице 4.9 описаны элементы, используемые в классе Insert.

Таблица 4.9 - Элементы класса Insert

Имя

Вид

элемента

Специ-фикатор

Описание

Label1

(Наименование оборудования)

Label

Private

Представляет элементу управления текст

Label1

(Год изготовления)

Label

Private

Представляет элементу управления текст

label3

(Стоимость)

Label

Private

Представляет элементу управления текст

label4

(Страна-изготовитель)

Label

Private

Представляет элементу управления текст

textBox1

TextBox

Private

Позволяет осуществлять ввод текста

textBox2

TextBox

Private

Позволяет осуществлять ввод текста

textBox3

TextBox

Private

Позволяет осуществлять ввод текста

textBox4

TextBox

Private

Позволяет осуществлять ввод текста

textBox5

TextBox

Private

Позволяет осуществлять ввод текста

button1

Button

Private

Позволяет выполнять действия связанные с нажатием кнопки

button2

Botton

Private

Позволяет выполнять действия связанные с нажатием кнопки

В таблице 4.10 описаны элементы, используемые в классе Main.

Таблица 4.10 - Элементы класса Main

Имя

Вид

элемента

Специ-фикатор

Описание

dataGriedView1

DataGriedView

Private

Выводит информацию в виде таблицы

treeView1

TreeView

Private

Осуществляет вывод информации в виде дерева

menuStrip1

MenuStrip

Private

Позволяет осуществлять вывод информации в виде меню

В таблице 4.11 описаны элементы, используемые в классе Overload.

Таблица 4.11 - Элементы класса Overload.

Имя

Вид

элемента

Специ-фикатор

Описание

label1

(Год изготовления)

Label

Private

Представляет элементу управления текст

label2

(Страна-изготовитель)

Label

Private

Представляет элементу управления текст

textBox1

TextBox

Private

Позволяет осуществлять ввод текста

textBox2

TextBox

Private

Позволяет осуществлять ввод текста

button1

Button

Private

Позволяет выполнять действия связанные с нажатием кнопки

button2

Botton

Private

Позволяет выполнять действия связанные с нажатием кнопки

4.2 Инструкция пользователя

Для запуска программы следует запустить файл: Курсовая\Guide of Equipment\bin\Debug\Guide of Equipment.exe.

На рисунке 4.1 изображено главное окно при старте приложения.

Далее пользователю необходимо открыть файл с исходными данными.

Рисунок 4.1 - Окно приложения при его первоначальном запуске

Пункт меню «Файл» содержит:

- «Открыть» (Открывает файл со списком адресов и заносит его в бинарное дерево);

- «Сохранить» (Сохраняет в файл список адресов из бинарного дерева);

- «Выход» (Выход из программы).

Пункт меню «Информация о проекте» вызывает краткую инструкцию по взаимодействию с приложением (см. рис. 4.2).

Рисунок 4.2 - Информация о программе

Пункт меню «Об авторе» вызывает краткую справку об авторе программы (см. рис. 4.3).

Рисунок 4.3 - Информация об авторе

В верхней части программы располагается меню содержащее следующие пункты:

- «Поиск» (осуществляет поиск оборудования, см. рисунок 4.4).

- «Редактирование» (производит вставку, удаление, замену оборудования в бинарное дерево, см. рисунок 4.5, см. рисунок 4.6, см. рисунок 4.7).

- «Дерево» (производит визуализацию бинарного дерева в элементе управления TreeView, см. рисунок 4.8).

- «Демонстрация перегрузок» (демонстрация перегрузок, см. рисунок 4.9).

Рисунок 4.4 - Вкладка поиска

Рисунок 4.5 - Вкладка добавления оборудования

Рисунок 4.6 - Вкладка удаления оборудования

Рисунок 4.7 - Вкладка замены оборудования

Рисунок 4.8 - Вкладка отображения дерева в TreeView

Рисунок 4.9 - Вкладка демонстрации перегрузок

Рисунок 4.10 - Вкладка демонстрации перегрузок

Рисунок 4.11 - Вкладка демонстрации перегрузок

4.3 Описание результатов

Программа считывает записи из исходного текстового файла, выводит исходные данные в виде таблицы и создает для них бинарное дерево. Осуществляет поиск информации о адресах по заданному ключу. Позволяет взаимодействовать с информацией, изменять существующие элементы и удалять их. Листинг программы находится в приложениях А, Б, В, Г, Д, Е, Ж, З, И, К, Л. Текст исходного файла содержится в приложении М.

На рисунке 4.12 изображен файл с исходными данными.

Рисунок 4.12 - Файл с исходными данными

ЗАКЛЮЧЕНИЕ

Курсовое проектирование является необходимым этапом подготовки и обучения студентов, становления их как высококвалифицированных специалистов и играет важную роль в формировании самостоятельного творческого мышления студента. Курсовая работа представляет собой комплексную учебно-исследовательскую работу студента, которая выполняется на основе теоретических и практических знаний, накопленных в процессе обучения дисциплине. Она является многоцелевым элементом учебного процесса и позволяет привить студентам навыки и умения сбора, анализа, обобщения информации по данной предметной области, решения конкретной прикладной задачи с применением обоснованно выбранной компьютерной системы. В результате выполнения курсовой работы были разработаны схемы алгоритмов и написана программа решения поставленных задач на языке программирования С# в среде программирования Microsoft Visual C# 2010, было произведено описание поиска с помощью бинарного дерева с обходом в глубину. По поставленным задачам произведен анализ, результаты выполнения программы представлены в табличной форме, а также графически.

Также были даны краткие теоретические сведения по таким вопросам, как краткая характеристика бинарных деревьев поиска, способы их обхода.

В приложениях А, Б, В, Г, Д, Е, Ж, И, К, Л, отражен листинг программы.

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

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

Список использованных источников

1. Троелсен Э. Язык прогр

2. аммирования C# 2010 и платформа .NET 4 - М.: Издательский дом «Вильямс», 2010. - 1392 с.

3. Фаронов В.В. Программирование на языке C# - СПб.: Питер, 2007. - 240 с.

4. Агуров П.В. С#. Сборник рецептов. - СПб.: БХВ-Петербург, 2007. - 432 с.

5. Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. Алгоритмы. Построение и анализ, 2-е изнание. - М.: Издательский дом «Вильямс», 2005 - 1296 с.

6. Уотсон, Карли, Нейтел, Кристиан, Педерсен, Якоб Хаммер. Visual C# 2008: базовый курс. - 2009. - 1216 с.

7. Павловская Т.А. C#. Программирование на языке высокого уровня. Учебник для вузов - СПб.: Питер, 2007. - 432 с.

8. Wikipedia - свободная энциклопедия [Электронный ресурс] - 2013 - Режим доступа: http://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование.

ПРИЛОЖЕНИЕ А

(обязательное)

Текст класса Guide_of_Equipment.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;

namespace WindowsFormsApplication1

{

public class Guide_of_Equipment : IComparable

{

public enum name_equipment { Беларусь, Россия, Бельгия, Украина, Голландия }

public name_equipment country; //Наименование оборудования

public string equipment; //Страна-изготовитель

public int Cost; //Стоимость

public DateTime year; //Год изготовления

public Guide_of_Equipment() //конструктор по умолчанию

{

equipment = "Беларусь";

Cost = 0;

year = DateTime.Now;

country = name_equipment.Беларусь;

}

public Guide_of_Equipment(string v_p, DateTime v_o, int n, name_equipment p) //конструктор с параметрами

{

equipment = v_p;

year = v_o;

Cost = n;

country = p;

}

public string Country

{

get { return equipment; }

set { equipment = value; }

}

public int cost

{

get { return Cost; }

set { Cost = value; }

}

public DateTime Year

{

get { return year; }

set { year = value; }

}

//Перегрузки префиксного и постфиксного инкрементов

public static Guide_of_Equipment operator ++(Guide_of_Equipment tr)

{

tr.Cost++;

return tr;

}

public static Guide_of_Equipment operator --(Guide_of_Equipment tr)

{

tr.Cost--;

return tr;

}

//Перегрузки операторов отношения

public static bool operator <(Guide_of_Equipment tr1, Guide_of_Equipment tr2)

{

if (tr1.year < tr2.year) return true;

else return false;

}

public static bool operator >(Guide_of_Equipment tr1, Guide_of_Equipment tr2)

{

if (tr1.year > tr2.year) return true;

else return false;

}

// //Перегрузка одного из бинарных операторов

public static Guide_of_Equipment operator +(Guide_of_Equipment a, Guide_of_Equipment b)

{

Guide_of_Equipment c = new Guide_of_Equipment();

c.Country = a.Country;

c.equipment = a.equipment;

c.year = a.year;

c.Cost = a.Cost + b.Cost;

return c;

}

public int Compare(object k1, object k2)

{

int f = 0;

Guide_of_Equipment tr1 = (Guide_of_Equipment)k1;

Guide_of_Equipment tr2 = (Guide_of_Equipment)k2;

if (tr1.equipment.CompareTo(tr2.equipment) > 0) f = 1;

else

if (tr1.equipment.CompareTo(tr2.equipment) < 0) f = -1;

else f = 0;

return f;

}

public static Guide_of_Equipment[] array(Guide_of_Equipment a, params Guide_of_Equipment[] b)

{

Guide_of_Equipment[] j = new Guide_of_Equipment[b.Length + 1];

j[0] = a;

for (int i = 1; i < j.Length; i++)

j[i] = b[i - 1];

return j;

}

public static Guide_of_Equipment max(Guide_of_Equipment[] a) //cтатический метод, возвращающий максимальный элемент

{

Guide_of_Equipment max = a[0];

for (int i = 1; i < a.Length; i++)

if (a[i] > max)

max = a[i];

return max;

}

public int CompareTo(object ob) //метод возвращающий результат сравнения обьектов

{

Guide_of_Equipment tmp = (Guide_of_Equipment)ob;

if (DateTime.Compare(this.year, tmp.year) > 0) return 1;

if (DateTime.Compare(this.year, tmp.year) < 0) return -1;

return 0;

}

public ArrayList Out() // метод для вывода через ArrayList

{

ArrayList Get = new ArrayList();

Get.Add(this.equipment);

Get.Add(this.year.ToShortDateString());

Get.Add(this.Cost);

Get.Add(this.country);

return Get;

}

public override string ToString()

{

return year.ToShortDateString() + " ; " + equipment + " ; " + Cost.ToString() + " ; " + country.ToString() + " . ";

}

}

}

Приложение Б

(обязательное)

Текст класса Tree.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace WindowsFormsApplication1

{

public class Tree

{

Node root; //главный узел (закрытое поле)

public Node Root //свойство для доступа к главному узлу дерева

{ get { return root; } set { root = value; } }

public void Adding(Node node)//добавление узла

{

bool flag = true;

Node current = root;

while (flag)

{

if (current == null)

{ root = node; flag = false; }

else

if (String.Compare(node.Get_J.equipment.ToString(), current.Get_J.equipment.ToString()) == -1)//если номер меньше следовательно идем налево

{

if (current.Left == null)

{

current.Left = node;

current.Left.Top = current;

flag = false; //меняем значение флага

}

else

{ current = current.Left; }

}

else //соответственно на право

{

if (current.Right == null)

{

current.Right = node;

current.Right.Top = current;

flag = false;

}

else { current = current.Right; }

}

}

}

//Стек

public Node search(string equipment, Node r)


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.