Пояснительная записка ВКР (1209271), страница 4
Текст из файла (страница 4)
Рисунок 3.6 – Каталог src
Папка main имеет сложную структуру:
- AndroidManifest.xml представляет файл манифеста, который описывает фундаментальные характеристики приложения, его конфигурацию и определяет каждый из компонентов данного приложения.
- Папка java содержит исходные файлы приложения. По умолчанию в нем находится файл класса MainActivity, который запускается по умолчанию при старте приложения.
- Папка res содержит каталоги с ресурсами, в частности она содержит следующие каталоги:
- папка drawable предназначена для хранения изображений, используемых в приложении;
- папка layout предназначена для хранения файлов, определяющих графический интерфейс. По умолчанию здесь есть два файла activity_main.xaml и content_main.xaml, которые определяют интерфейс для единственной в проекте activity – MainActivity;
- папка menu содержит различные xml-файлы определений меню приложения. По умолчанию здесь определен один файл menu_main.xml;
- папка mipmap содержит файлы изображений, которые переназначены для создания иконки приложения при различных разрешениях экрана;
- папка values хранит различные xml-файлы, содержащие коллекции ресурсов.
Одним из компонентов android-приложения является деятельность (activity). Деятельность представляет собой визуальный пользовательский интерфейс для приложения – окно. Как правило, окно полностью заполняет экран мобильного устройства, но может иметь размеры меньше чем у экрана. Деятельность может также использовать дополнительные окна, например всплывающее диалоговое окно, которое запрашивает пользовательский ответ для основной деятельности, или окно уведомления о каком-либо событии в приложении или системе. Приложение может содержать несколько деятельностей. Каждая деятельность независима от других. При открытии новой деятельности работа предыдущей приостанавливается, а сама она вносится и сохраняется в стек деятельностей.
Деятельности могут взаимодействовать между собой. Как правило, одна из деятельностей приложения (окно которое открывается при запуске приложения) помечено как главное. Также из текущей деятельности можно запустить любую другую деятельность, даже если она определена в другом приложении.
-
Программная реализация
Графический интерфейс пользователя представляет собой иерархию объектов android.view.View и android.view.ViewGroup.Каждый обект ViewGroup представляет контейнер, который содержит и упорядочивает дочерние объекты View. Объекты View представляют собой элементы управления и прочие виджеты, например, кнопки, текстовые поля и т.д., через которые пользователь взаимодействует с программой.
Большинство визуальных элементов, наследующихся от класса View, такие как кнопки, текстовые поля и другие, располагаются в пакете android.widget.
Разметка определяет визуальную структуру пользовательского интерфейса. Установить разметку можно двумя способами:
-объявить элементы интерфейса в XML;
-установить элементы разметки во время выполнения приложения;
-сочетание обоих способов - базовые элементы разметки определить в XML, а остальные добавлять во время выполнения.
Объявление пользовательского интерфейса в файлах XML позволяет отделить интерфейс приложения от кода. Что означает, что мы можем изменять определение интерфейса без изменения и перекомпиляции кода. Например, в приложении могут быть определены разметки в файлах XML для различных ориентаций монитора, различных размеров устройств, различных языков и т.д. Кроме того, объявление разметки в XML позволяет легче визуализировать структуру интерфейса и облегчает отладку.
Создание разметки в XML облегчает тот факт, что при объявлении элемента интерфейса в XML часто применяются те же классы и методы, а элементы, как правило, соответствуют классам, а их атрибуты - методам. Правда, некоторые различия в именовании все равно есть. Например, элемент разметки в XML EditText имеет атрибут text, который соответствует методу EditText.setText().
При создании разметки в XML следует соблюдать некоторые правила: каждый файл разметки должен содержать один корневой элемент, который должен представлять объект View или ViewGroup. XML-файлы разметки должны находиться в проекте в каталоге res/layout/.
При компиляции каждый XML-файл разметки компилируется в ресурс View. Загрузка ресурса разметки осуществляется в методеActivity.onCreate. Чтобы установить разметку для текущего объекта activity, надо в метод setContentView в качестве параметра передать ссылку на ресурс разметки (например, эта ссылка может выглядеть как R.layout.имя_файла_разметки).
Для создания интерфейса в коде нам достаточно установить в методе activity onCreate в вызове setContentView корневой элемент для нашего приложения, которым может быть любой виджет, в том числе и объект LinearLayout.
В свою очередь LinearLayout принимает ряд других объектов в качестве внутреннего содержимого, и в том числе такие же объекты LinearLayout. Их добавление происходит с помощью метода addView.
Чтобы уникально идентифицировать элемент в файле разметки ему присваивается атрибут android:id, например,android:id="@+id/edit_message". В данном случае "edit_message" будет тем идентификатором, по которому мы сможем обращаться к элементу, производить с ним определенные действия. Для получения элемента по id используется метод findViewById():
1 | EditText messageBox = (EditText)findViewById(R.id.edit_message); |
Для организации элементов внутри контейнера используются параметры разметки. Они начинаются с префикса layout_. В частности, к таким параметрам относятся атрибуты layout_height и layout_width, который используются для установки размеров и могут принимать одно из следующих значений:
- точные размеры элемента, например 96 dp;
- значение wrap_content: элемент растягивается до тех границ, которые достаточны, чтобы вместить все его содержимое;
- значение match_parent: элемент заполняет всю область родительского контейнера.
Еще один атрибут android:padding устанавливает отступы контента от границ контейнера. Можно устанавливать отступы только от одной стороны контейнера, применяя следующие свойства: android:paddingLeft, android:paddingRight, android:paddingTop иandroid:paddingBottom Другим часто используемым атрибутом является layout_margin, задающий отступы от условной границы внутри контейнера в условных единицах. Данный атрибут имеет модификации, которые позволяют задать отступ только от одной стороны: android:layout_marginBottom,android:layout_marginTop,android:layout_marginLeft и android:layout_marginRight (отступы соответственно от нижней, верхней, левой и правой границ)
Экраны готового мобильного приложения показаны на рисунках 3.7 и 3.8.
Рисунок 3.7 – Главное окно приложения Рисунок 3.8 – Экран – контакты
SQLiteOpenHelper — класс для создания и обновления базы данных. В приложении необходимо будет создать класс-наследник от SQLiteOpenHelper и описать в нем два метода:
- onCreate(SQLiteDatabase db) — Вызывается один раз при создании БД. OnUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) — вызывается когда необходимо обновить БД (в данном случае под обновлением имеется в виду не обновление записей, а обновление структуры базы данных).
Для приложения можно создать несколько БД, все они будут доступны из любого класса программы, но не доступны для других программ.
SQLiteDatabase — класс, который предоставляет методы для добавления, обновления, удаления и выборки данных из БД. Основными методами являются: long insert (String table, String nullColumnHack, ContentValues values)— добавление строки в таблицу. Table — название таблицы. NullColumnHack — SQL не позволяет вставлять полностью пустую строку без названия хотя бы одного столбца. То есть выражение: INSERT INTO my_table завершится ошибкой, необходимо написать хотя бы один столбец, например: INSERT INTO my_table (my_column) VALUES (NULL).
Поэтому если values пустой, то в таблицу строка не добавится, если же это необходимо, то в nullColumnHack передается название столбца, которое будет использоваться при построении такого запроса. Очевидно, что столбец при этом может быть любым. Если же при пустом values добавлять строку не надо (что чаще всего и бывает), то передается null. Values — структура (ассоциативный массив) содержащая данные которые необходимо вставить. Ключом массива является название столбца, а значением — значение столбца. Возвращает метод id добавленной строки или -1 если произошла ошибка (например, а случае пустого values строка добавлена не будет и метод вернет -1).
Int update (String table, ContentValues values, String whereClause, String[] whereArgs) — обновление одной или нескольких строк. Table и values — аналогично как и в insert, название таблицы и значения; whereClause и whereArgs — используются для построения выражения WHERE в sql.
Причем в строке whereClause пишется само выражение, например «column_one = ? AND column_two < ?», а в whereArgs передается массив строк, которые будут подставляться вместо знаков «?» в выражение whereClause.
Возвращает метод количество обновленных строк. Int delete(String table, String whereClause, String[] whereArgs) — удаление строк. Параметры аналогичны методу update(), возвращается количество удаленных строк.
Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) — выборка строк,
где distinct — Определяет уникальность выбранных строчек;
table — название таблицы;
columns — массив строк с названиями столбцов, которые необходимо выбрать.
Для выборки всех столбцов передается null. Selection и selectionArgs — условия выборки и аргументы для выборки. Аналогичны whereClause и whereArgs в методе update (). GroupsBy, having, orderBy, limit — определяет группировку, сортировку и количество выбираемых строк. Строки имеют тот же формат как они писались бы в sql-выражении (без слов «GROUP BY», «HAVING», «ORDER BY», «LIMIT» соответственно).
Cursor rawQuery (String sql, String[] selectionArgs) — метод, который делает то же, что и предыдущий, только здесь запрос пишется как обычный sql-запрос. С помощью этого метода можно производить выборку из нескольких таблиц, использовать JOIN и писать другие витиеватые запросы:). Два последних метода возвращают экземпляр класса Cursor. Класс Cursor содержит все строки, которые выбираются из БД, а также имеет понятие итератора (указателя), который указывает на одну из строк. То есть в каждый момент времени мы можем прочитать значения только одной строки, затем передвигаем итератор на другую строку и читаем ее значения.
Метод int getCount() - возвращает общее количество строк. Также в классе есть методы для передвижения итератора:
-
boolean moveToFirst();
-
boolean moveToLast();
-
boolean moveToNext();
-
boolean moveToPosition(int position);
-
boolean moveToPrevious();
Проверки положения итератора:
-
boolean isAfterLast();
-
boolean isBeforeFirst();
-
boolean isFirst();
-
boolean isLast();
-
int getPosition();
И методы возвращающее значение столбца в текущей строке:
-
abstract double getDouble(int columnIndex);
-
abstract float getFloat(int columnIndex);
-
abstract int getInt(int columnIndex);
-
abstract long getLong(int columnIndex);
-
abstract short getShort(int columnIndex);
-
abstract String getString(int columnIndex);
-
byte[] getBlob(int columnIndex).
-
Экономическое обоснование проекта
4.1 Постановка задачи
Целью расчетов, приведенных в данном разделе, является:
-
определение стоимости разработки и введение в эксплуатацию приложения для Интернет-магазина «Вита»;
-
определение стоимости поддержания приложения в работоспособном состоянии;
-
определение экономического эффекта от внедрения приложения.
4.2 Расчет стоимость разработки приложения.
Стоимость разработки приложения зависит от следующих факторов:
-
наличие первоначальных сроков реализации проекта, установленных заказчиком;
-
лимит бюджета проекта;
-
наличие сработанной команды специалистов;
Разработанное мобильное приложение для Интернет – магазина «Вита» необходимо для директора предприятия для получения в дальнейшем прибыли. При внедрении такого программного продукта, он упростит работу директору предприятия, что в дальнейшем повысит его работоспособность.
Прежде чем определить экономическую эффективность внедрения мобильного приложения, необходимо рассчитать затраты на его разработку и внедрение в таблице 1.
Таблица 1 – Показатели для расчета разработки и внедрения мобильного приложения
Единица измерения | Значение | |
1 | 2 | 3 |
Стоимость электронно-вычислительных машин:
| Руб. | 45000 |
Страховые взносы во внебюджетные фонды | % | 26 |
Продолжение таблицы 1 - Показатели для расчета разработки и внедрения мобильного приложения | ||
1 | 2 | 3 |
Стоимость электроэнергии. | Руб./квт. ч | 3,4 |
Количество рабочих дней в году. | День | На усмотрение директора |
Длительность рабочего дня. | Час | На усмотрение директора |
Районный коэффициент. | % | 30 |
Денежные средства, выплаченные заказчику по договору. | Руб. | 35000 |
Количество ПЭВМ, обслуживаемых одним техником. | шт. | 1 |
Затраты на материалы (магнитные носители, расходные материалы). | % | 2,5 |
Расходы на текущий ремонт оборудования. | % | 3 |
Прочие расходы. | % | 2 |
Срок полезного использования | г. | 8 |
Срок эксплуатации | г. | 0 |
Для расчёта экономической эффективности необходимо внести данные в таблицу 2 – Показатели экономической эффективности.