Обзор существующих аналогов

 

На данный момент существуют различные аналоги данной программы. Ниже описан интерфейс одной из таковых(рис 1.3). Данная программа обладает большим набором возможностей учёта заявок в различных сферах обслуживания.

 

 

Рис. 1.3 - Аналог программы регистрации заявок

 

Вот некоторые из функций программы:

- Программа учета абонентов. Работа с населением.

- Система управления государственными предприятиями автоматически производит начисление в начале месяца за любые предоставляемые услуги;

- Любые дополнительные начисления абонентским отделом;

- Автоматическое и ручное начисление пени неплательщикам;

- Контроль водоканала поддерживает работу по любым тарифам, в том числе и по дифференцированным;

- Программа учета электроэнергии (электрической энергии);

- Управление коммунальное предприятие включает современный анализ хозяйственной деятельности, учет расчетов;

- Учет в жкх, контроль гкп поддерживает учет водоснабжения;

 

Недостатки программы:

- Переизбыток функций;

- Нет статистики и графика поступления заявок;


2.Разработка алгоритма

 

Приведенные ниже схемы иллюстрируют структуру хранения данных на базе односвязных динамических списков(рис. 2.1, 2.2, 2.4).

 

 

Рисунок 2.1 – Схема структуры списка заявок

 

 

Рисунок 2.2 – Схема структуры списка адресов жильцов

 

 

Рисунок 2.3 – Схема структуры адреса

 

 

 

Рисунок 2.4 – Схема структуры списка обслуживаемых адресов

 

Предложенная структура данных позволяет динамически добавлять заявки и адреса в «базу данных». Также предусмотрено изменение и удаление элементов из описанных выше списков.

Алгоритм предусматривает следующие возможности:

- добавление заявки в список;

- изменение заявки в списке;

- удаление заявки из списка;

- добавление, изменение, удаление обслуживаемых адресов;

- сортировка списка заявок по дате и по неисправности;

- поиск заявки по номеру или по ФИО жильца;

- вывод на экран и в текстовый файл заявок за определённый временной интервал;

- вывод на экран и в текстовый файл незакрытых заявок;

- просмотр списка адресов жильцов;

- просмотр графика поступления заявок за определённый временной интервал;

- автоматическое сохранение описанных выше списков в текстовый файл при выходе из программы;

- автоматическая загрузка описанных выше списков из текстового файла при запуске программы;

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

 

Рисунок 2.5 – Схема программы

 

 

Рисунок 2.6 – Схема процедуры добавления заявки

 

 

Рисунок 2.7 – Схема процедуры изменения заявки

 

 

Рисунок 2.8 – Схема процедуры удаления заявки

 

 


 

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 Данные прочитаны, поиск заявки с введённым номером, на экран была выведена заявка .
Содержимое поля ввода: Данные прочитаны, поиск заявки с введённым номером, на экран не была выведена заявка , т.к. заявки с заданным номером не существует, выдано соответствующее сообщение.
SortByName   Сортирует список заявок по неисправности в алфавитном порядке.   Список успешно отсортировался.

В процессе тестирования были проверены все операции со списками с разными входными данными, ошибки в программе не нашлись.


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

При запуске программы появляется окно авторизации(рис. 6.1):

Рисунок 6.1

Если вы впервые запускаете программу, вам необходимо зарегистрироваться. Для этого введите логин и пароль в соответствующие поля. При последующих запусках программы необходимо будет ввести эти данные. Если вы неправильно ввели пароль или логин, вы увидите следующую надпись(рис. 6.2):

 

 

Рисунок 6.2

При авторизации в системе мы попадаем на главное окно программы.

На главном окне находится таблица, а также операции, выполняемые над её элементами(заявками). Если после предыдущего запуска программы были сохранены заявки, то они автоматически загружаются в таблицу(рис. 6.3).

 

Рисунок 6.3

В программе доступны следующие операции над заявками:

-Добавить

-Изменить

-Удалить

-Поиск

-Сортировка

-Статистика

 

Добавить заявку

Для добавления заявки в список нажмите на кнопку "Добавить" на панели операций, заполните все поля в открывшейся форме(рис. 6.4) и нажмите "Добавить".

Рисунок 6.4

При неверном вводе данных заявки могут появиться следующие сообщения об ошибках:

1) При добавлении заявки, которая уже есть в списке; при изменении заявки на такую, которая уже есть в списке(рис. 6.5):

 

 

Рисунок 6.5

2) При добавлении или изменении заявки, содержащей используемый другим человеком телефон в поле 'телефон'(рис. 6.6):

 

 

Рисунок 6.6

3) При добавлении или изменении диска при вводе в поля адреса, не обслуживаемого данной ЖЭС(рис. 6.7):

 

 

