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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 26.05.2018
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

17

Размещено на http://www.allbest.ru/

Узбекское агентство связи и информатизации

Самаркандский филиал

Ташкентского университета информационных технологий

Факультет информационных и педагогических технологий

Кафедра информатики и информационных технологий

Выпускная квалификационная работа

для получения академической степени бакалавра

по направлению

5521900 - информатика и информационные технологии

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

Исполнитель: студент группы 407

Халилов А.

Научный руководитель:

Каюмов А.

г. Самарканд 2012

Содержание

  • Введение
  • Глава 1. Теоретические сведения и программные инструменты для разработки системы СМС парковки
  • 1.1 Краткие сведения об СМС парковке
  • 1.2 Создание базы данных в СУБД MS Access
  • 1.3 Язык программирования Delphi2010. Работа с базами данных
  • 1.4 Отправка SMS с 3G/GSM модема
  • Заключение
  • Глава 2. Разработка алгоритмов и программы автоматизированной системы смс парковки
  • 2.1 Проектирование базы данных системы СМС парковки
  • 2.2 Разработка программного средства и описание программы
  • 2.3 Общая структура пользовательского интерфейса программы
  • 2.4 Вопросы охраны труда и техники безопасности
  • 2.5 Противопожарная защита [13]
  • Заключение
  • Литература
  • Приложение. Код программы

Введение

Актуальность темы. Модернизация, техническое обновление, широкое внедрение инновационных технологий - надежный путь преодоления кризиса и выхода Узбекистана на новые рубежи на мировом рынке. Нам необходимо тщательным образом проанализировать, какие факторы мешают выйти из кризиса? Внедряя новые технологии, мы перестроим многое, мы обнаружим минусы системы, поставим цель и добьемся её [1].

С каждым годом перед автовладельцами все острее встает проблема: где найти парковку для автомобиля? Количество населения города ежегодно растет, соответственно увеличивается и количество автомобилей. Особенно данная ситуация характерна для центра города, где уже типичной ситуацией стала парковка в два ряда. Изменить данную ситуацию поможет введение автоматизированной системы управления парковками. С помощью видеомониторинга возможно осуществлять контроль доступа транспорта в парковочную зону. Информация с камер поступает и обрабатывается в аналитическом центре. Пополнить бюджет города для строительства новых паркингов поможет "SMS" парковка. Автовладелец, оставляя машину на парковку, отправляет SMS - сообщение на короткий номер с указанием номера автомобиля. С его счета списывается определенная сумма денег в зависимости от его пребывания на парковке. При выезде со стоянки автовладелец отправляет SMS с кодом завершения парковки [15].

Цель работы. Целью выпускной квалификационной работы является разработка программного обеспечения организации учета и контроля парковок на платных стоянках посредством СМС услуг, которое в значительной степени упростило бы процесс пополнения бюджета города, повышение комфорта для автовладельцев, минимализации участия персонала, экономия времени для автовладельцев [16].

парковка программа алгоритм

Основные задачи исследования: В выпускной квалификационной работе предлагается алгоритм и программное средство организации учета и контроля парковок на платных стоянках посредством СМС услуг.

Научная новизна работы. Разработано и реализовано новое программное обеспечение организации учета и контроля парковок на платных стоянках посредством СМС услуг, аналогов в Узбекистане которому пока что не существует. При его создании были применены одна из новых сред программирования Embarcadero Delphi 2010.

Практическая значимость работы. На основе требований к такого рода программам разработан алгоритм и создано программное обеспечение, предназначенное для организации учета и контроля парковок на платных стоянках посредством СМС услуг [15].

Структура и объем выпускной квалификационной работы. Выпускная квалификационная работа состоит из введения, 2-х глав и заключения, изложенных на 42 страницах машинописного текста. Содержит список использованной литературы из 14 наименований и приложения.

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

Глава 1. Теоретические сведения и программные инструменты для разработки системы СМС парковки

