Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DSD_Spiskovye_struktury_dannykh_na_baze_massivo...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

6Оформление курсового проекта

Ниже приводятся основные требования и рекомендации по оформлению курсового проекта (КП).

6.1Интерфейс программной системы

Обязательные элементы интерфейса должны включать следующие компоненты MS VisualStudio.Net:

  1. TreeView – просмотр мультисписка в виде дерева;

  2. ListView – просмотр мультисписка в виде таблицы;

  3. ContexMenu – редактирование элементов мультисписка в TreeView;

  4. MainMenu – главное меню;

  5. ToolBar – инструментальная панель;

  6. RadioButton – группа зависимых переключателей;

  7. CheckBox – независимый переключатель;

  8. PictureBox – отображение картинок;

  9. OpenFileDialog, SaveFileDialog – диалоги открытия и сохранения файлов;

  10. StatusBar – информационная панель;

  11. HelpProvider - справочная система.

Примечание. Предусмотреть два способа обновления TreeView после вставки, замены и извлечения элемента мультисписка:

  1. средствами обновления состава узлов дерева TreeView;

  2. перерисовкой в дереве TreeView измененного мультисписка.

6.2Взаимодействие с мультисписком

Взаимодействие с мультисписком – локализация и визуализация требуемого уровня или элемента мультисписка, в качестве одной из возможностей можно использовать компонент TreeView – просмотр дерева. Например – см. Рисунок 6.1:

Рисунок 6.1 – Вывод мультисписка в виде дерева с помощью компонента TreeView

Для построения такого дерева в MS VisualStudio.Net используются три типа данных узел дерева – TreeNode, список узлов дерева - TreeNodeCollection и просмотрщик дерева - TreeView, которые рассматриваются ниже.

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

Имя поля

Тип

Значения

Содержимое

Text

String*

текст в метке узла дерева

TreeVeiw

TreeView*

все узлы имеют указатель на вершину дерева, к которому они принадлежат

Level

Int

уровень узла в дереве, начиная с 0

FullPath

String*

Путь из корневого узла дерева к текущему узлу дерева

Parent

TreeNode*

ссылка на родителя узла

Index

Int

индекс узла в списке своих братьев (всех сыновей своего родителя)

FirstNode

TreeNode*

первый дочерний узел дерева

LastNode

TreeNode*

последний дочерний узел дерева

NextNode

TreeNode*

Следующий узел дерева на данном уровне

PrevNode

TreeNode*

Предшествующий узел дерева на данном уровне

Nodes

TreeNodeCollection*

представляет коллекцию узлов TreeNode для данного узла

FullPath

String*

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

Tag

Object*

ссылка на объект, содержащий сведения об узле дерева

Такое разнообразие полей позволило снабдить данные типа узел - TreeNode, большим набором функций [11], наиболее существенные из которых приводятся ниже.

Методы

Назначение

void Remove ( )

Узел дерева и все дочерние узлы дерева, назначенные объекту TreeNode, удаляются из объекта TreeView.Удаленные дочерние узлы удаляются из объекта TreeView, но остаются присоединенными к этому узлу дерева.

void BeginEdit ( )

Инициирует редактирование метки узла дерева

void EndEdit ( )

Завершает редактирование метки узла дерева.

Object* Clone()

Копирует узел дерева и все поддерево с этим корнем в данный узел дерева

void Collapse ( )

Сворачивает узел дерева.

void Expand ( )

Разворачивает узел дерева.

int GetNodeCount (bool)

Возвращает количество дочерних узлов дерева

Тип TreeNodeCollection - список узлов дерева. Он содержит четыре поля.

Имя поля

Тип

значения

Содержимое

Count

Int

количество узлов в списке

Item (String)

TreeNode*

возвращает узел дерева с указанным ключом из коллекции.

IsReadOnly

Bool

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

Item [Int32]

TreeNode*

получает или задает объект TreeNode по указанному индексу в коллекции

Фактически в сильноветвящемся дереве можно выделить три вида списков:

  • список братьев узла, включая и сам узел;

  • список сыновей узла;

  • список владельцев узла.

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

Методы

Назначение

void Add(String )

Добавляет новый узел дерева с заданным текстом метки в конец текущей коллекции узов дерева

void Add (TreeNode *)

Добавляет ранее созданный узел дерева в конец коллекции узов дерева.

void AddRange (TreeNode * [] )

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

void Clear ( )

Удаляет все узлы дерева из коллекции

int IndexOf (TreeNode * )

Возвращает индекс указанного узла дерева в коллекции.

void Insert (int, TreeNode * )

Вставляет существующий узел дерева в заданную позицию коллекции узов дерева.

void Remove (TreeNode *)

Удаляет указанный узел дерева из коллекции узов дерева

