Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Изм.
Лист
№ докум.
Подпись
Дата
Лист
ДП-230105-608647-2012
ОГЛАВЛЕНИЕ
Задание
АННОТАЦИЯ 5
ВВЕДЕНИЕ 7
Техническое задание на дипломное проектирование 8
ГЛАВА I. ПОСТАНОВКА ЗАДАЧИ 12
1.1. Анализ предметной области 12
1.2. Цели разработки текстового редактора для русско-язычного интерпретатора языка программирования 13
1.3. Выбор модели разработки программного комплекса 14
1.4. Обоснование выбранного языка и среды программирования 16
1.5. Выводы 19
ГЛАВА II. АНАЛИТИЧЕСКАЯ ЧАСТЬ 20
2.1. Основные требования к программному продукту 20
2.2. Текстовые редакторы 20
2.3. Алгоритмы поиска текста 21
2.4. Аналоги текстовых редакторов с русско-язычным кодом 24
2.5. Выводы 27
ГЛАВА III. ПРОЕКТНО-КОНСТРУКТОРСКАЯ И ТЕХНОЛОГИЧЕСКАЯ ЧАСТИ 28
3.1. Разработка функционала программы 28
3.2. Разработка интерфейса программы 31
3.3. Выводы 34
ГЛАВА IV. ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ 35
4.1. Тестирование, как способ обеспечения качества программного продукта 35
4.2. Критерии выбора тестов для программного продукта 36
4.3. Тестирование программного продукта 37
4.4. Руководство пользователя 40
4.4.1. Введение 40
4.4.2. Назначение и условия применения 40
4.4.3. Руководство программиста 41
4.4.4. Описание операций 42
4.4.5. Аварийные ситуации 56
4.5. Выводы 57
ГЛАВА V. РАСЧЕТ ЭКОНОМИЧЕСКОЙ ЭФФЕКТИВНОСТИ 58
5.1 Расчет текущих затрат 59
5.2 Расчет себестоимости. 65
5.3 Расчет экономической эффективности от внедрения программы 67
5.4 Выводы 68
ГЛАВА VI. БЕЗОПАСНОСТЬ И ЭКОЛОГИЧНОСТЬ ПРОЕКТА 70
Введение 70
6.1. Анализ опасных и вредных производственных факторов и факторов вредного воздействия на окружающую среду 70
6.1.1. Поражение электрическим током. 71
6.1.2. Параметры микроклимата 72
6.1.3. Анализ уровня шума и вибрации 72
6.1.4. Параметры освещения 73
6.1.5. Электромагнитное излучение 73
6.2. Расчет освещенности рабочего места 75
6.3. Мероприятия по снижению воздействия опасных вредных производственных факторов 79
6.3.1 Обеспечение электробезопасности 81
6.3.2. Нормирование статического электричества 82
6.3.3. Обеспечение оптимальных параметров воздуха рабочих зон 83
6.3.4. Снижение уровня шума 84
6.4. Пожарная безопасность 85
6.5. Экологичность проекта 87
6.6. Расчет определения воздухообмена в помещении 90
6.7. Выводы 94
ЗАКЛЮЧЕНИЕ 95
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 96
ПРИЛОЖЕНИЕ А 98
Тема дипломного проекта «Разработка текстового редактора для русско-язычного интерпретатора языка программирования» - в рамках которого был разработан программный продукт, позволяющий работать с текстом и файлами, в редакторе, на языке программирования, основанным на русском языке.
Дипломный проект состоит из введения, шести глав, заключения и списка литературы. Также в состав диплома входит руководство пользователя.
Рассматривается создание программы для загрузки и сохранения файлов, редактирования, поиска и замены текста, а также экспортирование программного кода в *.pas файл языка программирования высокого уровня Pascal.
Дипломный проект написан на 148 листах.
Список литературы содержит 30 наименований.
ABSTRACT
Thesis Project - "Development of a text editor for Russian-speaking interpreter programming language" - in which was developed by a software product that allows you to work with text and files in an editor, a programming language, based in Russian. The degree project consists of an introduction, six chapters and a bibliography. Also included in the diplom guide.
How to create a program for loading and saving files, editing, search and replace text, and export of code in the *. Pas file is a high-level programming language Pascal. The degree project is written on 148 pages.
References contains 30 items.
В нынешнее время компьютерные технологии все больше и больше внедряются в жизнь современного человека и его образовательный процесс. Появляется великое множество простых и весьма сложных компьютерных программ для применения в области образования. Порой сложно понять и начать учиться основам написания программ на неизвестных языках программирования. Гораздо проще начинать изучать основы на более интуитивно понятных языках. Также немаловажным в обучении на занятиях по программированию является сам интерфейс для работы с пользователем, который также должен выполняться на естественном языке.
Основываясь на этом, появляется идея разработки текстового редактора для русско-язычного интерпретатора языка программирования, в рамках которой, будет представлена возможность создания, редактирования и интерпретации программ, написанных на языке программирования, основанном на русском языке.
Не мало важным является тот факт, что система будет содержать возможность экспортирования набранного кода программы в язык высокого уровня Pascal, что дает дополнительный толчок для интереса изучения написания программ.
Система содержит интегрированную среду разработчика, которая предоставляет широкие возможности по визуальному вводу и редактированию программы, что в конечном итоге не только облегчает понимание написанного, но и сильно облегчает процесс создания программ.
Работа выполняется в рамках дипломного проекта «Разработка текстового редактора для русско-язычного интерпретатора языка программирования».
Программа предназначена для общеобразовательных учреждений. Основной функцией программы является работа с текстом и файлами, в редакторе, на языке программирования, основанным на русском языке.
4.1.Требования к функциональным характеристикам.
Разрабатываемое ПО должно обеспечивать:
- работу с файлами;
- выполнение операций по редактированию вводимого текста;
- поиск по вводимому коду программы.
4.1.1. Состав выполняемых функций:
- ввод исходного текста программы на русско-язычном языке программирования;
- операции открытия и сохранения файлов программы;
- операции редактирования текста;
- операции поиска и замены в тексте;
- выполнение программного кода с отображением результата выполнения.
4.1.2. Организация входных и выходных данных.
Входными данными для программы является исходный текст программы на русско-язычном языке программирования.
Выходными данными для программы является файл набранный программы, а также файл на языке высокого уровня Pascal.
4.2. Требования к надежности.
Программное средство должно обеспечивать надежное функционирование по обработке данных. Проверять корректность поступающих и обрабатываемых сведений. Также обеспечивать безопасность и целостность данных.
4.3. Условия эксплуатации и требования к составу и параметрам технических средств.
Требования к составу и параметрам технических средств уточняются на этапе эскизного проектирования системы.
4.4. Требования к информационной и программной совместимости.
Программа должна работать на платформах Windows 2000/XP/Vista/7.
4.5. Требования к транспортировке и хранению.
Программа поставляется на лазерном носителе информации или флеш-карте;
Программная документация поставляется в электронном и печатном виде.
4.6. Специальные требования.
Ввиду объемности проекта задачи предполагается решать поэтапно, при этом модули ПО, созданные в разное время, должны предполагать возможность наращивания системы и быть совместимы друг с другом, поэтому документация на принятое эксплуатационное ПО должна содержать полную информацию, необходимую для работы программистов с ним.
Используемый язык программирования С++.
5. Требования к программной документации
Документация на разработку программного продукта «Разработка текстового редактора для русско-язычного интерпретатора языка программирования» и состав документации к нему должны соответствовать следующим разделам стандарта ЕСПД:
- Виды программных документов ГОСТ 19.101-77;
- Стадии разработки ГОСТ 19.102-77;
- Техническое задание. Требования к содержанию и оформлению ГОСТ 19.201-78;
- Схемы алгоритмов, программ данных и систем ГОСТ 19.701-90;
- Текст программы ГОСТ 19.401-78;
- Описание программы ГОСТ 19.402 -78;
- Программа и методика испытаний ГОСТ 19.301-79
- Пояснительная записка ГОСТ 19.404-79;
- Описание применения ГОСТ 19.502-78;
- Руководство системному программисту ГОСТ 19.503-79;
- Руководство программиста ГОСТ 19.504-79;
- Руководство оператору ГОСТ 19.505-79.
6. Технико-экономические показатели
Себестоимость продукции - это затраты предприятия на ее производство и реализацию, выраженные в денежной форме. Различают плановую и фактическую себестоимость.
Плановая себестоимость продукции включает в себя только те затраты, которые при данном уровне техники и организации производства являются для предприятия необходимыми. Они исчисляются на основе плановых норм использования оборудования, трудозатрат, расхода материалов.
Подробный расчет технико-экономических показателей произведен при подготовке полной документации по проекту.
7. Порядок контроля и приемки
После передачи Исполнителем отдельного функционального модуля программы Руководителю проекта последний имеет право тестировать модуль в течение 7 дней. После тестирования Руководитель проекта должен принять работу по данному этапу. В случае обоснованного отказа Исполнитель обязуется доработать модуль.
8.Календарный план работ
Таблица 1. Календарный план работ
№ этапа |
Название этапа |
Сроки этапа |
Чем заканчивается этап |
|
Анализ предметной области. Разработка технического задания на разработку модуля. |
09.01.2012-19.02.2012 |
Предложения по работе системы. Техническое задание на разработку модуля |
|
Постановка задачи, разработка эскизного проекта рабочей программы. Построение структурной, функциональной схем и алгоритма программы. |
20.02.2012-31.03.2012 |
Эскизный проект рабочей программы. Структурная, функциональная схема, алгоритм программы. |
|
Разработка русскоязычного интерпретатора языка программирования. Тестирование и отладка модуля. |
01.04.2012-02.06.2012 |
Готовый программный модуль «Русскоязычный интерпретатор языка программирования». |
Руководитель работы Малов А.А.
Текстовые редакторы предназначены для обработки текстовой информации и выполняют, в основном, следующие функции:
Типовая структура интерфейса включает ряд элементов:
Строка меню содержит имена групп команд, объединенных по функциональному признаку. Строка меню находится в верхней части экрана. Выбор режима из строки меню открывает соответствующее подменю, а выбор определенной опции в нем обеспечивает доступ к меню более низкого уровня. Такая система вложенных (ниспадающих) меню составляет основу интерфейса текстового процессора. Команды меню выбираются с помощью мыши, клавиш управления курсором или комбинаций нажатия определенных клавиш ("горячих клавиш").
Рабочее поле это пространство на экране дисплея для создания документа и работы с ним. Максимальный размер рабочего поля определяется стандартными параметрами монитора.
Линейка прокрутки служит для перемещения текста документа в рабочем поле окна Линейка, обеспечивающая вертикальное перемещение текста, называется вертикальной линейкой прокрутки, а горизонтальное перемещение горизонтальной линейкой прокрутки.
Главной целью создания текстового редактора для русско-язычного интерпретатора языка программирования является создание, редактирование, сохранение программ, написанных на языке программирования, основанном на русском языке, а также экспорт программного кода в язык программирования высокого уровня Pascal.
Входной информацией является текст программы, написанной на языке программирования, основанном на русском языке. При этом присутствует возможность создания пользовательских функций, в которых могут присутствовать операторы управления течением программы ветвления, циклы, а также операторы вывода результата. Выходной информацией являются результаты выполнения программы, сообщения об ошибках, а также сохранение файлов и возможный экспорт в Pascal.
Программный продукт содержит интегрированную среду разработчика, которая предоставляет широкие возможности по визуальному вводу, редактированию и отладке программы, что в конечном итоге не только облегчает понимание написанного, но и сильно облегчает процесс создания программ.
Благодаря внедрению данного программного продукта, могут быть успешно решены следующие задачи:
Для разработки текстового редактора для русско-язычного интерпретатора языка программирования целесообразно использовать спиральную модель разработки, которая изображена на рисунке 1.
Использование спиральной модели позволяет осуществлять переход на следующий этап выполнения проекта, не дожидаясь полного завершения текущего - недоделанную работу можно будет выполнить на следующей итерации. Главная задача каждой итерации - как можно быстрее создать работоспособный продукт, который можно показать пользователям системы. Таким образом, существенно упрощается процесс внесения уточнений и дополнений в проект.
Рисунок 1. Спиральная модель жизненного цикла
Спиральный подход позволяет сделать процесс разработки программного обеспечения более гибким. Итерационная разработка существенно упрощает внесение изменений в проект при изменении требований заказчика.
При использовании спиральной модели отдельные элементы информационной системы интегрируются в единое целое постепенно. При итерационном подходе интеграция производится фактически непрерывно. Поскольку интеграция начинается с меньшего количества элементов, то возникает гораздо меньше проблем при ее проведении.
При данной модели разработки уменьшается уровень рисков. Данное преимущество является следствием предыдущего, так как риски обнаруживаются именно во время интеграции. Поэтому уровень рисков максимален в начале разработки проекта. По мере продвижения разработки ожидаемый уровень рисков снижается. При использовании спиральной модели снижение уровня рисков происходит с наибольшей скоростью. Это связано с тем, что при итерационном подходе интеграция выполняется уже на первой итерации, и на начальных итерациях выявляются многие аспекты проекта, такие как пригодность используемых инструментальных средств и программного обеспечения, квалификация разработчиков и т.п.
Итерационная разработка обеспечивает большую гибкость в управлении проектом, давая возможность внесения тактических изменений в разрабатываемое изделие. Например, можно сократить сроки разработки за счет снижения функциональности системы или использовать в качестве составных частей системы продукцию сторонних фирм вместо собственных разработок. Это может быть актуальным в условиях конкурентной борьбы, когда необходимо противостоять продвижению изделия, предлагаемого конкурентами.
Итерационный подход упрощает повторное использование компонентов. Это обусловлено тем, что гораздо проще выявить общие части проекта, когда они уже частично разработаны, чем пытаться выделить их в самом начале проекта. Анализ проекта после проведения нескольких начальных итераций позволяет выявить общие многократно используемые компоненты, которые на последующих итерациях будут совершенствоваться.
Спиральная модель позволяет получить более надежную и устойчивую систему. Это связано с тем, что по мере развития системы ошибки и слабые места обнаруживаются и исправляются на каждой итерации. Одновременно могут корректироваться критические параметры эффективности.
Итерационный подход дает возможность совершенствовать процесс разработки - анализ, проводимый в конце каждой итерации, позволяет проводить оценку того, что должно быть изменено в организации разработки, и улучшить ее на следующей итерации.
При выборе языка программирования и среды разработки во внимание было принято несколько факторов:
- техническое задание и выдвигаемые им требования для создания законченной программы;
- эффективность и актуальность использования языка программирования и среды разработки;
Для реализации алгоритма в качестве основного был выбран язык программирования С++ - язык общего назначения, область приложений которого - программирование любых достаточно сложных программ. Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. С таким умыслом первоначально задумывался C. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко. С таким умыслом предварительно задумывались средства, добавленные к C для создания С++.
С++ - это универсальный язык программирования, задуманный так, чтобы сделать программирование более простым и приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C (его объектно-ориентированным расширением).
Основной целью разработчиков C было создание языка, который вместо неудобного и лишенного наглядности ассемблера применялся бы в самых насущных задачах системного программирования. К достоинствам языка С относятся лаконичность записи алгоритмов, логическая стройность написанных на нем программ, их переносимость между компьютерами с различной архитектурой и различными операционными средами (чего не скажешь о программах на машинно-зависимом языке ассемблера). Компиляторы языка разработаны практически для всех существующих в настоящее время платформ. Как никакой другой язык программирования, язык С «доверяет» программисту. Даже в таком существенном вопросе, как преобразование типов данных, налагаются лишь незначительные ограничения. Во многих случаях программы, написанные на этом языке программирования, сравнимы по скорости с программами, написанными на языке ассемблера, при этом они более наглядны и просты в сопровождении. Все это делает его удобным и эффективным средством для решения разнообразных задач.
Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.
Различие между C и С++ состоит в первую очередь в степени внимания, уделяемого типам и структурам. C выразителен и снисходителен. С++ еще более выразителен, но чтобы достичь этой выразительности, программист должен уделить больше внимания типам объектов. Когда известны типы объектов, компилятор может правильно обрабатывать выражения, тогда как в противном случае программисту пришлось бы задавать действия с мучительными подробностями. Знание типов объектов также позволяет компилятору обнаруживать ошибки, которые в противном случае остались бы до тестирования. Немаловажно то, что использование системы типов для того, чтобы получить проверку параметров функций, защитить данные от случайного искажения, задать новые операции и т.д., само по себе не увеличивает расходов по времени выполнения и памяти. Система типов особенно полезна в нетривиальных задачах.
При выборе среды разработки во внимание было принято несколько факторов:
- техническое задание и выдвигаемые им требования для создания законченной программы;
- эффективность использования языка программирования;
- доступность необходимых библиотек, используемых в написании программы;
Исходя из этих факторов, наиболее подходящее средство разработки различных приложений на языке программирования С++ в среде Windows является Borland C++ Builder.
Программный продукт Borland C++ Builder это средство быстрого создания корпоративных программных продуктов, объединившее удобства визуальной среды разработки, объектно-ориентированный подход, разнообразные возможности повторного использования кода, открытую архитектуру и высокопроизводительный компилятор языка С++, одного из самых распространенных языков программирования.
Отметим основные особенности Borland C++ Builder :
После проделанных действий анализа предметной области была сформулирована основная цель разработки текстового редактора для русско-язычного интерпретатора языка программирования.
Для разработки программного продукта была выбрана спиральная модель разработки программного обеспечения. В качестве языка программирования для программного продукта выбран язык С++. Разработку интерфейса было решено выполнить в интегрированной среде разработки объектно-ориениррованного яка программирования Borland C++ Builder 6.
В соответствии с анализом предметной области был определен список основных требований к программе:
Текстовый редактор - это программа для просмотра, создания и редактирования (внесения изменений) электронных текстовых документов.
По мере своей эволюции текстовые редакторы прошли непростой путь развития. В настоящее время существует множество текстовых редакторов, которые, исходя из своих возможностей, предназначения, и ориентации на разные цели и задачи, условно делятся на несколько типов (родов).
Самые простые из них (так называемые блокноты) позволяют создавать текстовые файлы с простым форматированием (заметки, конспекты, рекламные листки и т.п.). Отдельную ветку таких редакторов составляют так называемые редакторы кода или HTML-редакторы, предназначенные, в первую очередь, для программистов (разработчиков приложений) и веб-мастеров.
Более продвинутые текстовые процессоры (так называемые текстовые редакторы 2-го рода) позволяют внедрять в текст различные объекты (таблицы, графики, изображения, формулы и т.д.) и имеют расширенные функции форматирования текста. Такие редакторы позволяют создавать документы различной сложности, в том числе и официальные. Данные редакторы являются самыми распространёнными и востребованными в пользовательской среде (примером может служить Microsoft Word и его аналоги).
Более мощные текстовые редакторы, служащие для компьютерной вёрстки и графики, позволяющие создавать многостраничные журналы и каталоги, относятся к издательским системам и, по понятным причинам, менее распространены среди пользователей домашних ПК.
Кроме вышеперечисленных текстовых редакторов существуют программы, предназначенные для создания и редактирования документов других типов и форматов, например, редакторы электронных таблиц или редакторы PDF документов.
Простейший (и самый медленный) алгоритм поиска, называется "методом грубой силы". Функция Find ищет подстроку P в строке S и возвращает индекс первого символа подстроки или 0 если подстрока не найдена. Хотя в общем случае этот метод, как и большинство методов грубой силы, малоэффективен, в некоторых ситуациях он вполне приемлем.
Следующий алгоритм называется плгоритм Бойера-Мура, разработанный двумя учеными - Бойером (Robert S. Boyer) и Муром (J. Strother Moore), считается наиболее быстрым среди алгоритмов общего назначения, предназначенных для поиска подстроки в строке. Под строкой здесь понимается вся последовательность символов текста. В общем случае строка - это любая последовательность байтов. Поиск подстроки в строке осуществляется по заданному образцу, т. е. некоторой последовательности байтов, длина которой не превышает длину строки.
Главное отличие алгоритма Бойера-Мура от алгоритма грубой силы заключается в том, что начинается проверка с совпадения образца и фрагмента строки не с первого, а с последнего символа образца. Таким образом, если в образце последний символ не совпадает с соответствующим символом строки, можно выполнить смещение образца относительно строки более чем на один символ.
Простейший вариант алгоритма Бойера-Мура состоит из следующих шагов. На первом шаге строится таблица смещений для искомого образца. Далее совмещается начало строки и образца и начинается проверка с последнего символа образца. Если последний символ образца и соответствующий ему при наложении символ строки не совпадают, образец сдвигается относительно строки на величину, полученную из таблицы смещений, и снова проводится сравнение начиная с последнего символа образца. Если же символы совпадают, производится сравнение предпоследнего символа образца и т. д. Если все символы образца совпали с наложенными символами строки, значит строка найдена в подстроке и поиск окончен. Если же какой-то (не последний) символ образца не совпадает с соответствующим символом строки, образец сдвигается на один символ вправо и снова начинается проверка с последнего символа. Весь алгоритм выполняется до тех пор, пока либо не будет найдено вхождение искомого образца, либо не будет достигнут конец строки.
Величина сдвига в случае несовпадения последнего символа вычисляется исходя из следующих соображений: сдвиг образца должен быть минимальным, таким, чтобы не пропустить вхождение образца в строке. Если данный символ строки встречается в образце, образец смещается образец таким образом, чтобы символ строки совпал с самым правым вхождением этого символа в образце. Если же образец вообще не содержит этого символа, сдвиг идет на величину, равную его длине, так что первый символ образца накладывается на следующий за проверявшимся символ строки.
Величина смещения для каждого символа образца зависит только от порядка символов в образце, поэтому смещения удобно вычислить заранее и хранить в виде одномерного массива, где каждому символу алфавита соответствует смещение относительно последнего символа образца.
Хотя рассмотренный упрощенный алгоритм вполне пригоден с практической точки зрения (и часто применяется), нельзя не заметить, что результаты сравнений используются недостаточно эффективно.
Определенные сложности могут возникнуть при работе с кодировкой Unicode. Очевидно, что таблица, число строк которой равно числу символов двухбайтовой кодировки, будет слишком громоздкой. К счастью в такой таблице нет необходимости, ведь в случае двухбайтовой кодировки любой образец содержит лишь небольшую часть символов алфавита. Для всех символов, не содержащихся в образце, значения смещения в каждом столбце таблицы будут одинаковыми. Эта особенность позволяет разработать сокращенные варианты таблицы для случая Unicode. Есть, конечно, и другой подход: строка текста в кодировке Unicode - это та же последовательность байтов, так что для поиска подстроки можно воспользоваться 256-символьным алфавитом. Однако этот подход менее эффективен.
Всегда ли следует применять алгоритм Бойера-Мура и какой вариант этого алгоритма лучше выбрать. Превосходство алгоритма Бойера-Мура перед методом грубой силы наиболее ощутимо проявляется с увеличением длины образца. Хотя алгоритм Бойера-Мура производит меньше сравнений чем примитивный алгоритм при длине образца более двух символов, большая сложность этого алгоритма и необходимость заранее вычислять таблицу смещений может свести на нет его преимущества, если поиск проводится в коротком тексте и длина образца невелика.
Преимущество в быстродействии более сложного варианта алгоритма Бойера-Мура перед более простым вариантом сказывается только если длина образца велика и в тексте часто встречаются отдельные последовательности символов, содержащиеся в образце. Главное же достоинство более сложного вариант алгоритма заключается в возможности реализации регистронезависимого поиска и поиска по шаблону.
Ниже приведен список аналогичных программ с кодом на русском языке.
1) Глагол - язык программирования, родственный языкам Паскаль и Оберон. Интерфейс выполнен в консольном виде, изображенном на рисуноке 2.
Рисунок 2. Интерфейс программы Глагол.
2) Лого (англ. Logo) язык программирования высокого уровня, разработанный в 1967 году Сеймуром Папертом и Идит Харель в образовательных целях для обучения детей дошкольного и младшего школьного возраста основным концепциям программирования (рекурсии, расширяемости и пр.).
В языке Лого программа представляет собой список «слов».
Как правило, реализации Лого слабо ограничивают перечень допустимых в слове символов, поэтому команды можно называть и по-русски. Более того, многие русскоязычные реализации Лого имеют русскоязычные команды или встроенные русскоязычные синонимы для всех встроенных команд.
Слова в списке разделяются пробелами. Слово может быть либо командой, либо литералом одного из трёх видов строковым, числовым или литералом списка. Команда может возвращать значение, тогда она считается функцией. Литералы возвращают своё значение непосредственно. Строковой литерал оформляется как слово, перед которым ставят двойную кавычку. Слова, состоящие из цифр, интерпретируются как числовые литералы. Для формирования списка из слов в тексте программы их окружают квадратными скобками.
Так же есть команды сохранения и получения значения по имени, но многие реализации дополняют его понятием переменной вводя компактный синтаксис команды для получения значения переменной. Поэтому обычно для получения значения переменной достаточно написать её имя, предварив его двоеточием.
Имеется специальный синтаксис для передачи в некоторые встроенные команды заранее не фиксированного количества параметров. Для этого предлагается заключать команду и все её параметры в круглые скобки, например: (СПИСОК :A :Б :В :Г 1 2 3 4) Для пользовательских команд такой синтаксис не применим, потому что не предусмотрено синтаксиса для описания обработки переданных таким образом параметров.
Переданный на выполнение интерпретатору список команд выполняется по очереди. Очередное слово интерпретируется как команда из текущего словаря системы. Если она принимает параметры, то интерпретатор выполняет следующее слово из списка, с целью получить значение для передачи его в качестве первого параметра.
Если команда стоит на месте параметра, ожидается что эта команда вернёт значение. А если возвращаемое очередной командой значение не предусмотрено передавать другой команде, система сообщает об ошибке, если такой вызов встретился в тексте программы, либо отображает значение, если вызов команды произведён в интерактивном режиме.
Поддерживается использование привычной инфиксной формы выражений математики и логики на привычных операторах, типа «(2 + 3) * 5» и «2 > 5». Но в связи с тем, что по основным правилам языка сначала идёт команда, а потом её параметры, для базовых арифметических и логических операций в некоторых диалектах (LCSI ЛогоМиры и LogoWriter, например) также существуют команды, с использованием которых выражения принимают вид «умножь сложи 2 3 5» и «больше? 2 5».
Есть команда для расширения словаря пользовательскими командами, она принимает имя новой команды, список параметров и список команд.
Предусмотрены два основных механизма управления ходом выполнения программы: оператор цикла с фиксированным числом повторений и рекурсия.
3) 1С:Предприятие 8.1. Версия для обучения программированию.
Программный продукт "1С:Предприятие 8.1 Версия для обучения программированию" предназначен для получения навыков модификации существующих и создания новых прикладных решений в системе "1С:Предприятие 8".
Версия для обучения программированию доступное решение для широкого круга пользователей, которые хотят познакомиться с системой программ "1С:Предприятие 8" и научиться приемам конфигурирования: созданию и изменению структуры метаданных, написанию программных модулей, разработке диалогов и интерфейсов, администрированию прикладных решений на платформе "1С:Предприятие 8".
Наряду с задачами изучения допускается применение учебной версии платформы для модификации и разработки реальных прикладных решений в пределах возможностей этой поставки. Форматы информационных баз конфигураций учебной и коммерческой версии не отличаются, сложность конфигураций в учебной версии не ограничена. Однако возможности отладки, например, лимитированы ограничениями на объемы данных. Реальная эксплуатация прикладных решений может осуществляться только на коммерческих версиях системы "1С:Предприятие 8".
В ходе рассмотрения данной главы были изучены методы поиска текста. Так же были изучены аналоги программ с русско-язычным языком написания команд. Программа "Глагол" отстает в "развитии" пользовательского интерфейса. Программа "Лого" не достаточно функциональна, а программа 1С:Предприятие является платной.
Исходя из основных требований к программному продукту был разработан функционал программы, описанный на рисунке 3.
Закрыть
Программа
Искать дальше
Найти и заменить
Найти
Выделить все
Удалить
Вставить
Копировать
Вырезать
Вернуть
Отменить
Экспорт в Pascal
Распечатать
Сохранить как
Сохранить
Открыть
Новый
Поиск
Редактирование
Файл
О программе
Список команд
Справка
Окно выполнения
Остановить
Выполнить
Проверить
Показывать окно ошибок
Показывать номера строк
Помощь
Русич
Вид
Рисунок 3. Функциональная схема текстового редактора
Функционал программы должен включать в себя:
1) меню работы с файлом
2) меню редактирования
3) меню поиска
4) меню вид
Показывать номера строк - показывать или не показывать поле слева с нумерацией строк
Показывать окно ошибок - показывать или не показывать окно с ошибками в выполнении исходного кода программы
5) меню работы с интерпретатором Русич
Проверить - проверка на наличие ошибок в исходном коде программы
Выполнить - выполнение команд исходного кода
Остановить - остановка выполнения команд исходного кода
Окно выполнения - показать окно выполнения команд исходного кода после закрытия основного окна выполнения
6) меню помощи
Справка - справка по программе
Список команд - вывод всех команд, используемых в редакторе
О программе - вывод сообщения о данной программе
Интерфейс разрабатывался в интегрированной среде разработки С++Builder 6. С помощью передовых инструментов дизайна и макетирования создан удобный и простой в эксплуатации интерфейс с непринужденным внешним видом и комфортным восприятием для пользователя.
Кроме того создана программа с обязательным выполнением следующих пунктов:
Цветовая схема не должна отвлекать пользователя от выполнения основной его задачи разработки и редактирования текста исходной программы. На рисунке 4 изображена главная экранная форма текстового редактора для русско-язычного интерпретатора языка программирования.
Элементами пользовательского интерфейса главной экранной формы являются главное меню, кнопки и основное поле для ввода текста исходной программы.
Рисунок 4. Главная экранная форма текстового редактора для русско-язычного интерпретатора языка программирования.
На рисунке 5 изображена главная экранная форма текстового редактора для русско-язычного интерпретатора языка программирования после ввода текста исходной программы.
Рисунок 5. Экранная форма текстового редактора после ввода текста исходной программы.
На рисунке 6 изображена экранная форма после подачи команды на выполнение введенной программы.
Рисунок 6. Экранная форма выполнения введенной программы
В ходе проведения проектно-конструкторской работы был разработан программный продукт текстового редактора для русско-язычного интерпретатора языка программирования.
Проектирование программного продукта велось с учетом функциональных требований, изложенных в техническом задании.
При разработке интерфейса предпочтение отдавалось простоте, удобству в эксплуатации и комфортному восприятию пользователя.
Качество программного продукта характеризуется набором свойств, определяющих, насколько продукт “хорош” с точки зрения заинтересованных сторон, таких как заказчик продукта, спонсор, конечный пользователь, разработчики и тестировщики продукта, инженеры поддержки, сотрудники отделов маркетинга, обучения и продаж. Постановка задачи обеспечения качества продукта выливается в задачу определения заинтересованных лиц, их критериев качества и затем нахождения оптимального решения, удовлетворяющего этим критериям. Тестирование является одним из наиболее устоявшихся способов обеспечения качества разработки программного обеспечения и входит в набор эффективных средств современной системы обеспечения качества программного продукта.
С технической точки зрения тестирование заключается в выполнении приложения на некотором множестве исходных данных и сверке получаемых результатов с эталонными, с целью установить соответствие различных свойств и характеристик приложения заказанным свойствам. Как одна из основных фаз процесса разработки программного продукта (дизайн приложения - разработка кода - тестирование), тестирование характеризуется достаточно большим вкладом в суммарную трудоемкость разработки продукта.
Данная глава дипломного проекта посвящена решению задачи контроля качества разработки программного обеспечения с позиций тестирования.
При составлении тестов для программного продукта необходимо применять критерии структурного тестирования.
Структурное тестирование использует стратегию тестирования в виде “белого ящика”. Этот подход основан на анализе логики программы, что предполагает знание исходного текста программы или спецификации программы в виде потокового графа управления. Существо подхода - в проверке каждой команды, каждого пути, каждой ветви алгоритма.
Структурная информация понятна и доступна разработчикам подсистем и модулей приложения, поэтому данный класс критериев часто используется на этапах модульного и интеграционного тестирования.
Условия критерия тестирования команд - набор тестов в совокупности должен обеспечить прохождение каждой команды не менее одного раза. Это слабый критерий, он, как правило, используется в больших программных системах, где другие критерии применить невозможно.
Условие критерия тестирования ветвей - набор тестов в совокупности должен обеспечить прохождение каждой ветви не менее одного раза. Это достаточно сильный и при этом экономичный критерий, поскольку множество ветвей в тестируемом приложении конечно не велико.
Условие критерия тестирования путей - набор тестов в совокупности должен обеспечить прохождение каждого пути не менее 1 раз. Если программа содержит цикл (в особенности с неявно заданным числом итераций), то число итераций ограничивается константой.
Тестируем программу по принципу белого ящика, методом покрытия условий. Принцип его заключается в проверке каждого пути, каждой ветви алгоритма, внешняя спецификация во внимание не принимается. В данном методе записывается число тестов, достаточное для того, чтобы все возможные результаты каждого условия в решении выполнялись, по крайней мере, один раз. Проверка заключается в подстановке таких значений, чтобы последовательно получить все результаты работы программы. В рассматриваемом примере должны быть покрыты тестами следующие 4 пути, которые приведены на рисунке 7:
да 1
начало
Ввод символов
Проверка символов на лексемы
Символы остались?
нет 4
да 3
Распознавание лексем
Лексемы остались?
Вывод ошибок
Семантический анализ
Построение синтаксической структуры
да 5
Есть ошибки?
нет 6
нет 2
нет 8
да 7
Выполнение команды
Команды остались?
Вывод результата
конец
Рисунок 7. Схема тестирования программного продукта
В таблицу 2 сведены результаты проведенных тестов.
Таблица 2. Результаты проведенных тестов
Тест |
Путь |
Ожидаемый результат |
Фактический результат |
Результат тестирования |
Пользователь запускает программу |
- |
Выходит главное окно программы |
Программа успешно запускается |
+ |
Пользователь вводит текст исходной программы и запускает на выполнение |
2-4-6-8 |
Данные успешно принимаются, происходит выполнение |
Данные приняты, выполнение программы |
+ |
Пользователь вводит текст исходной программы и запускает на выполнение |
1-2-3-4-6-7-8 |
Данные успешно проверяются, происходит выполнение |
Данные приняты, выполнение программы |
+ |
Пользователь вводит текст исходной программы с ошибками и запускает на выполнение |
2-4-5 |
Данные успешно принимаются, выводятся ошибки |
Данные приняты, выведены ошибки |
+ |
Пользователь вводит текст исходной программы с ошибками и запускает на выполнение |
1-2-3-4-5 |
Данные успешно проверяются, выводятся ошибки |
Данные приняты, выведены ошибки |
+ |
Исходя из результатов проведенных тестов, можно заключить, что программа корректно выполняет свои функциональные возможности и может быть введена в эксплуатацию.
Функциональным назначением текстового редактора для русско-язычного интерпретатора языка программирования является ввод пользователем текста исходной программы на языке программирования, основанном на русском языке, редактирование введенного текста, правка, поиск, сохранение и выполнение введенной пользователем программы, а также экспорт исходного кода в файл языка программирования высокого уровня Pascal.
Программный продукт обеспечивает возможность выполнения перечисленных ниже функций:
- ввод исходного текста программы на разработанном языке программирования в программу;
- редактирование исходного текста программы на разработанном языке программирования;
- поиск и замена текста;
- сохранение в файл и экспорт в Pascal;
- выполнение программного кода с отображением результата выполнения.
Минимальные системные требования
- процессор Pentium-4 с тактовой частотой, ГГц - 0,5, не менее;
- оперативную память объемом, Гб - 0,128, не менее;
- жесткий диск со свободным объемом, Мб - 200, не менее;
- устройство ввода - клавиатура и мышь;
- монитор с разрешением 1024 x 768 VGA, не менее;
- операционная система Windows 2000, не менее.
В состав дистрибутива русско-язычного интерпретатора языка программирования входит:
- Сам ПП в виде запускного файла РУСИЧ-Редактор.exe
- Файл settings.ini который содержит в себе настройки программы
- РУСИЧ-Редактор.exe.manifest - визуальные стили Windows XP.
Для работы с программным продуктом необходимо его установить в соответствии с приведенными ниже рекомендациями:
- необходимо выделить ПК;
- запустить сам ПП РУСИЧ-Редактор.exe
Выберите файл setup.exe и два раза щелкните по нему, чтобы активизировать процесс установки. Следуйте указаниям программы установки, чтобы успешно завершить установку программы на ваш компьютер.
Если появился ярлычок на рабочем столе, значит, программа установлена правильно и можно приступать к работе.
Для запуска данного программного продукта необходимо дважды щелкнуть на ярлыке «РУСИЧ-Редактор», помещенного на рабочий стол. После этого появляется рабочее окно системы, изображенное на рисунке 8.
Рисунок 8. Главное окно программы
Наиболее полные возможности управления предоставляет главное меню программы РУСИЧ-Редактор. Оно расположено непосредственно над окном ввода текста исходной программы. Меню предоставляет доступ к основным операциям и параметрам пользовательского интерфейса программы. Ниже дан перечень пунктов меню, доступных при работе с программой:
Для создания новой программы можно нажать на кнопку «Создать новый файл» или выбрать пункт меню «Создать» в меню «Файл» или нажать на клавиши Ctrl+N. В результате появится пустое текстовое поле, в которое можно ввести исходный текст программы.
Для открытия сохраненного файла программы можно нажать на кнопку «Открыть файл» или выбрать пункт меню «Открыть» в меню «Файл» или нажать на клавиши Ctrl+O. В результате появится окно диалога открытия файла, представленное на рисунке 9.
Рисунок 9. Окно диалога открытия файла
Для открытия сохраненного файла программы нужно найти и выбрать файл с расширением .RUS, т.е. РУСИЧ-файл. После выбора файла можно нажать на кнопку «Открыть» для открытия файла.
Контекстное меню для поля ввода текста программы представлено на рисунке 10.
Рисунок 10. Контекстное меню
Для закрытия окна можно нажать на кнопку «Отмена» для закрытия окна диалога открытия файла. Также закрыть диалог открытия файла можно нажатием на крестик в правом верхнем углу.
Для сохранения набранного текста программы можно нажать на кнопку «Сохранить файл» или выбрать пункт меню «Сохранить» в меню «Файл» или нажать на клавиши Ctrl+S. В результате появится окно диалога сохранения файла, представленное на рисунке 11.
Рисунок 11. Окно диалога сохранения файла
Для сохранения введенного текста программы нужно найти и выбрать папку для сохранения фала. После ввода в поле «Имя файла» названия файла можно нажать на кнопку «Сохранить» для сохранения файла с расширением .RUS, т.е. РУСИЧ-файл.
Для закрытия окна можно нажать на кнопку «Отмена» для закрытия окна диалога сохранения файла. Также закрыть диалог сохранения файла можно нажатием на крестик в правом верхнем углу.
Для того чтобы распечатать исходный текст программы можно выбрать пункт меню «Распечатать» в меню «Файл» или нажать на клавиши Ctrl+P. В результате исходный текст программы будет отправлен на принтер, используемый по умолчанию.
Для того чтобы проверить исходный текст программы можно нажать на кнопку «Проверить программу», а также выбрать пункт меню «Проверить» в меню «РУСИЧ» или нажать на клавишу F6 . В результате будет проведен лексический и синтаксический анализы исходного текста программы. Результаты проверки без ошибок представлен на рисунке 12. Результаты проверки с ошибками представлен на рисунке 13.
Для того, чтобы экспортировать русско-язычный исходный текст программы в файл *.pas языка программирования высокого уровня Pascal необходимо из пункта меню «Файл» выбрать пункт «Экспорт в Pascal».
Рисунок 12. Результаты проверки без ошибок
Рисунок 13. Результаты проверки с ошибками
Для выполнения исходного текста программы можно нажать на кнопку «Выполнить программу», а также выбрать пункт меню «Выполнить» в меню «РУСИЧ» или нажать на клавишу F9. В результате будет проведен лексический и синтаксический анализы исходного текста программы и если обнаружатся ошибки, будут выведены результаты проверки с указанием ошибок. Результаты проверки с ошибками представлены на рисунке 12.
Если в процессе проверки ошибки не обнаружены, откроется окно выполнения исходного текста программы, представленное на рисунке 14.
Рисунок 14. Окно выполнения исходного текста программы
Для остановки выполнения исходного текста программы можно нажать на кнопку «Остановить программу», а также выбрать пункт меню «Остановить» в меню «РУСИЧ» или нажать на клавишу F8. В результате выполнение исходного текста программы будет прекращено. Окно выполнения исходного текста программы после прекращения выполнения представлено на рисунке 15.
Рисунок 15. Окно выполнения исходного текста программы после прекращения выполнения
Возможности редактирования исходного текста программы:
Для отмены изменений исходного текста программы можно нажать на кнопку «Отменить», а также выбрать пункт меню «Отменить» в меню «Редактирование» или нажать на клавиши CTRL-Z. В результате изменения исходного текста программы будет отменены.
Для того чтобы вернуть изменения исходного текста программы можно нажать на кнопку «Вернуть», а также выбрать пункт меню «Вернуть» в меню «Редактирование» или нажать на клавиши CTRL-Y. В результате изменения исходного текста программы будет возвращены.
Для того чтобы вырезать фрагмент исходного текста программы можно нажать на кнопку «Вырезать», а также выбрать пункт меню «Вырезать» в меню «Редактирование» или нажать на клавиши CTRL-X. В результате фрагмент исходного текста программы будет вырезан.
Для того чтобы скопировать фрагмент исходного текста программы можно нажать на кнопку «Скопировать», а также выбрать пункт меню «Скопировать» в меню «Редактирование» или нажать на клавиши CTRL-С. В результате фрагмент исходного текста программы будет скопирован.
Для того чтобы вставить фрагмент исходного текста программы можно нажать на кнопку «Вставить», а также выбрать пункт меню «Вставить» в меню «Редактирование» или нажать на клавиши CTRL-V. В результате будет вставлен фрагмент из буфера в исходный текст программы, начиная с положения курсора в текстовом поле ввода.
Для того чтобы удалить фрагмент исходного текста программы можно нажать на кнопку «Удалить», а также выбрать пункт меню «Удалить» в меню «Редактирование». В результате фрагмент исходного текста программы будет удален.
Для того чтобы выделить весь исходный текст программы можно выбрать пункт меню «Выделить все» в меню «Редактирование» или нажать на клавиши CTRL-A. В результате весь исходный текст программы будет выделен.
По умолчанию при открытии программного продукта показывается поле номера строк. Для того чтобы убрать поле номера строк нужно поставить галочку в пункте меню «Показывать номера строк» в меню «Вид». В результате будет убрано поле номера строк.
Для изменения основных настроек программы можно выбрать пункт меню «Основные настройки программы» в меню «Настройки» или нажать на клавишу F5. В результате появится окно справки, показанное на рисунке 16.
Рисунок 16. Окно «Основные настройки программы»
В этом окне можно просмотреть элементы языка программирования, а также изменить атрибуты текста такие как полужирный, курсив, подчеркнутый. Также можно изменить цвета заливки текста и заднего фона.
Выбор цветов заливки текста представлен на рисунке 17.
Рисунок 17. Выбор цветов заливки текста
В текстовом поле можно просмотреть как будет выглядеть при редактировании введенная программа. В итоге редактирования настроек можно нажать на кнопку «Сохранить» для сохранения настроек или на кнопку «Отмена» для закрытия окна настроек программы. Также закрыть окно основных настроек программы можно нажатием на крестик в правом верхнем углу.
Для ознакомления с возможностями программы можно нажать на кнопку «Вызов справки по программному продукту» или выбрать пункт меню «Справка» в меню «Помощь» или нажать на клавишу F1. В результате появится окно справки, показанное на рисунке 18.
Рисунок 18. Окно «Справка»
Для ознакомления с разработчиками программного продукта можно выбрать пункт меню «О программе…» в меню «Помощь» или нажать на клавишу F2. В результате появится окно справки, показанное на рисунке 19.
Рисунок 19. Окно «О программе»
Для закрытия главного окна программы можно выбрать пункт меню «Закрыть програму» в меню «Файл» или нажать на клавиши ALT-X. Также закрыть главное окно программы можно нажатием на крестик в правом верхнем углу.
Для поиска текста в исходном коде введенной программы нужно выбрать пункт меню «Найти» в меню «Поиск» или нажать на клавиши Ctrl-F. Появится окно поиска, изображенное на рисунке 20.
Рисунок 20. Окно поиска текста
Для выполнения поиска нужно ввести текст поиска в поле «Текст поиска» и выбрать направление поиска. По умолчанию направление поиска установлено в позицию «Вперед». Затем нажать кнопку «Найти». Если текст будет найден, тогда он выделиться в текстовом поле и для продолжения поиска нужно будет нажать F3 или выбрать пункт «Искать дальше» из меню «Найти». Как только поиск дойдет до конца текстового поля, то выйдет сообщение о неудачном поиске, изображенном на рисунке 23.
Для поиска и замены текста в исходном коде введенной программы нужно выбрать пункт меню «Найти и заменить» в меню «Поиск». Появится окно поиска и замены текста, изображенное на рисунке 21.
Рисунок 21. Окно поиска и замены текста
Для выполнения замены текста необходимо ввести в поле «Текст поиска» текст, который требуется найти, и в поле «Текст для замены» ввести текст, на который будет заменен текст поиска. Затем нужно выбрать направление поиска. По умолчанию направление поиска установлено в позицию «Вперед». При нажатии на кнопку «Заменить», если искомая строка встречается, то выйдет диалоговое окно подтверждения замены текста, изображенное на рисунке 22, в котором при нажатии на «Yes» изменяется первое найденное слово в тексте, а затем ищется дальше и так до тех пор, пока не закончатся совпадения текста. Если в этом окне нажать на «No», тогда выделенная строчка не заменить и поиск будет искать дальше до конца текстового поля. Если нажать на кнопку «Cancel», то тогда замена будет полностью отменена. Если нажать на «All», то все найденные слова будут автоматически заменены.
Рисунок 22. Подтверждение замены текста
Рисунок 23. Текст не найден
При сбое в работе аппаратуры восстановление нормальной работы системы должно производиться после:
- перезагрузки операционной системы;
- запуска исполняемого файла системы.
При ошибках в работе аппаратных средств (кроме носителей данных и программ) восстановление функции системы возлагается на ОС.
При ошибках, связанных с программным обеспечением (ОС и драйверы устройств), восстановление работоспособности возлагается на ОС.
При неверных действиях пользователей, неверных форматах или недопустимых значениях входных данных, система выдает пользователю соответствующие сообщения, после чего возвращается в рабочее состояние, предшествовавшее неверной (недопустимой) команде или некорректному вводу данных.
Результатом работы, отраженной в данной главе дипломного проекта, стала оценка качества разработанного программного комплекса. В ней приведены планы и результаты отладки программных компонент, тесты, эталонные результаты и распределение исходных и результирующих данных.
Был разработан и оформлен в соответствии с требованиями ЕСПД документ «Руководство пользователя».
Технико-экономические расчеты позволяют выбрать наиболее оптимальный вариант системы автоматического регулирования с целью нахождения экономической эффективности от внедрения нового оборудования или программного комплекса.
Рассмотренный в дипломном проекте текстовый редактор для русско-язычного интерпретатора языка программирования обладает характеристиками актуальными для использования программного продукта в учреждениях начального и среднего образования. Среда программирования на русском языке будет проста и понятна в изучении и познании основ создания и написания программ. Такая понятная система позволяет людям, не обученным написанию сложных программ, создать в данной среде программирования на русском языке программу, предназначенную для выполнения поставленных задач, практически без изучения команд программирования и правил написания программ.
В данном разделе дипломной работы определяется расчет полной стоимости спроектированного программного продукта и экономической эффективности от ее внедрения.
При расчете стоимости разрабатываемой программы необходимо учесть следующие факторы:
Главным источником роста прибыли и рентабельности является снижение себестоимости. Снижение себестоимости программного продукта можно добиться несколькими путями:
- изменение объема и структуры продукции;
- повышение производительности труда;
- использование ранее написанных модулей.
Рассчитаем расчет текущих затрат в базовом варианте:
Эффективный фонд времени
Календарный фонд времени в 2012 году:
Fn = Fк-Fn
FK = 366 дней
Fn = 117 дней
Fn = 366 117= 249 дней
Номинальный годовой фонд времени работы оборудования в часах при работе в одну смену:
(5.1)
= 242 дней, количество полных рабочих дней;
= 8 ч продолжительность рабочей смены;
= 7 дней количество предпраздничных, сокращенных на один час дней;
= 7 ч продолжительность предпраздничной рабочей смены.
Подставив эти данные в формулу (5.1)
ч
Эксплуатационные расходы
Эксплуатационные расходы также являются неотъемлемой частью затрат на разработку программы, и вычисляются по формуле:
Сэкс = ЗПср.год + Агод + Сэ, (5.2)
где: ЗПср.год - среднегодовая заработная плата разработчика, он же занимается обслуживанием. Работу выполняет инженер-программист с заработной платой в сумме 11000 рублей в месяц.
Агод - годовые амортизационные отчисления, руб.;
Сэ - стоимость потребляемой электроэнергии за год, руб.
руб., (5.3)
где: Ч - численность рабочих, 1 человек.
ЗПср.год = 11000*1*12 = 132000 руб.
Агод. = На% ∙ Скомп., (5.4)
где: На - норма амортизации (10%), ускоренная амортизация (20%);
Скомп. - стоимость компьютера (15000 тыс. руб.)
руб.
Накладные расходы в условиях предприятия составляют 5% от заработной платы техника-программиста. Сюда включаются затраты на содержание помещения, оборудования, управленческие затраты.
, (5.5)
где Ппр- накладные расходы в условиях предприятия
руб.
Стоимость потребляемой электроэнергии рассчитывается по формуле (5.6)
Сэ = Мп ∙ Fн. ∙ Цэ ∙ Кисп, (5.6)
где: Мп сумма потребляемой мощности, составляет 0.4кВт;
Fн. - годовой фонд рабочего времени в 2012 году, составляет 2015 часа
Цэ - стоимость 1 кВт, составляет 1.9 руб.;
Кисп коэффициент использования мощности, принимается 0.9;
Сэ = 0.4∙ 2015 ∙ 1.9 ∙ 0.9 =1378,26 руб.
Полученные данные представим в виде таблицы 3
Таблица 3 Эксплуатационные расходы
Показатель |
Расчетная формула |
Значение |
Удельный вес,% |
Среднегодовая заработная плата разработчика, руб. |
132000 |
93,71 |
|
Годовые амортизационные отчисления, руб. |
Агод = На% ∙ Скомп |
3000 |
1,12 |
Стоимость потребляемой электроэнергии за год, руб. |
Сэ = Мп ∙ Fн ∙ Цэ ∙ Кисп |
1378,26 |
0,96 |
Накладные расходы, руб. |
6600 |
4,65 |
|
Итого: |
Сэкс = ЗПср.год + Агод + Сн.р +Сэ |
142978,26 |
100,0 |
Рисунок 24. Удельный вес эксплуатационных расходов
Исходя из этих данных получаем:
Сэкс = 132000 + 3000 + 6600 + 1378,26 = 142978,26руб.
Рассчитаем расчет текущих затрат в проектируемом варианте:
Эффективный фонд времени
ч
Эксплуатационные расходы
Сэкс = ЗПср.год + Агод + Сн.р. + Сэ,
где: ЗПср.год - среднегодовая заработная плата разработчика, он же занимается обслуживанием. Работу выполняет инженер-программист с заработной платой в сумме 10000 рублей в месяц.
Агод - годовые амортизационные отчисления, руб.;
Снр - накладные расходы, руб.;
Сэ - стоимость потребляемой электроэнергии за год, руб.
руб.,
где: Ч - численность рабочих, 1 человек.
ЗПср.год = 10000*1*12 = 120000 руб.
Агод. = На% ∙ Скомп.,
где: На - норма амортизации (10%), ускоренная амортизация (20%);
Скомп. - стоимость компьютера (15000 тыс. руб.)
руб.
Накладные расходы в условиях предприятия составляют 5% от заработной платы техника-программиста. Сюда включаются затраты на содержание помещения, оборудования, управленческие затраты.
,
где Ппр- накладные расходы в условиях предприятия
руб.
Стоимость потребляемой электроэнергии рассчитывается по формуле (5.6)
Сэ = Мп ∙ Fн. ∙ Цэ ∙ Кисп
где: Мп сумма потребляемой мощности, составляет 0.4кВт;
Fн. - годовой фонд рабочего времени в 2011 году, составляет 1981 часа
Цэ - стоимость 1 кВт, составляет 1.74 руб.;
Кисп коэффициент использования мощности, принимается 0.9;
Сэ = 0.4∙ 1981 ∙ 1.74 ∙ 0.9 =1240,89 руб.
Полученные данные представим в виде таблицы 4.
Таблица 4- Эксплуатационные расходы
Показатель |
Расчетная формула |
Значение |
Удельный вес,% |
Среднегодовая заработная плата разработчика, руб. |
120000 |
93,51 |
|
Годовые амортизационные отчисления, руб. |
Агод = На% ∙ Скомп |
3000 |
1,02 |
Стоимость потребляемой электроэнергии за год, руб. |
Сэ = Мп ∙ Fн ∙ Цэ ∙ Кисп |
1240,89 |
0,95 |
Накладные расходы, руб. |
6000 |
4,62 |
|
Итого: |
Сэкс = ЗПср.год + Агод + Сн.р +Сэ |
130240,89 |
100 |
Рисунок 25. Удельный вес эксплуатационных расходов
Исходя из этих данных получаем:
Сэкс = 120000 + 3000 + 6000 + 1240,89 = 130240,89руб.
Стоимость одного часа машинного времени вычисляем по формуле:
, (5.7)
где: Сэкс - годовые эксплуатационные расходы, руб.;
Fн - эффективный годовой фонд времени, час;
Кисп - коэффициент использования машины и времени разработчика. Коэффициент использования машины принимаем 0,9.
Время разработки программы
Время разработки рассчитывается по следующим этапам, как показано в таблице 5.
Таблица 5 Этапы разработки программы
№п/п |
Этапы разработки |
Время, час. |
1 |
Постановка задачи |
13 |
2 |
Выбор метода решения |
8 |
3 |
Составление алгоритма |
19 |
4 |
Выбор языка программирования |
1 |
5 |
Составление программы |
76 |
6 |
Отладка |
23 |
ИТОГО |
140 |
|
В том числе машинное время |
99 |
Стоимость разработки программы
Стоимость разработки программы рассчитывается по формуле:
Ср= ЗПр.руч ∙ n1 + См.час ∙ n1 (5.8)
где: n1 и n2 - соответственно количество чел. часов разработки и машинных часов;
nl = 41 час.;
n2= 99 часов.
ЗП p.руч. - средняя часовая заработная плата разработчика инженера
программиста с отчислениями на социальные нужды.
, (5.9)
ФЗПгод = ЗПср.год.+ отчисл. (5.10)
Отчисления на страховые взносы составляют 26% от фонда заработной платы, в том числе:
- Федеральный бюджет - 20%
- Фонд медицинского страхования 2.8%
- Фонд социального страхования 3.2%
ФЗПгод = 120000 + 120000 ∙ 0.26 = 151200 руб.
Рассчитываем среднечасовую заработную плату по формуле 5.9:
руб.
Вычисляем стоимость разработки программы по формуле 5.10:
Ср = 76,32 ∙ 41 + 73,05 ∙ 99 = 10361,07руб.
Внедрение данной программы на производстве позволит значительно сократить время переходного процесса, а значит добиться снижения расхода энергии оборудования, выполняющего данную задачу.
Сумма приведенных затрат:
где Ен нормативный коэффициент сравнительной экономической эффективности капитальных вложений (Ен = 0,15);
К капитальные вложения.
для базового варианта
для проектируемого варианта
Годовой экономический эффект при равных объемах выпуска продукции определяется как разность сумм приведенных затрат:
,
где суммы приведенных затрат, соответственно по базовому и проектируемому вариантам.
Срок окупаемости данной программы составит:
. (5.11)
года
То есть данный программный продукт окупится через 10 месяцев.
Экономический эффект подсчитан на основе сравнения выполнения работы при использовании оптимальных систем автоматического управления и работы без использования компьютерных технологий. Положительное значение разности приведенных затрат говорит об экономической целесообразности внедрения данной системы. Экономия осуществляется в основном за счет сокращения времени при создании программ в данном программном продукте.
Разрабатываемый в рамках данного дипломного проекта программный продукт выполняется в соответствии с нормами по охране труда и экологии.
Охрана труда - это разработка, и использование мер, защищающих человека в процессе труда, составляющих содержание человеческой деятельности. Она является важнейшей составляющей безопасности жизнедеятельности человека.
Данный раздел дипломного проекта посвящен рассмотрению следующих вопросов:
- анализ опасных и вредных производственных факторов и факторов вредного воздействия на окружающую среду;
- расчет освещенности рабочего места и определение воздухообмена в помещении;
- мероприятия, обеспечивающие безопасные условия эксплуатации модуля.
Данный программный продукт используется в помещении, характеризующемся наличием в нем большого количества вычислительной техники и сопутствующего оборудования (принтеры, мониторы и т.д.). Поэтому опасные и вредные факторы, воздействующие на человека при работе с программным продуктом, связаны с использованием вычислительной техники.
К опасным факторам при работе с ЭВМ можно отнести различные экстремальные ситуации, следствием которых является резкое ухудшение здоровья оператора.
Опасные факторы:
Среди вредных факторов можно выделить следующие:
Неправильная организация труда приводит к тому, что физически вредные производственные факторы сильно действуют на психику человека, что выражается в умственном перенапряжении, перенапряжении звуковых и зрительных анализаторов, кроме того, у человека может наступить эмоциональная перегрузка.
Опасный фактор - нарушение изоляции токоведущих частей. Электрические установки, к которым относится практически все оборудование ЭВМ, представляют для человека большую потенциальную опасность, так как в процессе эксплуатации человек может коснуться частей, находящихся под напряжением, которые не защищены от проникновения, либо изоляция которых повреждена. Специфическая опасность электроустановок: токоведущие проводники, корпуса стоек ЭВМ и прочего оборудования, оказавшегося под напряжением в результате повреждения (пробоя) изоляции, не подают каких-либо сигналов, которые предупреждают человека об опасности. Реакция человека на электрический ток возникает лишь при протекании его через тело.
Неблагоприятный микроклимат - вредный производственный фактор. Метеоусловия производственной среды - это сочетание температуры, относительной влажности, скорости движения и запыленности воздуха.
Длительное и системное воздействие на человека оптимальных микроклиматических параметров обеспечивает сохранение нормального функционального и теплового состояния организма, создает ощущение теплового комфорта и является предпосылкой высокого уровня работоспособности. Если по каким-то причинам создание оптимальных микроклиматических условий невозможно, то можно устанавливать допустимые значения температуры - 22-25°С, относительной влажности - 40-60% и скорости движения воздуха - не более 0,2 м/с.
Регулирование микроклимата в основном должно производиться с помощью вентиляторов и кондиционеров. Кроме того, для того чтобы в помещениях был нормальный микроклимат, рекомендуется проводить 2 раза в день влажную уборку.
Несоблюдение норм произведенного микроклимата, установленного ГОСТ 12.1.005-88, оказывает влияние на функциональную деятельность человека, его самочувствие и здоровье.
Шум на производстве создают различные механизмы и машины. Шум также может возникать при работе электромагнитных устройств, при истечении воздуха и газов, а также при движении воды и жидкости. Шум неблагоприятно воздействует на человека, вызывая различные изменения в организме.
От постоянного воздействия шума может быть профессиональная болезнь - тугоухость. Ухо человека воспринимает звуковые колебания с частотой от 16 до 20000 Гц. Звуки с частотой ниже 16 Гц называют инфразвуками, а выше 20000 Гц - ультразвуками. Инфразвуки и ультразвуки также воздействуют на человека, хотя человек и не способен их слышать. При выполнении работ с использованием ПЭВМ в производственных помещениях уровень вибрации не должен превышать допустимых значений вибрации для рабочих мест (категория 3, тип «в») в соответствии с действующими санитарно-эпидемиологическими нормативами.
В соответствии с нормативными требованиями уровень шума на рабочих местах во время работы не должен превышать 50 дБА.
Освещение на рабочем месте должно быть таким, чтобы рабочий мог без напряжения зрения выполнять свою работу. Утомляемость органов зрения зависит от ряда причин - недостаточность освещенности, чрезмерная освещенность, неправильное направление света.
Недостаточность освещения приводит к напряжению зрения, ослабляет внимание, наступает преждевременная усталость. Чрезмерно яркое освещение вызывает ослепление, раздражение и резь в глазах. Неправильное направление света на рабочее место может вызвать резкие тени, блики и дезориентировать работающего. Все эти причины могут привести к несчастному случаю или профзаболеваниям.
При работе с компьютером основное влияние на здоровье программиста оказывает все же электромагнитное излучение от видеотерминального устройства (и в некоторых случаях от системного блока). Влияние прочих вышеуказанных факторов составляет лишь небольшую часть от величины влияния электромагнитного излучения.
В настоящее время установлено, что эксплуатация мониторов и видеотерминальных устройств более сопряжена с воздействием вредных факторов, нежели опасных. Поэтому специальность «Оператор ЭВМ» включена в перечень профессий с неблагоприятными условиями труда и работникам производится доплата для улучшения питания, что должно предотвратить профессиональные заболевания в течение всего периода труда, т.е. до достижения пенсионного возраста.
Вредные факторы при эксплуатации мониторов и видеотерминальных устройств подразделяются на две группы:
Следует отметить, что не только монитор, но и системный блок, и принтер - генерируют электромагнитное излучение в очень широком диапазоне частот. Но именно излучение монитора является более мощным. Главную опасность представляет электромагнитное излучение монитора, статический электрический заряд на экране, ультрафиолетовое и инфракрасное излучение. От переменных электрических полей сложно защититься. Можно лишь ослабить их до уровня естественного фона, не размещая компьютеры вблизи друг друга. Не рекомендуется долго сидеть сбоку или сзади монитора, а также между компьютерами на небольшом расстоянии.
Факторов вредного воздействия на окружающую среду при внедрении и эксплуатации данного программного модуля не существует.
И вся защита окружающей среды сводится к соблюдению следующих элементарных правил:
- поддержание в норме санитарно-гигиенического состояния рабочего места, т. е. уборка мусора в специально отведенные для этого урны.
- соблюдение чистоты и порядка в помещении.
При освещении помещений используют: естественное освещение, создаваемое прямыми солнечными лучами и рассеянным светом небосвода, меняющиеся в зависимости от географической широты, времени года и суток, степени облачности и прозрачности атмосферы; искусственное освещение, создаваемое электрическими источниками света, и совмещенное освещение, при котором недостаточное по нормам естественное освещение дополняют искусственным.
Основной задачей производственного освещения является поддержание на рабочем месте освещенности, соответствующей характеру зрительной работы. При организации производственного освещения необходимо обеспечить равномерное распределение яркости на рабочей поверхности и окружающих предметах, отсутствие в поле зрения резких теней, прямой и отраженной блескости.
В соответствии с требованиями СанПиН 2.2.2/2.4.1340-03 все производственные, складские, бытовые и административно-конторские помещения должны иметь естественное освещение. Рабочие столы следует размещать таким образом, чтобы видеодисплейные терминалы были ориентированы боковой стороной к световым проемам, чтобы естественный свет падал преимущественно слева.
Освещенность на поверхности стола в зоне размещения рабочего документа должна быть 300 500 лк. Освещение не должно создавать бликов на поверхности экрана. Освещенность поверхности экрана не должна быть более 300 лк.
Рекомендуемые яркости в поле зрения оператора должны лежать в пределах 1:5-1:10.
Разрабатываемая программа будет установлена в помещении операторов. Поэтому процесс работы эксперта может происходить в таких условиях, когда естественное освещение недостаточно или отсутствует. Исходя из этого, рассчитаем параметры искусственного освещения.
Расчетным уравнением «метода коэффициента использования светового потока является:
, (6.1)
где Е - нормируемая минимальная освещенность; S - площадь помещения; z - характеризует неравномерность освещения; N - число светильников; η - коэффициент использования; к - коэффициент запаса.
По формуле (6.1) рассчитывают световой поток лампы или лампы в светильнике, необходимый для создания освещенности не ниже нормируемой.
Искусственное освещение выполняется посредством электрических источников света двух видов: ламп накаливания и люминесцентных ламп. Будем использовать люминесцентные лампы, которые по сравнению с лампами накаливания имеют существенные преимущества:
Задача расчета общего равномерного освещения светильниками с люминесцентными лампами сводится к определению требуемого числа светильников по заранее известным типу и мощности светильников и реже при заданном числе светильников - получаемой освещенности. Расчет числа светильников производится по формуле:
, (6.2)
где n - число принятых рядов светильников.
Для вычисления числа светильников в ряду используется формула:
(6.3)
где n - число, пропорциональное количеству рядов светильников, определяемое из условия наилучшего соотношения. Для помещения п-1,3 -1,4.
Выберем источник света - светильники с люминесцентными лампами типа ЛБ 40-1: мощность 40 Вт, значение светового потока 2600 лм, длина колбы 1,2 м. Выберем размер помещения на 2 рабочих места:
длина А- 6 м, ширина В- 4 м, высота Н = 2,5 м.
Е = 400 лк - минимальная нормируемая освещенность для помещения.
к-1,5 - коэффициент запаса.
z = 1,1 - коэффициент неравномерности.
24 м2.
Ф =2·2600= 5200 лм - световой поток спаренных люминесцентных ламп белого света ЛБ 40-1.
Для нахождения коэффициента использования найдем индекс помещения:
(6.4)
где А и В - длина и ширина помещения, h - высота подвеса светильников над рабочей поверхностью.
h = H-hp, (6.5)
hp =0,8 м - уровень рабочей поверхности над полом.
= 1,7 м.
Коэффициент использования светового потока для I = 1,4, коэффициентов отражения потолка рп = 70% и стен рс = 50%, для светильников типа ЛСП равен:
Расстояние между светильниками равно:
Тогда количество рядов:
Количество светильников в ряду:
Берем количество светильников в ряду Nр=3. Тогда расчетная величина освещенности, по формуле
, (6.6)
примет значение
Расчетная величина превышает минимальную нормированную величину освещенности на 2,5%.
Мощность осветительной установки:
В результате вычислений получаем следующее оптимальное расположение искусственного освещения:
- Расстояние между рядами - 2,36 м.
Мероприятия по обеспечению безопасных условий эксплуатации программного комплекса можно разделить на организационные и технические.
Организация работы и личная ответственность за состояние охраны труда, соблюдение законов о труде, положений, правил и норм по этим вопросам возложены непосредственно на руководителей министерств, управлений, предприятий, организаций и т.д.
К организационным мероприятиям по обеспечению безопасности труда относят:
медосмотры;
инструктажи;
Профессиональные пользователи ПЭВМ должны проходить обязательные предварительные (при поступлении на работу) и периодические медицинские осмотры с целью выявления признаков профессиональных и прочих заболеваний, а также их профилактики. Перечень вредных производственных факторов и работ, при выполнении которых проводятся предварительные и периодические медицинские осмотры, и порядок их проведения устанавливается Государственным комитетом санитарно-эпидемиологического надзора Российской Федерации и Министерства здравоохранения Российской Федерации. Работников, нуждающихся по состоянию здоровья в предоставлении более легкой работы, администрация предприятия, организации обязана перевести, с их согласия, на такую работу в соответствии с медицинским заключением временно или без ограничения срока. В соответствии со статьями 9 и 34 Закона РФ «О санитарно- эпидемиологическом благополучии населения», в организациях должен осуществляться производственный контроль соблюдения требований санитарных правил и проведением гигиенических и лечебно-профилактических мероприятий, направленных на предупреждение возникновения заболеваний работников. К непосредственной работе с ПЭВМ допускаются лица, не имеющие медицинских противопоказаний.
Наиболее распространенной формой повышения знаний в вопросах охраны труда является инструктаж.
Необходимо проводить не только организационные, но и технические мероприятия.
Электрические установки, к которым относится все оборудование ЭВМ, представляют для человека большую опасность. ВТ отличается большим разнообразием используемых видов сетей, уровней их напряжения, родом тока. Так основное питание ВТ осуществляется трехфазной сетью с частотой 50 Гц и напряжением 380/220 В. Для питания отдельных устройств используются однофазные сети как переменного, так и постоянного тока с напряжением от 5 до 380 В.
Электрооборудование ВТ в основном относится к установкам с напряжением до 1000 В, исключение составляют экраны пульта, дисплеи, электроннолучевые трубки, которые имеют напряжение до нескольких кВ.
Окружающая среда помещения, в которой находится оборудование ВТ, воздействует на электрическую изоляцию приборов, устройств, электрическое сопротивление человека. Поэтому могут создаться условия для поражения электрическим током обслуживающего персонала. В этом отношении различают производственные помещения с повышенной опасностью, особо опасные и без повышенной опасности. При проведении работ в электроустановках с целью предупреждения электротравматизма очень важно строго выполнять и соблюдать соответствующие техники безопасности.
Применение только одних организационных и технических мероприятий не может в полной мере обеспечить необходимую электробезопасность. Это возможно, если использовать механические средства защиты: электрическая изоляция токоведущих частей, защитное заземление, зануление, выравнивание потенциалов, защитное отключение, электрическое разделение сетей, малое напряжение, двойная изоляция и т.д.
Имеющийся в настоящее время комплекс разработанных организационных мероприятий и технических средств защиты показывает, что имеется возможность добиться значительно больших успехов в деле устранения воздействия на окружающую среду рабочего места программиста опасных и вредных производственных факторов. Для снижения ущерба вреда здоровью, необходимо соблюдение установленных гигиенических требований к режимам труда и организации рабочих мест.
Исключительно важное значение для предотвращения электротравмотизма имеет правильная организация обслуживания действующих электроустановок, проведения ремонтных, монтажных и профилактических работ.
Во время работы оператору запрещается:
Основные меры защиты работников от поражения электрическим током:
Для снижения возникновения разрядных токов статического электричества, возникающее при прикосновении к любому из элементов ЭВМ, покрытие технологических полов следует выполнять из однослойного поливинилхлоридного антистатического линолеума. Другим методом защиты является нейтрализация заряда статического электричества ионизированным газом. К общим мерам защиты от статического электричества можно отнести общее и местное увлажнение воздуха.
К профилактическим мероприятиям по предупреждению негативного влияния источников электромагнитных излучений относится прежде всего обеспечение соответствия их технических характеристик нормативным требованиям и строгое соблюдение правил эксплуатации.
В санитарных нормах установлены величины параметров микроклимата, создающие комфортные условия. Эти нормы устанавливаются в зависимости от времени года, характера трудового процесса и производственного помещения (см. таблицу 6).
Таблица 6. Параметры для определения микроклимата
Период года |
Параметр микроклимата |
Величина |
Холодный |
Температура воздуха в помещении |
22…24°С |
Относительная влажность |
40…60% |
|
Скорость движения воздуха |
до 0,1м/с |
|
Теплый |
Температура воздуха в помещении |
23…25°С |
Относительная влажность |
40…60% |
|
Скорость движения воздуха |
0,1…0,2м/с |
Для создания в рабочей зоне необходимых благоприятных условий воздушной среды, удаление из рабочей зоны загрязненного или перегретого воздуха и подача чистого воздуха используют вентиляцию. Естественная вентиляция имеет недостаток, который заключается в том, что приточный воздух вводится в помещение без предварительной очистки и подогрева, а удаляемый воздух не очищается и загрязняет атмосферу. Искусственная вентиляция очищает от загрязнений (пыли, вредных паров), воздух в зимнее время подогревается, а в летнее охлаждается. Для определения требуемого воздухообмена необходимо иметь следующие исходные данные: количество вредных выделений (тепла, влаги, паров) за 1 час, предельно допустимое количество (ПДК) вредных веществ в 1 м3 воздуха, подаваемого в помещение.
Для повышения влажности воздуха в помещениях с ПЭВМ следует применять увлажнители воздуха, заправляемые ежедневно дистиллированной или прокипяченной питьевой водой.
При выполнении основных или вспомогательных работ с использованием ПЭВМ уровни шума на рабочих местах не превышают предельно допустимых значений, установленных для данных видов работ "Санитарными нормами допустимых уровней шума на рабочих местах".
Источником шума являются механические устройства ПК. Человек, работая при шуме, привыкает к нему, но продолжительное действие сильного шума вызывает общее утомление, может привести к ухудшению слуха, а иногда и к глухоте, нарушается процесс пищеварения, происходит изменение объема внутренних органов. Эти вредные последствия шума тем больше, чем сильнее шум и продолжительнее его действие. Таким образом, шум на рабочем месте при работе за ПК не превышает 50 дБА.
Шумящее оборудование (принтеры, серверы), уровни шума которых превышают нормативные, размещают вне основного помещения.
Снизить уровень шума в помещениях с ПЭВМ можно использованием звукопоглощающих материалов с максимальными коэффициентами звукопоглощения в области частот 63 - 8000 Гц для отделки помещений (разрешенных органами и учреждениями Госсанэпиднадзора России), подтвержденных специальными акустическими расчетами.
Пожары - стихийное распространение горения, проявляющееся в уничтожающем действии огня, вышедшего из-под контроля человека.
Пожары в помещениях, где расположены компьютеры, представляют особую опасность, т.к. сопряжены с большими материальными потерями. Как известно, пожар может возникнуть при взаимодействии горючих веществ, окислителя и источника зажигания. В помещениях вычислительных центров присутствуют все три фактора, необходимые для возникновения пожара.
Пожары представляют особую опасность, так как сопряжены с большими материальными и людскими потерями. Как известно пожар может возникнуть при взаимодействии горючих веществ, окисления и источников зажигания. В помещениях с вычислительной техникой (ВТ) присутствуют все три основных фактора, необходимые для возникновения пожара.
Горючими компонентами в помещении являются: строительные материалы для акустической и эстетической отделки помещений, перегородки, двери, полы, изоляция кабелей и вычислительная техника.
Возникновение пожара в помещении наиболее вероятно по причинам неисправности электрооборудования, к которым относятся: искрение в местах соединения электропроводки, короткие замыкания в цепи, перегрузки проводов и обмоток трансформаторов, перегрев источников бесперебойного питания и другие факторы. Поэтому подключение компьютеров к сети необходимо производить через распределительные щиты, позволяющие производить автоматическое отключение нагрузки при аварии.
Особенностью современных ЭВМ является очень высокая плотность расположения элементов электронных схем, высокая рабочая температура процессора и микросхем памяти. Следовательно, вентиляция и система охлаждения, предусмотренные в системном блоке компьютера должны быть постоянно в исправном состоянии, т.к. в противном случае возможен перегрев элементов, не исключающий их воспламенение. Для отвода избыточной теплоты от ЭВМ служат системы вентиляции и кондиционирования воздуха. При постоянном действии эти системы представляют собой дополнительную пожарную опасность.
Надёжная работа отдельных элементов и электронных схем в целом обеспечивается только в определённых интервалах температуры, влажности и при заданных электрических параметрах. При отклонении реальных условий эксплуатации от расчётных также могут возникнуть пожароопасные ситуации.
Поскольку в рассматриваемом случае при возгорании электроустройства могут находиться под напряжением, то использовать воду и пену для тушения пожара недопустимо, поскольку это может привести к электрическим травмам. Другой причиной, по которой нежелательно использование воды, является то, что на некоторые элементы ЭВМ недопустимо попадание влаги. Поэтому для тушения пожаров в рассматриваемом помещении можно использовать либо порошковые составы, либо установки углекислотного тушения. Но поскольку последние предназначены только для тушения небольших очагов возгорания, то область их применения ограничена. Поэтому для тушения пожаров в данном случае необходимо применять порошковые составы, так как они обладают следующими свойствами: диэлектрики, практически не токсичны, не оказывают коррозийного воздействия на металлы, не разрушают диэлектрические лаки.
Под пожарной безопасностью понимается такое состояние объекта, при котором с большой вероятностью предотвращается возможность возникновение пожара, а в случае его возникновения обеспечивается эффективная защита людей от опасных и вредных факторов пожара и спасение материальных ценностей. Пожарная безопасность производственных объектов обеспечивается разработкой и осуществлением систем предотвращение пожаров и систем пожарной защиты. Эта задача решается как на стадии проектирования оборудования, так и в процессе его эксплуатации.
Для профилактики пожарной безопасности необходимо организовать обучение производственного персонала (обязательный инструктаж по правилам пожарной безопасности не реже одного раза в год), издание необходимых инструкций с доведением их до каждого работника учреждения, выпуск и вывеска плакатов с правилами пожарной безопасности и правилами поведения при пожаре. Также необходимо наличие плакатов, информирующих людей о расположении аварийных выходов из здания в случае возникновения пожара, плана эвакуации людей в аварийных ситуациях.
План эвакуации людей в случае пожара должен быть составлен таким образом, чтобы за кратчайшее время люди могли покинуть здание, не создавая пробки во время движения. Путь от дверей каждого помещения до выхода из здания должен быть по возможности минимальным. Для этого необходимо учесть расположение комнат и всех выходов из здания, включая аварийные.
Аппараты пожаротушения подразделяют на стационарные установки и огнетушители (ручные до 10 л и передвижные или стационарные объемом свыше 25 л). В качестве аппарата пожаротушения можно выбрать углекислотные ОУ2 огнетушители, которые применяются для тушения пожаров электроустановок, находящихся под напряжением.
Так же в целях пожарной безопасности в помещении необходимо установить датчик системы охранно-пожарной сигнализации. Датчик системы охранно-пожарной сигнализации предназначен для круглосуточного контроля охраняемого объекта, а в частности для раннего оповещения владельца об обнаружения признаков пожара или задымления.
Экологическая политика - это определенная организацией совокупность намерений и принципов относительно экологических показателей её деятельности, которая создает основу для разработки конкретных целей и задач. Виды экологической политики:
Экологическая политика согласно стандартам определяет цели и задачи экологической деятельности, охват экологизацией организационных структур менеджмента предприятия, обязательства предприятия по охране окружающей среды. Стратегию развития экологической деятельности предприятия определяет его экологическая политика, направленная на обеспечение устойчивого состояния окружающей среды при осуществлении предприятием определенной хозяйственной деятельности. Реализация экологической политики предприятия осуществляется с помощью специальной организационной структуры управления экологической деятельностью - экологического менеджмента предприятия. В дополнение к основным видам экологической деятельности всех типов экосистем - природопользованию и природоохранной деятельности на уровне предприятия. Российские документы по национальной стандартизации (ГОСТ Р ИСО 14050-99) рекомендуют следующее определение экологической политики - это заявление предприятия о своих намерениях и принципах, связанных с общей эффективностью предприятия, которое служит основанием для деятельности и установления целевых и плановых экологических показателей.В качестве модели системы управления охраной окружающей среды рассматривают разомкнутый цикл мероприятий, последовательность выполнения которых характеризует так называемый принцип непрерывного улучшения. Эту последовательность представляют следующим образом: экологическая политика, планирование, внедрение и функционирование, проведение проверок и корректирующих действий, анализ со стороны руководства, постоянное улучшение. Этот цикл конкретизирован рекомендациями стандартов серии ИСО 14000.
Российским предпринимателям известен данный принцип создания систем управления качеством продукции на основе стандартов серии ИСО 9000. Специалисты отмечают, что в области обеспечения конкурентоспособности и качества продукции такие системы в условиях российской экономики неработоспособны по многим причинам. Безусловно, опыт создания подобных систем, доказывающих эффективность решения поставленных задач, следует использовать в российской практике хозяйственной деятельности предприятий.
Центральным документом стандарта считается ISO 14001 «Спецификации и руководство по использованию систем экологического менеджмента», который устанавливает требования к системе экологического менеджмента, которые позволяют любому предприятию сформулировать экологическую политику и цели в соответствии с требованиями природоохранительного законодательства своей страны.
Никаких вредных выбросов и загрязнения окружающей среды при разработке, внедрении и эксплуатации программного продукта не образуется.
Поэтому защита окружающей среды сводится к соблюдению следующих элементарных правил:
- поддержание санитарно-гигиенического состояния рабочего места, т. е. уборка мусора в специально отведенные для этого урны.
- категорически запрещается утилизировать дистрибутивы с инсталляционным пакетом ненадлежащими для данного действия методами;
- необходимо соблюдать чистоту и порядок в помещении.
Рассчитаем необходимый воздухообмен в помещении, где будет использоваться модуль.
Все используемые мероприятия по оздоровлению воздушной среды можно разделить на две группы: технические и санитарно-гигиенические.
Главное техническое средство оздоровления воздушной среды - вентиляция. Вентиляцией называется комплекс взаимосвязанных устройств и процессов для создания требуемого воздухообмена в производственных помещениях. Основное назначение вентиляции - удаление из рабочей зоны загрязненного или перегретого воздуха и подача чистого воздуха, в результате чего в рабочей зоне создаются необходимые благоприятные условия воздушной среды. Одна из главных задач, возникающая при устройстве вентиляции, - определение воздухообмена, т.е. количество вентиляционного воздуха, необходимого для обеспечения оптимального санитарно-гигиенического уровня воздушной среды помещений. В зависимости от способа перемещения воздуха вентиляция делится на естественную и искусственную.
Применение вентиляции должно быть обосновано расчетами, при которых учитываются температура, влажность воздуха, выделение вредных веществ, избыточное тепловыделение. Если в помещении нет вредных выделений, то вентиляция должна обеспечивать воздухообмен не менее 30 м/ч на каждого работающего (для помещений с объемом до 20 м на одного работающего). При выделении вредных веществ в воздух рабочей зоны необходимый воздухообмен определяют, исходя из условий их разбавления до ПДК, а при наличии тепловых избытков - из условий поддержания допустимой температуры в рабочей зоне .
Организованная естественная вентиляция, или аэрация, обеспечивает воздухообмен в заранее рассчитанных объемах и регулируемой в соответствии с метеорологическими условиями. Аэрация применяется для вентиляции производственных помещений большого объема. Естественный воздухообмен осуществляется через окна, световые фонари с использованием теплового и ветрового напоров.
Количество приточного воздуха потребного для эффективной работы вытяжной вентиляцией, при удалении избытков тепла, определяется по формуле:
(6.7)
где Qusб - избыточное количество теплоты, кДж/ч;
tуд - температура воздуха, удаляемого из помещения принимается равной температуре воздуха в рабочей зоне, ºС;
tпр - температура приточного воздуха, ºС;
Св - теплоемкость воздуха, кДж/(кг· ºС); Св=1 кДж/(кг· ºС);
ρв - плотность воздуха поступающего в помещение, кг/м3.
Вычисляем плотность воздуха кг/м3 поступающего в помещение:
(6.8)
tпр= 22,9 согласно СНиП 41-01-2003.
Температура воздуха, удаляемого из помещения определяется по выражению:
(6.9)
где tрз температура воздуха в рабочей зоне; H высота помещения, м;
α градиент повышения температуры воздуха в помещении по высоте, α=0,5 ºС/м;
2 высота рабочей зоны, м.
Подставляя данные в формулу (6.3) получим:
Избыточное количество теплоты, подлежащее удалению из производственного помещения, определяется по тепловому балансу.
(6.10)
где ∑Qпр теплота, поступающее в помещение от различных источников тепла, кДж/ч;
∑Qрасх теплота, расходуемая стенами здания, а так же уходящая через двери и окна, кДж/ч.
Поскольку перепад температуры воздуха внутри и снаружи зданий в теплый период года незначительный (3…5 ºС) то при расчете воздухообмена по избытку тепловыделений потери теплоты через конструкции зданий можно не учитывать, то есть
В остальных случаях тепловые потери можно определить используя формулу
(6.11)
где K коэффициент передачи (для кирпичной стены К=3,5 кДж/м3· ºС·ч);
F площадь поверхности ограждения, м2 ;
tвн внутренняя температура помещения, ºС;
tн наружная температура воздуха, ºС.
Учитывая все возможные источники тепловыделений можно записать (для летнего периода года):
(6.12)
Qэд теплота, выделяемая электродвигателями, оборудованием, трансформаторами, кДж/ч;
Расчет тепловыделений вычисляется по формуле:
(6.13)
где 3528 тепловой эквивалент кДж/(кВт·ч);
Nуст общая установочная мощность электрического оборудования, кВт;
β = (0,25÷0,35) коэффициент тепловых потер.
Подставляя данные получим:
Qосв тепловыделения от источников искусственного освещения, кДж/ч;
Исходная формула расчета:
(6.14)
где 3528 тепловой эквивалент кДж/(кВт·ч);
Nном - номинальная мощность осветительной установки, кВт;
φ коэффициент тепловых потерь (для люминесцентных ламп φ=0,6).
Qс.рад - тепловыделения от солнечной радиации, кДж/ч;
Исходная формула расчета:
(6.15)
где F площадь поверхности остекления, м2;
K коэффициент, зависящий от характеристики остекления, К=1,15
q = 400 кДж/(м2·ч).
Qраб тепловыделения от людей, кДж/ч, рассчитывается по формуле:
(6.16)
где n число работающих
qn удельная теплота, выделяемая одним человеком кДж/ч;
Подставив полученные данные в формулу (6.6) получим:
Подставив найденные значения в формулу (6.1 ), найдем необходимый воздухообмен
По расчету воздухообмена получил что в летнее время года в помещении необходим кондиционер.
В данном разделе дипломного проекта рассмотрены вопросы по безопасности и экологичности к рабочему месту оператора ЭВМ и схожим должностям. Был произведен расчет освещенности рабочего места и выбор системы оптимального освещения помещения, а также определен воздухообмен в помещении, который показал, что он находится в допустимых пределах.
Данный проект абсолютно безопасен как для пользователей программного модуля, так и для окружающей среды, если реализовывать необходимые мероприятия и соблюдать вышеизложенные рекомендации.
В результате дипломного проектирования был разработан программный продукт текстовый редактор для русско-язычного интерпретатора языка программирования, позволяющий работать с текстом и файлами, в редакторе, на языке программирования, основанным на русском языке.
Данный программный продукт был создан в соответствии с требованиями технического задания и на основании результатов тестирования полностью отвечает стандартам качества. Стоимость разработки составила 130 240,89 руб., а срок окупаемости примерно 10 месяцев.
Проведенные тесты показали работоспособность программного продукта и возможность дальнейшего его использования в общеобразовательных учреждениях. Проект абсолютно безопасен как для пользователей, так и для окружающей среды.
ЛИСТИНГ ТЕКСТОВОГО РЕДАКТОРА ДЛЯ РУССКО-ЯЗЫЧНОГО ИНТЕРПРЕТАТОРА ЯЗЫКА ПРОГРАММИРОВАНИЯ
ДП-230105-608647-2012-ЛП
Чебоксары, 2012
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <inifiles.hpp>
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SynEdit"
#pragma link "SynEditHighlighter"
#pragma link "SynHighlighterPas"
#pragma link "SynEditPrint"
#pragma link "SynEditMiscClasses"
#pragma link "SynEditSearch"
#pragma resource "*.dfm"
TForm1 *Form1;
bool TForm1::isIniFile()
{
return (FileExists(ExtractFileDir(Application->ExeName) + "\\settings.ini"));
}
//---------------------------------------------------------------------------
void TForm1::createFile()
{
MemoNewIni->Lines->SaveToFile("settings.ini");
}
TColor TForm1::getColor(int nr)
{
TColor color;
switch(nr)
{
case 0 : return clNone;
case 1 : return clBlack;
case 2 : return clMaroon;
case 3 : return clGreen;
case 4 : return clOlive;
case 5 : return clNavy;
case 6 : return clPurple;
case 7 : return clTeal;
case 8 : return clGray;
case 9 : return clSilver;
case 10: return clRed;
case 11: return clLime;
case 12: return clYellow;
case 13: return clBlue;
case 14: return clFuchsia;
case 15: return clAqua;
case 16: return clWhite;
case 17: return clMoneyGreen;
case 18: return clSkyBlue;
case 19: return clCream;
case 20: return clMedGray;
default: return clNone;
};
}
//---------------------------------------------------------------------------
int TForm1::getNumber(TColor col)
{
if(col == clNone) return 0;
if(col == clBlack) return 1;
if(col == clMaroon) return 2;
if(col == clGreen) return 3;
if(col == clOlive) return 4;
if(col == clNavy) return 5;
if(col == clPurple) return 6;
if(col == clTeal) return 7;
if(col == clGray) return 8;
if(col == clSilver) return 9;
if(col == clRed) return 10;
if(col == clLime) return 11;
if(col == clYellow) return 12;
if(col == clBlue) return 13;
if(col == clFuchsia) return 14;
if(col == clAqua) return 15;
if(col == clWhite) return 16;
if(col == clMoneyGreen) return 17;
if(col == clSkyBlue) return 18;
if(col == clCream) return 19;
if(col == clMedGray) return 20;
return 0;
}
//---------------------------------------------------------------------------
void TForm1::readFile()
{
int vInt;
bool vBool;
AnsiString vString;
TIniFile *ini = new TIniFile(ExtractFileDir(Application->ExeName) + "\\settings.ini");
vString = ini->ReadString("Application", "Title", "Текстовый редактор РУСИЧ-Редактор");
title = vString;
vString = ini->ReadString("Application", "Version", "версия 1.1");
title = title + " " + vString;
vBool = ini->ReadBool("Display", "Errors", false);
PanelBlad->Visible = vBool;
ShowErrors1->Checked = vBool;
vBool = ini->ReadBool("Display", "Number", true);
SE->Gutter->Visible = vBool;
ShowLineNumers1->Checked = vBool;
vInt = ini->ReadInteger("Display","CommBack",0);
SynPasSyn->CommentAttri->Background = getColor(vInt);
vInt = ini->ReadInteger("Display","CommFore",5);
SynPasSyn->CommentAttri->Foreground = getColor(vInt);
vBool = ini->ReadBool("Display","CommBold",false);
if(vBool) SynPasSyn->CommentAttri->Style << fsBold;
else SynPasSyn->CommentAttri->Style >> fsBold;
vBool = ini->ReadBool("Display","CommItal",true);
if(vBool) SynPasSyn->CommentAttri->Style << fsItalic;
else SynPasSyn->CommentAttri->Style >> fsItalic;
vBool = ini->ReadBool("Display","CommUnder",false);
if(vBool) SynPasSyn->CommentAttri->Style << fsUnderline;
else SynPasSyn->CommentAttri->Style >> fsUnderline;
vInt = ini->ReadInteger("Display","FloatBack",0);
SynPasSyn->FloatAttri->Background = getColor(vInt);
vInt = ini->ReadInteger("Display","FloatFore",3);
SynPasSyn->FloatAttri->Foreground = getColor(vInt);
vBool = ini->ReadBool("Display","FloatBold",false);
if(vBool) SynPasSyn->FloatAttri->Style << fsBold;
else SynPasSyn->FloatAttri->Style >> fsBold;
vBool = ini->ReadBool("Display","FloatItal",false);
if(vBool) SynPasSyn->FloatAttri->Style << fsItalic;
else SynPasSyn->FloatAttri->Style >> fsItalic;
vBool = ini->ReadBool("Display","FloatUnder",false);
if(vBool) SynPasSyn->FloatAttri->Style << fsUnderline;
else SynPasSyn->FloatAttri->Style >> fsUnderline;
vInt = ini->ReadInteger("Display","NumbBack",0);
SynPasSyn->NumberAttri->Background = getColor(vInt);
vInt = ini->ReadInteger("Display","NumbFore",3);
SynPasSyn->NumberAttri->Foreground = getColor(vInt);
vBool = ini->ReadBool("Display","NumbBold",false);
if(vBool) SynPasSyn->NumberAttri->Style << fsBold;
else SynPasSyn->NumberAttri->Style >> fsBold;
vBool = ini->ReadBool("Display","NumbItal",false);
if(vBool) SynPasSyn->NumberAttri->Style << fsItalic;
else SynPasSyn->NumberAttri->Style >> fsItalic;
vBool = ini->ReadBool("Display","NumbUnder",false);
if(vBool) SynPasSyn->NumberAttri->Style << fsUnderline;
else SynPasSyn->NumberAttri->Style >> fsUnderline;
vInt = ini->ReadInteger("Display","SpaceBack",0);
SynPasSyn->SpaceAttri->Background = getColor(vInt);
vInt = ini->ReadInteger("Display","SpaceFore",0);
SynPasSyn->SpaceAttri->Foreground = getColor(vInt);
vBool = ini->ReadBool("Display","SpaceBold",false);
if(vBool) SynPasSyn->SpaceAttri->Style << fsBold;
else SynPasSyn->SpaceAttri->Style >> fsBold;
vBool = ini->ReadBool("Display","SpaceItal",false);
if(vBool) SynPasSyn->SpaceAttri->Style << fsItalic;
else SynPasSyn->SpaceAttri->Style >> fsItalic;
vBool = ini->ReadBool("Display","SpaceUnder",false);
if(vBool) SynPasSyn->SpaceAttri->Style << fsUnderline;
else SynPasSyn->SpaceAttri->Style >> fsUnderline;
vInt = ini->ReadInteger("Display","StringBack",0);
SynPasSyn->StringAttri->Background = getColor(vInt);
vInt = ini->ReadInteger("Display","StringFore",10);
SynPasSyn->StringAttri->Foreground = getColor(vInt);
vBool = ini->ReadBool("Display","StringBold",false);
if(vBool) SynPasSyn->StringAttri->Style << fsBold;
else SynPasSyn->StringAttri->Style >> fsBold;
vBool = ini->ReadBool("Display","StringItal",false);
if(vBool) SynPasSyn->StringAttri->Style << fsItalic;
else SynPasSyn->StringAttri->Style >> fsItalic;
vBool = ini->ReadBool("Display","StringUnder",false);
if(vBool) SynPasSyn->StringAttri->Style << fsUnderline;
else SynPasSyn->StringAttri->Style >> fsUnderline;
vInt = ini->ReadInteger("Display","SymbolBack",0);
SynPasSyn->SymbolAttri->Background = getColor(vInt);
vInt = ini->ReadInteger("Display","SymbolFore",0);
SynPasSyn->SymbolAttri->Foreground = getColor(vInt);
vBool = ini->ReadBool("Display","SymbolBold",false);
if(vBool) SynPasSyn->SymbolAttri->Style << fsBold;
else SynPasSyn->SymbolAttri->Style >> fsBold;
vBool = ini->ReadBool("Display","SymbolItal",false);
if(vBool) SynPasSyn->SymbolAttri->Style << fsItalic;
else SynPasSyn->SymbolAttri->Style >> fsItalic;
vBool = ini->ReadBool("Display","SymbolUnder",false);
if(vBool) SynPasSyn->SymbolAttri->Style << fsUnderline;
else SynPasSyn->SymbolAttri->Style >> fsUnderline;
delete ini;
}
//---------------------------------------------------------------------------
void TForm1::writeFile()
{
TIniFile *ini = new TIniFile(ExtractFileDir(Application->ExeName) + "\\settings.ini");
ini->WriteString("Application","Title","Текстовый редактор РУСИЧ-Редактор");
ini->WriteString("Application","Version","версия 1.1");
ini->WriteBool("Display","Errors",PanelBlad->Visible);
ini->WriteBool("Display","Number",SE->Gutter->Visible);
ini->WriteInteger("Display","CommBack",getNumber(SynPasSyn->CommentAttri->Background));
ini->WriteInteger("Display","CommFore",getNumber(SynPasSyn->CommentAttri->Foreground));
ini->WriteBool("Display","CommBold",SynPasSyn->CommentAttri->Style.Contains(fsBold));
ini->WriteBool("Display","CommItal",SynPasSyn->CommentAttri->Style.Contains(fsItalic));
ini->WriteBool("Display","CommUnder",SynPasSyn->CommentAttri->Style.Contains(fsUnderline));
ini->WriteInteger("Display","FloatBack",getNumber(SynPasSyn->FloatAttri->Background));
ini->WriteInteger("Display","FloatFore",getNumber(SynPasSyn->FloatAttri->Foreground));
ini->WriteBool("Display","FloatBold",SynPasSyn->FloatAttri->Style.Contains(fsBold));
ini->WriteBool("Display","FloatItal",SynPasSyn->FloatAttri->Style.Contains(fsItalic));
ini->WriteBool("Display","FloatUnder",SynPasSyn->FloatAttri->Style.Contains(fsUnderline));
ini->WriteInteger("Display","NumbBack",getNumber(SynPasSyn->NumberAttri->Background));
ini->WriteInteger("Display","NumbFore",getNumber(SynPasSyn->NumberAttri->Foreground));
ini->WriteBool("Display","NumbBold",SynPasSyn->NumberAttri->Style.Contains(fsBold));
ini->WriteBool("Display","NumbItal",SynPasSyn->NumberAttri->Style.Contains(fsItalic));
ini->WriteBool("Display","NumbUnder",SynPasSyn->NumberAttri->Style.Contains(fsUnderline));
ini->WriteInteger("Display","SpaceBack",getNumber(SynPasSyn->SpaceAttri->Background));
ini->WriteInteger("Display","SpaceFore",getNumber(SynPasSyn->SpaceAttri->Foreground));
ini->WriteBool("Display","SpaceBold",SynPasSyn->SpaceAttri->Style.Contains(fsBold));
ini->WriteBool("Display","SpaceItal",SynPasSyn->SpaceAttri->Style.Contains(fsItalic));
ini->WriteBool("Display","SpaceUnder",SynPasSyn->SpaceAttri->Style.Contains(fsUnderline));
ini->WriteInteger("Display","StringBack",getNumber(SynPasSyn->StringAttri->Background));
ini->WriteInteger("Display","StringFore",getNumber(SynPasSyn->StringAttri->Foreground));
ini->WriteBool("Display","StringBold",SynPasSyn->StringAttri->Style.Contains(fsBold));
ini->WriteBool("Display","StringItal",SynPasSyn->StringAttri->Style.Contains(fsItalic));
ini->WriteBool("Display","StringUnder",SynPasSyn->StringAttri->Style.Contains(fsUnderline));
ini->WriteInteger("Display","SymbolBack",getNumber(SynPasSyn->SymbolAttri->Background));
ini->WriteInteger("Display","SymbolFore",getNumber(SynPasSyn->SymbolAttri->Foreground));
ini->WriteBool("Display","SymbolBold",SynPasSyn->SymbolAttri->Style.Contains(fsBold));
ini->WriteBool("Display","SymbolItal",SynPasSyn->SymbolAttri->Style.Contains(fsItalic));
ini->WriteBool("Display","SymbolUnder",SynPasSyn->SymbolAttri->Style.Contains(fsUnderline));
delete ini;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Form1->Left = (Screen->Width / 2) - (Form1->Width / 2);
Form1->Top = (Screen->Height / 2) - (Form1->Height / 2);
title = "Текстовый редактор РУСИЧ-Редактор версия 1.1";
if(isIniFile())
readFile();
else
createFile();
Caption = title;
tb = NULL;
comp = NULL;
}
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete tb;
delete comp;
}
void __fastcall TForm1::FormResize(TObject *Sender)
{
SE->Width = Width - 8;
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
writeFile();
}
void __fastcall TForm1::SButtonBladClick(TObject *Sender)
{
PanelBlad->Visible = false;
ShowErrors1->Checked=false;
}
void __fastcall TForm1::DisplayOptions1Click(TObject *Sender)
{
Form3->ShowModal();
}
void __fastcall TForm1::Close2Click(TObject *Sender)
{
Close();
}
void __fastcall TForm1::ShowLineNumers1Click(TObject *Sender)
{
SE->Gutter->Visible = !SE->Gutter->Visible;
ShowLineNumers1->Checked = !ShowLineNumers1->Checked;
}
void __fastcall TForm1::ShowErrors1Click(TObject *Sender)
{
if (PanelBlad->Visible==true)
{
ShowErrors1->Checked=false;
PanelBlad->Visible=false;
}
else
{
ShowErrors1->Checked=true;
PanelBlad->Visible=true;
}
}
void __fastcall TForm1::TBOpenClick(TObject *Sender)
{
if(SE->Modified)
{
int wyn = Application -> MessageBox("Сохранить изменения?\n", "Есть несохраненные данные",MB_YESNOCANCEL|MB_ICONQUESTION);
if(wyn == 6)
{
TBSave->Click();
sciezka = "";
}
else if(wyn == 2)
return;
// SE->Lines->Clear();
if(OD->Execute())
{
sciezka = OD->FileName;
if (FileExists(sciezka))
SE->Lines->LoadFromFile(sciezka);
}
}
else
{
if(OD->Execute())
{
sciezka = OD->FileName;
if (FileExists(sciezka))
SE->Lines->LoadFromFile(sciezka);
}
}
}
void __fastcall TForm1::TBSaveClick(TObject *Sender)
{
if (FileExists(sciezka))
{
SE->Lines->SaveToFile(sciezka);
MessageDlg("Файл "+AnsiString("\"")+ExtractFileName(sciezka)+AnsiString("\"")+" успешно сохранен!",mtInformation,TMsgDlgButtons()<<mbOK,0);
}
else
SaveAs1->Click();
}
void __fastcall TForm1::SaveAs1Click(TObject *Sender)
{
if(SD->Execute())
{
AnsiString sciga = SD->FileName;
sciezka = sciga;
SE->Lines->SaveToFile(sciga);
MessageDlg("Файл "+AnsiString("\"")+ExtractFileName(sciga)+AnsiString("\"")+" успешно сохранен!",mtInformation,TMsgDlgButtons()<<mbOK,0);
}
}
void __fastcall TForm1::Close1Click(TObject *Sender)
{
SynEditPrint->SynEdit = SE;
SynEditPrint->Print();
}
void __fastcall TForm1::TBUndoClick(TObject *Sender)
{
if(SE->CanUndo)
SE->Undo();
}
void __fastcall TForm1::TBRedoClick(TObject *Sender)
{
if(SE->CanRedo)
SE->Redo();
}
void __fastcall TForm1::TBCutClick(TObject *Sender)
{
SE->CutToClipboard();
}
void __fastcall TForm1::TBCopyClick(TObject *Sender)
{
SE->CopyToClipboard();
}
void __fastcall TForm1::TBPasteClick(TObject *Sender)
{
SE->PasteFromClipboard();
}
void __fastcall TForm1::TBDeleteClick(TObject *Sender)
{
SE->ClearSelection();
}
void __fastcall TForm1::SelectAll1Click(TObject *Sender)
{
SE->SelectAll();
}
void __fastcall TForm1::TBNewClick(TObject *Sender)
{
if(SE->Modified)
{
int wyn = Application -> MessageBox("Сохранить изменения?\n", "Есть несохраненные данные",MB_YESNOCANCEL|MB_ICONQUESTION);
if(wyn == 6)
{
TBSave->Click();
sciezka = "";
}
else if(wyn == 2)
return;
SE->Lines->Clear();
}
else
{
sciezka = "";
SE->Lines->Clear();
}
}
void __fastcall TForm1::TBCompileClick(TObject *Sender)
{
delete tb;
tb = new TabProg();
float Start, Stop;
Start = GetTickCount();
for(int i = 0; i < SE->Lines->Count; i++)
{
tb->addLine(SE->Lines->Strings[i]);
}
LBBlad->Clear();
delete comp;
comp = new Compiler(tb->getLine(0), LBBlad);
bool tt = comp->check();
if(!tt)
{
LBBlad->Items->Add("Есть ошибки.");
compile = false;
}
else
{
LBBlad->Items->Add("Нет ошибок.");
compile = true;
}
Stop = GetTickCount();
Start = (Stop - Start) / 1000;
AnsiString asTmp;// = "Время выполнения: ";
asTmp = Start;
asTmp = asTmp.SubString(0, 6);
asTmp = "Время выполнения: " + asTmp;
asTmp = asTmp + " с.";
LBBlad->Items->Add(asTmp);
PanelBlad->Visible = true;
}
void __fastcall TForm1::TBRunClick(TObject *Sender)
{
TBCompile->Click();
if(!compile) return;
Form2->Show();
term=false;
Form2->start();
}
void __fastcall TForm1::TBTerminateClick(TObject *Sender)
{
term=true;
}
void __fastcall TForm1::LBBladDblClick(TObject *Sender)
{
AnsiString as = LBBlad->Items->Strings[0];
NewString ns(as);
if(ns.indexOf("[Строка: ") != -1)
{
ns = ns.substring(ns.indexOf("[Строка: ") + 7, ns.indexOf("]") - 1);
int linia = StrToInt(ns.toString());
SE->CaretY = linia;
SE->SetFocus();
}
}
void __fastcall TForm1::About1Click(TObject *Sender)
{
Form4->ShowModal();
}
void __fastcall TForm1::Help2Click(TObject *Sender)
{
Application->HelpJump("ID_MainMenu");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Terminate1Click(TObject *Sender)
{
term=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N13Click(TObject *Sender)
{
Form5->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TBCommandClick(TObject *Sender)
{
Application->HelpJump("ID_CommandList");
}
char* str_replace(char* source,char* from,char* to)
{
int size=strlen(source)+strlen(from)+strlen(to);
char* str=new char[size];
char left[10000];
char right[10000];
int n=0;
memset(str,0,size);
while(str=strstr(source+n,from))
{
lstrcpyn(left,source,str-source+1);
lstrcpy(right,str+lstrlen(from));
lstrcpy(source,left);
lstrcat(source,to);
lstrcat(source,right);
n=(DWORD)(str)-(DWORD)(source)+lstrlen(to);
}
return source;
}
void __fastcall TForm1::pascal1Click(TObject *Sender)
{
PasExport->Clear();
PasExport->Text=SE->Text;
PasExport->Lines->Add("");
PasExport->Text=AnsiLowerCase(PasExport->Text);
PasExport->Text=str_replace(PasExport->Lines->GetText(),"программа", "program");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"начало", "begin");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"конец", "end");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"переменные", "var");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"константы", "const");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"тип", "type");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"целое", "integer");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"дробное", "real");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"булева", "boolean");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"строка", "string");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"символ", "char");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"истина", "true");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ложь", "false");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"если", "if");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"тогда", "then");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"иначе", "else");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"цикл", "for");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"до", "to");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"делать", "do");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"не", "not");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"и", "and");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"или", "or");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"выводстр", "writeln");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"вывод", "write");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"вводстр", "readln");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ввод", "read");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"а", "a");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"б", "b");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"в", "v");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"г", "g");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"д", "d");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"е", "e");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ж", "zh");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"з", "z");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"и", "i");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"й", "j");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"к", "k");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"л", "l");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"м", "m");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"н", "n");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"о", "o");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"п", "p");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"р", "r");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"с", "s");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"т", "t");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"у", "u");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ф", "f");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"х", "h");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ц", "c");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ч", "ch");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ш", "sh");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"щ", "shh");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ъ", "tz");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ы", "bl");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ь", "mz");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"э", "e");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"ю", "yu");
PasExport->Text=str_replace(PasExport->Lines->GetText(),"я", "ya");
if (ExportDialog->Execute())
{
AnsiString expasname=ExportDialog->FileName;
PasExport->Lines->SaveToFile(expasname);
MessageDlg("Файл "+AnsiString("\"")+ExtractFileName(expasname)+AnsiString("\"")+" успешно сохранен!",mtInformation,TMsgDlgButtons()<<mbOK,0);
}
}
void __fastcall TForm1::N19Click(TObject *Sender)
{
Form6->Caption="Поиск";
Form6->Label2->Visible=false;
Form6->ComboBox2->Visible=false;
Form6->Button1->Caption="Найти";
Form6->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N20Click(TObject *Sender)
{
Form6->Caption="Поиск и замена";
Form6->Label2->Visible=true;
Form6->ComboBox2->Visible=true;
Form6->Button1->Caption="Заменить";
Form6->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SEReplaceText(TObject *Sender,
const AnsiString ASearch, const AnsiString AReplace, int Line,
int Column, TSynReplaceAction &Action)
{
switch (MessageDlg("Заменить текст '"+ASearch+"' текстом '"+AReplace+"'?",mtInformation,TMsgDlgButtons() <<mbYes <<mbNo <<mbAll <<mbCancel,0))
{
case mrYes: Action = raReplace;
break;
case mrNo: Action = raSkip;
break;
case mrAll: Action = raReplaceAll;
break;
case mrCancel: Action = raCancel;
};
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N21Click(TObject *Sender)
{
Form6->Button1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->HelpFile = "Русич.hlp";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if(SE->Modified)
{
int wyn = Application -> MessageBox("Сохранить изменения?\n", "Есть несохраненные данные",MB_YESNOCANCEL|MB_ICONQUESTION);
if(wyn == 6)
{
TBSave->Click();
sciezka = "";
}
else if(wyn == 2)
CanClose=false;
}
else
CanClose=true;
}
//---------------------------------------------------------------------------
Unit3.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SynEdit"
#pragma link "SynEditHighlighter"
#pragma link "SynHighlighterPas"
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
Form3->Left = (Screen->Width / 2) - (Form3->Width / 2);
Form3->Top = (Screen->Height / 2) - (Form3->Height / 2);
}
void __fastcall TForm3::CBForeDrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
switch (Index)
{
case 0 : CBFore->Canvas->Font->Color = clBlack; break;
case 1 : CBFore->Canvas->Font->Color = clBlack; break;
case 2 : CBFore->Canvas->Font->Color = clMaroon; break;
case 3 : CBFore->Canvas->Font->Color = clGreen; break;
case 4 : CBFore->Canvas->Font->Color = clOlive; break;
case 5 : CBFore->Canvas->Font->Color = clNavy; break;
case 6 : CBFore->Canvas->Font->Color = clPurple; break;
case 7 : CBFore->Canvas->Font->Color = clTeal; break;
case 8 : CBFore->Canvas->Font->Color = clGray; break;
case 9 : CBFore->Canvas->Font->Color = clSilver; break;
case 10: CBFore->Canvas->Font->Color = clRed; break;
case 11: CBFore->Canvas->Font->Color = clLime; break;
case 12: CBFore->Canvas->Font->Color = clYellow; break;
case 13: CBFore->Canvas->Font->Color = clBlue; break;
case 14: CBFore->Canvas->Font->Color = clFuchsia; break;
case 15: CBFore->Canvas->Font->Color = clAqua; break;
case 16: CBFore->Canvas->Font->Color = clWhite; break;
case 17: CBFore->Canvas->Font->Color = clMoneyGreen; break;
case 18: CBFore->Canvas->Font->Color = clSkyBlue; break;
case 19: CBFore->Canvas->Font->Color = clCream; break;
case 20: CBFore->Canvas->Font->Color = clMedGray; break;
}
CBFore->Canvas->FillRect(Rect);
CBFore->Canvas->TextOut(Rect.Left, Rect.Top,
CBFore->Items->Strings[Index]);
}
void __fastcall TForm3::CBBackDrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
switch (Index)
{
case 0 : CBBack->Canvas->Font->Color = clBlack; break;
case 1 : CBBack->Canvas->Font->Color = clBlack; break;
case 2 : CBBack->Canvas->Font->Color = clMaroon; break;
case 3 : CBBack->Canvas->Font->Color = clGreen; break;
case 4 : CBBack->Canvas->Font->Color = clOlive; break;
case 5 : CBBack->Canvas->Font->Color = clNavy; break;
case 6 : CBBack->Canvas->Font->Color = clPurple; break;
case 7 : CBBack->Canvas->Font->Color = clTeal; break;
case 8 : CBBack->Canvas->Font->Color = clGray; break;
case 9 : CBBack->Canvas->Font->Color = clSilver; break;
case 10: CBBack->Canvas->Font->Color = clRed; break;
case 11: CBBack->Canvas->Font->Color = clLime; break;
case 12: CBBack->Canvas->Font->Color = clYellow; break;
case 13: CBBack->Canvas->Font->Color = clBlue; break;
case 14: CBBack->Canvas->Font->Color = clFuchsia; break;
case 15: CBBack->Canvas->Font->Color = clAqua; break;
case 16: CBBack->Canvas->Font->Color = clWhite; break;
case 17: CBBack->Canvas->Font->Color = clMoneyGreen; break;
case 18: CBBack->Canvas->Font->Color = clSkyBlue; break;
case 19: CBBack->Canvas->Font->Color = clCream; break;
case 20: CBBack->Canvas->Font->Color = clMedGray; break;
}
CBBack->Canvas->FillRect(Rect);
CBBack->Canvas->TextOut(Rect.Left, Rect.Top,
CBBack->Items->Strings[Index]);
}
//---------------------------------------------------------------------------
void __fastcall TForm3::LBElemClick(TObject *Sender)
{
switch(LBElem->ItemIndex)
{
case 0 :
CBFore->ItemIndex = Form1->getNumber(SynPasSyn1->CommentAttri->Foreground);
CBBack->ItemIndex = Form1->getNumber(SynPasSyn1->CommentAttri->Background);
ChBBold->Checked = SynPasSyn1->CommentAttri->Style.Contains(fsBold);
ChBItal->Checked = SynPasSyn1->CommentAttri->Style.Contains(fsItalic);
ChBUnder->Checked = SynPasSyn1->CommentAttri->Style.Contains(fsUnderline);
break;
case 1 :
CBFore->ItemIndex = Form1->getNumber(SynPasSyn1->FloatAttri->Foreground);
CBBack->ItemIndex = Form1->getNumber(SynPasSyn1->FloatAttri->Background);
ChBBold->Checked = SynPasSyn1->FloatAttri->Style.Contains(fsBold);
ChBItal->Checked = SynPasSyn1->FloatAttri->Style.Contains(fsItalic);
ChBUnder->Checked = SynPasSyn1->FloatAttri->Style.Contains(fsUnderline);
break;
case 2 :
CBFore->ItemIndex = Form1->getNumber(SynPasSyn1->NumberAttri->Foreground);
CBBack->ItemIndex = Form1->getNumber(SynPasSyn1->NumberAttri->Background);
ChBBold->Checked = SynPasSyn1->NumberAttri->Style.Contains(fsBold);
ChBItal->Checked = SynPasSyn1->NumberAttri->Style.Contains(fsItalic);
ChBUnder->Checked = SynPasSyn1->NumberAttri->Style.Contains(fsUnderline);
break;
case 3 :
CBFore->ItemIndex = Form1->getNumber(SynPasSyn1->SpaceAttri->Foreground);
CBBack->ItemIndex = Form1->getNumber(SynPasSyn1->SpaceAttri->Background);
ChBBold->Checked = SynPasSyn1->SpaceAttri->Style.Contains(fsBold);
ChBItal->Checked = SynPasSyn1->SpaceAttri->Style.Contains(fsItalic);
ChBUnder->Checked = SynPasSyn1->SpaceAttri->Style.Contains(fsUnderline);
break;
case 4:
CBFore->ItemIndex = Form1->getNumber(SynPasSyn1->StringAttri->Foreground);
CBBack->ItemIndex = Form1->getNumber(SynPasSyn1->StringAttri->Background);
ChBBold->Checked = SynPasSyn1->StringAttri->Style.Contains(fsBold);
ChBItal->Checked = SynPasSyn1->StringAttri->Style.Contains(fsItalic);
ChBUnder->Checked = SynPasSyn1->StringAttri->Style.Contains(fsUnderline);
break;
case 5:
CBFore->ItemIndex = Form1->getNumber(SynPasSyn1->SymbolAttri->Foreground);
CBBack->ItemIndex = Form1->getNumber(SynPasSyn1->SymbolAttri->Background);
ChBBold->Checked = SynPasSyn1->SymbolAttri->Style.Contains(fsBold);
ChBItal->Checked = SynPasSyn1->SymbolAttri->Style.Contains(fsItalic);
ChBUnder->Checked = SynPasSyn1->SymbolAttri->Style.Contains(fsUnderline);
break;
};
}
void __fastcall TForm3::FormShow(TObject *Sender)
{
CBFore->ItemIndex = 0;
CBBack->ItemIndex = 0;
LBElem->ItemIndex = -1;
ChBBold->Checked = false;
ChBItal->Checked = false;
ChBUnder->Checked = false;
SynPasSyn1->AsmAttri->Foreground = Form1->SynPasSyn->AsmAttri->Foreground;
SynPasSyn1->AsmAttri->Background = Form1->SynPasSyn->AsmAttri->Background;
SynPasSyn1->CommentAttri->Foreground = Form1->SynPasSyn->CommentAttri->Foreground;
SynPasSyn1->CommentAttri->Background = Form1->SynPasSyn->CommentAttri->Background;
if(Form1->SynPasSyn->CommentAttri->Style.Contains(fsBold))
SynPasSyn1->CommentAttri->Style << fsBold;
else
SynPasSyn1->CommentAttri->Style >> fsBold;
if(Form1->SynPasSyn->CommentAttri->Style.Contains(fsItalic))
SynPasSyn1->CommentAttri->Style << fsItalic;
else
SynPasSyn1->CommentAttri->Style >> fsItalic;
if(Form1->SynPasSyn->CommentAttri->Style.Contains(fsUnderline))
SynPasSyn1->CommentAttri->Style << fsUnderline;
else
SynPasSyn1->CommentAttri->Style >> fsUnderline;
SynPasSyn1->FloatAttri->Foreground = Form1->SynPasSyn->FloatAttri->Foreground;
SynPasSyn1->FloatAttri->Background = Form1->SynPasSyn->FloatAttri->Background;
if(Form1->SynPasSyn->FloatAttri->Style.Contains(fsBold))
SynPasSyn1->FloatAttri->Style << fsBold;
else
SynPasSyn1->FloatAttri->Style >> fsBold;
if(Form1->SynPasSyn->FloatAttri->Style.Contains(fsItalic))
SynPasSyn1->FloatAttri->Style << fsItalic;
else
SynPasSyn1->FloatAttri->Style >> fsItalic;
if(Form1->SynPasSyn->FloatAttri->Style.Contains(fsUnderline))
SynPasSyn1->FloatAttri->Style << fsUnderline;
else
SynPasSyn1->FloatAttri->Style >> fsUnderline;
SynPasSyn1->NumberAttri->Foreground = Form1->SynPasSyn->NumberAttri->Foreground;
SynPasSyn1->NumberAttri->Background = Form1->SynPasSyn->NumberAttri->Background;
if(Form1->SynPasSyn->NumberAttri->Style.Contains(fsBold))
SynPasSyn1->NumberAttri->Style << fsBold;
else
SynPasSyn1->NumberAttri->Style >> fsBold;
if(Form1->SynPasSyn->NumberAttri->Style.Contains(fsItalic))
SynPasSyn1->NumberAttri->Style << fsItalic;
else
SynPasSyn1->NumberAttri->Style >> fsItalic;
if(Form1->SynPasSyn->NumberAttri->Style.Contains(fsUnderline))
SynPasSyn1->NumberAttri->Style << fsUnderline;
else
SynPasSyn1->NumberAttri->Style >> fsUnderline;
SynPasSyn1->SpaceAttri->Foreground = Form1->SynPasSyn->SpaceAttri->Foreground;
SynPasSyn1->SpaceAttri->Background = Form1->SynPasSyn->SpaceAttri->Background;
if(Form1->SynPasSyn->SpaceAttri->Style.Contains(fsBold))
SynPasSyn1->SpaceAttri->Style << fsBold;
else
SynPasSyn1->SpaceAttri->Style >> fsBold;
if(Form1->SynPasSyn->SpaceAttri->Style.Contains(fsItalic))
SynPasSyn1->SpaceAttri->Style << fsItalic;
else
SynPasSyn1->SpaceAttri->Style >> fsItalic;
if(Form1->SynPasSyn->SpaceAttri->Style.Contains(fsUnderline))
SynPasSyn1->SpaceAttri->Style << fsUnderline;
else
SynPasSyn1->SpaceAttri->Style >> fsUnderline;
SynPasSyn1->StringAttri->Foreground = Form1->SynPasSyn->StringAttri->Foreground;
SynPasSyn1->StringAttri->Background = Form1->SynPasSyn->StringAttri->Background;
if(Form1->SynPasSyn->StringAttri->Style.Contains(fsBold))
SynPasSyn1->StringAttri->Style << fsBold;
else
SynPasSyn1->StringAttri->Style >> fsBold;
if(Form1->SynPasSyn->StringAttri->Style.Contains(fsItalic))
SynPasSyn1->StringAttri->Style << fsItalic;
else
SynPasSyn1->StringAttri->Style >> fsItalic;
if(Form1->SynPasSyn->StringAttri->Style.Contains(fsUnderline))
SynPasSyn1->StringAttri->Style << fsUnderline;
else
SynPasSyn1->StringAttri->Style >> fsUnderline;
SynPasSyn1->SymbolAttri->Foreground = Form1->SynPasSyn->SymbolAttri->Foreground;
SynPasSyn1->SymbolAttri->Background = Form1->SynPasSyn->SymbolAttri->Background;
if(Form1->SynPasSyn->SymbolAttri->Style.Contains(fsBold))
SynPasSyn1->SymbolAttri->Style << fsBold;
else
SynPasSyn1->SymbolAttri->Style >> fsBold;
if(Form1->SynPasSyn->SymbolAttri->Style.Contains(fsItalic))
SynPasSyn1->SymbolAttri->Style << fsItalic;
else
SynPasSyn1->SymbolAttri->Style >> fsItalic;
if(Form1->SynPasSyn->SymbolAttri->Style.Contains(fsUnderline))
SynPasSyn1->SymbolAttri->Style << fsUnderline;
else
SynPasSyn1->SymbolAttri->Style >> fsUnderline;
}
void __fastcall TForm3::Button2Click(TObject *Sender)
{
Close();
}
void __fastcall TForm3::Button1Click(TObject *Sender)
{
Form1->SynPasSyn->CommentAttri->Foreground = SynPasSyn1->CommentAttri->Foreground;
Form1->SynPasSyn->CommentAttri->Background = SynPasSyn1->CommentAttri->Background;
if(SynPasSyn1->CommentAttri->Style.Contains(fsBold))
Form1->SynPasSyn->CommentAttri->Style << fsBold;
else
Form1->SynPasSyn->CommentAttri->Style >> fsBold;
if(SynPasSyn1->CommentAttri->Style.Contains(fsItalic))
Form1->SynPasSyn->CommentAttri->Style << fsItalic;
else
Form1->SynPasSyn->CommentAttri->Style >> fsItalic;
if(SynPasSyn1->CommentAttri->Style.Contains(fsUnderline))
Form1->SynPasSyn->CommentAttri->Style << fsUnderline;
else
Form1->SynPasSyn->CommentAttri->Style >> fsUnderline;
Form1->SynPasSyn->FloatAttri->Foreground = SynPasSyn1->FloatAttri->Foreground;
Form1->SynPasSyn->FloatAttri->Background = SynPasSyn1->FloatAttri->Background;
if(SynPasSyn1->FloatAttri->Style.Contains(fsBold))
Form1->SynPasSyn->FloatAttri->Style << fsBold;
else
Form1->SynPasSyn->FloatAttri->Style >> fsBold;
if(SynPasSyn1->FloatAttri->Style.Contains(fsItalic))
Form1->SynPasSyn->FloatAttri->Style << fsItalic;
else
Form1->SynPasSyn->FloatAttri->Style >> fsItalic;
if(SynPasSyn1->FloatAttri->Style.Contains(fsUnderline))
Form1->SynPasSyn->FloatAttri->Style << fsUnderline;
else
Form1->SynPasSyn->FloatAttri->Style >> fsUnderline;
Form1->SynPasSyn->NumberAttri->Foreground = SynPasSyn1->NumberAttri->Foreground;
Form1->SynPasSyn->NumberAttri->Background = SynPasSyn1->NumberAttri->Background;
if(SynPasSyn1->NumberAttri->Style.Contains(fsBold))
Form1->SynPasSyn->NumberAttri->Style << fsBold;
else
Form1->SynPasSyn->NumberAttri->Style >> fsBold;
if(SynPasSyn1->NumberAttri->Style.Contains(fsItalic))
Form1->SynPasSyn->NumberAttri->Style << fsItalic;
else
Form1->SynPasSyn->NumberAttri->Style >> fsItalic;
if(SynPasSyn1->NumberAttri->Style.Contains(fsUnderline))
Form1->SynPasSyn->NumberAttri->Style << fsUnderline;
else
Form1->SynPasSyn->NumberAttri->Style >> fsUnderline;
Form1->SynPasSyn->SpaceAttri->Foreground = SynPasSyn1->SpaceAttri->Foreground;
Form1->SynPasSyn->SpaceAttri->Background = SynPasSyn1->SpaceAttri->Background;
if(SynPasSyn1->SpaceAttri->Style.Contains(fsBold))
Form1->SynPasSyn->SpaceAttri->Style << fsBold;
else
Form1->SynPasSyn->SpaceAttri->Style >> fsBold;
if(SynPasSyn1->SpaceAttri->Style.Contains(fsItalic))
Form1->SynPasSyn->SpaceAttri->Style << fsItalic;
else
Form1->SynPasSyn->SpaceAttri->Style >> fsItalic;
if(SynPasSyn1->SpaceAttri->Style.Contains(fsUnderline))
Form1->SynPasSyn->SpaceAttri->Style << fsUnderline;
else
Form1->SynPasSyn->SpaceAttri->Style >> fsUnderline;
Form1->SynPasSyn->StringAttri->Foreground = SynPasSyn1->StringAttri->Foreground;
Form1->SynPasSyn->StringAttri->Background = SynPasSyn1->StringAttri->Background;
if(SynPasSyn1->StringAttri->Style.Contains(fsBold))
Form1->SynPasSyn->StringAttri->Style << fsBold;
else
Form1->SynPasSyn->StringAttri->Style >> fsBold;
if(SynPasSyn1->StringAttri->Style.Contains(fsItalic))
Form1->SynPasSyn->StringAttri->Style << fsItalic;
else
Form1->SynPasSyn->StringAttri->Style >> fsItalic;
if(SynPasSyn1->StringAttri->Style.Contains(fsUnderline))
Form1->SynPasSyn->StringAttri->Style << fsUnderline;
else
Form1->SynPasSyn->StringAttri->Style >> fsUnderline;
Form1->SynPasSyn->SymbolAttri->Foreground = SynPasSyn1->SymbolAttri->Foreground;
Form1->SynPasSyn->SymbolAttri->Background = SynPasSyn1->SymbolAttri->Background;
if(SynPasSyn1->SymbolAttri->Style.Contains(fsBold))
Form1->SynPasSyn->SymbolAttri->Style << fsBold;
else
Form1->SynPasSyn->SymbolAttri->Style >> fsBold;
if(SynPasSyn1->SymbolAttri->Style.Contains(fsItalic))
Form1->SynPasSyn->SymbolAttri->Style << fsItalic;
else
Form1->SynPasSyn->SymbolAttri->Style >> fsItalic;
if(SynPasSyn1->SymbolAttri->Style.Contains(fsUnderline))
Form1->SynPasSyn->SymbolAttri->Style << fsUnderline;
else
Form1->SynPasSyn->SymbolAttri->Style >> fsUnderline;
Form1->SE->Refresh();
Close();
}
void __fastcall TForm3::CBForeSelect(TObject *Sender)
{
if(CBFore->ItemIndex == -1) return;
if(LBElem->ItemIndex == -1) return;
switch(LBElem->ItemIndex)
{
case 0 : SynPasSyn1->CommentAttri->Foreground = Form1->getColor(CBFore->ItemIndex); break;
case 1 : SynPasSyn1->FloatAttri->Foreground = Form1->getColor(CBFore->ItemIndex); break;
case 2 : SynPasSyn1->NumberAttri->Foreground = Form1->getColor(CBFore->ItemIndex); break;
case 3 : SynPasSyn1->SpaceAttri->Foreground = Form1->getColor(CBFore->ItemIndex); break;
case 4: SynPasSyn1->StringAttri->Foreground = Form1->getColor(CBFore->ItemIndex); break;
case 5: SynPasSyn1->SymbolAttri->Foreground = Form1->getColor(CBFore->ItemIndex); break;
}
}
void __fastcall TForm3::CBBackSelect(TObject *Sender)
{
if(CBBack->ItemIndex == -1) return;
if(LBElem->ItemIndex == -1) return;
switch(LBElem->ItemIndex)
{
case 0 : SynPasSyn1->CommentAttri->Background = Form1->getColor(CBBack->ItemIndex); break;
case 1 : SynPasSyn1->FloatAttri->Background = Form1->getColor(CBBack->ItemIndex); break;
case 2 : SynPasSyn1->NumberAttri->Background = Form1->getColor(CBBack->ItemIndex); break;
case 3 : SynPasSyn1->SpaceAttri->Background = Form1->getColor(CBBack->ItemIndex); break;
case 4: SynPasSyn1->StringAttri->Background = Form1->getColor(CBBack->ItemIndex); break;
case 5: SynPasSyn1->SymbolAttri->Background = Form1->getColor(CBBack->ItemIndex); break;
}
}
void __fastcall TForm3::ChBBoldClick(TObject *Sender)
{
if(LBElem->ItemIndex == -1) return;
switch(LBElem->ItemIndex)
{
case 0 : if(ChBBold->Checked)
SynPasSyn1->CommentAttri->Style << fsBold;
else
SynPasSyn1->CommentAttri->Style >> fsBold;
break;
case 1 : if(ChBBold->Checked)
SynPasSyn1->FloatAttri->Style << fsBold;
else
SynPasSyn1->FloatAttri->Style >> fsBold;
break;
case 2 : if(ChBBold->Checked)
SynPasSyn1->NumberAttri->Style << fsBold;
else
SynPasSyn1->NumberAttri->Style >> fsBold;
break;
case 3 : if(ChBBold->Checked)
SynPasSyn1->SpaceAttri->Style << fsBold;
else
SynPasSyn1->SpaceAttri->Style >> fsBold;
break;
case 4: if(ChBBold->Checked)
SynPasSyn1->StringAttri->Style << fsBold;
else
SynPasSyn1->StringAttri->Style >> fsBold;
break;
case 5: if(ChBBold->Checked)
SynPasSyn1->SymbolAttri->Style << fsBold;
else
SynPasSyn1->SymbolAttri->Style >> fsBold;
break;
}
SEOption->Refresh();
}
void __fastcall TForm3::ChBItalClick(TObject *Sender)
{
if(LBElem->ItemIndex == -1) return;
switch(LBElem->ItemIndex)
{
case 0 : if(ChBItal->Checked)
SynPasSyn1->CommentAttri->Style << fsItalic;
else
SynPasSyn1->CommentAttri->Style >> fsItalic;
break;
case 1 : if(ChBItal->Checked)
SynPasSyn1->FloatAttri->Style << fsItalic;
else
SynPasSyn1->FloatAttri->Style >> fsItalic;
break;
case 2 : if(ChBItal->Checked)
SynPasSyn1->NumberAttri->Style << fsItalic;
else
SynPasSyn1->NumberAttri->Style >> fsItalic;
break;
case 3 : if(ChBItal->Checked)
SynPasSyn1->SpaceAttri->Style << fsItalic;
else
SynPasSyn1->SpaceAttri->Style >> fsItalic;
break;
case 4: if(ChBItal->Checked)
SynPasSyn1->StringAttri->Style << fsItalic;
else
SynPasSyn1->StringAttri->Style >> fsItalic;
break;
case 5: if(ChBItal->Checked)
SynPasSyn1->SymbolAttri->Style << fsItalic;
else
SynPasSyn1->SymbolAttri->Style >> fsItalic;
break;
}
SEOption->Refresh();
}
void __fastcall TForm3::ChBUnderClick(TObject *Sender)
{
if(LBElem->ItemIndex == -1) return;
switch(LBElem->ItemIndex)
{
case 0 : if(ChBUnder->Checked)
SynPasSyn1->CommentAttri->Style << fsUnderline;
else
SynPasSyn1->CommentAttri->Style >> fsUnderline;
break;
case 1 : if(ChBUnder->Checked)
SynPasSyn1->FloatAttri->Style << fsUnderline;
else
SynPasSyn1->FloatAttri->Style >> fsUnderline;
break;
case 2 : if(ChBUnder->Checked)
SynPasSyn1->NumberAttri->Style << fsUnderline;
else
SynPasSyn1->NumberAttri->Style >> fsUnderline;
break;
case 3 : if(ChBUnder->Checked)
SynPasSyn1->SpaceAttri->Style << fsUnderline;
else
SynPasSyn1->SpaceAttri->Style >> fsUnderline;
break;
case 4: if(ChBUnder->Checked)
SynPasSyn1->StringAttri->Style << fsUnderline;
else
SynPasSyn1->StringAttri->Style >> fsUnderline;
break;
case 5: if(ChBUnder->Checked)
SynPasSyn1->SymbolAttri->Style << fsUnderline;
else
SynPasSyn1->SymbolAttri->Style >> fsUnderline;
break;
}
SEOption->Refresh();
}
Unit6.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit6.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button2Click(TObject *Sender)
{
Form6->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button1Click(TObject *Sender)
{
Form6->Close();
TSynSearchOptions OptionRep;
if (Form6->Caption=="Поиск")
if (RadioGroup1->ItemIndex==0)
OptionRep = OptionRep;
else
OptionRep = OptionRep <<ssoBackwards;
else
if (RadioGroup1->ItemIndex==0)
OptionRep = OptionRep <<ssoPrompt <<ssoReplace << ssoReplaceAll;
else
OptionRep = OptionRep <<ssoBackwards <<ssoPrompt <<ssoReplace << ssoReplaceAll;
if (Form1->SE->SearchReplace(Form6->ComboBox1->Text,Form6->ComboBox2->Text,OptionRep) == 0)
MessageBox(0,"Искомый текст не найден",0,MB_ICONINFORMATION);
else
Form6->Close();
}
//---------------------------------------------------------------------------
Изм.
Лист
№ докум.
Подпись
Дата
Лист
2
ДП-230105-608647-2012
Разраб.
Александров ДМ
Провер.
Малов А.А.
длд
Реценз.
Н. Контр.
Замкова Т.В.
Утверд.
Богомолов А.В
Разработка текстового редактора для русско-язычного интерпретатора языка программирования
Лит.
Листов
ГОУ ВПО МГОУ ЧПИ(ф)