1.1 Краткие сведения об СМС парковке

С каждым годом перед автовладельцами все острее встает проблема: где найти парковку для автомобиля? Количество населения города ежегодно растет, соответственно увеличивается и количество автомобилей. Особенно данная ситуация характерна для центра города, где уже типичной ситуацией стала парковка в два ряда.

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

Информация с камер поступает и обрабатывается в аналитическом центре. Пополнить бюджет города для строительства новых паркингов

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

Услуга СМС парковки позволяет оплачивать парковку автомобиля по мобильному телефону и экономит время на покупке парковочных билетов.

Услуга СМС парковки не имеет абонентской платы и доступна всем договорным клиентам. С одного мобильного номера единовременно.

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

Парковочные часы дают бесплатное парковочное время. Бесплатно можно паковаться первые 15 минут. Для использования бесплатного парковочного времени нужно установить под переднее ветровое стекло парковочные часы с указанием времени начала парковки.

Прежде чем оставить машину, убедитесь в том, что система СМС парковки активировалась. Если по каким-либо причинам этого не произошло, вы все равно должны оплатить парковочное время. В таком случае рекомендуем использовать парковочные билеты.

Для прекращения парковки нужно позвонить на короткий номер. О том, что парковка деактивирована, сообщит SMS.

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

Типы коротких СМС:

1. активирование и продление парковки по SMS

2. активирование и продление парковки звонком с данными предыдущей парковки

3. деактивирование парковки звонком [18]

Лимит M-парковки

Лимит M-парковки установлен для того, чтобы клиент, забывший прекратить парковочную сессию, случайно не израсходовал все деньги. По умолчанию парковочный лимит установлен в пределах 4-часовой платы за парковку.

Продление СМС парковки

За 10 минут до истечения парковочного лимита на мобильный телефон поступит соответствующее сообщение. Если парковка не будет продлена, то по истечении лимита сессия автоматически завершится.

Чтобы продлить парковку, нужно активировать новую парковочную сессию Таким образом вы повысите парковочный лимит и автоматически продлите парковку.

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

До круглосуточной оплаты плата производится каждые 15 минут, каждой парковочной зоне соответствует определенная суточная оплата. Продолжительность парковки - 24 часа без продления. Через 24 часа парковка автоматически деактивируется, о чем сообщает SMS (если парковка не была прекращена по истечении 24 часов). При прекращении парковки до истечения 24 часов и при начале новой парковки время отсчитывается заново - от 15 минут до 24 часов [18].

1.2 Создание базы данных в СУБД MS Access

Microsoft Access - это функционально полная реляционная СУБД. В ней предусмотрены все необходимые вам средства для определения и обработки данных, а также для управления ими при работе с большими объемами информации. Что касается легкости использования, то Microsoft Access совершил здесь настоящий переворот, и многие для создания своих собственных баз данных и приложений обращаются именно к нему.

Система управления базами данных предоставляет нам возможность контролировать задание структуры и описание своих данных, работу с ними и организацию коллективного пользования этой информацией. СУБД также существенно увеличивает возможности и облегчает каталогизацию и ведение больших объемов хранящейся в многочисленных таблицах информации. СУБД включает в себя три основных типа функций: определение (задание структуры и описание) данных, обработка данных и управление данными. Все эти функциональные возможности в полной мере реализованы в Microsoft Access. В практике, как правило, необходимо решать и задачи с использованием электронных таблиц и текстовых процессоров. Например, после подсчета или анализа данных необходимо их представить в виде определенной формы или шаблоны. В итоге пользователю приходится комбинировать программные продукты для получения необходимого результата. В этом смысле все существенно упростят возможности, предоставляемые Microsoft Access.

