Диплом: Повышение удобства учета выдачи и хранения книг в библиотеке за счет автоматизации с применением мобильных устройств компании Apple

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
65
базой данных Realm. Для этого воспользуемся менеджером зависимостей
CocoaPods. Открываем Terminal – эмулятор терминала, который предоставляет
текстовый доступ к операционной системе, посредством ввода команд в
командную строку. Далее необходимо перейти в директорию проекта и ввести
команду «pod init». Эта команда создает в директории спецификацию с именем
«Podfile», в которой описаны зависимости проекта. Для добавления базы
данных Realm и библиотек, предназначенных для получения и обработки
нформации, необходимо прописать их в Podfile (Рисунок 19).
Рисунок 19 – Добавление библиотек в Podfile
Библиотека QRCodeReader, задействованная в разработке данного
приложения, предназначена для упрощения считывания информации со
штрихкода. Она предоставляет контроллер представления по умолчанию для
отображения вида камеры с наложением области сканирования, а также кнопку
для переключения между передней и задней камерами.
Сетевая библиотека HTTP Alamofire обеспечивает элегантный
интерфейс, позволяющий упростить ряд распространенных сетевых задач. В
нашем приложении используется для обращения к API, находящемуся в
свободном доступе, для получения необходимой нам информации о
литературном издании.
66
SwiftyJSON – библиотека, позволяющая упростить работу с данными в
текстовом формате обмена данными на JavaScript (JSON). Используется для
обработки данных, полученных в качестве ответа на запрос к API.
Команда pod install осуществляет установку введенных выше библиотек
в наш проект.
Для каждой созданной нами в раскадровке сцены создадим файл с
расширением “swift”, в котором располагается класс, описывающий логику
действия соответствующей ему сцены.
Создадим модели объектов, которые мы будем записывать в базу
данных и обозначим их атрибуты. Моделью для книги будет класс Book, для
читателя – Reader, а для адреса – Address (Рисунки 20, 21 и 22).
Рисунок 20 – Модель адреса
Во второй главе мы определили, что в данном случае нам подходит
связь «один-ко-многим». В базе данных Realm такую связь можно установить,
добавив в класс Book атрибут типа Reader, в котором будет храниться
информация об объекте аналогичного типа. В целях хранения информации о
книгах, находящихся в данный момент у читателя, в классе Reader необходимо
создать обратную связь. Для этого обозначаем переменную типа LinkingObjects
и прописываем в ее свойствах класс и его атрибут, который может указывать на
наш класс (Reader). LinkingObjects - это неупорядоченная коллекция для
67
определения объектов, атрибут которых ссылается на класс, свойством
которого она является.
Рисунок 21 – Модель книги
Каждый читатель, зарегистрированный в библиотеке, и каждое
литературное издание, поступившее в библиотечный фонд, обладает
уникальным идентификационным номером. Как мы выяснили во второй главе,
у читателя это номер читательского билета, у книги - инвентарный номер, а у
адреса – номер телефона. Для того чтобы каждый объект классов Book , Reader
и Address был эксклюзивным, необходимо определить какой из атрибутов
класса будет уникальным ключом. Достигается это при помощи создания в
классе метода primaryKey, в возвращаемом значении которого вводится имя
уникального атрибута.
68
Рисунок 22 – Модель читателя
Для установления связи между кодом и сценами, созданными в
раскадровке, необходимо использовать «аутлеты» (outlets) и «команды»
(actions). Аутлет - это ссылка на объект, размещенный на одной из сцен
раскадровки. «Команды» - это функции, которые выполняются при
взаимодействии пользователя с приложением.
Поскольку мы уже обозначили, какие сцены будут открываться при
нажатии кнопок «Список книг» и «Список читателей» в корневом контроллере,
нам необходимо написать код, выполняемый при нажатии на кнопку с QR-
кодом. Мы уже добавили в наш проект библиотеку для считывания QR-кодов,
для ее использования в коде ее необходимо импортировать, используя
ключевое слово «import». В первую очередь нужно запросить разрешение
пользователя на использование камеры устройства. Для этого добавляем
следующую пару «ключ-значение» в файл «Info.plist»:
69
В этом файле содержится информация о настройках приложения в виде
ключей и значений. Когда приложению понадобится камера устройства,
появится всплывающее сообщение, которое мы ввели выше (The camera is
needed to scan a code.) и пользователь сможет разрешить или запретить
использование камеры приложением.
Далее добавляем код, необходимый для работы библиотеки
«QRCodeReader». Информацию о ее использовании можно найти на странице
https://cocoapods.org/pods/QRCodeReader.swift#usage.
Для того чтобы наше приложение смогло распознать QR-код должным
образом, информацию при его создании необходимо вводить следующим
образом:
ISBN: 978-5-17-079585-7
Фамилия автора: Лермонтов
Инициалы автора: М. Ю.
Название книги: Герой нашего времени
Название издательства: АСТ
Город издания: Москва
Год издания: 2018
Число страниц: 414
Цена: 254
ББК: 84(2Рос=Рус)1
Авторский знак: Л49
Раскодированная информация возвращается к нам в виде строки. Для
более комфортной работы с этими данными в дальнейшем сделаем из строки
ассоциативный массив типа [String:String].
Для того чтобы после сканирования QR-кода отобразить контроллер
«Новая книга» добавим в замыкание, срабатывающее после чтения QR-кода,
встроенную функцию performSegue. Она осуществляет переход к контроллеру
представления при присвоении аргументу функции имени идентификатора
70
перехода (segue). Далее присваиваем соответствующим текстовым полям
значения из полученного ранее ассоциативного массива.
После сканирования линейного штрихкода мы получаем информацию,
которая в нем закодирована. Далее, используя библиотеку Alamofire, мы
отправляем запрос, содержащий отсканированный ISBN к Google Books при
помощи google api. После получения в ответ от Google Books данных в виде
JSON проводим их синтаксический анализ при помощи библиотеки SwiftyJSON
(Рисунок 23). Полученные после анализа данные, по аналогии работы с QR-
кодом, мы присваиваем соответствующим полям контроллера «Новая книга».
Рисунок 23 – Работа с библиотеками Alfmofire и SwiftyJSON
Необходимо, чтобы после нажатия на кнопку «Сохранить» вся
информация, содержащаяся в полях, сохранилась в базу данных, пользователь
получил об этом уведомление и после этого отобразился предыдущий
контроллер. Напишем код функции, которая будет выполняться при нажатии
этой кнопки. Для сохранения новой книги в Realm нам необходимо создать
объект класса «Book» и присвоить его параметрам значения, содержащиеся в
соответствующих полях. Поскольку у каждой книги, записываемой в базу
данных, должен быть уникальный инвентарный номер, перед записью
необходимо убедиться, что он введен и что в нашей базе не содержится книг с
таким номером.
71
Используя предопределенный класс «UIViewAlertController», создадим
всплывающее сообщение, которое будет уведомлять пользователя в случае
отсутствия инвентарного номера или в случае его повторения. Далее сохраняем
созданный объект в базу данных и создаем сообщение для оповещения
пользователя об этом. Для перехода пользователя после нажатия кнопки в окне
сообщения, воспользуемся функцией контроллера навигации.
Рисунок 24 – Функция для сохранения данных
Экспорт данных из нашего приложения в АБИС ИРБИС мы реализуем с
помощью отправки письма с вложением, содержащим сведения о книге или
читателе, по электронной почте. Поскольку нам потребуется экспортировать
как информацию о книгах, так и сведения о читателях, создадим отдельный
класс, в котором пропишем логику отправки электронного письма. Далее
классы, отвечающие за работу сц1ен «Новый читатель» и «Новая книга»,
наследуют от этого класса и приобретут необходимую логику для экспорта
информации.
72
Для отправки электронных сообщений в Swift существует встроенная
библиотека «MessageUI». Импортируем ее в созданный нами класс и пишем
функцию для создания и отправки сообщений.
Необходимо выяснить, какой формат и содержание файла нам
потребуется. Для получения этой информации вводим в ИРБИС данные книги
и читателя, соответствующие тем, которые есть в приложении. Импортировать
сведения в ИРБИС можно из файлов следующих форматов: iso, txt, xml, xls, csv.
Экспортировать данные из нашего приложения удобнее в текстовом
формате, поэтому выгрузим информацию из ИРБИС в файл с расширением txt
и проведем анализ его содержимого.
Рисунок 25 – Информация о книге
73
Рисунок 26 – Информация о читателе
Таким образом, как показано на рисунках 25 и 26, информацию для
импорта в ИРБИС следует предоставлять в следующем виде: символ #, номер
поля в ИРБИС, двоеточие, пробел и сведения, которые требуется
импортировать.
На рисунках 27 и 28 изображены шаблоны текста, которые будут
содержаться в файлах, направляемых на выбранный адрес электронной почты,
с целью дальнейшего импорта в программу ИРБИС.
Рисунок 27 – Шаблон ввода информации о книге
74
Рисунок 28 – Шаблон ввода информации о читателе
Перейдем к программированию класса, отвечающего за список книг. Он
наследуется от предопределенного класса «UITableView», который
предназначен для представления информации в виде строчек, расположенных в
одном столбце, с возможностью пролистывания.
Для отображения необходимой информации на экране, нужно задать
число строчек и их содержимое. Число строчек сделаем равным числу объектов
класса «Book», сохраненных в базе данных Realm. Информацией,
отображаемой в строчках, будет имя автора и название книги. Также напишем
код для изменения цвета фона строки в случае, если книга была выдана
читателю (рисунок 29).
Рисунок 29 – Методы для определения количества строк и их
содержимого

Смотрите также:

«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран
Work-life balance подход в управлении рабочим временем молодых сотрудников (на примере ООО «МГТ-сервис»)
Актуализация контента, отражающего концепцию «диалога культур», при освоении английского языка взрослыми обучающимися
Актуализация приемов инсценирования и драматизации в рамках интерактивной модели обучения английскому языку в старших классах
Актуальные подходы в построении внутреннего pr строительной компании (на примере ООО "Ренессанспроект")
Анализ деловой активности и экономической эффективности деятельности организации (на примере АО «СГ-Транс»)