Разработка мобильного приложения "Семейный бюджет" под операционную систему Android

Современное состояние рынка мобильных приложений. Основные подходы к разработке мобильных приложений. Обоснование выбора целевой группы потребителей приложения. Этапы проектирования и разработки мобильного приложения для операционной системы Android.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 27.06.2019
Размер файла 987,1 K

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

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

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

Министерство сельского хозяйства Российской Федерации

ФГБОУ ВО «КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ ИМЕНИ И.Т. ТРУБИЛИНА»

Кафедра информационных систем

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовой работе

по дисциплине: Разработка приложений под мобильные устройства

на тему: «Разработка мобильного приложения “Семейный бюджет” под операционную систему Android»

выполнил студент группы ПИ1521

Пшонов Александр Андреевич

Руководитель проекта:

канд. экон. наук, доцент Попок Л. Е.

Краснодар, 2018 г.

Реферат

мобильный приложение операционный система

Курсовая работа содержит: 37 стр., 19 рис., 1 приложение

РАЗРАБОТКА, СЕМЕЙНЫЙ БЮДЖЕТ, АНДРОИД, ДИЗАЙН, СТАТЬЯ БЮДЖЕТА, МОБИЛЬНОЕ ПРИЛОЖЕНИЕ, ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС, ФРЕЙМВОРК, ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ.

Цель курсовой работы: разработать мобильное приложение для ведения семейного бюджета под управлением операционной системы Android.

Объектом исследования является процесс проектирования и разработки мобильного приложения для операционной системы Android.

Предметом исследования являются основные этапы проектирования и разработки мобильного приложения для операционной системы Android, а также само приложение.

Содержание

Введение

1. Анализ предметной области

1.1 Современное состояние рынка мобильных приложений

1.2 Основные подходы к разработке мобильных приложений

1.3 Выбор инструментов разработчика

1.4 Обоснование выбора целевой группы потребителей приложения

2. Разработка приложения

2.1 Постановка задачи

2.2 Разработка программной части приложения

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

Заключение

Список использованных источников

Приложение А

Введение

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

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

В настоящей курсовой работе рассмотрены этапы проектирования и разработки приложения для мобильных устройств на базе ОС Android, так как устройства под управлением этой операционной системы занимают более 85% российского рынка смартфонов. Выбранный вид назначения разрабатываемого приложения позволяет помимо части информатики охватить еще и экономический профиль специальности: семейный бюджет находит практическое применение повсеместно. Кроме того, на данный момент в свободном доступе не существует ни одного приложения без существенных недостатков (как по программной части, так и с точки зрения дизайна интерфейса).

Целью курсовой работы является разработка мобильного приложения для ведения семейного бюджета под управлением операционной системы Android.

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

1. Изучить предметную область;

2. Провести анализ возможностей разработки в секторе инструментальных прикладных приложений (в том числе анализ уже существующих разработок по теме);

3. Описать основные этапы проектирования и разработки приложения;

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

1. Анализ предметной области

1.1 Современное состояние рынка мобильных приложений

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

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

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

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

«Дзен-мани» популярный российский сервис для учета личных финансов стал известен в 2011 году, когда в рамках мероприятия Яндекс.Старт получил финансирование от Яндекса на дальнейшее развитие проекта.

«Дзен-мани» использует выгодную систему взаимодействия мобильного приложения и веб-сервиса. Ключевыми особенностями веб-сервиса являются интернет-банкинг, импорт операций из электронных кошельков, работа с бюджетом, планирование и возможность прогнозирования, тогда как в приложении основной акцент делается на парсинге SMS (распознавание сообщений о транзакциях от банка) с последующим автоматическим добавлением финансовых операций из сообщений. При этом все данные заносятся в отдельный счет. Бывают и ошибки, например, при пополнении банковской карты программа ошибочно определяет транзакцию как расход, но в целом баланс показывает правильно благодаря активации опции автоматической корректировки. Непременный плюс сервиса -- трансфер между счетами и долги, как отдельный раздел управления финансами.

Рисунок 1 Готовое решение «Дзен-мани»

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

Несомненными плюсами являются функциональные возможности, позволяющие вести бюджет «в облаке», запланировать финансовую деятельность в долгосрочной перспективе, синхронизировать приложение с картой. Среди достоинств также следует отметить такие реализованные возможности интерфейса как боковая «шторка» и графики, представляющие собой круговые диаграммы для более наглядного представления.

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

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

