Конвертер файлов

 

ВВЕДЕНИЕ


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

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

)Классификация по модели данных:

а)иерархическая;

б)сетевая;

в)реляционная;

г)объектная и объектно-ориентированная;

д)объектно-реляционная, функциональная.

)Классификация по среде постоянного хранения:

а)во вторичной памяти, или традиционная;

б)в оперативной памяти;

в)в третичной памяти.

)Классификация по степени распределённости:

а)централизованная, или сосредоточенная;

б)распределённая.

)Другие виды БД

а)пространственная;

б)временная;

в)пространственно-временная;

г)циклическая.

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

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


1. ИССЛЕДОВАНИЕ И АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ


1.1Описание поставленной задачи


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


1.2Обоснование актуальности исследуемой задачи

программа конвертер файл шаблон

XML - рекомендованный Консорциумом Всемирной паутины язык разметки, фактически представляющий собой свод общих синтаксических правил. XML - текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML).

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

К положительным сторонам можно отнести то, что XML позволяет реализовать многое из того, что можно обнаружить в обычных базах данных: хранение (XML-документы), схемы (DTD, язык XML-схем), языки запросов (XQuery, XPath, XQL, XML-QL, QUILT, и т.д.), программные интерфейсы (SAX, DOM, JDOM), и т.д. К недостаткам же можно отнести отсутствие многих возможностей, имеющихся в современных базах данных: экономичность хранения, индексы, безопасность, транзакции и интегрированность данных, многопользовательский доступ, триггеры, запросы по многим документам и т.д.

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

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

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

Разработка программного обеспечения актуальна по следующим причинам:

-формат баз данных dbf устарел и не отвечает современным требованиям;

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

-ни одна программа-конвертер не позволяет создавать собственную структуру XML файла и записывать данные из нескольких файлов dbf формата.

-

1.3Обзор методов решения подобных задач


«White Town» дает возможность конвертировать dbf файлы в XML формат. Программа может конвертировать dbf файлы форматов dBase III, dBase IV, FoxPro, VFP и dBase Level 7. Программа поддерживает интерфейс командной строки. Таким образом, ее можно запускать из .BAT или .LNK файла предварительно указав нужные параметры или по расписанию из планировщика Windows. Недостатком данного программного продукта является отсутствие возможности настраивать формат выходного файла.

«DBF Converter» - это многосторонняя и в то же время простая в использовании программа преобразования. Данная программа имеет интерфейс по типу Мастера, но также может быть использована в качестве утилиты командной строки для обработки группы файлов. «DBF Converter» поддерживает все современные форматы обмена данными, такие как XML, CSV, TXT, HTML, RTF, PRG и другие. Реализована возможность преобразовать DBF таблицы в SQL сценарий, который может быть импортирован в любую SQL базу данных.

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

«DBF View» - бесплатная, компактная и удобная програма для работы с DBF файлами. Не требует инсталляции, работает без дополнительных драйверов и библиотек.

Главное преимущество это универсальность, быстрый и гибкий линейный поиск, который по скорости превосходит многие SQL.

Дополнительные возможности:

-поиск по маске (шаблон);

-редактирование, замена, удаление, создание, добавление данных;

-сортирование полей;

-мультиязычность и создание новых словарей;

-импорт и экспорт DBF, TXT, CSV, SQL, XML;

-перекодировки в DOS, Windows, транслит и другие;

-автозагрузка баз данных из определенной директории;

-пароль на запуск;

-запись истории.

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


1.4Постановка задачи, системные требования, требования к выходным данным и выходным формам


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

В программном продукте необходимо реализовать следующие функции:

-чтение содержимого dbf файлов;

-создание шаблонов в одном из двух редакторов;

-редактирование шаблонов;

-выбор порядка конвертации dbf файлов;

-исполнение шаблонов;

-ведение журнала ошибок;

-сохрание результатов работы программы в XML файл.

Программное обеспечение написанно на Microsoft Visual Studio 2008 и требует для своего запуска:

-Операционная система семейства Windows одной из версий: Windows Vista, Windows 7 или Windows 8;

-Microsoft .NET Framework 4;

-Visual FoxPro ODBC Drivers.

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

В качестве входных данных могут быть файлы формата dbf версии dBase II, dBase III или dBase IV.

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

Путь к входным и выходным файлам может быть произвольный.


1.5Выводы


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

Основными пунктами рассмотрения в первой главе стали:

-описание поставленной задачи;

-обоснование актуальности;

-обзор методов решения подобных задач;

-постановка задачи, системные требования, требования к выходным данным и входным формам.


2. ПРОЕКТИРОВАНИЕ СТРУКТУРЫ И АРХИТЕКТУРЫ ПРОГРАММНОГО ПРОДУКТА


.1 Выбор методов и средств для реализации, его обоснование


Для разработки программного продукта была выбрана интегрированная среда разработки Microsoft Visual Studio 2008.

Visual Studio 2008 - выпущена 19 ноября 2007, одновременно с .NET Framework 3.5. Нацелена на создание приложений для операционной системы Windows Vista (но поддерживает и XP), Office 2007 и веб-приложений. Включает в себя LINQ, новые версии языков C# и Visual Basic. В студию не вошёл Visual J#. Одним из его плюсов является полностью русский интерфейс.

Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как например, Subversion и Visual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов процесса разработки программного обеспечения (например, клиент Team Explorer для работы с Team Foundation Server).

Все инструментальные среды Visual Studio 2008 на основе языка C# отличаются такими особенностями, как:

-возможностью формулировать задачи на языке взаимодействия объектов;

-высокой модульностью программного кода;

-адаптируемостью к желанием пользователей;

-высокой степенью повторной используемости программ;

