Информационно-справочная система 'Управление городом'

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

Информационно-справочная система 'Управление городом'

Содержание

Введение

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

. Анализ решаемой задачи

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

. Определение путей и методов решения задачи

4.1        Построение мультисписковых структур

4.2        Методы реализации мультисписковых структур используя особенности языка C++

5. Проектирование информационно-справочной системы

5.1 Разработка структуры данных

.2 Проектирование физической структуры

.3 Физическая структура данных для сохранения в файл

.4 Разработка типов данных

.5 Разработка алгоритмов и реализация основных функций

5.5.1 Алгоритм инициализации массива

.5.2 Алгоритм расширение массива

.5.3 Алгоритм вставки нового элемента в массив

.5.4 Алгоритм удаления элемента

5.6 Основные файлы программы

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

Выводы

Перечень источников

Приложения

Введение

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

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

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

Программа имеет стандартный графический интерфейс Windows, проста в освоении и эксплуатации. При создании программы, была использована среда разработки QT Creator 5.3.2 и язык программирования C++.

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

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

Территория города разбита на отдельные районы. Каждый район обслуживается соответствующими ЖЭК. Такой ЖЭК содержит информацию о перечне обслуживаемых улиц с номерами домов; по каждому дому известен список квартир и их характеристики; по каждой квартире - список жильцов с их атрибутами.

По каждому из этих объектов хранится следующая информация:

. РАЙОН: название района, номер жека, площадь

1. УЛИЦА: название улицы, ее возраст;

2. ДОМ: номер, площадь;

3. КВАРТИРА: номер квартиры, количество комнат;

4. ЖИТЕЛЬ: ФИО жителя, возраст.

Реализовать мультисписковую структуру, которая обеспечивает хранение информации и позволяет осуществить:

-       Ввод, замену или удаление сведений о районе, улице, доме и т.д.;

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

-       Вывод наименований всех улиц города в алфавитном порядке.

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

Взаимодействие с пользователем ИСС организовать с помощью системы меню и структурированных форм ввода.

2. Анализ решаемой задачи

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

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

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

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

Статическое распределение памяти требует резервирования объёма памяти для статических данных в тексте программы ещё до её выполнения. Динамическое распределение памяти предполагает определение требуемого объёма памяти в процессе выполнения программы. Требуемое пространство памяти выбирается из свободного адресного пространства ОЗУ.

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

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

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

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

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

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

4. Определение путей и решения задачи

.1 Построение мультисписковых структур

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

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

.2 Методы реализации мультисписковых структур используя особенности языка C++

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

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

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

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

Еще одной особенностью реализации можно назвать структуру массива указателей. Особенность состоит в том, что первые два элемента массива являются служебными. В которых содержаться значения размера массива и количества элементов в нем. Обращение к этим служебным элементам осуществляется по индексам -1 и -2, поскольку указатель на начало массива смещен на два элемента «вниз». Под понятием «вниз» следует понимать, что к адресу указателя прибавляется удвоенный размер указателя (4байт*2 = 8байт). Это можно осуществлять при помощь адресной арифметики языка C++ (например, чтобы выполнить ранее описанное действие достаточно написать list+=2, где list - это указатель на начало массива).

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

5. Проектирование информационно-справочной системы

.1 Разработка структуры данных

Для организации структуры данных нам потребуется главный указатель на массив указателей (это будет первый уровень иерархии) на список улиц. Каждая структура, кроме структур, используемых на нижнем уровне иерархии, должна иметь поле-указатель на массив указателей (void**). Так, например, каждая структура для улицы должна иметь указатель на массив, хранящий указатели на дома. Однако, для структуры, описывающей жителей, такие поля не нужны, поскольку у неё нет подуровней, и она образует последний четвертый уровень иерархии в данной мультисписковой структуре.  Как уже было упомянуто ранее, каждый массив указателей должен в себе содержать два дополнительных поля, одно из них указывает на реальное количество элементов в массиве, а другое указывает на размер массива. Эти поля располагаются в начале массива на первой и второй позиции (однако, следует помнить о том, что указатель на начало массива был сдвинут, и обращаться к служебным полям следует по индексам -1 и -2).

.2 Проектирование физической структуры

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

Рисунок 5.1 - Физическая структура ИИС

Логическую структуру можно описать следующим образом: 0-м уровнем является «Улица», связанная с «Домом», который, является 1-м уровнем иерархии. «Дом» в свою очередь связан со 2-м уровнем «Квартира», который в свою очередь связанный с 3-м уровнем - «Жители».

5.3 Физическая структура данных для сохранения в файл

В ходе проектирования было принято решение сохранять структуру в двоичный файл формата .cml. Это сделано для того, что бы исключить возможность загрузки файлов неподходящего содержимого. Операции сохранение списка в файл и восстановления списка из файла реализованы согласно задания обусловлено рядом причин, которые описаны ниже. В настоящее время формат XML (Extensible Markup Language, расширяемый язык разметки) - одна из самых активно используемых технологий.

XML разрабатывался как язык с простым формальным синтаксисом, удобный для создания и обработки документов программами и одновременно удобный для чтения и создания документов человеком, с подчёркиванием нацеленности на использование в Интернете.

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

Корневой элемент может включать (а может не включать) вложенные в него элементы и символьные данные, а также комментарии. Вложенные в корневой элемент элементы, в свою очередь, могут включать вложенные в них элементы, символьные данные и комментарии, и так далее.

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

Объявления, инструкции обработки и элементы могут иметь связанные с ними атрибуты. Атрибуты (англ. attribute) используются для связывания с логической единицей текста пар имя-значение.

Описать структуру в файле можно следующим образом. В качестве корневого тега будет размещен начальный тег <root>, которому соответствует конечный (закрывающийся) тег </root>.

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

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 Алгоритм удаления элемента

Функция удаления принимает в качестве параметров индекс удаляемого элемента и структуру.

Блок-схема алгоритма выполнения расширения массива имеет следующий вид (Рисунок 5.5).

Рисунок 5.5 - Блок-схема алгоритма удаления элемента в массиве

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

.6 Основные файлы программы

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

Файл types.hсодержит описание основных типов (структур и указателей на функции), а так же описание констант.

Файл prototypefunc.h содержит описание заголовков функций (инициализации, добавления, расширения, удаления и других).

Файл functions.cpp содержит реализацию функций, описанных в заголовочном файле functions.h .

Файл mainwindow.h содержит описание класса (методы, конструктор, деструктор, члены класса) главной формы проекта, вызывающейся при открытии ехе-модуля или запуске его из среды разработки.

Файл mainwindow.cpp содержит реализацию методов, описанных в заголовочном файле mainwindow.h.

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

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

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

Компонент QPushButton предназначен для создания кнопок.

Компонент QLineEdit предназначен для ввода информации.

Компонент QLabel предназначен для отображения текста, используется для того, чтобы сделать надпись.

Компонент QComboBox предназначен для создания выпадающих меню.

Компонент QRadioButton предназначен для создания кнопок навигации.

Компонент QSpinBox предназначен для ввода числовых данных.

Компонент QTreeWidget предназначен для отображения иерархии мультисписка в виде дерева, а также для навигации по структуре.

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

Выводы

Результатом выполнения дипломного проекта является работоспособная ИИС, которая может выполнять все функции, предусмотренные в техническом задании. То есть полностью реализована работа с «Данными по упавлению городом»: добавление, изменение и удаление элементов, сохранение и восстановление списка в/из файла. Использование таких компонентов, как QTreeWidget и QTableWidget позволило устроить удобную навигацию и визуализацию всех уровней мультисписковой структуры.

Таким образом, реализованная ИСС полностью соответствует требованиям технического задания дипломного проекта.

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

1. Структуры данных. Методические указания к самостоятельному изучению дисциплины "Программирование" для студентов Направления "Компьютерная инженерия". Составители В.И. Павловский, П.Г. Бивойно, Н.В. Демшевская, В.В. Соломаха. - Чернигов, ЧДТУ, 2001. 82 с.

2. Методические указания к дипломному проектированию по дисциплине "Структуры и алгоритмы обработки данных" для студентов направления подготовки 6.050102 - "Компьютерная инженерия.

Приложения

Обозначение

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

Примечание


Документация


КИ 133311.005.012

Информационно-справочная



система «Управление городом»



Текст программы





КИ 133311.005.034

Информационно-справочная



система «Управление городом»



Руководство пользователя






Комплексы



Qt Creator 5.3.2



OC Windows 8



Приложение A

Текст программы

ТЕКСТ ФАЙЛА types.H

#ifndef TYPES_H

#define TYPES_H

#include <string>

#include <qstring.h>

#include <QString>namespace std;

#define DELTA 3

#define POS_CNT -1

#define POS_SZ -2

#define SIZE_AR_FIRST 5

typedef int (*cmp)(void *p, QString key);Rayon{name;square;number_zhek;**sublev;

};street{name;year;**sublev;

};house{number;square;**sublev;

};flat{number;cnt_room;**sublev;

};people{name;surname;age;

};ray_file{name[30];square[10];number_szhek[10];cnt_street;

};street_file{name[15];year[5];cnt_house;

};house_file{number[5];square[10];cnt_flat;

};flat_file{number[5];cnt_room[5];cnt_people;

};people_file{name[30];surname[30];age[5];

};

#endif // TYPES_H