1.2 Основные подходы к разработке мобильных приложений

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

Нативными являются такие приложения, которые создаются с помощью основного языка операционной системы. Это означает, что программы для Adroid пишут на Java, а для iOS - на objective-C. Хотя последний язык уже имеет замену - Swift.

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

Что касается гибридных приложений, то их разрабатывают с помощью Javascript, CSS, HTML. Эти же технологии применяются для создания современных сайтов. Созданный код с помощью таких технологий невозможно установить на любую мобильную платформу. По этой причине разработчики «одевают» его в нативную оболочку. Для этого используется много различных программ. Наиболее распространенными среди них являются Cordova и PhoneGap.

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

Гидридная программа для Android является «легкой», то есть не занимает много места, не требует сильных ресурсов, однако дает возможность пользоваться удобным интерфейсом, хранить небольшое количество данных на устройстве и получать данные из сети.

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

Большинство специалистов, создающих такие приложения, пользуются фреймворком PhoneGap. Его особенность заключается в том, что он позволяет открыть приложению доступ к аппаратным и программным возможностям платформы. Также кроссплатформенная разработка возможна на таких технологиях, как Xamarin и Unity, но они не так популярны для разработки приложений, как веб-технологии.

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

Кроссплатформенная разработка обходится дешевле, что объясняется меньшими объёмами работ относительно нативной разработки.

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

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

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

Резюмируя, можно отметить, что к нативной разработке стоит обращаться, если приложению требуется свободный доступ ко всем ресурсам и сервисам телефона, если требуется получить максимально отзывчивое приложение, если приложение должно работать в offline и максимально эффективно использовать аппаратные части устройства.

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

Для определенных задач эффективным решением является скомбинировать два вышеупомянутых подхода к разработке: использовать кроссплатформенные преимущества HTML для оформления контента, а требовательные к скорости отзывчивости меню и элементы управления сделать нативными, затратив при этом минимум усилий, времени и бюджета. Такие приложения называются гибридными. В этом случае только объём нативного кода определяет, какому подходу больше соответствует разработка приложения.

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

