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

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

Указатель на функцию – это переменная, которая содержит адрес точки входа в функцию.

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

typedef //заголовки функций для поиска

int (*TFunc)(void**,int,char*); //объявление указателя на функцию

int ReysF(void**,int,char*); //функция сравнения для рейсов

int TimeF(void**,int,char*); //функция сравнения для дат

int PasF(void**,int,char*); //функция сравнения для пассажиров

typedef //заголовки функций для удаления

void (*DFunc)(void**,int); //объявление указателя на функцию

void ReysDel(void**,int); //функция для сдвига при удалении рейса

void TimeDel(void**,int); //функция для сдвига при удалении даты

void PasDel(void**,int); //функция для сдвига при удалении пассажира

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

void FindElList2(void** PtrArrPtr, char *Key, int &PosFndEl, bool &FindOK,TFunc Func);

Функция поиска получает PtrArrPtr – начало списка, key - ключ поиска и указатель на функцию типа TFunc, и возвращает PosFndEl – позиция искомого элемента и FindOK – true, если элемент найден, и false, если не найден. В этой функции поиска при вызове функции сравнения, передаваемой как параметр, вместо имени функции пишется имя параметра, типа указатель на функцию:

Func(PtrArrPtr,Middl,Key);

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

Аналогично для функции удаления:

void DelElm(void** &Start,int &cnt,DFunc Func);

Функция удаления получает Start - начало списка, cnt - позиция удаляемого элемента, Func - указатель на функцию. В этой функции при вызове функции сдвига, передаваемой как параметр, вместо имени функции пишется имя параметра, типа указатель на функцию:

Func(Start,cnt);

Таким образом мы получаем одну инвариантную функцию удаления для трех уровней.

5.4Разработка интерфейсов пользователя

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

Главная форма представлена на рисунке 5.4.

Главная форма содержит такие компоненты: TreeWidget, TableWidget, ToolBar, menuBar.

Компонент TreeWidget предназначен для отображения рабочего списка, в виде дерева. Компонент TableWidget предназначен для отображения подробной информации списка.

Основная форма не содержит поля для ввода информации, поэтому используется дополнительные формы, например форма для добавления рейсов (рисунок 5.3), которые содержат поля для ввода и изменения данных для всех уровней мультисписка.

Рисунок 5.3 – Форма для добавления рейсов

Рисунок 5.4 – Интерфейс главной формы проекта

Проект имеет красивый и интуитивно понятный интерфейс, плюс есть справка, в которой подробно описана работа с программой.

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