ТЕКСТ ФАЙЛА prototypefunc.H

#ifndef PROTOTYPEFUNC_H

#define PROTOTYPEFUNC_H

#include "types.h"

#include "QString"

//сравнение для разных уровней мультиспискка

int cmpray(void*p, QString key);cmpstreet(void*p, QString key);cmphouse(void*p, QString key);cmpflat(void *p, QString key);cmppeople(void *p, QString key);

//конец

//**initarray();extend(void **&start);

//

//очисткаclearpeople(void **&start);clearflat(void **&start);clearhouses(void **&start);clearstreets(void **&start);clearlist(void **&start);

//очистка

//поиск елемента инвариантноfindel(void **start, QString key, int &findpos, int &findok, cmp func);

//*****

//вставкаpush_order(void **&start, void *data, int &pos);

//******

//удаление елементовremoveel(void **&start, int &posdel);removeflat(void **&start, int pos);removehouse(void **&start, int pos);removestreet(void **&start, int pos);removerayon(void **&start, int pos);

//*****

//доступ к елементу списка*getcurrent(void **start, int i);

//*****

//добавлениеadd_rayon_tolist(void **&start, QString name, QString square, QString numberzhack);add_street_tolist(void **&start, QString nameray, QString namestr, QString year);add_house_tolist(void **&start, QString rayname, QString streetneme, QString number, QString square);add_flat_tolist(void **&start, QString rayname, QString streetname, QString numberhouse, QString number, QString cnt_room);add_people_tolist(void **&start, QString rayname, QString streetname, QString numberhouse, QString numberflat, QString name, QString surname, QString age);

//******

//удалениеdel_people(void **&start, QString rayname, QString streename, QString numberhouse, QString numberflat, QString namepeople);del_flat(void **&start, QString rayname, QString streetname, QString numberhouse, QString numberflat);del_house(void **&start, QString rayname, QString streetname, QString numberhouse);del_street(void **&start, QString rayname, QString streetname);del_rayon(void **&start, QString rayname);

//**********

//поискfind_item_ray(void **start, QString ray_name);find_item_street(void **start, QString rayname, QString streetname);find_item_house(void **start, QString ray, QString streetname, QString housenumber);find_item_flat(void **start, QString rayname, QString streetname, QString housenumber, QString flatname);find_item_people(void **start, QString rayname, QString streetname, QString housenumber, QString flatnumber, QString peoplename);*findrayon(void **start, QString rayname);*findstreeet(void **start, QString rayname, QString streetname);*findhouse(void **start, QString rayname, QString streetname, QString housenum);*findflat(void **start, QString rayname, QString streetname, QString housenum, QString flatnum);*findpeople(void **start, QString rayname, QString streetname, QString housenum, QString flatnum, QString peoplename);

//работа с файламиsavelist(char *filename, void **start);save_street(void **start ,FILE *f, int cnt_street);save_house(void **start, FILE *f, int cnt_house);save_flat(void **start, FILE *f, int cnt_flat);save_peopleslist(void **start, FILE *f, int cnt_people);loadlist(char *filename, void **&start);load_street(void **&start, FILE *f, int cnt_street);load_house(void **&start, FILE *f, int cnt_house);load_flat(void **&start, FILE *F, int cnt_flat);load_peoplelist(void **&start, FILE *f, int cnt_people);

//конец

#endif // PROTOTYPEFUNC_H

ТЕКСТ ФАЙЛА FUNCTIONS.CPP

#include "types.h"

#include <QString>

#include "qstring.h"

#include "prototypefunc.h"