В настоящей курсовой работе будет разработано приложение с использованием нативного подхода, так как, во-первых, оно будет написано для конкретной платформы на конкретном языке программирования (С# для ОС Android); во-вторых, приложение должно будет работать оффлайн.

1.3 Выбор инструментов разработчика

В качестве инструмента проектирования была выбрана интегрированная среда разработки для работы с Android-платформой Visual Studio с набором инструментов Xamarin. Эта среда разработки основана на программном обеспечении от компании Microsoft и является официальным средством разработки Android приложений.

Xamarin Forms -- это кроссплатформенный набор средств пользовательского интерфейса, позволяющий разработчикам эффективно создавать собственные макеты пользовательских интерфейсов для совместного использования в приложениях Android и универсальной платформы Windows.

Рисунок 2 Окно интегрированной среды разработки Visual Studio(Xamarin)

Xamarin Forms позволяет быстро разрабатывать прототипы приложений, которые со временем могут развиваться в сложные приложения. Так как приложения Xamarin Forms являются собственными, у них нет ограничений, характерных для других наборов средств, таких как браузерные песочницы, ограниченные интерфейсы API или низкая производительность. Приложения, написанные с помощью Xamarin Forms, могут использовать все возможности и интерфейсы API базовой платформы, включая, помимо прочего, CoreMotion, PassKit и StoreKit в iOS, NFC и Сервисы Google Play в Android и Плитки в Windows. Кроме того, можно создавать приложения, одни части пользовательского интерфейса которых основаны на Xamarin Forms, а другие -- на собственном наборе средств пользовательского интерфейса.

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

Существуют два метода создания пользовательского интерфейса в Xamarin Forms. Первый метод заключается в создании пользовательского интерфейса исключительно с помощью исходного кода на языке C#. Второй заключается в использовании XAML, декларативного языка разметки, который служит для описания пользовательского интерфейса

XAML (расширяемый язык разметки для приложений) позволяет разработчикам определить пользовательские интерфейсы приложений Xamarin.Forms с помощью разметки вместо кода. В программе Xamarin.Forms XAML никогда не требуется, но часто бывает краток и более визуально согласованный, чем эквивалентный код и потенциально допускает использование средств разработки. XAML особенно хорошо подходит для использования с популярными архитектуры приложения MVVM (Model-View-View-Model): код XAML определяет представление, связанного с кодом ViewModel через привязки данных на основе XAML.

XAML имеет несколько преимуществ по сравнению с эквивалентный код:

ѕ XAML часто является более короткой и удобочитаемыми, чем эквивалентный код.

ѕ В иерархии родители потомки, присущих XML позволяет XAML имитировать с более высокую четкость visual иерархии "родители потомки" объектов пользовательского интерфейса.

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

ѕ Конечно существует также недостатки в основном относящихся к ограничения, которые являются внутренними для языка разметки.

ѕ XAML не может содержать код. Все обработчики событий должны быть определены в файле кода.

ѕ XAML не может содержать циклов для повторной обработки. (Однако несколько визуальных объектов Xamarin Forms -- особенно ListView -- можно создать несколько дочерних элементов, в зависимости от объектов в его ItemsSource коллекции).

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

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

Рисунок 3 Пример календаря, создаваемого элементом DatePicker

1.4 Обоснование выбора целевой группы потребителей приложения

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

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

С другой стороны, отличия в API различных операционных систем существенно затрудняют перенос приложений между платформами. Существуют различные методы обхода этой сложности (написание «промежуточных» API; написание библиотек, отображающих системные вызовы одной ОС в системные вызовы другой ОС; введение стандартов кодирования в языках программирования; написание интерпретируемых языков, реализуемых на разных платформах).

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

Выбор уровня API для разработки приложения должен учитывать минимально два пункта. Во-первых, это текущий дистрибутив: сколько устройств может реально поддерживать разрабатываемое приложение (если оно было разработано для уровня API 9, то, следовательно, приложение не сможет работать на уровне API 8 и ниже).

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

Уровень API - это в основном версия ОС Android - так, вместо использования имени версии Android используется целое число, которое увеличивается с каждой версией.

Для разработки мобильного приложения «Семейный бюджет» минимальным SDK был выбран API 21: Android 5.0.1 (Lolipop) для телефонов и планшетов. Несмотря на то, что сама среда предлагает использовать API для чуть более ранней версии, поскольку тогда почти

Непосредственно тестирование разрабатываемого приложения производилось на смартфоне Huawei Y5 II LTE, являющегося устройством, находящемся на стыке технологических новинок и относительно старых смартфонов, что позволит убедиться в максимальной степени адаптации разработанного приложения под конечные устройства. Смартфон обладает 5-дюймовым дисплеем с HD разрешением.

Кроме разрешения экрана необходимо также обратить внимание на плотность точек на экране. Для плотности соответственно имеется атрибут: anyDensity. Если значение атрибута - true, то OS Android не использует функции для совместимости с различными плотностями экрана. В этом случае приложение должно использовать независимые dp для прорисовки элементов пользовательского интерфейса, либо самостоятельно управлять вычислением размеров для различных плотностей. Если значение - false, OS Android включает функции для масштабирования элементов в соответствии с плотностью экрана.

Таким образом, учитывая использование пикселей, не зависимых от плотности, правильно настроенные значения атрибутов тега support-screens, прорисовку элементов, определяющим минимальные системным требованием для разрабатываемого приложения «Семейный бюджет» становится лишь версия операционной системы Android от 5.0 и выше.

2. Разработка приложения

2.1 Постановка задачи

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

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

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

2.2 Разработка программной части приложения

Приложение разработано с помощью инструментальных средств интегрированной среды разработки Microsoft Visual Studio 2017 Community с подключенным инструментарием Xamarin и написан на языке C#.

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

На первом этапе разработки происходит инициализация объекта App, в соответствии с требованиями платформы. Создание приложения с помощью инструментов Xamarin описано на Рисунке 4.

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

Основу работы приложения составляет база данных, реализованная с помощью интерфейсов для подключения SQLite. Логика и модель базы данных описана в файлов класса несобранного приложения iSQL.cs и Repository.cs.

Рисунок 5 Подключение интерфейса работы с файлом базы данных в Android

После создания базы данных и подключения к ним осуществляется реализация классов статей бюджета, которые в свою очередь будут проводниками между элементами пользовательского интерфейса для ввода данных и самой базой. Схема базы данных описывается в файле Model.cs, являющимся родительским классом для классов таблиц «Доходы» и «Расходы». Модель данных представлена на Рисунке 6.

Рисунок 6 Модель данных и производный класс «Доходы»

Класс создания файла базы данных и соответствующих таблиц «Доходы» и «Расходы» изображен на Рисунке 7. В нем мы с помощью конструктора создаем определенный раннее файл базы с названием «FamilyFinances.db» и с помощью метода SQLiteConnection осуществляем к нему подключение.

Рисунок 7 Создание файла база данных

Для вывода занесенных в базу данных записей, принадлежащих к конкретному типу статей бюджета используется конструкция класса Repository, изображенная на Рисунке 8.

Рисунок 8 Создание списка статей бюджета

Функция GetFromPeriod является функцией возвращающей списком все записи, относящиеся к заданному пользователем периоду.

На Рисунке 9 показана инициализация компонента «Доходы», которая происходит путем установления значений полей объектов данного класса на соответствующей странице приложения указанными заранее пользователем. По умолчанию на странице отображаются записи от первого числа текущего месяца до текущего дня.

С помощью конструкции this.Models осуществляется занесение информации из базы данных по описанной модели в список выводимых записей доходов за определяемый пользователем период.

Рисунок 9 Инициализация компонента класса «Доходы»

В классах Detail* описана реализация работы алгоритма создание или редактирования существующих записей. Конкретно в классе DetailExpenses имеются два конструктора. Один содержит единственную функцию инициализации компонента, производящей создание новой записи. В случае, если пользователь выбрал запись из журнала и нажал кнопку изменить, происходит вызов второго конструктора и передача ему необходимых параметров существующей записи. Фрагмента кода представлен на рисунке 10.

Рисунок 10 Инициализация компонента класса «Доходы»

Затем, после нажатия кнопки сохранить, происходит операции ввода данных в объект базы данных и вывод ошибок в случае, если пользователь осуществил ввод во всех необходимых полях. Создание новой записи (изменения старой с помощью конструкции if else) изображено на Рисунке 11. Сперва блок try выделяет память под новый объект производного класса Models.Expenses, затем проверяет, является ли запись выбранным объектом, путем проверки параметра IsUpdate, то есть находится в состоянии изменения. Если объект не находится на изменении, то реализуется алгоритм метода Add стандартной библиотеки SQLite, реализованный в файле класса Repository. Такие же операции выполняются в классах Revenue (Расход) и DetailRevenue.

Рисунок 11 Заполнение созданного или измененного объекта «Доходы»

Реализация класса «Отчет» представлена на Рисунке 12. Данный класс необходим для выведения разницы между расходами и доходами за определенный период. В нём инициализируются переменные, представляющие собой сумму всех доходов или расходов, имеющихся в бд и соответствующие выбранному периоду с помощью вызова функции GetPeriod класса Repository, производного от класса приложения. Расчет происходит с помощью цикла foreach, суммирующего переменные expensesCount и revenuesCount с каждой записью требуемой таблицы. Вывод осуществляется с помощью присвоения размещенным заранее на экране элементом пользовательского интерфейса Label значений суммирующих переменных. Поле итог, соответственно, содержит их разность.

Рисунок 12 Реализация класса «Отчет»

Для максимально удобного пользования приложения было реализовано главное меню, представляющего собой ListView, содержащего элементы приложения, описанные в классе MainPageMaster и MainPageMenuItem, описание главных функций которых можно увидеть на Рисунке 13. В методе MainPageMasterViewModel() создаются новые элементы меню, когда же класс MainPageMenuItem принимает значение, передаваемые предыдущим методом, затем осуществляется присвоение элемента интерфейса ListView уже созданному блоку меню.

e

Рисунок 13 Реализация главного меню

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

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

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

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

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

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

Рисунок 15 Страница «Расходы»

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

Рисунок 16 Процесс ввода входных данных

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

После добавления записи с помощью кнопки «Сохранить» произойдёт переход и её отображение на странице «Расходы», и при нажатии на неё появится диалоговое окно выбора действий, изображенное на рисунке 17.

Рисунок 17 Выбор действия над записью

По завершению ввода всех необходимых пользователю данных имеется возможность просмотра отчетов через соответствующий элемент главного меню «Отчет», который осуществит переход на страницу, содержащую информацию о балансе между расходами и доходами за определенный период, указанный с помощью элемента интерфейса DatePicker.

Рисунок 18 Выбор периода производимых расчетов

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

Рисунок 19 Итог за период

Заключение

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

Так, в ходе работе был проведен анализ предметной области (включающий оценку современного состояния рынка мобильных приложений и изучение основных подходов к разработке приложений для мобильных устройств). В качестве инструмента разработки была выбрана и изучена среда Visual Studio c набором инструментов Xamarin.

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

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

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

Список использованных источников

1. О. В. Герман, Ю. О Герман. Программирование на Java и С# для студента. БХВ-Петербург. 2005. 512 с.

2. Бежанова, М.М. Практическое программирование: структуры данных и алгоритмы: учеб. для вузов / М.М. Бежанова, Л.А. Москвина, И.В. Поттосин. М.: Логос, 2001. 223 с.

3. Голощапов Алексей Google Android. Программирование для мобильных устройств; БХВ-Петербург - Москва, 2012. 448 c.

4. Дэрси Лорен, Кондер Шейн Android за 24 часа. Программирование приложений под операционную систему Google; Рид Групп - Москва, 2011. 464 c.

5. Колисниченко Денис Программирование для Android. Самоучитель; БХВ-Петербург - Москва, 2012. 272 c.

6. Майер Рето Android 2. Программирование приложений для планшетных компьютеров и смартфонов; Эксмо - Москва, 2011. 672 c.

7. Медникс Зигард, Дорнин Лайрд, Мик Блэйк, Накамура Масуми Программирование под Android; Питер - Москва, 2013. 560 c.

8. Ретабоуил Сильвен Android NDK. Разработка приложений под Android на C#; ДМК Пресс - Москва, 2012. 496 c.

Приложение А

?MainPage.cs:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Xamarin.Forms;

using Xamarin.Forms.Xaml;

namespace FamilyFinances

{

[XamlCompilation(XamlCompilationOptions.Compile)]

public partial class MainPage: MasterDetailPage

{

public MainPage()

{

InitializeComponent();

MasterPage.ListView.ItemSelected += ListView_ItemSelected;

}

private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)

{

var item = e.SelectedItem as MainPageMenuItem;

if (item == null)

return;

var page = (Page)Activator.CreateInstance(item.TargetType);

page.Title = item.Title;

Detail = new NavigationPage(page);

IsPresented = false;

MasterPage.ListView.SelectedItem = null;

}

}

}