-большое число подключаемых библиотек.


.2 Описание применяемых алгоритмов


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

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

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


Таблица 2.1 - Список возможных состояний распознавателя

Индекс состоянияСостояниеОписаниеS1ПеременнаяСчетчик циклаS2ДляСлужебное слово, обозначающее начало циклаS3ДоСлужебное слово, обозначающее условие выхода циклаS4СтолбецСлужебное слово, обозначающее, что дальнейшее обращение будет к столбцам базыS5СтрокаСлужебное слово, обозначающее, что дальнейшее обращение будет к строкам базыS6КоличествоСлужебное слово, обозначающее количество строк или столбцов, в зависимости к чему было предыдущее обращениеS7ТипСлужебное слово, обозначающее вывод типа данных столбца к которому следует обращениеS8НазваниеСлужебное слово, обозначающее вывод названия столбца к которому следует обращениеS9. (точка)Специальный символ, разделяющий служебные словаS10= (знак равенства)Специальный символ, обозначающий, какое значение будет присвоено переменной при начале работы циклаS11[ (открывающаяся прямоугольная скобка)Специальный символ, обозначающий, что далее последует обращение к какому-то конкретному столбцу или строкеS12] (закрывающаяся прямоугольная скобка)Специальный символ, обозначающий, что было обращение к какому-то конкретному столбцу или строкеS13ЧислоЛюбое целое число

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


Рисунок 2.1 - Конечный автомат возможных переходов


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


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

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


названиеназваниеназваниеназваниеназваниезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениезначениеРисунок 2.3 - Общая структура таблицы БД

3.

4.В качестве реализации было выбрано решение с использованием «Таблицы истинности». Эта таблица представляет собой таблицу, с n+1 столбцов и m+1 строк, где n и m - число столбцов и строк во входной таблице. Каждая ячейка таблицы хранит значение true или false. На рисунке 2.4 изображена «Таблица истинности».

названиеназваниеназваниеназваниеназваниеtruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetrueРисунок 2.4 - «Таблица истинности»


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

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

Так же были выделены условия: «<», «>», «=», «содержит», «совпадает».

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


Рисунок 2.5 - «Таблица истинности» с применением фильтров

названиеназваниеназваниеназваниеназваниеtruetruetruetruetruefalsetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruefalsetruefalsetruetruetruefalsetruefalsetruefalsetruetruetruefalsetruefalsetruetruetruefalsetruefalsefalsetruetruetruetrue

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

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

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

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

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

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


2.3 Структура, архитектура программного продукта


Центральное место в объектно-ориентированном программировании занимает разработка логической модели системы в виде диаграммы классов. Диаграмма классов (class diagram) служит для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования. Диаграмма классов может отражать, в частности, различные взаимосвязи между отдельными сущностями предметной области, такими как объекты и подсистемы, а также описывать их внутреннюю структуру и типы отношений.

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

Кроме внутреннего устройства или структуры классов на соответствующей диаграмме указываются отношения между классами:

Для данного приложения были выделены классы, описанные в таблице 2.2.


Таблица 2.2 - Описание классов, используемых в программном продукте

КлассКраткое описаниеМетоды классаRead_dbfКласс, осуществляющий чтение из файлов формата dbfpublic DataTable ReadDb(string path)TemplateКласс, осуществляющий работу с шаблонами созданными пользователемpublic void Connect(string path) public void Search() public void Analize() public void Check(int a, int s, int indc) public void ExecuteCode(int NCode, bool cikcle, StreamReader sr, StreamWriter sw, int tempF)MyCodeКласс, содержащий информацию о строках кода записанных в шаблонахpublic void GetValue()TagКласс, содержащий информацию о тегах

Диаграмма классов приложения-конвертера показана на рисунке 2.6. Из диаграммы видно, что класс MyCode является переменной класса Template. Класс Template содержит следующие поля: dt, lv, thisTemplate, mycode, fs, sr, sw, correct, masCode, masPerem, masPeremCount, masSost, masCodeLength. dt - переменная типа DataTable, содержащая информацию, хранящуюся в базе данных; lv - переменная типа ListView, объект интерфейса, в который записываются сообщения об ошибках в шаблонах; thisTemplate - переменная типа string, означающая название шаблона, который обрабатывается в данный момент; mycode - массив класса MyCode, хранящий информацию о всех фрагментах кода обнаруженных в данном шаблоне; fs - переменная типа FileStream, определяющая с каким файлом будет работать программа; sr - переменная типа StreamReader, определяющая из какого файла будет считана информация; sw - переменная типа StreamWriter, определяющая в какой файл будет записываться информация; correct - переменная типа bool, указывающая на то корректно ли обработан текущий фрагмент кода; masCode - массив типа string, содержащий все найденные строки кода в шаблоне; masCodeLength - переменная типа int, указывающая сколько строк кода найдено в шаблоне; masPerem - двумерный массив типа string, содержащий название и значение созданных переменных; masPeremCount - переменная типа int, указывающая сколько переменных создано в данный момент; masSost - массив типа int, содержащий список состояний автомата для текущей строки кода.

Так же класс содержит следующие методы: Connect, Search, Analize, Check, ExecuteCode. Метод Connect осуществляет подключение к шаблону по заданному пути. Метод Search находит фрагменты кода в шаблоне. Метод Analize определяет состояния для строки кода. Метод Check является рекурсивным, он определяет логическую правильность строки. Метод ExecuteCode исполняет текущий шаблон. Для описанных классов можно составить диаграмму классов[3].


2.4 Функциональная схема, функциональное назначение программного продукта


В программном продукте разработаны два возможных варианта обработки информации с уникальными алгоритмами.

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

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


2.5 Выводы