#include <iostream>namespace std;cmppeople(void *p, QString key){(((people*)p)->name==key){0;

}(((people*)p)->name>key){1;

}(((people*)p)->name<key){-1;

}cmpflat(void *p, QString key){(((flat*)p)->number==key){0;

}(((flat*)p)->number>key){1;

}(((flat*)p)->number<key){-1;

}cmphouse(void *p, QString key){(((house*)p)->number==key){0;

}(((house*)p)->number>key){1;

}(((house*)p)->number<key){-1;

}cmpstreet(void *p, QString key){(((street*)p)->name==key){0;

}(((street*)p)->name>key){1;

}(((street*)p)->name<key){-1;

}cmpray(void *p, QString key){(((Rayon*)p)->name==key){0;

}(((Rayon*)p)->name>key){1;

}(((Rayon*)p)->name<key){-1;

}**initarray(){**p=new void*[SIZE_AR_FIRST+2];

p=p+2;

((int*)p)[POS_CNT]=0;

((int*)p)[POS_SZ]=SIZE_AR_FIRST;p;

}extend(void **&start){size=((int*)start)[POS_SZ];cnt=((int*)start)[POS_CNT];=size+DELTA;**p=new void*[size];

((int*)p)[POS_SZ]=size;

((int*)p)[POS_CNT]=cnt;

for(int i=0;i<(size-DELTA);i++){[i]=start[i];

}=p;

}findel(void **start, QString key, int &findpos, int &findok, cmp func){hi, low, middl;resultcmp;=0;(((int*)start)[POS_CNT]==0){=0;;

}=0;=((int*)start)[POS_CNT]-1;(low<=hi){=(hi+low)/2;=func(start[middl], key);(resultcmp==0){=middl;=1;;

}(resultcmp==1){=middl-1;

}else{=middl+1;

}=low;

}removeel(void **&start, int &posdel){cnt=((int*)start)[POS_CNT];*wp=start[posdel];(int i=posdel;i<cnt;i++){[i]=start[i+1];

}(wp);-;

((int*)start)[POS_CNT]=cnt;

}clearpeople(void **&start){cnt=((int*)start)[POS_CNT];p=0;(int i=0;i<cnt;i++){(start, p);

}removeflat(void **&start, int pos){(((flat*)start[pos])->sublev);(start, pos);

}clearflat(void **&start){cnt=((int*)start)[POS_CNT];p=0;(int i=0;i<cnt;i++){(start, p);

}removehouse(void **&start, int pos){(((house*)start[pos])->sublev);(start, pos);

}clearhouses(void **&start){cnt=((int*)start)[POS_CNT];p=0;(int i=0;i<cnt;i++){(start, p);

}removestreet(void **&start, int pos){(((street*)start[pos])->sublev);(start, pos);

}clearstreets(void **&start){cnt=((int*)start)[POS_CNT];p=0;(int i=0;i<cnt;i++){(start, p);

}removerayon(void **&start, int pos){(((Rayon*)start[pos])->sublev);(start, pos);

}clearlist(void **&start){cnt=((int*)start)[POS_CNT];p=0;(int i=0;i<cnt;i++){(start, p);

}push_order(void **&start, void *data, int &pos){cnt=((int*)start)[POS_CNT];sz=((int*)start)[POS_SZ];(cnt==sz){(start);

}(pos==cnt){[pos]=data;

}else{(int i=cnt-1;i>=pos;i--){[i+1]=start[i];

}[pos]=data;

}

((int*)start)[POS_CNT]++;

}*getcurrent(void **start, int i){start[i];

}savelist(char *filename, void **start){*f=fopen(filename, "wb");(f==NULL){0;

}cnt_ray;i;_file _ray;_ray=((int*)start)[POS_CNT];(cnt_ray==0){1;

}(&cnt_ray, sizeof(cnt_ray), 1, f);(i=0;i<cnt_ray;i++){name, square, numberzhack;*wp=(Rayon*)getcurrent(start, i);=wp->name;=wp->square;=wp->number_zhek;(_ray.name, name.toLatin1().data());(_ray.square, square.toLatin1().data());(_ray.number_szhek, numberzhack.toLatin1().data());cnt_street=((int*)wp->sublev)[POS_CNT];

_ray.cnt_street=cnt_street;(&_ray, sizeof(_ray), 1, f);(cnt_street!=0){_street(wp->sublev, f, cnt_street);

}(f);1;

}save_street(void **start, FILE *f, int cnt_street){_file streetf;i;(i=0;i<cnt_street;i++){name, year;*emp=(street*)getcurrent(start, i);=emp->name;=emp->year;(streetf.name, name.toLatin1().data());(streetf.year, year.toLatin1().data());cnt_house=((int*)emp->sublev)[POS_CNT];.cnt_house=cnt_house;(&streetf, sizeof(streetf), 1, f);(cnt_house!=0){_house(emp->sublev, f, cnt_house);

}1;

}save_house(void **start, FILE *f, int cnt_house){_file housef;i;(i=0;i<cnt_house;i++){number, square;*pointer=(house*)getcurrent(start, i);=pointer->number;=pointer->square;(housef.number, number.toLatin1().data());(housef.square, square.toLatin1().data());cnt_flat=((int*)pointer->sublev)[POS_CNT];.cnt_flat=cnt_flat;(&housef, sizeof(housef), 1, f);(cnt_flat!=0){_flat(pointer->sublev, f, cnt_flat);

}1;

}save_flat(void **start, FILE *f, int cnt_flat){_file flatf;i;(i=0;i<cnt_flat;i++){number, cnt_room;*pp=(flat*)getcurrent(start, i);=pp->number;_room=pp->cnt_room;(flatf.number, number.toLatin1().data());(flatf.cnt_room, cnt_room.toLatin1().data());cntpeople=((int*)pp->sublev)[POS_CNT];.cnt_people=cntpeople;(&flatf, sizeof(flatf), 1, f);(cntpeople!=0){_peopleslist(pp->sublev, f, cntpeople);

}1;

}save_peopleslist(void **start, FILE *f, int cnt_people){_file peoplw;i;(i=0;i<cnt_people;i++){name, surname, age;*lp=(people*)getcurrent(start, i);=lp->name;=lp->surname;=lp->age;(peoplw.name, name.toLatin1().data());(peoplw.surname, surname.toLatin1().data());(peoplw.age, age.toLatin1().data());(&peoplw, sizeof(peoplw), 1, f);

}1;

}loadlist(char *filename, void **&start){*f=fopen(filename, "rb");(f==NULL){0;

}countray;_file s_ray;*read;i;(&countray, sizeof(countray), 1, f);(countray==0){1;

}(i=0;i<countray;i++){(&s_ray, sizeof(s_ray), 1, f);=new Rayon;

((Rayon*)read)->name=s_ray.name;

((Rayon*)read)->number_zhek=s_ray.number_szhek;

((Rayon*)read)->square=s_ray.square;

((Rayon*)read)->sublev=initarray();posadd, loop;(start, s_ray.name, posadd, loop, cmpray);_order(start, read, posadd);cnt_street=s_ray.cnt_street;(cnt_street!=0){_street(((Rayon*)read)->sublev, f, cnt_street);

}(f);1;

}load_street(void **&start, FILE *f, int cnt_street){_file fstret;*val;i;(i=0;i<cnt_street;i++){(&fstret, sizeof(fstret), 1, f);=new street;

((street*)val)->name=fstret.name;

((street*)val)->year=fstret.year;

((street*)val)->sublev=initarray();posadd, lop;(start, fstret.name, posadd, lop, cmpstreet);_order(start, val, posadd);cnt_house=fstret.cnt_house;(cnt_house!=0){_house(((street*)val)->sublev, f, cnt_house);

}1;

}load_house(void **&start, FILE *f, int cnt_house){_file fhouse;*readp;i;(i=0;i<cnt_house;i++){(&fhouse, sizeof(fhouse), 1, f);=new house;

((house*)readp)->number=fhouse.number;

((house*)readp)->square=fhouse.square;

((house*)readp)->sublev=initarray();posadd, zaloop;(start, fhouse.number, posadd, zaloop, cmphouse);_order(start, readp, posadd);cntflat=fhouse.cnt_flat;(cntflat!=0){_flat(((house*)readp)->sublev, f, cntflat);

}1;

}load_flat(void **&start, FILE *F, int cnt_flat){_file flatf;*sread;i;(i=0;i<cnt_flat;i++){(&flatf, sizeof(flatf), 1, F);=new flat;

((flat*)sread)->number=flatf.number;

((flat*)sread)->cnt_room=flatf.cnt_room;

((flat*)sread)->sublev=initarray();posadd, lop;(start, flatf.number, posadd, lop, cmpflat);_order(start, sread, posadd);cntpeople=flatf.cnt_people;(cntpeople!=0){_peoplelist(((flat*)sread)->sublev, F, cntpeople);

}1;

}load_peoplelist(void **&start, FILE *f, int cnt_people){_file fpeop;*poin;i;(i=0;i<cnt_people;i++){(&fpeop, sizeof(fpeop), 1, f);=new people;

((people*)poin)->age=fpeop.age;

((people*)poin)->name=fpeop.name;

((people*)poin)->surname=fpeop.surname;posadd, lop;(start, fpeop.name, posadd, lop, cmppeople);_order(start, poin, posadd);

}1;

}add_rayon_tolist(void **&start, QString name, QString square, QString numberzhack){pos_ray, loop;*pnew=new Rayon;

((Rayon*)pnew)->name=name;

((Rayon*)pnew)->number_zhek=numberzhack;

((Rayon*)pnew)->square=square;

((Rayon*)pnew)->sublev=initarray();(start, name, pos_ray, loop, cmpray);_order(start, pnew, pos_ray);

}add_street_tolist(void **&start, QString nameray, QString namestr, QString year){pos_ray=0, pos_street=0, loop=0;(start, nameray, pos_ray, loop, cmpray);(loop==0){;

}*pnew=new street;

((street*)pnew)->name=namestr;

((street*)pnew)->year=year;

((street*)pnew)->sublev=initarray();(((Rayon*)(start[pos_ray]))->sublev, namestr, pos_street, loop, cmpstreet);_order(((Rayon*)start[pos_ray])->sublev, pnew, pos_street);

}add_house_tolist(void **&start, QString rayname, QString streetneme, QString number, QString square){posray, posstreet, poshouse, looppos;(start, rayname, posray, looppos, cmpray);(looppos==0){;

}(((Rayon*)start[posray])->sublev, streetneme, posstreet, looppos, cmpstreet);(looppos==0){;

}*pnew=new house;

((house*)pnew)->number=number;

((house*)pnew)->square=square;

((house*)pnew)->sublev=initarray();(((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev, number, poshouse, looppos, cmphouse);_order(((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev, pnew, poshouse);

}add_flat_tolist(void **&start, QString rayname, QString streetname, QString numberhouse, QString number, QString cnt_room){posray, posstreet, poshouse, posflat, loop;(start, rayname, posray, loop, cmpray);(loop==0){;

}(((Rayon*)start[posray])->sublev, streetname, posstreet, loop, cmpstreet);(loop==0){;

}(((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev, numberhouse, poshouse, loop, cmphouse);(loop==0){;

}*pnew=new flat;

((flat*)pnew)->number=number;

((flat*)pnew)->cnt_room=cnt_room;

((flat*)pnew)->sublev=initarray();(((house*)((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev[poshouse])->sublev, number, posflat, loop, cmpflat);_order(((house*)((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev[poshouse])->sublev, pnew, posflat);

}add_people_tolist(void **&start, QString rayname, QString streetname, QString numberhouse, QString numberflat, QString name, QString surname, QString age){posray, posstreet, poshouse, posflat, pospeople, turn;(start, rayname, posray, turn, cmpray);(turn==0){;

}(((Rayon*)start[posray])->sublev, streetname, posstreet, turn, cmpstreet);(turn==0){;

}(((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev, numberhouse, poshouse, turn, cmphouse);(turn==0){;

}(((house*)((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev[poshouse])->sublev, numberflat, posflat, turn, cmpflat);(turn==0){;

}*pnew=new people;

((people*)pnew)->name=name;

((people*)pnew)->surname=surname;

((people*)pnew)->age=age;(((flat*)((house*)((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev[poshouse])->sublev[posflat])->sublev, name, pospeople, turn, cmppeople);_order(((flat*)((house*)((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev[poshouse])->sublev[posflat])->sublev, pnew, pospeople);

}del_rayon(void **&start, QString rayname){delpos, turn;(start, rayname, delpos, turn, cmpray);(turn==0){;

}(start, delpos);

}del_street(void **&start, QString rayname, QString streetname){posray, posstreet, turn;(start, rayname, posray, turn, cmpray);(turn==0){;

}(((Rayon*)start[posray])->sublev, streetname, posstreet, turn, cmpstreet);(turn==0){;

}(((Rayon*)start[posray])->sublev, posstreet);

}del_house(void **&start, QString rayname, QString streetname, QString numberhouse){posray, posstreet, poshouse, turn;(start, rayname, posray, turn, cmpray);(turn==0){;

}(((Rayon*)start[posray])->sublev, streetname, posstreet, turn, cmpstreet);(turn==0){;

}(((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev, numberhouse, poshouse, turn, cmphouse);(turn==0){;

}(((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev, poshouse);

}del_flat(void **&start, QString rayname, QString streetname, QString numberhouse, QString numberflat){posray, posstreet, poshouse, posflat, turn;(start, rayname, posray, turn, cmpray);(turn==0){;

}(((Rayon*)start[posray])->sublev, streetname, posstreet, turn, cmpstreet);(turn==0){;

}(((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev, numberhouse, poshouse, turn, cmphouse);(turn==0){;

}(((house*)((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev[poshouse])->sublev, numberflat, posflat, turn, cmpflat);(turn==0){;

}(((house*)((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev[poshouse])->sublev, posflat);

}(((Rayon*)start[posray])->sublev, streename, posstreet, perekluchatel, cmpstreet);(perekluchatel==0){;

}(((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev, numberhouse, poshouse, perekluchatel, cmphouse);(perekluchatel==0){;

}(((house*)((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev[poshouse])->sublev, numberflat, posflat, perekluchatel, cmpflat);(perekluchatel==0){;

}(((flat*)((house*)((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev[poshouse])->sublev[posflat])->sublev, namepeople, pospeople, perekluchatel, cmppeople);(perekluchatel==0){;

}(((flat*)((house*)((street*)((Rayon*)start[posray])->sublev[posstreet])->sublev[poshouse])->sublev[posflat])->sublev, pospeople);

}

//**********************************************find_item_ray(void **start, QString ray_name){pos_trig, pos_ray;(start, ray_name, pos_ray, pos_trig, cmpray);(pos_trig==1){true;

}else{false;

}

void *findrayon(void **start, QString rayname){pos_trig, pos_ray;(start, rayname, pos_ray, pos_trig, cmpray);start[pos_ray];

}find_item_street(void **start, QString rayname, QString streetname){pos_trig, posray, posstr;(start, rayname, posray, pos_trig, cmpray);(pos_trig==0){false;

}(((Rayon*)start[posray])->sublev, streetname, posstr, pos_trig, cmpstreet);(pos_trig==0){false;

}else{true;

}*findstreeet(void **start, QString rayname, QString streetname){pos_trig, posray, posstr;(start, rayname, posray, pos_trig, cmpray);(((Rayon*)start[posray])->sublev, streetname, posstr, pos_trig, cmpstreet);((Rayon*)start[posray])->sublev[posstr];

}find_item_house(void **start, QString ray, QString streetname, QString housenumber){pos_trig, posray, posstr, poshouse;(start, ray, posray, pos_trig, cmpray);(pos_trig==0){false;

}(((Rayon*)start[posray])->sublev, streetname, posstr, pos_trig, cmpstreet);(pos_trig==0){false;

}(((street*)((Rayon*)start[posray])->sublev[posstr])->sublev, housenumber, poshouse, pos_trig, cmphouse);(pos_trig==0){false;

}else{true;

}*findhouse(void **start, QString rayname, QString streetname, QString housenum){pos_trig, posray, posstr, poshouse;(start, rayname, posray, pos_trig, cmpray);(((Rayon*)start[posray])->sublev, streetname, posstr, pos_trig, cmpstreet);(((street*)((Rayon*)start[posray])->sublev[posstr])->sublev, housenum, poshouse, pos_trig, cmphouse);((street*)((Rayon*)start[posray])->sublev[posstr])->sublev[poshouse];

}find_item_flat(void **start, QString rayname, QString streetname, QString housenumber, QString flatname){postrig, posray, posstr, poshouse, posflat;(start, rayname, posray, postrig, cmpray);(postrig==0){false;

}(((Rayon*)start[posray])->sublev, streetname, posstr, postrig, cmpstreet);(postrig==0){false;

}(((street*)((Rayon*)start[posray])->sublev[posstr])->sublev, housenumber, poshouse, postrig, cmphouse);(postrig==0){false;

}(((house*)((street*)((Rayon*)start[posray])->sublev[posstr])->sublev[poshouse])->sublev, flatname, posflat, postrig, cmpflat);(postrig==0){false;

}else{true;

}*findflat(void **start, QString rayname, QString streetname, QString housenum, QString flatnum){postrig, posray, posstr, poshouse, posflat;(start, rayname, posray, postrig, cmpray);(((Rayon*)start[posray])->sublev, streetname, posstr, postrig, cmpstreet);(((street*)((Rayon*)start[posray])->sublev[posstr])->sublev, housenum, poshouse, postrig, cmphouse);(((house*)((street*)((Rayon*)start[posray])->sublev[posstr])->sublev[poshouse])->sublev, flatnum, posflat, postrig, cmpflat);((house*)((street*)((Rayon*)start[posray])->sublev[posstr])->sublev[poshouse])->sublev[posflat];

}find_item_people(void **start, QString rayname, QString streetname, QString housenumber, QString flatnumber, QString peoplename){posray, posstr, poshouse, posflat, pospeople, postrig;(start, rayname, posray, postrig, cmpray);(postrig==0){false;

}(((Rayon*)start[posray])->sublev, streetname, posstr, postrig, cmpstreet);(postrig==0){false;

}(((street*)((Rayon*)start[posray])->sublev[posstr])->sublev, housenumber, poshouse, postrig, cmphouse);(postrig==0){false;

}(((house*)((street*)((Rayon*)start[posray])->sublev[posstr])->sublev[poshouse])->sublev, flatnumber, posflat, postrig, cmpflat);(postrig==0){false;

}(((flat*)((house*)((street*)((Rayon*)start[posray])->sublev[posstr])->sublev[poshouse])->sublev[posflat])->sublev, peoplename, pospeople, postrig, cmppeople);(postrig==0){false;

}else{true;

}*findpeople(void **start, QString rayname, QString streetname, QString housenum, QString flatnum, QString peoplename){posray, posstr, poshouse, posflat, pospeople, postrig;(start, rayname, posray, postrig, cmpray);(((Rayon*)start[posray])->sublev, streetname, posstr, postrig, cmpstreet);(((street*)((Rayon*)start[posray])->sublev[posstr])->sublev, housenum, poshouse, postrig, cmphouse);(((house*)((street*)((Rayon*)start[posray])->sublev[posstr])->sublev[poshouse])->sublev, flatnum, posflat, postrig, cmpflat);(((flat*)((house*)((street*)((Rayon*)start[posray])->sublev[posstr])->sublev[poshouse])->sublev[posflat])->sublev, peoplename, pospeople, postrig, cmppeople);((flat*)((house*)((street*)((Rayon*)start[posray])->sublev[posstr])->sublev[poshouse])->sublev[posflat])->sublev[pospeople];

}

ТЕКСТ ФАЙЛА MAINWINDOW.H

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include "QMessageBox"Ui {MainWindow;

}MainWindow : public QMainWindow

{_OBJECT:MainWindow(QWidget *parent = 0);

~MainWindow();slots:

void on_call_manu_add_rayon_button_clicked();on_lineEdit_data_1_textChanged(const QString &arg1);on_pushButton_addrayon_clicked();on_call_menu_add_street_button_clicked();on_lineEdit_rayname_textChanged(const QString &arg1);on_pushButton_next_1_clicked();on_pushButton_addstreet_clicked();on_call_menu_add_house_button_clicked();on_lineEdit_streetname_textChanged(const QString &arg1);on_lineEdit_housenum_textChanged(const QString &arg1);on_lineEdit_flatnum_textChanged(const QString &arg1);on_lineEdit_peoplename_textChanged(const QString &arg1);on_pushButton_next_2_clicked();on_pushButton_addhouse_clicked();on_call_menu_add_flat_button_clicked();on_pushButton_next_3_clicked();on_pushButton_addflat_clicked();on_call_menu_add_people_button_clicked();on_pushButton_next_4_clicked();on_pushButton_addpeople_clicked();on_checkBox_clearlist_clicked();on_checkBox_removeel_clicked();on_call_remove_menu_button_clicked();on_pushButton_delrayon_clicked();on_pushButton_delstreet_clicked();on_pushButton_delhouse_clicked();on_pushButton_delflat_clicked();on_pushButton_delpeople_clicked();

void on_pushButton_clicked();

void on_pushButton_2_clicked();on_pushButton_cancelfind_clicked();on_pushButton_findray_clicked();on_lineEdit_findray_textChanged(const QString &arg1);on_lineEdit_findstreet_textChanged(const QString &arg1);on_lineEdit_findhouse_textChanged(const QString &arg1);on_lineEdit_findflat_textChanged(const QString &arg1);on_lineEdit_findpeople_textChanged(const QString &arg1);

void on_okbuttonrep_clicked();

void on_pushButton_repray_clicked();on_zamena1_textChanged(const QString &arg1);on_ray_zam_clicked();on_pushButton_finstreet_clicked();on_pushButton_replacestreet_clicked();on_streetzam_clicked();on_cancelrepname_clicked();on_pushButton_findhouse_clicked();on_pushButton_replacehouse_clicked();

void on_housezam_clicked();

void on_pushButton_findflat_clicked();on_pushButton_replaceflat_clicked();

void on_flatzam_clicked();

void on_pushButton_findpeople_clicked();on_pushButton_replacepeople_clicked();on_peoplezam_clicked();on_pushButton_save_clicked();on_pushButton_load_clicked();:::MainWindow *ui;**start;p1, p2, p3, p4, p5, p6, p7, p8;

QMessageBox *val;shovtree();

};

ТЕКСТ ФАЙЛА MAINWINDOW.CPP

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "prototypefunc.h"

MainWindow::MainWindow(QWidget *parent) ://конструктор

QMainWindow(parent),

ui(new Ui::MainWindow){

ui->setupUi(this);

this->start=initarray();

val=new QMessageBox;

ui->global_add_and_remove_menu->hide();>global_input_data_menu->hide();>findBox->hide();>findBox->setTitle("окно поиска");>replace_box->setTitle("меню замены");>replace_box->hide();>resultfind->hide();>ray_zam->hide();>streetzam->hide();>housezam->hide();>flatzam->hide();>peoplezam->hide();>tableWidget->setColumnCount(2);>tableWidget->hide();>treeWidget->setHeaderLabel("spisok");

}::~MainWindow()//деструктор

{ui;

}MainWindow::on_call_manu_add_rayon_button_clicked(){//действие выполняемое по нажатию кнопки добавить район(готовит меню для его добавления)>global_add_and_remove_menu->setTitle("меню добавления");>global_add_and_remove_menu->show();>global_input_data_menu->setTitle("данные про район");>global_input_data_menu->show();>lineEdit_flatnum->hide();>lineEdit_housenum->hide();>lineEdit_peoplename->hide();>lineEdit_rayname->hide();>lineEdit_streetname->hide();>label_5->hide();>label_6->hide();>label_7->hide();>label_8->hide();>label_9->hide();>pushButton_delrayon->hide();>pushButton_delstreet->hide();>pushButton_delhouse->hide();>pushButton_delflat->hide();>pushButton_delpeople->hide();>pushButton_next_1->hide();>pushButton_next_2->hide();>pushButton_next_3->hide();>pushButton_next_4->hide();>pushButton_addstreet->hide();>pushButton_addhouse->hide();>pushButton_addflat->hide();>pushButton_addpeople->hide();>label_data_1->setText("название");>label_data_2->setText("площадь");>label_data_3->setText("номер жека");>label_data_1->show();>label_data_2->show();>label_data_3->show();>lineEdit_data_1->show();>lineEdit_data_2->show();>lineEdit_data_3->show();>call_manu_add_rayon_button->setEnabled(false);>call_menu_add_flat_button->setEnabled(false);>call_menu_add_house_button->setEnabled(false);>call_menu_add_people_button->setEnabled(false);>call_menu_add_street_button->setEnabled(false);>call_remove_menu_button->setEnabled(false);>pushButton_save->setEnabled(false);>pushButton_load->setEnabled(false);>checkBox_clearlist->setEnabled(false);>checkBox_removeel->setEnabled(false);>pushButton_addrayon->setEnabled(false);>pushButton_addrayon->show();>lineEdit_rayname->hide();

}MainWindow::on_lineEdit_data_1_textChanged(const QString &arg1){//для избегания добавления безымянного елемента(arg1==NULL){>pushButton_addrayon->setEnabled(false);>pushButton_addflat->setEnabled(false);>pushButton_addhouse->setEnabled(false);>pushButton_addpeople->setEnabled(false);>pushButton_addstreet->setEnabled(false);

}else{>pushButton_addrayon->setEnabled(true);>pushButton_addflat->setEnabled(true);>pushButton_addhouse->setEnabled(true);>pushButton_addpeople->setEnabled(true);>pushButton_addstreet->setEnabled(true);

}MainWindow::on_pushButton_addrayon_clicked()// кнопка добавляет район в мультисписок

{=ui->lineEdit_data_1->text();=ui->lineEdit_data_2->text();=ui->lineEdit_data_3->text();_rayon_tolist(start, p1, p2, p3);>lineEdit_data_1->clear();>lineEdit_data_2->clear();>lineEdit_data_3->clear();>lineEdit_flatnum->show();>lineEdit_housenum->show();>lineEdit_peoplename->show();>lineEdit_rayname->show();>lineEdit_streetname->show();>label_5->show();>label_6->show();>label_7->show();>label_8->show();>label_9->show();>pushButton_delrayon->show();>pushButton_delstreet->show();>pushButton_delhouse->show();>pushButton_delflat->show();>pushButton_delpeople->show();>pushButton_next_1->show();>pushButton_next_2->show();>pushButton_next_3->show();>pushButton_next_4->show();>pushButton_addstreet->show();>pushButton_addhouse->show();>pushButton_addflat->show();>pushButton_addpeople->show();>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_addrayon->setEnabled(true);>global_input_data_menu->hide();>global_add_and_remove_menu->hide();>treeWidget->clear();>shovtree();

}

void MainWindow::on_call_menu_add_street_button_clicked(){//кнопка вызова меню для добавления улицы(готовит прогу для приема данных)

ui->global_add_and_remove_menu->setTitle("меню добавления");>global_add_and_remove_menu->show();>global_input_data_menu->hide();

ui->label_5->setText(" название района");

ui->label_5->show();>lineEdit_rayname->show();>pushButton_next_1->setEnabled(false);>pushButton_next_1->show();>pushButton_next_2->hide();>pushButton_next_3->hide();>pushButton_next_4->hide();>lineEdit_rayname->show();>lineEdit_streetname->hide();>lineEdit_housenum->hide();>lineEdit_flatnum->hide();>lineEdit_peoplename->hide();>label_6->hide();>label_7->hide();>label_8->hide();>label_9->hide();>pushButton_delflat->hide();>pushButton_delhouse->hide();>pushButton_delpeople->hide();>pushButton_delrayon->hide();>pushButton_delstreet->hide();>call_manu_add_rayon_button->setEnabled(false);>call_menu_add_flat_button->setEnabled(false);>call_menu_add_house_button->setEnabled(false);>call_menu_add_people_button->setEnabled(false);>call_menu_add_street_button->setEnabled(false);>call_remove_menu_button->setEnabled(false);>checkBox_clearlist->setEnabled(false);>checkBox_removeel->setEnabled(false);>pushButton_save->setEnabled(false);>pushButton_load->setEnabled(false);>lineEdit_rayname->setEnabled(true);

}

void MainWindow::on_lineEdit_rayname_textChanged(const QString &arg1){//для избегания поиска безимянного района

if(arg1==NULL){>pushButton_next_1->setEnabled(false);>pushButton_delrayon->setEnabled(false);

}else{>pushButton_next_1->setEnabled(true);>pushButton_delrayon->setEnabled(true);

}

MainWindow::on_pushButton_next_1_clicked(){// кнопка которая передает управление на след команнду готовит меню для ввода данных про улицу

p1=ui->lineEdit_rayname->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{>lineEdit_rayname->setEnabled(false);>pushButton_next_1->setEnabled(false);>global_input_data_menu->show();>pushButton_addstreet->show();>pushButton_addhouse->hide();>pushButton_addflat->hide();>pushButton_addpeople->hide();>pushButton_addrayon->hide();>label_data_3->hide();>lineEdit_data_3->hide();>global_input_data_menu->setTitle("данные про улицу");>label_data_1->setText("название");>label_data_2->setText("возраст");

}

void MainWindow::on_pushButton_addstreet_clicked(){//кнопка добавляет улицу в мультисписок

p2=ui->lineEdit_data_1->text();=ui->lineEdit_data_2->text();_street_tolist(this->start, this->p1, this->p2, this->p3);>global_add_and_remove_menu->hide();>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>lineEdit_rayname->clear();>lineEdit_data_1->clear();>lineEdit_data_2->clear();>treeWidget->clear();>shovtree();

}MainWindow::on_call_menu_add_house_button_clicked(){//кнопка вызова меню добавления дома в мультисписок

ui->call_manu_add_rayon_button->setEnabled(false);>call_menu_add_flat_button->setEnabled(false);>call_menu_add_house_button->setEnabled(false);>call_menu_add_people_button->setEnabled(false);>call_menu_add_street_button->setEnabled(false);>call_remove_menu_button->setEnabled(false);>checkBox_clearlist->setEnabled(false);>checkBox_removeel->setEnabled(false);>pushButton_save->setEnabled(false);>pushButton_load->setEnabled(false);>global_add_and_remove_menu->setTitle("меню добавления");>global_add_and_remove_menu->show();>lineEdit_flatnum->hide();>lineEdit_housenum->hide();>lineEdit_peoplename->hide();>pushButton_next_1->hide();>pushButton_next_3->hide();>pushButton_next_4->hide();>label_7->hide();>label_8->hide();>label_9->hide();>pushButton_delflat->hide();>pushButton_delhouse->hide();>pushButton_delpeople->hide();>pushButton_delrayon->hide();>pushButton_delstreet->hide();>label_5->setText("район");>label_6->setText("улица");>label_5->show();>label_6->show();>lineEdit_rayname->setEnabled(true);>lineEdit_streetname->setEnabled(true);>lineEdit_streetname->show();>pushButton_next_2->show();>pushButton_next_2->setEnabled(false);>global_input_data_menu->hide();

}

void MainWindow::on_lineEdit_streetname_textChanged(const QString &arg1)//для избегания ввода безимянной улицы

{(arg1==NULL){>pushButton_next_2->setEnabled(false);>pushButton_delstreet->setEnabled(false);

}else{>pushButton_delstreet->setEnabled(true);>pushButton_next_2->setEnabled(true);

}

}

void MainWindow::on_lineEdit_housenum_textChanged(const QString &arg1)//для избегания ввода безимянного дома

if(arg1==NULL){>pushButton_next_3->setEnabled(false);>pushButton_delhouse->setEnabled(false);

}else{>pushButton_next_3->setEnabled(true);>pushButton_delhouse->setEnabled(true);

void MainWindow::on_lineEdit_flatnum_textChanged(const QString &arg1)//для избегания ввода безимянного дома

if(arg1==NULL){>pushButton_next_4->setEnabled(false);>pushButton_delflat->setEnabled(false);>pushButton_next_4->setEnabled(true);>pushButton_delflat->setEnabled(true);

void MainWindow::on_lineEdit_peoplename_textChanged(const QString &arg1)//для избегания ввода безимянного человека

if(arg1==NULL){>pushButton_delpeople->setEnabled(false);

}else{>pushButton_delpeople->setEnabled(true);

void MainWindow::on_pushButton_next_2_clicked()//кнопка далее для добавления дома

p1=ui->lineEdit_rayname->text();=ui->lineEdit_streetname->text();(!find_item_ray(start, p1)){

val->setText(" ошыбка, нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{>pushButton_next_2->setEnabled(false);>lineEdit_rayname->setEnabled(false);>lineEdit_streetname->setEnabled(false);>global_input_data_menu->setTitle("данные про дом");>global_input_data_menu->show();>pushButton_addstreet->hide();>pushButton_addhouse->show();>label_data_1->setText(" номер ");>label_data_2->setText(" площадь");

}

void MainWindow::on_pushButton_addhouse_clicked(){//добавляет дом в мультисписок

p3=ui->lineEdit_data_1->text();=ui->lineEdit_data_2->text();_house_tolist(start, p1, p2, p3, p4);>global_add_and_remove_menu->hide();>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>lineEdit_rayname->clear();>lineEdit_data_1->clear();>lineEdit_data_2->clear();>lineEdit_streetname->clear();>treeWidget->clear();>shovtree();

}

void MainWindow::on_call_menu_add_flat_button_clicked(){//кнопка вызова меню добавления квартиры в мультисписок

ui->call_manu_add_rayon_button->setEnabled(false);>call_menu_add_flat_button->setEnabled(false);>call_menu_add_house_button->setEnabled(false);>call_menu_add_people_button->setEnabled(false);>call_menu_add_street_button->setEnabled(false);>call_remove_menu_button->setEnabled(false);>checkBox_clearlist->setEnabled(false);>checkBox_removeel->setEnabled(false);>pushButton_save->setEnabled(false);>pushButton_load->setEnabled(false);>global_add_and_remove_menu->setTitle("меню добавления");>global_add_and_remove_menu->show();>lineEdit_rayname->setEnabled(true);>lineEdit_rayname->show();>lineEdit_streetname->setEnabled(true);>lineEdit_streetname->show();>lineEdit_housenum->setEnabled(true);>lineEdit_housenum->show();>lineEdit_flatnum->hide();>lineEdit_peoplename->hide();>pushButton_next_1->hide();>pushButton_next_2->hide();>pushButton_next_3->show();>pushButton_next_4->hide();>pushButton_next_3->setEnabled(false);>pushButton_delflat->hide();>pushButton_delhouse->hide();>pushButton_delpeople->hide();>pushButton_delrayon->hide();>pushButton_delstreet->hide();>label_8->hide();>label_9->hide();>label_5->setText("район");>label_6->setText("улица");>label_7->setText("номер дома");>label_5->show();>label_6->show();>label_7->show();>global_input_data_menu->hide();>pushButton_addhouse->hide();

}=ui->lineEdit_rayname->text();=ui->lineEdit_streetname->text();=ui->lineEdit_housenum->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();(!find_item_street(start, p1, p2)){

val->setText("ннет такой улицы");

val->show();(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();>global_input_data_menu->setTitle("данные про квартиру");>global_input_data_menu->show();>pushButton_addflat->show();>label_data_1->setText("номер");

ui->label_data_2->setText("количество комнат");

ui->label_data_1->show();>label_data_2->show();>lineEdit_rayname->hide();>lineEdit_streetname->hide();>lineEdit_housenum->hide();>pushButton_next_3->hide();>label_5->hide();>label_6->hide();>label_7->hide();

}

void MainWindow::on_pushButton_addflat_clicked(){//кнопка которая добавляет квартиру в мультисписок

p4=ui->lineEdit_data_1->text();=ui->lineEdit_data_2->text();_flat_tolist(start, p1, p2, p3, p4, p5);>global_add_and_remove_menu->hide();>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>lineEdit_rayname->clear();>lineEdit_data_1->clear();>lineEdit_data_2->clear();>lineEdit_streetname->clear();>lineEdit_housenum->clear();>treeWidget->clear();>shovtree();

}

void MainWindow::on_call_menu_add_people_button_clicked(){//кгопка которая вызывает меню добавления человека

ui->call_manu_add_rayon_button->setEnabled(false);>call_menu_add_flat_button->setEnabled(false);>call_menu_add_house_button->setEnabled(false);>call_menu_add_people_button->setEnabled(false);>call_menu_add_street_button->setEnabled(false);>call_remove_menu_button->setEnabled(false);>checkBox_clearlist->setEnabled(false);>checkBox_removeel->setEnabled(false);>pushButton_save->setEnabled(false);>pushButton_load->setEnabled(false);>global_add_and_remove_menu->setTitle("меню добавления");>global_add_and_remove_menu->show();>lineEdit_peoplename->hide();>label_9->hide();>pushButton_delflat->hide();>pushButton_delhouse->hide();>pushButton_delpeople->hide();>pushButton_delrayon->hide();>pushButton_delstreet->hide();>pushButton_next_1->hide();>pushButton_next_2->hide();>pushButton_next_3->hide();>lineEdit_rayname->show();>lineEdit_rayname->setEnabled(true);>lineEdit_streetname->show();>lineEdit_streetname->setEnabled(true);>lineEdit_housenum->show();>lineEdit_housenum->setEnabled(true);>lineEdit_flatnum->show();>lineEdit_flatnum->setEnabled(true);>label_5->setText("район");>label_5->show();>label_6->setText("улица");>label_6->show();>label_7->setText("дом №");>label_7->show();>label_8->setText("квртира №");>label_8->show();>pushButton_next_4->setEnabled(false);>pushButton_next_4->show();>global_input_data_menu->hide();

}

void MainWindow::on_pushButton_next_4_clicked(){//кнопка далее для добавления человека

p1=ui->lineEdit_rayname->text();=ui->lineEdit_streetname->text();=ui->lineEdit_housenum->text();=ui->lineEdit_flatnum->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();

}else{(!find_item_flat(start, p1, p2, p3, p4)){

val->setText("нет такой квартиры");

val->show();>global_input_data_menu->setTitle("данные про человека");>global_input_data_menu->show();>lineEdit_rayname->hide();>lineEdit_streetname->hide();>lineEdit_housenum->hide();>lineEdit_flatnum->hide();>lineEdit_peoplename->hide();>label_5->hide();>label_6->hide();>label_7->hide();>label_8->hide();>label_9->hide();>pushButton_next_4->hide();>pushButton_addpeople->show();>pushButton_addflat->hide();>label_data_1->setText("имя");>label_data_2->setText("фамилия");>label_data_3->setText("возраст");>label_data_1->show();>label_data_2->show();>label_data_3->show();>lineEdit_data_1->show();>lineEdit_data_2->show();>lineEdit_data_3->show();

}

void MainWindow::on_pushButton_addpeople_clicked(){//кнопка по нажатию на которую человек попадает в мультисписок

p5=ui->lineEdit_data_1->text();=ui->lineEdit_data_2->text();=ui->lineEdit_data_3->text();_people_tolist(start, p1, p2, p3, p4, p5, p6, p7);>global_add_and_remove_menu->hide();>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>lineEdit_rayname->clear();>lineEdit_data_1->clear();>lineEdit_data_2->clear();>lineEdit_data_3->clear();>lineEdit_streetname->clear();>lineEdit_housenum->clear();>lineEdit_flatnum->clear();>treeWidget->clear();>shovtree();

}MainWindow::shovtree(){>treeWidget->clear();<QTreeWidgetItem*> lev1;<QTreeWidgetItem*> lev2;<QTreeWidgetItem*> lev3;<QTreeWidgetItem*> lev4;<QTreeWidgetItem*> lev5;cntl1, cntl2, cntl3, cntl4, cntl5;*itemL1, *itemL2, *itemL3, *itemL4, *itemL5, *top;=new QTreeWidgetItem(QStringList(QString("город")));>setIcon(0, QIcon("E:/картинки и фотки/FVdMRkLsj6A.jpg"));=((int*)start)[POS_CNT];(int i=0;i<cntl1;i++){=new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString(((Rayon*)start[i])->name)));=((int*)(((Rayon*)start[i])->sublev))[POS_CNT];(int k=0;k<cntl2;k++){=new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString(((street*)((Rayon*)start[i])->sublev[k])->name)));=((int*)(((street*)((Rayon*)start[i])->sublev[k])->sublev))[POS_CNT];(int j=0;j<cntl3;j++){=new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString(((house*)((street*)((Rayon*)start[i])->sublev[k])->sublev[j])->number)));=((int*)(((house*)((street*)((Rayon*)start[i])->sublev[k])->sublev[j])->sublev))[POS_CNT];(int v=0;v<cntl4;v++){=new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString(((flat*)((house*)((street*)((Rayon*)start[i])->sublev[k])->sublev[j])->sublev[v])->number)));=((int*)(((flat*)((house*)((street*)((Rayon*)start[i])->sublev[k])->sublev[j])->sublev[v])->sublev))[POS_CNT];(int u=0;u<cntl5;u++){=new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString(((people*)(((flat*)((house*)((street*)((Rayon*)start[i])->sublev[k])->sublev[j])->sublev[v])->sublev[u]))->name)));.append(itemL5);

}->addChildren(lev5);.append(itemL4);

}->addChildren(lev4);.append(itemL3);

}->addChildren(lev3);.append(itemL2);

}->addChildren(lev2);.append(itemL1);

}>addChildren(lev1);>treeWidget->addTopLevelItem(top);>treeWidget->expandAll();

}MainWindow::on_checkBox_clearlist_clicked(){(ui->checkBox_clearlist->isChecked()){>checkBox_removeel->setEnabled(false);

}else{>checkBox_removeel->setEnabled(true);

}MainWindow::on_checkBox_removeel_clicked(){(ui->checkBox_removeel->isChecked()){>checkBox_clearlist->setEnabled(false);

}else{>checkBox_clearlist->setEnabled(true);

}MainWindow::on_call_remove_menu_button_clicked(){(ui->checkBox_clearlist->isChecked()||ui->checkBox_removeel->isChecked()){(ui->checkBox_clearlist->isChecked()){(start);>treeWidget->clear();>shovtree();

}else{>call_manu_add_rayon_button->setEnabled(false);>call_menu_add_flat_button->setEnabled(false);>call_menu_add_house_button->setEnabled(false);>call_menu_add_people_button->setEnabled(false);>call_menu_add_street_button->setEnabled(false);>call_remove_menu_button->setEnabled(false);>checkBox_clearlist->setEnabled(false);>checkBox_removeel->setEnabled(false);>pushButton_save->setEnabled(false);>pushButton_load->setEnabled(false);>global_add_and_remove_menu->setTitle("меню удаления");>global_add_and_remove_menu->show();>global_input_data_menu->hide();>lineEdit_rayname->show();>lineEdit_flatnum->show();>lineEdit_housenum->show();>lineEdit_peoplename->show();>lineEdit_streetname->show();>label_5->setText("район");>label_6->setText("улица");>label_7->setText("дом");>label_8->setText("квартира");>label_9->setText("человек");>label_5->show();>label_6->show();>label_7->show();>label_8->show();>label_9->show();>pushButton_next_1->hide();>pushButton_next_2->hide();>pushButton_next_3->hide();>pushButton_next_4->hide();>pushButton_delflat->setEnabled(false);>pushButton_delhouse->setEnabled(false);>pushButton_delpeople->setEnabled(false);>pushButton_delrayon->setEnabled(false);>pushButton_delstreet->setEnabled(false);>pushButton_delflat->show();>pushButton_delhouse->show();>pushButton_delpeople->show();>pushButton_delrayon->show();>pushButton_delstreet->show();

}MainWindow::on_pushButton_delrayon_clicked(){=ui->lineEdit_rayname->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{_rayon(start, p1);>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>global_add_and_remove_menu->hide();>treeWidget->clear();>shovtree();>lineEdit_rayname->clear();>lineEdit_streetname->clear();>lineEdit_housenum->clear();>lineEdit_flatnum->clear();>lineEdit_peoplename->clear();>shovtree();

}MainWindow::on_pushButton_delstreet_clicked(){=ui->lineEdit_rayname->text();=ui->lineEdit_streetname->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{_street(start, p1, p2);>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>global_add_and_remove_menu->hide();>treeWidget->clear();>shovtree();>lineEdit_rayname->clear();>lineEdit_streetname->clear();>lineEdit_housenum->clear();>lineEdit_flatnum->clear();>lineEdit_peoplename->clear();>shovtree();

}MainWindow::on_pushButton_delhouse_clicked(){=ui->lineEdit_rayname->text();=ui->lineEdit_streetname->text();=ui->lineEdit_housenum->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();

}else{_house(start, p1, p2, p3);>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>global_add_and_remove_menu->hide();>treeWidget->clear();>shovtree();>lineEdit_rayname->clear();>lineEdit_streetname->clear();>lineEdit_housenum->clear();>lineEdit_flatnum->clear();>lineEdit_peoplename->clear();>shovtree();

}MainWindow::on_pushButton_delflat_clicked(){=ui->lineEdit_rayname->text();=ui->lineEdit_streetname->text();=ui->lineEdit_housenum->text();=ui->lineEdit_flatnum->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();

}else{(!find_item_flat(start, p1, p2, p3, p4)){

val->setText("нет такой квартиры");

val->show();

}else{_flat(start, p1, p2, p3, p4);>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>global_add_and_remove_menu->hide();>treeWidget->clear();>shovtree();>lineEdit_rayname->clear();>lineEdit_streetname->clear();>lineEdit_housenum->clear();>lineEdit_flatnum->clear();>lineEdit_peoplename->clear();>shovtree();

}MainWindow::on_pushButton_delpeople_clicked(){=ui->lineEdit_rayname->text();=ui->lineEdit_streetname->text();=ui->lineEdit_housenum->text();=ui->lineEdit_flatnum->text();=ui->lineEdit_peoplename->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();

}else{(!find_item_flat(start, p1, p2, p3, p4)){

val->setText("нет такой квартиры");

val->show();

}else{(!find_item_people(start, p1, p2, p3, p4, p5)){

val->setText("нет такого человека");

val->show();

}else{_people(start, p1, p2, p3, p4, p5);>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>global_add_and_remove_menu->hide();>treeWidget->clear();>shovtree();>lineEdit_rayname->clear();>lineEdit_streetname->clear();>lineEdit_housenum->clear();>lineEdit_flatnum->clear();>lineEdit_peoplename->clear();>shovtree();

}MainWindow::on_pushButton_clicked(){>global_input_data_menu->hide();>global_add_and_remove_menu->hide();>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>lineEdit_rayname->clear();>lineEdit_streetname->clear();>lineEdit_housenum->clear();>lineEdit_flatnum->clear();>lineEdit_peoplename->clear();

}MainWindow::on_pushButton_2_clicked(){>label_fndflat->setText("кaвртира");>label_fndhouse->setText("дом");>label_fndpeople->setText("человек");>label_fndray->setText("район");>label_fndstreet->setText("улица");>findBox->show();>call_manu_add_rayon_button->setEnabled(false);>call_menu_add_flat_button->setEnabled(false);>call_menu_add_house_button->setEnabled(false);>call_menu_add_people_button->setEnabled(false);>call_menu_add_street_button->setEnabled(false);>call_remove_menu_button->setEnabled(false);>checkBox_clearlist->setEnabled(false);>checkBox_removeel->setEnabled(false);>pushButton_save->setEnabled(false);>pushButton_load->setEnabled(false);>pushButton_2->setEnabled(false);>pushButton_findflat->setEnabled(false);>pushButton_findhouse->setEnabled(false);>pushButton_findpeople->setEnabled(false);>pushButton_findray->setEnabled(false);>pushButton_finstreet->setEnabled(false);>pushButton_replaceflat->setEnabled(false);>pushButton_replacehouse->setEnabled(false);>pushButton_replacepeople->setEnabled(false);>pushButton_replacestreet->setEnabled(false);>pushButton_repray->setEnabled(false);>lineEdit_findray->clear();>lineEdit_findstreet->clear();>lineEdit_findhouse->clear();>lineEdit_findflat->clear();>lineEdit_findpeople->clear();>zamena1->clear();>zamena2->clear();>zamena3->clear();

}MainWindow::on_pushButton_cancelfind_clicked()

{>pushButton_2->setEnabled(true);>findBox->hide();>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);

}MainWindow::on_pushButton_findray_clicked(){=ui->lineEdit_findray->text();(!find_item_ray(start, p1)){

val->setText("район не найден");

val->show();

}else{*wp=(Rayon*)findrayon(start, p1);>labelrezdat1->setText("название");>labelrezdat2->setText("площадь");>labelrezdat3->setText("номер жека");>labelresult1->setText(wp->name);>labelresult2->setText(wp->square);>labelresult3->setText(wp->number_zhek);>labelrezdat1->show();>labelrezdat2->show();>labelrezdat3->show();>labelresult1->show();>labelresult2->show();>labelresult3->show();>resultfind->show();>findBox->hide();

}MainWindow::on_lineEdit_findray_textChanged(const QString &arg1){(arg1==NULL){>pushButton_repray->setEnabled(false);>pushButton_findray->setEnabled(false);

}else{>pushButton_repray->setEnabled(true);>pushButton_findray->setEnabled(true);

}MainWindow::on_lineEdit_findstreet_textChanged(const QString &arg1)

{(arg1==NULL){>pushButton_finstreet->setEnabled(false);>pushButton_replacestreet->setEnabled(false);

}else{>pushButton_finstreet->setEnabled(true);>pushButton_replacestreet->setEnabled(true);

}MainWindow::on_lineEdit_findhouse_textChanged(const QString &arg1)

{(arg1==NULL){>pushButton_findhouse->setEnabled(false);>pushButton_replacehouse->setEnabled(false);

}else{>pushButton_findhouse->setEnabled(true);>pushButton_replacehouse->setEnabled(true);

}MainWindow::on_lineEdit_findflat_textChanged(const QString &arg1)

{(arg1==NULL){>pushButton_findflat->setEnabled(false);>pushButton_replaceflat->setEnabled(false);

}else{>pushButton_findflat->setEnabled(true);>pushButton_replaceflat->setEnabled(true);

}MainWindow::on_lineEdit_findpeople_textChanged(const QString &arg1){(arg1==NULL){>pushButton_findpeople->setEnabled(false);>pushButton_replacepeople->setEnabled(false);

}else{>pushButton_findpeople->setEnabled(true);>pushButton_replacepeople->setEnabled(true);

}MainWindow::on_okbuttonrep_clicked()

{>resultfind->hide();>pushButton_2->setEnabled(true);>findBox->hide();>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);

}MainWindow::on_pushButton_repray_clicked(){=ui->lineEdit_findray->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{>replace_box->show();>label_rep1->setText("название");>label_rep2->setText("площадь");>label_rep3->setText("номер жека");>label_rep1->show();>label_rep2->show();>label_rep3->show();>zamena1->show();>zamena2->show();>zamena3->show();>findBox->hide();>ray_zam->show();>ray_zam->setEnabled(false);

}MainWindow::on_zamena1_textChanged(const QString &arg1)

{(arg1==NULL){>ray_zam->setEnabled(false);>streetzam->setEnabled(false);>housezam->setEnabled(false);>flatzam->setEnabled(false);>peoplezam->setEnabled(false);

}else{>ray_zam->setEnabled(true);>streetzam->setEnabled(true);>housezam->setEnabled(true);>flatzam->setEnabled(true);>peoplezam->setEnabled(true);

}MainWindow::on_ray_zam_clicked(){_rayon(start, p1);=ui->zamena1->text();=ui->zamena2->text();=ui->zamena3->text();_rayon_tolist(start, p2, p3, p4);>replace_box->hide();>findBox->hide();>resultfind->hide();>pushButton_2->setEnabled(true);>findBox->hide();>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>ray_zam->hide();>shovtree();

}MainWindow::on_pushButton_finstreet_clicked(){=ui->lineEdit_findray->text();=ui->lineEdit_findstreet->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{*wp=(street*)findstreeet(start, p1, p2);>labelrezdat1->setText("название");>labelrezdat1->show();>labelrezdat2->setText("возраст");>labelresult2->show();>labelrezdat3->hide();>labelresult1->setText(wp->name);>labelresult1->show();>labelresult2->setText(wp->year);>labelresult2->show();>labelresult3->hide();>resultfind->show();>findBox->hide();

}MainWindow::on_pushButton_replacestreet_clicked(){=ui->lineEdit_findray->text();=ui->lineEdit_findstreet->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{>replace_box->show();>label_rep1->setText("название");>label_rep2->setText("возраст");>label_rep1->show();>label_rep2->show();>label_rep3->hide();>zamena1->show();>zamena2->show();>zamena3->hide();>findBox->hide();>streetzam->show();>streetzam->setEnabled(false);

}MainWindow::on_streetzam_clicked(){_street(start, p1, p2);=ui->zamena1->text();=ui->zamena2->text();_street_tolist(start, p1, p3, p4);>replace_box->hide();>findBox->hide();>resultfind->hide();>pushButton_2->setEnabled(true);>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>streetzam->hide();>shovtree();

}MainWindow::on_cancelrepname_clicked(){>replace_box->hide();>findBox->hide();>resultfind->hide();>pushButton_2->setEnabled(true);>findBox->hide();>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);

}MainWindow::on_pushButton_findhouse_clicked(){=ui->lineEdit_findray->text();=ui->lineEdit_findstreet->text();=ui->lineEdit_findhouse->text();(!find_item_ray(start, p1)){

val->setText(" нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();

}else{*wp=(house*)findhouse(start, p1, p2, p3);>labelrezdat1->setText("номер");>labelrezdat1->show();>labelrezdat2->setText("площадь");>labelresult2->show();>labelrezdat3->hide();>labelresult1->setText(wp->number);>labelresult1->show();>labelresult2->setText(wp->square);>labelresult2->show();>labelresult3->hide();>resultfind->show();>findBox->hide();

}MainWindow::on_pushButton_replacehouse_clicked(){=ui->lineEdit_findray->text();=ui->lineEdit_findstreet->text();=ui->lineEdit_findhouse->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();

}else{>replace_box->show();>label_rep1->setText("номер");>label_rep2->setText("площадь");>label_rep1->show();>label_rep2->show();>label_rep3->hide();>zamena1->show();>zamena2->show();>zamena3->hide();>findBox->hide();>housezam->setEnabled(false);>housezam->show();

}MainWindow::on_housezam_clicked(){_house(start, p1, p2, p3);=ui->zamena1->text();=ui->zamena2->text();_house_tolist(start, p1, p2, p4, p5);>replace_box->hide();>findBox->hide();>resultfind->hide();>pushButton_2->setEnabled(true);>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>housezam->hide();>shovtree();

}MainWindow::on_pushButton_findflat_clicked(){=ui->lineEdit_findray->text();=ui->lineEdit_findstreet->text();=ui->lineEdit_findhouse->text();=ui->lineEdit_findflat->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();

}else{(!find_item_flat(start, p1, p2, p3, p4)){

val->setText("нет такой квартиры");

val->show();

}else{*wp=(flat*)findflat(start, p1, p2, p3, p4);>labelrezdat1->setText("номер");>labelrezdat1->show();

ui->labelrezdat2->setText("количество комнат");

ui->labelresult2->show();>labelrezdat3->hide();>labelresult1->setText(wp->number);>labelresult1->show();>labelresult2->setText(wp->cnt_room);>labelresult2->show();>labelresult3->hide();>resultfind->show();>findBox->hide();

}MainWindow::on_pushButton_replaceflat_clicked(){=ui->lineEdit_findray->text();=ui->lineEdit_findstreet->text();=ui->lineEdit_findhouse->text();=ui->lineEdit_findflat->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();

}else{(!find_item_flat(start, p1, p2, p3, p4)){

val->setText("нет такой квартиры");

val->show();

}else{>replace_box->show();>label_rep1->setText("номер");

ui->label_rep2->setText("количество комнат");

ui->label_rep1->show();>label_rep2->show();>label_rep3->hide();>zamena1->show();>zamena2->show();>zamena3->hide();>findBox->hide();>flatzam->setEnabled(false);>flatzam->show();

}MainWindow::on_flatzam_clicked(){_flat(start, p1, p2, p3, p4);=ui->zamena1->text();=ui->zamena2->text();_flat_tolist(start, p1, p2, p3, p5, p6);>replace_box->hide();>findBox->hide();>resultfind->hide();>pushButton_2->setEnabled(true);>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>flatzam->hide();>shovtree();

}MainWindow::on_pushButton_findpeople_clicked(){=ui->lineEdit_findray->text();=ui->lineEdit_findstreet->text();=ui->lineEdit_findhouse->text();=ui->lineEdit_findflat->text();=ui->lineEdit_findpeople->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();

}else{(!find_item_flat(start, p1, p2, p3, p4)){

val->setText("нет такой квартиры");

val->show();

}else{(!find_item_people(start, p1, p2, p3, p4, p5)){

val->setText("нет такого человека");

val->show();

}else{*wp=(people*)findpeople(start, p1, p2, p3, p4, p5);>labelrezdat1->setText("имя");>labelrezdat1->show();>labelrezdat2->setText("фамилия");>labelresult2->show();>labelrezdat3->setText("возраст");>labelrezdat3->show();>labelresult1->setText(wp->name);>labelresult1->show();>labelresult2->setText(wp->surname);>labelresult2->show();>labelresult3->setText(wp->age);>labelresult3->show();>resultfind->show();>findBox->hide();

}MainWindow::on_pushButton_replacepeople_clicked(){=ui->lineEdit_findray->text();=ui->lineEdit_findstreet->text();=ui->lineEdit_findhouse->text();=ui->lineEdit_findflat->text();=ui->lineEdit_findpeople->text();(!find_item_ray(start, p1)){

val->setText("нет такого района");

val->show();

}else{(!find_item_street(start, p1, p2)){

val->setText("нет такой улицы");

val->show();

}else{(!find_item_house(start, p1, p2, p3)){

val->setText("нет такого дома");

val->show();

}else{(!find_item_flat(start, p1, p2, p3, p4)){

val->setText("нет такой квартиры");

val->show();

}else{(!find_item_people(start, p1, p2, p3, p4, p5)){

val->setText("нет такого человека");

val->show();

}else{>replace_box->show();>label_rep1->setText("имя");>label_rep2->setText("фамилия");>label_rep3->setText("возраст");>label_rep1->show();>label_rep2->show();>label_rep3->show();>zamena1->show();>zamena2->show();>zamena3->show();>findBox->hide();>peoplezam->setEnabled(false);>peoplezam->show();

}MainWindow::on_peoplezam_clicked(){_people(start, p1, p2, p3, p4, p5);=ui->zamena1->text();=ui->zamena2->text();=ui->zamena3->text();_people_tolist(start, p1, p2, p3, p4, p6, p7, p8);>replace_box->hide();>findBox->hide();>resultfind->hide();>pushButton_2->setEnabled(true);>call_manu_add_rayon_button->setEnabled(true);>call_menu_add_flat_button->setEnabled(true);>call_menu_add_house_button->setEnabled(true);>call_menu_add_people_button->setEnabled(true);>call_menu_add_street_button->setEnabled(true);>call_remove_menu_button->setEnabled(true);>checkBox_clearlist->setEnabled(true);>checkBox_removeel->setEnabled(true);>pushButton_save->setEnabled(true);>pushButton_load->setEnabled(true);>peoplezam->hide();>shovtree();

}MainWindow::on_pushButton_save_clicked(){("E:/mylist.dat", start);

}MainWindow::on_pushButton_load_clicked(){(this->start);("E:/mylist.dat", this->start);

this->shovtree();

}

файл алгоритм мультисписковый

Приложение Б

ИНФОРМАЦИОННО-СПРАВОЧНАЯ СИСТЕМА «УПРАВЛЕНИЕ ГОРОДОМ»

. ВИЗУАЛИЗАЦИЯ СОДЕРЖИМОГО МУЛЬТИСПИСКА

При открытии автоматически создается пустой список в динамической памяти. Вид окна программы после запуска показан на рисунке Б.1.

Рисунок Б.1 - Интерфейс программы

После загрузки списка из файла, в правой части окна можно увидеть древовидную структуру всех уровней списка. В нижней части выводится главная таблица со списком улиц города и номерами обслуживающих ЖЭКов. Скриншот окна показан на рисунке Б.2.

Рисунок Б.2 - Окно программы после загрузки файла

Похожие работы на - Информационно-справочная система 'Управление городом'

 

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