СУБД позволяет задать типы данных и способы их хранения. Мы также можете задать критерии (условия), которые СУБД будет в дальнейшем использовать для обеспечения правильности ввода данных. В самом простом случае условие на значение должно гарантировать, что мы не введем случайно в числовое поле буквенный символ. Другие условия могут определять область или диапазоны допустимых значений ваших данных. В наиболее совершенных системах мы можем задать отношения между совокупностями данных (обычно называемыми таблицами или файлами) и возложить на СУБД обеспечение совместимости или целостности данных. Например, можно заставить систему автоматически проверять отношение введенных заказов к конкретным клиентам.

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

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

СУБД позволяет работать с данными, применяя различные способы. Например, мы можем выполнить поиск информации в отдельной таблице или создать запрос со сложным поиском по нескольким связанным между собой таблицам или файлам.

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

.

рис 2.1.1 Связи между таблицами

В Microsoft Access для обработки данных некоторых таблиц используется мощный язык SQL (Structured Query Language - Структурированный язык запросов). Используя, мы можем выделить из одной или нескольких таблиц необходимую для решения конкретной задачи информацию. Access значительно упрощает задачу обработки данных. Чтобы заставить Microsoft Access решать наши задачи, нам совершенно не требуется знать язык SQL. При любой обработке данных из нескольких таблиц использует однажды заданные вами связи между таблицами. Мы можем сконцентрировать свои усилия на решении информационных проблем, не затрачивая сил на построение сложной системы, которая отслеживает в нашей базе все связи между структурами данных. В Microsoft Access имеется также простое и в то же время богатое возможностями средство графического задания запроса - так называемый "запрос по образцу" (QBE, query by example), которое используется для задания данных, необходимых для решения некоторой задачи. Используя для выделения и перемещения элементов на экране стандартные приемы работы с мышью в Windows и несколько клавиш на клавиатуре, мы можем буквально за секунды построить довольно сложный запрос [7].

1.3 Язык программирования Delphi2010. Работа с базами данных

Приложение баз данных, как следует уже из его названия, предназначено для взаимодействия с некоторым источником данных - базой данных (БД). Взаимодействие подразумевает получение данных, их представление в определенном формате для просмотра пользователем, редактирование в соответствии с реализованными в программе бизнес - алгоритмами и возврат обработанных данных обратно в базу данных [3].

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

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

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

Для обеспечения связи набора данных с визуальными компонентами отображения данных используется специальный компонент TDataSource. Его роль заключается в управлении потоками данных между набором данных и связанными с ним компонентами отображения данных. Этот компонент обеспечивает передачу данных в визуальные компоненты и возврат результатов редактирования в набор данных, отвечает за изменение состояния визуальных компонентов при изменении состояния набора данных, передает сигналы управления от пользователя (визуальных компонентов) в набор данных. Компонент TDataSource расположен на странице Data Access Палитры компонентов.

Таким образом, базовый механизм доступа к данным создается триадой компонентов:

· компоненты, инкапсулирующие набор данных (потомки класса TDataSet);

· компоненты TDataSource;

· визуальные компоненты отображения данных.

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

Еще одна функция компонента TDataSource заключается в синхронизации поведения компонентов отображения данных с состоянием набора данных. Например, если набор данных не активен, то компонент TDataSource обеспечивает удаление данных из компонентов отображения данных и их перевод в неактивное состояние. Или, если набор данных работает в режиме "только для чтения", то компонент TDataSource обязан передать в компоненты отображения данных запрещение на изменение данных.

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

При открытии набора данных компонент обеспечивает передачу в набор данных записей из требуемой таблицы БД. Курсор набора данных устанавливается на первую запись. Компонент TDataSource организует передачу в компоненты отображения данных значений необходимых полей из текущей записи. При перемещении по записям набора данных текущие значения полей в компонентах отображения данных автоматически обновляются [3].

рис 2.1.1 Механизм доступа к данным приложения баз данных

Пользователь при помощи компонентов отображения данных может просматривать и редактировать данные. Измененные значения сразу же передаются из элемента управления в набор данных при помощи компонента TDataSource. Затем изменения могут быть переданы в базу данных или отменены.

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

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

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

Пользователь просматривает на экране данные - это результат использования набора данных.