Рисунок 6.7

Перед добавлением заявки стоит проверить, обслуживается ли введённый адрес данной ЖЭС путём нажатия на кнопку ''Проверить''. Откроется новое окно(рис. 6.8).

 

 

Рисунок 6.8

В нём можно просмотреть таблицу, есть ли там нужный адрес. Если он там должен быть, нажмите на кнопку ''Добавить'' в данном окне. Откроется новое окно ввода данных(рис. 6.9):

 

Рисунок 6.9

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

 

Изменить заявку

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

интересующей вас заявки, нажмите на кнопку "Изменить" на панели операций, исправьте интересующие вас поля в открывшейся форме(рис. 6.10) и нажмите "Изменить".

 

Рисунок 6.10

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

 

Удалить заявку

Выделите строку в таблице с данными ненужной вам заявки и нажмите на кнопку "Удалить" на панели операций.

 

Поиск диска

Введите номер заявки или ФИО жильца в соответствующее поле поиска на панели поиска(рис. 6.11) и нажмите "ok" для отображения интересующей вас заявки(заявок). Для просмотра всего списка заявок и очистки полей поиска выберите пункт меню Файл -> Обновить окно или нажмите F5(рис. 6.12).

 

 

Рисунок 6.11 Рисунок 6.12

При поиске несуществующей в списке заявки появляется сообщение(рис. 6.13):

 

Рисунок 6.13

Сортировка заявок

Для сортировки списка по дате или по неисправности выберите соответствующий пункт на панели сортировки(рис. 6.14).

 

Рисунок 6.14

 

Статистика

Для просмотра заявок, поступивших в определённый промежуток времени, введите нужный диапазон времени в поля на панели статистики и нажмите ''ok''(рис. 6.15):

 

 

Рисунок 6.15

Заявки, поступившие в заданный диапазон времени отобразятся в таблице а также сохранятся в текстовый файл в папке Debug.

Соответственным образом можно увидеть заявки, поступившие за текущие сутки а также не закрытые заявки, нажав на кнопку ''Показать'' под соответствующей надписью. Все отобразившиеся по данным условиям заявки также сохранятся в текстовые файлы в папку Debug.

При нажатии на кнопку ''Показать'' под надписью ''График поступления заявок'' откроется новое окно. Выберите нужный вам интервал времени поступления заявок и нажмите ''Показать''(рис. 6.16).

 

 

Рисунок 6.16

Также в программе можно отобразить список адресов жильцов. Для этого при работе в главном окне выберите в главном меню Вид -> Список адресов. Откроется новое окно(рис. 6.17):

 

 

Рисунок 6.17

Вы можете редактировать задолженность жильцов путём выделения строки таблицы с адресом нужного жильца и последующим нажатием на кнопку ''Редактировать''. Откроется новое окно(рис. 6.18):

 

 

Рисунок 6.18

Вы можете изменить задолженность путём ввода в соответствующее поле нужной суммы и последующим нажатием кнопки ''Изменить''. Для обнуления задолженности напишите в соответствующем поле 0 или не заполняйте его вообще.

Также в программе имеется возможность смены логина и пароля. Для этого работая в главном окне выберите пункт меню Опции -> Сменить пользователя. Откроется то же окно, что и при авторизации. Введите новые логин и пароль и нажмите ''ok''.

Для выхода из программы можно выбрать пункт в главном меню Файл -> Выйти.

При закрытии программы данные списков заявок; списков адресов жителей с задолженностями; адресов, обслуживаемых данной ЖЭС сохраняются в текстовые файлы. При следующем открытии программы они

будут загружены из файлов.


Заключение

 

Как было показано выше, данное приложение предоставляет пользователю возможности, перечисленные при постановке задачи.

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

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

В программе предусмотрен ряд естественных ограничений, продиктованных смыслом поставленной задачи и особенностями ее реализации в действительности. Данные ограничения подробно документированы в пункте «Руководство пользователя».

 

 


 

Список используемой литературы

1. Вирт Н. Алгоритмы и структуры данных. – . М.: Мир, 1989.

2. Сухарев М. В. Основы Delphi. Профессиональный подход.

3. Осипов Д. Delphi. Профессиональное программирование, 2006.

 

 


 

Листинг программы

 

unit Unit1;

 

interface

 

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,

System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls, Vcl.ExtCtrls,

unit3, unit4, unit6, unit8,

Vcl.Imaging.jpeg, Vcl.Imaging.pngimage, Vcl.Menus;

 

type

 

TFrmMain = class(TForm)

SgMain: TStringGrid;

PnlMain: TPanel;

BtnAdd: TButton;

 

и т. д.

 

здесь был код....