MainPageMaster (Меню)

[XamlCompilation(XamlCompilationOptions.Compile)]

public partial class MainPageMaster: ContentPage

{

public ListView ListView;

public MainPageMaster()

{

InitializeComponent();

BindingContext = new MainPageMasterViewModel();

ListView = MenuItemsListView;

}

class MainPageMasterViewModel: INotifyPropertyChanged

{

public ObservableCollection<MainPageMenuItem> MenuItems { get; set; }

public MainPageMasterViewModel()

{

MenuItems = new ObservableCollection<MainPageMenuItem>(new[]

{

new MainPageMenuItem { Id = 0, Title = "Доходы", TargetType = typeof(Revenue) },

new MainPageMenuItem { Id = 1, Title = "Расходы", TargetType = typeof(Expenses) },

new MainPageMenuItem { Id = 2, Title = "Отчет", TargetType = typeof(Statistics) },

});

}

#region INotifyPropertyChanged Implementation

public event PropertyChangedEventHandler PropertyChanged;

void OnPropertyChanged([CallerMemberName] string propertyName = "")

{

if (PropertyChanged == null)

return;

PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));

}

#endregion

}

}

Доходы

[XamlCompilation(XamlCompilationOptions.Compile)]

public partial class Expenses: ContentPage

{

public ObservableCollection<Models.Expenses> Models { get; set; }

public Expenses()

{

InitializeComponent();

this.fromDatePicker.Date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);

this.toDatePicker.Date = DateTime.Now;

this.fromDatePicker.DateSelected += DatePicker_DateSelected;

this.toDatePicker.DateSelected += DatePicker_DateSelected;

this.Models = new ObservableCollection<Models.Expenses>(App.Repository.GetFromPeriod<Models.Expenses>(this.fromDatePicker.Date, this.toDatePicker.Date));

this.BindingContext = this;

MessagingCenter.Subscribe<Page>(this, "BackExpenses", (sender) => { UpdateData(); });

}