Во второй главе выпускной квалификационной работы были выбраны средства разработки, а именно Microsoft Visual Studio 2008, были описаны основные методы реализации программного продукта, а так же описана его структура. Так же была описана функциональная схема программного продукта.

Основными пунктами рассмотрения во второй главе стали:

-выбор методов и средств для реализации, его обоснование;

-описание применяемых алгоритмов;

-структура, архитектура программного продукта;

-функциональная схема, функциональное назначение программного продукта.

3. РЕАЛИЗАЦИЯ И ТЕСТИРОВАНИЕ ПРОГРАММНОГО ПРОДУКТА


.1 Описание реализации


Одной из сложностей реализации данного программного продукта является написание алгоритма распознавателя. Весь алгоритм описывается методами: Search, Analize, Check, ExecuteCode.

Метод Search считывает шаблон и находит фрагменты кода, выделенные символами «*» с обеих сторон, и записывает их в массив [1].

void Search()

{ char c;s = "";sign = false;(!sr.EndOfStream)

{= Convert.ToChar(sr.Read());((c != '*') && (sign == true))

{ s += c.ToString(); }((c == '*') && (sign == false))

{ sign = true;= ""; }((c == '*') && (sign == true))

{ if (s != "")

{ sign = false;[masCodeLength] = s;++; }+= c.ToString(); }}= new MyCode[masCodeLength];}


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

void Analize()