Пользователь решил изменить какое-то число - он изменит содержимое ячейки набора данных.

При закрытии приложение сохраняет все изменения - это набор данных передается в базу данных для сохранения.

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

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

Рис 2.2.2 Иерархия классов, обеспечивающих функционирование набора данных

1.4 Отправка SMS с 3G/GSM модема

В данной разделе мы рассмотрим работы с GSM модемом, а точнее опытом отправки SMS сообщений. Ниже будет описана реализация программы на Delphi для отправки SMS сообщений, а так же чтение и удаление входящих/исходящих сообщений с модема. В моём случае это был модем HUAWEI от MTS. Для решения данной задачи приходиться работать посредством СОМ порта. Обмен информацией с USB модемом осуществляет при помощи AT команд, их конечно довольно много, но всё гораздо проще т.к. для нашей цели потребовались всего 5 команд: AT+CMGF - задаёт режим работы: 0-цифровой или 1-текстовый. Эта команда будет вызываться первой, от этого зависит формат последующих команд и ответов модема. AT+CMGS - отправка сообщения, формат параметра сильно зависти от режима (т.е. от прошлой команды). AT+CMGL - чтение сообщений с модема, в качестве параметра можно передать одно из пяти значений, стоит обратить внимание что в зависимости от режима (AT+CMGF) следует передавать цифровые или строковые значения: AT+CMGD - удаление одного сообщения с модема, в качестве параметра передаём номер сообщения. AT+CMGR - чтение одного сообщения с модема, так же передаём номер сообщения.

Первые результаты

Отправить SMS сообщение с модема ненамного сложнее чем сделать это с обычного мобильного телефона. Как уже упоминалось выше, для отправки SMS следует использовать команду "AT+CMGS". И так, для начала нужно открыть hyperterm, затем подключился к модему (через COM порт), и настрочил в порт следующие команды:

AT+CMGF=1 [Enter]

AT+CMGS=+79261234567 [Enter]

hello habr, this is test message [Ctrl+Z]

Пример того же самого на Delphi:

procedure SendSMS (AComPort: integer; AMsg: String; ANumTel: String);

var

hFile: THandle;

procedure WriteStr (AStr: String); // пишет в порт переданную строку

var

LWrited: Cardinal;

begin

// Пишем в порт

WriteFile (hFile, PAnsiChar (AStr) ^, Length (AStr), LWrited, nil);

end;

begin

// открываем порт

hFile: = Windows. CreateFile (PChar ('\\. \COM' + IntToStr (AComPort)), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);

// если открылся

if (hFile <> INVALID_HANDLE_VALUE) then

begin

try

// устанавливаем текстовый режим