private async void ListView_ItemTapped(object sender, ItemTappedEventArgs e)

{

var item = e.Item as Models.Expenses;

((ListView)sender).SelectedItem = null;

switch (await DisplayActionSheet("Действия", "Отмена", null, "Изменить", "Удалить"))

{

case "Изменить":

await Navigation.PushModalAsync(new DetailExpenses(item));

break;

case "Удалить":

App.Repository.Remove(item);

UpdateData();

break;

}

}

private void ListView_Refreshing(object sender, EventArgs e)

{

UpdateData();

}

private void UpdateData()

{

var expenses = App.Repository.GetFromPeriod<Models.Expenses>(this.fromDatePicker.Date, this.toDatePicker.Date);

this.Models.Clear();

foreach (var item in expenses)

{

this.Models.Add(item);

}

}

private void AddButton_Clicked(object sender, EventArgs e)

{

Navigation.PushModalAsync(new DetailExpenses());

}

private void DatePicker_DateSelected(object sender, EventArgs e)

{

UpdateData();

}

}

}

Редактирование доходов

[XamlCompilation(XamlCompilationOptions.Compile)]

public partial class DetailExpenses: ContentPage

{

public DetailExpenses()

{

InitializeComponent();

}

public bool IsUpdate { get; set; } = false;

private int _id { get; set; }

public DetailExpenses(Models.Expenses model)

{

InitializeComponent();

this._id = model.Id;

this.nameEntry.Text = model.Name;

this.typeEntry.Text = model.Type;

this.countEntry.Text = model.Count.ToString();

this.datePicker.Date = model.Date;

this.IsUpdate = true;

}

private async void SaveButton_Clicked(object sender, EventArgs e)

{

StringBuilder errorBuilder = null;

if (nameEntry.Text == null || nameEntry.Text == "")

{

if (errorBuilder == null)

{

errorBuilder = new StringBuilder("Поле \"Название\" не заполнено\n");

}

else

{

errorBuilder.AppendLine("Поле \"Название\" не заполнено");

}

}

if (typeEntry.Text == null || typeEntry.Text == "")

{

if (errorBuilder == null)

{

errorBuilder = new StringBuilder("Поле \"Источник\" не заполнено\n");

}

else

{

errorBuilder.AppendLine("Поле \"Источник\" не заполнено");

}

}

decimal count = 0;

if (countEntry.Text == null || countEntry.Text == "")

{

if (errorBuilder == null)

{

errorBuilder = new StringBuilder("Поле \"Количество\" не заполнено\n");

}

else

{

errorBuilder.AppendLine("Поле \"Количество\" не заполнено");

}

}

else

{

try

{

count = Convert.ToDecimal(countEntry.Text);

}

catch (Exception)

{

if (errorBuilder == null)

{

errorBuilder = new StringBuilder("В поле \"Количество\" ошибка ввода\n");

}

else

{

errorBuilder.AppendLine("В поле \"Количество\" ошибка ввода");

}

}

}

if (errorBuilder != null)

{

await DisplayAlert("Ошибка", errorBuilder.ToString(), "Закрыть");

}

else

{

try

{

var model = new Models.Expenses() { Name = nameEntry.Text, Date = datePicker.Date, Count = count, Type = typeEntry.Text };

if (IsUpdate)

{

model.Id = this._id;

App.Repository.Update(model);

}

else

{

App.Repository.Add(model);

}

await DisplayAlert("Сохранение", "Сохранение прошло успешно.", "Закрыть");

MessagingCenter.Send<Page>(this, "BackExpenses");

this.OnBackButtonPressed();

}

catch

{

await DisplayAlert("Ошибка", "Что-то пошло не так", "Закрыть");

}

}

}

private void CancelButton_Clicked(object sender, EventArgs e)

{

this.OnBackButtonPressed();

}

}