{ string[] masIdent = new string[1024];masIdentLength = 0;s = "";c;sign = true;(int a = 0; a < masCodeLength; a++)

{ correct = false;= 0;[a] = masCode[a].Trim();[a] = masCode[a].ToLower();= "";(int b = 0; b < masCode[a].Length; b++)

{ c = masCode[a][b];(c != ' ')(c == '.')

{ if (s != "")

{ masIdent[masIdentLength] = s;++; }[masIdentLength] = ".";++;= ""; }

…((c == ' ') && (s != ""))

{ masIdent[masIdentLength] = s;++;= ""; } }(s != "")

{ masIdent[masIdentLength] = s;++; }[a] = new MyCode("", null);(int z = 0; z < masIdentLength; z++)[a].code += masIdent[z] + " ";= new int[masIdentLength];


В предыдущей части метода все найденные лексемы были записаны в массив masIdent, далее инициализируется цикл, в котором для всех найденных лексем определяется состояние и записывается в массив masSost.

(int b = 0; b < masIdentLength; b++)

{ int Value;(masIdent[b] == "для")[b] = 2;if (masIdent[b] == "до")[b] = 3;if (masIdent[b] == "столбец")[b] = 4;if (masIdent[b] == "строка")[b] = 5;

…(Char.IsLetter(masIdent[b][0]))

{ bool f = true;(int d = 1; d < masIdent[b].Length; d++)(!Char.IsLetterOrDigit(masIdent[b][d]))= false;(f == true) masSost[b] = 1; else


Добавление записи об ошибке в журнал ошибок, в случае, если, найденного идентификатора, не существует.


{ lv.Items.Add(thisTemplate, thisTemplate);.Items[lv.Items.Count - 1].SubItems.Add(mycode[a].code);.Items[lv.Items.Count - 1].SubItems.Add("Неопознанный идентификатор " + masIdent[b]); }} else

{ lv.Items.Add(thisTemplate, thisTemplate);.Items[lv.Items.Count - 1].SubItems.Add(mycode[a].code);.Items[lv.Items.Count - 1].SubItems.Add("Неопознанный идентификатор " + masIdent[b]);}} [a] = new MyCode(mycode[a].code, masSost);(0, masSost[0], a); }


Метод Check основан на работе нисходящего распознавателя с возвратом: определяется текущее состояние, если оно возможно, то осуществляется переход в следующее. Если невозможно, то состояние переключается в альтернативное, если такого нет, то в журнал ошибок добавляется сообщение об ошибке [5].



public void Check(int a, int s, int indc)

{ if (masSost[a] == s)

{ if ((s == 1) && (a == 0))

{ if (a == masSost.Length - 1)= true; } else((s == 2) && (a == 0)) s = 1; else(((s == 4) || (s == 5)) && (a == 0)) s = 8; else((s == 1) && (a == 1)) s = 9; else((s == 8) && (a == 1)) s = 6; else((s == 10) && (a == 1)) s = 1; else((s == 9) && (a == 2)) s = 12; else((s == 6) && (a == 2))

{ if (a == masSost.Length - 1)= true; } else(((s == 1) || (s == 12)) && (a == 2)) s = 11; else((s == 12) && (a == 3)) s = 3; else((s == 11) && (a == 3)) s = 8; else((s == 3) && (a == 4)) s = 12; else((s == 8) && (a == 4))

{ if (masSost[0] == 4)= 7;

…((s == 6) && (a == 7))

{ if (a == masSost.Length - 1)

correct = true; }(((s == 12) || (s == 1)) && (a == 7))= 11;((s == 11) && (a == 8))

{ if (a == masSost.Length - 1)= true; }


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

(correct == false)

{ a++;(a, s, indc); } }((s == 8) && (a == 1))

{ s = 10;(a, s, indc); }((s == 1) && (a == 2))

{ s = 12;(a, s, indc);}

…((s == 1) && (a == 7))

{ s = 12;(a, s, indc); }



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

(correct == false)

{.Items.Add(thisTemplate, thisTemplate);.Items[lv.Items.Count - 1].SubItems.Add(masCode[indc]);.Items[lv.Items.Count - 1].SubItems.Add("Нарушен логический смысл строки");[indc].correct = false;

} }


Метод ExecuteCode записывает содержимое шаблона в выходной файл, исполняя программные строки. Если встречается цикл, то создается временный файл, в который записывается содержимое цикла и пока цикл не завершится, исполняется содержимое этого файла. Это необходимо для выполнения вложенных циклов.

void ExecuteCode(int NCode, bool cikcle, StreamReader sr, StreamWriter sw, int tempF)

{c;(!sr.EndOfStream)

{= Convert.ToChar(sr.Read());



Алгоритм считывает по символу входной файл, в случае если встречается закрывающаяся фигурная скобка, означающая конец цикла, и переменная cikcle равна true, то это означает, что метод был вложенным и завершает его [4].

((c == '}') && (cikcle == true))

{;

}


Если, считанный символ, не был «*», то это означает, что символ не относится к кодовым командам и его необходимо просто вывести.

(c != '*')

{.Write(c);

}


Если, считанный символ, был «*», алгоритм считывает следующий символ, если и он «*», то это означает что пользователь, хотел вывести этот символ в выходной файл.

(c == '*')

{ c = Convert.ToChar(sr.Read());(c == '*').Write(c);



Если, следующий символ не был «*», то это означает, что все последующие символы до «*» относятся к кодовым командам.

(mycode[NCode].correct == true)(mycode[NCode].masSost[0] == 1)

{ bool creat = false;(int a = 0; a < masPeremCount; a++)

{ if (masPerem[a, 0] == mycode[NCode].code)

{ creat = true;.Write(masPerem[a, 1]);++;(sr.Read() != '*')

{ }break; } }


Если, в коде, пользователь пытается вывести переменную, которая до этого не была объявлена, то запись об ошибке заносится в журнал ошибок и дальний код уже не исполняется [10].

(creat == false)

{ if (mycode[NCode].code != "")

{ lv.Items.Add(thisTemplate, thisTemplate);.Items[lv.Items.Count - 1].SubItems.Add(mycode[NCode].code);.Items[lv.Items.Count - 1].SubItems.Add("Попытка вывести несуществующую переменную");[NCode].code = ""; }++;(sr.Read() != '*')

{ } } }(mycode[NCode].masSost[0] == 4)

{ if (mycode[NCode].masSost[2] == 6)

{ NCode++;.Write(dt.Columns.Count.ToString());(sr.Read() != '*')

{ } }(mycode[NCode].masSost[2] == 12)

{(Convert.ToInt32(mycode[NCode].masValue[2]) < dt.Columns.Count)

{ if (mycode[NCode].masSost[5] == 7).Write(dt.Columns[Convert.ToInt32(mycode[NCode].masValue[2])].DataType.Name);.Write(dt.Columns[Convert.ToInt32(mycode[NCode].masValue[2])].ColumnName);}


Если, пользователь пытается обратиться к столбцу или строке, которых не существует, то соответствующая запись об ошибке добавляется в журнал ошибок.


{.Items.Add(thisTemplate, thisTemplate);.Items[lv.Items.Count - 1].SubItems.Add(mycode[NCode].code);.Items[lv.Items.Count - 1].SubItems.Add("Индекс выходит за рамки массива");[NCode].code = ""; }++;(sr.Read() != '*')

{ }}

{ bool creat = false;(int a = 0; a < masPeremCount; a++)(masPerem[a, 0] == mycode[NCode].masValue[2])

{ creat = true;(Convert.ToInt32(masPerem[a, 1]) < dt.Columns.Count)

{ if (mycode[NCode].masSost[5] == 13).Write(dt.Columns[Convert.ToInt32(masPerem[a, 1])].ColumnName);.Write(dt.Columns[Convert.ToInt32(masPerem[a, 1])].DataType.Name);

} else {.Items.Add(thisTemplate, thisTemplate);.Items[lv.Items.Count - 1].SubItems.Add(mycode[NCode].code);.Items[lv.Items.Count - 1].SubItems.Add("Индекс выходит за рамки массива");[NCode].code = ""; }++;(sr.Read() != '*')

{ } }(creat == false) {


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

.Items.Add(thisTemplate, thisTemplate);.Items[lv.Items.Count - 1].SubItems.Add(mycode[NCode].code);.Items[lv.Items.Count - 1].SubItems.Add("Попытка обратиться к несуществующей переменной");++;(sr.Read() != '*')

{ } } }}(mycode[NCode].masSost[0] == 5)

{ int n1 = 0, n2 = 0, nn = 0;(mycode[NCode].masSost[2] == 6)

{ sw.Write(dt.Rows.Count.ToString());++;(sr.Read() != '*')

{ } }

{ if (mycode[NCode].masSost[2] == 12)

{ { n1 = Convert.ToInt32(mycode[NCode].masValue[2]);++; }(mycode[NCode].masSost[7] == 12)

{ n2 = Convert.ToInt32(mycode[NCode].masValue[7]);++; }

{ bool creat = false;(int a = 0; a < masPeremCount; a++)(masPerem[a, 0] == mycode[NCode].masValue[7])

{ creat = true;= Convert.ToInt32(masPerem[a, 1]);++; }

...


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


Else { if (n1 >= dt.Rows.Count)

{ if (mycode[NCode].code != "")

{lv.Items.Add(thisTemplate, thisTemplate);.Items[lv.Items.Count - 1].SubItems.Add(mycode[NCode].code);.Items[lv.Items.Count - 1].SubItems.Add("Индекс " + n1 + " выходит за рамки массива");}} (n2 >= dt.Columns.Count)

{ if (mycode[NCode].code != "")

{ lv.Items.Add(thisTemplate, thisTemplate);.Items[lv.Items.Count - 1].SubItems.Add(mycode[NCode].code);.Items[lv.Items.Count - 1].SubItems.Add("Индекс " + n2 + " выходит за рамки массива"); }}[NCode].code = ""; }++;((sr.Read() != '*') && (!sr.EndOfStream))

{ } } } } else(mycode[NCode].masSost[0] == 2)

{ int k, nk;[masPeremCount, 0] = mycode[NCode].masValue[1];[masPeremCount, 1] = mycode[NCode].masValue[3];= masPeremCount;++;(mycode[NCode].masSost[5] == 12)= Convert.ToInt32(mycode[NCode].masValue[5]); else(mycode[NCode].masSost[5] == 4) k = dt.Columns.Count;k = dt.Rows.Count;(sr.Read() != '*') { }



В случае если пользователь объявил цикл и после этого не указал его начало, не поставив «{», это расценивается как ошибка и запись об этом добавляется в журнал ошибок.

= Convert.ToChar(sr.Read());(c == '\r')= Convert.ToChar(sr.Read());(c == '\n')= Convert.ToChar(sr.Read());(c != '{')

{ lv.Items.Add(thisTemplate, thisTemplate);.Items[lv.Items.Count - 1].SubItems.Add(mycode[NCode].code);.Items[lv.Items.Count - 1].SubItems.Add("Не указано начало цикла");[NCode].correct = false;++; } else {


Если начало цикла указано корректно, то переменная, отвечающая за глубину вложенности циклов, увеличивается на единицу, содержимое цикла, до знака «}», записывается во временный файл, создается дубликат массивов содержащих значения переменных и данный рекурсивный метод запускается уже для этого временного файла [2].

++;.CreateDirectory("Temp");sw1=new StreamWriter("Temp\\Temp"+tempF.ToString()+".txt", false, Encoding.UTF8);= Convert.ToChar(sr.Read());(c == '\r')

{ sr.Read();= Convert.ToChar(sr.Read()); }cickleCount = 0;(c != '}')

{ if (c == '{')++;.Write(c);(sr.EndOfStream);= Convert.ToChar(sr.Read());((c == '}') && (cickleCount != 0))

{ cickleCount--;.Write(c);= Convert.ToChar(sr.Read()); } }.Close();sr1 = new StreamReader("Temp\\Temp" + tempF.ToString() + ".txt", Encoding.UTF8);CickleCode = 0;s1 = "";sign2 = false;(!sr1.EndOfStream)

{ c = Convert.ToChar(sr1.Read());((c != '*') && (sign2 == true))

{ s1 += c.ToString(); }((c == '*') && (sign2 == false))

{ sign2 = true;= ""; }((c == '*') && (sign2 == true))

{ if (s1 != "")

{ sign2 = false;++; }s1 += c.ToString(); } }.Close();(int a = Convert.ToInt32(mycode[NCode].masValue[3]); a < k; a++)

{ masPerem[nk, 1] = a.ToString();(NCode + 1, true, new StreamReader("Temp\\Temp" + tempF.ToString() + ".txt", Encoding.UTF8), sw, tempF);}


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

[nk, 0] = "";[nk, 1] = "";= CickleCode + 1;.Delete("Temp\\Temp" + tempF.ToString() + ".txt");-; } }


Алгоритм работы с шаблонами, созданными при помощи конструктора, описывается методами: Execute, GetTruthTable, ExecuteTag.

Метод Execute вызывается один раз при запуске обработки шаблона. Этот метод является внешним и из него вызываются остальные методы. Изначально метод создает выходной файл и «Таблицу истинности» [11].

truthdt=new DataTable();sw=new StreamWriter(textBox4.Text+"Выходной файл.xml",false,Encoding.UTF8);(int a = 0; a <= dt.Columns.Count;a++ ).Columns.Add("",typeof(bool));(int a = 0; a <= dt.Rows.Count; a++)

{ DataRow dr = truthdt.NewRow();(int b = 0; b < dr.ItemArray.Length; b++)[b] = true;.Rows.Add(dr); }


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

(!complete)

{ tagind = GetTagIndex(Iitems);(mastag[tagind].type == types.global || mastag[tagind].type == types.main)

{… }(mastag[tagind].type == types.block)

{… }(mastag[tagind].type == types.simple)

{… }(Iitems >= itemscount)= true; }.Close(); }


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

(mastag[tagind].name != "")

sw.WriteLine(items[Iitems]);

Iitems++;


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


bool haveRow = false;[] blocktag = new tag[mastag[tagind].indF - mastag[tagind].indS - 1];(int a = mastag[tagind].indS + 1, b = 0; a < mastag[tagind].indF; a++, b++)

{ blocktag[b] = mastag[GetTagIndex(a)];(blocktag[b].type == types.simple)(blocktag[b].source == "индекс строки" || blocktag[b].source == "содержимое ячейки")= true;}


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

=CreateTable(truthdt,dt);(int a = 0; a < blocktag.Length; a++)(blocktag[a].type == types.simple)

truthdt = GetTruthTable(dt, truthdt, blocktag[a]);


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

(haveRow)

{(int a = 0; a < dt.Rows.Count; a++)(int b = 0; b < dt.Columns.Count; b++)

{wasEx = false;swt = new StreamWriter("temp.txt", false, Encoding.UTF8);(int c = 0; c < blocktag.Length; c++)

{(blocktag[c].type == types.global)(blocktag[c].name != "").WriteLine(items[mastag[tagind].indS + c + 1]);(blocktag[c].type == types.simple)(blocktag[c].name != "")=ExecuteTag(dt, truthdt, blocktag[c], a, b, swt); }.Close();(wasEx)

{ StreamReader sr = new StreamReader("temp.txt", Encoding.UTF8);.Write(sr.ReadToEnd());.Close();.Delete("temp.txt");

} } }

{ for (int a=0;a<dt.Columns.Count;a++)(int c = 0; c < blocktag.Length; c++)

{ if (blocktag[c].type == types.global)(blocktag[c].name != "").WriteLine(items[mastag[tagind].indS + c + 1]);(blocktag[c].type == types.simple)(blocktag[c].name != "")(dt, truthdt, blocktag[c], 0, a, sw);

} }


Если тип тега простой, то для него создается новая «Таблица истинности» и тег исполняется.


if (mastag[tagind].type == types.simple)

{ truthdt=CreateTable(truthdt,dt);tempdt = GetTruthTable(dt, truthdt, mastag[tagind]);(mastag[tagind].name!="")(dt, tempdt, mastag[tagind], 0, 0, sw);++; }


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

Метод ExecutTag исполняет простой тег. В качестве аргументов принимает таблицу данных, «Таблицу истинности», тег, индекс строки, индекс столбца и поток записи в файл.


.2 Описание пользовательского интерфейса


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

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


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

Так же на основной форме присутствует элемент управления, который открывает форму создания шаблонов при помощи конструктора.

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

В результате работы программного обеспечения были получены XML файлы, различных версий языка XML. В качестве входных данных выступали базы данных формата dbf версий dBase II, dBase III и dBase IV. Конвертированные файлы корректно открывались с помощью следующих браузеров: Internet Explorer 10, Mozilla Firefox 19, Google Chrome версии 27.0.1453.93, Opera 12.15. Помимо браузеров файлы можно было просмотреть и отредактировать любым текстовым редактором. По полученным результатам можно сделать вывод, о том что XML файлы, полученные в процессе работы программы, отвечают требованиям заказчика.


.3 Тестирование и оценка надежности программного продукта


При тестировании программного продукта были выявлены следующие ошибки:

-ошибка индексации к ячейке таблицы базы данных;

-ошибка вывода переменной цикла;

-ошибка, возникающая в случае, если индекс строки или столбца превышает их количество.

1.Ошибка индексации к ячейке таблицы базы данных. Возникает в случае указания в шаблоне кода вида «*строка[x].столбец[y]*», где x и y - числа или переменные. Проблема была решена добавлением дополнительного условия в коде программы при обработке подобных строк в шаблоне.

2.Ошибка вывода переменной цикла. Возникает в случае указания в шаблоне кода вида «*x*», где x - переменная. Проблема была решена путем изменения составления таблицы идентификаторов.

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


.4 Расчет себестоимости


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

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

В структуре капитальных вложений, связанных с автоматизацией управления, выделяют капитальные вложения на разработку проекта автоматизации (предпроизводственные затраты) и капитальные вложения на реализацию проекта (затраты на внедрение):


(3.1)


где Кп - капитальные вложения на проектирование; Кр - капитальные вложения на реализацию проекта.

Расчет капитальных вложений на проектирование. Капитальные вложения на проектирование ПО определяются путем составления смет расходов и определяются по формуле:


(3.2)


где Км - стоимость материалов; Кпр - заработная плата основная и дополнительная с отчислениями в соцстрах инженерно-технического персонала, непосредственно занятого разработкой проекта; Кмаш - затраты, связанные с использованием машинного времени на отладку программы; Кс - оплата услуг сторонним организациям, если проектирование производится с привлечением сторонних организаций; Кн - накладные расходы отдела проектирования. Все расчеты будут производиться в условных единицах (у.е.), что соответствует стоимости одного доллара США в Приднестровском Республиканском Банке на момент разработки ПО.

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



Таблица 3.1 - Смета затрат на материалы

МатериалЕдиница измеренияЦена за единицу (у.е.)КоличествоСумма (у.е.)USB flash накопительШт.15,00115,00БумагаПач.5,0015,00РучкаШт.0,2551,25Тонер картриджШт.33,00133,00ПапкаШт.0,2010,20ИТОГО54,45Транспортно-заготовительные расходы (5 %)2,72ВСЕГО57,17

Затраты на оплату труда. Затраты на основную заработную плату проектировщика (Кпр) рассчитывается на основе данных о квалификационном составе разработчиков, их должностных окладах и общей занятости по теме. Дополнительная заработная плата начисляется в размере 10% от суммы основной заработной платы, а отчисления на социальные страхования - в размере 39% от фонда заработной платы. Смета затрат на оплату труда представлена в таблице 3.2.


Таблица 3.2 - Смета затрат на оплату труда

Должность работникаДолжностной оклад (у.е.)Дневная ставкаЗанятость по темеСумма основной з/п (у.е.)Программист2009,1090819,0Руководитель программного продукта25011,3550567,5ИТОГО1386,5 у.е.

Итого Кпр = 1386,5 у.е.

Затраты на отладку программы. Затраты, связанные с использованием машинного времени на отладку программы (Кмаш) учитываются для следующих этапов проектирования: разработка рабочего проекта; внедрение - проведение опытной эксплуатации задач и сдача их в промышленную эксплуатацию.

Затраты на отладку программы определяются по формуле:


(3.3)


где Cм - стоимость одного часа машинного времени; - время отладки программы (ч); - количество программистов.

Подставляя фактические данные, получаем величину затрат на отладку программы:

Смч = 0,3 у.е., Тотл = 96 часов,

Sпр = 2 программист Кмаш = 0,3·96·2 =57,6 у.е.

В связи с тем, что сторонние организации не привлекались к работе, то Кс = 0.

Накладные расходы на разработку дипломной работы берутся в размере 45% от основной заработной платы разработчиков для покрытия административно-хозяйственных и других непредусмотренных расходов:


Кн = Кпр·0,45.(3.4)


Так как затраты на основную заработную плату проектировщика (Кпр) равны 1386,5 у.е., то накладные расходы составят: Кн = 1386,5·0,45 = 623,925 у.е.

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



Таблица 3.3 - Общая смета затрат на проектирование

СтатьиЗатратыСумма (у.е.)Удельный вес статьи в общей стоимости (%)Материалы и покупные полуфабрикаты57,172,15Основная заработная плата1386,5052,12Дополнительная заработная плата138,655,21Отчисления на единый социальный налог396,5414,90Затраты на отладку программы57,602,16Накладные расходы623,9323,46ИТОГО:2660,39100,00

Итого общая величина капитальных вложений на реализацию проекта составляет 2660,39 у.е.

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

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

Затраты, связанные с эксплуатированием задачи вычисляются по формуле:


Сэз = Смч ·Тэ,(3.4)


где Смч - стоимость одного часа работы технических средств; Тэ - время эксплуатации задачи в течение года.

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

Сэз = 0,4·1056 = 422,4 у.е.

Определение экономической эффективности от внедрения программы. Экономический эффект, как реальная экономия, обусловлена следующими факторами: сокращением времени обработки информации; сокращением потерь рабочего времени.

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

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

Расчет экономии за счет снижения трудоемкости решения задачи. Экономия за счет снижения трудоемкости решения определенного класса задач, рассчитывается по формуле:


Этр = (А · В · Тр· Зчас - Кр· Тоб · Смч) · Ue, (3.5)


где А - коэффициент, учитывающий дополнительную заработную плату; В - коэффициент, учитывающий отчисления на соцстрах; Тр - трудоемкость решения задачи вручную (ч); Зчас - среднечасовая тарифная ставка работника (у.е.); Кр - коэффициент использования технических средств; Тоб - трудоемкость при автоматизированной обработке (ч); Смч - стоимость одного машинного часа работы (у.е.); Ue - периодичность решения задачи (раз/год).

Подставляя реальные данные, полученные в результате исследований при ручном (полуавтоматизированном) и автоматизированном способах планирования деятельности предприятия, получаем величину экономии за счет снижения трудоемкости решения задачи при условии, что

А = 1,1; В = 1,27; Тр = 4 ч; Зчас = 1,107 у.е. (при основной заработной плате 200 у.е., 8 часовом рабочем дне, 22 рабочих дня в месяц);

Кр = 1,13; Тоб = 0,4 ч; Смч = 0,4 у.е.; Ue = 350 раз в год.

Этр = (1,1·1,27·4·1,107 - 1,13·0,4·0,4) ·350 = 2103,5 у.е.


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


Эстрн·Кпэз, (3.6)


где Этр - годовая экономия от применения внедренной задачи; Ен - нормативный коэффициент экономической эффективности капитальных вложений (Ен = 0,15); Кп - единовременные затраты, связанные с внедрением задачи;

Подставляя в формулу (3.6) реальные данные, определяем величину годового экономического эффекта при Кп = 2660,39 у.е:

Эс = 2103,5-0,15·2660,3865 -422,4 = 1282,04 у.е.

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


Ерс = Эсп. (3.7)


Подставляя в формулу фактические данные, определяем величину экономической эффективности: Ерс = 1282,04 / 2660,39 = 0,48.

Так как Ерс > Ен, то внедрение экономически эффективно. Определяем срок окупаемости внедренной задачи:

Те = Кпс = 2660,39/1282,04 = 2,07 года.

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


.5 Охрана труда


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

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

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

В помещениях, где находится компьютер, необходимо обеспечить следующие величины коэффициента отражения: для потолка: 60..70%, для стен: 40..50%, для пола: около 30%. Для других поверхностей и рабочей мебели: 30..40%.

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

Существует три вида освещения - естественное, искусственное и совмещенное (естественное и искусственное вместе).

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

Комбинированное - освещение, при котором к общему добавляется местное освещение.

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

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

Для комфортной работы стол должен удовлетворять следующим условиям:

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

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

-конструкция стола должна предусматривать наличие выдвижных ящиков (не менее 3 для хранения документации, листингов, канцелярских принадлежностей).

-высота рабочей поверхности рекомендуется в пределах 680-760мм.

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

Поверхность сиденья мягкая, передний край закругленный, а угол наклона спинки - регулируемый. Необходимо предусматривать при проектировании возможность различного размещения документов: сбоку от видеотерминала, между монитором и клавиатурой и т.п. Кроме того, в случаях, когда видеотерминал имеет низкое качество изображения, например заметны мелькания, расстояние от глаз до экрана делают больше (около 700мм), чем расстояние от глаза до документа (300-450мм). Вообще при высоком качестве изображения на видеотерминале расстояние от глаз пользователя до экрана, документа и клавиатуры может быть равным.

Положение экрана определяется:

-расстоянием считывания (0,6..0,7м);

-углом считывания, направлением взгляда на 20° ниже горизонтали к центру экрана, причем экран перпендикулярен этому направлению.

Должна также предусматриваться возможность регулирования экрана:

-по высоте +3 см;

-по наклону от -10° до +20° относительно вертикали;

-в левом и правом направлениях.

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

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

-голова не должна быть наклонена более чем на 20°;

-плечи должны быть расслаблены;

-локти под углом 80° - 100°;

-предплечья и кисти рук в горизонтальном положении.

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

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

Существенное значение для производительной и качественной работы на компьютере имеют размеры знаков, плотность их размещения, контраст и соотношение яркостей символов и фона экрана. Если расстояние от глаз оператора до экрана дисплея составляет 60..80 см, то высота знака должна быть не менее 3мм, оптимальное соотношение ширины и высоты знака составляет 3:4, а расстояние между знаками - 15..20% их высоты. Соотношение яркости фона экрана и символов - от 1:2 до 1:15.

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

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

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

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

Расчет выносного заземления. Рассчитаем выносное заземляющее устройство. Преимуществом такого типа заземляющего устройства является возможность выбора места размещения электродов с наименьшим сопротивлением грунта (сырое, глинистое) [8].

Сопротивление группового заземлителя рассчитывается, если:

-мощность установки менее 2 кВА;

-вертикальный заземлитель - стальной прут диаметром 30 мм и длиной 5 м;

-горизонтальный заземлитель - стальная полоса шириной 20 мм, толщиной 8 мм;

-удельное сопротивление грунта (глина) 70 Ом*м.

Сопротивление одиночного вертикального заземлителя рассчитывается по формуле:


(4.1)


где - удельное сопротивление грунта (Ом*м); l - длина вертикального заземлителя (м); d - диаметр вертикального заземлителя (м); t - глубина заложения.


(4.2)

.



Расстояние между заземлителями (м):


(4.3)

.


Ориентировочное количество вертикальных заземлителей (шт):


(4.4)


где Rзаз - нормируемая величина сопротивления заземления (Rзаз=4Ом);



Количество вертикальных заземлителей определяется по формуле:


(4.5)


где - коэффициент использования вертикальных заземлителей (так как ориентировочное n=4 и la=7,5, поэтому ).



Длина горизонтального заземлителя (м):


(4.6)

.


Сопротивление горизонтального заземлителя рассчитывается по формуле:


(4.7)


где b1 - ширина полосы (м)


.


Сопротивление группового заземлителя:


(4.8)


где - коэффициент использования горизонтальных заземлителей ()


,


Рассчитанное заземление подходит для помещения, в котором проводилась реализация программного продукта, и обеспечит защиту персонала от поражения электрическим током в случае неисправности оборудования (при пробое на корпус).

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

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

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

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

Следовательно, степень огнестойкости здания можно определить как третью (III).

Помещение по функциональной пожарной опасности относится к классу Ф1.3 - многоквартирные жилые дома.

Здание оборудовано пожарным водопроводом высокого давления с пожарными кранами.

Требования, предъявляемые к пожарной безопасности:

-установка пожарно-сигнальной аппаратуры с соответствующими тепловыми и дымовыми датчиками;

-выполнение скрытой электропроводки в стенах;

-устранение неисправных выключателей и розеток;

-запрет на использование оголенных шнуров и проводов для соединения;

-необходимо иметь в доступном видимом месте углекислотные огнетушители (по характеру помещения - минимум 1 шт.).

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

Причинами возникновения пожара могут быть:

-неисправности электропроводки, розеток и выключателей которые могут привести к короткому замыканию или пробою изоляции;

-использование поврежденных (неисправных) электроприборов;

-использование в помещении электронагревательных приборов с открытыми нагревательными элементами;

-возникновение пожара вследствие попадания молнии в здание;

-возгорание здания вследствие внешних воздействий;

-неаккуратное обращение с огнем и несоблюдение мер пожарной безопасности.

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

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


3.6 Выводы


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

Основными пунктами рассмотрения во третьей главе стали:

-описание реализации;

-описание пользовательского интерфейса;

-полученные результаты и их анализ;

-тестирование и оценка надежности программного продукта;

-расчет себестоимости;

-охрана труда.



ЗАКЛЮЧЕНИЕ


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

В программном продукте реализованны следующие функции:

-чтение содержимого dbf файлов;

-создание шаблонов в одном из двух редакторов;

-редактирование шаблонов;

-выбор порядка конвертации dbf файлов;

-исполнение шаблонов;

-ведение журнала ошибок;

-сохрание результатов работы программы в XML файл.

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


ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ, СИМВОЛОВ, ЕДИНИЦ И ТЕРМИНОВ


ОС - операционная система

ПО - программное обеспечение

у.е. - условные единицы

т.д. - так далее

т.п. - тому подобное

м - метры

мм - миллиметры

см - сантиметры

шт. - штуки

г. - год



СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ


1.Агуров П.В. C#. Сборник рецептов. - СПб.: БХВ - Петербург, 2007. - 432 с.: ил.

2.Герберт Шилдт «Полный справочник по C#», перевод с англ., издательский дом «Вильямс», Москва, 2004. - 752 с.: ил.

.Данилина Т.Г. Конспект лекций по «Технологии Программиро-вания», РИО ПГУ, 2008.

.Джесс Либерти «Создание .NET приложений. Программирование на C#», Издание 2-ое. Издательство «Символ-Плюс». Москва, 2005. - 684 с.

.Карли Ватсон и др. «C#», перевод с англ., издательство «Лори», Москва, 2005. - 862 с.

.Лабор В.В. «Си шарп: Создание приложений для Windows», издательство «Харвест», Минск, 2003. - 384 с.

.СанПин 2.2.2/2.4.1340-03. Гигиенические требования к персональным электронно-вычислительным машинам и организации работы, 2007.

.СНиП ПМР 31-20-02. Электротехнические устройства, 2002.

.CНиП 21-01-03. Пожарная безопасность зданий и сооружений, 2003.

.Троелсен Э. «C# и платформа .NET. Библиотека программиста», издательский дом «Питер», Санкт-Петербург, 2004. - 796 с.:ил.

.Фролов А.В., Фролов Г.В. Язык C#. Самоучитель. - М.: ДИАЛОГ-МИФИ, 2003. - 560 с.

.Чарльз Петцольд «Программирование для Microsoft Windows на C#», Том 2, перевод с англ., издательско-торговый дом «Русская редакция», Москва, 2002. - 624 с.: ил.


ВВЕДЕНИЕ За все время существования компьютеров было разработано немало операционных систем. Сейчас их количество измеряется в десятках и в различных сем

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