WriteStr ('AT+CMGF=1' + #$D#$A);

// вводим номер в формате "+79xxxxxxxxx"

WriteStr ('AT+CMGS="'+ANumTel+'"' + #$D#$A);

// вводим текст сообщения, только латиница

WriteStr (AMsg + #$D#$A#$1A);

finally

// закрываем порт

Windows. CloseHandle (hFile);

end;

end;

end;

При этом устройство сообщит о подключении, но пользоваться русским текстом гораздо сложнее. Во первых для отправки сообщений на русском нужно переключить режим с текстового на цифровой (AT+CMGF=0), а во вторых само сообщение должно быть отправлено в кодировке UCS2. И если с первым проблем минимум, то со вторым пришлось повозиться.

Кодировка текста в UCS и обратно (опять таки на Delphi):

function UCSToAnsi (AStr: AnsiString): AnsiString;

function Convert (ACnvStr: AnsiString): AnsiChar;

var

j: integer;

begin

j: = StrToIntDef ('$'+ACnvStr, 0);

case j of

1040.1103: j: = j - 848;

1105: j: = 184;

end;

Result: = Chr (j);

end;

var

c, i: integer;

begin

Result: = '';

c: = Length (AStr) div 4;

for i: = 0 to c - 1 do

Result: = Result + Convert (Copy (AStr, i*4+1,4)); end;

function AnsiToUCS (AStr: AnsiString): AnsiString;

function Convert (AChar: AnsiChar): AnsiString;

var

j: integer;

begin

Result: = '';

j: = ord (AChar);

case j of

192.255: j: = j + 848;

184: j: = 1105;

end;

Result: = IntToHex (j,

4)

end;

var

c, i: integer;

begin

Result: = '';

c: = Length (AStr);

for i: = 1 to c do

Result: = Result + Convert (AStr [i]);

end;

Не скажу что всё получилось сразу и легко, но всё же получилось. Если раньше я отправлял в модем:

AT+CMGF=1 [Enter]

AT+CMGS=+79261234567 [Enter]

hello habr, this is test message [Ctrl+Z]

то для того чтобы отправить сообщение на русском нужно будет отправить:

AT+CMGF=0 [Enter]

AT+CMGS=84 [Enter]

0011000B919762214365F70008C146043F04400438043204350442002004450430043

10440002C0020044D0442043E00200442043504410442043E0432043E043500200441

043E043E043104490435043D04380435 [Ctrl+Z]

Сначала переключение режима (в цифровой), затем отправляется длинна сообщения (84), а последняя строка содержит: номер телефона, текст сообщения и различные настройки (такие как: номер SMS-центра, сохранять ли сообщение у получателя и др.).

Пример на Delphi:

procedure SendSMSMessage (AComPort: integer; AMsg: String; ANumTel: String);

var

Lng, i: Integer;

LRead, LText, LMes, LTel, ANum: String;

hFile: THandle;

procedure WriteStr (AStr: String);

var

LWrited: Cardinal;

begin

// Пишем в порт

WriteFile (hFile, PAnsiChar (AStr) ^, Length (AStr), LWrited, nil);

end;

begin

// открываем порт

hFile: = Windows. CreateFile (PChar ('\\. \COM' + IntToStr (AComPort)), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);

// если открылся

if (hFile <> INVALID_HANDLE_VALUE) then

begin

ANum: = ANumTel;

if (Length (ANum) mod 2) = 1 then

ANum: = ANum + 'F';

for i: = 1 to Length (ANum) do

if i mod 2 = 0 then

LTel: = LTel + ANum [i] + ANum [i-1];

LText: = AnsiToUCS (AMsg);

// Длина и номер SMS центра.0 - означает, что будет использоваться дефолтный номер.

LMes: = '00';

// SMS-SUBMIT

LMes: = LMes + '11';

// Длина и номер отправителя.0 - означает что будет использоваться дефолтный номер.

LMes: = LMes + '00';

// Длина номера получателя

LMes: = LMes + IntToHex (Length (ANumTel),

2);

// Тип-адреса. (91 указывает международный формат телефонного номера, 81 - местный формат).

LMes: = LMes + '91';

// Телефонный номер получателя в международном формате.

LMes: = LMes + LTel;

// Идентификатор протокола

LMes: = LMes + '00';

// Старший полубайт означает сохранять SMS у получателя или нет (Flash SMS), Младший полубайт - кодировка (0-латиница 8-кирилица).

LMes: = LMes + '08';

// Срок доставки сообщения. С1 - неделя

LMes: = LMes + 'C1';

// Длина текста сообщения.

LMes: = LMes + IntToHex (Trunc (Length (LText) /2),2);

LMes: = LMes + LText;

Lng: = Round ( (Length (LMes) - 2) /2);

WriteStr ('AT+CMGF=0' + #$D#$A);

WriteStr ('AT+CMGS=' + StrToInt (Lng) + #$D#$A);

WriteStr (LMes + #$D#$A#$1A);

Windows. CloseHandle (hFile);

end;

end;

Для реализации вышеупомянутой логики от модема требуется: прочитать SMS из памяти, удалить SMS из памяти (чтобы не скапливались). Для чтения сообщений использовал команды AT+CMGR и AT+CMGL (их краткое описание приводилось ранее). Чтение всех сообщений будет выглядеть как:

AT+CMGF=1 [Enter]

AT+CMGL="ALL" [Enter]

+CMGL: 6,"REC READ","778467",,"11/09/03,18: 49: 40+16"

007700770077002E006D00740073002E00720075

+CMGL: 7,"REC READ","+79261234567",,"11/10/18,18: 38: 00+16"

04220435044104420020043F044004380435043C043000200073006D0073002004410

43E043E043104490435043D04380439002100200421043C04410020043D043D043D04

3004340430003F0021003F00210028002D005F002D00290020 [Enter]

Здесь всё проще чем было раньше. Каждое сообщение состоит из 2х строк, в первой содержатся данные о сообщении (такие как: от кого, когда, номер сообщения), а во второй сам текст сообщения (опять таки в кодировке UCS, функция UCSToAnsi приводилась выше). Чтение одного сообщение осуществляется как:

AT+CMGF=1 [Enter]

AT+CMGR=7 [Enter]

+CMGR: "REC READ","+79261234567",,"11/10/18,18: 38: 00+16"

04220435044104420020043F044004380435043C043000200073006D0073002004410

43E043E043104490435043D04380439002100200421043C04410020043D043D043D04

3004340430003F0021003F00210028002D005F002D00290020 [Enter]

Аналогичным образом происходит и удаление сообщений. Если например в моём случае отправить команду AT+CMGD=7, то при следующем AT+CMGL="ALL" я уже не увижу сообщение номер 7, т.к. оно будет удалено [16].

Заключение

И так, были разобраны основные команды для работы с SMS сообщениями через GSM модем, была рассмотрена отправка, чтение, удаление сообщений. На последок хотелось бы отметить что область применения такого использования SMS сообщений довольно широка (особенно потому что можно организовать двухстороннюю связь). Например так: пользователь отправляет SMS, модем принимает, наша программа считывает, выполняет какие то действия исходя из текста сообщения и отправляет пользователю результата. Или наоборот: на ПК происходит какое то событие, и программа отправляет пользователю сообщение об этом событии.

Глава 2. Разработка алгоритмов и программы автоматизированной системы смс парковки

2.1 Проектирование базы данных системы СМС парковки

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

- Ф. И.О. клиента

- Телефоны

- Сумма на счету

- Номе паспорта

- Серия паспорта

- Статус

- Время добавления изменений

Для реализации этой задачи программы была спроектирована база данных MS Access, которая содержит 3 таблиц, каждая из которых содержит данные, необходимые для надлежащей работы программы:

Рис 2.1.1

1) userlist - Содержит информацию об пользователях системы;

Рис 2.1.2.

2) oplata - Содержит информацию о всех произведенных платежах (в том числе платеж осуществляемый наличными может вводиться в ручную);

Рис 2.1.3.

3) config - Содержит информацию об самой организации предоставляемой данные услуги

Рис 2.1.4.

2.2 Разработка программного средства и описание программы

Данное программное средство разработано на языке программирования высокого уровня Delphi 2010, связано с базой данных, спроектированной при помощи СУБД MS Access. Для создания программы используется следующие компоненты:

1) Все приложение состоит из трех модулей: Главное окно приложения (MainForm. pas), окно для редактирования и добавления данных о пользователе (edit_view. pas) и модуль для хранения компонентов для подключения к базе данных.

2) Компонента PageControl состоящий из трех страниц: Пользователи, Оплата, Контроль СМС сообщений

3) DBGrid1 - Таблица для отабражения списка пользователей