Класс «Отчет»

[XamlCompilation(XamlCompilationOptions.Compile)]

public partial class Statistics: ContentPage

{

public Statistics ()

{

InitializeComponent ();

this.fromDatePicker.Date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);

this.toDatePicker.Date = DateTime.Now;

this.fromDatePicker.DateSelected += DatePicker_DateSelected;

this.toDatePicker.DateSelected += DatePicker_DateSelected;

UpdateData();

}

private void UpdateData()

{

var expenses = App.Repository.GetFromPeriod<Models.Expenses>(this.fromDatePicker.Date, this.toDatePicker.Date);

decimal expensesCount = 0;

foreach (var item in expenses)

{

expensesCount += item.Count;

}

var revenues = App.Repository.GetFromPeriod<Models.Revenue>(this.fromDatePicker.Date, this.toDatePicker.Date);

decimal revenuesCount = 0;

foreach (var item in revenues)

{

revenuesCount += item.Count;

}

var result = (expensesCount - revenuesCount) * (-1);

expensesLabel.Text = "Доходы: " + expensesCount + " руб.";

revenueLabel.Text = "Расходы: " + revenuesCount + " руб.";

resultLabel.Text = "Итог: " + result + " руб.";

}

private void DatePicker_DateSelected(object sender, EventArgs e)

