
- •Содержание
- •Введение Динамические структуры данных
- •Абстрактный тип данных «список»
- •Аналитический обзор литературы и существующих аналогов
- •1.1 Аналитический обзор литературы
- •1.1.1 Статические массивы.
- •1.1.2 Динамические связанные списки.
- •1.1.3 Базы данных.
- •1.1.4 Вывод.
- •Рассмотрим подробнее абстрактный тип данных «список».
- •1.2 Обзор существующих аналогов
- •2. Разработка алгоритма
- •3. Разработка программного средства
- •4. Технические приемы программирования
- •5. Тестирование, экспериментальные исследования и анализ полученных данных
- •6. Руководство пользователя
- •6.1 Добавить заявку
- •6.2 Изменить заявку
- •6.3 Удалить заявку
- •6.4 Поиск диска
- •6.5 Сортировка заявок
- •6.6 Статистика
- •Список используемой литературы
- •Листинг программы
3. Разработка программного средства
Для разработки программного средства использовалась среда программирования Delphi - Embarcadero RAD studio XE2, предоставляющая возможность визуального создания программ.
Все возможные операции со всеми списками были разделены на группы по смыслу. В программе для удобства каждая группа операций находится на своей панели, что облегчает поиск необходимой операции. Поэтому были созданы панели операций над заявками, сортировки заявок, поиска заявок а также панель статистики поступлений заявок. В главном окне программы находится главный список - список заявок, отображаемый в таблице. Для произведения операций с другими списками используются кнопки для переключения на другие окна, в которых находятся информация и операции по другим спискам. Было создано главное меню, с помощью которого можно обновить список заявок, что используется после поиска заявки, показать список адресов жильцов, сменить логин и пароль пользователя а также выйти из программы.
4. Технические приемы программирования
1) При разработке интерфейса программы были использованы следующие компоненты Delphi:
TLabel для установки поясняющих текстовых меток;
TEdit для ввода данных;
TCombobox для выбора неисправности при регистрации а также при выборе интервала времени на графике;
TButton для выполнения определённого действия по нажатию кнопки;
TRadioGroup для выбора типа сортировки;
TStringGrid для отображения списков;
TPanel для удобства размещения операций;
TChart для отображения графика.
2) В программе используется три динамических списка, используемых для хранения данных.
3) Для хранения указателей на начало списков используются глобальные переменные, т.к. доступ к спискам должен быть обеспечен в любой точке программы.
4) В программе предусмотрен ряд естественных ограничений (добавление существующей заявки, изменение заявки на существующую, ввод при регистрации заявки адреса, не обслуживаемого данной ЖЭС), реализованных с помощью предварительной проверки состояния списка при клике на соответствующих элементах управления.
5) С целью экономии памяти определена процедура для физического удаления списков.
Пример:
procedure TFrmServiceAddresses.BtnDeleteAddressClick(Sender: TObject);
var
H, Temp: PServiceAdds;
begin
if SgAdds.Row <> 0 then
begin
if (HeadAdds^.Street = SgAdds.Cells[0, SgAdds.Row]) and
(HeadAdds^.Number = SgAdds.Cells[1, SgAdds.Row]) then
begin
Temp := HeadAdds;
HeadAdds := HeadAdds^.Next;
Dispose(Temp);
end
else
begin
H := HeadAdds;
while (H^.Next^.Street <> SgAdds.Cells[0, SgAdds.Row]) and (H^.Next^.Number <> SgAdds.Cells[1, SgAdds.Row]) do
H := H^.Next;
Temp := H^.Next;
H^.Next := H^.Next^.Next;
Dispose(Temp);
end;
GridDeleteRow(SgAdds.Row);
end;
end;
5. Тестирование, экспериментальные исследования и анализ полученных данных
Таблица 5.1 - Результаты тестов подпрограмм
Название подпрограммы |
Входные данные |
Ожидаемые результаты |
Пример вызова |
Полученные результаты |
AddReply |
Принимает введенные пользователем в поля ввода данные о жителе.
|
Чтение данных, проверка и занесение в список новой заявки. |
Содержимое полей ввода: Пушкин А.С.; ул. Строителей; 42; 54; 758493; лифт; не готово |
Данные из полей ввода прочитаны, проверены на корректность, в список занесена новая заявка, содержащая введенные данные. |
Содержимое полей ввода: Михалков Р.Н.; ул. Гикало; 34; 26; 758493; техобслуживание; не готово |
Данные из полей ввода прочитаны, проверены на корректность, но в список новая заявка не занесена, т.к. данный телефон используется другим жителем, выдано соответствующее сообщение. |
|||
Change Reply
|
Принимает введенные пользователем в поля ввода данные о жителе.
|
Чтение данных, проверка и изменение в списке данных о заявке. |
Содержимое полей ввода: Пушкин А.С.; ул. Строителей; 42; 54; 907356; лифт; готово |
Данные из полей ввода прочитаны, проверены на корректность, в списке изменились данные заявки. |
Содержимое полей ввода: Крестов А.И.; ул. Строителей; 42; 54; 643648; водоснабжение; не готово |
Данные из полей ввода прочитаны, проверены на корректность, в списке данные заявки не изменились, т.к. введённый адрес занят, выдано соответствующее сообщение. |
|||
DeleteReply |
Принимает данные о заявке из полей выделенной строки таблицы.
|
Поиск и удаление из списка заявки с заданными данными. |
Содержимое полей строки таблицы: Пушкин А.С.; ул. Строителей; 42; 54; 907356; лифт; готово |
Был найден и удален из списка диск с заданными данными. |
SearchBy Number |
Принимает введенный пользователем в поле ввода номер заявки.
|
Чтение введенных данных, вывод на экран найденной по данному запросу заявки. |
Содержимое поля ввода: 2 |
Данные прочитаны, поиск заявки с введённым номером, на экран была выведена заявка . |
Содержимое поля ввода: 7 |
Данные прочитаны, поиск заявки с введённым номером, на экран не была выведена заявка , т.к. заявки с заданным номером не существует, выдано соответствующее сообщение. |
|||
SortByName |
|
Сортирует список заявок по неисправности в алфавитном порядке.
|
|
Список успешно отсортировался. |
В процессе тестирования были проверены все операции со списками с разными входными данными, ошибки в программе не нашлись.