4) ToolBar1 - Панель инструментов на нем расположены кнопка редактирования данных пользователя, кнопка добавления нового пользователя, выпадающее меню ComboBox1 для фильтрации пользователей по их активности, компонента DBCheckBox1 - для изменения активности пользователя.

5) Timer1 - для проверки прихода нового сообщения

6) В разделе Оплата находятся компонента DBGrid2 - для отображения данных их таблицы оплат.

7) Два DateTimePicker компоненты для фильтрации данных по промежутку дат, в зависимости от типа платежа

8) Основное меню MainMenu1

9) Компонента ImageList1 для отображения картинок на компонентах.

10) Для подключения к базе данных используется один компонент ADOConnection

11) Для доступа к таблицам используется три компонента ADOTable

12) Для обеспечения доступа к данным используется три компонента DataSource (рис.2.2.1)

Рис.2.2.1 Отображение компонент в среде программирования Delphi 2010

Основная работа выполняется в третьем разделе главного окна, здесь в таймере проверяется наличии новых сообщений при их наличии, происходит его парсинг и добавлении его в базу данных:

procedure TForm1. Timer2Timer (Sender: TObject);

begin

if CheckBox1. Checked then

begin

GetMessageInfoBtn. Click;

end;

end;

procedure TForm1. GetMessageInfoBtnClick (Sender: TObject);