Класс TreeView – представляет иерархическую коллекцию элементов, каждый из которых представляет собой узел TreeNode . Он содержит большое количество полей разного назначения. Для излагаемого материала достаточно выделить три поля, приводимые ниже.

Имя поля

Тип

Значения

Содержимое

Nodes

TreeNodeCollection*

Получает коллекцию узлов дерева, которая назначена элементу управления иерархического представления.

SelectedNode

TreeNode *

Указатель на выбранный узел дерева.

Sorted

Bool

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

Некоторые методы класса TreeView .

Методы

Назначение

void CollapseAll ( )

Свертывает все узлы дерева.

void ExpandAll ( )

Развертывает все узлы дерева.

int GetNodeCount (bool )

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

Для примера использования представленных весьма значительных возможностей приведем некоторый иллюстративный фрагмент программы. Предположим, что в дереве будут отмечены в произвольном порядке: факультет – ФИВТ и кафедра – ВТ.

// При создании списка создаем корневой узел в treeView1

void Form1::btn_Create_Click(System::Object * sender, System::EventArgs * e)

{

// Создание корневого узла в treeView1

TreeNode *node_root;

Node_root=treeView1->Nodes->Add(S"Министерство образования");

node->Tag=node_tag; //к корневому узлу подсоединяем объект с данными об //уровне узла

. . .

//Корневой узел будет выбранным

treeView1->SelectedNode=node_root;

}

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

В данном примере действия будут выполняться при обработке события click у компонента treeView1

void Form1::treeView1_Click(System::Object * sender, System::EventArgs * e)

{

//Получение имени выделенного узла дерева

char* KeyUniv;

KeyUniv=SystemStringToChar(treeView1->SelectedNode->Text);

//получение уровня выделенного узла в дереве, начиная с 0

int level = treeView1->SelectedNode->Level;

//действия в зависимости от уровня выбранного узла

switch (level)

{

case 1: //выбран университет

. . .

break;

case 2: //выбран факультет

//Фиксация выделенного узла

TreeNode* Node1;

Node1=treeView1->SelectedNode;

//имя выбранного факультета

char* NameFct;

strcpy(NameFct, Node1->Text);

// имя корня дерева – Министерство образования

char* NameRoot;

strcpy(NameRoot, Node1->Parent->Parent->Text);

// имя отца факультета – имя университета

char* NamePar;

strcpy(NamePar, Node1->Parent->Text);

/*Путь от корня до отца выделенного узла заносится в строку S*/

String* S=treeView1->SelectedNode->FullPath;

/*Примечание. Т.к. глубина дерева может быть произвольной, то универсальный способ подъема по дереву можно выполнить с помощью свойства FullPath, которое содержит строку с перечнем всех предков выделенного узла от корня к узлу.

Строка, содержащая имена предков выделенного узла будет, например, иметь вид

"Министерство образования\ЧДТУ\ФЭИТ\ИКС"

Имена предков разделяются символом "\". Символ разделения названия предков содержится в свойстве TreeView – PathSeparator. Первым именем в строке является имя корня, а последним – имя отца выделенного узла.

*/

int CountSon = Node1->Nodes->Count; /*количество элементов в списке сыновей у выбранного узла факультета*/

char* NameSelSon1;

char* NameSelSon2;

strcpy(NameSelSon1, treeView1->SelectedNode->FirstNode->Text);

/*доступ к 1-му элементу списка сыновей узла выбранного факультета*/

strcpy(NameSelSon1, treeView1->SelectedNode->Nodes->Item[0]->Text); /*другой способ доступа к 1-му элементу списка сыновей узла выбранного факультета*/

strcpy(NameSelSon2, treeView1->SelectedNode->Nodes->Item[1]->Text); /* доступ ко 2-му элементу списка сыновей узла выбранного факультета*/

int Ind1 = Node1.Index; //индекс узла факультета в списке братьев

/*доступ к предыдущему узлу факультетов, если он есть, в списке всех узлов дерева при его обходе в прямом порядке*/

TreeNode* Node2;

Node2=treeView1->SelectedNode->PrevNode;

/*имя предыдущего узла факультета*/

char* NameSelBroth1;

strcpy(NameSelBroth1, Node2->Text);

/*доступ к следующему узлу факультетов, если он есть, в списке всех узлов дерева при его обходе в прямом порядке*/

TreeNode* Node3;

Node3=treeView1->SelectedNode->NextNode;

/*имя следующего узла факультета*/

char* NameSelBroth2;

strcpy(NameSelBroth2, Node3->Text);

/*добавление сына ИИТ к выбранному узлу факультета*/

treeView1->SelectedNode->Nodes->Add(S"ИИТ");

/* удаление выбранного узла факультета и всех его потомков */

treeView1->SelectedNode->Remove();

. . .

break;

case 3: //выбрана кафедра

break;

}

}