Файл: М инобрнауки россии федеральное государственное бюджетное образовательное учреждение высшего образования Национальный исследовательский университет мэи.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 640
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
1. Анализ предметной области и постановка задачи
1.4 Инструментальные средства разработки
2. Проектирование информационной системы
3. Разработка информационной системы
3.1 Физическая структура проекта
3.3 Реализация работы с данными
3.7 Требования к средствам обеспечения
4. Технико-экономическое описание разработки
4.1 Расчёт себестоимости программного продукта
Выводы
В главе была рассчитана себестоимость реализации данной работы, в ходе которой выяснилось, что основными затратами при заработке является заработная плата программиста далее по весомости затрат, идут отчисления в социальные фонды и накладные расходы. После подсчёта общей себестоимости была рассчитана предполагаемая прибыльность данной работы, в ходе которой было определено, что разработка мобильного приложения окупится в течении полутора лет.
ЗАКЛЮЧЕНИЕ
БД ФИАС — это полностью открытая адресная система и большинство людей должны иметь лёгкий способ взаимодействия с ней. И самым удобный для современного человека способом взаимодействия с любой системой является мобильное приложение, которое позволит использовать адресную систему в любой момент времени, а автономный режим работы позволит не быть привязанным к интернет-сети. Для этих целей была реализована данная работа.
Для достижения подобной цели были определены и выполнены следующие задачи:
-
анализ источников, литературы, имеющих отношение к выполнению данной работы; -
анализ форматов распространения БД ФИАС и выбор наиболее удобного для мобильного устройства; -
анализ технологий разработки мобильного программного обеспечения и подбор инструментальных средств; -
проектирование таблиц и построение базы данных для хранения информации из БД ФИАС; -
проектирование интерфейса мобильного приложения; -
реализация интерфейса; -
реализация основного функционала мобильного приложения; -
проведение тестирования разработанного ПО.
В результате было разработано мобильное приложение, загружающее актуальную версию БД ФИАС в формате КЛАДР поскольку это наиболее легковесный вариант, далее адресная система преобразуется в БД формата административно-территориального деления, которая работает на базе СУБД SQLite, после пользователь может осуществлять поиск нужной информации в адресной системе
, добавлять интересующие данные в избранное и распространять информацию из адресной системы путём копирования данных. В случае устаревания версии БД ФИАС пользователь будет уведомлён и сможет обновить адресную систему в любой момент.
Данная работа не заканчивается реализацией мобильного приложение, поскольку есть ещё большой потенциал для развития. Использующийся для разработки приложения кроссплатформенный фреймворк Xamarin позволит в будущем с лёгкостью портировать ПО на другие платформы, такие как IOS, Windows, Linux. Параллельно можно будет разрабатываться более удобные способы взаимодействия с БД ФИАС путём создания иных инструментов для поиска информации и её распространения. Коммерчески развивать данную работу можно путём добавления рекламных баннеров, а так же создав отдельную версию приложения, которая будет распространяться по подписке для получения регулярной прибыли.
СПИСОК ЛИТЕРАТУРЫ
-
Statcouter Mobile Operating System Market Share Worldwide [Электронный ресурс] – режим доступа: https://gs.statcounter.com/os-market-share/mobile/worldwide; -
AV-Comparatives IT Security Survey 2022. 2022, C. 7; -
Яндекс Радар анализ трафика мобильных устройств РФ [Электронный ресурс] – режим доступа: https://radar.yandex.ru/mobile; -
Яндекс Радар анализ трафика по типам устройств в РФ [Электронный ресурс] – режим доступа: https://radar.yandex.ru/device_categories; -
Черников В. Н. Разработка мобильных приложений на C# для IOS и Android. – М.: ДМК Пресс, 2020; -
Developer Survey 2022 [Электронный ресурс] – режим доступа: https://survey.stackoverflow.co/2022; -
Popularity of Programming Language [Электронный ресурс] – режим доступа: https://pypl.github.io/PYPL.html; -
Унгер Р., Чендлер К. UX-дизайн. Практическое руководство по проектированию опыта взаимодействия. – Пер. с англ. – СПб.: Символ-Плюс, 2011; -
Монетизация приложений для мобильных устройств [Электронный ресурс] – режим доступа: https://woxapp.com/ru/our-blog/monetize-mobile-applications; -
Попова-Коварцева Д.А., Сопченко Е.В.. Основы проектирования баз данных: учеб. Пособие. – Самара: Изд-во Самарского университета, 2019;
ПРИЛОЖЕНИЯ
Приложение 1
Программный код класса SQLCreator
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using SQLite;
using Data;
using DBSpace;
namespace SQLSpace
{
public struct f_SQL_page
{
public class SQLCreator
{
string DBPath { get; set; }
public SQLiteConnection DB { get; set; }
public SQLCreator(string path)
{
this.DBPath = path;
this.DB = new SQLiteConnection(this.DBPath + "/KLADR.db");
}
public void CreateInfoTable(DateTime db_date)
{
//Таблица информации о БД
this.DB.CreateTable
//this.DB.Execute("CREATE TABLE DBInfo(" +
// "id INTEGER PRIMARY KEY AUTOINCREMENT not null," +
// "db_version date)");
//Заполнение таблица DBInfo
this.DB.Insert(new DBInfoSQL()
{
db_version = db_date.Date,
//db_version = new DateTime(2022, 11, 11),
});
var test = this.DB.Table
}
public async void CreateAllTable()
{
DataBaseWorker DB_worker = new DataBaseWorker();
DB_worker.DBPath = this.DBPath;
//<<<<<<<<<<<<<<<< Создание таблиц базы данных >>>>>>>>>>>>>>>
//Таблица избранного
this.DB.CreateTable
//Таблица субъектов РФ
this.DB.CreateTable
//Таблица наименований типов адресных объектов
this.DB.CreateTable
//Таблица административных районов
this.DB.Execute("CREATE TABLE District(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT not null," +
"id_subject INTEGER not null," +
"name varchar," +
"sorc varchar," +
"code varchar," +
"octd varchar," +
"FOREIGN KEY (id_subject) REFERENCES Subject (id) ON DELETE CASCADE)");
//Таблица городов и населённых пунктов
this.DB.Execute("CREATE TABLE CityGPT(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT not null," +
"id_district INTEGER not null," +
"name varchar," +
"sorc varchar," +
"code varchar," +
"octd varchar," +
"gnimb varchar," +
"uno varchar," +
"FOREIGN KEY (id_district) REFERENCES District (id) ON DELETE CASCADE)");
//Таблица улиц
this.DB.Execute("CREATE TABLE Street(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT not null," +
"id_citygpt INTEGER not null," +
"name varchar," +
"sorc varchar," +
"code varchar," +
"FOREIGN KEY (id_citygpt) REFERENCES CityGPT (id) ON DELETE CASCADE)");
//Таблица домов
this.DB.Execute("CREATE TABLE House(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT not null," +
"id_street INTEGER not null," +
"name varchar," +
"sorc varchar," +
"code varchar," +
"octd varchar," +
"mail_index varchar," +
"FOREIGN KEY (id_street) REFERENCES Street (id) ON DELETE CASCADE)");
//<<<<<<<<<<<<<<<< Заполнение таблиц базы данных >>>>>>>>>>>>>>>
//Заполнение таблицы SorcName
await DB_worker.GetSOCR();
this.DB.InsertAll(DB_worker.SOCR);
var socr_names = DB.Table
//var socr = await this.DB.Table
var socr = this.DB.Table
try
{
//Заполнение таблицы Subject
await DB_worker.GetKLADR();
var items = from i in DB_worker.KLADR
where (i.sorc == "Респ"
|| (i.sorc == "АО"
|| i.sorc == "край"
|| i.sorc == "обл"
|| i.sorc == "Аобл"
|| i.sorc == "Чувашия")
|| ((i.name == "Москва") && (i.sorc == "г"))
|| ((i.name == "Санкт-Петербург") && (i.sorc == "г"))
|| ((i.name == "Севастополь") && (i.sorc == "г")))
&& i.code.Substring(2, 11) == "00000000000"
select new SubjectSQL()
{
name = i.name,
sorc = socr.Find(x => x.name == i.sorc).sorc_name,
octd = i.octd,
code = i.code,
gnimb = i.gninmb,
};
this.DB.InsertAll(items);
items = null;
}
catch (Exception ex)
{
Console.WriteLine("-------------Hello error ____________");
Console.WriteLine(ex.ToString());
//return false;
}
//Заполняем таблицу District
var district_list = from i in DB_worker.KLADR
join j in this.DB.Table
where i.sorc == "р-н" && i.code.Substring(i.code.Length - 2, 2) == "00"
select new DistrictSQL()
{
name = i.name,
code = i.code,
octd = i.octd,
sorc = socr.Find(x => x.name == i.sorc).sorc_name,
id_subject = j.Id,
};
DB.InsertAll(district_list);
district_list = null;
GC.Collect();
//Добавление городов федерального значения в административные районы
var city_federal = from i in this.DB.Table
where i.sorc == "Город"
select new DistrictSQL()
{
name = i.name,
code = i.code,
octd = i.octd,
sorc = "Город федерального значения",
id_subject = i.Id,
};
DB.InsertAll(city_federal);
//Заполняем таблицу CityGPT
var citygpt_list = from i in DB_worker.KLADR
join j in this.DB.Table
where i.code.Substring(i.code.Length - 2, 2) == "00"
select new CityGPTSQL()
{
name = i.name,
code = i.code,
octd = i.octd,
sorc = socr.Find(x => x.name == i.sorc).sorc_name,
uno = i.uno,
gnimb = i.gninmb,
id_district = j.Id,
};
DB.InsertAll(citygpt_list);
citygpt_list = null;
GC.Collect();
//Очистка данных из памяти
DB_worker.KLADR.Clear();
//Заполняем таблицу Street
try
{
await DB_worker.GetSTREETSQL();
var street_list = from i in DB_worker.STREET
join j in this.DB.Table
where i.code.Substring(i.code.Length - 2, 2) == "00"
select new StreetSQL()
{
name = i.name,
code = i.code,
sorc = i.sorc,
id_citygpt = j.Id,
};
//Console.WriteLine("<<<<<<<<< " + street_list.ToString() + " >>>>>>>>");
DB.InsertAll(street_list);
//Очистка данных
DB_worker.STREET.Clear();
street_list = null;
GC.Collect();
}
catch (Exception ex)
{
Console.WriteLine("<<<<<<< Set Street Error >>>>>>>>");
Console.WriteLine(ex.ToString());
//return false;
}
//Заполняем таблицу House
await DB_worker.GetDOMASQL();
var house_list = from i in DB_worker.DOMA
join j in this.DB.Table
select new HouseSQL()
{
name = i.name,
code = i.code,
octd = i.octd,
sorc = i.sorc,
mail_index = i.mail_index,
id_street = j.Id,
};
try
{
DB.InsertAll(house_list);
DB_worker.DOMA.Clear();
house_list = null;
}
catch (Exception ex)
{
Console.WriteLine("<<<<<<< Set House Error >>>>>>>>");
Console.WriteLine(ex.ToString());
//return false;
}
Console.WriteLine("---------------- Yeeeeeeeeeeeess -------------------------------");
//return true;
}
public async Task
- > GetSubjectsAsync()
{
try
{
return DB.Query
}
catch (Exception ex)
{
Console.WriteLine("----------- ERROR ------------");
Console.WriteLine(ex.ToString());
return null;
}
}
public async Task
- > GetDistrictAsync(int id)
{
try
{
return DB.Query
}
catch (Exception ex)
{
Console.WriteLine("----------- ERROR ------------");
Console.WriteLine(ex.ToString());
return null;
}
}
public async Task
- > GetCityGPTAsync(int id)
{
try
{
return DB.Query
}
catch (Exception ex)
{
Console.WriteLine("----------- ERROR ------------");
Console.WriteLine(ex.ToString());
return null;
}
}
public async Task
- > GetStreetAsync(int id)
{
try
{
return DB.Query
}
catch (Exception ex)
{
Console.WriteLine("----------- ERROR ------------");
Console.WriteLine(ex.ToString());
return null;
}
}
public async Task
{
try
{
return DB.Query
}
catch (Exception ex)
{
Console.WriteLine("----------- ERROR ------------");
Console.WriteLine(ex.ToString());
return null;
}
}
public DateTime GetDBVersion()
{
return DB.Table
}
public async Task
{
try
{
var subject = DB.Query
if (subject != null)
{
var districts = await GetDistrictAsync(subject[0].Id);
if (districts != null)
{
var city_gpt = from i in districts
join j in this.DB.Table
where j.name == search_text[1] && j.code.Substring(j.code.Length - 2, 2) == "00"
select new CityGPTSQL()
{
name = j.name,
code = j.code,
octd = j.octd,
sorc = j.sorc,
uno = j.uno,
id_district = i.Id,
};
if (city_gpt != null)
{
var street = from i in city_gpt
join j in this.DB.Table
where j.name == search_text[2] && j.code.Substring(j.code.Length - 2, 2) == "00"
select new StreetSQL()
{
name = j.name,
code = j.code,
sorc = j.sorc,
id_citygpt = i.Id,
};
if (street != null)
{
var house = from i in street
join j in this.DB.Table
select new House()
{
name = j.name.Split(',').ToList
code = j.code,
octd = j.octd,
sorc = j.sorc,
mail_index = j.mail_index,
};
house = from i in house
where i.name.Find(x => x == search_text[3]) != null
select i;
if (house != null)
{
return "Субъект: " + subject[0].name + "\nКод субъекта: " + subject[0].code.Substring(0, 2)
+ "\nНаселённый пункт: "
+ "\nДом: " + house.ToString();
}
else
{
return "Дом не найден";
}
}
else
{
return "Улица не найдена";
}
}
else
{
return "Город, населённый пункт не найден";
}
}
else
{
return "Некорректно введены данные";
}
}
else
{
return "Некорректно введены данные";
}
}
catch (Exception ex)
{
Console.WriteLine("----------- Search Error ------------");
Console.WriteLine(ex.ToString());
return "Error";
}
}
}
}
}
Приложение 2
Реализованный графический интерфейс мобильного приложения
Страница быстрого поиска по БД ФИАС
Страница поиска по БД
Страница избранных адресный объектов
Боковое меню с областью актуальности БД
Страница «О приложении»
Уведомление пользователя при копировании данных в буфер обмена
Уведомление пользователя при добавлении адресного объекта в избранное