var

str: string;

Res: LongInt;

MemType,MemIndex: DWORD;

Mess,aPhone,aServiceCenter: array [0.1023] of AnsiChar;

aDateTime: TDateTime;

aPartCount: DWORD;

aPartNumber: DWORD;

aPartID: DWORD;

aIsReport: DWORD;

aReportStatus: DWORD;

aReportDateTime: TDateTime;

aIsIncoming: DWORD; aIsEmpty: DWORD;

begin

MemType: = DWORD (MemTypesCB. ItemIndex);

MemIndex: = DWORD (MessIndexSE. Value);

FillChar (Mess,SizeOf (Mess),$00);

FillChar (aPhone,SizeOf (aPhone),$00);

FillChar (aServiceCenter,SizeOf (aServiceCenter),$00);

Res: = Gsm_ReadFromMemory (MemType,MemIndex,@Mess,SizeOf (Mess) - 1);

Res: = Gsm_GetMessageInfo (MemType,MemIndex,

{ - ---------------------- - }

@Mess,SizeOf (Mess) - 1,{ - ---------------------- - }

@aPhone,SizeOf (aPhone) - 1,{ - ---------------------- - }

@aServiceCenter,SizeOf (aServiceCenter) - 1,{ - ---------------------- - }

aDateTime,

aPartCount,

aPartNumber,

aPartID,

aIsReport,

aReportStatus,

aReportDateTime,

aIsIncoming,

aIsEmpty);

if Res = GSM_OK then

begin

Print ('ИНФА О СООБЩЕНИИ ['+IntToStr (MemIndex) +'] ');

if aIsEmpty = 1 then

begin

Print (' ['+IntToStr (MemIndex) +']: ПУСТОЕ СООБЩЕНИЕ');

end else

begin

if (Mess [0] in ['1','0']) then

begin

datm. UserTable. Filtered: =true;

datm. UserTable. Filter: ='tel=''+'+aphone+'''';

if datm. UserTable. RecordCount>0 then

begin

datm. UserTable. Edit;

PhoneNumberEdit. Text: =aphone;

if mess [0] ='1' then

begin

datm. UserTable. FieldByName ('status'). AsBoolean: =true;

SmsTextEdit. Text: ='Вы заехали на стоянку ваш баланс: '+datm. UserTable. FieldByName ('summa'). AsString;

datm. UserTable. FieldByName ('vremay'). AsDateTime: =now;

datm. OplataTable. Insert;

datm. OplataTable. FieldByName ('vremyanach'). AsDateTime: =now;

datm. OplataTable. FieldByName ('tel'). AsString: =aphone;

datm. OplataTable. FieldByName ('tippl'). AsBoolean: =true;

if datm. OplataTable. Modified then datm. OplataTable. Post;

end

else

begin

datm. UserTable. FieldByName ('status'). AsBoolean: =false;

SmsTextEdit. Text: ='Счастливого пути ваш баланс: '+datm. UserTable. FieldByName ('summa'). AsString;

datm. OplataTable. Filtered: =true;

datm. OplataTable. Filter: ='tel='''+aphone+'''';

if datm. OplataTable. RecordCount>0 then

begin

datm. OplataTable. Edit;

datm. OplataTable. FieldByName ('summa'). AsInteger: = round (now) - datm. OplataTable. FieldByName ('summa'). AsInteger;

datm. OplataTable. FieldByName ('vremyakon'). AsDateTime: =now;

if datm. OplataTable. Modified then datm. OplataTable. Post;

datm. UserTable. FieldByName ('vremay'). AsDateTime: =now;

datm. UserTable. Filtered: =true;

datm. UserTable. Filter: ='tel=''+'+aphone+'''';

