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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    313,09 Кб
  • Опубликовано:
    2013-11-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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

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

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

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

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






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

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

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

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

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

Ясонов В.А.

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

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





Гомель 2013

Реферат

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

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

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

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

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

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

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

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

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

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

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

СОДЕРЖАНИЕ

Введение

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

.1 Бинарные деревья

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

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

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

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

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

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

.2 Исходные данные

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

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

.1 История

.2 Основные понятия

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

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

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

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

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

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

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

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

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

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

.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.      Вывод исходных данных в виде таблицы;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.        Класс должен реализовывать интерфейс 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. Подходы к проектированию алгоритмов и программ

.1 История

В последние годы большое распространение получила парадигма объектно-ориентированного программирования и языков на ее основе. ООП возникло в результате развития идеологии процедурного программирования <#"656709.files/image006.jpg">

Рисунок 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.csSystem;System.Collections.Generic;System.Linq;System.Text;System.Collections;WindowsFormsApplication1

{class Guide_of_Equipment : IComparable

{enum name_equipment { Беларусь, Россия, Бельгия, Украина, Голландия }name_equipment country; //Наименование оборудованияstring equipment; //Страна-изготовительint Cost; //СтоимостьDateTime year; //Год изготовленияGuide_of_Equipment() //конструктор по умолчанию

{= "Беларусь";= 0;= DateTime.Now;= name_equipment.Беларусь;

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

{= v_p;= v_o;= n;= p;

}string Country

{{ return equipment; }{ equipment = value; }

}int cost

{{ return Cost; }{ Cost = value; }

}DateTime Year

{{ return year; }{ year = value; }

}

//Перегрузки префиксного и постфиксного инкрементовstatic Guide_of_Equipment operator ++(Guide_of_Equipment tr)

{.Cost++;tr;

}static Guide_of_Equipment operator --(Guide_of_Equipment tr)

{.Cost--;tr;

}

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

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

{(tr1.year < tr2.year) return true;return false;

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

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

else return false;

}

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

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

{_of_Equipment c = new Guide_of_Equipment();.Country = a.Country;.equipment = a.equipment;.year = a.year;.Cost = a.Cost + b.Cost;c;

}int Compare(object k1, object k2)

{f = 0;_of_Equipment tr1 = (Guide_of_Equipment)k1;_of_Equipment tr2 = (Guide_of_Equipment)k2;(tr1.equipment.CompareTo(tr2.equipment) > 0) f = 1;(tr1.equipment.CompareTo(tr2.equipment) < 0) f = -1;f = 0;f;

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

{_of_Equipment[] j = new Guide_of_Equipment[b.Length + 1];[0] = a;(int i = 1; i < j.Length; i++)[i] = b[i - 1];j;

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

{_of_Equipment max = a[0];(int i = 1; i < a.Length; i++)(a[i] > max)= a[i];max;

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

{

Guide_of_Equipment tmp = (Guide_of_Equipment)ob;(DateTime.Compare(this.year, tmp.year) > 0) return 1;(DateTime.Compare(this.year, tmp.year) < 0) return -1;0;

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

{Get = new ArrayList();.Add(this.equipment);.Add(this.year.ToShortDateString());.Add(this.Cost);.Add(this.country);Get;

}override string ToString()

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

}

}

}

Приложение Б

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

Текст класса Tree.csSystem;

using System.Collections.Generic;System.Linq;System.Text;WindowsFormsApplication1

{class Tree

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

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

{ get { return root; } set { root = value; } }void Adding(Node node)//добавление узла

{flag = true;current = root;(flag)

{(current == null)

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

{(current.Left == null)

{.Left = node;.Left.Top = current;= false; //меняем значение флага

}

{ current = current.Left; }

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

{(current.Right == null)

{.Right = node;.Right.Top = current;= false;

}{ current = current.Right; }

}

}

}

//СтекNode search(string equipment, Node r)

{<Node> stack = new Stack<Node>();

{(string.Compare(r.Get_J.equipment.ToString(), equipment) == 0) return r;(r.Left != null) stack.Push(r.Left);(r.Right != null) stack.Push(r.Right);= stack.Pop();

} while (stack.Count > 0);null;

}Node MostRightNode(Node uz)

{(uz.Right != null)MostRightNode(uz.Right);return uz;

}Node MostLeftNode(Node uz)

{(uz.Left != null)MostLeftNode(uz.Left);return uz;

}void ChangeData(Node uz, Guide_of_Equipment j, bool remove, bool search_for_delete)

{(uz != Root && remove == true)

{(uz);(new Node(j));

}

{.Get_J.country = j.country;.Get_J.Cost = j.Cost;.Get_J.equipment = j.equipment;.Get_J.year = j.year;

}

}Node Search(string equipment, bool remove, bool search_for_delete) //метод для поиска элемента, если установлен флаг удаления, то удаляет

{Rezult_Uzel;flag = true;C_Uzel = Root;ret = null;(flag)

{(String.Compare(equipment, C_Uzel.Get_J.equipment.ToString()) == 0) //выходим если нашли

{= false;= C_Uzel;(ret == root) search_for_delete = false;

}if (String.Compare(equipment, C_Uzel.Get_J.equipment.ToString()) < 0) //меньше, следовательно идем налево

{(C_Uzel.Left != null) C_Uzel = C_Uzel.Left;{ flag = false; }

}//иначе направо

{(C_Uzel.Right != null) C_Uzel = C_Uzel.Right;

else { flag = false; }

}

}w = new Find(); //обьект формы поиска для обращения к вспомогательному узлу для запоминания узла находящегося вверху над найденным_Uzel = ret; //найденный узел_Uzel = C_Uzel.Top; //текущим будет тот узел, который расположен над найденным

if (search_for_delete)

{Remove(ret);

}ret; //возвращаем найденный узел

}

private Node Remove(Node ret)

{(ret == null)

{null;

}(ret.Right == null && ret.Left == null)

{(ret == ret.Top.Left) ret.Top.Left = null;ret.Top.Right = null;

}

else

{(ret == ret.Top.Left)

{.Top.Left = ret.Right;(ret.Left == null)

{.Top.Left = ret.Right;

}

{rightBranch = MostRightNode(ret.Top);.Right = ret.Right;

}

}

{.Top.Right = ret.Right;(ret.Right == null)

{.Top.Right = ret.Left;

}

{leftBranch = MostLeftNode(ret.Top);.Left = ret.Left;

}

}

}null;

}

}

}

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

Текст класса Node.csSystem;

using System.Collections.Generic;System.Linq;System.Text;WindowsFormsApplication1

{class Node

{_of_Equipment guide;left, right, top;Node(Guide_of_Equipment guide) //конструктор

{ this.guide = guide; }Node Left // свойство для доступа к узлу

{{ return left; }{ left = value; }

}Node Right //Правее

{ get { return right; } set { right = value; } }Node Top

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

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

{{ return guide; }

}

}

}

Приложение Г

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

Текст класса About.csSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;WindowsFormsApplication1

{partial class About : Form

{About()

{();

}void button1_Click(object sender, EventArgs e)

{();

}void About_Load(object sender, EventArgs e)

{

}

}

}

Приложение Д

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

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

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.Collections;WindowsFormsApplication1

{partial class Change : Form

{_of_Equipment j;u = null;nonNumberEntered = false;Change()

{();

}void textBox1_KeyPress(object sender, KeyPressEventArgs e)

{window = (Main)this.Owner;(e.KeyChar == (char)Keys.Enter)

{(textBox1.Text == window.Tree_Obj.Root.Get_J.equipment.ToString())

{.Show("Это корневой узел, вы можете изменять сведения, но не номер");

textBox2.Enabled = false;

}.Enabled = true;.Enabled = true;(Guide_of_Equipment obj in window.Obj_mas)

{(textBox1.Text == obj.equipment.ToString())

{= obj;str = new ArrayList();= obj.Out();.Text = str[0].ToString();.Text = str[2].ToString();.Text = str[1].ToString();.Text = str[3].ToString();

}

}(j == null)

{ MessageBox.Show("Такого оборудования нет.\n Повторите!", "Ошибка!"); groupBox1.Enabled = false; }

}

}void button1_Click(object sender, EventArgs e)

{window = (Main)this.Owner;

{= window.Tree_Obj.search(textBox1.Text, window.Tree_Obj.Root);(u == null) throw new NullReferenceException();= new Guide_of_Equipment();.equipment = textBox2.Text;.Cost = int.Parse(textBox3.Text);.year = Convert.ToDateTime(textBox4.Text);.country = (Guide_of_Equipment.name_equipment)Enum.Parse(typeof(Guide_of_Equipment.name_equipment), textBox5.Text);();

}(NullReferenceException) { MessageBox.Show("Такое оборудование не найдено!", "Ошибка!"); return; }(Exception f) { MessageBox.Show("Тип, что вы ввели не соответствует требуемому типу, пожалуйста повторите.\n" + f.Message + " ","Ошибка!"); return; }.Tree_Obj.ChangeData(u, j, true, true);(int p = 0; p < window.Obj_mas.Count; p++) if (u.Get_J.equipment == window.Obj_mas[p].equipment) window.Obj_mas[p] = j;

}void button2_Click(object sender, EventArgs e)

{();

}

private void textBox3_KeyDown(object sender, KeyEventArgs e)

{= false;(e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)

{(e.KeyCode != Keys.Back)

{= true;

}

}

}void textBox3_KeyPress(object sender, KeyPressEventArgs e)

{(nonNumberEntered == true)

{.Handled = true;

}

}void textBox3_TextChanged(object sender, EventArgs e)

{

}void groupBox1_Enter(object sender, EventArgs e)

{

}

}

}

Приложение Е

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

Текст класса Delete.csSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;WindowsFormsApplication1

{partial class Delete : Form

{Delete()

{();

}void button1_Click(object sender, EventArgs e)

{(MessageBox.Show("Вы действительно хотите удалить данный элемент элемент?","Внимание!",

MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Cancel);k = true;window = (Main)this.Owner;

{(String.Compare(textBox1.Text, window.Tree_Obj.Root.Get_J.equipment.ToString()) == 0)

MessageBox.Show("Нельзя удалять это наименование оборудования (Корневой узел)!", "Ошибка!");

else

{Rem_Uzel = window.Tree_Obj.Search(textBox1.Text, false, false);(Rem_Uzel == window.Tree_Obj.Root)

{ window.Tree_Obj.Root = null; k = false; }(k)

{(Rem_Uzel.Right == null && Rem_Uzel.Left == null && Rem_Uzel != window.Tree_Obj.Root)

{(Rem_Uzel.Top.Left == Rem_Uzel)

{ Rem_Uzel.Top.Left = null; }if (Rem_Uzel.Top.Right == Rem_Uzel)

{ Rem_Uzel.Top.Right = null; }

}if (Rem_Uzel.Right != null)

{ window.Tree_Obj.Search(Rem_Uzel.Right.Get_J.equipment.ToString(), true, true); }if (Rem_Uzel.Left != null)

{ window.Tree_Obj.Search(Rem_Uzel.Left.Get_J.equipment.ToString(), true, true); }

}.Obj_mas.Remove(Rem_Uzel.Get_J);

}();

}(Exception) { MessageBox.Show("Такое наименование оборудования не найден, пожалуйста повторите.", "Ошибка!"); }

}void button2_Click(object sender, EventArgs e)

{();

}void Delete_Load(object sender, EventArgs e)

{

}

}

}

Приложение Ж

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

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

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.Collections;WindowsFormsApplication1

{partial class Find : Form

{Node vspom;Find()

{();

}

void button1_Click(object sender, EventArgs e)

{.RowCount = 1;window = (Main)this.Owner;_of_Equipment ar = new Guide_of_Equipment();= new Node(ar);

{Rez = window.Tree_Obj.search(textBox1.Text, window.Tree_Obj.Root);lal = Rez.Get_J.Out();[0, 0].Value = lal[0];[1, 0].Value = lal[1];[2, 0].Value = lal[2];[3, 0].Value = lal[3];

}(NullReferenceException)

{.Show("Такое наименование оборудования не найдено!", "Ошибка!");

}(FormatException)

{.Show("Цена должна представлять из себя число!", "Ошибка!");

}

}void button2_Click(object sender, EventArgs e)

{();

}void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)

{

}void label1_Click(object sender, EventArgs e)

{

}

}

}

Приложение З

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

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

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;WindowsFormsApplication1

{partial class Information : Form

{Information()

{();

}void button1_Click(object sender, EventArgs e)

{();

}void richTextBox1_TextChanged(object sender, EventArgs e)

{

}

}

}

Приложение И

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

Текст класса Insert.csSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;WindowsFormsApplication1

{partial class Insert : Form

{

public Insert()

{();

}

private void button1_Click(object sender, EventArgs e)

{

{window = (Main)this.Owner;(window.Tree_Obj.search(textBox1.Text, window.Tree_Obj.Root) != null)

{ MessageBox.Show("Такое наименование оборудования уже существует!"); return; }

Guide_of_Equipment j = new Guide_of_Equipment(textBox1.Text, Convert.ToDateTime(textBox2.Text), Convert.ToInt32(textBox3.Text), (Guide_of_Equipment.name_equipment)Enum.Parse(typeof(Guide_of_Equipment.name_equipment), textBox4.Text));.Obj_mas.Add(j);Adding_Uzel = new Node(j);.Tree_Obj.Adding(Adding_Uzel);();

}(Exception f) { MessageBox.Show("Тип, что вы ввели не соответствует требуемому типу, пожалуйста повторите.\n" + f.Message + "Ошибка!"); }

}void button2_Click(object sender, EventArgs e)

{();

}void groupBox1_Enter(object sender, EventArgs e)

{.Enabled = true;

}

}

}

Приложение К

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

Текст класса Main.csSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.Collections;System.IO;WindowsFormsApplication1

{partial class Main : Form

{Tree Tree_Obj = new Tree();List<Guide_of_Equipment> Obj_mas = new List<Guide_of_Equipment>();Main()

{();.AllowUserToAddRows = false;

}void поискToolStripMenuItem_Click(object sender, EventArgs e)

{window = new Find();.Owner = this;.Nodes.Clear();.ShowDialog();();

}void визуализацияБинарногоДереваToolStripMenuItem_Click(object sender, EventArgs e)

{.Nodes.Clear();.Visible = true;.Nodes.Add(Tree_Obj.Root.Get_J.equipment);(Tree_Obj.Root.Left != null)

{uz = new TreeNode(Tree_Obj.Root.Left.Get_J.equipment.ToString());.Nodes[0].Nodes.Add(uz);(Tree_Obj.Root.Left, uz);

}(Tree_Obj.Root.Right != null)

{uz = new TreeNode(Tree_Obj.Root.Right.Get_J.equipment.ToString());.Nodes[0].Nodes.Add(uz);(Tree_Obj.Root.Right, uz);

}.ExpandAll();

}void BuildTreeView(Node uzel, TreeNode Parent)

{(uzel.Left != null)

{currentNode = new TreeNode(uzel.Left.Get_J.equipment.ToString());.Nodes.Add(currentNode);(uzel.Left, currentNode);

}(uzel.Right != null)

{currentNode = new TreeNode(uzel.Right.Get_J.equipment.ToString());.Nodes.Add(currentNode);(uzel.Right, currentNode);

}

}void открытьToolStripMenuItem_Click(object sender, EventArgs e)

{(openFileDialog1.ShowDialog() == DialogResult.OK)

{

{[] Lines = File.ReadAllLines(openFileDialog1.FileName, Encoding.Default);i = 0;f = true;(string Line in Lines)

{

{[] vrem = Line.Split(';');year = DateTime.Parse(vrem[0]);_mas.Add(new Guide_of_Equipment(vrem[3], year, Convert.ToInt32(vrem[2]), (Guide_of_Equipment.name_equipment)Enum.Parse(typeof(Guide_of_Equipment.name_equipment), vrem[1])));_Obj.Adding(new Node(Obj_mas[i]));++;

}(Exception ex) { f = false; }

}(!f) MessageBox.Show("Некоторые данные являются некоректными, поэтому они не будут включены в общий поток данн.", "Ошибка!");

if (Lines.Length == 0) throw new Exception();(Obj_mas.Count != 0) MessageBox.Show("Файл считан успешно");

сохранитьToolStripMenuItem.Enabled = true;

вставкаToolStripMenuItem.Enabled = true;

удалениеToolStripMenuItem.Enabled = true;

заменаToolStripMenuItem.Enabled = true;

поискToolStripMenuItem.Enabled = true;

визуализацияБинарногоДереваToolStripMenuItem.Enabled = true;

перегрузкаБинарныхОператоровToolStripMenuItem.Enabled = true;

перегрузкаИнкрементаStripMenuItem.Enabled = true;

перегрузкаОператоровОтношенияToolStripMenuItem.Enabled = true;();

}(Exception) { MessageBox.Show("Файл содержит некоректную информацию либо не содержит информацию вообще!","Ошибка!"); }

}

}void vivod()

{.Visible = true;.RowCount = Obj_mas.Count;(int i = 0; i < Obj_mas.Count; i++)

{

//dataGridView1.Rows.Add();lal = Obj_mas[i].Out();[0, i].Value = lal[3];[1, i].Value = lal[1];[2, i].Value = lal[2];[3, i].Value = lal[0];

}

}void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{sr = new StreamWriter(saveFileDialog1.FileName);(int i = 0; i < dataGridView1.RowCount; i++)

{.WriteLine(dataGridView1[0, i].Value + " ; " + dataGridView1[1, i].Value + " ; " + dataGridView1[2, i].Value + " ; " + dataGridView1[3, i].Value + " . ");

}.Close();

}

}void вставкаToolStripMenuItem_Click(object sender, EventArgs e)

{lal = new Insert();.Owner = this;.Nodes.Clear();.ShowDialog();();

}void удалениеToolStripMenuItem_Click(object sender, EventArgs e)

{window = new Delete();.Owner = this;.Nodes.Clear();.ShowDialog();();

}void заменаToolStripMenuItem_Click(object sender, EventArgs e)

{window = new Change();.Owner = this;.Nodes.Clear();.ShowDialog();();

}void обАвтореToolStripMenuItem_Click(object sender, EventArgs e)

{A = new About();.ShowDialog();

}void информацияОПроектеToolStripMenuItem_Click(object sender, EventArgs e)

{I = new Information();.ShowDialog();

}void выходToolStripMenuItem_Click(object sender, EventArgs e)

{.Exit();

}void перегрузкаБинарныхОператоровToolStripMenuItem_Click(object sender, EventArgs e)

{o = new Overload();.label1.Text = "Введите наименования первого оборудования";.label1.Show();.textBox1.Show();

o.label2.Text = "Введите наименования второго оборудования";

o.label2.Show();.textBox2.Show();.button1.Show();.ShowDialog(this);

}void перегрузкаОператоровОтношенияToolStripMenuItem_Click(object sender, EventArgs e)

{o = new Overload();.label1.Text = "Введите наименования первого оборудования";.label1.Show();.textBox1.Show();

o.label2.Text = "Введите наименования второго оборудования";

o.label2.Show();.textBox2.Show();.button3.Show();.ShowDialog(this);

}void перегрузкаИнкрементаToolStripMenuItem_Click(object sender, EventArgs e)

{o = new Overload();.label1.Text = "Введите наименование оборудования:";.label1.Show();.textBox1.Show();.button2.Show();.ShowDialog(this);

}

}

}

Приложение Л

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

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

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;WindowsFormsApplication1

{partial class Overload : Form

{Overload()

{();

}void button1_Click(object sender, EventArgs e)

{find1, find2;

{= textBox1.Text; find2 = textBox2.Text;m1 = (Main)this.Owner;j1 = m1.Tree_Obj.search(find1, m1.Tree_Obj.Root);j2 = m1.Tree_Obj.search(find2, m1.Tree_Obj.Root);.Show((j1.Get_J + j2.Get_J).ToString());

Close();

}{ MessageBox.Show("Таких наименований оборудования нет.", "Ошибка"); }

}void button4_Click(object sender, EventArgs e)

{();

}void button3_Click(object sender, EventArgs e)

{find1, find2, b;

{= textBox1.Text; find2 = textBox2.Text;m1 = (Main)this.Owner;j1 = m1.Tree_Obj.search(find1, m1.Tree_Obj.Root);j2 = m1.Tree_Obj.search(find2, m1.Tree_Obj.Root);(j1.Get_J > j2.Get_J) b = ">";b = "<";.Show(j1.Get_J.equipment + " " + b + " " + j2.Get_J.equipment);

Close();

}{ MessageBox.Show("Таких наименований оборудования нет.", "Ошибка"); }

}void button2_Click(object sender, EventArgs e)

{find1;

{= textBox1.Text;m1 = (Main)this.Owner;j1 = m1.Tree_Obj.search(find1, m1.Tree_Obj.Root);_of_Equipment a = new Guide_of_Equipment(j1.Get_J.Country, j1.Get_J.year, j1.Get_J.cost, j1.Get_J.country);.Show(a++.cost.ToString());

Close();

}{ MessageBox.Show("Такого наименования оборудования нет."); }

}

}

}

Приложение М

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

.02.2010;Россия;1000;Д-12

.02.2009;Бельгия;1500;У-11

.02.2011;Голландия;1000;ДВ-1

.03.2010;Украина;2000;Л-4

.04.2011;Беларусь;1500;ИЛ-2

.02.2010;Россия;1000;Е-12

.02.2009;Бельгия;1500;У-12

.02.2011;Голландия;1000;ДК-1

.03.2010;Украина;2000;ЛВ-4

.04.2011;Беларусь;1500;Л-2

.10.2010;Россия;1000;ЗЩ-12

.11.2009;Бельгия;1500;ВА-11

.12.2011;Голландия;1000;ВО-1

.09.2010;Украина;2000;ЛФ-4

.08.2011;Беларусь;1500;ЗД-2

.07.2010;Россия;1000;ЕЛ-12

.06.2009;Бельгия;1500;УП-12

.02.2011;Голландия;1000;ЖК-1

.08.2010;Украина;2000;МВ-4

.04.2011;Беларусь;1500;ДЛ-23

.11.2010;Россия;1000;ХБ-1

.11.2009;Бельгия;1500;ВТ-21

.12.2011;Голландия;1000;АО-12

.09.2010;Украина;2000;ЛП-44

.08.2011;Беларусь;1500;УД-23

.07.2010;Россия;1000;ПЛ-02

.06.2009;Бельгия;1500;УЛ-920

.05.2011;Беларусь;1500;ИК-2

.03.2010;Россия;1000;К-12

.03.2009;Бельгия;1500;С-12

.03.2011;Голландия;1000;СК-1

.04.2010;Украина;2000;ПВ-4

.05.2011;Беларусь;1500;ЕЛ-2

.11.2010;Россия;1000;ИЩ-12

.12.2009;Бельгия;1500;ФА-11

.11.2011;Голландия;1000;РО-1

.10.2010;Украина;2000;ЦФ-4

.09.2011;Беларусь;1500;ГД-2

.08.2010;Россия;1000;СЛ-12

.07.2009;Бельгия;1500;ОП-12

.03.2011;Голландия;1000;ОК-1

.09.2010;Украина;2000;ПВ-5

.05.2011;Беларусь;1500;НЛ-3

.12.2010;Россия;1000;ХА-65

.12.2009;Бельгия;1500;ЦТ-51

.11.2011;Голландия;1000;ПО-22

.10.2010;Украина;2000;ЛО-54

.09.2011;Беларусь;1500;ИД-73

08.08.2010;Россия;1000;ЛВ-52

.08.2009;Бельгия;1500;ЩЛ-02

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!