Разработка программного обеспечения для сшивки и редактирования топографических карт
PAGE \* MERGEFORMAT 6
Реферат
Пояснительная записка 76 страниц, 24 рисунка, 4 таблицы, 22 литературных источника, 7 приложений.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ, СШивка, РЕДАКТИРОВАНИЕ, ТОПОГРАФИЧЕСКИЕ КАРТЫ, c#, .NET FRAMEWORK, VISUAL STUDIO.
Целью проекта является разработка программного обеспечения для сшивки и редактирования топографических карт.
В первом разделе дипломного проекта приведён аналитический обзор литературы по картографии, произведён обзор существующих технологий и программных средств, выполнен патентный поиск.
Во втором разделе производится разработка программной среды.
В третьем разделе приведено обоснование технических приемов программирования.
В четвертом разделе приведено руководство пользователя.
В пятом разделе приводится расчет экономических параметров и себестоимость программного обеспечения.
В шестом разделе дипломного проекта содержатся требования по охране труда и безопасности жизнедеятельности.
В заключении приведены результаты проделанной работы.
Содержание
Содержание 4
Введение 6
[0.0.1] Введение [1] Аналитический обзор литературы [1.1] Геоинформационное картографирование [1.2] Обзор C# [1.3] Патентный поиск [2] Разработка программной системы [2.1] Разработка алгоритма программы [2.2] Разработка схемы и структуры программы
[2.3] [2.3.1] Сравнение пикселей [2.3.2] Сравнение «картин» [2.3.3] Анализ массива картин
[3] [3.1] Обоснование выбора языка программирования [3.2] Обоснование выбора операционной системы
[4] [4.1] Установка программы [4.2] Удаление программы
[4.3]
[5] [5.1] Общая характеристика разрабатываемого ПС [5.2] Исходные данные [5.3] Определение объема программного средства [5.4] Расчет трудоемкости выполняемой работы [5.5] Расчет основной заработной платы [5.6] Расчет дополнительной заработной платы [5.7] Расчет отчислений в Фонд социальной защиты населения [5.8] Расчет отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний [5.9] Расчет расходов на спецоборудование [5.10] Расчет расходов на материалы [5.11] Расчет расходов на оплату машинного времени [5.12] Расчет прочих прямых затрат [5.13] Расчет накладных расходов [5.14] Расчет суммы расходов на разработку ПС ВТ [5.15] Расчет расходов на сопровождение и адаптацию [5.16] Расчет полной себестоимости разработки ПС ВТ [5.17] Определение отпускной цены на ПС ВТ
[6] [6.1] Описание рабочего места программиста [6.2] Освещенность рабочего места [6.3] Параметры микроклимата на рабочем месте [6.4] Нормирование шума [6.5] Методы защиты от шума [6.6] Вентиляция
[6.6.1] |
Введение
В настоящее время огромное значение придается развитию программного обеспечения в различных отраслях. Развитие программного обеспечения означает значительное упрощение работ, повышает эффективность производства, и т.д. В картостроении применяются различные приемы и технологии. Все они основаны на получении изображения топографических карт с помощью различных графических редакторов. Получение карты является последовательным многоступенчатым процессом. Карты могут создавать различные разработчики, и даже различные коллективы. В результате, очевидно, возникает проблема сшивки топографических карт. Если необходимо сшить 1-2 фрагмента карты, то вполне допустимы стандартные графические редакторы. Однако когда таких фрагментов десятки, а иногда и тысячи, необходимо явно автоматизировать этот процесс. То есть окончательная обработка работы всего коллектива может быть замедленна в случае отсутствия такого автоматизированного средства.
Целью данного диплома является создание программного продукта, который позволит сшивать и редактировать топографические карты. Входными параметрами программы должен служить набор топографических карт. Формат топографических карт может быть таким как jpg, png, bmp. Программа должна предоставить возможность автоматизированной сшивки карт путем анализа изображения, так же интерфейс программы должен позволять добавлять и удалять с карты топографические знаки, возможность как загрузки карт, так и сохранения конечного результата. Сохранение карт должно быть реализовано в форматах jpg, png, bmp и полностью совместимо с современными графически пакетами Photoshop и CorelDrow.
- Аналитический обзор литературы
Картография является одной из древнейших наук. Естественно, обзор литературы был бы неполным, если бы в нем не рассматривались работы древних ученых.
Современная картография подразделяется на ряд дисциплин: картоведение, математическую картографию, картометрию, проектирование и составление карт, редактирование карт, оформление карт, издание карт [1]. Картография тесно связана со многими науками. Цикл географических наук вооружает картографию знаниями, и сегодня картографию трудно представить без тесного взаимодействия с аэрокосмическим зондированием, геоинформатикой и телекоммуникацией [2]. Электронные карты и атласы, трехмерные картографические модели, космофотокарты и другие геоизображения стали привычными средствами исследования для географов, геологов, экологов и других специалистов в науках о Земле и смежных социально-экономических отраслях знания [3]. Особенно тесная связь существует между картографией и геодезией [4]. Геодезия изучает форму и размеры земного эллипсоида, создает плановую и высотную основу топографических карт, а, следовательно, и географических карт. В то же время, в зависимости от задач картографирования, устанавливается программа построения геодезических сетей, определяются требования к их точности и к методике производства работ. Картография активно развивается во многих направлениях. Постоянно расширяется тематика карт, разрабатываются карты нового типа, совершенствуются методы их исследования в научной и практической деятельности. Например, в связи с возрастающей ценностью земель быстро завоевывают признание карты использования земель, или кадастровые карты, показывающие размещение угодий различного хозяйственного использования. Эти карты предназначаются для обеспечения организации эффективного использования и охраны сельскохозяйственных, лесохозяйственных и городских земель при планировании производства, мелиорации земель и решении других народнохозяйственных задач [5].
Новым направлением в развитии современной картографии является геоинформационное картографирование автоматизированное создание и использование карт на основе ГИС (геоинформационных систем), баз картографических данных и знаний.
- Геоинформационное картографирование
Суть геоинформационного картографирования составляет информационно - картографическое моделирование геосистем. Наиболее важными характерными чертами данного вида картографирования являются:
высокая степень автоматизации, опора на базы картографических данных и базы географических знаний;
системный подход к изображению и анализу геосистем;
создание изображений новых видов и типов (электронных карт, трехмерных компьютерных моделей и др.);
применение новых графических средств и дизайна;
оперативность, приближающаяся к реальному времени; преимущественно проблемно-практическая ориентация картографирования, нацеленная на обеспечение принятия решений [6].
Универсальное и наиболее распространенное средство для создания ГИС ARC/INFO служит для обеспечения компьютерного картографирования и оперативного принятия решений. Оно работает с любыми видами информации, имеющей привязку к территории. С помощью ARC/INFO можно легко получить в цифровой форме любую карту, схему, видеоизображение или рисунок, ввести табличные, статистические и другие тематические данные, привязанные к объектам карты. ARC/INFO позволяет работать с сериями карт, накладывая одну карту на другую, и проводить их сопряженный анализ, создавать «твердые» копии необходимых карт и схем.
Упрощенная версия ARC/INFO Arcview поддерживает внутренний формат SHAPE и внутренний язык программирования AVENUE. Но при использовании этой системы для больших по объему слоев проявляется эффект процессорозависимости, т. е. нужно иметь мощные ресурсы процессора и памяти, чтобы эффективно работать с ней. В ее поставку входят дополнительные модули для анализа геоинформационных данных 3D-Analyst и SpatialAnalyst.
Полнофункциональная оболочка географических информационных систем среднего класса ATLAS GIS содержит все обычные средства ввода, редактирования и печати/рисования карт, развитые презентационные средства (полное управление цветами и штриховками, создание и редактирование символов, многочисленные вставки, тематическое картографирование, бизнес-графику). Кроме того, она поддерживает работу с растровыми проектами (растровые подложки), позволяет группировать данные по географическому признаку, создавать буферные зоны, специальные средства обработки данных, основанные на библиотеке встроенных функций и операторов, развитые функции импорта и экспорта данных в другие форматы.
При разработке ГИС-приложений среда разработки Maplnfo Professional обеспечивает доступ к базам данных Oracle8i, хранилищам данных на сервере и управление ними, создание тематических карт, создание и запись SQL-запросов. Кроме того, эта среда разработки поддерживает растровые форматы, включая BMP, JPG, TIFF, MrSID, имеет универсальный преобразователь для форматов AutoDesk, ESRI и Intergraph. Начиная с версии 6, обеспечивается поддержка Интернета и трехмерных изображений, а также усовершенствованы средства геокодирования информации.
Еще одна популярная среда разработки AutoCAD Map обладает всеми инструментами программы AutoCAD 2000, а также специализированными возможностями для создания, отслеживания и производства карт и географических данных. Она позволяет работать с широким спектром файловых форматов и типов данных, обеспечивает возможность связи с базами данных и включает основные инструменты ГИС-анализа. Используя AutoCAD Map, можно связывать карты с ассоциативными базами данных, добавлять данные в карты и делать их более интеллектуальными, чистить карты, строить узловую, сетевую и полигональную топологию для анализа, создавать тематические карты с легендами, работать с существующими данными карты в других системах координат и файловых форматах, импортировать данные из других CAD и ГИС-систем, экспортировать данные в другие форматы, распечатывать карты и атласы.
Главными преимуществами российской системы GEOGRAPH-GE-ODRAW является функциональность и невысокая цена. Она состоит из трех основных модулей:
Geograph (модуль конечного пользователя, фактически это просмотрщик);
Geodraw (векторный топологический редактор);
Geoconstructor (средство разработки приложний).
Программный комплекс GeoCad Systems предназначен для разработки и последующего операционного обслуживания информационных систем целевого (преимущественно, кадастрового) назначения конечного пользователя. Модули управления базами данных этой системы реализованы в среде MS Access, предоставляющей пользователям мощный инструмент разработки и адаптации клиент-приложений системы.
Для обработки графической информации объектов (отображения метрических данных и их графического редактирования) в комплект модульной многоцелевой кадастровой системы Geocad System входит специализированный модуль CPS Graph. Он является неотъемлемой частью.
ГИС ИнГЕО система, в которой пользователь сам может конструировать библиотеки любых векторных символов, линий, заливок. Это наиболее эффективная ГИС для создания топопланов масштаба 1:10000 1:500. Она имеет развитую инструментальную систему в технологии lnternet\lntranet, с помощью которой пользователь может самостоятельно строить сложнейшие реляционные таблицы семантических данных картографических объектов. ИнГЕО имеет мощную кадастровую надстройку систему ИМУЩЕСТВО и систему МОНИТОРИНГ.
Система TopoL представляет собой универсальную ГИС, применимую во многих отраслях для решения разнообразных прикладных задач. Она позволяет выполнять весь комплекс работ по созданию, редактированию, анализу и использованию цифровых карт местности. Ее вариант TopoL-L предназначен для лесхозов и лесоустройства.
Интерфейс программы ориентирован на отраслевые задачи, отличается простотой и функциональностью. Стандартное меню исходного программного продукта отсутствует. Меню содержат только те пункты, которые необходимы пользователю.
Развитие Интернета не обошло стороной и картографию. Так, картографическое ПО для Интернета позволяет публиковать готовые тематические карты во Всемирной сети. Серверные картографические приложения, разработанные для внедрения интерактивных карт в Интернете, имеют широкий набор картографических функций. Одним из таких программных продуктов, предназначенных для публикации и сопровождения картографической информации в Интернете, является MapXtreme сервер картографических приложений, созданный корпорацией Maplnfo. Открытая архитектура MapXtreme работает с любым Webсервером и не нуждается в дополнительных plugins, что позволяет использовать любые браузеры на ПК или рабочих станциях UNIX. Еще один продукт этой корпорации, MapXsite, позволяет достаточно легко встраивать в Webстраницы картографическую информацию.
- Обзор C#
В данной дипломной работе для проектирования редактора карт использовался язык программирования C#. При этом были затронуты такие темы как объектно-ориентированное программирование, а так же использование графики и классов, с ними связанных.
Наиболее полно информация о классах описывается в книге «С# 2005 и платформа .Net 3.0» .Книгу отличает простой и доступный стиль изложения, изобилие примеров и множество рекомендаций по написанию высококачественных программ. Подробно рассматриваются такие вопросы, как основы языка программирования C#, организация среды .NET, работа с данными, написание Windows и Webприложений, взаимодействие через сеть, создание Web служб и многое другое. Немалое внимание уделено проблемам безопасности и сопровождения кода. Тщательно подобранный материал позволит без труда разобраться с тонкостями использования Windows Forms и построения Web страниц [7].
Однако кроме основ построения кода, так же необходимо просматривать готовые решения. Это позволяет значительно повысить скорость разработки а так же повышает опыт программиста. Книга Климова А.П. «С# советы программистам» [8] представляет собой сборник советов, алгоритмов и готовых примеров программ на языке С# в среде MS Visual Studio 2005/2008 из различных областей: работа с формами и элементами управления, папками и файлами, мышью и клавиатурой, мультимедиа и графикой, использование технологий WMI и WSH, взаимодействие с MS Office и другими приложениями, работа в локальной сети и Интернете, особенности использования функций Windows API и др. Так же дополнительно в продолжение темы готовых решений представлена книга «Visual C# в задачах и примерах» [9]. Книга представляет собой сборник программ и задач для самостоятельного решения. Примеры различной степени сложности от простейших до приложений работы с графикой и базами данных демонстрирует назначение базовых компонентов, раскрывает тонкости разработки Windows Forms в Microsoft Visual C#. Уделено внимание использование технологии LINQ. Справочник, входящий в книгу содержит описание базовых компонентов, событий, исключений, и наиболее часто используемых функций.
Примеры работ с графическими приложениями освещено в книге Абрамяна М.Э «Visual C# на примерах» [10]. Книга содержит подробное описание 32 проектов, демонстрирующих различные аспекты создания Windows-приложений для платформы Net Framework. Рассматриваются оптимальные приемы разработки программ, управление событиями, механизм обработки исключений, особенности консольных и MDI приложений. Детально описываются основные компоненты библиотеки Windows Forms и классы, входящие в графическую библиотеку GDI+. Демонстрируются примеры работы с клавиатурой и мышью, а так же дополнительные возможности NET- приложений, в том числе реализация режима Drag&Drop, работа с реестром Windows и др.
Работу с файлами и файловыми системами прекрасно описал Михаил Фленов в своей книге «Библия C#». Книга имела такой значительный успех, что претерпела 2 издание. Материал книги сопровождается большим количеством практических примеров. Подробно описывается логика выполнения каждого участка программы. Во второе издание внесены исправления и добавлена глава по сетевому программированию [11].
- Патентный поиск
В ходе проведения патентного поиска было найдено несколько патентов на смежную с разрабатываемым программным обеспечением (ПО) тему.
Найденные результаты:
1) «Устройство, способ и программное обеспечение для обработки изображений с увеличением резкости» (RU 2456670 C2) патент на полезную модель;
2) «Способ оценки качества изображения, способ формирования документа, компьютерный программный продукт, пользовательский интерфейс, файл данных и электронное устройство» (RU 2437154 С2) патент на полезную модель;
3) «Устройство обработки информации, компьютерный программный продукт и способ управления отображением» (RU 2011134146 A) заявка на изобретение.
Выводы
Таким образом, при разработке диплома пришлось использовать как литературу картографии, так и литературу программирования. При этом были использованы стандарты рисования карт для оформления контекста диплома. Использование же довольно широкого контекста книг С# и .Net позволило использовать широкий арсенал для решений математических и графических задач.
Был проведен патентный поиск и найдено несколько патентов и заявка на изобретение на смежную тему.
- Разработка программной системы
- Разработка алгоритма программы
Нисходящим проектированием алгоритмов, проектированием алгоритмов "сверху вниз" или методом последовательной (пошаговой) нисходящей разработки алгоритмов называется такой метод составления алгоритмов, когда исходная задача (алгоритм) разбивается на ряд вспомогательных подзадач (подалгоритмов), формулируемых и решаемых в терминах более простых и элементарных операций (процедур). Последние, в свою очередь, вновь разбиваются на более простые и элементарные, и так до тех пор, пока не дойдём до команд исполнителя. В терминах этих команд можно представить и выполнить полученные на последнем шаге разбиений подалгоритмы (команд системы команд исполнителя).
Восходящий метод, наоборот, опираясь на некоторый, заранее определяемый корректный набор подалгоритмов, строит функционально завершенные подзадачи более общего назначения, от них переходит к более общим, и так далее, до тех пор, пока не дойдем до уровня, на котором можно записать решение поставленной задачи. Этот метод известен как метод проектирования "снизу вверх".
Структурные принципы алгоритмизации (структурные методы алгоритмизации) это принципы формирования алгоритмов из базовых структурных алгоритмических единиц (следование, ветвление, повторение), используя их последовательное соединение или вложение друг в друга с соблюдением определённых правил, гарантирующих читабельность и исполняемость алгоритма сверху вниз и последовательно.
Структурированный алгоритм это алгоритм, представленный как следования и вложения базовых алгоритмических структур. У структурированного алгоритма статическое состояние (до актуализации алгоритма) и динамическое состояние (после актуализации) имеют одинаковую логическую структуру, которая прослеживается сверху вниз ("как читается, так и исполняется"). При структурированной разработке алгоритмов правильность алгоритма можно проследить на каждом этапе его построения и выполнения.
Теорема (о структурировании). Любой алгоритм может быть эквивалентно представлен структурированным алгоритмом, состоящим из базовых алгоритмических структур.
Одним из широко используемых методов проектирования и разработки алгоритмов (программ) является модульный метод (модульная технология).
Модуль это некоторый алгоритм или некоторый его блок, имеющий конкретное наименование, по которому его можно выделить и актуализировать. Иногда модуль называется вспомогательным алгоритмом, хотя все алгоритмы
носят вспомогательный характер. Это название имеет смысл, когда
рассматривается динамическое состояние алгоритма; в этом случае можно назвать вспомогательным любой алгоритм, используемый данным в качестве блока (составной части) тела этого динамического алгоритма. Используют и другое название модуля подалгоритм. В программировании используются синонимы процедура, подпрограмма.
Свойства модулей:
функциональная целостность и завершенность (каждый модуль реализует одну функцию, но реализует хорошо и полностью);
автономность и независимость от других модулей (независимость работы модуля-преемника от работы модуля-предшественника; при этом их связь осуществляется только на уровне передачи/приема параметров и управления);
эволюционируемость (развиваемость);
открытость для пользователей и разработчиков (для модернизации и использования);
корректность и надежность;
ссылка на тело модуля происходит только по имени модуля, то есть вызов и актуализация модуля возможны только через его заголовок.
Свойства (преимущества) модульного проектирования алгоритмов:
возможность разработки алгоритма большого объема (алгоритмического комплекса) различными исполнителями;
возможность создания и ведения библиотеки наиболее часто используемых алгоритмов (подалгоритмов);
облегчение тестирования алгоритмов и обоснования их правильности;
упрощение проектирования и модификации алгоритмов;
уменьшение сложности разработки (проектирования) алгоритмов (или комплексов алгоритмов);
наблюдаемость вычислительного процесса при реализации алгоритмов.
Тестирование алгоритма это проверка правильности или неправильности работы алгоритма на специально заданных тестах или тестовых примерах задачах с известными входными данными и результатами (иногда достаточны их приближения).
Тестовый набор должен быть минимальным и полным, то есть обеспечивающим проверку каждого отдельного типа наборов входных данных, особенно исключительных случаев.
Пример. Для задачи решения квадратного уравнения ax2 + bx + c = 0 такими исключительными случаями, например, будут: 1) a = b = c = 0; 2) a = 0, b, c отличны от нуля; 3) D = b2 4ac < 0 и др.
Тестирование алгоритма не может дать полной (100%-ой) гарантии правильности алгоритма для всех возможных наборов входных данных, особенно для достаточно сложных алгоритмов. Полную гарантию правильности алгоритма может дать описание работы и результатов алгоритма с помощью системы аксиом и правил вывода или верификация алгоритма.
Проанализируем алгоритм нашей программы. Так как входными параметрами для нашей программы являются графические файлы, то сначала мы
начинает свою работу. В том случае, если же в папке нет графического файла, то
проверяет эти файлы. Если они действительно графические, то программа программа ждет, пока пользователь не введет папку с графическим файлом. Алгоритм программы приведен на рисунке 2.1.
Рисунок 2.1 Алгоритм программы
- Разработка схемы и структуры программы
Структурное программирование методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.
В соответствии с данной методологией любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
последовательное исполнение однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
ветвление однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
цикл многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).
В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т.н. подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
Разработка программы ведётся пошагово, методом «сверху вниз».
Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.
Теорема о структурном программировании. Любую схему алгоритма можно
представить в виде композиции вложенных блоков begin и end, условных операторов if, then, else, циклов с предусловием (while) и может быть дополнительных логических переменных (флагов).Эта теорема была сформулирована итальянскими математиками К. Бомом и Дж. Якопини в 1966 году и говорит нам о том, как можно избежать использования оператора перехода goto.
Итак, разработка схемы программы является создание последовательностей программ и подпрограмм. То есть схема программы это уже реализация его готовой структуры. Итак, разберем же что такое подпрограммы и функции, что есть функциональное программирование.
Функциональное программирование раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании). Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательное изменение состояний (в значении, подобном таковому в теории автоматов). При необходимости, в функциональном программировании вся совокупность последовательных состояний вычислительного процесса представляется явным образом, например как список.
Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния (в отличие от императивного, где одной из базовых концепций является переменная, хранящая своё значение и позволяющая менять его по мере выполнения алгоритма).
На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных. Таким образом, в императивном программировании при вызове одной и той же функции с одинаковыми параметрами, но на разных этапах выполнения алгоритма, можно получить разные данные на выходе из-за влияния на функцию состояния переменных. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат: выходные данные зависят только от входных. Это позволяет средам выполнения программ на функциональных языках кешировать результаты функций, и вызывать их в порядке, не определяемом алгоритмом и распараллеливать их без каких-либо дополнительных действий со стороны программиста.
Рассмотрим ранее представленный алгоритм программы. Следует отметить, что структурная схема вовсе не обязательно повторяет функционально алгоритм программы. Допустим, реализация проверки и загрузки входных файлов можно реализовать как в 1 функции, так и 2 разных. Так как количество операций при
загрузке файлов невелико, реализуем процесс загрузки картинок в одной функции.
Заложим в нее обязательно ряд проверок и действий. Среди них:
является ли файл графическим или нет (по расширению);
наличие более 1 файла в папке;
создание массива объектив типа Image.
Следующим этапом логично было бы вывести результат на экран. Так как согласно логике приложений языка С# мы должны все выводимые графические объекты помещать в функцию On Paint, необходимо продумать механизм вывода не только результата загрузки картинок из файла, но и так же всех последующих результатов программы. Для этого в функцию On Paint поместим ряд проверок, которые будут реагировать на тип выводимого результата. На рисунке 2.2 представлена структурная схема программы. Наша дальнейшая задача проанализировать картинки и выстроить их на экране в нужном порядке. Так как эта задача достаточно сложна, то реализуем ряд вспомогательных функций, которые, однако, на структурной схеме отображать не будем.
Рисунок 2.2 Структурная схема программы
-
Разработка алгоритмов отдельных функций
- Сравнение пикселей
Так как 2 пикселя при сравнении имеют совершенно одинаковые размерные (высота и ширина) параметры, то для сравнения можем взять параметры цвета и прозрачность. Так как параметров цвета 3 R, G, B, для сравнения примем 4 параметра. Согласно коду
public bool PixelAnalis(Color a, Color b, int percent)
{
bool like = false; //
bool like1 =false; // прозрачность
bool like2 = false; //
bool like3 = false; //
bool like4 = false; //
double res = 0.0;
if (a.A >= b.A)
{
res = (double)b.A / (double)a.A * 100.0;
if ((int)res >= percent)
like1 = true;
}
else {
res = (double)a.A / (double)b.A * 100.0;
if ((int)res >= percent)
like1 = true;
}
if (a.B >= b.B)
{
res =(double) b.B /(double) a.B * 100.0;
if ((int)res >= percent)
like2 = true;
}
else
{
res = (double)a.B / (double)b.B * 100.0;
if ((int)res >= percent)
like2 = true;
}
if (a.G >= b.G)
{
res = (double)b.G / (double)a.G * 100.0;
if ((int)res >= percent)
like3 = true;
}
else
{
res = (double)a.G / (double)b.G * 100.0;
if ((int)res >= percent)
like3 = true;
}
if (a.R >= b.R)
{
res = (double)b.R / (double)a.R * 100.0;
if ((int)res >= percent)
like4 = true;
}
else
{
res = (double)a.R / (double)b.R * 100.0;
if ((int)res >= percent)
like4 = true;
}
if (like1 && like2 && like3 && like4) like = true;
return like;
}
В функции происходит получение 4 ответов, совпадают ли они с определенным процентом, который мы задали ранее как входящий параметр, и выдается результат как суммарное логическое «И» (логическое умножение). Если хотя бы 1 из параметров не совпал, а соответственно не выполнено условие попадания в заданный интервал, можно с заданным процентом совпадения считает пиксели не совпадающими.
- Сравнение «картин»
Две прямоугольные области, заполненные пикселями с определёнными цветовыми параметрами, назовем картинами. Чтобы сравнить, границы картин совпадают или нет, необходимо пройти по краю картины или последнему пикселю картины в течение всей длинны или ширины. Картины в сравнении представлены на рисунке 2.3
Рисунок 2.3 Картины в сравнении
Затем необходимо сформировать массив совпадений. Количество «ответов» в массиве будет равно количеству пикселей. Соответственно, если сравнивать каждую сторону первой картины с 4 сторонами второй картины, а так же все остальные стороны, получим массив совпадений из 16 строк. Примем обход сторон по часовой стрелке. Обход сторон представлен на рисунке 2.4.
Рисунок 2.4 Порядок обхода пикселей
Соответственно массив совпадений будет выглядеть как набор булевских значений). Массив совпадений пикселей представлен на рисунке 2.5.
Рисунок 2.5 Массив совпадений пикселей
Однако массив, состоящий из огромного количества совпадений пикселей, совершенно не то, что нам нужно. Приведем этот массив к одномерному массиву, где в каждой ячейке будет сумма положительных результатов. Схематично массив предложен на рисунке 2.6.
Рисунок 2.6 Схематичный массив совпадений пикселей
Данный массив содержит суммарное совпадение пикселей 2 картин. Исходя из рисунка, мы не можем сказать сразу, какая все же сторона наиболее совпадает. Соответственно мы должны выяснить максимальное число для 1 стороны и запомним этот результат. Ответом будет массив из 4 значений, который возвращает максимальное значение по каждой стороне и представлено на рисунок 2.7. Так же стоит отметить, что стороны кубика нумеруются с «1».
Рисунок 2.7 Суммарный результат обработки массива
Однако нас не интересуют значения. Нас интересуют порядковые номера сторон, с которыми произошло совпадение. Для этого анализируем, используя предыдущий массив, какая сторона соответствует данным числам. Результаты записываем в массив результатов функции и представлены на рисунке 2.8.
Рисунок 2.8 Результат работы функции
Далее проанализируем код отдельно-взятых функций программы.
public int[] AnalisKubov(System.Drawing.Bitmap image1, System.Drawing.Bitmap image2, int percent)
Функция в качестве входящих параметров получает две «картины» или 2 объекта типа System.Drawing.Bitmap а так же процент совпадения сторон друг с другом. Под процентом совпадения сторон понимается отношения количества совпавших пикселей к общему количеству пикселей.
Color[][] im1 = new Color[4][]; // 1 массив
Color[][] im2 = new Color[4][]; // 2 массив
im1[0] = new Color[image1.Width];
im1[1] = new Color[image1.Height];
im1[2] = new Color[image1.Width];
im1[3] = new Color[image1.Height];
im2[0] = new Color[image2.Width];
im2[1] = new Color[image2.Height];
im2[2] = new Color[image2.Width];
im2[3] = new Color[image2.Height];
Данный код создает 2 массива и определяет его размерность. То есть размерность массива, полностью соответствует количество пикселей картин, полученных как входные параметры.
for (int i = 0; i < im1.Length; i++)
{
for (int j = 0; j < im1[i].Length; j++)
{
if (i == 0) im1[0][j] = image1.GetPixel(j, 1);
if (i == 1) im1[1][j] = image1.GetPixel(image1.Width - 1, j);
if (i == 2) im1[2][j] = image1.GetPixel(j, image1.Height - 1);
if (i == 3) im1[3][j] = image1.GetPixel(1, j);
}
}
for (int i = 0; i < im2.Length; i++)
{
for (int j = 0; j < im2[i].Length; j++)
{
if (i == 0) im2[0][j] = image2.GetPixel(j, 1);
if (i == 1) im2[1][j] = image2.GetPixel(image2.Width - 1, j);
if (i == 2) im2[2][j] = image2.GetPixel(j, image2.Height - 1);
if (i == 3) im2[3][j] = image2.GetPixel(1, j);
}
}
В дальнейшем мы эти массивы заполняем . То есть получаем последний пиксель стороны картины с помощью функции GetPixel.
bool[][] res = new bool[16][];
for (int i = 0; i <= 15; i++)
{
int k = 0;
if (i <= 3) k = im1[0].Length;
if (i > 3 && i <= 7) k = im1[1].Length;
if (i > 7 && i <= 11) k = im1[2].Length;
if (i > 11 && i <= 15) k = im1[3].Length;
res[i] = new bool[k];
}
Результаты совпадений поместим в массив. Так как будет сравниваться 16 сторон, то полученный результат поместим в массив типа bool [16]. Размерность массива будет соответствовать размерности массива с пикселями.
int m = 0; //переменная для счета количества проходов
for (int i = 0; i < im1.Length; i++) // проход по граням 1 кубика
{
for (int k = 0; k < im1.Length; k++) // проход по граням 2 кубика
{
if (im1[i].Length == im2[k].Length)
{
for (int j = 0; j < im1[i].Length; j++) // проход по пикселям
{
if (PixelAnalis(im1[i][j], im2[k][j], Percent)) res[m][j] = true;
}
}
m++;
}
}
Данный код заполняет массив ответов с помощью функции PixelAnalis, разобранной ранее.
MassRes = new int[4]; // этот массив - массив совпадений
int[] TempMass = new int[16];
int count = 0;
for (int i = 0; i <= 15; i++)
{
for (int j = 0; j < res[i].Length; j++)
{
if (res[i][j]) count++;
}
TempMass [i] = count;
count = 0;
}
Здесь мы создаем временный массив TempMass, который будет содержать суммарную информацию сравнений сторон картин.
Далее заполним массив, состоящий из 4 элементов, каждый из которых соответствует стороне.
int[] Max = new int[4];
for (int i = 0; i <= 15; i++)
{
if (i <= 3)
{
if (TempMass[i] > Max[0])
{
Max[0] = TempMass[i];
if (Max[0] > 0 & TempMass[i] > 0)
{
if ((int)(((double)Max[0] / (double)res[i].Length) * 100) >= percent) MassRes[0] = i + 1;
};
} //1 сторона кубика
}
if ((i > 3 & i <= 7))
{
if (TempMass[i] >= Max[1])
{
Max[1] = TempMass[i];
if (Max[1] > 0 & TempMass[i] > 0)
{
if ((int)(((double)Max[1] / (double)res[i].Length) * 100) >= percent) MassRes[1] = i - 3;
};
} //2 сторона кубика
}
if ((i > 7 & i <= 11))
{
if (TempMass[i] >= Max[2])
{
Max[2] = TempMass[i];
if (Max[2] > 0 & TempMass[i] > 0)
{
if ((int)(((double)Max[2] / (double)res[i].Length) * 100) >= percent) MassRes[2] = i - 7;
};
}
//3 сторона кубика
}
if ((i > 11 & i <= 15))
{
if (TempMass[i] >= Max[3])
{
Max[3] = TempMass[i];
if (Max[3] > 0 & TempMass[i] > 0)
{
if ((int)(((double)Max[3] / (double)res[i].Length) * 100) >= percent) MassRes[3] = i - 11;
};
}//4 сторона кубика
}
}
В данном коде мы сначала проверяем, какая из сторон учувствует в сравнении. Например, if (i <= 3) это первая сторона. Значит, результат мы запишем в массив с нулевым индексом. Так же мы должны проверить, максимальное ли число мы записываем или нет. Это максимальное число мы держим во временном массиве Max. И элемент Max[0] соответствует 1 максимальному числу массива.
Так же этот массив мы используем для нахождения индекса элемента, с каким совпала соответствующая сторона картины (код ниже).
for (int i = 0; i < 4; i++)
{
if ( Max[i] > maxtemp)
{
maxtemp = Max[i];
}
}
for (int i = 0; i < 4; i++)
{
if (Max[i] > (int) (((double)maxtemp) * (((double)Percent1) / 100)))
{
max1[l] = Max[i];
l++;
}
}
// ищем номера совпавших элементов
int j = 3;
l = 0;
int k=0;
for (int i = 0; i < TempMass.Length;i++ )
{
if ((max1[k]> 0) & (max1[k] == TempMass[i])) // счетчик элементов массива max1
{
if (i <= 3) \
{
MassRes[0] = i + 1; TempMass1[0] = max1[k];
}
if (i > 3 && i <= 7)
{
MassRes[1] = i - 3;TempMass1[1] = max1[k];
}
if (i > 7 && i <= 11)
{
MassRes[2] = i - 7; TempMass1[2] = max1[k];
}
if (i > 11 && i <= 15)
{
MassRes[3] = i - 11; TempMass1[3] = max1[k];
}
if(k < 3) k++; // это заплатка, если неверно выставлены проценты
}
if (j == i) // счетчик сторон
{
l++;
j = j + 4;
}
}
Одной из проблем при поиске совпавших сторон является наличие нескольких совпадений. Однако, как показала практика, при наличии совпавших сторон более 1, их численное значение (количество совпавших пикселей) значительно меньше(на 30-40 процентов). Следовательно, найдя максимальное значение из всех совпавших сторон, мы можем «отсечь» лишние стороны, которые являются не более чем цифровым случайным совпадением.
- Анализ массива картин
Существует некий массив наборов картин, которые необходимо сравнить. Сравнение полностью картин необходимость отсутствует. Достаточно сравнить их «края». Таким образом, можно обнаружить, какие из краев совпадают. Решить эту задачу можно 2 способами:
А) разложить все стороны в один одномерный массив, сравнивать каждую сторону с оставшимися, и, таким образом, получить одномерный массив ответов.
Б) все картины сравнивать по очереди, затем получить массив ответов сравнения картин (используется в этом дипломе).
Однако, кроме проблемы получения массива соответствий также необходимо
решить проблему построения паззла, чтобы затем его собрать в единую картину.
Таким образом, решение задачи будет выглядеть следующим образом:
Рисунок 2.9 Последовательность действий при решении задачи сравнений картин
Получение массива совпадений есть последовательный перебор каждой картины в сравнении с остальными. Массив совпадений представлен на рисунке 2.10.
Рисунок 2.10 Порядок сравнений картин
Возьмем для примера 4 картины. То есть, чтобы сравнить их, необходимо:
А) 1 сравнить с 2,3,4.
Б) 2 сравнить с 3 и 4.
В) 3 сравнить с 4.
В соответствии с этим, массив совпадений для 4 картин будет выглядеть следующим образом:
Рисунок 2.11 Массив результатов совпадений сторон
Далее необходимо полученный результат преобразовать в координаты реальной картинки. Для этого надо собрать паззл и рассчитать координаты каждой картины.
Сборка паззла происходит по следующей схеме. Имея массив совпадений, мы можем сразу же строить паззл. Для этого введем массив с условными координатами и шагом в 1.
Положим начало координат в точку 100,100. Делается это для того, чтобы картина была собрана в положительной линейке координат. Далее в зависимости от положения относительно исходного кубика определяем положение кубика, с которым обнаружилось совпадение.
Схематичное изображение системы условных координат представлено на рисунке 2.12. То есть условная координата кубика, на который указывает массив совпадений, будет равна координате текущего кубика плюс корректировка на сторону.
Рисунок 2.12 Система условных координат для сборки паззла
После сборки паззла необходимо переместить в начало координат. Делается это для упрощения расчета реальных координат. Для этого находится квадратик с минимальной условной координатой по Х и У. Затем начало координат переносим в точку (0,0). От всех условных координат отнимаем эти значения. При этом перенос выглядит как на рисунке 2.13.
Рисунок 2.13 Перенос собранного паззла в начало координат
Далее определяем максимальные границы в условных координатах. Проходим по этим координатам, начиная с координаты от 0 до максимальных значений. При проходе находим кубики с относительными координатами. Зная реальную ширину и длину элементов, рассчитываем реальные координаты и записываем в массив данных элементов с реальными координатами. Далее вызываем функцию для построения рисунка из реальных координат и получаем необходимую готовую карту.
Выводы
При разработке программы мы использовали функциональное программирование. Были созданы классы для промежуточных вычислений, а так же для сохранения результатов. Так же использовалась событийная модель, которая позволила при определенных обстоятельствах заблокировать интерактивные элементы, что ограждает пользователя от ошибок. Так же в процессе реализации автоматизации сращивания картинок был реализован алгоритм сбора паззла, и отброса неверных результатов. В случае, если программа не полностью собрала паззл, существует возможность ручного сбора карты.
Использование объектно-ориентированного подхода, а так же библиотеки .Net позволило полностью реализовать необходимый функционал программы, который соответствует техническому заданию.
-
Обоснование технических приемов программирования
- Обоснование выбора языка программирования
Язык С# и связанную с ним среду .NET Framework можно без преувеличения назвать самой значительной из предлагаемых в настоящее время технологий для разработчиков. Среда .NET является такой средой, которая была создана для того, чтобы в ней можно было разрабатывать практически любое приложение для запуска в Windows, а С# является языком программирования, который был специально создан для использования в .NET Framework. Например, с применением С# и .NET Framework можно создавать динамические веб-страницы, приложения Windows Presentation Foundation, веб-службы XML, компоненты для распределенных приложений, компоненты для доступа к базам данных, классические настольные приложения Windows и даже клиентские приложения нового интеллектуального типа, обладающие возможностями для работы в оперативном и автономном режимах. В настоящем дипломе рассматривается версия .NET Framework 4. Не стоит поддаваться заблуждению из-за наличия в названии Framework слова "NET" и думать, что данная среда предназначена только для создания приложений, ориентированных на Интернет. Слово "NET" здесь является лишь показателем того, что, по мнению Microsoft, распределенные приложения, в которых обработка распределяется между клиентом и сервером, являются шагом вперед. Однако важно понимать, что С# представляет собой язык, предназначенный не только для написания приложений, способных работать в Интернете и в сети. Он предоставляет средства для кодирования практически любого типа программного обеспечения или компонентов для платформы Windows. Язык С# и среда .NET привели к революционным изменениям в способе написания разработчиками программ и сделали программирование приложений для Windows гораздо более простым, чем когда-либо. Так что же такого важного в .NET и С#?
Для понимания важности .NET не помешает вспомнить о многих технологиях Windows, которые появились в последние примерно 18 лет. Хотя на первый взгляд все они могут выглядеть довольно разными, на самом деле все операционные системы Windows, начиная с Windows 3.1 (которая вышла в 1992 г.) и заканчивая Window 7 и Windows Server 2008 R2, в основе своей имеют один и тот же хорошо знакомый API-интерфейс Windows.
По мере появления новых версий Windows в этот API-интерфейс добавлялось много новых функций, но это был скорее процесс совершенствования и расширения API-интерфейса, а не его замена. То же самое можно сказать и о многих других технологий и каркасах, которые применялись для разработки программного обеспечения, ориентированного на Windows. Например, технология
COM (Component Object Model объектная модель компонентов) первоначально называлась технологией OLE (Object Linking and Embedding связывание и внедрение объектов) и по большей части представляла собой средство для связывания различных типов документов Office, например, для размещения в документе Word таблицы Excel. После этого она эволюционировала в технологию СОМ, затем в DCOM (Distributed СОМ распределенная объектная модель компонентов) и, наконец, в сложную технологию СОМ+, которая стала основой для обеспечения связи между всеми компонентами, а также реализации транзакций, служб обмена сообщениями и организации пула объектов.
Подобный подход с совершенствованием программного обеспечения был выбран Microsoft по вполне очевидной причине, а именно для обеспечения обратной совместимости. За многие годы независимыми разработчиками была написана масса программ для Windows, и ОС Windows не была бы такой успешной, если бы при каждом добавлении новой технологии существующая кодовая база нарушалась. Хотя наличие обратной совместимости является важным свойством технологий Windows и одной из сильных сторон платформы Windows, с ним также связан и один серьезный недостаток.
При каждом совершенствовании какой-нибудь технологии и добавлении в нее новых возможностей, из-за необходимости в наличии обратной совместимости она получается немного сложнее, чем была раньше. Из-за этого со временем стало ясно, что нужно что-то менять. В Microsoft не могли до бесконечности расширять одни и те же языки и средства для разработки, постоянно делая их все более и более сложными для удовлетворения конфликтующих между собой потребностей в поддержке новейшего оборудования и обеспечении обратной совместимости с тем, что было в ходу, когда Windows впервые стала популярной в начале 90-х годов прошлого века. Настал момент начать с чистого листа и создать простой, но при этом совершенный набор языков, сред и средств разработки, который бы позволял разработчиками легко писать современное программное обеспечение. Для этого первоначально и были предназначены язык С# и среда .NET. Грубо говоря, .NET представляет собой платформу или API-интерфейс для программирования на платформе Windows. Вместе с .NET Framework язык С# был разработан с нуля специально для работы в .NET, а также для объединения всех достижений, которые были сделаны в средах разработки, и всех принципов объектно-ориентированного программирования, которые были выведены за последние 25 лет.
Прежде чем продолжить, следует отметить, что обратная совместимость при этом не утратилась. Существующие программы все равно будут продолжать работать, потому что в .NET предусмотрена возможность для работы с существующим программным обеспечением.
В настоящее время связь между программными компонентами в Windows осуществляется практически полностью за счет использования технологии СОМ. С учетом этого в .NET Framework предлагается и возможность для создания оболочек вокруг существующих компонентов СОМ и тем самым позволения компонентам .NET взаимодействовать с ними.
Преимущества .Net. Пока лишь в общем говорилось о том, насколько .NET
является замечательной технологией, но ничего конкретно о том, каким образом она облегчает жизнь разработчикам. Поэтому в настоящем разделе кратко перечисляются некоторые из наиболее совершенных функциональных возможностей .NET. И .NET Framework, и С# изначально основаны на принципах объектно-ориентированного программирования. Поставляемая библиотека базовых классов построена полностью с нуля и является интуитивно понятной.
Независимость от языка. В .NET код, написанный на любом языке Visual Basic, C# или управляемом C++ компилируется в код на промежуточном языке (Intermediate Language). Это делает языки способными к взаимодействию в невиданной до сих пор мере.
Усовершенствованная поддержка для создания динамических веб-страниц. Хотя в классической технологии ASP предлагалась довольно высокая степень гибкости, ее все равно не хватало из-за необходимости использования интерпретируемых сценарных языков, а отсутствие объектно-ориентированного дизайна часто приводило к получению довольно запутанного кода ASP. В .NET предлагается интегрированная поддержка для создания веб-страниц с помощью ASP.NET. В случае применения ASP.NET код создаваемых страниц поддается компиляции и может быть написан на любом поддерживающем .NET языке высокого уровня, например, С# или Visual Basic 2010. В новой версии .NET эта поддержка улучшилась еще больше, сделав возможным применение новейших технологий вроде Ajax и jQuery.
Эффективный доступ к данным. Набор компонентов .NET, известный под общим названием ADO.NET, позволяет получать эффективный доступ к реляционным базам данных и многим другим источникам данных. Также предлагаются компоненты, позволяющие получать доступ к файловой системе и каталогам. В частности, в .NET встроена поддержка XML, позволяющая манипулировать данными, импортируемыми и экспортируемыми на платформы, отличные от Windows.
Разделение кода. В .NET был полностью переделан способ разделения кода
между приложениями за счет введения понятия сборки вместо традиционных библиотек DLL. Сборки обладают формальными средствами для управления версиями и допускают одновременное существование рядом нескольких различных версий сборок.
Повышенная безопасность. В каждой сборке может содержаться встроенная
информация о безопасности, указывающая, какому конкретно пользователю или группе пользователей либо процессу разрешено вызывать методы из тех или иных
классов. Это позволяет очень точно настраивать возможный способ применения развертываемых сборок.
Установка с нулевым воздействием. Сборки бывают двух типов: разделяемые и приватные. Разделяемые сборки представляют собой обычные библиотеки, доступные всему программному обеспечению, а приватные сборки предназначены для использования только с определенными программами. Существующие программы все равно будут продолжать работать, потому что в .NET предусмотрена возможность для работы с существующим программным обеспечением. Приватные сборки являются полностью самодостаточными, поэтому процесс их установки выглядит просто. Никакие записи в системный реестр не добавляется; все нужные файлы просто размещаются в папке файловой
системы. В .NET предлагается полностью интегрированная поддержка для разработки веб-служб таким же простым образом, как и приложений любых других типов.
Visual Studio 2010. Вместе с .NET поставляется среда разработки Visual Studio 2010, которая способна одинаково хорошо справляться как с кодом на языке C++, С# и Visual Basic 2010, так и с кодом ASP.NET или XML. В Visual Studio 2010
интегрированы все наилучшие возможности сред конкретных языков из всех предыдущих версий этой замечательной IDE-среды.
- Обоснование выбора операционной системы
Для выбора операционной системы необходимо сначала определиться, какие стоит рассматривать. Исторически сложилось так, что наиболее превалирующими операционными системами являются Windows и Linux(Unix). Следовательно, их и необходимо сравнивать.
Поскольку мы работаем главным образом со сферой "настольных компьютеров", знаем ее хорошо, и потому также, что эта область использования самая большая, свое сравнение будем делать применительно к ней.
Для начала необходимо дать определение понятию "настольный компьютер".
Это не буквально компьютер стоящий или лежащий на столе. Он может находиться под столом, на коленях, на кровати, да не важно где, но используется для работы с текстовыми документами, непрофессиональной или полупрофессиональной обработки фото или видео материалов, просмотра интернет-сайтов, общения через Интернет.
То есть это компьютер, используемый дома или в офисе для довольно широкого круга несложных задач, исключая узкоспециальные и высокопрофессиональные области вроде инженерного проектирования или видеопроизводства. На западе это называют "сектор SOHO (small office, home office)".
Также нужно сказать о принципиальных различиях между операционными системами MS Windows и GNU/Linux. Для точного понимания того, что есть что.
Первое отличие заключается в том, что операционная система (далее будет использоваться сокращение ОС) MS Windows разрабатывается и поддерживается одной единственной компанией Microsoft corporation. Ей же принадлежат авторские права на этот продукт, и она же взимает плату за использование ОС Windows и бесплатного использования компания Microsoft не допускает. То есть если вы хотите использовать эту ОС вы должны заплатить компании Microsoft.
GNU/Linux это ОС, разрабатываемая и поддерживаемая десятками, если не сотнями компаний в разных странах мира и тысячами программистов. Права на эту ОС переданы в общественную собственность. И хотя в мире есть много компаний, которые предоставляют платную техническую поддержку этой ОС, само использование GNU/Linux не оговаривается финансовыми условиями. То есть вы не обязаны никому ничего платить, для того чтобы иметь право использования Linux.
Второе принципиальное отличие заключается в том, что в Windows графическая среда пользователя является неотъемлемой частью ОС. То есть Windows в варианте без графической среды (консольный режим) попросту не существует.
В то время как GNU/Linux это ОС текстового (консольного) режима и графическая среда это отдельный программный продукт, подобно текстовому редактору или видеопроигрывателю. Программ, которые реализуют графическую среду для ОС GNU/Linux более 10, но широко используются только две - GNOME и KDE.
Графическая среда пользователя необходимая и важнейшая часть ОС для настольных компьютеров. И сравнивая две ОС с этой точки зрения, важно понимать, что мы сравниваем Windows не с Linux, а с одной из графических сред, например с KDE.
Третье отличие в том, что MS Windows как конечный продукт состоит из собственно ОС и небольшого набора прикладных программ, которые имеют очень скромную функциональность. Другими словами, устанавливая Windows, вы получаете только ОС и для того, чтобы решать какие-то задачи вам нужно дополнительно находить и устанавливать прикладные программы.
GNU/Linux в чистом виде, как ОС, распространяется лишь в узкоспециальных областях применения. А применительно к рассматриваемому мной случаю используются так называемые дистрибутивы Linux. Дистрибутив это комплект, состоящий из ОС GNU/Linux, графической среды пользователя и набора прикладных программ. То есть, устанавливая дистрибутив Linux, вы получаете готовую к практическому использованию систему, в которую вам быть может ничего больше не нужно будет добавлять.
Ну и поскольку Linux никому конкретно не принадлежит и существуют разные графические среды и разные прикладные программы то, как следствие этого сотни компаний или даже просто группы частных лиц предлагают десятки дистрибутивов Linux. Некоторые из них похожи почти как близнецы, некоторые сильно различаются. А в мире Windows различия заключаются лишь в версиях самой ОС Windows и этих версий меньше чем дистрибутивов Linux.
Теперь я перехожу собственно к сравнению, и делать это буду простым перечислением плюсов и минусов каждой операционной системы.
ОС MS Windows имеет как плюсы, так и минусы. Например, поддержка очень большого ассортимента компьютерного оборудования. Какая бы экзотическая "железяка" вам не попалась, почти наверняка вы сможете ее использовать под Windows. Хотя быть может вам и потребуется время на поиски нужной программы-драйвера. Огромное количество прикладных программ, на сегодняшний день это уже, наверное, более ста тысяч наименований. Для любой прикладной задачи на платформе Windows есть как минимум несколько десятков, для популярных задач существуют сотни программ. Выбрать есть из чего. На любой вкус.
Большое количество специалистов, которые более или менее хорошо знают
семейство ОС Windows. То есть, если вам потребуется помощь, вы ее найдете легко и за умеренную цену.
К минусам же можно отнести сравнительно высокую стоимость.Даже в самом дешевом варианте , притом, что такая "дешевая" Windows, приобретаемая в комплекте с новым компьютером, "привязана" к этому компьютеру. А это значит, что, меняя компьютер, вам снова придется тратить деньги на Windows. Варианты Windows независимые от компьютера имеют цену ближе к двумстам долларов США и выше. И это стоимость Windows для одного компьютера. И если вам нужна ОС, например, на пять компьютеров, которые уже у вас есть (не новые), то придется выложить за пять копий Windows около тысячи долларов. Очень большое количество вредоносных программ (так называемые компьютерные вирусы). Для версии Windows XP это особо серьезная проблема, которая вынуждает конечного пользователя нести дополнительные расходы. Либо на покупку хорошей антивирусной программы либо на обращение к специалистам в случаях, когда вредоносные программы делают невозможной нормальную работу ОС Windows. Эту проблему можно уменьшить за счет квалифицированной настройки ОС Windows и аккуратного ее использования в ситуациях риска, главная из которых Интернет. Также жесткая зависимость от разработчика. ОС Windows распространяется только в бинарном виде, который труднодоступен для изменения, но более того, компания Microsoft вообще запрещает вносить какие-либо изменения в рабочие коды ОС Windows. Так что если вам потребуется какая-то функциональность, которой сейчас нет в ОС Windows, то остается лишь надеяться на, то, что Microsoft когда-нибудь эту функциональность реализует либо искать некие "заплатки" от сторонних разработчиков. Впрочем, для среднестатистического пользователя это несущественный недостаток.
Плюсы ОС GNU/Linux это сравнительно низкая стоимость. В более или менее большом городе вполне реально получить диск с каким-либо дистрибутивом Linux, обратившись к энтузиастам, распространяющим Linux. Если таковых в вашем городе нет, можно купить наиболее популярные дистрибутивы через Интернет, с доставкой по почте и это можно сделать в любом населенном пункте, где работает почта. Также по почте можно совсем бесплатно получить CD диск с дистрибутивом Ubuntu Linux. При этом, имея всего одну физическую копию дистрибутива Linux, вы получаете право установить его на любое количество компьютеров. То есть, возвращаясь, к примеру, о пяти компьютерах, если вы купите одну копию дистрибутива Linux это будут все ваши расходы на пять компьютеров - вам не нужно будет покупать пять копий. Итак, с одной стороны (Windows) около тысячи долларов, с другой стороны (Linux) примерно 300 рублей (или даже меньше этого). Также практическое отсутствие, по крайней мере, на сегодняшний день, вредоносных программ для этой платформы. Что позволяет избежать дополнительных расходов по предотвращению или ликвидации ущерба от вредоносных программ. Независимость от разработчика. Если вам потребовалась какая-то функциональность, отсутствующая в ОС Linux, вы может ее добавить своими собственными усилиями. Такая возможность есть благодаря тому, что ОС Linux распространяется не только в бинарном виде, но и в исходных кодах, причем нет никаких запретов на модификацию этих исходных кодов.
ОС GNU/Linux имеет ряд минусов. Например, значительно худшая, чем для платформы Windows, поддержка компьютерного оборудования, в особенности внешнего, такого как, например принтеры или USB устройства. Пожалуй, хуже всего дело обстоит со сканерами и USB, а также внутренними HSF/HCF модемами. Вполне реальна ситуация когда вам не удастся использовать какое-то оборудование под ОС Linux. Но проблема в значительной степени решаема, за счет более тщательного подхода к выбору оборудования. Перед приобретением "железки" можно, в Интернет, поискать информацию о возможности ее работы под ОС Linux.
Также значительно меньшее, чем для платформы Windows, количество прикладных программ. Более того, если речь идет о некоторых программах - безусловных лидерах в своих прикладных областях, то под ОС Linux нет ни соответствующих версий самих этих программ, ни других, сопоставимых по функциональности программ. К таким прикладным программам относятся продукты компании Adobe, экономические программы 1С, программа инженерного проектирования AutoCAD, программы распознавания текстов (FineReader). Конечно, под ОС Linux есть и графические редакторы и программы моделирования/проектирования, но они сильно уступают лидерам. Однако программы уровня Adobe PhotoShop или AutoCAD необходимы далеко не всем и для распространенных случаев, программ под ОС Linux вполне хватает. Частично этот недостаток можно компенсировать за счет того, что некоторые Windows-программы можно запустить на платформе Linux. Это возможно не для всех Windows-программ, но быть может именно та Windows-программа, которая вам нужна, будет работать под Linux.
Меньшее, чем для платформы Windows, количество хороших или приличных специалистов. То есть, если вам потребуется помощь, то найти человека, достаточно хорошо разбирающегося в Linux, будет не так просто. Вполне возможно, что и стоимость услуг такого специалиста будет выше, чем в случае с Windows.
Выводы
Казалось бы, при таком количестве плюсов и минусов довольно трудно сделать любой из операционных систем предпочтение. Однако учитывая сферу применения данной программы, стоит принять тот факт, что она ориентирована только на графическую среду. Windows же признана лучшей системой для воспроизведения и работы с графикой. В связи с чем можно однозначно дать предпочтение этой операционной системе.
Исходя из вышесказанного, платформой для нашей программы мы выбираем Windows. Несмотря на то, что она относится к платным продуктам, все ее параметры однозначно говорят в пользу нашего выбора. Таким образом, выбрав Windows в качестве операционной системы мы получим и среду разработки и набор реализованных для работы с графикой программ и процедур для языка C#.
-
Руководство пользователя системы
- Установка программы
Для установки программы необходимо файлы с установочными файлами перенести на свой компьютер, а затем запустить файл Setup. Список файлов представлен на рисунке 4.1.
Рисунок 4.1 Установка программы
- Удаление программы
Для удаления программы необходимо зайти в панель управления, в папку «Установка и удаление программ » затем найти приложение «Diplom karta» и двойным кликом деинсталлировать ее. Окно «установка и удаление программ» представлена на рисунке 4.2.
Рисунок 4.2 Удаление программы
-
Последовательность действий пользователя
Для того, чтобы начать работу с программой, необходимо запустить установленное приложение либо через панель управления пуск либо с носителя, куда установлена программа. Выбор файла представлен на рисунке 4.3.
После запуска программы мы увидим интерфейс программы. Интерфейс программы представлен на рисунке 4.4. На рисунке цифрами обозначены:
1 меню для работы с файлами, позволяет добавлять файлы в проект
2 меню для управления работой программы; задает режимы склеивания картинок, сравнения пикселей
3 меню для выполнения операций пользователя
4 панель для добавления топографических знаков
Рисунок 4.3 Первый запуск приложения
Рисунок 4.4 Интерфейс программы
Пользователь добавляет в проект рисунки карт с помощью пункта меню File-Add. Добавленные карты сразу же отображаются на рабочем поле программы, что представлено на рисунке 4.5.
Рисунок 4.5 Добавление карт
Далее пользователь выбирает режим для «склеивания» карт. Делается это с помощью меню Options-Percent. При этом во всплывающем окне необходимо задать следующие параметры:
процент совпадения пикселей;
процент совпадение квадратов;
процент совпадения массива квадратов.
Изображение окна выбора параметров представлено на рисунке 4.6.
Рисунок 4.6 Окно выбора параметров
Процент совпадения пикселей. Этот параметр задает, какое количество пикселей 1 стороны совпасть со второй стороной. Параметр изменяется от 1 до 100.
Процент совпадения квадратов. Этот параметр задает процент совпадения при сравнивании одной картинки с другой. Параметр изменяется от 1 до 100.
Процент совпадения массива квадрата. Этот параметр используется при отсекании шумовых результатов. Они возникают, когда 2 стороны похожи друг на друга. Однако при задании процента отсекания можно их отбросить.
После задания параметров склеивания через меню Operation-Split мы объединяем картинки разрозненных карт. Пример результата сшивки карт представлен на рисунке 4.7.
Рисунок 4.7 Результат сшивки карт
Дальнейшими действиями оператор должен будет поправить карты, если программа их не распознала и вставить на место. Делается это с помощью кликов мыши. Левый клик мыши выделяет нужный фрагмент, правый фиксирует.
Кроме того, в программе существует возможность наносить топографические знаки. Процесс нанесения знаков представлен на рисунке 4.8 и происходит так:
Кликаем левой кнопкой мыши по нужному топографическому знаку;
Появившийся значок левой клавишей мыши мы фиксируем его рядом с мышью;
Правая клавиша позволяет зафиксировать значок на нужном месте карты.
Рисунок 4.8 Процесс редактирования карты
Конечным этапом оператора будет сохранения карты с внесенными изменениями. Для этого существует пункт меню File-Save. При этом появляется диалоговое окно для сохранения файла. В поле имя файла мы должны ввести название нашей карты, а в поле тип файла мы должны выбрать необходимый формат сохранения. Диалоговое окно, которое появляется при сохранении файла представлено на рисунке 4.9.
Рисунок 4.9 Диалоговое окно сохранения файлов
Сохраненные файлы полностью совместимы со всеми распространенными растровыми графическими редакторами.
Выводы
В этой части дипломной работы было составлено руководство пользователя с описанием интерфейса. Составлена последовательность действий пользователя, возможность установки и удаления программного обеспечения.
-
Экономический раздел
- Общая характеристика разрабатываемого ПС
Основной целью экономического раздела является экономическое обоснование целесообразности разработки программного средства (ПС), представленного в дипломном проекте.
В этом разделе пояснительной записки проводится расчет затрат на всех стадиях разработки, а также анализ экономического эффекта в связи с использованием данного программного средства.
В современных рыночных экономических условиях ПС выступает преимущественно в виде продукции организаций, представляющей собой функционально завершенные и имеющие товарный вид ПС вычислительной техники (ВТ), реализуемые покупателям по рыночным отпускным ценам. Все завершенные разработки ПС являются научно-технической продукцией.
Разработка проектов программных средств требует затрат разнообразных и, не редко значительных объемов ресурсов (трудовых, материальных, финансовых). В связи с этим, разработка и реализация каждого проекта должна быть обоснована, как технически, так и экономически.
Созданное программное средство принадлежит к первой группе программ по степени сложности и по степени новизны относится к группе B.
Программное средство разработано при помощи объектно-ориентированного языка С#.
Для полноценной работы необходимо:
наличие операционной системы Windows;
наличие установленных библиотек .Net Framework 2.0 и выше.
Установка данного продукта производится с помощью программы Setup. Наличие подключения к сети интернет или какого-либо иного программного и аппаратного обеспечения не требуется.
Для того, чтобы начать работу с программой, необходимо запустить установленное приложение либо через панель управления пуск либо с носителя, куда установлена программа. После запуска программы появляется интерфейс программы.
- Исходные данные
Исходные данные для расчета стоимости программного продукта представлены в таблице 5.1.
Таблица 5.1 Исходные данные для расчетов
Наименование показателя |
Единица измерения |
Условные обозначения |
Норматив |
Коэффициент изменения скорости обработки информации |
ед. |
Кск |
0,5 |
Численность разработчиков |
чел. |
Чр |
1 |
Тарифная ставка 1-го разряда в организации |
руб. |
Сзм1 |
380 000 |
Тарифный коэффициент |
ед. |
Кт |
2,65 |
Фонд рабочего времени |
дн. |
ФРВ |
247 |
Коэффициент естественных потерь рабочего времени |
ед. |
Кп |
1,3 |
Коэффициент премирования |
ед. |
Кпр |
1,1 |
Норматив дополнительной заработной платы |
% |
Ндз |
10 |
Ставка отчислений в Фонд социальной защиты населения |
% |
Нфсзн |
34 |
Ставка отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний |
% |
Нбгс |
0,5 |
Цена одного машино-часа |
руб. |
Цм |
506,42 |
Норматив прочих затрат |
% |
Нпз |
13 |
Норматив накладных расходов |
% |
Ннр |
110 |
Норматив расходов на сопровождение и адаптацию |
% |
Нрса |
10 |
Уровень рентабельности |
% |
Урн |
30 |
Ставка НДС |
% |
Нндс |
20 |
- Определение объема программного средства
Объем ПС определяется путем подбора аналогов на основании классификации типов ПС, каталога функций ПС и аналогов ПС в разрезе функций, которые постоянно обновляются и утверждаются в установленном порядке.
На основании информации о функциях разрабатываемого ПС по каталогу функций определяется объем функций. Данные по содержанию и объему функций на разрабатываемое программное средство представлены в таблице 5.2.
Таблица 5.2 Содержание и объем функций на разрабатываемое ПС ВТ
Номер функции |
Содержание функции |
Объем условных машино-команд VisualC# (Microsoft) |
101 |
Организация ввода информации |
150 |
102 |
Контроль, предварительная обработка и ввод информации |
450 |
109 |
Организация ввода/вывода информации в интерактивном режиме |
320 |
111 |
Управление вводом/выводом |
2400 |
207 |
Манипулирование данными |
9550 |
306 |
Обработка файлов в диалоговом режиме |
3050 |
506 |
Обработка ошибочных и сбойных ситуаций |
410 |
507 |
Обеспечение интерфейса между компонентами |
970 |
707 |
Графический вывод результатов |
4540 |
ИТОГО |
21840 |
Общий объем ПС рассчитывается по следующей формуле:
(5.1)
где общий объем ПС, условных машино-команд;
объем i-ой функции ПС, условных машино-команд;
n общее число функцией.
В связи с достаточно быстрым изменением ВТ определяется скорректированный объем функций по следующей формуле:
, (5.2)
где Vo общий объем ПС, условных машино-команд;
Кск коэффициент изменения скорости обработки информации.
Кск = 0,5 по исходным данным, Vo = 21840 условных машино-команд рассчитано по формуле 5.1.
21840 . 0.5= 10920 машино-команд.
- Расчет трудоемкости выполняемой работы
Определение трудоемкости необходимо для дальнейшего расчета суммы основной заработной платы.
Сумма основной заработной платы рассчитывается на основе численности специалистов, соответствующих тарифных ставок и фонда рабочего времени. Причем численность специалистов, календарные сроки разработки программы и фонд рабочего времени определяются по укрупненным нормам времени на разработку, сопровождение и адаптацию ПС или экспертным путем. Расчет трудоемкости ПС с использованием укрупненных норм времени осуществляется в основном в крупных научно-технических организациях для решения сложных задач программного обеспечения ВТ. В мелких и средних научно-технических организациях трудоемкость, численность исполнителей и сроки разработки ПС определяются экспертным путем с использованием данных по базовым моделям.
При определении трудоемкости ПС учитываются объем ПС (в тысячах строк условного кода), объем документации (тыс. строк), новизна и сложность ПС, язык программирования, степень использования типовых (стандартных программ).
На основании общего объема ПС определяется нормативная трудоемкость (). Нормативная трудоемкость устанавливается с учетом сложности ПС. Выделяется три группы сложности, в которых учтены следующие составляющие ПС; языковой интерфейса, ввод-вывод, организация данных, режим работы, операционная и техническая среда. Кроме того, устанавливаются дополнительные коэффициенты сложности ПС.
С учетом дополнительного коэффициента сложности рассчитывается общая трудоемкость ПС:
(5.3)
где То общая трудоемкость ПС, человеко-дней;
Тн нормативная трудоемкость ПС, человеко-дней;
дополнительный коэффициент сложности ПС, ед.
Тн = 349 человеко-дней по данным, приведенным в приложении 3 методического пособия [12];
Ксл = 0,12 по данным, приведенным в таблице 4.2 приложения 4 методического пособия [12].
То=349 (1+0,12) =390,88 человеко-дней.
- Расчет основной заработной платы
В соответствии с «Рекомендациями по применению «Единой тарифной сетки» рабочих и служащих народного хозяйства» и тарифными разрядами и коэффициентами должностей каждому исполнителю устанавливается разряд и тарифный коэффициент.
Месячная тарифная ставка каждого исполнителя определяется путем умножения действующей месячной тарифной ставки 1-го разряда на тарифный коэффициент, соответствующий установленному тарифному разряду.
Сзм= Сзм1. Кт, (5.4)
где Сзм тарифная ставка за месяц, руб.;
Сзм1 тарифная ставка 1-го разряда за месяц, руб.;
Кт тарифный коэффициент, ед.
Сзм1 = 380 000 по исходным данным;
Кт = 2,65 по исходным данным, приведенным в таблице 5.1.
Сзм = 380 000·2,65 = 1 007 000 рублей.
Основная заработная плата исполнителей на конкретное ПС рассчитывается по следующей формуле:
, (5.5)
где Соз основная заработная плата, руб.;
Сзд тарифная ставка за день, руб.;
ТО общая трудоемкость ПС, человеко-дней;
Кп коэффициент естественных потерь рабочего времени, ед.;
Кпр коэффициент премирования, ед.
ТО = 390,88 человеко-дней рассчитано по формуле 7.3;
Кп = 1,3 по исходным данным;
Кпр =1,1 по исходным данным.
Соз = (1 007 000/21,5)·390,88·1,3·1,1 = 26 180 052 рублей.
- Расчет дополнительной заработной платы
Дополнительная заработная плата на конкретное ПС включает выплаты, предусмотренные законодательством о труде (оплата отпусков, льготных часов, времени выполнения государственных обязанностей и других выплат, не связанных с основной деятельностью исполнителей), и определяется по нормативу в процентах к основной заработной плате
, (5.6)
где Сдз дополнительная заработная плата на конкретное ПС, руб.;
Соз основная заработная плата, руб.;
Ндз норматив дополнительной заработной платы, %.
Соз = 26 180 052 руб. рассчитано по формуле (5.5);
Ндз = 10% по исходным данным, приведенным в таблице 5.1.
Сдз = (26 180 052·10) /100 = 2 618 005 рублей.
- Расчет отчислений в Фонд социальной защиты населения
Отчисления в Фонд социальной защиты населения (ФСЗН) определяются в соответствии с действующими законодательными актами по нормативу в процентном отношении к фонду основной и дополнительной зарплаты исполнителей:
(5.7)
где Сфсзн сумма отчислений в Фонд социальной защиты населения, руб.;
Нфсзн норматив отчислений в Фонд социальной защиты населения, %.
Соз основная заработная плата, руб.;
Сдз дополнительная заработная плата на конкретное ПС, руб.;
Соз = 26 180 052 руб. рассчитано по формуле (5.5);
Сдз = 2 618 005 руб. рассчитано по формуле (5.6);
Нфсзн = 34% по исходным данным, приведенным в таблице 5.1.
Сфсзн = ((26 180 052 + 2 618 005)·34) /100 = 9 791 339 рублей.
- Расчет отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний
Отчисления по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний определяются в соответствии с действующими законодательными актами в зависимости от уровня риска отрасли, к которой относится организация-разработчик.
(5.8)
где Сбгс сумма отчислений по страхованию от несчастных случаев, руб.;
Нбгс норматив отчислений по страхованию от несчастных случаев, %.
Соз основная заработная плата, руб.;
Сдз дополнительная заработная плата на конкретное ПС, руб.;
Соз = 26 180 052 руб. рассчитано по формуле 5.5;
Сдз = 2 618 005 руб. рассчитано по формуле 5.6;
Нбгс = 0,5% по исходным данным, приведенным в таблице 5.1.
Сбгс = ((26 180 052 + 2 618 005) · 0,5) / 100 = 143 990 рублей.
- Расчет расходов на спецоборудование
Расходы включают затраты средств на приобретение вспомогательных специального назначения технических и программных средств, необходимых для разработки конкретного ПС, включая расходы на их проектирование, изготовление, отладку, установку и эксплуатацию. Затраты по этой статье определяются в соответствии со сметой расходов, которая составляется перед разработкой ПС. Данная статья включается в смету расходов на разработку ПС только в том случае, когда приобретаются специальное оборудование или специальные программы, предназначенные для разработки и создания только данного ПС. Затраты на спецоборудование не предвидятся.
- Расчет расходов на материалы
Расходы на материалы определяются с учетом действующих нормативов. По данной статье отражаются расходы на магнитную носители, перфокарты, бумагу, красящие ленты и другие материалы, необходимые для разработки ПС. Нормы расхода материалов в суммарном выражении определяются в расчете на 100 строк исходного кода. Сумма затрат материалов рассчитывается по формуле:
(5.9)
где См сумма расходов на материалы, руб.;
Нм норма расхода материалов в расчете на 100 строк исходного кода ПС, руб.;
скорректированный объем ПС, условных машино-команд;
= 7170 условных машино-команд рассчитано по формуле 5.2;
Нм = 380 руб. по данным, приведенным в приложении 5 методического пособия [12].
Для разрабатываемого программного средства Нм= 380 руб., а расходы на материалы составят:
См = 380·10920 /100 = 41 496 рублей.
- Расчет расходов на оплату машинного времени
Расходы включают оплату машинного времени, необходимого для разработки и отладки ПС, которое определяется по нормативам (в машино-часах) на 100 строк исходного кода машинного времени в зависимости от характера решаемых задач и типа ПЭВМ.
(5.10)
где Смв сумма расходов на оплату машинного времени, руб.;
Цм цена одного машино-часа, руб.;
Нмв норматив расхода машинного времени на отладку 100 строк кода;
V0 скорректированный объем ПС, условных машино-команд;
Цм = 506,42 руб. по исходным данным, приведенным в таблице 5.1;
= 7170 условных машино-команд рассчитано по формуле 5.2.
Информационная система выполняет общесистемные задачи, поэтому
Нмв = 12 машино-часов по данным, приведенным в приложении 6 методического пособия [12].
Смв = 506,42·(10920 /100)·12 = 663 613 рублей.
- Расчет прочих прямых затрат
Расходы на конкретное ПС включают затраты на приобретение и подготовку специальной научно-технической информации и специальной литературы. Определяются по нормативу в процентах к основной заработной плате:
(5.11)
где Спз сумма прочих затрат, руб.;
Нпз норматив прочих затрат в целом по организации, %;
Соз основная заработная плата, руб.;
Соз = 26 180 052 руб. рассчитано по формуле 5.5;
Нпз = 13% по исходным данным, приведенным в таблице 5.1.
Спз = (26 180 052·13) / 100 = 3 403 407 рублей.
- Расчет накладных расходов
Данные затраты, связанные с необходимостью содержания аппарата управления, а также с расходами на общехозяйственные нужды, относятся на конкретное ПС по нормативу в процентном отношении к основной заработной плате исполнителей.
(5.12)
где Снр сумма накладных расходов, руб.;
Ннр норматив накладных расходов в целом по организации, %;
Спз сумма прочих затрат, руб.;
Соз основная заработная плата, руб.;
Соз = 26 180 052 руб. рассчитано по формуле 5.5;
Ннр = 110% по исходным данным, приведенным в таблице 5.1.
Снр=26 180 052·110/100= 28 798 507 рублей.
- Расчет суммы расходов на разработку ПС ВТ
Общая сумма расходов на ПС рассчитывается по формуле
(5.13)
где Ср сумма расходов на разработку ПС ВТ, руб.;
Соз основная заработная плата, руб.;
Сдз дополнительная заработная плата на конкретное ПС, руб.;
Сфсзн сумма отчислений в Фонд социальной защиты населения, руб.;
Сбгс сумма отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний, руб.;
См сумма расходов на материалы, руб.;
Смв сумма расходов на оплату машинного времени, руб.;
Спз сумма прочих затрат, руб.;
Снр сумма накладных расходов, руб.;
Соз = 26 180 052 руб. рассчитано по формуле 5.5;
Сдз = 2 618 005 руб. рассчитано по формуле 5.6;
Сфсзн = 9 791 339 руб. рассчитано по формуле 5.7;
Сбгс = 143 990 руб. рассчитано по формуле 5.8;
См = 41 496 руб. рассчитано по формуле 5.9;
Смв = 663 613 руб. рассчитано по формуле 5.10;
Спз = 3 403 407 руб. рассчитано по формуле 5.11;
Снр = 28 798 507 руб. рассчитано по формуле 5.12.
Ср= 26 180 052 + 2 618 005 + 9 791 339 + 143 990 + 41 496 + 663 613 +
3 403 407 + 28 798 507 = 71 640 409 рублей.
- Расчет расходов на сопровождение и адаптацию
Кроме того, организация-разработчик осуществляет затраты на сопровождение и адаптацию ПС, которые определяются по нормативу
(5.14)
где Срса сумма расходов на на сопровождение и адаптацию ПС ВТ, руб.;
Ср сумма расходов на разработку ПС, руб.;
Нрса норматив расходов на сопровождение и адаптацию, %;
Ср = 71 640 409 рассчитано по формуле 5.13;
Нрса = 10% по исходным данным, приведенным в таблице 5.1.
Срса = 71 640 409·10/100=7 164 041 рублей.
- Расчет полной себестоимости разработки ПС ВТ
Общая сумма расходов на разработку (с затратами на сопровождение и адаптацию) - полная себестоимость ПС определяется по следующей формуле:
(5.15)
где Сп полная себестоимость ПС ВТ, руб.;
Ср сумма расходов на разработку ПС, руб.;
Срса сумма расходов на сопровождение и адаптацию ПС, руб.;
Ср = 71 640 409 руб. рассчитано по формуле 5.13;
Срса = 7 164 041 руб. рассчитано по формуле 5.14.
Сп = 71 640 409 + 7 164 041 = 78 804 450 рублей.
- Определение отпускной цены на ПС ВТ
Отпускная цена определяется на основании цены разработчика, которая формируется на основе показателя рентабельности продукции. Рентабельность и прибыль по создаваемому ПС определяются исходя из результатов анализа рыночных условий, переговоров с заказчиком (потребителем) и согласования с ним отпускной цены, включающей дополнительно налог на добавленную стоимость и отчисления в целевые бюджетные фонды из выручки от реализации продукции.
Прибыль рассчитывается по следующей формуле:
(5.16)
где Ппс прибыль от реализации ПС, руб.;
Урп уровень рентабельности ПС, %;
Сп полная себестоимость программного средства, руб.;
Сп = 78 804 450 руб. рассчитано по формуле 5.15;
= 30% по исходным данным, приведенным в таблице 5.1.
Ппс = 78 804 450·30/100 = 23 641 335 рублей.
Прогнозируемая цена разработчика ПС без налогов:
, (5.17)
где Цп прогнозируемая цена разработчика ПС, руб.;
Сп полная себестоимость программного средства, руб.;
Ппс прибыль от реализации, руб.;
Сп = 78 804 450 руб. рассчитано по формуле 5.15;
Ппс = 23 641 335 руб. рассчитано по формуле 5.16.
Цп = 78 804 450 + 23 641 335 = 102 445 785 рублей.
Сумма налога на добавленную стоимость:
, (5.18)
где НДС сумма налога на добавленную стоимость, руб.;
Нндс ставка НДС, %;
Цп планируемая цена разработчика ПС, руб.;
Цп = 102 445 785 руб. подсчитано по формуле (5.17);
Нндс = 20% по исходным данным, приведенным в таблице 5.1.
НДС=(102 445 785·20)/100 = 20 489 157 рублей.
Планируемая отпускная цена:
, (5.19)
где Цо планируемая отпускная цена, руб.
Цо= 102 445 785 + 20 489 157 = 122 934 942 рублей.
Результаты и выводы по расчетам
В таблице 5.3 приведены данные о затратах, которые понесет разработчик при создании и продаже программного средства.
Таким образом, из таблицы 5.3 видно, что большую часть отпускной цены разрабатываемого программного средства составляют основная заработная плата, накладные расходы и расходы на его разработку.
Общее время, затраченное на разработку, составляет 349 человеко-дней. Прибыль от реализации программного средства составляет 23 641 335 рублей. Планируемая отпускная цена разработчика программного средства без налогов 122 934 942 рублей.
Таблица 5.3 Расчет затрат на создание ПС и отпускной цены
Наименование показателя |
Сумма, рублей |
Основная заработная плата |
26 180 052 |
Дополнительная заработная плата |
2 618 005 |
Отчисления в Фонд социальной защиты населения |
9 791 339 |
Отчисления по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний |
143 990 |
Расход на материалы |
41 496 |
Расход на оплату машинного времени |
663 613 |
Прочие прямые затраты |
3 403 407 |
Накладные расходы |
28 798 507 |
Расходы на разработку ПС |
71 640 409 |
Расходы на сопровождение и адаптацию ПС |
7 164 041 |
Полная себестоимость ПС |
78 804 450 |
Прибыль от реализации ПС |
23 641 335 |
Планируемая цена разработчиков ПС без налогов |
102 445 785 |
Налог на добавленную стоимость |
20 489 157 |
Отпускная цена с НДС |
122 934 942 |
Предполагается, что разработанная программа, позволит оптимизировать управление картографического отдела за счет уменьшения времени на разработку топографических карт а так же увеличения гибкости конечного продукта за счет большого количества типов выводимых форматов карт.
-
Мероприятия по охране труда и безопасности жизнедеятельности
Охрана труда система законодательных актов, социально-экономических, организационных, технических, гигиенических и лечебно-профилактических мероприятий и средств, обеспечивающих безопасность, сохранение здоровья и работоспособности человека в процессе труда.
Научно-технический прогресс внес серьезные изменения в условия производственной деятельности работников умственного труда. Их труд стал более интенсивным, напряженным, требующим значительных затрат умственной, эмоциональной и физической энергии. Это потребовало комплексного решения проблем эргономики, гигиены и организации труда, регламентации режимов труда и отдыха.
Охрана здоровья трудящихся, обеспечение безопасности условий труда, ликвидация профессиональных заболеваний и производственного травматизма составляет одну из главных забот человеческого общества. Обращается внимание на необходимость широкого применения прогрессивных форм научной организации труда, сведения к минимуму ручного, малоквалифицированного труда, создания обстановки, исключающей профессиональные заболевания и производственный травматизм.
Данный раздел дипломного проекта посвящен рассмотрению следующих вопросов:
организация рабочего места пользователя;
определение оптимальных условий труда пользователя.
- Описание рабочего места программиста
Рабочее место это часть пространства, в котором инженер осуществляет трудовую деятельность, и проводит большую часть рабочего времени. Рабочее место, хорошо приспособленное к трудовой деятельности инженера, правильно и целесообразно организованное, в отношении пространства, формы, размера обеспечивает ему удобное положение при работе и высокую производительность труда при наименьшем физическом и психическом напряжении.
При правильной организации рабочего места производительность труда инженера возрастает с 8 до 20 процентов.
Согласно ГОСТ 21480-76 конструкция рабочего места и взаимное расположение всех его элементов должно соответствовать антропометрическим, физическим и психологическим требованиям.
Большое значение имеет также характер работы. В частности, при организации рабочего места пользователя должны быть соблюдены следующие
основные условия:
оптимальное размещение оборудования, входящего в состав рабочего места;
достаточное рабочее пространство, позволяющее осуществлять все необходимые движения и перемещения;
необходимо естественное и искусственное освещение для выполнения поставленных задач;
уровень акустического шума не должен превышать допустимого значения.
Главными элементами рабочего места пользователя являются письменный стол и кресло. Основным рабочим положением является положение сидя. Рабочее место для выполнения работ в положении сидя организуется в соответствии с ГОСТ 21480-76.
Рабочая поза сидя вызывает минимальное утомление пользователя. Рациональная планировка рабочего места предусматривает четкий порядок и постоянство размещения предметов, средств труда и документации. То, что требуется для выполнения работ чаще, расположено в зоне легкой досягаемости рабочего пространства и представлено на рисунке 6.1.
Моторное поле пространство рабочего места, в котором могут осуществляться двигательные действия человека.
Максимальная зона досягаемости рук это часть моторного поля рабочего места, ограниченного дугами, описываемыми максимально вытянутыми руками при движении их в плечевом суставе.
Оптимальная зона часть моторного поля рабочего места, ограниченного дугами, описываемыми предплечьями при движении в локтевых суставах с опорой в точке локтя и с относительно неподвижным плечом.
Рисунок 6.1 Зоны досягаемости рук в горизонтальной плоскости
а зона максимальной досягаемости;
б зона досягаемости пальцев при вытянутой руке;
в зона легкой досягаемости ладони;
г оптимальное пространство для грубой ручной работы;
д оптимальное пространство для тонкой ручной работы.
Рассмотрим оптимальное размещение предметов труда и документации в зонах досягаемости рук:
дисплей размещается в зоне а (в центре);
клавиатура в зоне г/д;
системный блок размещается в зоне б (слева);
принтер находится в зоне а (справа);
документация и литература размещается в зоне легкой досягаемости ладони в (слева);
литература, неиспользуемая постоянно в выдвижных ящиках стола;
При проектировании письменного стола следует учитывать следующее:
высота стола должна быть выбрана с учетом возможности сидеть свободно, в удобной позе, при необходимости опираясь на подлокотники;
нижняя часть стола должна быть сконструирована так, чтобы пользователь мог удобно сидеть, не был вынужден поджимать ноги;
поверхность стола должна обладать свойствами, исключающими появление бликов в поле зрения пользователя;
конструкция стола должна предусматривать наличие выдвижных ящиков (не менее 3 для хранения документации, листингов, канцелярских принадлежностей, личных вещей).
Параметры рабочего места выбираются в соответствии с антропометрическими характеристиками. При использовании этих данных в расчетах следует исходить из максимальных антропометрических характеристик (М+2). При работе в положении сидя рекомендуются следующие параметры рабочего пространства:
ширина не менее 700 мм;
глубина не менее 400 мм;
высота рабочей поверхности стола над полом 700-750 мм.
Оптимальными размерами стола являются:
высота 710 мм;
длина стола 1300 мм;
ширина стола 650 мм.
Поверхность для письма должна иметь не менее 40 мм в глубину и не менее 600 мм в ширину.
Под рабочей поверхностью должно быть предусмотрено пространство для ног:
высота не менее 600 мм;
ширина не менее 500 мм;
глубина не менее 400 мм.
Важным элементом рабочего места пользователя является кресло. При проектировании кресла исходят из того, что при любом рабочем положении пользователя его поза должна быть физиологически правильно обоснованной, т.е. положение частей тела должно быть оптимальным.
Для удовлетворения требований физиологии, вытекающих из анализа положения тела человека в положении сидя, конструкция рабочего сидения должна удовлетворять следующим основным требованиям:
допускать возможность изменения положения тела, т.е. обеспечивать свободное перемещение корпуса и конечностей тела друг относительно друга;
допускать регулирование высоты в зависимости от роста работающего человека (в пределах от 400 до 550 мм);
иметь слегка вогнутую поверхность,
иметь небольшой наклон назад.
Исходя из вышесказанного, приведем параметры стола пользователя:
высота стола 710 мм;
длина стола 1300 мм;
ширина стола 650 мм;
глубина стола 400 мм.
Поверхность для письма:
в глубину 40 мм;
в ширину 600 мм.
Важным моментом является также рациональное размещение на рабочем месте документации, канцелярских принадлежностей, что должно обеспечить работающему удобную рабочую позу, наиболее экономичные движения и минимальные траектории перемещения работающего и предмета труда на данном рабочем месте.
Создание благоприятных условий труда и правильное эстетическое оформление рабочих мест на производстве имеет большое значение как для облегчения труда, так и для повышения его привлекательности, положительно влияющей на производительность труда. Окраска помещений и мебели должна способствовать созданию благоприятных условий для зрительного восприятия, хорошего настроения.
В служебных помещениях, в которых выполняется однообразная умственная работа, требующая значительного нервного напряжения и большого сосредоточения, окраска должна быть спокойных тонов - малонасыщенные оттенки холодного зеленого или голубого цветов
При разработке оптимальных условий труда пользователя необходимо учитывать освещенность, шум и микроклимат.
- Освещенность рабочего места
Рациональное освещение рабочего места является одним из важнейших факторов, влияющих на эффективность трудовой деятельности человека, предупреждающих травматизм и профессиональные заболевания. Правильно организованное освещение создает благоприятные условия труда, повышает работоспособность и производительность труда.
Освещение на рабочем месте пользователя должно быть таким, чтобы работник мог без напряжения зрения выполнять свою работу. Утомляемость органов зрения зависит от ряда причин:
недостаточность освещенности;
чрезмерная освещенность;
неправильное направление света.
Недостаточность освещения приводит к напряжению зрения, ослабляет внимание, приводит к наступлению преждевременной утомленности. Чрезмерно яркое освещение вызывает ослепление, раздражение и резь в глазах. Неправильное направление света на рабочем месте может создавать резкие тени, блики, дезориентировать работающего. Все эти причины могут привести к несчастному случаю или профзаболеваниям, поэтому столь важен правильный расчет освещенности.
Расчет освещенности рабочего места сводится к выбору системы освещения, определению необходимого числа светильников, их типа и размещения. Процесс работы пользователя в таких условиях, когда естественное освещение недостаточно или отсутствует. Исходя из этого, рассчитаем параметры искусственного освещения.
Искусственное освещение выполняется посредством электрических источников света двух видов: ламп накаливания и люминесцентных ламп. Будем использовать люминесцентные лампы, которые по сравнению с лампами накаливания имеют существенные преимущества:
по спектральному составу света они близки к дневному, естественному освещению;
обладают более высоким КПД (в 1.5-2 раза выше, чем КПД ламп накаливания);
обладают повышенной светоотдачей (в 3-4 раза выше, чем у ламп накаливания);
более длительный срок службы.
Расчет освещения производится для комнаты площадью 36 м2, ширина которой 4.9 м, высота - 4.2 м. Воспользуемся методом светового потока.
Для определения количества светильников определим световой поток, падающий на поверхность по формуле 6.1:
(6.1)
где F рассчитываемый световой поток, Лм;
Е нормированная минимальная освещенность, Лк (определяется по таблице). Работу пользователя, в соответствии с этой таблицей, можно отнести к разряду точных работ, следовательно, минимальная освещенность будет
Е = 300 Лк при газоразрядных лампах;
S площадь освещаемого помещения (в нашем случае S = 36 м2 );
Z отношение средней освещенности к минимальной (обычно принимается равным 1.1-1.2 , пусть Z = 1.1);
К коэффициент запаса, учитывающий уменьшение светового потока лампы в результате загрязнения светильников в процессе эксплуатации (его значение определяется по таблице коэффициентов запаса для различных помещений и в нашем случае К = 1.5);
n коэффициент использования, (выражается отношением светового потока, падающего на расчетную поверхность, к суммарному потоку всех ламп и исчисляется в долях единицы; зависит от характеристик светильника, размеров помещения, окраски стен и потолка, характеризуемых коэффициентами отражения от стен (Рс) и потолка (Рп)), значение коэффициентов Рс и Рп определим по таблице зависимостей коэффициентов отражения от характера поверхности: Рс=30%, Рп=50%. Значение n определим по таблице коэффициентов использования различных светильников.
Для этого вычислим индекс помещения по формуле 6.2:
, (6.2)
где S площадь помещения, S = 36 м2;
h расчетная высота подвеса, h = 3.39 м;
A ширина помещения, А = 4.9 м;
В длина помещения, В = 7.35 м.
Подставив значения получим:
Зная индекс помещения I, Рс и Рп, по таблице находим n = 0.28. Подставим все значения в формулу для определения светового потока F:
Лм.
Для освещения выбираем люминесцентные лампы типа ЛБ40-1, световой поток которых F = 4320 Лк.
Рассчитаем необходимое количество ламп по формуле 6.3:
, (6.3)
где N определяемое число ламп;
F световой поток, F = 63642,857 Лм;
F световой поток лампы, Fл = 4320 Лм.
При выборе осветительных приборов используем светильники типа ОД. Каждый светильник комплектуется двумя лампами. Размещаются светильники двумя рядами, по четыре в каждом ряду.
- Параметры микроклимата на рабочем месте
Параметры микроклимата могут меняться в широких пределах, в то время как необходимым условием жизнедеятельности человека является поддержание постоянства температуры тела благодаря свойству терморегуляции, т.е. способности организма регулировать отдачу тепла в окружающую среду.
Основной принцип нормирования микроклимата создание оптимальных условий для теплообмена тела человека с окружающей средой. В санитарных нормах СанПиН установлены величины параметров микроклимата, создающие комфортные условия. Эти нормы устанавливаются в зависимости от времени года, характера трудового процесса и характера производственного помещения (значительные или незначительные тепловыделения). Для рабочих помещений с избыточным тепловыделением до 20 ккал/м3 допустимые и оптимальные значения параметров микроклимата приведены в таблице 6.1:
Таблица 6.1 Параметры микроклимата
Период |
Зона |
Температура воздуха, 0 C |
Относительная влажность, % |
Скорость движения воздуха, м/с |
Холодный период |
Оптимальная |
18 21 |
60 - 40 |
< 0.2 |
Переходный период |
Допустимая |
17 21 |
< 75 |
< 0.3 |
Теплый период года |
Оптимальная |
20 25 |
60 - 40 |
< 0.3 |
(t > 100 C) |
Допустимая |
< 28 в 13 часов самого жаркого мес. |
< 75 |
< 0.5 |
В настоящее время для обеспечения комфортных условий используются как организационные методы, так и технические средства. К числу организационных относятся рациональная организация проведения работ в зависимости от времени года и суток, а также организация правильного чередования труда и отдыха. В связи с этим рекомендуется на территории предприятия организовывать зеленую зону со скамейками для отдыха и водоемом (бассейны, фонтаны). Технические средства включают вентиляцию, кондиционирование воздуха, отопительную систему.
- Нормирование шума
Установлено, что шум ухудшает условия труда, оказывая вредное воздействие на организм человека. При длительном воздействии шума на человека происходят нежелательные явления: снижается острота зрения, слуха, повышается кровяное давление, понижается внимание. Сильный продолжительный шум может стать причиной функциональных изменений сердечно-сосудистой и нервной систем.
Характеристикой постоянного шума на рабочих местах являются среднеквадратичные уровни давлений в октавных полосах частот со среднегеометрическими стандартными частотами: 63, 125, 250, 500, 1000, 2000, 4000 и 8000 Гц. В этом ГОСТе указаны значения предельно допустимых уровней шума на рабочих местах предприятий. Для помещении конструкторских бюро, расчетчиков и пользователей уровни шума не должны превышать соответственно: 71, 61, 54, 49, 45, 42, 40, 38 дБ. Эта совокупность восьми нормативных уровней звукового давления называется предельным спектром.
- Методы защиты от шума
Строительно-акустические методы защиты от шума предусмотрены строительными нормами и правилами (СанПиН 9-131 РБ 2000), это:
звукоизоляция ограждающих конструкции, уплотнение по периметру притворов окон и дверей;
звукопоглощающие конструкции и экраны;
глушители шума, звукопоглощающие облицовки.
На рабочем месте пользователя источниками шума, как правило, являются технические средства, как то компьютер, принтер, вентиляционное оборудование, а также внешний шум. Они издают довольно незначительный шум, поэтому в помещении достаточно использовать звукопоглощение. Уменьшение шума, проникающего в помещение извне, достигается уплотнением по периметру притворов окон и дверей. Под звукопоглощением понимают свойство акустически обработанных поверхностей уменьшать интенсивность отраженных ими волн за счет преобразования звуковой энергии в тепловую. Звукопоглощение является достаточно эффективным мероприятием по уменьшению шума. Наиболее выраженными звукопоглощающими свойствами обладают волокнисто-пористые материалы: фибролитовые плиты, стекловолокно, минеральная вата, полиуретановый поропласт, пористый поливинилхлорид и др. К звукопоглощающим материалам относятся лишь те, коэффициент звукопоглощения которых не ниже 0.2.
Звукопоглощающие облицовки из указанных материалов (например, маты из супертонкого стекловолокна с оболочкой из стеклоткани нужно разместить на потолке и верхних частях стен). Максимальное звукопоглощение будет достигнуто при облицовке не менее 60% общей площади ограждающих поверхностей помещения.
- Вентиляция
Системы отопления и системы кондиционирования следует устанавливать так, чтобы ни теплый, ни холодный воздух не направлялся на людей. На производстве рекомендуется создавать динамический климат с определенными перепадами показателей. Температура воздуха у поверхности пола и на уровне головы не должна отличаться более, чем на 5 градусов. В производственных помещениях помимо естественной вентиляции предусматривают приточно-вытяжную вентиляцию. Основным параметром, определяющим характеристики вентиляционной системы, является кратность обмена, т.е. сколько раз в час сменится воздух в помещении.
Выводы
В этой части дипломной работы были изложены требования к рабочему месту пользователя. Созданные условия должны обеспечивать комфортную работу. На основании изученной литературы по данной проблеме, были указаны оптимальные размеры рабочего стола и кресла, рабочей поверхности, а также проведен выбор системы и расчет оптимального освещения производственного помещения, а также расчет информационной нагрузки. Соблюдение условий, определяющих оптимальную организацию рабочего места пользователя, позволит сохранить хорошую работоспособность в течение всего рабочего дня, повысит, как в количественном, так и в качественном отношениях производительность труда пользователя.
Заключение
В процессе реализации программы для сшивки карт пришлось решить ряд проблем. В частности:
каким образом производить проверку пикселей?
как сравнивать одиночные картины?
как заполнить матрицу картин для получения конечного результата?
каким образом реализовать интерфейс программы?
Все они были успешно решены. Однако как любое решение задачи, оно не единственно, и требует дополнительного обсуждения.
Проверка сходства пикселей реализована с возможностью задачи пользователем параметров в виде процентов. То есть пользователь может задать как 10 процентов, так и 100 процентов. Результатом будет единственный ответ похожи или нет данные объекты. Однако, параметров для сравнения 4, и соответственно, для получения конечного ответа мы взяли логическое «И». То есть результатом сравнения при определенном проценте отклонение цветовых параметров одного пикселя от другого будет логическое умножение всех 4 величин. Данную функцию сравнения можно улучшить, но для этого требуется дополнительное исследование зависимости сходства пикселей друг от друга. При 95 процентах сравнение пикселей наиболее оптимально.
Сравнение одиночных картин производилось путем проверки последнего пиксела вдоль границы. Как показала практика, такого сравнения достаточно, чтобы получить ответ. Опять же был заложен процентный показатель, с какой точностью картины могут быть похожи. При 90-95 процентах мы можем с достаточной вероятностью утверждать, что картины похожи. Следует отметить, что процент сравнения есть отношение суммы похожих пикселей к общему пикселю стороны. Здесь мы могли пойти двумя путями. Первый сравнение двух картин непосредственно, и второй разложение сторон картин в единый массив. И тот и другой способ имеет свои недостатки и достоинства. Однако, при обоих подходах мы встречаемся с проблемой выбора схожих сторон. Дело в том, что если мы утверждаем, что 2 стороны похожи, то необходимо решить проблему, что делать, если в массиве встречаются еще похожие стороны. Заданием жестких процентных рамок не решает ситуацию. Мы решили проблему путем выбора стороны с наибольшим количеством совпавших пикселей. Однако, эту проблему можно решить, допустим, путем дополнительного анализа пикселей во 2 ряду. Тем не менее, если программа ошиблась с выбором верной стороны, мы заложили возможность пользователю вручную совместить неверную картину.
Сохранение результата возможно в 3 вариантах: gif, jpg, tif.
Список использованных источников
- Берлянт, А. М. Картоведение: Учебник для вузов / А. М. Берлянт. М.: Аспект Пресс, 2013. 477 с.
- Гинзбург, Г. А. Построение сеток меридианов и параллелей географических карт в основном графическими приемами / Г. А. Гинзбург. М.: Издательство геодезической литературы, 1957. 32 с.
- Вахрамеева, Л. А. Математическая картография: Учебник для вузов / Л. А. Вахрамеева, Л. М. Бугаевский, З. Л. Казакова М.: Недра, 1986. 286 с.
- Раклов, В. П. Картография и ГИС: учебное пособие для слушателей образовательной программы профессиональной переподготовки специалиста / В. П. Раклов. М.: 2010. 118 с.
- Картавцева, Е.Н. Картография: учебное пособие / Е.Н. Картавцева. Томск: Изд-во Том. гос. архит.-строит. ун-та, 2010. 158 с.
- Топчилов, М. А. Картография: учебно-методическое пособие / М. А. Топчилов, Л. А. Ромашова, О. Н. Николаева. Издание 2-е, перераб. и доп. Новосибирск: СГГА, 2012. 109 с.
- Рихтер, Дж. CLR via С#. Программирование на платформе Microsoft .NET Framework 4.0 / Дж. Рихтер. 3-е изд. СПб.: Питер, 2012. 928 с.
- Климов, Л. П. С#. Советы программистам / Л. П. Климов. СПб.: БХВ-Петербург, 2008. 544 с.
- Культин, Н. Б. Microsoft Visual С# в задачах и примерах / Н. Б. Культин. СПб.: БХВ-Петербург, 2009. 320 с.
- Абрамян, М. Э. Visual С# на примерах / М. Э. Абрамян. СПб.: БХВ-Петербург, 2008. 496 с.
- Фленов, М. Е. Библия С# / М. Е. Фленов. 2-е изд., перераб. и доп. СПб.: БХВ-Петербург, 2011. 560 с.
- Самсонова, Т. В. Технико-экономическое обоснование дипломных проектов: Методическое пособие / Т. В. Самсонова Минск: БГТУ, 1997. 29 с.
- Нейгел К. С# 2005 и платформа .NET 3.0 для профессионалов / К. Нейгел. М.: ООО "И.Д. Вильямс", 2008. 1376 с.
- Фокина, Л. A. Картография с основами топографии: учеб. пособие для студентов вузов, обучающихся по специальности 050103 (032500) «География» / Л. A. Фокина. М.: Гуманитар. изд. центр ВЛАДОС, 2005. 335 с.
- Салищев, К. А. Картоведение: Учебник / К. А. Салищев 3-е изд. М.: Издательство МГУ, 1990. 400 с.
- Тикунов, В. С. Моделирование в картографии: Учебник / В. С. Тикунов М.: Издательство МГУ, 1997. 405 с.
- Чекин, Л. С. Картография христианского средневековья. VIIIXIII вв. Тексты, перевод, комментарий / Л. С. Чекин М.: Издательская фирма «Восточная
литература» РАН, 1999. 366 с.
- Бугаевский, Л. М. Математическая картография: Учебник для вузов / Л. М. Бугаевский. М.: 1998. 400 с.
- Уотсон, К. Visual С# 2010: полный курс / К. Уотсон. М.: ООО "И.Д. Вильямс", 2011. 960 с.
- Нейгел К. С# 4.0 и платформа NET 4 для профессионалов / К. Нейгел. М.: ООО "И.Д. Вильямс", 2011. 1440 с.
- Пугачев, С. В. Разработка приложений для Windows 8 на языке C# / С. В. Пугачев, А. М. Шериев, К. А. Кичинский. СПб.: БХВ-Петербург, 2013. 416 с.
- Скит, Дж. С#: программирование для профессионалов / Дж. Скит. М.: ООО "И.Д. Вильямс", 2011. 544 с.
Наименование показателя |
Сумма, рублей |
Основная заработная плата |
26 180 052 |
Дополнительная заработная плата |
2 618 005 |
Отчисления в Фонд социальной защиты населения |
9 791 339 |
Отчисления по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний |
143 990 |
Расход на материалы |
41 496 |
Расход на оплату машинного времени |
663 613 |
Прочие прямые затраты |
3 403 407 |
Накладные расходы |
28 798 507 |
Расходы на разработку ПС |
71 640 409 |
Расходы на сопровождение и адаптацию ПС |
7 164 041 |
Полная себестоимость ПС |
78 804 450 |
Прибыль от реализации ПС |
23 641 335 |
Планируемая цена разработчиков ПС без налогов |
102 445 785 |
Налог на добавленную стоимость |
20 489 157 |
Отпускная цена с НДС |
122 934 942 |
namespace DiplomKarta
{
public partial class Form1 : Form
{
String[] NameOfFile; // ссылка на массив имен файлов рисунков
String dir = @"c:\\Значки\";
Image[] MassImage; //ссылка нa массив картинок
Image ReturnImage; //ссылка на окончательный рисунок
Bitmap[] bm; // массив битмапов для работы с рисунками
public int Percent = 1; // процент совпадения пикселей
public int Percent2 =1; // процент совпадения массива квадратов
public int Percent1 = 90; // процент совпадения квадратов
public Picture[] Pic; // ссылка на массив обьектов рисунков
public Picture[] IMAGE; //ссылка на массив картинок для внесения на карту
//int MaxX = SystemInformation.PrimaryMonitorSize.Width; //разрешение экрана по х
//int MaxY = SystemInformation.PrimaryMonitorSize.Height; // разрешение экрана по у
int MaxX = 0;
int MaxY = 0;
int KoordX = 0; // это суммарная координата для подсчета размера результирующего изображения по х
int KoordY = 0; // это суммарная координата для подсчета размера результирующего изображения по y
Form1 ObjForm1;
Form2 ObjForm2;
Form3 ObjForm3;
int[] TempMass1 = new int[4]; // заплатка
int[] result; // переменная для проверки результатов совпадений
Picture PictureRuler;
public int MinRule = 0;
public int MaxRule = 0;
public bool SplitFlag;
public bool IsClicked=false;
int number = 0;
public Form1()
{
ObjForm2 = new Form2();
ObjForm3 = new Form3();
ObjForm1 = this;
InitializeComponent();
}
private void AddToolStripMenuItem_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
// MessageBox.Show(folderBrowserDialog1.SelectedPath);
DirectoryInfo MyDirectory = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
FileInfo[] NumsOfFile = MyDirectory.GetFiles();
NameOfFile = new String[NumsOfFile.Length];
MassImage = new Image[NameOfFile.Length];
int i = 0;
foreach (FileInfo fri in NumsOfFile)
{
if (fri.Extension == ".jpg" || fri.Extension == ".bmp" || fri.Extension == ".png")
{
NameOfFile[i] = fri.FullName;
MassImage[i] = Image.FromFile(NameOfFile[i]);
i++;
}
}
// получеине директории, где лежат картинки
MyDirectory = new DirectoryInfo(dir);
NumsOfFile = MyDirectory.GetFiles();
string[] NameOfFile1 = new String[NumsOfFile.Length];
IMAGE = new Picture[NumsOfFile.Length];
i = 0;
foreach (FileInfo fri in NumsOfFile)
{
NameOfFile1[i] = fri.FullName;
Picture a;
a = new Picture(0, 0, Image.FromFile(NameOfFile1[i]));
IMAGE[i] = a;
i++;
}
splitToolStripMenuItem.Enabled = true;
saveToolStripMenuItem.Enabled = true;
toolStripButton1.Enabled = true;
toolStripButton2.Enabled = true;
toolStripButton3.Enabled = true;
toolStripButton4.Enabled = true;
toolStripButton5.Enabled = true;
toolStripButton6.Enabled = true;
toolStripButton7.Enabled = true;
toolStripButton8.Enabled = true;
toolStripButton9.Enabled = true;
this.Invalidate();
}
}
public Picture[] addInMass(Picture[] mass, Picture obj )
{
Picture[] mass1 = new Picture[mass.Length+1];
int i = 0;
foreach (Picture a in mass)
{
mass1[i] = a;
i++;
}
mass1[i] = obj;
return mass1;
}
//функция рисует рисунок из массива рисунков MassImage1 с размером области рисования XWindow, YWindow
public Image DrawImageFromMass(Image[] MassImage1, int XWindow,int YWindow)
{
//рассчитываем размер результируещего файла
int height=0;
int width=0;
foreach (Image im in MassImage1)
{
height = height + im.Height;
width = width + im.Width;
}
if (XWindow == 0 & YWindow == 0) // автоматическое задание максимальных размеров окна
{
if (height > width)
{
width = height;
}
else
{
height = width;
}
XWindow = width ;
YWindow = height; }
Image TempImage = new Bitmap(XWindow, YWindow); //результирующая картинка, которая должна быть выдана в конце функции
Graphics g = Graphics.FromImage(TempImage);
Point PPoint = new Point();
int x = 0;
int y = 0;
int sum = 0;
PPoint.X = 0;
PPoint.Y = 0;
int maxY=0;
for(int i=0;i<MassImage1.Length;i++)
{
Image im = MassImage1[i];
g.DrawImage(im, PPoint);
x = x + im.Width;
if (maxY < im.Height) maxY = im.Height;
if (x + im.Width > TempImage.Width) // если ширина добавляемой картинки меньше ширины результирующей картинки
{
x = 0;
sum = sum + maxY;
y = sum;
maxY = 0;
}
PPoint.X = x;
PPoint.Y = y;
}
return TempImage;
}
public int[] AnalisKubov(System.Drawing.Bitmap image1, System.Drawing.Bitmap image2, int percent)
{
// функция сравнивает крайние пикселы картинок (граничный пиксель) и выдает результат
int[] MassRes;
//создание и определение размерности массивов цветов пикселей у 1 и 2 квадрата
Color[][] im1 = new Color[4][]; // 1 массив
Color[][] im2 = new Color[4][]; // 2 массив
im1[0] = new Color[image1.Width];
im1[1] = new Color[image1.Height];
im1[2] = new Color[image1.Width];
im1[3] = new Color[image1.Height];
im2[0] = new Color[image2.Width];
im2[1] = new Color[image2.Height];
im2[2] = new Color[image2.Width];
im2[3] = new Color[image2.Height];
// заполняем массивы элементами
for (int i = 0; i < im1.Length; i++)
{
for (int j = 0; j < im1[i].Length; j++)
{
if (i == 0) im1[0][j] = image1.GetPixel(j, 1);
if (i == 1) im1[1][j] = image1.GetPixel(image1.Width - 1, j);
if (i == 2) im1[2][j] = image1.GetPixel(j, image1.Height - 1);
if (i == 3) im1[3][j] = image1.GetPixel(1, j);
}
}
for (int i = 0; i < im2.Length; i++)
{
for (int j = 0; j < im2[i].Length; j++)
{
if (i == 0) im2[0][j] = image2.GetPixel(j, 1);
if (i == 1) im2[1][j] = image2.GetPixel(image2.Width - 1, j);
if (i == 2) im2[2][j] = image2.GetPixel(j, image2.Height - 1);
if (i == 3) im2[3][j] = image2.GetPixel(1, j);
}
}
// для сохранения результата создаем массив ответов совпадений пикселей размерности 1 квадрата
// размерность ответов определяется исходя из размерности 1 куба, иначе сравнение не имеет смысла
bool[][] res = new bool[16][];
for (int i = 0; i <= 15; i++)
{
int k = 0;
if (i <= 3) k = im1[0].Length;
if (i > 3 && i <= 7) k = im1[1].Length;
if (i > 7 && i <= 11) k = im1[2].Length;
if (i > 11 && i <= 15) k = im1[3].Length;
res[i] = new bool[k];
}
// теперь сравниваем массивы и заносим результат сравнения в массив
int m = 0; //переменная для счета количества проходов
for (int i = 0; i < im1.Length; i++) // проход по граням 1 кубика
{
for (int k = 0; k < im1.Length; k++) // проход по граням 2 кубика
{
if (im1[i].Length == im2[k].Length) // если измерение стороны 1 кубика и измерение 2 кубика одинаковы иначе нет смысла сравнивать
{
for (int j = 0; j < im1[i].Length; j++) // проход по пикселям
{
// заполняем массив ответов
if (PixelAnalis(im1[i][j], im2[k][j], Percent)) res[m][j] = true;
}
}
m++;
}
}
//анализируем результат и выдаем ответ если процент совпадения больше 80 - тогда считаем годным для склеивания
MassRes = new int[4]; // этот массив - массив совпадений
// заодно подсчитаем количество совпадений и предположим, где больше совпадений, там вероятнее того, что стороны одинаковые
int[] TempMass = new int[16];
int count = 0;
for (int i = 0; i <= 15; i++)
{
for (int j = 0; j < res[i].Length; j++)
{
if (res[i][j]) count++;
}
TempMass [i] = count;
count = 0;
}
// выясним максимальное значение для одной стороны и запишем в ответ Max
int[] Max = new int[4];
for (int i = 0; i <= 15; i++)
{
if (i <= 3)
{
if (TempMass[i] > Max[0])
{
Max[0] = TempMass[i];
if (Max[0] > 0 & TempMass[i] > 0)
{
if ((int)(((double)Max[0] / (double)res[i].Length) * 100) >= percent) MassRes[0] = i + 1;
};
} //1 сторона кубика
}
if ((i > 3 & i <= 7))
{
if (TempMass[i] >= Max[1])
{
Max[1] = TempMass[i];
if (Max[1] > 0 & TempMass[i] > 0)
{
if ((int)(((double)Max[1] / (double)res[i].Length) * 100) >= percent) MassRes[1] = i - 3;
};
} //2 сторона кубика
}
if ((i > 7 & i <= 11))
{
if (TempMass[i] >= Max[2])
{
Max[2] = TempMass[i];
if (Max[2] > 0 & TempMass[i] > 0)
{
if ((int)(((double)Max[2] / (double)res[i].Length) * 100) >= percent) MassRes[2] = i - 7;
};
}
//3 сторона кубика
}
if ((i > 11 & i <= 15))
{
if (TempMass[i] >= Max[3])
{
Max[3] = TempMass[i];
if (Max[3] > 0 & TempMass[i] > 0)
{
if ((int)(((double)Max[3] / (double)res[i].Length) * 100) >= percent) MassRes[3] = i - 11;
};
}//4 сторона кубика
}
}
int maxtemp = 0;
int[] max1= new int[4];
int l=0;
// тогда проверка совпадений идет по максимальному значению из массива
{
//ищем максимальное знаечение
for (int i = 0; i < 4; i++)
{
if ( Max[i] > maxtemp)
{
maxtemp = Max[i];
}
}
// здесь заполняестя вспомогательный массив, в котором отфильтрованы максимальные значения, которые
// будут соответсвовать совпавшим сторонам
for (int i = 0; i < 4; i++)
{
if (Max[i] > (int) (((double)maxtemp) * (((double)Percent1) / 100)))
{
max1[l] = Max[i];
l++;
}
}
// ищем номера совпавших элементов
int j = 3;
l = 0;
int k=0;
for (int i = 0; i < TempMass.Length;i++ )
{
if ((max1[k]> 0) & (max1[k] == TempMass[i])) // счетчик элементов массива max1
{
if (i <= 3) { MassRes[0] = i + 1; TempMass1[0] = max1[k]; }
if (i > 3 && i <= 7) { MassRes[1] = i - 3;TempMass1[1] = max1[k]; }
if (i > 7 && i <= 11) { MassRes[2] = i - 7; TempMass1[2] = max1[k]; }
if (i > 11 && i <= 15) { MassRes[3] = i - 11; TempMass1[3] = max1[k]; }
if(k < 3) k++; // это заплатка, если неверно выставленны проценты
}
if (j == i) // счетчик сторон
{
l++;
j = j + 4;
}
}
}
return MassRes;
}
public bool PixelAnalis(Color a, Color b, int percent)
{
bool like = false; // переменная, которая возвращает результат, равны ли пиксели
bool like1 =false; // прозрачность
bool like2 = false; //
bool like3 = false; //
bool like4 = false; //
double res = 0.0;
if (a.A >= b.A){
res = (double)b.A / (double)a.A * 100.0;
if ((int)res >= percent) like1 = true;
}
else {
res = (double)a.A / (double)b.A * 100.0;
if ((int)res >= percent) like1 = true;
}
if (a.B >= b.B)
{
res =(double) b.B /(double) a.B * 100.0;
if ((int)res >= percent) like2 = true;
}
else
{
res = (double)a.B / (double)b.B * 100.0;
if ((int)res >= percent) like2 = true;
}
if (a.G >= b.G)
{
res = (double)b.G / (double)a.G * 100.0;
if ((int)res >= percent) like3 = true;
}
else
{
res = (double)a.G / (double)b.G * 100.0;
if ((int)res >= percent) like3 = true;
}
if (a.R >= b.R)
{
res = (double)b.R / (double)a.R * 100.0;
if ((int)res >= percent) like4 = true;
}
else
{
res = (double)a.R / (double)b.R * 100.0;
if ((int)res >= percent) like4 = true;
}
if (like1 && like2 && like3 && like4) like = true;
return like;
}
public int ProverkaNaSovpadenie(int SideA, int SideB)
{
int res = 0;
return res;
}
private void straightedgeToolStripMenuItem_Click(object sender, EventArgs e)
{ }
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
MouseButtons batton = e.Button;
if (SplitFlag & e.Button == MouseButtons.Left)
{
// если кликнули на квадрате, то при нажатаии клавиши двигаем квадратик
// определим координаты
IsClicked = true;
// XMousePos = e.X;
//YMousePos = e.Y;
int i = 0;
int scrollPositionX = this.AutoScrollPosition.X;
int scrollPositionY = this.AutoScrollPosition.Y;
foreach (Picture pic1 in Pic)
{
i++;
if (e.X - this.AutoScrollPosition.X > pic1.x & e.X - this.AutoScrollPosition.X < pic1.x + pic1.image.Width & e.Y - this.AutoScrollPosition.Y > pic1.y & e.Y - this.AutoScrollPosition.Y < pic1.y + pic1.image.Height)
{
number = i;
}
}
}
if (e.Button == MouseButtons.Right)
{
IsClicked = false;
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (IsClicked)
{
int scrollPositionX = this.AutoScrollPosition.X;
int scrollPositionY = this.AutoScrollPosition.Y;
Pic[number - 1].x = e.X+ scrollPositionX;
Pic[number - 1].y = e.Y+ scrollPositionY;
this.Invalidate();
}
}
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 3
ДП 00.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Реферат
Лит.
Листов
1
БГТУ 62919801, 2013
У
PAGE \* LOWER 3
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 4
ДП 00.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Содержание
Лит.
Листов
2
БГТУ 62919801, 2013
У
PAGE \* LOWER 4
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 6
ДП 01.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Введение
ит.
Листов
1
БГТУ 62919801, 2013
У
PAGE \* LOWER 6
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 7
ДП 02.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Аналитический обзор литературы
Лит.
Листов
3
БГТУ 62919801, 2013
У
PAGE \* LOWER 7
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 12
ДП 04.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Разработка программной системы
Лит.
Листов
17
БГТУ 62919801, 2013
У
PAGE \* LOWER 12
Начало
Конец
Сохранение
результатов
Работа
пользователя
с изображениями
Отображение результатов
Получение
массива
объектов Picture
Инициализация
рисунков
Массив
рисунков
Отображение
на экран
результатов
Сравнение
рисунков
Получение
массива
объектов Picture
Отображение результатов
Работа
пользователя
с изображениями
Сохранение
результатов
Конец
Начало программы
Функция проверки и загрузки файлов
Функция проверки и загрузки файлов
Функция отображения результатов
Функция анализа и сортировки результатов
Работа оператора с изображением
Функция отображения результатов
Конец программы
1 пиксель
последний
пиксель
1 пиксель
последний
пиксель
R(красный)
G(зеленый)
B(синий)
A(прозрач)
Картина 1
Картина 2
1 сторона
2 сторона
3 сторона
4 сторона
true
true
false
1 сторона
2 сторона
3 сторона
4 сторона
1 пиксель
Последний
пиксель
1-2
1-3
1-4
2-3
2-4
3-4
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 29
ДП 05.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Обоснование технических приемов программирования
Лит.
Листов
7
БГТУ 62919801, 2013
У
PAGE \* LOWER 29
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 36
ДП 07.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Руководство пользователя системы
Лит.
Листов
6
БГТУ 62919801, 2013
У
PAGE \* LOWER 36
4
3
2
1
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 42
ДП 08.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Студент Е.И.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Экономический раздел
Лит.
Листов
12
БГТУ 62919801, 2013
У
PAGE \* LOWER 42
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 54
ДП 09.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Мероприятия по охране труда и безопасности жизнедеятельности
Лит.
Листов
9
БГТУ 62919801, 2013
У
PAGE \* LOWER 54
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 63
ДП 10.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Заключение
Лит.
Листов
1
БГТУ 62919801, 2013
У
PAGE \* LOWER 63
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 64
ДП 11.00. ПЗ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Список использованных источников
Лит.
Листов
2
БГТУ 62919801, 2013
У
PAGE \* LOWER 64
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 66
ДП 05.01. ГЧ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Анкуда Д.А.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Результат работы программы
Лит.
Листов
1
БГТУ 62919801, 2013
У
PAGE \* LOWER 66
Изм.
Лист
№ докум.
Подпись
Дата
Лист
1
PAGE \* LOWER 68
ДП 06.01. ГЧ
Разраб.
Воинова В.О.
Провер.
.
Анкуда Д.А.
Консультант
Студент Е.И.
Н. Контр.
Шиман Д.В.
Утверд.
Шмаков М.С.
Экономические показатели
Лит.
Листов
1
БГТУ 62919801, 2013
У
PAGE \* LOWER 68
Разработка программного обеспечения для сшивки и редактирования топографических карт