ати (а може не включати) вкладені в нього елементи і символьні дані, а також коментарі. Вкладені в кореневий елемент елементи, у свою чергу, можуть включати вкладені в них елементи, символьні дані і коментарі, і так далі.
Елементи документа повинні бути правильно вкладені: будь-який елемент, що починається всередині іншого елемента (тобто будь-який елемент документа, крім кореневого), повинен закінчуватися всередині елемента, в якому він почався.
Оголошення, інструкції обробки та елементи можуть мати пов'язані з ними атрибути. Атрибути (англ. Attribute) використовуються для зв'язування з логічною одиницею тексту пар ім'я-значення.
Описати структуру у файлі можна таким чином. В якості кореневого тега буде розміщений початковий тег lt; root gt ;, якому відповідає кінцевий (закривається) тег lt;/root gt;.
Всі теги для даних мультіспіска будуть розташовуватися між кореневими тегами у файлі. Для кожного виробу, вузла, компонента розміщується тег lt; object gt ;, що має свій кінцевий аналог lt;/object gt ;. Кожен такий тег має свої атрибути, які є значеннями інформаційних полів структури, яка описує кожен з виробів.
5.4 Розробка типів даних
Нижче наводиться опис типів даних, що застосовуються при конструюванні необхідної мультіспісковой структури, заданої варіантом дипломного проекту.
struct Rayon {name; square; number_zhek; ** sublev;
}; street {name; year; ** sublev;
}; house {number; square; ** sublev;
}; flat {number; cnt_room; ** sublev;
}; people {name;
QString surname; age;
};
Структура для вулиць Tstreet містить в собі информацион?? перші поля для зберігання назви вулиці і номера ЖЕКу - street і gek. У структуру так само включений покажчик sublev типу void **. Це покажчик на масив «безтіпових» покажчиків, що використовуються для зберігання будинків, що відносяться до даної вулиці.
Структура для будинків Thouse містить інформаційне поле houseNumber для номера будинку, а також покажчик на масив «безтіпових» покажчиків на квартири - sublev.
Структура для квартир Tflat містить інформаційні поля flatNumber, roomsCount, phone для номера квартири, кількості кімнат і номера телефону відповідно, а також покажчик на масив «безтіпових» покажчиків на жителів - sublev.
Структура для жителів Tperson містить інформаційні поля name, age, work для ПІБ, віку та діяльності жителя соответсвенно.
Вибір типу для кожного поля структури обгрунтований лише їх призначенням і власними уподобаннями, оскільки умовою завдання до дипломного проекту не вказані конкретні типи, які необхідно використовувати для реалізації мультіспісковой структури.
5.5 Розробка алгоритмів та реалізація основних функцій
Для створення і реалізації мультіспісковой структури необхідно забезпечити ініціалізацію масиву, його розширення, а так само можливість додавання, видалення, пошуку елементів.
. 5.1 Ініціалізація масиву
Блок-схема алгоритму виконання ініціалізації масиву покажчиків має такий вигляд (Малюнок 5.2).
Малюнок 5.2 - Блок-схема алгоритму ініціалізації масиву
Спочатку потрібно виділити пам'ять для зберігання покажчиків. Після, проініціалізувати масив, шляхом зсуву покажчика на масив на +2 одиниці, записати в осередок з індексом cellSize розмір масиву, а в комірку cellCount записати 0.
5.5.2 Алгоритм розширення масиву
Блок-схема алгоритму виконання розширення масиву покажчиків має такий вигляд (Малюнок 5.3).
Малюнок 5.3 - Блок-схема алгоритму розширення масиву покажчиків
Для початку потрібно виділити пам'ять під новий масив покажчиків. Розмір нового буде дорівнює (розмір старого + extBy + 2). Далі нам необхідно його ініціалізувати. Для цього у комірку cellSize записуємо розмір нового масиву, а в комірку cellCount записуємо кількість вже існуючих елементів. Після, копіюємо дані з вихідного масиву в новий, осводождаем пам'ять вихідного масиву.
. 5.3 Алгоритм вставки елемента в масив
Блок-схема алгоритму виконання вставки елемента в масив покажчиків має такий вигляд (Малюнок 5.4).
Малюнок 5.4 - Блок-схема алгоритму вставки елемента в масив
. 5.4 Алгоритм видалення елемента
Функція видалення прий...