{

UpdateData();

}

}

Класс базы данных приложения

namespace FamilyFinances.SQLite

{

public class Repository

{

private const string DATABASE_NAME = "familyfinances.db";

private static SQLiteConnection database { get; set; }

private Repository()

{

database = new SQLiteConnection(DependencyService.Get<ISQLite>().GetDatabasePath(DATABASE_NAME));

database.CreateTable<Models.Expenses>();

database.CreateTable<Models.Revenue>();

}

private static Repository _instanse;

public static Repository Instanse

{

get

{

if (_instanse == null)

{

_instanse = new Repository();

}

return _instanse;

}

}

public void Add<T>(T model)

{

database.Insert(model);

}

public void Remove<T>(T model)

{

database.Delete(model);

}

public void Update<T>(T model)

{

database.Update(model);

}

//public List<T> GetAll<T>(DateTime from) where T: Models.Model, new()

//{

// return database.Table<T>().Where(x => x.Date >= from).OrderBy(x => x.Date).ToList();

//}

public List<T> GetFromPeriod<T>(DateTime from, DateTime to) where T: Models.Model, new()

{

return database.Table<T>().Where(x => x.Date >= from && x.Date <= to).OrderBy(x => x.Date).ToList();

}

}

}

Интерфейс подключения к базе данных

namespace FamilyFinances.SQLite

{

public interface ISQLite

{

string GetDatabasePath(string filename);

}

}

Модель данных базы данных

?using SQLite;

using System;

using System.Collections.Generic;

using System.Text;

namespace FamilyFinances.SQLite.Models

{

public class Model

{

[PrimaryKey, AutoIncrement, Column("Id")]

public int Id { get; set; }

public DateTime Date { get; set; }

public string Name { get; set; }

public decimal Count { get; set; }

}

}

Размещено на Allbest.ru


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

  • Архитектура операционной системы Android, набор библиотек для обеспечения базового функционала приложений и виртуальная машина Dalvik. Объектно-ориентированный язык программирования Java как инструмент разработки мобильных приложений для ОС Android.

    дипломная работа [1,6 M], добавлен 08.07.2015

  • Анализ российского рынка мобильных приложений. Мобильное приложение как новый канал коммуникации с целевой аудиторией. Этапы создания мобильного приложения. План продвижения мобильного приложения в сети Интернет. Бесплатные инструменты продвижения.

    дипломная работа [1,6 M], добавлен 23.06.2016

  • Разработка клиент-серверного игрового приложения на примере игры в шашки для мобильных устройств на базе операционной системы Android. Обзор мобильных платформ. Экраны приложения и их взаимодействие. Графический интерфейс, руководство пользователя.

    курсовая работа [2,6 M], добавлен 15.06.2013

  • Разработка приложений для смартфонов на ОС Android для сети аптек "Фармация". Архитектура операционной системы Android. Архитектура и реализация приложения. Его функциональность. Описание работы мобильного приложения. Расчет затрат на создание продукта.

    дипломная работа [1,6 M], добавлен 17.06.2017

  • Первое устройство, работающее под управлением Android. Приложения под операционную систему Android. Формат установочных пакетов. Разработка приложений на языке Java. Шаблоны основных пакетов и компонентов Android. Сборка приложений, основанная на Gradle.

    курсовая работа [492,0 K], добавлен 08.02.2016

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

    реферат [600,4 K], добавлен 08.01.2015

  • Обзор рынка мобильных приложений, социальных сетей, аналогов. Обзор инструментов разработки: Android Studio, Microsoft visual С# 2012, PostgreeSQL, API Открытых данных Вологодской области, API Социальных сетей. Программный код, разработка интерфейса.

    дипломная работа [2,6 M], добавлен 10.07.2017

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