datm. UserTable. Edit;

datm. UserTable. FieldByName ('status'). AsBoolean: =false; datm. UserTable. FieldByName ('summa'). AsInteger: =datm. UserTable. FieldByName ('summa'). AsInteger-datm. OplataTable. FieldByName ('summa'). AsInteger;

if datm. UserTable. Modified then datm. UserTable. Post;

datm. OplataTable. Filtered: =false;

end;

end;

SendSmsBtn. Click;

datm. UserTable. Filter: ='';

datm. UserTable. Filtered: =false;

if datm. UserTable. Modified then datm. UserTable. Post;

DeleteMessageBtn. Click;

end;

end;

Print ('aIsIncoming: '+IntToStr (aIsIncoming));

Print ('aPhone: '+aPhone);

Print ('aServiceCenter: '+aServiceCenter);

Print ('aDateTime: '+DateTimeToStr (aDateTime));

Print ('aPartCount: '+IntToStr (aPartCount));

Print ('aPartNumber: '+IntToStr (aPartNumber));

Print ('aPartID: '+IntToStr (aPartID));

if aIsReport = 1 then

begin

Print ('aIsReport: '+IntToStr (aIsReport));

Print ('aReportStatus: '+IntToStr (aReportStatus));

Print ('aReportDateTime: '+DateTimeToStr (aReportDateTime));

end;

Print ('Message: '+Mess);

end;

Print ('===================================');

end else

if Res = GSM_ERR_NO_MEM then Print (MemTypesCB. Items [MemType] +')

else Print ('Gsm_GetMessageInfo',Res);

end;

2.3 Общая структура пользовательского интерфейса программы

Данная программа состоит из двух основных окон: главное окно и окно для добавления и редактирования данных о пользователях. Само главное окно разделяется на три страницы (рис.2.3.1):

1) Страница пользователей, здесь хранятся все данные о пользователях и имеется возможность их добавлять и редактировать

2) Страница Оплат проведенных пользователями системы в том числе можно вводить в ручную те оплаты которые были оказаны наличными.

3) Окно контроля СМС сообщений, через этот раздел происходит прием и отправка всех СМС сообщений.

Рис 2.3.1 Страницы главного окна

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

Рис 2.3.2 раздел пользователей

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

Рис 2.3.3 Раздел оплат

Третий раздел посвящается проведению СМС операций. Здесь в левом окне мы можем просматривать все СМС операции проведенные системой (рис.2.3.4).

Рис 2.3.4 Раздел контроля СМС сообщений

Рис 2.3.5 Дополнительное окно для редактирования и добавления данных о пользователе

2.4 Вопросы охраны труда и техники безопасности

Помещения ВЦ, их размеры (площадь, объем) должны в первую очередь соответствовать количеству работающих и размещаемому в них комплекту технических средств. В них предусматриваются соответствующие параметры температуры, освещения, чистоты воздуха, обеспечивают изоляцию, от производственных шумов и т.п. Для обеспечения нормальных условий труда санитарные нормы СН 245-71 устанавливают на одного работающего, объем производственного помещения не менее 15 м3, площадь помещения выгороженного стенами или глухими перегородками не менее 4,5 м3.

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.