Разработка программных решений по созданию мобильного приложения для оптимизации и контроля работы торговых агентов компаний.
Общая характеристика и структурная схема приложения, требования к нему и функциональные особенности, сферы практического применения. Обоснование выбора языка программирования. Описание интерфейса и инструкция пользователя. Проведение листинга программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 10.07.2017 |
Размер файла | 1,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Введение
программа приложение интерфейс
Современный человек делает все для того чтобы достигнуть максимального комфорта. Сегодня одним из желаний большинства людей является выход в Интернет. Причем они всегда хотят оставаться онлайн. Именно поэтому огромной актуальностью пользуется такая услуга, как разработка мобильных приложений под android. Все это стало актуальным вместе с появлением мобильного Интернета. Во время поездок всегда есть возможность подключиться к сети с помощью телефона, планшета или другого устройства. Но, сразу же стоит отметить, что без специальных приложений вряд ли бы была достигнута необходимая эффективность.
Сегодня специалистами в области информационных технологий разрабатываются мобильные приложения, которые позволяют решать огромное количество задач, например, создание 3D анимации. Некоторые служат для того чтобы устанавливать соединение с сетью. Другие помогают оптимизировать маршрут. Третьи предназначены для тех, кто ищет самые выгодные магазины. Есть и такие, с помощью которых можно заказать еду на дом. В основу каждой из таких программ легки определенные утилиты, что в результате позволяет быстро решать поставленную задачу, экономить время и достигать максимально комфортного уровня жизни.
Все мобильные приложения условно можно поделить на программы для рабочих целей и на развлекательные программы. Первые позволяют бизнесменом и офисным работникам контролировать бизнес-процессы, составлять аналитическую отчетность, выполнять такие задачи, разработка дизайна фирменного стиля. Вторые включают в себя разнообразные игры, софт для просмотра фильмов и прослушивания музыки, средства для общения и т.д. каждое из мобильных приложений находит своего потребителя, однако, как отмечают специалисты из этой области, наибольшей популярностью пользуется специализированный софт, например, разработка фирменного стиля, который необходим компаниям, работающим в различных направлениях. Также именно на таких программах можно делать неплохие деньги, ведь современные компании не жалеют инвестиций в продукты, которые могли бы в какой-либо степени оптимизировать или упростить имеющиеся бизнес-процессы.
На протяжении последних лет показатель, характеризующий уровень спроса на мобильные устройства, постоянно растет. Такая статистика позволяет сделать вывод о том, что разработка мобильных приложений актуальна и целесообразна. Главное грамотно оценить, для кого и зачем создается софт. Только полезная разработка получит достойное признание со стороны пользователей.
Целью дипломной работы является разработка программных решений по созданию мобильного приложения для оптимизации и контроля работы торговых агентов компаний.
Исходя из поставленной цели, были определены задачи:
- анализ работы торговых агентов
- проведение анализа технологий для разработки мобильных приложений;
- проектирование структуры и верстка приложения;
- создание дизайна для экранов;
- разработка динамических экранов приложения, управляемых базой данных.
1. Основная часть
1.1 Постановка задачи
Задачей дипломной работы является разработать мобильное приложение для оптимизации и контроля работы торговых агентов. Через разработанное мобильное приложение пользователь должен иметь возможность ознакомиться со своими рабочими задачами на сегодня, выполнить их и отправить работодателю отчет о проделанной работе. В результате дипломной работы должны быть выполнены следующие пункты:
- выбор программного обеспечения;
- создание мобильного приложения;
- создание выгодного и понятного интерфейса;
- создание возможности регистрации и входа для пользователей;
- создание страницы документов, маршрутов, настроек и др.;
- создание возможности получать задачи.
Типовой вариант мобильного приложения для торгового агента должен состоять из следующих функциональных частей:
- меню;
- настройки пользовательского интерфейса;
- синхронизация с сервером и получение всей необходимой информации;
- регистрация, авторизация и вход для пользователей;
- учет зарегистрированных пользователей;
- учет документов.
Меню представляет собой набор для выбора одного из представленного функционала приложения.
Настройки позволяют наиболее оптимизировать работу приложения по желанию пользователя.
Синхронизация с сервером необходима для получения настроек приложения под конкретную учетную систему, а так же отправка документов для формирования отчета.
Учет зарегистрированных пользователей позволяет отслеживать динамику работоспособности приложения, что позволяет усовершенствовать приложение.
Торговый агент должен быть наделен неким набором инструментов, для возможности выполнять поставленные задачи.
Набор инструментария торгового агента:
- расписание по дням маршрута торговых точек, по которым торговый агент должен пройти и выполнить поставленные задачи;
- информация о торговой точке и о самом клиенте;
- съемка с камеры;
- отправка данных о своем местоположении;
- отправка результатов проделанной работы;
- настройки хранения информации внутренняя / внешняя память;
- хранение информации в базе данных;
- способ связи с тех. поддержкой.
1.2 Структурная схема приложения
Логическая структура приложения отображает то, как именно связаны между собой экраны (рис. 1).
Рисунок 1. Логическая структура приложения
Физическая структура приложения
Физическая структура приложения отображает структуру папок и файлов (рис. 2). После компиляции проекта, создается *apk файл, который и служит установочным файлом.
Рисунок 2. Физическая структура приложения
Каждая директория предназначена для хранения файлов определенного типа, каждый из которых выполняет определенную функцию:
- папка.gradle отвечает за сборку приложения;
- папка.idea хранит в себе настройки рабочей среды;
- в папке app содержится основной код приложения (верстка, логическая часть);
- папка gradle хранит код сборщика;
- в папке Keys лежат зашифрованные ключи для *apk файла;
- в папке libs содержатся библиотеки;
- в папке src - картинки, элементы дизайна;
- в безымянном файле GITIGNORE содержатся исключения для репозитория.
Тестирование и отладка системы
Приложение тестировалось на множествах смартфонов разных версий и поколений.
В результате проверки, удалось выявить некоторые ошибки.
Не отправлялись запросы на Android 5.0 +, т.к. не было разрешений на подключения к интернету.
Отчет формировался не верно, из-за не проверенного часового пояса системы, в следствии чего время отображалось не верно в документах.
На этапе тестирования были исправлены ошибки.
1.3 Обоснование выбора языка программирования
При создании приложения под Android следует выбрать наиболее подходящие технологии. Выбор конкретных технологий обычно определяется желаниями и возможностями заказчика.
Основой любого android приложения является разметка. Технология разметки, такая как XML, определяют структуру и возможное значение содержимого страницы.
XML (eXtensible Markup Language, расширяемый язык разметки), является первостепенной важности технологией разметки, применяемой при верстки экранов в android приложениях. XML - это дополнение HTML. Важно понять, что XML не является заменой HTML. В большинстве приложениях XML используется для транспортировки данных, а HTML для форматирования и отображения данных.
Одной из наиболее привлекательных черт платформы Android является использование языка программирования Java. SDK Android поддерживает не всю, но достаточно большую часть возможностей стандартной среды выполнения Java (Java Runtime Environment - JRE). Cама платформа Java уже долгое время поддерживает множество различных способов использования XML, причем большинство API для Java, ориентированных на XML, доступны в Android. Примерами таких API могут служить объектная модель документов (Document Object Model - DOM) и простой Java API для XML (Java's Simple API for XML - SAX), которые уже много лет являются частью технологии Java.
Средство общения с сервером.
Сервер - представляет собой некую программу, работающую на удаленном компьютере, и реализующую функционал «общения» с приложениями-клиентами (слушает запросы, распознает переданные параметры и значения, корректно отвечает на них);
Клиент - в нашем случае, программа на мобильном устройстве, которая умеет формировать понятный серверу запрос и читать полученный ответ;
Интерфейс взаимодействия - некий формат и способ передачи / получения запросов / ответов обеими сторонами.
Для реализации связи с сервером была выбрана библиотека okkHttp.
Библиотеку okkHttp можно подключить тремя способами: Gradle, Maven, Jar.
Gradle:
В большинстве случаев для сборки приложений под Android используется именно этот инструмент (здесь и далее для зависимостей будут использоваться Gradle).
Для подключения в файл build.gradle модуля:
compile 'com.squareup.okhttp3:okhttp:3.8.0'
Maven:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.8.0</version>
</dependency>
Jar:
compile 'com.squareup.retrofit2:converter-gson:2.1.0' // Конвертер JSON,
compile 'com.android.support:recyclerview-v7:25.0.0' //RecyclerView
OkkHttp позволяет сделать полноценный REST-клиент, который может выполнять POST, GET, PUT, DELETE. Для обозначения типа и других аспектов запроса используются аннотации.
Базы данных и СУБД для Android-приложений.
Наиболее распространенным подходом для организации информационной базы приложений являются реляционные базы данных.
Особенности организации данных в БД по сравнению с файловыми системами обеспечивают использование одних и тех же данных в различных приложениях. БД сводят к минимуму дублирование данных, прибегая к дублированию только для ускорения доступа к данным или для обеспечения восстановления БД при ее разрушении. Одна из важных черт БД - независимость данных от особенностей прикладных программ, которые их используют, а также возможность создания этих программ в такой форме, что изменение особенностей хранения, логической структуры или значений данных не требует изменения программ их обработки. Другой важной чертой БД является возможность изменения физических особенностей хранения данных без изменения их логической структуры.
Базы данных позволяют хранить и получать доступ к информации. Использование БД позволяет отслеживать данные, автоматически обновлять приложение и распознавать пользователя. Информация может обрабатываться, сохраняться и извлекаться из БД. В БД можно хранить хорошо структурированную информацию, такую как список пользователей, список документов, координаты местоположения. Однако этим вид хранимой информации не ограничивается. В современных информационных системах в базах данных хранятся и тексты, и изображения, и даже исполняемые программы или скрипты.
Функционирование БД обеспечивается совокупностью языковых и программных средств, называемых системой управления базами данных (СУБД).
Основная задача СУБД - предоставить пользователю БД возможность работать с ней, не вникая в детали на уровне аппаратного обеспечения. Иными словами, СУБД позволяет конечному пользователю рассматривать БД как объект более высокого уровня по сравнению с аппаратным обеспечением, а также предоставляет в его распоряжение набор операций, выраженный в терминах языка манипулирования данными высокого уровня (например, набор операций, которые можно выполнять с помощью языка SQL).
Сложные управляемые данными android-приложения по ряду причин используют СУБД. Во-первых, с помощью SQL android-разработчик может переложить большинство задач хранения и управления данными на СУБД. Во-вторых, СУБД лучше человека справляются с управлением большими объемами данных. В-третьих, БД хранят данные постоянно, в то время, как переменные и их данные в методах Java обычно существуют лишь на протяжении запроса данной страницы. Благодаря этому постоянству СУБД могут принимать более разумные решения по поводу того, что относится к производительности работы с диском и кэшированию памяти.
Хранение информации в БД также позволяет разработчику писать меньший объем кода (благодаря тому, что задачи обработки данных передаются СУБД) и рассматривать отвлеченно всю систему управления данными.
Архитектура баз данных для Android-приложений
Рассмотрим внешнее построение системы баз данных. Эта система состоит из двух объектов: android клиента и web-сервера. Между ними должен существовать канал связи. Android клиент посылает запрос на сервер, сервер отсылает обратно ответ. Для сервера, отсылающего обычные статические страницы, такая архитектура подходит. Архитектура же приложения, которая включает в себя базу данных, несколько сложнее.
1. Android смартфон пользователя отправляет HTTP-запрос по определенному URL, с нужными параметрами на сервер. Например, для проверки лицензии при авторизации.
2. Web-сервер принимает запрос, сверяет с базой пользователей, если такая лицензия приложения, привязанная на устройство от которого пришел запрос, то сервер отправляет ответ запрос о том что все прошло успешно.
3. Собственноручно написанная библиотека по обработки серверных запросов обрабатывает ответ от сервера и принимаешь решение о дальнейших действиях, т.е. если успешно открыть главное меню, а если нет то показать уведомление об ошибке.
4. После успешного входа, сервер отдает ряд документов через запрос в JSON формате, после чего запрос разбирается на строки и через SQL запросы записывается в ранее созданную базу данных.
СУБД SQLite
SQLite - это встраиваемая кроссплатформенная БД, которая поддерживает достаточно полный набор команд SQL и доступна в исходных кодах (на языке C).
Работа с базой данных сводится к следующим задачам:
· Создание и открытие базы данных
· Создание таблицы
· Создание интерфейса для вставки данных (insert)
· Создание интерфейса для выполнения запросов (выборка данных)
· Закрытие базы данных
Класс ContentValues:
Используется для добавления новых строк в таблицу. Каждый объект этого класса представляет собой одну строку таблицы и выглядит как ассоциативный массив с именами столбцов и значениями, которые им соответствуют.
Курсоры:
В Android запросы к базе данных возвращают объекты класса Cursor. Вместо того чтобы извлекать данные и возвращать копию значений, курсоры ссылаются на результирующий набор исходных данных. Курсоры позволяют управлять текущей позицией (строкой) в результирующем наборе данных, возвращаемом при запросе.
Класс SQLiteOpenHelper:
Библиотека Android содержит абстрактный класс SQLiteOpenHelper, с помощью которого можно создавать, открывать и обновлять базы данных. Это основной класс, с которым вам придётся работать в своих проектах. При реализации этого вспомогательного класса от вас скрывается логика, на основе которой принимается решение о создании или обновлении базы данных перед ее открытием. Класс SQLiteOpenHelper содержит два обязательных абстрактных метода:
· onCreate() - вызывается при первом создании базы данных
· onUpgrade() - вызывается при модификации базы данных
Также используются другие методы класса:
· onDowngrade (SQLiteDatabase, int, int)
· onOpen(SQLiteDatabase)
· getReadableDatabase()
· getWritableDatabase()
В приложении необходимо создать собственный класс, наследуемый от SQLiteOpenHelper. В этом классе необходимо реализовать указанные обязательные методы, описав в них логику создания и модификации вашей базы.
В этом же классе принято объявлять открытые строковые константы для названия таблиц и полей создаваемой базы данных, которые клиенты могут использовать для определения столбцов при выполнении запросов к базе данных.
1.4 Интерфейс приложения
Интерфейс приложения - элементы и компоненты приложения, обеспечивающие быстрый и удобный и интуитивно-понятный доступ к информации.
Интерфейсом по сути является material-дизайн. Если дизайн приложения привлекает больше внимания, чем услуги, предложенные на нем, то приложение становится неэффективным, не приносящим прибыль.
Цветовая гамма приложения должна радовать, вызывать приятные ассоциации у пользователей, а не отталкивать или вызывать у них дискомфорт. Чересчур яркие цвета могут отвлекать пользователей от содержимого.
Интерфейс приложения составляют: система навигации, компоновка меню, палитра цветов и вспомогательная цветовая палитра сайта, типы и размеры основных шрифтов.
На этом этапе весь функционал распределяется по экранам, принимается решение, где именно будут находиться кнопки и текстовая информация. Определяются, каким образом будут сгруппированы элементы, продумываются поведение элементов. В итоге должно получиться динамичный прототип будущего приложения.
Качественно разработанный макет делает материал упорядоченным, легко-читаемым и удобным для зрительного восприятия.
1.5 Инструкция пользователю
Инструкция мобильного приложения «ОПТ СЕРВИС»
Установка программы «ОПТ СЕРВИС» на мобильное устройство
Вариант 1. Новое оборудование
1. Включите мобильное устройство.
2. По шагам, которые вам будет предлагать мобильное устройство выполните все действия. Для использования мобильного устройства важно создать аккаунт Google, если он не будет создан, не возможно будет установка программы на мобильное устройство.
3. Найдите на рабочем столе мобильного устройства кнопку и нажмите ее.
4. Когда откроется программа «Google Play» нажмите кнопку «Поиск» или знак «лупа» для активации режима поиска в программе и введите в поисковом поле без кавычек название программы на русском языке ОПТ СЕРВИС. После ввода этой записи нажмите кнопку «Поиск» ил и «Лупа». Через некоторое время устройство покажет вам программы, которые имеют указанные вами поисковые данные.
5. Выбирете программу «ОПТ СЕРВИС» разработчик ООО «ЛАЙКСОФТ» (эта программы обычно стоит первой в списке) и коснитесь данной записи в списке программ для выбора.
6. Устройство откроет описание программы и в верхней левой части экрана появится кнопка «Установить», нажмите ее для активации режима установки и подтвердить разрешения для этой программы, после этого начнется процесс загрузки и установки программы в мобильное устройство.
7. По окончании загрузки и установки программы устройство Вам сообщит об окончании установки и в правом верхнем углу экрана появятся две кнопки «ОТКРЫТЬ» или «УДАЛИТЬ», нажимаете «ОТКРЫТЬ».
Вариант 2. Оборудование включено и имеет аккаунт Google
Выполняются пункты с 3 по 7 Варианта 1.
Активация программы «ОПТ СЕРВИС»
После того как вы нажали кнопку «ОТКРЫТЬ» у вас появится окно активации программы «ОПТ СЕРВИС»
Для продолжения активации вы должны получить лицензионный номер у ответственного сотрудника вашей компании или взять его в «Личном кабинете» на сайте http://www.opt-service.com режим «НАСТРОЙКИ» -> «Лицензирование».
Лицензионный ключ вводится только латинскими буквами и цифрами, закончив ввод лицензионного номера, нажмите кнопку «ОК».
Если вы ввели правильный лицензионный номер, то устройство напишет об успешной регистрации и откроет «Главное меню» программы.
В случаях, если программа выдаст иные сообщения, необходимо проверить правильность ввода лицензионного номера и проверить доступность подключение к сети Интернет
Для активации программы необходимо подключение к сети Интернет.
Главное меню программы «ОПТ СЕРВИС»
Изображено главное меню программы. Кнопки имеют следующее назначение:
«СВЯЗЬ» - в одно касание запускает режим обмена данными между мобильным устройством и сервером «ОПТ СЕРВИС».
«ДОКУМЕНТЫ» - позволяет просмотреть документы созданные на мобильном устройстве с возможностью настройки периода просмотра документов, а так же по типам документов (ЗАКАЗ, ВОЗРАТ, ПКО, ФОТО) и статусу документов (ОТПРАВЛЕН, ЧЕРНОВИК или ждет Отправки).
«НАСТРОЙКИ» - позволяют производить дополнительные пользовательские настройки. В частности: менять цветовую схему, устанавливать за сколько дней предупреждать о наступлении срока оплаты, управлять режимом отправки фото (только Wi-Fi или Wi-Fi и мобильный интернет). Данная функция управляет только отправкой фотографий, загрузка фотопрезентера осуществляется только по каналуWi-Fi.
Разделы «ЗАДАЧИ» и «ОТЧЕТЫ» находятся в разработке
«Помощь» - содержит краткие инструкции по оформлению документов в программе «ОПТ СЕРВИС».
«СТАТИСТИКА» - содержит информацию об ID мобильного устройства, версии программного обеспечения, дате и времени последней синхронизации, размере базы данных и объеме хранящихся фото на мобильном устройстве для программы «ОПТ - СЕРВИС».
«СООБЩЕНИЯ» - хранится информация о сообщениях, полученных от руководителя из личного кабинета программы «ОПТ-СЕРВИС».
«МАРШРУТЫ» - основное рабочее окно торгового представителя в котором находится список торговых точек, которые необходимо посетить в течение рабочего дня.
Данное сообщение выходит после входа в главное меню и нажатия кнопки «СВЯЗЬ», когда устройство не может получить данные которые необходимо загрузить в мобильное устройств.
Решение: связаться с ответственным сотрудником вашей фирмы или с сотрудником технической поддержки разработчика, после того как этими сотрудниками будут выполнены необходимые действия, вам необходимо нажать кнопку «СВЯЗЬ» для загрузки информации в ваше мобильное устройство.
Подтверждение наличия данных является процесс загрузки, который у вас будет происходить с отображением информации на экране вашего мобильного устройства.
Маршруты и как оформить документы
После нажатия кнопки «МАРШРУТЫ» откроется окно
Здесь в режиме слайдера вы можете просматривать списки торговых точек распределенные по дням недели. С помощью движения пальца вправо или влево вы можете переключать дни недели.
Внимание! По умолчанию всегда открывается текущий день недели.
В правом верхнем углу нарисована «ЛУПА» для поиска клиента в текущем дне или при настройке все во всем списке торговых точек.
Справа, от названия и адреса торговой точки имеется информация об наличие задолженности у клиента.
Первая строка с суммой обозначает общий долг клиента.
Вторая строка обозначает красным цветом сумму просроченной задолженности и количество дней просрочки. Желтым цветом подсвечивается в случае, если настроен режим предупреждения (Устанавливается в «НАСТРОЙКАХ» за какое количество дней предупреждать о наступлении срока оплаты).
Если обе суммы белые, то срок оплаты не наступил.
Если сведения отсутствуют, то у клиента нет долга.
Для выхода из этого режима необходимо нажать стрелку в верхнем левом углу экрана.
Для планшетов, состояние задолженности отображается так же, как и на смартфонах.
При выборе торговой точки, справа в отдельном окне появляется контактная информация о торговой точке. В правом окне, при движении пальцем влево отображается информация о состоянии задолженности клиента. И детализированные данные по не оплаченным документа, а так же кнопки для настройки отображения информации.
Для выбора торговой точки коснитесь необходимой записи торговой точки, у вас откроется следующее окно.
В этом окне три закладки «Клиент», «Задачи», «Результаты».
«КЛИЕНТ» содержит информацию о названии клиента, названии торговой точки и адресе торговой точки. Поля «Задолженность» и «Просрочка» активные, при касании этих записей вы получаете информацию со списком неоплаченных документов с указание даты номера и суммы долга по документу и суммы поступившей оплаты по документу (если документ оплачен частично).
«ЗАДАЧИ» здесь вы можете сформировать следующие документы:
«Собрать GPS координату» - выполняется 1 раз, на расстоянии 20-50 метров от торговой точки на улице, сохраняется в базе данных для обеспечения доставки товара.
«СОБРАТЬ ЗАКАЗ» - позволяет оформить заказ в торговой точке. Обеспечивает возможность доступа к списку товаров, остаткам, ценам и вводу данных для оформления заказа.
«ПРИНЯТЬ ОПЛАТУ» - позволяет при наличных расчетах с торговой точкой сформировать документ ПКО с возможностью частичной или полной оплаты по выбранной накладной.
«ОФОРМИТЬ ВОЗВРАТ» - позволяет оформить документ возврат от покупателя. Работает так же, как заказ покупатель.
Особенностью данного документа является то, что в списке товаров не отображается остаток на складе, сумма возврата рассчитывается из прайса действующего для данной торговой точки на момент оформления возврата.
«СДЕЛАТЬ ФОТО» - позволяет сделать фотографию торговой точки или полки в торговой точке. Можно сделать до 5 фотографий прикрепленных к визиту.
«РЕЗУЛЬТАТЫ» - здесь вы можете посмотреть, какие результаты визит достигнуты, то есть документы, сформированные в мобильном устройстве.
Оформление «ЗАКАЗА»
В закладке «ЗАДАЧИ» выбираете касанием пункт «ОФОРМИТЬ ЗАКАЗ». У вас откроется окно «ПРАЙС». Со списком товарных групп расположенных, в том порядке, как на бумажном прайс-листе и в вашей учетной системе. Необходимо открывая по порядку необходимые папки, дойти до уровня товара, где будет показано наименование товара, остаток на складе и цена предусмотренная для данного клиента.
При касании необходимого товара на экране появится клавиатура для ввода необходимого количества товара. После ввода количества, на клавиатуре необходимо нажать в правом нижнем углу клавиатуры ЗЕЛЕНУЮ КНОПКУ СО СТРЕЛКОЙ, действие этой кнопки идентично действию кнопки «Enter» на клавиатуре компьютера.
Внимание!
Для изменения введенных данных необходимо выбрать необходимую позицию товара и при появлении данных на клавиатуре нажать СТРЕЛОЧКУ С КРЕСТИКОМ для стирания записи о количестве или ввести необходимое количество и нажать кнопку с ЗЕЛЕНОЙ СТРЕЛОЧКОЙ для подтверждения изменений.
В товарах так же, как и в маршрутах используются механизмы слайдера для получения или отображения информации.
Пример: строка «ИТОГИ» «ПРАЙС» «ИСТОРИЯ»
Находясь в «ПРАЙС» при движении пальцем в право - вы попадете на экран «ИТОГ», где у вас будет отображена собранная информация по товарам которые вы оформили в заказ, его количество и стоимость по каждой товарной позиции.
В нижней части экрана отображается информация и Итоговыми значениями по сумме, весу, количеству в шт. и кг.
Находясь в «ПРАЙС» при движении пальцем в лево во попадаете в режим - «ИСТОРИЯ ПРОДАЖ», где отображается список товаров по последним четырем продажам. Представлена информация по Заказам, Реализациям, Возвратам и остатку товара на полке, с указанием дат оформления заказа.
В этом режиме вы также можете оформлять заказ, работая только со списком товаров, которые уже поставлялись в торговую точку. Для добавления товаров, которые вы планируете отгрузить впервые, необходимо работать через «ПРАЙС», так как в этом режиме вы имеете доступ к списку всех товаров, которые имеются в наличие на складе вашей фирмы.
Описание знаков и функций, расположенных в верхней строке, справа от надписи «ЗАКАЗ».
«ЛУПА» - позволяет искать товары по любым сочетаниям букв и цифр (обеспечивая поиск товаров при большом их количестве. Активируется нажатием на этот знак и после ввода букв или цифр нажать «ПОИСК» или «ЛУПУ» (в разных моделях телефоны и версиях системы Андроид используются разные кнопки).
«ВОРОНКА» (фото. 1) - это фильтр по товарам, активируется нажатием на данную кнопку.
По умолчанию зеленые галочки с права, от надписи «НАЛИЧИЕ» и «ЦЕНА» установлены, что позволяет мобильному устройству убрать из списка товары, которые отсутствуют на складе и на которые не установлены цены. При снятии галочек, будут показаны товары отсутствующие на складе или без цены. Данная настройка работает как вместе, так и раздельно.
Фото.1
Знак, находящийся справа от «ВОРОНКИ» - это режим отображения по товарам, активируется нажатием на данную кнопку.
По умолчанию всегда товары отображаются режим «Списком с папками», при выборе режима «Список», товары будут показаны списком в алфавитном порядке без папок.
Фото.2
При выборе режима «ПРЕЗЕНТОР» информация на экране устройства отображается в виде фотографий товара малого формата с информацией по названию, остатку и цене за единицу товара.
При касании поля фотография и удержании более 2 сек. Происходит увеличение фото по размеру экрана мобильного устройства. Для возврата обратно, необходимо нажать кнопку «СТРЕЛОЧКА НАЗАД».
В этом режиме так же возможен ввод данных для оформления количества заказываемого товара, путем короткого касания желтого поля наименования товара.
Появится клавиатура для ввода данных. Дальнейшие действия такие же, как при оформлении в режиме «Список с папками».
Выход из режима оформления ЗАКАЗ.
Для выхода из режима «ЗАКАЗ» необходимо нажать стрелочку слева от надписи «ЗАКАЗ» в верхней части экрана. После этого появится диалоговое окно как на фото ниже.
ВЫ можете выбрать ТИП ОПЛАТЫ, если предусмотрено учетной политикой вашей организации.
ДАТУ ДОСТАВКИ, по умолчанию подставляется следующий день от текущей даты. Если вам необходимо изменить дату, то коснитесь поля дата, откроется календарь, где вы сможете выбрать нужную дату и он исчезнет.
Ввести комментарий, для активации коснитесь слова Комментарий. Появится штатная клавиатура для ввода необходимой информации. Объем комментария до 1000 знаков с учетом пробелов.
Действия кнопок: «Не охранять», «Черновик», «Отправить».
Режим «Не охранять» - предназначен для выхода из режима оформления «ЗАКАЗ» без сохранения данных.
Режим «Черновик» - предназначен для сохранения ЗАКАЗа в документах на мобильном устройстве, с возможностью последующего редактирования, но без отправки в офис.
Режим «Отправить» предназначен для сохранения ЗАКАЗа и последующей отправки в офис для оформления операторами.
ВАЖНО!!!
После сохранения вы попадаете в «ЗАДАЧИ», для выполнения других задач.
Для выхода из режима «ВИЗИТ», после выполнения всех или одной, нажмите стрелку слева от надписи «ВИЗИТ». Вы вернетесь в меню «МАРШРУТЫ» для продолжения оформления документов в других торговых точках по маршруту.
Для выхода из режима «МАРШРУТЫ», нажмите стрелку слева от надписи «МАРШРУТ» в попадете в главное меню программы.
Для отправки данных и получения обновленных сведений по остаткам и дебиторской задолженности из учетной системы вашего предприятия нажмите кнопку СВЯЗЬ».
Оформление документа «ВОЗВРАТ»
Оформление документа «ВОЗВРАТ» аналогично оформлению документа «ЗАКАЗ».
Сохранение и выход из документа «ВОЗВРАТ» аналогично выходу из документа «ЗАКАЗ».
Сделать Фото.
Нажимаете в окне задач «Сделать фото». После этого происходит активация режима фотоаппарата вашего мобильного устройства. Вы производите фотографирование и сохраняете фотографии в мобильном устройстве. При активации режима «СВЯЗЬ» происходит отправка фотографий на сервер.
ВАЖНАЯ ИНФОРМАЦИЯ,
Срок хранения фотографий на мобильном устройстве составляет 10 дней, для исключения случаев переполнения памяти мобильного устройства.
Загрузка фотографий для фото-презентора осуществляется только по каналу связи Wi-Fi.
2. Листинг программы
программа приложение интерфейс
package com.likesoft.shop;
import android.app. Activity;
import android.app. Application;
import android.content. Intent;
import android.content. SharedPreferences;
import android.content. SharedPreferences. Editor;
import android.os. Environment;
import android.preference. PreferenceManager;
import android.view. ViewConfiguration;
import com.crittercism.app. Crittercism;
import com.google.android.gcm.GCMRegistrar;
import com.likesoft.shop.services. SendService;
import com.likesoft.shop.theming. Theming;
import com.likesoft.shop.utils. Preparings;
import java.lang.reflect. Field;
public class MerkuryApplication extends Application {
public static final int THUMBNAILS_SIZE = 150;
// public static String OPTServiceFolder = Environment.getExternalStorageDirectory().toString()+»/optservice»;
public static final String PhotosFolder = Environment.getExternalStorageDirectory().toString() + «/optservice/photos»;
public static final String ExternalDbFolder = Environment.getExternalStorageDirectory().toString() + «/optservice/database»;
public static SharedPreferences pref;
@Override
public void onCreate() {
super.onCreate();
// Настройка по умолчанию
SharedPreferences prefDef = PreferenceManager.getDefaultSharedPreferences(this);
if (! prefDef.getBoolean («Default_setting», false)) {
Editor ed = prefDef.edit();
ed.putString («GPS_ALLOWED», «0»);
ed.putBoolean («Default_setting», true);
ed.commit();
}
Thread.setDefaultUncaughtExceptionHandler (Log.getInstance(this));
//GCM
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
//Crittercism
Crittercism.initialize (getApplicationContext(), «afd8389a692f411698b4ff089678219900555300»);
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class
getDeclaredField («sHasPermanentMenuKey»);
if (menuKeyField!= null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean (config, false);
}
} catch (Exception e) {
e.printStackTrace();
}
String gcmId = GCMRegistrar.getRegistrationId(this);
if (gcmId.equals(«»)) { // Если отсутствует, то регистрируемся
GCMRegistrar.register (this, GCMConfig.SENDER_ID);
} else {
Log.i (this, «GCM: Already registered:» + gcmId);
}
pref = PreferenceManager.getDefaultSharedPreferences(this);
Editor ed = pref.edit();
ed.putString («opened_visit», «»);
ed.commit();
// Копируем базу с флешки в приложуху
// File f = new File (Environment.getExternalStorageDirectory().toString()+»/db.sqlite»);
// try {
// FileManagement.copy (f, new File (DbOpenHelper.getPath(this)));
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// Отправка данных
Intent i = new Intent (this, SendService.class);
startService(i);
}
@Override
public void onTerminate() {
super.onTerminate();
}
public static boolean PrepareActivity (Activity a) {
Theming.switchStyle(a);
if (! Preparings.checkVersion(a)) {
return false;
}
if (! Preparings.checkGPS(a)) {
return false;
}
return Preparings.checkGPRS(a);
}
}
package com.likesoft.shop.db;
import android.content. Context;
import android.content. SharedPreferences;
import android.database. Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os. Environment;
import android.preference. PreferenceManager;
import android.util. Log;
import com.likesoft.shop. MerkuryApplication;
import com.likesoft.shop.utils. PhotosManagement;
import java.io. File;
public class DbOpenHelper extends SQLiteOpenHelper {
private static final String TAG = «DbOpenHelper»;
private static final String DATABASE_NAME = «db.db»;
private static final int DATABASE_VERSION = 23;
private static DbOpenHelper mInstance;
private static SQLiteDatabase db;
// Структура описана по след. ссылке:
//https://docs.google.com/a/mobexpert.ru/document/d/1oe5RmmOkxxHxypKRv_4DAn8kROQ7GlC3_9IisIo0Cec/edit#
private static final String[] CREATE_SCRIPT = new String[] {
«CREATE TABLE tabstates (name text PRIMARY KEY,» +
«md float)»,
«CREATE TABLE customers (_id int PRIMARY KEY,» +
«name text,» +
«searchname text,» +
«customertype_id int)»,
«CREATE TABLE customertypes (_id int PRIMARY KEY,» +
«name text,» +
«receivableviewmode int,» +
«image_text text,» +
«image_url text)»,
«CREATE TABLE shops (_id int PRIMARY KEY,» +
«name text,» +
«searchname text,» +
«address text,» +
«customer_id int,» +
«phone text,» +
«latitude float, » +
«longitude float,» +
«status int,» +
«shopclass_id int,» +
«list_visited text,» +
«class_trade_point text)»,
«CREATE TABLE shopclasses (_id int PRIMARY KEY,» +
«name text,» +
«image_text text,» +
«image_url text)»,
«CREATE TABLE contactfaces (_id text PRIMARY KEY,» +
«name text,» +
«position text,» +
«customer_id int,» +
«shop_id int,» +
«state int)»,
«CREATE TABLE contactdata (_id text PRIMARY KEY,» +
«type int,» +
«value text,» +
«contactface_id int,» +
«customer_id int,» +
«shop_id int,» +
«state int)»,
«CREATE TABLE routes (_id int PRIMARY KEY,» +
«shop_id int,» +
«ord int,» +
«weekday int)»,
«CREATE TABLE receivable (_id int PRIMARY KEY,» +
«customer_id int,» +
«shop_id int,» +
«agent_id int,» +
«receivable_sum float,» +
«overdue_sum float,» +
«overdue_days int)»,
«CREATE TABLE debtdocs (_id int PRIMARY KEY,» +
«customer_id int,» +
«shop_id int,» +
«agent_id int,» +
«agent_name text,» +
«doc_uid text,» +
«doc_name text,» +
«doc_date datetime,» +
«doc_type int,» +
«doc_firm_id int,» +
«doc_contract_id int,» +
«total float,» +
«debt float,» +
«payment_date datetime)»,
«CREATE TABLE docs (_id text PRIMARY KEY,» +
«type int,» +
«state int)»,
«CREATE TABLE docproperties (doc_id text,» +
«property int,» +
«value text)»,
«CREATE TABLE docitems (doc_id text,» +
«multirow_id int,» +
«object_id int,» +
«object_name text, » +
«object_property text,» +
«amount float, » +
«unit_id int,» +
«unit_name text,» +
«unit_k float,» +
«price float,» +
«weight float)»,
«CREATE TABLE pricelists (_id int PRIMARY KEY,» +
«name text)»,
«CREATE TABLE prices (_id int PRIMARY KEY,» +
«pricelist_id int,» +
«goods_id int,» +
«price float)»,
«CREATE TABLE settings (_id int PRIMARY KEY,» +
«name text,» +
«value text)»,
«CREATE TABLE deftasks (_id int PRIMARY KEY,» +
«type int,» +
«task_text text,» +
«required bit,» +
«depend_on text,» +
«ord int,» +
«extra text)»,
«CREATE TABLE goods (_id int PRIMARY KEY,» +
«tree_id int,» +
«name text,» +
«searchname text,» +
«fullname text,» +
«isfolder bit,» +
«parent_id int,» +
«unit_id int,» +
«sort text,» +
«lft int,» +
«rght int,» +
«minorder float)»,
«CREATE TABLE goodsimages (_id int PRIMARY KEY,» +
«goods_id int,» +
«hashcode text,» +
«size int)»,
«CREATE TABLE units (_id int PRIMARY KEY,» +
«name text,» +
«def bit,» +
«k float,» +
«owner_id int,» +
«onlyint bit,» +
«weight float,» +
«barcode text)»,
«CREATE TABLE firms (_id int PRIMARY KEY,» +
«name text,» +
«defpricelist_id int)»,
«CREATE TABLE contracts (_id int PRIMARY KEY,» +
«name text,» +
«firm_id int,» +
«customer_id int,» +
«shop_id int,» +
«limit_days int,» +
«limit_sum float,» +
«pricelist_id int)»,
«CREATE TABLE stores (_id int PRIMARY KEY,» +
«name text)»,
«CREATE TABLE stocks (_id int PRIMARY KEY,» +
«store_id int,» +
«goods_id int,» +
«stock float)»,
«CREATE TABLE goodspackage (_id int PRIMARY KEY,» +
«name text)»,
«CREATE TABLE goodspackage_items (_id int PRIMARY KEY,» +
«gpackage_id int,» +
«goods_id int)»,
«CREATE TABLE messages (_id text,» +
«message_text text,» +
«message_date datetime,» +
«message_new bool,» +
«message_from text,» +
«message_to text)»,
«CREATE TABLE goodssaleplan (_id int,» +
«agent_id int,» +
«goods_name text,» +
«plan float,» +
«plan_unit text,» +
«fact float,» +
«current float,» +
«forecast float)»,
«CREATE TABLE unitaliases (_id int,» +
«unit_name text,» +
«unit_alias text)»,
«CREATE TABLE agentsettings (_id int PRIMARY KEY,» +
«name text,» +
«value text)»,
«CREATE TABLE saleshistory (_id int PRIMARY KEY,» +
«period datetime,» +
«shop_id int,» +
«goods_id int,» +
«order_amount float,» +
«shipment float,» +
«stock float,» +
«outdate float)»,
«INSERT INTO unitaliases VALUES (1, 'шт.', 'шт')»,
«INSERT INTO unitaliases VALUES (2, 'шт.', 'шт.')»,
«INSERT INTO unitaliases VALUES (3, 'шт.', 'штук')»,
«INSERT INTO unitaliases VALUES (4, 'шт.', 'штука')»,
«INSERT INTO unitaliases VALUES (5, 'шт.', 'штуки')»,
«INSERT INTO unitaliases VALUES (6, 'бут.', 'бут')»,
«INSERT INTO unitaliases VALUES (7, 'бут.', 'бут.')»,
«INSERT INTO unitaliases VALUES (8, 'бут.', 'бутылка')»,
«INSERT INTO unitaliases VALUES (9, 'бут.', 'бутылок')»,
«INSERT INTO unitaliases VALUES (10, 'бут.', 'бутылки')»,
«INSERT INTO unitaliases VALUES (11, 'пач.', 'пач')»,
«INSERT INTO unitaliases VALUES (12, 'пач.', 'пач.')»,
«INSERT INTO unitaliases VALUES (13, 'пач.', 'пачка')»,
«INSERT INTO unitaliases VALUES (14, 'пач.', 'пачек')»,
«INSERT INTO unitaliases VALUES (15, 'пач.', 'пачки')»,
«INSERT INTO unitaliases VALUES (16, 'руб.', 'руб')»,
«INSERT INTO unitaliases VALUES (17, 'руб.', 'руб.')»,
«INSERT INTO unitaliases VALUES (18, 'руб.', 'рубль')»,
«INSERT INTO unitaliases VALUES (19, 'руб.', 'рублей')»,
«INSERT INTO unitaliases VALUES (20, 'руб.', 'рубли')»,
«INSERT INTO unitaliases VALUES (21, 'кг.', 'кг')»,
«INSERT INTO unitaliases VALUES (22, 'кг.', 'кг.')»,
«INSERT INTO unitaliases VALUES (23, 'кг.', 'килограмм')»,
«INSERT INTO unitaliases VALUES (24, 'кг.', 'килограммов')»,
«INSERT INTO unitaliases VALUES (25, 'кг.', 'килограмма')»,
«INSERT INTO tabstates VALUES ('customers', 0.0)»,
«INSERT INTO tabstates VALUES ('customertypes', 0.0)»,
«INSERT INTO tabstates VALUES ('shops', 0.0)»,
«INSERT INTO tabstates VALUES ('shopclasses', 0.0)»,
«INSERT INTO tabstates VALUES ('receivable', 0.0)»,
«INSERT INTO tabstates VALUES ('documents', 0.0)»,
«INSERT INTO tabstates VALUES ('docproperties', 0.0)»,
«INSERT INTO tabstates VALUES ('docitems', 0.0)»,
«INSERT INTO tabstates VALUES ('pricelists', 0.0)»,
«INSERT INTO tabstates VALUES ('prices', 0.0)»,
«INSERT INTO tabstates VALUES ('deftasks', 0.0)»,
«INSERT INTO tabstates VALUES ('routes', 0.0)»,
«INSERT INTO tabstates VALUES ('goods', 0.0)»,
«INSERT INTO tabstates VALUES ('goodsimages', 0.0)»,
«INSERT INTO tabstates VALUES ('units', 0.0)»,
«INSERT INTO tabstates VALUES ('stores', 0.0)»,
«INSERT INTO tabstates VALUES ('stocks', 0.0)»,
«INSERT INTO tabstates VALUES ('firms', 0.0)»,
«INSERT INTO tabstates VALUES ('contracts', 0.0)»,
«INSERT INTO tabstates VALUES ('contactfaces', 0.0)»,
«INSERT INTO tabstates VALUES ('contactdata', 0.0)»,
«INSERT INTO tabstates VALUES ('debtdocs', 0.0)»,
«INSERT INTO tabstates VALUES ('settings', 0.0)»,
«INSERT INTO tabstates VALUES ('goodspackage', 0.0)»,
«INSERT INTO tabstates VALUES ('goodspackage_items', 0.0)»,
«INSERT INTO tabstates VALUES ('goodssaleplan', 0.0)»,
«INSERT INTO tabstates VALUES ('unitaliases', 0.0)»,
«INSERT INTO tabstates VALUES ('agentsettings', 0.0)»,
«INSERT INTO tabstates VALUES ('saleshistory', 0.0)»,
«CREATE TABLE commenttemplate (_id INTEGER PRIMARY KEY AUTOINCREMENT,» +
«comment text,» +
«count int)»,
«CREATE INDEX docproperties_index on docproperties (doc_id, property)»,
«CREATE INDEX docitems_index on docitems (doc_id, multirow_id, object_id)»,
«CREATE TABLE forms (_id int PRIMARY KEY,» +
«name text)»,
«CREATE TABLE form_items (_id int PRIMARY KEY,» +
«form_id int,» +
«name text,» +
«type int,» +
«vals text,» +
«section text,» +
«doc_id text,» +
«required bit,» +
«ord int)»,
«CREATE TABLE reports (_id int PRIMARY KEY,» +
«customer text,» +
«address text,» +
«date text,» +
«price float,» +
«stock_type text)»,
«INSERT INTO tabstates VALUES ('forms', 0.0)»,
«INSERT INTO tabstates VALUES ('form_items', 0.0)»,
};
private static String getDbName (Context context) {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
if (pref.getString («dbstorage», «internal»).equals («internal»))
return DATABASE_NAME;
return getPath (context, false);
}
public DbOpenHelper (Context context) {
super (context, getDbName(context), null, DATABASE_VERSION);
}
/**
* Get default instance of the class to keep it a singleton
*
* @param context the application context
*/
public static DbOpenHelper getInstance (Context context) {
if (mInstance == null) {
mInstance = new DbOpenHelper(context);
}
return mInstance;
}
/**
* Returns a writable database instance in order not to open and close many
* SQLiteDatabase objects simultaneously
*
* @return a writable instance to SQLiteDatabase
*/
public SQLiteDatabase getDb() {
if ((db == null) || (! db.isOpen())) {
db = this.getWritableDatabase();
}
return db;
}
@Override
public void close() {
super.close();
if (db!= null) {
db.close();
db = null;
}
mInstance = null;
}
@Override
public void onCreate (SQLiteDatabase db) {
for (String sql_line: CREATE_SCRIPT) {
try {
db.execSQL (sql_line);
} catch (Exception e) {
String err = (e.getMessage() == null)? «Unknown Error»: e.getMessage();
Log.e (TAG, err);
}
}
PhotosManagement.renameOldPhotos(db);
}
@Override
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 6) {
try {
Cursor cursor = db.rawQuery («SELECT count(name) FROM sqlite_master WHERE type='table' AND name='agentsettings'», null);
if (cursor.moveToFirst()) {
if (cursor.getInt(0) == 0) {
db.execSQL («CREATE TABLE agentsettings (_id int PRIMARY KEY,» +
«name text,» +
«value text)»);
db.execSQL («DELETE FROM tabstates WHERE name='agentsettings'»);
db.execSQL («INSERT INTO tabstates VALUES ('agentsettings', 0.0)»);
}
cursor.close();
}
db.execSQL («CREATE TABLE saleshistory (_id
int PRIMARY KEY,» +
«period datetime,» +
«shop_id int,» +
«goods_id int,» +
«order_amount float,» +
«shipment float,» +
«stock float,» +
«outdate float)»);
db.execSQL («INSERT INTO tabstates VALUES ('saleshistory', 0.0)»);
} catch (Exception e) {
String err = (e.getMessage() == null)? «Unknown Error»: e.getMessage();
Log.e (TAG, err);
}
}
if (oldVersion < 7) {
try {
db.execSQL («CREATE TABLE goodssaleplan (_id
int,» +
«agent_id int,» +
«goods_name text,» +
«plan float,» +
«plan_unit text,» +
«fact float,» +
«current float,» +
«forecast float)»);
db.execSQL («DELETE FROM goodssaleplan»);
db.execSQL («ALTER TABLE goods ADD COLUMN minorder float»);
} catch (Exception e) {
String err = (e.getMessage() == null)? «Unknow Error»: e.getMessage();
Log.e (TAG, err);
}
}
if (oldVersion < 8) {
db.execSQL («CREATE TABLE commenttemplate (_id INTEGER PRIMARY KEY AUTOINCREMENT,» +
«comment text,» +
«count int)»);
}
if (oldVersion < 9) {
db.execSQL («ALTER TABLE deftasks ADD COLUMN ord int»);
db.execSQL («ALTER TABLE goods ADD COLUMN tree_id int»);
db.execSQL («ALTER TABLE goods ADD COLUMN lft int»);
db.execSQL («ALTER TABLE goods ADD COLUMN rght int»);
}
if (oldVersion < 12) {
db.execSQL («CREATE INDEX docproperties_index on docproperties (doc_id, property)»);
db.execSQL («CREATE INDEX docitems_index on docitems (doc_id, multirow_id, object_id)»);
}
if (oldVersion < 14) {
// При переходе на 14ю версию поменалась папка где лежат фотки, переименуем ее
File old = new File (Environment.getExternalStorageDirectory().toString() + «/mercuryPhotos»);
File current = new File (MerkuryApplication. PhotosFolder);
if (old.exists()) {
if (! current.exists())
old.renameTo(current);
}
}
if (oldVersion < 15) {
db.execSQL («DROP TABLE goodspackage_items»);
db.execSQL («CREATE TABLE goodspackage_items (_id
int PRIMARY KEY,» +
«gpackage_id int,» +
«goods_id int)»);
}
if (oldVersion < 16) {
db.execSQL («CREATE TABLE forms (_id int PRIMARY KEY,» +
«name text)»);
db.execSQL («CREATE TABLE form_items (_id int PRIMARY KEY,» +
«form_id int,» +
«name text,» +
«type int,» +
«vals text,» +
«section text,» +
«required bit)»);
db.execSQL («INSERT INTO tabstates VALUES ('forms', 0.0)»);
db.execSQL («INSERT INTO tabstates VALUES ('form_items', 0.0)»);
db.execSQL («ALTER TABLE deftasks ADD COLUMN extra text»);
}
if (oldVersion < 17) {
db.execSQL («ALTER TABLE units ADD COLUMN barcode text»);
}
if (oldVersion < 18) {
db.execSQL («ALTER TABLE form_items ADD COLUMN ord int»);
}
if (oldVersion < 19) {
db.execSQL («ALTER TABLE shops ADD COLUMN class_trade_point text»);
db.execSQL («ALTER TABLE shops ADD COLUMN list_visited text»);
}
if (oldVersion < 20) {
db.execSQL («CREATE TABLE reports (_id int PRIMARY KEY,» +
«customer text,» +
«address text,» +
«date text,» +
«price float,» +
«stock_type text)»);
}
if (oldVersion < 21) {
db.execSQL («BEGIN TRANSACTION»);
db.execSQL («CREATE TEMPORARY TABLE shops_backup («+
«_id int PRIMARY KEY,» +
«name text,» +
«searchname text,» +
«address text,» +
«customer_id int,» +
«phone text,» +
«latitude float, » +
«longitude float,» +
«status int,» +
«shopclass_id int)»);
db.execSQL («INSERT INTO shops_backup SELECT» +
«_id» +
«, name «+
«, searchname» +
«, address» +
«, customer_id» +
«, phone» +
«, latitude» +
«, longitude» +
«, status» +
«, shopclass_id FROM shops»);
db.execSQL («DROP TABLE shops»);
db.execSQL («CREATE TABLE shops (_id int PRIMARY KEY,» +
«name text,» +
«searchname text,» +
«address text,» +
«customer_id int,» +
«phone text,» +
«latitude float, » +
«longitude float,» +
«status int,» +
«shopclass_id int)»);
db.execSQL («INSERT INTO shops SELECT» +
«_id» +
«, name «+
«, searchname» +
«, address» +
«, customer_id» +
«, phone» +
«, latitude» +
«, longitude» +
«, status» +
«, shopclass_id FROM shops_backup»);
db.execSQL («DROP TABLE shops_backup»);
db.execSQL («ALTER TABLE shops ADD COLUMN list_visited text»);
db.execSQL («ALTER TABLE shops ADD COLUMN class_trade_point text»);
db.execSQL («COMMIT»);
}
if (oldVersion < 22) {
db.execSQL («UPDATE shops SET list_visited='ORDER:; RETURN:; VANSHIPMENT:', class_trade_point='Выберите класс'»);
}
if (oldVersion < 23) {
db.execSQL («ALTER TABLE form_items ADD COLUMN doc_id text»);
db.execSQL («UPDATE form_items SET doc_id=''»);
}
// Если происходит обновление то полная синхронизация всегда
db.execSQL («UPDATE tabstates SET md = 0.0»);
}
public static String getPath (Context context) {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
return getPath (context, pref.getString («dbstorage», «internal»).equals («internal»));
}
public static String getPath (Context context, boolean internal) {
if (internal)
return context.getDatabasePath (DATABASE_NAME).getAbsolutePath();
else
return MerkuryApplication. ExternalDbFolder + «/» + DATABASE_NAME;
}
}
Заключение
В дипломной работе производится разработка системы, которая является недорогим программным решением, и удовлетворяет всем необходимым требованиям, предъявляемым к системам такого рода. Использование для проектирования таких средств как Apache, MySQL, PHP значительно сокращает затраты на лицензирование программного обеспечения и следовательно цену конечного программного продукта.
Создание Интернет-магазина - сложный и кропотливый процесс, в котором необходимо учитывать все мелочи для достижения поставленной цели.
В ходе выполнения дипломной работы была проанализирована предметная область связанных с разработкой Интернет-магазина по продажам товаров автоэлектроники для ОАО «Автоэлектроника».
Разработанный веб-сайт имеет понятный и простой пользовательский интерфейс, позволяет отображать информацию о товарах, о категориях товаров, позволяет клиентам добавлять товары в корзину, оформлять заказ.
Подобные документы
Разработка программного решения по созданию мобильного приложения. Изучение технологий для разработки приложений. Анализ работы торговых агентов. Обоснование выбора языка программирования. Проектирование интерфейса структуры и верстка, листинг программы.
дипломная работа [2,2 M], добавлен 08.06.2017Общая характеристика и анализ требований к разрабатываемому приложению, функциональные особенности и сферы практического применения. Проектирование базы данных и выбор системы управления ею. Тестирование приложения и выбор языка программирования.
дипломная работа [791,8 K], добавлен 10.07.2017Общее описание разрабатываемого приложения, его актуальность и сферы практического применения. Выбор среды разработки и языка программирования, 3D-движка. Архитектура приложения, интерфейса и его главных элементов, взаимодействие с пользователем.
дипломная работа [317,5 K], добавлен 10.07.2017Проектирование вариантов использования приложения. Анализ существующей версии приложения. Обоснование выбора инструментальных программных средств. Проектирование интерфейса пользователя. Адаптация под мобильные устройства. Описание программного продукта.
курсовая работа [2,8 M], добавлен 25.06.2017Проектирование структуры программы, принцип ее работы, сферы практического использования и оценка возможностей. Выбор и обоснование среды программирования. Разработка пользовательского интерфейса и модулей приложения. Проведение тестирования программы.
курсовая работа [637,7 K], добавлен 14.01.2015Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.
курсовая работа [1,6 M], добавлен 19.04.2017Программная реализация настольного приложения с использованием языка программирования C#. Проектирование и структура пользовательского интерфейса, требования к нему и оценка функциональности. Разработка руководства пользователя и его использование.
курсовая работа [297,6 K], добавлен 10.03.2015Общая характеристика и функциональное назначение проектируемого программного обеспечения, требования к нему. Разработка и описание интерфейса клиентской и серверной части. Описание алгоритма и программной реализации приложения. Схема базы данных.
курсовая работа [35,4 K], добавлен 12.05.2013Теоретические основы разработки приложения, реализующего подсвечивание ключевых слов. Описание используемых процедур и функций, структуры программы, интерфейса пользователя. Системные требования для работы приложения, анализ результаты его тестирования.
курсовая работа [1,2 M], добавлен 07.07.2012Создание специального программного приложения, способного вести поисковую систему необходимой нам информации. Требования к данной информационной системе, ее функциональные особенности и сферы практического применения. Выбор и обоснование языка и среды.
курсовая работа [541,1 K], добавлен 09.04.2015