Реферат: Разработка базы данных

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. АНАЛИТИЧЕСКИЙОБЗОР ЛИТЕРАТУРНЫХ ИСТОЧНИКОВ

1.1 Основные понятиясистем баз данных

1.2 Базаданных

1.3 Архитектурасистемы баз данных

1.4 Модельданных

1.5 Реляционнаямодель

2. ПОСТАНОВКАЗАДАЧИ

3. ТЕОРЕТИЧЕСКИЕОСНОВЫ РЕЛЯЦИОННЫХ БАЗЫ ДАННЫХ

3.1Реляционная алгебра

3.1.1 Общая интерпретация реляционных операций

3.1.2 Замкнутостьреляционной алгебры и операция переименования

3.1.3 Особенноститеоретико-множественных операций реляционной алгебры

3.2Реляционное исчисление

3.2.1 Кортежные переменные и правильно построенные формулы

3.2.2 Целевые списки и выражения реляционного исчисления

3.2.3 Реляционное исчисление доменов

3.3Целостность данных

3.4Проектирование баз данных

4. РАЗРАБОТКАБАЗЫ ДАННЫХ

4.1 Предметнаяобласть базы данных

4.2 Построениеинфологической модели

4.3 Проектированиебазы данных

5. РАЗРАБОТКАПРИЛОЖЕНИЯ-КЛИЕНТА

5.1Обоснование выбора среды программирования

5.2 СредстваDelphi для работы с базами данных

5.3Реализация приложения

5.3.1 Общееописание форм и модулей

5.3.2 Форма MainForm и модуль Main

5.3.3 Модульданных DataModule1 и модуль DBUnit

5.3.4 Форма EditForm и модуль Edit

5.3.5 Форма DeleteForm и модуль Delete

5.3.6 Форма FindForm и модуль Find

5.3.7 Форма FilterForm и модуль Filter

5.3.8 Форма DirSourceForm и модуль DirSource

5.3.9 Форма PathForm и модуль Path

5.3.10 ФормаUserForm и модуль User

5.3.11 ФормаAboutBox и модуль About

5.3.12Модуль Files

6. ЭКОНОМИЧЕСКАЯ ЧАСТЬ

6.1 Предметнаяобласть базы данных и её разработка

6.2 Разработкасетевого графика работ проведения НИР

6.3 Расчетсметы затрат на проведение НИР

7. ОХРАНАТРУДА

7.1 Общиевопросы охраны труда

7.2 Производственнаясанитария

7.3 Техникабезопасности

7.4 Эксплутационныемеры

7.5 Пожарнаябезопасность

7.6 Охранаокружающей среды

8. ГРАЖДАНСКАЯОБОРОНА

ВЫВОД

СПИСОКССЫЛОК

ПРИЛОЖЕНИЯ


ВВЕДЕНИЕ

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

Целью данной дипломной работы является разработка удалённойбазы данных и приложения-клиента для доступа к электронным источникамлитературы, содержащихся на жёстком диске сервера предприятия в виде файлов ипакетов фалов (текстовых документов различных типов, гипертекста HTML, исполняемых файлов и др.).Архитектура клиент-сервер, используемая при реализации поставленной задачи наданный момент является наиболее прогрессивной. Она даёт возможность разделитьзадачу на две подзадачи: разработка собственно удалённой базы данных, физическирасположённой на сервере и управляемой СУБД, и приложения, осуществляющегодоступ к данной базе данных при помощи SQL-запросов и располагающееся на рабочих станцияхпользователей сети. При такой реализации нагрузка также распределяется междусервером и рабочими станциями, что позволяет увеличить скорость работыпрограммы.

Для управления базой данных была выбрана СУБД InterBase 6.0 фирмы Borland. Для разработки клиентской части приложения использоваласьсреда программирования Borland Dalphi 7.0 Eneterprise Edition, предоставляющая удобные средства для быстрого инаглядного создания подобных приложений.

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


1. АНАЛИТИЧЕСКИЙ ОБЗОР ЛИТЕРАТУРНЫХ ИСТОЧНИКОВ

1.1 Основныепонятия систем баз данных

Системабаз данных – это компьютеризированная система хранения записей, т.е.компьютеризированная система, основное назначение которой – хранить информацию,предоставляя пользователям средства её извлечения и модификации [1].

Преимущества системы с базой данных по сравнениютрадиционным методом ведения учёта:

1) компактность;

2) скорость;

3) низкие трудозатраты;

4) актуальность;

5) централизованное управлениеданными;

6) независимость данных.

Система баз данных включает в себя четыре основныхкомпонента: данные, аппаратное обеспечение, программное обеспечение (вчастности систему управления базами данных, или СУБД) и пользователи.

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

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

К аппаратному обеспечению системы относят следующее:

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

2) Аппаратный процессор (или процессоры) вместе сосновной (первичной) памятью, предназначенные для поддержки работы программногообеспечения системы баз данных.

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

Пользователей можно разделить на три большие и отчастиперекрывающиеся группы. Первая группа – прикладные программисты, которыеотвечают за написание прикладных программ, использующих базу данных. Прикладныепрограммисты получают доступ к базе данных посредством выдачи соответствующегозапроса к СУБД. Вторая группа – конечные пользователи, которые работают ссистемой баз данных непосредственно через рабочую станцию или терминалы.Конечный пользователь может получить доступ к базе данных, применяя одно изинтерактивных приложений или же интерфейс, интегрированный в программноеобеспечение самой СУБД. Третья группа – администраторы базы данных (АБД). Ониотвечают за администрирование базы данных и всей системы баз данных всоответствии с требованиями, устанавливаемыми администратором данных.

1.2 База данных

База данных – это некоторый набор перманентных(постоянных) данных, используемых прикладными системами какого-либопредприятия, организации.

База данных представляет собой совокупность связанныхданных конкретной предметной области. [2]

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

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

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

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


1.3 Архитектура системы баз данных

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

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

Архитектура базы данных, кроме элементов самих трёхуровней включает определённые отображения. Отображение “концептуальный-внутренний”устанавливает соответствие между концептуальным представлением и хранимой базойданных, т.е. описывает как концептуальные записи и поля представлены навнутреннем уровне. При изменении структуры хранимой базы данных отображение “концептуальный-внутренний”также изменится, причём таким образом, чтобы концептуальная схема осталасьнеизменной. Отображение “внешний-концептуальный” определяет соответствие междунекоторым внешним представлением и концептуальным представлением.

Пользователи, т.е. конечные пользователи и прикладныепрограммисты, работающие на внешнем уровне, взаимодействует с данными с помощьюподъязыка, который включает по крайней мере два компонента: язык определенияданных (ЯОД) и язык манипулирования данными (ЯМД).

Система управления базой данных (СУБД) представляетсобой программное обеспечение, которое управляет всем доступом к базе данных.

Функции СУБД:

1) определение данных;

2) обработка данных;

3) оптимизация и выполнение;

4) защита и сохранение целостностиданных;

5) восстановление данных и поддержкапараллельности;

6) словарь данных.

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

Сервер – это сама СУБД. Он поддерживает все основныефункции СУБД и предоставляет полную поддержку внешнего, концептуального ивнутреннего уровня.

Клиенты – это различные приложения, которые выполняютсяповерх СУБД: как приложения написанные пользователями, так и встроенныеприложения, предоставляемые поставщиком СУБД или некоторыми стороннимипоставщиками программного обеспечения

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

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

1.4 Модель данных

Модель данных – это абстрактное, самодостаточное,логическое определение объектов, операторов и прочих элементов, в совокупностисоставляющих абстрактную машину, с которой взаимодействует пользователь. [1]Упомянутые объекты позволяют моделировать структуру данных, а операторы –поведение данных.

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

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

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

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

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

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

Система баз данных может быть основана на несколькихразличных подходах. Иерархическая и сетевая модели данных стали применяться всистемах управления базами данных в начале 60-х годов. В начале 70-х годов былапредложена реляционная модель данных. Эти три модели различаются в основном способомпредставления взаимосвязей между объектами. [2]

Иерархическая модель данных строится по принципуиерархии типов объектов, т.е. один тип объектов является главным, а остальные,находящиеся на низших уровнях, подчинёнными. Между главным и подчинённымитипами объекта устанавливается взаимосвязь “один ко многим”. Иными словами, дляданного главного типа объекта существует несколько подчинённых типов объекта.

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

Достоинства иерархической модели данных:

1) простота понимания ииспользования;

2) обеспечение определенного уровнянезависимости данных;

3) простота оценки операционныххарактеристик благодаря заранее заданным взаимосвязям.

Недостатки модели:

1) избыточное хранение данных;

2) из-за строгой иерархическойупорядоченности объектов модели значительно усложняются операции включения иудаления;

3) удаление исходных объектов влечётудаление порождённых;

4) процедурность операцийманипулирования данными;

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

В сетевой модели данных понятия главного и подчинённыхобъектов несколько расширены. Любой объект может быть и главным и подчинённым.Главный объект обозначается термином “владелец набора”, а подчинённый – “членнабора”. Один и тот же объект одновременно может выступать и в роли владельца ив роли члена набора. Это означает, что каждый объект может участвовать в любомслучае взаимосвязей.

В сетевой модели данных объекты объединяются в “сеть”.Каждый тип записи может содержать нуль, один или несколько атрибутов.

Достоинства сетевой модели:

1) возможность построения вручнуюэффективных прикладных систем;

2) возможность экономии памяти засчет разделения подобъектов;

3) простота реализации частовстречающихся в реальном мире взаимосвязей “многие ко многим”.

Недостатки сетевой модели данных:

1) сложность модели;

2) возможная потеря данных приреорганизации базы данных.

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

1) данные представлены посредством строк в таблицах, иэти строки могут быть непосредственно интерпретированы как истинныевысказывания;

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

1.5 Реляционная модель

К числу достоинств реляционного подхода можно отнести:

1) наличиенебольшого набора абстракций, которые позволяют сравнительно простомоделировать большую часть распространенных предметных областей и допускаютточные формальные определения, оставаясь интуитивно понятными;

2) наличиепростого и в то же время мощного математического аппарата, опирающегося главнымобразом на теорию множеств и математическую логику и обеспечивающеготеоретический базис реляционного подхода к организации баз данных;

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

Реляционные системыдалеко не сразу получили широкое распространение. В то время, как основныетеоретические результаты в этой области были получены еще в 70-х, и тогда жепоявились первые прототипы реляционных СУБД, долгое время считалось невозможнымдобиться эффективной реализации таких систем. Однако отмеченные вышепреимущества и постепенное накопление методов и алгоритмов организацииреляционных баз данных и управления ими привели к тому, что уже в середине 80-хгодов реляционные системы практически вытеснили с мирового рынка ранние СУБД.

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

Каждое отношение имеет заголовок и тело. Заголовок – этонабор пар “имя столбца: имя типа”, а тело отношения состоит из набора строк,которые соответствуют заголовку. Заголовок любого отношения можно рассматриватькак предикат, а каждую строку в теле отношения – как некоторое истинноевысказывание, образованное в результате подстановки определённых значенийаргументов соответствующего типа вместо местодержателей или параметров этогопредиката.

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


2. ПОСТАНОВКА ЗАДАЧИ

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

1) фамилия иинициалы автора (авторов);

2) название;

3) язык;

4) список тем, ккоторым относится источник;

5) путь и названиефайла архива;

6) названиеосновного файла источника.

На сервере необходимо создать распределённую БД, содержащуюданную информацию обо всех источниках.

Клиентское приложение должно удовлетворять следующимтребованиям:

1) максимальноеудобство пользователя при работе (современный и понятный интерфейс);

2) максимальнаяпереносимость исходного кода программы для платформы Linux;

3) наличие процедурыпоиска источника по атрибутам;

4) возможностьфильтрации источников;

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


3. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ РЕЛЯЦИОННЫХ БАЗЫ ДАННЫХ

3.1 Реляционная алгебра

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

В состав теоретико-множественных операций входят операции:

· объединенияотношений;

· пересеченияотношений;

· взятия разностиотношений;

· прямогопроизведения отношений.

Специальные реляционные операции включают:

· ограничениеотношения;

· проекциюотношения;

· соединениеотношений;

· делениеотношений.

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

3.1.1 Общая интерпретация реляционных операций

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

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

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

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

· При выполнениипрямого произведения двух отношений производится отношение, кортежи которогоявляются конкатенацией (сцеплением) кортежей первого и второго операндов.

· Результатомограничения отношения по некоторому условию является отношение, включающеекортежи отношения-операнда, удовлетворяющее этому условию.

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

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

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

· Операцияпереименования производит отношение, тело которого совпадает с телом операнда,но имена атрибутов изменены.

· Операцияприсваивания позволяет сохранить результат вычисления реляционного выражения всуществующем отношении БД.

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

3.1.2 Замкнутость реляционной алгебрыи операция переименования

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

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

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

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

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

3.1.3 Особенноститеоретико-множественных операций реляционной алгебры

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

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

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

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

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

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

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

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

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

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

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

 

3.2 Реляционное исчисление

3.2.1 Кортежные переменные и правильно построенные формулы

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

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

Правильно построенные формулы (WFF — Well-Formed Formula)служат для выражения условий, накладываемых на кортежные переменные. ОсновойWFF являются простые сравнения (comparison), представляющие собой операциисравнения скалярных значений (значений атрибутов переменных или литеральнозаданных констант). По определению, простое сравнение является WFF, а WFF,заключенная в круглые скобки, является простым сравнением.

Более сложные варианты WFF строятся с помощью логическихсвязок NOT, AND, OR и IF… THEN. Так, если form — WFF, а comp — простое сравнение, то NOT form, comp AND form,comp OR form и IF comp THEN form являются WFF.

Наконец, допускается построение WFF с помощью кванторов. Еслиform — это WFF, в которой участвует переменная var, то конструкции EXISTS var(form) и FORALL var (form) представляют wff.

Переменные, входящие в WFF, могут быть свободными илисвязанными. Все переменные, входящие в WFF, при построении которой неиспользовались кванторы, являются свободными. Фактически, это означает, чтоесли для какого-то набора значений свободных кортежных переменных привычислении WFF получено значение true, то эти значения кортежных переменныхмогут входить в результирующее отношение. Если же имя переменной использованосразу после квантора при построении WFF вида EXISTS var (form) или FORALL var(form), то в этой WFF и во всех WFF, построенных с ее участием, var — этосвязанная переменная. Это означает, что такая переменная не видна за пределамиминимальной WFF, связавшей эту переменную. При вычислении значения такой WFFиспользуется не одно значение связанной переменной, а вся ее область определения.

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

3.2.2 Целевые списки и выражения реляционного исчисления

Итак, WFF обеспечивают средства формулировки условия выборкииз отношений БД. Чтобы можно было использовать исчисление для реальной работы сБД, требуется еще один компонент, который определяет набор и имена столбцоврезультирующего отношения. Этот компонент называется целевым списком(target_list).

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

· var.attr, где var- имя свободной переменной соответствующей WFF, а attr — имя атрибутаотношения, на котором определена переменная var;

· var, чтоэквивалентно наличию подсписка var.attr1, var.attr2, ..., var.attrn, где attr1,attr2, ..., attrn включает имена всех атрибутов определяющего отношения;

· new_name =var.attr; new_name — новое имя соответствующего атрибута результирующегоотношения.

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

Выражением реляционного исчисления кортежей называетсяконструкция вида target_list WHERE wff. Значением выражения является отношение,тело которого определяется WFF, а набор атрибутов и их имена — целевым списком.

3.2.3 Реляционное исчисление доменов

В исчислении доменов областью определения переменных являютсяне отношения, а домены.

Основным формальным отличием исчисления доменов от исчислениякортежей является наличие дополнительного набора предикатов, позволяющихвыражать так называемые условия членства. Если R — это n-арное отношение сатрибутами a1, a2, ..., an, то условиечленства имеет вид

R (ai1:vi1, ai2:vi2, ..., aim:vim) (m<= n),

где vij — это либо литерально задаваемаяконстанта, либо имя кортежной переменной. Условие членства принимает значениеtrue в том и только в том случае, если в отношении R существует кортеж,содержащий указанные значения указанных атрибутов. Если vij — константа, то на атрибут aij задается жесткое условие, не зависящееот текущих значений доменных переменных; если же vij — имя доменнойпеременной, то условие членства может принимать разные значения при разныхзначениях этой переменной.

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

Реляционное исчисление доменов является основой большинстваязыков запросов, основанных на использовании форм. В частности, на этомисчислении базировался известный язык Query-by-Example, который был первым (инаиболее интересным) языком в семействе языков, основанных на табличных формах.

3.3 Целостность реляционных данных

В любой реляционной базе данных должны выполняться дваограничения:

1) целостность сущностей;

2) целостностьвнешних ключей.

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

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

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

Практически все реализации современных реляционных СУБДпозволяют использовать null-значения, несмотря на их недостаточнуютеоретическую обоснованность. Мнение автора (очень скромное по сравнению смнением корифеев реляционной теории) состоит в том, что желательно избегатьnull-значений. Тем не менее, приведем здесь описание трехзначной логики,необходимой для работы с null-значениями./>

Т.к. null-значение обозначает на самом деле тот факт, чтозначение неизвестно, то любые алгебраические операции (сложение, умножение,конкатенация строк и т.д.) должны давать также неизвестное значение, т.е. null.Действительно, если, например, вес детали неизвестен, то неизвестно также,сколько весят 10 таких деталей.

При сравнении выражений, содержащих null-значения, результаттакже может быть неизвестен. Таким образом, определение истинности логическихвыражений базируется на трехзначной логике (three-valued logic, 3VL), в которойкроме значений T — ИСТИНА и F — ЛОЖЬ, введено значение U — НЕИЗВЕСТНО.

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

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

1. Свойствомуникальности — вотношении не может быть двух различных кортежей, с одинаковым значением />.

2. Свойствомнеизбыточности — никакоеподмножество в />не обладает свойствомуникальности.

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

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

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

Т.к. потенциальные ключи фактически служат идентификаторамиобъектов предметной области (т.е. предназначены для различения объектов), тозначения этих идентификаторов не могут содержать неизвестные значения.Действительно, если бы идентификаторы могли содержать null-значения, то мы немогли бы дать ответ «да» или «нет» на вопрос, совпадают илинет два идентификатора.

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

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

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

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

Пусть дано отношение />. Подмножество атрибутов />отношения />будем называть внешнимключом, если:

1. Существуетотношение />(/>и />не обязательноразличны) с потенциальным ключом />.

2. Каждое значение />в отношении />всегдасовпадает со значением />для некоторого кортежа из />, либо являетсяnull-значением.

Отношение />называется родительским отношением,отношение />называетсядочерним отношением.

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

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

Существуют две основные стратегии поддержания ссылочнойцелостности:

· RESTRICT(ОГРАНИЧИТЬ)- неразрешать выполнение операции, приводящей к нарушению ссылочной целостности.Это самая простая стратегия, требующая только проверки, имеются ли кортежи вдочернем отношении, связанные с некоторым кортежем в родительском отношении.

· CASCADE(КАСКАДИРОВАТЬ)-разрешить выполнение требуемой операции, но внести при этом необходимыепоправки в других отношениях так, чтобы не допустить нарушения ссылочнойцелостности и сохранить все имеющиеся связи. Изменение начинается вродительском отношении и каскадно выполняется в дочернем отношении. Вреализации этой стратегии имеется одна тонкость, заключающаяся в том, чтодочернее отношение само может быть родительским для некоторого третьегоотношения. При этом может дополнительно потребоваться выполнение какой-либостратегии и для этой связи и т.д. Если при этом какая-либо из каскадныхопераций (любого уровня) не может быть выполнена, то необходимо отказаться отпервоначальной операции и вернуть базу данных в исходное состояние. Это самаясложная стратегия, но она хороша тем, что при этом не нарушается связь междукортежами родительского и дочернего отношений.

Эти стратегии являются стандартными и присутствуют во всехСУБД, в которых имеется поддержка ссылочной целостности.

Можно рассмотреть дополнительные стратегии поддержанияссылочной целостности:

· SET NULL(УСТАНОВИТЬ В NULL) — разрешить выполнение требуемой операции, но все возникающие некорректныезначения внешних ключей изменять на null-значения. Эта стратегия имеет дванедостатка. Во-первых, для нее требуется допустить использование null-значений.Во-вторых, кортежи дочернего отношения теряют всякую связь с кортежамиродительского отношения. Установить, с каким кортежем родительского отношениябыли связаны измененные кортежи дочернего отношения, после выполнения операцииуже нельзя.

· SET DEFAULT(УСТАНОВИТЬ ПО УМОЛЧАНИЮ) — разрешить выполнение требуемой операции, но все возникающиенекорректные значения внешних ключей изменять на некоторое значение, принятоепо умолчанию. Достоинство этой стратегии по сравнению с предыдущей в том, чтоона позволяет не пользоваться null-значеними. Недостатки заключаются вследующем. Во-первых, в родительском отношении должен быть некий кортеж, потенциальныйключ которого принят как значение по умолчанию для внешних ключей. В качестветакого «кортежа по умолчанию» обычно принимают специальный кортеж,заполненный нулевыми значениями (не null-значениями!). Этот кортеж нельзяудалять из родительского отношения, и в этом кортеже нельзя изменять значениепотенциального ключа. Таким образом, не все кортежи родительского отношениястановятся равнозначными, поэтому приходится прилагать дополнительные усилиядля отслеживания этой неравнозначности. Это плата за отказ от использованияnull-значений. Во-вторых, как и в предыдущем случае, кортежи дочернегоотношения теряют всякую связь с кортежами родительского отношения. Установить,с каким кортежем родительского отношения были связаны измененные кортежи дочернегоотношения, после выполнения операции уже нельзя.

В некоторых реализация СУБД рассматривается еще однастратегия поддержания ссылочной целостности:

· IGNORE(ИГНОРИРОВАТЬ) — выполнять операции, не обращая внимания на нарушения ссылочной целостности.

3.4 Проектирование базы данных

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

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

· первая нормальнаяформа (1NF);

· вторая нормальнаяформа (2NF);

· третья нормальнаяформа (3NF);

· нормальная формаБойса-Кодда (BCNF);

· четвертаянормальная форма (4NF);

· пятая нормальнаяформа, или нормальная форма проекции-соединения (5NF или PJ/NF).

Основные свойстванормальных форм:

· каждая следующаянормальная форма в некотором смысле лучше предыдущей;

· при переходе к следующейнормальной форме свойства предыдущих нормальных свойств сохраняются.

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

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

В отношении Rатрибут Y функционально зависит от атрибута X (X и Y могут быть составными) втом и только в том случае, если каждому значению X соответствует в точностиодно значение Y: R.X (r) R.Y.

Функциональнаязависимость R.X (r) R.Y называется полной, если атрибут Y не зависитфункционально от любого точного подмножества X.

Функциональнаязависимость R.X (r) R.Y называется транзитивной, еслисуществует такой атрибут Z, что имеются функциональные зависимости R.X (r) R.Z и R.Z (r) R.Y иотсутствует функциональная зависимость R.Z --> R.X. (При отсутствиипоследнего требования мы имели бы «неинтересные» транзитивныезависимости в любом отношении, обладающем несколькими ключами.)

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

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

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

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

Отношение Rнаходится в третьей нормальной форме (3NF) в том и только в том случае, еслинаходится в 2NF и каждый неключевой атрибут нетранзитивно завис

Отношение Rнаходится в третьей нормальной форме (3NF) в том и только в том случае, еслинаходится в 1NF, и каждый неключевой атрибут не является транзитивно зависимымот какого-либо ключа R.

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

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

Отношение Rнаходится в нормальной форме Бойса-Кодда (BCNF) в том и только в том случае,если каждый детерминант является возможным ключом.

В отношении R (A, B,C) существует многозначная зависимость R.A (r) (r) R.B в томи только в том случае, если множество значений B, соответствующее паре значенийA и C, зависит только от A и не зависит от С.

Легко показать, чтов общем случае в отношении R (A, B, C) существует многозначная зависимость R.A (r) (r) R.B в томи только в том случае, когда существует многозначная зависимость R.A (r) (r) R.C.

Теорема Фейджина. Отношение R (A, B,C) можно спроецировать без потерь в отношения R1 (A, B) и R2 (A, C) в том итолько в том случае, когда существует MVD A (r) (r) B | C.

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

Отношение Rнаходится в четвертой нормальной форме (4NF) в том и только в том случае, еслив случае существования многозначной зависимости A (r) (r) B всеостальные атрибуты R функционально зависят от A.

Отношение R (X, Y,..., Z) удовлетворяет зависимости соединения * (X, Y, ..., Z) в том и только втом случае, когда R восстанавливается без потерь путем соединения своихпроекций на X, Y, ..., Z.

Отношение Rнаходится в пятой нормальной форме (нормальной форме проекции-соединения — PJ/NF) в том и только в том случае, когда любая зависимость соединения в Rследует из существования некоторого возможного ключа в R.

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


4. РАЗРАБОТКА БАЗЫ ДАННЫХ

4.1 Предметная область базы данных

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

Анализ запросов на литературу показывает, что для поискаподходящих источников (по тематике, названию, автору) и отбора нужного следуетвыделить следующие атрибуты источников литературы:

1) автор (фамилия и имена (инициалы)или псевдоним каждого автора источника литературы);

2) название (заглавие) источника литературы;

3) язык, на котором написан источник;

4) список тем (разделов), с которымисвязан данный источник литературы.

К объектам и атрибутам, позволяющим охарактеризовать место расположениефайлов источников, можно отнести:

1) полное файловое имя (путь и имяфайла) архива источника литературы;

2) название основного (первого) файлаисточника литературы.

4.2Построение инфологической модели

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

Выделеныследующие сущности:

1) “Авторы” (“Код автора”, “Автор”) –эта сущность отводится для хранения сведений об авторах литературныхисточников. Так как фамилия и имена (инициалы) автора (группы авторов) могутбыть достаточно громоздкими и будут многократно встречаться в разныхисточниках, то их целесообразно нумеровать и ссылаться на эти номера. Для этоговводится целочисленный атрибут «Код автора», который будетавтоматически наращиваться на единицу при вводе в базу данных нового автора.Самой же информации об авторе соответствует атрибут “Автор”.

2) “Заглавия” (“Код заглавия”,“Заглавие”). Выделение этой сущности позволит сократить объем данных и снизитьвероятность возникновения противоречивости. Как и сущность “Авторы”, даннаясущность характеризуется двумя атрибутами – целочисленным «Кодзаглавия», который будет автоматически наращиваться на единицу при вводе вбазу данных нового заглавия и “Заглавие”, непосредственно отражающий заглавиеисточника литературы.

3) “Языки” (“Код языка”, “Язык”) –эта сущность отражает информацию об языке, на котором написан источниклитературы. Данная сущность также включает в себя два атрибута: “Код языка” –целочисленный автоматически увеличивающийся и “Язык” –название языка источникалитературы.

4) “Книги” (“Код книги”, “Кодавтора”, “Код заглавия”, “Код языка”, “Темы”, “Архив”, “Файл”) – эта сущностьотражает информацию о конкретных источниках литературы.


/>

Рисунок4.1 Инфологическая модель БД

4.3Проектирование базы данных

Дляфизической реализации БД использовалась СУБД InterBase версии6.0. Эта СУБД была выбрана по ряду причин:

1) поддержка данной СУБД реляционныхи распределённых баз данных;

2) высокая надёжность;

3) наличие реализации СУБД для ОС Linux(кроссплатформенность продукта);

4) соответствие встроенного языка SQLстандарту ANSI SQL-92;

5) малые требования к дисковомупространству и памяти;

6) свободное распространение СУБД в открытыхкодах.

Полныйлистинг кода создания БД на языке SQL (встроенный в InterBase) находится в приложении 20. Поэтапно рассмотрим физическую реализациюБД. Зададим 3 диалект БД и русскую кодировку символов WIN1251. Создаёмпустую БД от лица суперпользователя SYSDBA со стандартным паролем “masterkey”. Размер страница БД установлен равным размеру кластера в файловойсистеме NTFS 4048 байт. Для удаления из строк пробелов ипреобразования строк к верхнему регистру были декларированы внешние функции Upperи Trim. Они реализованы на языке программирования Delphiи физически расположены в динамически связуемой библиотеке (DLL) Str.dll.

Каждаяиз полученных сущностей должна быть представлена базовой таблицей:

ТаблицаAuthors – информация об авторах источников, состоящая изследующих полей:

1) NumAut – числовое автоинкрементное поле, содержащее номеравтора и являющееся ключевым полем отношения;

2) Author – строковое поле, содержащее фамилию и инициалыавтора (группы авторов), являющееся уникальным.

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

1) NumTit – числовое автоинкрементное поле, содержащее номерзаглавия и являющееся ключевым полем отношения;

2) Titles – строковое поле, содержащее название источника иявляющееся уникальным.

ТаблицаLanguages – языки источников, состоящая из следующих полей:

1) NumLan – числовое автоинкрементное поле, содержащее номерязыка и являющееся ключевым полем отношения;

2) Language — строковое поле, содержащее язык источника иявляющееся уникальным полем.

ТаблицаBooks – информация об источниках литературы, состоящая изследующих полей:

1) NumBook – числовое автоинкрементное поле, содержащее номеркниги и являющееся ключевым полем отношения;

2) NumAut – числовое поле, содержащее код (номер) автора втаблице Authors;

3) NumTit — числовое поле, содержащее код (номер) названия втаблице Titles;

4) NumLan — числовое поле, содержащее код (номер) языка втаблице Languages;

5) Sections – текстовое (мемо) поле, содержащее список тем,связанных с источником;

6) Atchive – строковое поле, содержащее полное файловое имяархива источника;

7) MainFile – строковое поле, содержащее имя главного файлаисточника.

ТаблицаBooks связана с таблицами Authors, Titles,Languages типом связи “один-ко-многим” посредством внешнихключей NumAut, NumTit и NumLan.

Создаёмтаблицу Authors с непустыми полями NumAut типа INTEGER и Author типа VARCHAR длиной 50 символов, поле NumAutявляется первичным ключом, а Author уникальным полем. Аналагично создаём таблицу Titlesс непустыми полями NumTit типа INTEGER и Title типа VARCHAR длиной 200 символов, поле NumTitявляется первичным ключом, а Title уникальным полем. Также создаём таблицу Languages с непустыми полями NumLan типа INTEGER и Language типа VARCHAR длиной 20 символов, поле NumLanявляется первичным ключом, а Language уникальным полем. Наконец создаём таблицу Booksс полями NumLan – непустое поле типа INTEGER,являющееся первичным ключом таблицы; NumAut — поле типа INTEGER; NumTit — поле типа INTEGER; NumLan — полетипа SMALLINT; Sections – поле типа BLOB подтипа TEXT; Archive – непустое поле типа VARCHAR длиной 32765 байт и MainFile – непустое поле типа VARCHAR длиной 255 байт. Также на таблицу Booksнакладываются ограничения, посредством задания внешних ключей NumAut,NumTit и NumLan, которые связаны с аналогичными полями в таблицах Authors, Titles и Languages.

Длятого, чтобы поля таблиц NumBook, NumAut, NumTit и NumLan автоматически увеличивались при добавлении новойзаписи необходимо задать создать генераторы. Назовём их GenBook, GenAut, GenTit и GenLan для соответственно. Для их увеличения созданытриггеры InsBook, InsAut, InsTit и InsLan, которые активизируются перед занесением новой записив соответствующую таблицу и выполняют увеличение генераторов на единицупосредством вызова встроенной процедуры GEN_ID.

Создадимпредставление (VIEW), которое состоит из следующих полей Number, Author,Title, Language, Sections, Archive и File. Они являются результатомвыборки следующих полей таблиц Books.NumBook, Authors.Author, Titles.Title, Languages.Language, Books.Sections, Books.Archive, Books.MainFile, при условии

Books.NumAut=Authors.NumAut AND

Books.NumTit=Titles.NumTit AND

Books.NumLan=Languages.NumLan.

Этопредставление предназначено для скрытия реальной структуры БД от пользователя иоблегчения использования БД прикладными программистами.

Длядобавления, изменения и удаления записей из таблиц БД и других целейпредусмотрены ряд хранимых процедур:

· DeleteAll – очистка всей БД (удаление всех записей во всехтаблицах) и обнуление генераторов;

· DeleteBook – удаление заданного источника;

· InsertBook – вставка нового источника;

· SearchBook – поиск источника по заданным атрибутам с учётомрегистра символов;

· SearchUpBook — поиск источника по заданным атрибутам без учётарегистра символов;

· UpdateAuthor – изменение автора источника;

· UpdateBook – изменение атрибутов источника;

· UpdateTilte – изменение названия источника;

· UpdateLanguage – изменение языка источника;

· IsWriter – проверка прав пользователя на изменение БД.

Дляуправления безопасностью БД созданы три роли:

· Admin – имеет права на любые действия с БД (чтение,изменение структуры и данных);

· Writer – имеет права на чтение и изменение данных БД, но неимеет прав на изменение структуры БД;

· Reader – имеет права только на чтение данных БД.

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


5. РАЗРАБОТКА ПРИЛОЖЕНИЯ-КЛИЕНТА

5.1 Обоснование выбора среды программирования

Разработка клиентского приложения осуществлялось на языке Delphi (ранее Object Pascal) в среде программирования Borland Delphi 7.0 Enterprise Edition.

Сформулируемосновные критерии, по которым производился выбор среды программирования длясоздания приложения.

1)Создание максимальновозможного удобства в работе. Для этого программа должна иметь удобный исовременный интерфейс пользователя.

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

3)Поддержка длинных именфайлов.

4)Минимальные затраты наразработку модуля.

5)Максимальнаяпереносимость исходного кода программы для платформы Linux.

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

Среда визуального программирования Delphi 7.0 работает в среде Windows 9x/NT/2000/XP и предоставляет программистувозможность реализации всех достоинств графического интерфейса этой системы.Так как подавляющее большинство пользователей персональных компьютеров работаютсегодня в среде операционных систем семейства Windows, то этот интерфейс является для них наиболеепривычным и удобным.

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

Так как Delphi7.0 является средой программирования для Windows, то, как и сама операционная система Delphi поддерживает длинные имена файлов ипапок.

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

Среда визуального программирования Delphi 7.0 является мощным средством для быстрой икачественной разработки программ для операционной системы Windows 95. Имеющаяся библиотека визуальныхкомпонентов позволяет создать интерфейс с пользователем за считанные минуты.Объектно-ориентированный язык Object Pascal, положенныйв основу Delphi, является расширением языков Turbo Pascal и Borland Pascal фирмы Borland и нашел в себе отражение новыхвеяний в программировании. Компонентный принцип, используемый в Delphi, позволяет создавать полноценные Windows-приложения, написав минимальноеколичество строк кода. Delphiпредставляет собой открытую систему, позволяя добавлять свои компоненты всистему, модифицировать уже имеющиеся стандартные компоненты благодаря тому,что предоставлены их исходные тексты. Благодаря всему этому разработка программв среде Delphi становится легкой и приятной.

Также, вследствие того, что большинство компонентов Delphi 7.0 идентично компонентам Kylix, то переход под платформу Linux будет занимать минимально возможноевремя.

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

5.2 Средства Delphi дляработы с базами данных

Хотя Delphiне имеет своего формата таблиц БД, она тем не мене обеспечивает мощнуюподдержку различных СУБД – как локальных (например, dBase или Paradox),так и промышленных (например, Sybaseили InterBase). Средства Delphi для работы с БД можно разделить на три вида:

1) инструментальные средства;

2) компоненты.

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

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

1) Borland Database Engine (BDE) –процессор баз данных, который представляет собой набор динамических библиотек идрайверов, предназначенных для организации доступа к БД из Delphi-приложений. BDE является центральным звеном при организации доступа кданным.

2) BDE Administrator – утилита для настройки различныхпараметров BDE.

3) Database Desktop – программа создания и редактирования таблиц, SQL- запросов и запросов QBE.

4) SQL Explorer – проводник БД, позволяющийпросматривать и редактировать БД и словари данных.

5) SQL Builder – программа визуального конструирования SQL-запросов.

6) SQL Monitor – программа отслеживания порядка выполнения SQL-запросов к удалённым БД.

7) Data Pump – программа для переноса данных между БД.

8) IBConsole – программа для управленияудалёнными БД.

9) InterBase Sever Manager – программа для запуска сервера InterBase.

10) SQL Links – драйверы для доступа к удалённым промышленным СУБД,таким как Microsoft SQL Server или Oracle.К промышленному серверу InterBase, который поставляется совместно с Delphi и является для него родным, доступ также можно организоватьнапрямую через BDE, не используядрайверы SQL-Links.

11) dbExpress – набор драйверов для доступа кбазам данных SQL с помощью таких компонентов, как SQLConnection, SQLDataSet, SQLQuery, SQLStoredProc и SQLTable. dbExpress включает в свой состав следующиедрайверы:

· InterBase– DBEXPINT.DLL;

· DB2 –DBEXPDB2.DLL;

· Oracle– DBEXPORA.DLL;

· MySQL– DBEXPMYS.DLL.

12) InterBase Server – клиентская и серверная часть SQL.

Компоненты, предназначенные для работы с БД, находятсяна страницах Data Access, Data Control, dbExpress, BDE, ADO, Decision Cube, QReport и InterBase палитры компонентов. Некоторые компоненты предназначены специально дляработы с удалёнными БД в архитектуре “клиент-сервер”.


5.3 Реализация приложения

5.3.1 Общее описание форм и модулей

Для реализации интерфейса с базой данных был выбраннабор компонентов прямого доступа к серверу InterBase. Этотвыбор имеет ряд преимуществ по сравнению с другими группами компонентов.Основным преимуществом является то, что данный набор компонент предназначенспециально для доступа к СУБД InterBase и он позволяет более произвести более тонкиенастройки приложения. Нет необходимости установки совместно с программой BDEили копирования библиотек драйверов для доступа к серверу, что способствуетэкономии дискового пространства и времени при установке. Также компоненты InterBase в Delphi аналогичны компонентам InterBase в Kylix,что существенно снижает затраты при смене платформы приложения.

Листинг файла проекта приложения (Lib.dpr)расположен в приложении Б.

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

1. MainForm (см. приложение А, рис. А.1), наследник типа TForm– основная форма приложения. На ней располагается ряд визуальных и невизуальныхкомпонентов, обеспечивающих отображение данных, главное меню приложения,навигационный и управляющий интерфейс БД, обработку событий приложения инастройку вида программы. Форме соответствует модуль Main (см.приложение В).

2. DataModule1 (см. приложение А, рис. А.2), наследник типа TDataModule – простой модуль данных, являющийся контейнером для невизуальныхкомпонентов, реализующих взаимодействие приложения с БД. Данной формесоответствует модуль DBUnit (см. приложение Г).

3. EditForm (см. приложение А, рис. А.3), наследник типа TForm– диалоговое окно редактирования (добавления/изменения) записей БД. Формесоответствует модуль Edit (см. приложение Д).

4. DeleteForm (см. приложение А, рис. А.4), наследник типа TForm– диалоговое окно подтверждения удаления текущей записи БД. Форме соответствуетмодуль Delete (см. приложение Е).

5. FilterForm (см. приложение А, рис. А.5), наследник типа TForm– диалоговое окно задания фильтра БД. Данной форме соответствует модуль Filter(см. приложение Ж).

6. FindForm (см. приложение А, рис. А.6), наследник типа TForm– диалоговое окно поиска необходимых записей БД. Код формы реализован в модуле Find(см. приложение З).

7. DirSourceForm (см. приложение А, рис. А.7), наследник типа TForm– диалоговое окно выбора каталога, содержащего файлы источника. Код реализацииформы располагается в модуле DirSource (см. приложение И).

8. PathForm (см. приложение А, рис. А.8), наследник типа TForm– диалоговое окно задания пути к БД. Форме соответствует модуль Path(см. приложение К).

9. UserForm (см. приложение А, рис. А.9), наследник типа TForm– диалоговое окно выбора пользователя программы. Форме соответствует модуль User(см.приложение Л).

10. AboutBox (см. приложение А, рис. А.10), наследник типа TForm– окно информации о программе, данной форме соответствует модуль About(см. приложение М).

11. Модуль Data содержитстроковые, числовые и прочие константы, используемые другими модулями (см.приложение Н).

12. Модуль Files содержитподпрограммы манипулирования файлами, упаковкой/распаковкой файлов и запускомвнешних программ (см. приложение О).

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

5.3.2 Форма MainForm и модуль Main

Форма MainForm является основным окном программы и контейнером длявизуальных и невизуальных компонентов. На ней располагаются следующиеневизуальные компоненты.

При создании формы, для обработки события MainForm.OnCreate, выполняется метод TMainForm.FormCreate, в котороминициализируются начальными значениями глобальные переменные и создаютсявременные каталоги.

При активизации формы и возникновении события MainForm.OnActivate, выполняется метод TMainForm.FormActivate. В нём первоначально восстанавливаются параметры приложения путёмсчитывания их из файлов инициализации при помощи методаTMainForm.RestoreIniFiles. Затем делается попытка соединится с БД (вызов методаDataModule1.InitDBParams), и если она успешна, то устанавливается уровень доступапользователя (метод DataModule1.SetAccess) и таблица заполняется данными (методMainForm.DataSetRefrashExecute). В противном случае работапрограммы завершается.

При уничтожении формы возникает событие OnDestroy, обработка которого осуществляется методом TMainForm.FormDestroy. В ходеего выполнения процедурой Files.DeleteFiles удаляются все временные файлы, затем удаляются всевременные каталоги и методом MainForm. SaveIniFiles сохраняются все настройки программы в файлеинициализации.

Для сохранения и восстановления настроек программыиспользуются методы TMainForm.SaveIniFiles и TMainForm.RestoreIniFiles.

Компонент ImageList1 типа TImageList – список иконок и рисунков, используемых приложением. Список заполняетсявручную на этапе проектирования программы и в дальнейшем не изменяется.Элементы списка используются для прорисовки изображений на кнопках, в главномменю и всплывающих меню.

Компонент ActionList1 типа TActionList – список управляющих элементов программы. Это ключевой невизуальныйкомпонент приложения, он обеспечивает синхронизацию необходимых действийпрограммы при возникновении некоторых событий. ActionList1содержит ряд элементов (объектов) типа TAction,сгруппированных по следующим категориям:

1) DataSet — объекты действий для обработке баз данных;

2) File – объекты действий для задания имени пользователя ипути к фалу БД, а также выход из программы;

3) Help – объект действия для получения справки о программе;

4) Options – объекты действий для задания настроек программы;

5) SortBy – объекты действий для задания поля БД, по которомубудет осуществляться сортировка выводимых в таблице записей;

6) SortDir – объекты действий для задания направления сортировкизаписей в таблице (по возрастанию или по убыванию).

Рассмотрим подробно элементы списка действий ActionList1.

Объекты DataSetFirst, DataSetPrior, DataSetNext, DataSetLast категории DataSet предназначены дляперемещения указателя БД соответственно к первой, предыдущей, следующей илипоследней записи. Они является стандартными предопределёнными действиями Delphi.

Объект DataSetInsert категории DataSet предназначен для вставки новой записи в БД. Обработка действияосуществляется методом TMainForm.DataSetInsertExecute, в котором активизируетсяформа редактирования записи EditForm, а ей поля редактирования принимают пустые значения.Затем, по закрытии формы редактирования записей, значения её полей вводапередаются процедуре DataModule1.CallInsertBook, которая создаёт новуюзапись в БД. Таблица БД обновляется (действие DataSetRefresh)и указатель устанавливается на новую запись (процедураDataModule1.IBDataSet1.Locate). Для быстрой активизации действия предусмотреносочетание клавиш Ctrl+I.

Объект DataSetUpdate категории DataSet предназначен для изменение существующих записей БД. Обработка действия осуществляетсяпри помощи метода TMainForm.DataSetUpdateExecute, который аналогичен методуTMainForm.DataSetInsertExecute. Отличием является то, что поля редактированияформы EditForm заполняется не пустыми значениями, а значениямиредактируемой записи БД. Значения полей ввода формы передаются процедуре DataModule1.CallUpdateBook,которая редактирует выбранную запись в БД. Для активизации действия можноиспользовать сочетание клавиш Ctrl+E.

Объект DataSetUpdate категории DataSet предназначен для удаления существующих записей БД. Обработка действияосуществляется методом TMainForm.DataSetDeleteExecute. Внём в зависимости от установки соответственного флажка в настройках программыможет запрашиваться подтверждение для удаления (для этого активизируется форма DeleteForm). Далее вызывается процедура DataModule1.CallDeleteBook, которая иосуществляет удаление. Для быстрой активизации действия предусмотрено сочетаниеклавиш Ctrl+D.

Объект DataSetRefrash категории DataSet предназначен для обновления таблицы БД. Обработка действияосуществляется методом TMainForm.DataSetRefrashExecute.При обновлении СУБД передаются запрос на выборку всех записей БД,отсортированных в заданном порядке. Сортировка записей БД осуществляется взависимости от текущих настроек. Перед обновлением делается закладка на текущийкурсор БД, затем после обновления указатель опять устанавливается на ту жезапись. Возможна быстрая активизация действия при нажатии клавиш Ctrl+R.

Объект DataSetOpen категории DataSet предназначен для открытия существующего в базе источника длячтения/редактирования. Обработка действия осуществляется методомTMainForm.DataSetOpenExecute. Алгоритм работы метода следующий.Увеличивается глобальный счётчик открытых файлов источников, затем по егозначению задаётся название новой папки, в которую распаковываются файлыисточника при помощи функции UnPackFiles модуля Files. Далее процедурой Files.OpenFile открывается главный файл источника. Возможна быстрая активизациядействия при нажатии клавиш Ctrl+O.

Объект DataSetFind категории DataSet предназначен для поиска существующей в БД записи по задаваемыматрибутам. Обработка действия осуществляется методом TMainForm.DataSetFindExecute.В его теле активизируется форма поиска записи БД FindForm, припомощи обработки событий которой и осуществляется поиск. Далее, в случае если вкурсор БД находится не на последней записи, становится доступным действие DataSetFindNext. Для активизации действия возможно использованиесочетания клавиш Ctrl+F.

Объект DataSetFindNext категории DataSet предназначен для поиска следующей существующей в БД записи по атрибутам,заданным в действии DataSetFind. Обработка действия осуществляется методомTMainForm.DataSetFindNextExecute. Алгоритм работы метода следующий. Из полейввода формы FindForm процедурой FindForm.GetLocateParams считываются значения –атрибуты искомой записи. Затем они передаются стандартному методу поиска TIBDataSet.LocateNext,который осуществляет поиск и возвращает указатель на искомую запись. Так какданное действие может повторяться подряд большое количество раз, то дляускорения его активизации предусмотрена горячая клавиша F3.

Объект DataSetFilter категории DataSet предназначен для локальной фильтрации записей БД по задаваемыматрибутам. Обработка действия осуществляется методом TMainForm.DataSetFilterExecute.В ходе выполнения метода активизируется форма FilterForm. И наеё обработчики событий возлагается вся дальнейшая работа по фильтрации записей.

Объект DataSetAll категории DataSet предназначен для отмены локальной фильтрации записей БД. Обработкадействия осуществляется методом TMainForm.DataSetAllExecute, вкотором сбрасывается флаг фильтрации Filtered объекта IBDataSet1, используемогодля доступа к БД.

Объект FileDataBasePath категории Fileпредназначен задания пути к файлу БД. Обработка действия осуществляется методомTMainForm. FileDataBasePathExecute. В ней активизируется диалоговое окно заданиямаршрута, и затем обработчиками событий этой формы выполняются все необходимыедействия. После закрытия диалогового окна, происходит обновление данных путёмвызова метода TMainForm.DataSetRefrashExecute.

Объект FileUser категории Fileпредназначен задания пути к файлу БД. Обработка действия осуществляется методомTMainForm. FileUserExecute. В ней активизируется диалоговое окно заданияпользователя программы, и затем обработчиками событий этой формы выполняютсявсе необходимые действия. После закрытия диалогового окна, происходит попыткаустановить соединение с БД с новыми параметрами (имя и пароль пользователя) припомощи вызова метода DataModule1.Connect. Праметры пользователя считываются изсоответствующих полей ввода формы UserForm. Если соединение неудачно,то приложение автоматически прекращает свою работу, иначе данные в таблицеобновляются путём вызова метода TMainForm.DataSetRefrashExecute.Далее при помощи метода DataModule1.SetAccess устанавливается уровень доступаданного пользователя к БД (чтение/изменение или только чтение). В зависимостиот уровня доступа становятся доступными или недоступными действия вставки (DataSetInsert), изменения (DataSetUpdate) и удаления (DataSetDelete)записей БД.

Объект FileExit категории Fileпредназначен для завершения работы приложения. Он является стандартнымпредопределённым объектом Delphi.

Объект HelpAbout – единственный объекткатегории Help предназначен для активизации информационного окнапрограммы. Это осуществляется путём вызова метода TMainForm.HelpAboutExecute.

Объект OptColor категории Optionsпредназначен для задания цвета фона сетки БД, поля ссылок и полейредактирования. Это осуществляется путём вызова метода TMainForm.OptColorExecute. В нём сначала активируется стандартный диалог выборацвета ColorDialog1, а затем выбранный цвет присваиваетсясоответственным свойствам упомянутых объектов.

Объект OptFont категории Optionsпредназначен для задания шрифта сетки БД, поля ссылок и полей редактирования.Это осуществляется путём вызова метода TMainForm.OptFontExecute.В нём сначала активируется стандартный диалог выбора шрифта FontDialog1, а затем выбранный шрифт присваивается соответственным свойствамупомянутых объектов.

Объект OptConfDel категории Optionsпредназначен для включения/выключения запроса на подтверждение удаления записиБД. Обработка действия осуществляется методом TMainForm.OptConfDelExecute. При его вызове изменяется значение флага подтверждения удаленияConfirmDelete на противоположное. Для того чтобы объект переходил из выбранногов невыбранное состояние автоматически его свойство AutoCheckустановлено в True.

Объекты SortByNum, SortByAut, SortByTit, SortByLan, SortByNo категории SortBy предназначены для заданияполя БД, по которому осуществляется сортировка таблицы. Обработка всех действийосуществляется методом TMainForm.RefreshExecute. Для переходаобъекта из выбранного в невыбранное состояние автоматически его свойство AutoCheck установлено в True.

Объекты SortdirInc и SortDirDec категории SortDir предназначены для задания направления сортировки БД(по возрастанию или по убыванию). Обработка этих действий осуществляетсяметодом TMainForm.RefreshExecute. Для автоматического перехода объекта извыбранного в невыбранное состояние его свойству AutoCheckприсвоено логическое значение True.

Компонент AplicationEvents1 типа TAplicationEvents – основной обработчик событий приложения. В данномприложении на него возложена обработка события OnHint –активизация подсказки. Обработка осуществляется методомTMainForm.ApplicationEvents1Hint, где в строку состояния программыподставляется текущая подсказка приложения, которая в свою очередь берётся изсвойства Hint компонента, над которым в данное время расположенкурсор.

Компоненты ColorDialog1 типа TColorDialog и FontDialog1 типа TFontDialog предназначены длявыбора цветов и шрифтов соответственно. Они реализуют стандартные диалоговыеокна и используются в действиях OptColor и OptFont.

Компонент TMainMenu1 типа TMainMenu реализует главное меню программы. Он является контейнером для объектовтипа TMenuItem, реализующие пункты главного и выпадающего меню. Всепункты главного меню связаны с элементами списка действий ActionList1 посредством задания в их свойствах Action имёнсоответствующих объектов действий. Рассмотрим главное меню поэлементно.

1. “Файл” (объект mmFile)соответствует категории действий File и открывает выпадающее меню,содержащее следующие пункты:

· “Путь к базе данных” (объект mmDataBaseFile) связан с действием FileDataBasePath;

· “Пользователь” (объект mmUser)связан с действием FileUser;

· “Выход” (объект mmExit)связан с действием FileExit.

2. “Таблица” (объект mmTable) соответствует категории действий DataSet иоткрывает выпадающее меню, содержащее следующие пункты:

· “В начало” (объект mmFirst) связан с действием DataSetFirst;

· “Назад” (объект mmPrior) связан с действием DataSetPrior;

· “Вперёд” (объект mmNext)связан с действием DataSetNext;

· “В конец” (объект mmLast)связан с действием DataSetLast;

· “Вставить” (объект mmInsert) связан с действием DataSetInsert;

· “Удалить” (объект mmDelete) связан с действием DataSetDelete;

· “Редактировать” (объект mmUpdate) связан с действием DataSetUpdate;

· “Обновить” (объект mmRefrash) связан с действием DataSetRefrash;

· “Открыть” (объект mmOpen)связан с действием DataSetOpen;

· “Найти” (объект mmFind)связан с действием DataSetFind;

· “Найти далее” (объект mmFindNext) связан с действием DataSetFindNext;

· “Фильтр” (объект mmFilter) связан с действием DataSetFilter;

· “Показать всё” (объект mmAll)связан с действием DataSetAll;

3. “Сортировка” (объект mmSort)соответствует двум категориям действий SortBy и SortDir. Данный пункт открывает выпадающее меню, содержащее следующие пункты:

· “По номеру” (объект mmSortByNum) связан с действием SortByNum;

· “По автору” (объект mmSortByAut) связан с действием SortByAut;

· “По названию” (объект mmSortByTit) связан с действием SortByTit;

· “По языку” (объект mmSortByLan) связан с действием SortByLan;

· “Отсутствует” (объект mmSortByNo) связан с действием SortByNo;

· “По возрастанию” (объект mmSortDirInc) связан с действием SortDirInc;

· “По убыванию” (объект mmSortDirDec) связан с действием SortDirDec;

4. “Настройка” (объект mmOptions) соответствует категории действий Options иоткрывает выпадающее меню, содержащее следующие пункты:

· “Цвет” (объект mmColor) связан с действием Opt Color);

· “Шрифт” (объект mmFont)связан с действием OptFont;

· “Подтверждение удаления” (объект mmConfDel) связан с действием OptConfDel;

5. “Помощь” (объект mmHelp)соответствует категории действий Help и открывает выпадающее меню,содержащее единственный пункт “О программе” (объект mmAbout),который связан с действием HelpAbout.

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

Компонент ToolBar1 типа TToolBar является панелью инструментов и предназначен для быстрого вызоваосновных функций (действий) программы. Он содержит ряд быстрых кнопок типа TToolButton, нажатие на которые активизирует то или иное действие. Все кнопкисвязаны с определённым действием категории DataSet изсписка действий ActionList1, то есть у них в свойство Action заданыимена соответствующих объектов действий. Для того, чтобы кнопки содержалиизображения, в свойство компонент Images задано имя спискаизображений ImageList1.На панели инструментов расположены следующие кнопки:

· TBFirst связана с действием DataSetFirst;

· TBPrior связана с действием DataSetPrior;

· TBNext связана с действием DataSetNext;

· TBLast связана с действием DataSetLast;

· TBInsert связана с действием DataSetInsert;

· TBDelete связана с действием DataSetDelete;

· TBUpdate связана с действием DataSetUpdate;

· TBRefarsh связана с действием DataSetRefarsh;

· TBOpen связана с действием DataSetOpen;

· TBFind связана с действием DataSetFind;

· TBFindNext связана с действием DataSetFindNext;

· TBFilter связана с действием DataSetFilter;

· TBAll связана с действием DataSetAll.

Компонент Edit1 типа TEditпредназначен для редактирования ячеек таблицы. В основном он находится вневидимом состоянии, а становится видным, только когда фокус ввода перейдёт наопределённую ячейку таблицы. Он располагается поверх нее, и весь вводосуществляется через данный компонент. В этот компоненте прописан единственныйметод – обработчик события OnExit TMainForm.Edit1Exit. В обработчике изменяетсязначение соответствующей ячейки на новое, путём вызова ранимой процедуры, азатем обновляется вся таблица.

Компонент StatusBar1 типа TStatusBar предназначен для вывода расширенных подсказок об визуальных компонентахформы, над которыми в данный момент расположен курсор мыши.

Компонент PanelMain типа TPanelявляется контейнером для двух других панелей (объектов типа TPanel)PanelGrid, PanelMemo и разделителя Splitter1 типа TSplitter. Объект Splitter1 располагается между панелями PanelGrid и панель PanelMemo и предоставляет возможность изменять их размеры.Компонент PanelGrid в свою очередь является контейнером для таблицы DBGrid1типа TDBGrid и панели Panel2 типа TPanel,содержащей название таблицы. Компонент PanelMemo такжеявляется контейнером для редактора DBMemo1 типа TDBMemo и панели Panel1 типа TPanel, содержащей заголовокредактора.

Компонент DBMemo1 связан с мемо-полем БД Sections и предназначен для его отображения на форме. Связь между даннымкомпонентом и БД устанавливается посредством задания свойству DataSource значения DataModule1.DataSource1.

Компонент DBGrid1 связан с БД и предназначендля отображения представления VBooks на форме. Связь между данным компонентом и БДустанавливается посредством задания свойству DataSourceзначения DataModule1.DataSource1. В данном компоненте прописаны обработчики трёхсобытий OnColExit, OnDrawColumnCell и OnKeyPress. В методе TMainForm.DBGrid1ColExit при выходе из ячейки таблицы поле редактирования Edit1снова становится невидимым. В обработчике событияTMainForm.DBGrid1DrawColumnCell вместо прорисовки ячейки таблицыпрорисовывается поле редактирования Edit1 и весь ввод направляется кнему. В методе TMainForm.DBGrid1KeyPress в случае нажатия клавиши Enter фокусввода перемещается на компонент Edit1.

база файл домен сервер

5.3.3 Модуль данных DataModule1 имодуль DBUnit

Модуль данных DataModule1 типаTdataModule является контейнером для невизуальных компонентов,связанных с БД. Также он включает в себя методы для установления параметров,уровня доступа и соединения с БД, вызова хранимых процедур и фильтрации БД.Ниже рассмотрим все данные методы и объекты.

Метод TDataModule1.Connect производит соединение с БД.Сначала Определяются параметры соединения (диалект SQL, кодировкасимволов, имя и пароль пользователя, путь к базе данных), затем непосредственноосуществляется соединение.

Метод TDataModule1.InitDBParams начальную инициализациюпараметров соединения с БД и далее вызывает метод TDataModule1.Connect дляосуществления соединения. Параметры берутся из командной строки, а если ониотсутствуют, то из файла инициализации программы.

Метод TDataModule1.SetAccess осуществляет установкууровня доступа пользователя (возможность просмотра/изменения или тольковозможность просмотра данных ДБ) путём вызова хранимой процедуры IsWriter. В случае, если не возникает исключения, то пользователь обладает полнымдоступом, в ином случае – только просмотр.

Три следующих метода TDataModule1.CallInsertBook, TDataModule1.CallDeleteBook и TDataModule1.CallUpdateBook осуществляют соответственно вставку нового источника,удаления существующего источника или редактирования существующего источникапосредством вызова хранимых на стороне сервера процедур InsertBook, DeleteBook и UpdateBook.

Метод TDataModule1.SetFilter устанавливает заданныепараметры фильтрации записей БД и включает режим локальной фильтрации.

Метод TDataModule1.IsFieldContainStr проверяет, содержитли заданное поле заданную подстроку.

Объект IBTransaction1 типа TIBTransaction предназначен для осуществления транзакций БД. Онсвязывается с компонентом БД посредством задания его свойству DefaultDatabase значения IBDatabase1.

Объект IBDatabase1 типа TIBDatabase предназначен для осуществления соединений с БД. Он связывается скомпонентом транзакций посредством задания его свойству DefaultTransaction значения IBTransaction1.

Компонент IBDataSet1 типа TIBDataSet предназначен для манипулирования набором данных, получаемом посредством SQL-запросак БД. Для соединения с БД свойству компонента Databaseприсваивается имя IBDatabase1. Он связывается с компонентом транзакций посредствомзадания его свойству Transaction значения IBTransaction1. Объект имеет дваопределённых обработчика событий AfterScroll и OnFilterRecord.

Компонент IBStoredProc1 типа TIBStoredProc предназначена для вызова хранимых на сервере процедур вставки, удаленияисточников и проверки доступа. Компонент связан с объектами IBDatabase1 и IBTransaction посредством задания соответствующих свойств.

Компонент DataSource1 типа TDataSource предназначен для связи набора данных БД с таблицей БД, то есть являетсяисточником данных для таблицы MainForm.DBGrid1. Используется набор данных IBDataSet1.

5.3.4 Форма EditForm и модуль Edit

Форма EditForm представляет собой диалоговое окно, предназначенноедля задания пользователем атрибутов новой или редактируемой записи. Формаявляется контейнером для визуальных компонентов и одного невизуальногокомпонента OpenDialogArc типа TOpenDialog. Он является стандартным диалогом Delphiдля открытия файла и предназначен для выбора архива, содержащего файлыисточника.

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

Ниже рассматриваются все визуальные компоненты формы.

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

Управляющие кнопки окна представляют собой компоненты BOK иBCancel типа TbitBtn и предназначены для подтверждения (внесения в БД) илиотмены введённых в полях ввода данных. Они я являются кнопками предопределенныхтипов. Свойству Kind этих компонентов присвоены значения bkOKи bkCancel соответственно. Кнопка BOK генерируетрезультат закрытия формы mrOK, а BCancel mrCancel, которые обрабатываются всоответствующих процедурах.

На панели Panel2 располагаются GroupBoxData типа TGroupBox, GroupBoxSection типа TGroupBox, RadioGroupSource типа TRadioGroup и GroupBoxPath типа TGroupBox.

Компонент GroupBoxData предназначен длявыделения компонентов ввода параметров источника и является контейнером длякомбинированных списков ввода параметров (типа TComboBox) иметок к ним (типа TLabel): ComboBoxAut и LabelAut – автор источника, ComboBoxTit и Labeltit – название источника, ComboBoxLan и LabelLan – язык источника.

Компонент GroupBoxSource предназначен длявыделения поля ввода/редактирования тем, связанных с источником, Memo1типа TMemo и является контейнером для него.

Компонент RadioGroupSource предназначен длявыбора физического расположения файлов источника (дисковый каталог, файл архиваили одиночный файл).

Компонент GroupBoxPath предназначен длявыделения компонентов ввода путей к файлу (файлам) источника и являетсяконтейнером для меток к полям редактирования типа TLabel, полейввода типа TEdit и кнопок типа TBitBtn дляактивизации диалогов поиска элементов ввода.

5.3.5 Форма DeleteForm и модуль Delete

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

Компонент Bevel1 типа TBevelпредназначен для выделения каймой изображения и текста. Компонент Image1типа TImage выводит на форму изображение для большей наглядностидиалогового окна. Компонент Label1 типа TLabel представляет собой вопросдиалогового окна. Компонент BNo и BYes типа TBitBtn являются управляющими кнопками окна и предназначены дляподтверждения или отмены удаления.

5.3.6 Форма FindForm и модуль Find

Форма FindForm представляет собой диалоговое окно, предназначенноедля задания атрибутов поиска записи в БД. Форма является контейнером для рядавизуальных компонентов. В данном компоненте определён обработчик события OnDeactivate – метод TFindForm.FormDeactivate, в котором, в случае заданияпользователем, производится поиск записи стандартным методом Locate.

Форма делится на две части панелями Panel1и Panel2 типа TPanel. На объекте Panel1расположены управляющие кнопки BOK и BCancel типа TBitBtn, предназначенные для начатия поиска или его отмены.На панели Panel2 расположены компоненты групп gbValue и gbParam типа TGroupBox. В группу gbValue включены поляредактирования типа TEdit и метки к ним типа Tlabel длязадания искомых значений. Поле EditNum и метка LabelNum служат для задания номераисточника, поле EditAut и метка LabelAut – задание автора, поле EditTit и метка LabelTit – задание названия, поле EditLan и метка LabelLan– задание языка, поле EditSec и метка LabelSec – задание темы. В группу gbParam включены переключатели с независимой фиксацией типа TCheckBox: CheckBoxCase, предназначенный для задания поиска с учётом регистрасимволов, и CheckBoxSubStr, предназначенный для задания поиска с учётомподстрок.

5.3.7 Форма FilterForm и модуль Filter

Форма FilterForm представляет собой диалоговое окно, предназначенноедля задания атрибутов фильтрации записи в БД. Форма является контейнером дляряда визуальных компонентов. В данном компоненте определён обработчик события OnDeactivate – метод TFindForm.FormDeactivate. В котором, в случае заданияпользователем, производится установка фильтра при помощи вызова методаDataModule1.SetFilter.

Форма делится на две части панелями Panel1и Panel2 типа TPanel. На объекте Panel1расположены управляющие кнопки BBOK и BBCancel типа TBitBtn, предназначенные для задания начала фильтрации иливыхода из диалогового окна. На панели Panel2 расположены компонент групп GBFilterValue и независимый переключатель CBCase типа TCheckBox, задающий необходимость поиска с учётом регистра символов. В группу GBFilterValue включены поля редактирования типа TEdit и метки кним типа TLabel для задания допустимых значений. Поле EditAut и метка LabelAut предназначены для задания автора, поле EditTit и метка LabelTit – задание названия, поле EditLan и метка LabelLan– задание языка, поле EditSec и метка LabelSec – задание темы.

5.3.8 Форма DirSourceForm и модуль DirSource

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

Компонент Bevel1 типа TBevelпредназначен для выделения каймой списка и дерева каталогов. Компонент BNo иBYes типа TBitBtn являются управляющими кнопками окна и предназначеныдля подтверждения или отмены выбора каталога.

5.3.9 Форма PathForm и модуль Path

Форма PathForm представляет собой диалоговое окно, предназначенноедля задания сетевого пути к файлу БД. Форма является контейнером для рядавизуальных компонентов. В данном компоненте определёны обработчики события OnActivate – метод TPathForm.FormActivate и OnDeactivate – методTPathForm.FormDeactivate. В первом методе, производится установка начальныхзначений полей редактирования, а во втором попытка соединится с новым файломБД. Форма делится на две части панелями Panel1и Panel2 типа TPanel. На объекте Panel1расположены управляющие кнопки BBOK и BBCancel типа TBitBtn, предназначенные для задания нового пути или выходаиз диалогового окна. На панели Panel2 расположены компоненты поля редактирования с меткамитипа TLabeledEdit leServer, предназначенный для вводаимени сервера, и leFile, предназначенный для ввода локального пути к файлу БДна сервере.

5.3.10 Форма UserForm и модуль User

Форма UserForm представляет собой диалоговое окно, предназначенноедля задания имени пользователя БД. Формаделится на две части панелями Panel1 и Panel2 типа TPanel. На объекте Panel1расположены управляющие кнопки BBOK и BBCancel типа TBitBtn, предназначенные для задания нового пользователя иливыхода из диалогового окна. На панели Panel2 расположены компоненты поляредактирования с метками типа TLabeledEdit leUser, предназначенный для вводаимени пользователя, и lePass, предназначенный для ввода пароля пользователя.

5.3.11 Форма AboutBox и модуль About

Форма AboutBox представляет собой окно, выводящее информацию опрограмме: название приложения (метка ProductName типа TLabel),версия приложения (метка Version типа TLabel), дата создания приложения (метка Dataтипа TLabel), авторские права на приложение (метка Copyright типа TLabel), разработчик (метка Comments типа TLabel).Также форма снабжена изображением ProgramIcon типа TImageи кнопкой закрытия окна BitBtnOK типа TBitBtn. Все компоненты, кроме кнопки располагаются на панелиPanel1 типа TPanel.


5.3.12 Модуль Files

Модуль Files содержит подпрограммыманипулирования файлами. Функция CopyFiles производит копированиефайлов при помощи вызова функции WinAPI SHFileOperation. Процедура DeleteFileExt удаляет расширение вимени файла. Функция DeleteFiles производит удаление файлов при помощи вызова функции WinAPI SHFileOperation. Функция ExtractFileLastDir возвращает каталогнижнего уровня для заданного полного пути файла. Функция GetNewArcNameпроизводит поиск нового имени для архива в указанном каталоге в том случае,если уже существует архив с заданным именем. Функция OpenFile открываетзаданный файл с помощью зарегистрированных в системе для данного типа файловсредств, это осуществляется путём вызова функций WinAPIFindExecutable и ShellExecute. Функции PackFiles и UnPackFilesвыполняют соответственно упаковку и распаковку файлов при помощи архиватора WinRAR(необходимо его наличие в системе). Функция RunApp запускаетприложение на выполнения при помощи функции WinAPICreateProcess, в частности при помощи данной функции выполняется запускархиватора WinRAR.


/>/>/>/>/>6.ЭКОНОМИЧЕСКАЯ ЧАСТЬ

6.1Предметная область базы данных и её разработка

В данной дипломной работе разработана удалённая база данных иприложение-клиент для доступа к электронным источникам литературы, содержащихсяна жёстком диске сервера предприятия в виде файлов и пакетов фалов (текстовыхдокументов различных типов, гипертекста HTML, исполняемых файлов и др.). Архитектура клиент-сервер,используемая при реализации поставленной задачи на данный момент являетсянаиболее прогрессивной. Она даёт возможность разделить задачу на две подзадачи:разработка собственно удалённой базы данных, физически расположённой на сервереи управляемой СУБД, и приложения, осуществляющего доступ к данной базе данныхпри помощи SQL-запросов и располагающееся нарабочих станциях пользователей сети. При такой реализации нагрузка такжераспределяется между сервером и рабочими станциями, что позволяет увеличитьскорость работы программы.

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

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


/>/>/>/>/>6.2 Разработка сетевого графика работ проведения НИР

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

· Оценки текущего состояния ипредсказание дальнейшего хода работ;

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

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

Для событий:

а) ранний срок свершения событий />(j)

/>,

где /> -время совершения работ i, j;

б) поздний срок совершениясобытия — минимально допустимый срок совершения относительно исходного события

/>

в) резерв времени события

/>.


Для работ:

а) сроки начала и окончания работ

· раннее начало/>

· раннееокончание />

· позднееокончание />

· позднееначало />

б) резерв работ

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

/>

· частныйрезерв первого рода – это запас времени, которым можно располагать впредположении, что события свершились в поздние сроки

/>

· частныйрезерв второго рода — это запас времени, которым можно располагать впредположении, что события свершились в ранние сроки

/>

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


/>

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

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

Таблица 6.1. — Перечень событий иработ по выполнению дипломной НИР

Код

Наименование

события

Код

Наименование

работы

Кол.

испол

/>

/>

/>

 

Назначен руководитель дипломной работы 0-1 Определение темы дипломной работы. Выдача задания на диплом 2 1 3 2

 

1 Задание на диплом получено 1-2 Подбор и проработка научной литературы 1 3 5 4

 

2 2 Подобрана и проработана научная литература 1-3 Проработка технической литературы 1 2 4 3 3 Проработана техническая литература в отделе 2,3-4 Аналитическое исследование проблемы 2 2 4 3

 

4 Аналитическое исследование 4-5 Написание обзорной части диплома 1 1 1 1

 

5 Аналитический обзор 4-6 Построение реляционной модели 1 5 7 6

 

6 Реляционная модель построена 6-7 Разработка БД 1 10 14 12

 

7 Изучение существующих алгоритмов 7-8 Подготовка базы для построения нового алгоритма 1 17 19 18

 

8 Построение алгоритма 8-9 Внесение изменений в алгоритм 1 5 7 6

 

9 Модификация алгоритма 9-10 Написание программы 1 6 6 6

 

10 Отладка программы на IBM PC 10-11 Проведение тестирования программы 1 4 8 6

 

11 Анализ результатов 11-12 Систематизация результатов 1 9 13 11

 

12 Написан текст пояснительной записки 11-13 Написания текста пояснительной записки к дипломной работе 1 1 2 1

 

13 Плакаты изготовлены 12,13-14 Изготовление плакатов 2 1 3 2

 

14 Защита дипломной работы 13-15 Подготовка к защите

 

/>/>/>/>/> 


/>

6.3 Расчет сметы затрат на проведение НИР

Выяснимзатраты на выполнение НИР, необходимые для открытия финансирования.

Представим в таблице 6.2 смету затрат при выполнении НИР.

Таблица 6.2 — Смета затрат на НИР.

N Статьи расходов Сумма 1 Фонд заработной платы (ФЗП) 1445 2 Отчисления на соц. страхование (37,5% от ФЗП) 296,25 3 Стоимость потребляемых материалов 32.5 4 Затраты на научные командировки - 5 Затраты на работы, которые выполняются сторонними организациями, предприятиями - 6 Прочие расходы 60 7 Накладные расходы (40% от ФЗП) 316

Итого затрат: 2149,75

Таблица 6.3 — Штатное расписание.

№ Состав исполнителей Часовая ставка, грн

Кол-во

часов

Сумма зарплаты,

Грн

1 Руководитель работы 5 26 130 2 Дипломник (инженер) 2 650 1300 3 Рецензент 5 3 15 ИТОГО 1445

Таблица 6.4 — Стоимость потребляемых материалов.

N Наименование материалов Цена единицы Количество Сумма 1 Папка бумаг для записи 15 1 шт. 15 2 Ватман 1.5 5 шт. 7.5 3 Катридж для принтера 14,22 1 шт. 14,22 4 Дискета 3 1 шт. 3

Итого:  39.72 гр.

ВЫВОД:

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


7. ОХРАНА ТРУДА

7.1Общие вопросы охраны труда

Охрана труда представляет собой систему законодательныхактов, социально-экономических, организационных, технических,санитарно-гигиенических и лечебно-профилактических мероприятий и средств,обеспечивающих безопасность, сохранение здоровья и работоспособности человека впроцессе труда. 25 ноября 1992 года принят Закон Украины «Об охране труда».Этот закон определяет основные положения по реализации конституционного праваграждан на труд, охрану труда, охрану их жизни и здоровья, регулируетвзаимоотношения между работниками и администрацией по вопросам охраны труда ираспространяется на все виды деятельности. В Украине законодательство по охранетруда состоит из Закона “Об охране труда”, Кодекса законов о труде и другихнормативных актов. [11].

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

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

В таблице 7.1 приведен перечень опасных и вредныхпроизводственных факторов, а также источники их возникновения, имеющихся вусловиях эксплуатации вышеперечисленного аппаратного обеспечения в соответствиис ГОСТ 12.0.003-74* [12].

Таблица 7.1 – Перечень вредных и опасных производственныхфакторов

Наименование

фактора

Источник

Возникновения

Характер

Воздействия

Нормируемый

Параметр и нормативное значение

Нормативный документ 1 2 3 4 5 6 1 Пожароопасность помещения Наличие сгораемых материалов (рабочий стол, стул, изоляция, бумага и др.) и источников возгорания Вредный Категория взрыво-и пожароопасности «В»

[13],

[14],

[15],

[30]

2 Неудовлетворительные параметры микроклимата Неудовлетворительное состояние отопительной и вентиляционной системы, отсутствие кондиционирования Вредный

Относительная влажность ψ[%], скорость движения воздуха V[м/c], температура воздуха t[0C].(таблица 7.2)

[16] 3 Недостаточная освещённость (естественная и искусственная), прямая и отраженная блесткость Неправильное расположение рабочего места, недостаточное количество ламп, Вредный

/>,

(таблица 7.3)

[17] 4 Повышенный уровень шума Работа принтера, вентиляции, систем охлаждения ЭВМ Вредный

Уровень звука

50дБА

[18] 5

Повышенный

потенциал

электростатического поля

Монитор,

диэлектрические поверхности

Вредный Напряжённость электрического поля Е = 20 кВ/м [19] 6 Электромагнитные поля Компьютер Вредный

Напряжённость электрического

поля Е = 20 В/м, напряжённость магнитного поля

Н = 5 А/м

[20] 7

Рентгеновское

излучение

Компьютер Вредный Мощность экспозиционной дозы на расстоянии 5 см от экрана не менее 100мкР/ч [21] 8

Ионизация

воздуха рабочей зоны

Рентгеновское

излучение монитора, статическое электричество

Вредный

Содержание ионов

/>

в />,

/>

в />

[22] 9

Поражение

электрическим

током

Питающая электрическая цепь Опасный

Напряжение прикосновения Uпр=2В,

допустимый ток I=0.3A

[23] 10

Психофизиологические

нагрузки (пульсация изображения на экране монитора)

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

Частота обновления экрана (h = 85 Гц при разрешении 800/>600 точек), общее время работы за ВДТ />4 часа за смену.

[21]

/>/> 

7.2Производственная санитария

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

Поскольку научно – исследовательская работа относитсяк легким физическим работам, но характеризуется напряженным умственным трудом,то руководствуясь [16], выбирают оптимальные параметры микроклимата. По энергозатратаморганизма, проведение научно исследовательской работы относится к категории Ia(легкой), так как работа исследователя производится сидя, не требуетсистематического физического напряжения или поднятия и переноса тяжестей(расход энергии при выполнении работы до 139 Вт).

К основным показателям, характеризующим метеорологические условияв закрытых производственных помещениях (микроклимат) относятся: температуравоздуха, [0С]; относительную влажность воздуха, [%]; скоростьдвижения воздуха, [м/с].

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


Таблица 7.2–Допустимые и оптимальные значения параметровмикроклимата

Категория работ по тяжести Период года

Температура, 0С

Относительная влажность, % Скорость движения воздуха в помещении, м\с Постоянные рабочие места Непостоянные рабочие места Допустимые значения параметров 1а Холодный 19 – 25 17 – 23 75 не более 0.1 1а Теплый 21 – 27 19 – 29 55 0.1 – 0.2 Оптимальные значения параметров 1а Холодный 22 – 24 20 – 22 40 – 60 0.1 1а Теплый 23 – 25 21 – 27 40 – 60 0.1

Обеспечение условий, приведенных в таблице 7.2, в теплыйпериод года должно выполняться при помощи кондиционера. В холодный период годаобмен воздуха осуществляется с помощью кондиционера и централизованноговодяного отопления согласно СНиП 2.04.05.-93 [24].

/>/>/>/>/>

Рисунок 7.1 – Схема расположения кондиционера и направленияхолодного воздуха

Поток холодного воздуха от кондиционера направленнепосредственно на аппаратуру, а не на оператора ЭВМ.

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

Состояние освещения производственных, служебных и вспомогательныхпомещений регламентируется СНиП ІІ–4–79 [17]. В светлое время используетсябоковое одностороннее естественное освещение, а в темное время суток –искусственное. Искусственное освещение по функциональному значению – рабочее,по способу расположения источников света – общее равномерное, так каксветильники расположены в верхней зоне помещения равномерно.

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

Таблица 7.3 Характеристики зрительных работ

Точность

зрительных

работ

Наименьший

размер

объекта

различения

Разряд зртельных работ

Подразряд

зрительных. работ

Контраст объекта различения с фоном Характер фона

Нормируе–мое

значение

Ест

eIVH [%]

Иск

EMIN<sub/>[Лк]

работа средней точности 0.3 – 0.5 III в средний светлый 1.53 300

Согласно СНиП II-4-79[17] для выбранного объекта различения, фона и контраста объекта различения сфоном минимальное значение освещенности будет равно 300 Лк.

Естественное освещение рабочих мест – боковое, значениекоэффициента естественной освещенности (КЕО):/>.

При пересчете КЕО для условий города Харькова (IV пояс светового климата) воспользуемсяформулой:


/>

где m —коэффициент светового климата;

c — коэффициент солнечного климата.

Для IVсветового пояса выбираем m =0.9. Исходя из ориентации окон по сторонам света c = 0.85. Тогда />.

В соответствие с ДНАОП [21] нормативный показатель КЕО долженбыть не менее 1,5%.

В качестве источников света используются люминесцентные лампымощностью 40 Вт или энергоэкономные мощностью 36 Вт типа ЛБ, ЛХБ, ЛЕЦ какнаиболее эффективные и приемлемые с точки зрения спектрального состава,цветовая температура излучения которых находится в диапазоне 3500-4200 К.

Для освещения помещения применяются светильники серии ЛП013,ЛП031, ЛП033 исполнение 001 и 006, ЛС002, ЛС004, с металлической экранирующейрешеткой и непрозрачными боковинами.

Шум является одним из наиболее распространенных впроизводстве вредных факторов. При длительном воздействии шума человек быстроустает, раздражается, происходит перенапряжение слуховых анализаторов. Всоответствии с ГОСТ 12.1.003-83* [18] и ДНАОП 0.03-3.14-85[25] в вычислительныхцентрах эквивалентные уровни звука не должны превышать 50 дБА. Согласно ГОСТ12.1.012-90 [26] уровень вибрации для категории II, тип в, в условиях «комфорта» не должна превышать 75 дБ. Дляуменьшения уровня звука и вибрации применяются демпфирующие материалы (отсекпринтера с печатающей головкой закрывается крышкой, используется резиноваяпрокладка между принтером и столом).

Нормируемые параметры шума выбираются согласно [26]:

а) уровни звукового давления, дБ, в октавных полосах со среднегеометрическимичастотами;

б) уровень звука равен 50 дБА.

Основным источником электромагнитного излучения, в томчисле рентгеновского, в помещении являются электронно-лучевые трубки (ЭЛТ) мониторов.Согласно ДНАОП 0.00-0.31-99 [21] мощность экспозиционной дозы рентгеновскогоизлучения трубки в любой точке перед экраном на расстоянии 5 см от его поверхности не должна превышать 100 мкР/ч. Защита пользователей ЭВМ от ЭМИ ирентгеновского излучения обеспечивается с помощью экранов из специальногозатемненного стекла.

Нормы ЭМИ для диапазона частот 15-25 кГц по электрическойсоставляющей Е не должны превышать 50В/м, по магнитной составляющей Н – 5А/м[21].

Однако требования ТСО’95 более жесткие. Например, нормы Е и Нв том же диапазоне частот равны значениям 1 В/м и 20 мА/м.

Допустимые уровни напряженности электростатическогополя на рабочем месте оператора, согласно ГОСТ 12.1.045-84 [19], не должны превышать20 кВ/м. В помещениях для предотвращения образования статического электричестваи защиты от него должны иметься нейтрализаторы и увлажнители воздуха, полдолжен иметь антистатическое покрытие, а также необходимо делать заземлениеэкрана дисплея.

Рентгеновское излучение и статическое электричество вызываетионизацию воздуха с образованием положительных ионов, считающихся неблагоприятнымидля человека. Норма содержания легких аэроионов обоих знаков от 1500 до 5000 в1 см3 воздуха [22]. Мероприятиями по снижению количества ионов ввоздухе являются увлажнение воздуха и проветривание помещения.

Для уменьшения воздействия рентгеновского излучения иЭМИ экран снабжен специальным покрытием, снижающим уровень этого излучения.Также снижение интенсивности электромагнитного и рентгеновского излученийдостигается сокращением времени облучения: общее время работы не должнопревышать 4ч за смену, длительность перерыва для отдыха должна составлять от 5до 15 минут. Общий перерыв через 4 часа. Дополнительный перерыв через 3 часа иза 2 часа до окончания работы.

/>/>/>7.3 Техника безопасности

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

Согласно ДНАОП 0.00 – 1.31 –99 [21] при проектировании системэлектроснабжения, при монтаже силового электрооборудования и электрическогоосвещения и в зданиях и помещениях для ЭВМ необходимо придерживаться требованийнормативно-технической документации.

ПЭВМ является однофазным потребителем электроэнергии, питающейсяпеременным током напряжением 220В и частотой 50Гц, от сети с заземленнойнейтралью. По способу защиты человека от поражения электрическим током ЭВМдолжно соответствовать первому классу защиты согласно ГОСТ 12.2.007.0-75 [27].Защиту от случайного прикосновения к токоведущим частям обеспечиваютконструктивные, схемно-конструктивные и эксплуатационные меры защиты. Комплекснеобходимых мер по электробезопасности определяется, исходя из видовэлектроустановки, ее номинального напряжения, условий среды, типа помещения идоступности электрооборудования.

По степени опасности поражения электрическим током помещениеотносится к помещениям без повышенной опасности, в соответствии с ПУЭ-87[28].

В ПУЭ-87[28] предусмотрены следующие мерыэлектробезопасности:

1.Конструктивные меры

IBM PC относится к электроустановкам до 1000В закрытого исполнения,все токоведущие части находятся в кожухах. В соответствии с ГОСТ 14255-69 [19]и ПУЭ-87[18] выбираем степень защиты персонала от соприкосновения стоковедущими частями внутри защитного корпуса и от попадания воды внутрькорпуса – IP-44.

2.Схемно-конструктивные меры

Схемно-конструктивные меры электробезопасности обеспечиваютбезопасность прикосновения человека к металлическим нетоковедущим частямэлектрических аппаратов при случайном пробое из изоляции и возникновенияэлектрического потенциала на них. В качестве схемно-конструктивной меры безопасностипредусматривается зануление [19].Кроме того, используется двойная изоляциямонитора и малые напряжения (менее 42 В).

Нулевой защитный проводник соединяет зануляемые части сглухозаземленной нейтральной точкой обмотки источника тока или ее эквивалентом.Линия электросети для питания ЭВМ и периферийной техники выполняется какотдельная групповая трехпроводная сеть, путем прокладки фазового, нулевогорабочего, нулевого защитного проводников [19]. Нулевой защитный проводникпрокладывается от группового распределительного щита к розеткам питания. Недопускается подключение на щите к одному контактному зажиму нулевого защитногопроводников. Конструкция штепсельных соединений электророзеток должнаобеспечить более раннее подсоединение нулевого защитного проводника по сравнениюс фазовым нулевым рабочим. Площадь сечения нулевого рабочего, нулевогозащитного проводников должна быть не меньше плошади сечения фазовогопроводника. Все проводники должны соответствовать номинальным параметрам сети инагрузки, условиям окружающей среды, типам аппарата защиты и другим требованиям[18]. Подключение ЭВМ к обычной двухпроводной сети, в том числе сиспользованием переходных приспособлений недопустимо. При расположении впомещении до пяти ЭВМ по его периметру разрешается положить трехпроводниковыйкабель в оболочке из несгораемого и трудносгораемого материала безметаллических труб. Если имеется свыше 5 компьютеров то кабель прокладывают вметаллических трубах и гибких металлических рукавах с отводами. Если ЭВМразмещены в центре помещения электросеть прокладывается в каналах или подсъемным полом в металлических трубах и гибких металлических рукавах.

Произведем расчет зануления в соответствии с требованиями[28].

Схема электроснабжения зануляемой электроустановкипредставлена на рисунке 7.2.

/>

Рисунок 7.2 – Схема электроснабжения зануляемойэлектроустановки

где

ТрU1/U2 – трансформатор масляный понижающий, U2=0.4кВт;

схема соединения обмоток – звезда-звезда;

СШ – сборная шина;

РЩ – распределительный щит;

А.З. – аппарат защиты;

L1 – длина участка сети от распределительного щита доэлектроустановки, не более 100 м;

L2 – длина участка сети от понижающего трансформатора дораспределительного щита, не более 500 м;

R0– сопротивление заземлителя нейтральной точки;

Р1 – мощность потребителя (однофазной установки);

Р2 – мощность потребителей без учета подключенноймощности Р1.

Р3 – мощность всех потребителей, подключенных коднофазному проводу;

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

L1=90 м; L2=500 м; Р1=250 Вт; P2=4000 Вт, P3 = P1 + P2 = 4000 Вт + 250Вт = 4250 Вт.

Материал жилы – медь, способ прокладывания:

1-й участок – в металлической трубе;

2-й участок – в земле.

Произведем расчет автомата отключения для мощностей P2 и P3.

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

1) Выбор типаавтоматического выключателя.

1а) Определение тока, питающего электроустановки мощностью Р2= 5000 Вт:

I1=Р2/UФ=4000/220=18.1818 А.

где Р2 – мощность потребителей без учета мощностиР1;

Uф – фазное напряжение (220 В);

1б) Определение расчетной величины тока срабатываниязащитного аппарата:

Iрасч=(Кп/Кт)*I1=(3/2.5)*18.1818=21.816 А.

где Кп=3 – коэффициент кратности пускового тока;

Кт=2.5 – коэффициент тяжести пускаэлектроустановки (зависит от времени пуска: t = 5 с, пуск легкий).

1в) Выбор типа автоматического выключателя и определениевеличины тока срабатывания аппарата защиты:

Iном=40 А; тип автоматического выключателя А3713Б.

2) Определение токакороткого замыкания фазы на корпус электроустановки:

Iкз=Uф/((Zтр/3)+Zпфн).

Zтр – сопротивление обмотки трансформатора;

Zпфн – сопротивление петли фаза-ноль.

2а) Определение полного сопротивления трансформатора.

Выбираем мощность силового трансформатора Nтр. Для масляного трансформатора при схемесоединения обмоток звезда-звезда и напряжении на первичной обмотке до U = 6-10 кВ:

Nтр = f(Р3)= 4*Р3.

Nтр=4*Р3=4*4250=17 кВт.

Выбираем сопротивление обмоткитрансформатора

Zтр=f (Nтр) = 3.11 Ом.

2б) Определение сопротивления фазного проводника:

На участке 1:

Rф1=/>*L1/Sф1, где />=0.018Ом*мм2/м.


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

Sф1 =4 мм2; Rф1=0.018*90/4=0.405Ом.

На участке 2:Sф2=25 мм2, учитывая, что I2=Р3/Uф=4250/220=19.318 А;

Rф2=0.018*500/25=0.36 Ом.

2в) общего фазного

Rф=RФ1+RФ2=0.405+0.36=0.705 Ом.

2г) Определение сопротивления нулевого провода.

Согласно требованиям ДНАОП 0.00 – 1.31 – 99 [21], площадьсечения нулевого рабочего и нулевого защитного проводников в однофазной 3-хпроводной сети должны быть равны:

Sн1=Sф1=4 мм2; Sн2=Sф2=2 мм2; Rнз=Rф=0.705 Ом.

где Rнз – нулевое защитное сопротивление.

2д) Определяем полное сопротивление петли фаза-нуль Zпфн и ток короткого замыкания назамкнутый корпус Iкз:

/>,

где x –сопротивление взаимоиндукции и индуктивного сопротивления.

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

Zпфн=Rф+Rнз=0.705+0.705=1.41 Ом;

Iкз=Uф/((Zтр/3)+Zпфн)=220/(3.11/3+1.41)=89.9182 A.


3) Проверка выполнения условий надежности работы зануления.

3а) Должно выполняться условие Iкз ³ к*Iном, где к=3 – коэффициент запаса защитыпри защите автоматическими выключателями.

89.9182 ³ 1.3*40=56 А – условие выполняется.

3б) Потери напряжений Uп1 на 1-м и Uп2 на 2-м участках не должны превышать22 В.

Uп1+Uп2/>22 В;

Uп1=I1*Rф1=18.818*0.405=7.3629;

Uп2=I2*Rф2=19.318*0.36=6.9545 В;

Uп1+Uп2=7.3629+6.9545=14.3174£22 В – условие выполняется.

Вывод: Для обеспечения отключения электроустановки в короткоевремя необходимо использовать автоматический выключатель А3713Б; на первомучастке сети (от распределительного щита до электроустановки) – нулевойзащитный провод сечением Sн1=4 мм2; на втором участкесети (от понижающего трансформатора до распределительного щита) нулевойзащитный провод сечением Sн2=25 мм2.

/>/>/>7.4Эксплутационные меры

Необходимо соблюдать правила техники безопасности при работес высоким напряжением и следующие меры предосторожности:

– монтаж, обслуживание, ремонт и наладка ЭВМ, замена деталей,приспособлений и блоков должна осуществляться только при полном выключении питания;

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

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

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

7.5Пожарная безопасность

Согласно с требованием ГОСТ 12.1.004-91 [30] пожарная безопасностьобеспечивается следующими нормами:

– системой предотвращения пожаров;

– системой пожарной защиты;

– организационными мероприятиями по пожарной безопасности.

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

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

1) использование электрооборудования, соответствующего классупожароопасной зоны П-IIa,для которой степень защиты оболочки электрооборудования должна быть не менее IP-44, степень защиты светильников IP-23 [29];

2) молниезащита зданий, сооружений и оборудования (дляусловий города Харькова со средней грозовой деятельностью 20 часов в год иболее установлена III категориямолниезащиты). Молниеотвод выполнен в соответствии с требованием [31];

3) обеспечение защиты от короткого замыкания;

4) применение заземления экрана для стока статическогоэлектричества и др.

Помещение, в котором выполнялась дипломная работа,расположено на четвертом этаже шестиэтажного здания. В ней находится 4 компьютера.Размеры комнаты: длина-8м, ширина-5м, высота-4,2м. Общая площадь составляет 40 м2, что соответствует требуемым нормам ДНАОП 0.00-1.31-99 [21], согласно которым наодно рабочее место должно приходится не менее 6,0 м2.

По категории взрыво- и пожароопасности согласно ОНТП-86[13]данное помещение относится к категории В – пожароопасное из-за твердых сгораемыхматериалов (рабочие столы, бумага, изоляция и др.). Исходя из категории пожароопасностии этажности здания, степень огнестойкости здания II согласно ДБНВ 1.1 – Захист від пожежі. Пожежнабезпека об’єктів будівництва[14] и СНиП 2.09.02-85[15].

При выборе средств тушения пожара для обеспечениябезопасности человека от возможного поражения электрическим током в помещениипредусмотрено использовать углекислотные огнетушители ОУ-2 емкостью 2 литра.Огнетушители находятся на видном и легко доступном месте (см. табл.7.4). Привозникновении пожара предусмотрена возможность сообщения в пожарную охрану по телефону.

В системе пожарной защиты предусмотрены следующие меры:

1. Система автоматической пожарной сигнализации оснащенадымовыми сигнализаторами.

2. Помещение оснащено углекислотными огнетушителями – ОУ-2.

3. Для успешной эвакуации персонала двери помещения имеют следующиеразмеры:

– ширина не менее 1.5 м;

– высота не менее 2.0 м.

Ширина коридора 1.8 м. Рабочее помещение должно иметь двавыхода. Расстояние от наиболее удаленного рабочего места не должно превышать 100 м.

Таблица 7.4 – Перечень первичных средств пожаротушения,обязательных в вычислительном центре

Площадь, кв.м. Первичные средства пожаротушения (тип, наименование) Количество, шт. Огнегасящий эффект 40

углекислотные огнетушители и ручные ОУ-2,

войлок, кошма, асбест, песок

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

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

7.6Охрана окружающей среды

25 июня 1991 года принят Закон Украины «Об охране окружающейприродной среды» (редакции Закона 1993,1996 гг) [32]. Закон определяетправовые, экономические, социальные основы охраны окружающей среды.

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

При массовом производстве мониторов нельзя не учитывать ихвлияние на окружающую среду на всех стадиях их «жизни» — при изготовлении, эксплуатации,окончания срока службы. Сегодня действуют экологические стандарты, которыеопределяют требования к производству и материала. Они не должны содержатьфреонов, хлоридов и бромидов (BS7750, TCO-95, TCO-99).

В стандарте ТСО-99 допускается ограничение использованиякадмия в светочувствительном слое экрана дисплея и ртути в батарейках. Аппараты,тара и документация должны допускать нетоксичную переработку послеиспользования. Международные стандарты, начиная с ТCO-92, включают требования пониженного электропотребления иограничивают допустимые уровни мощности потребляемой энергии в неактивном режиме.

Работа на ПК типа IBM PC\AT не оказывает вредного воздействияна окружающую среду. После истечения срока службы он полностью подлежитвторичной переработке. Необходимо внедрить на производстве стандарт ISO – 14001 [33], который определяеттребования к организации производственного процесса с минимальным ущербом, дляокружающей природной среды.

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


8. ГРАЖДАНСКАЯ ОБОРОНА

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

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

Систему гражданской обороны составляют:

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

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

- силы и средства,предназначенные для исполнения задач ГО;

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

- системы связи,оповещения и информационного обеспечения;

- Центральный органисполнительной власти по вопросам чрезвычайных ситуаций и по делам защитынаселения от последствий Чернобыльской катастрофы;

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

- службы ГО.

Основными задачами гражданской обороны Украины являются:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

После выполнения поставленных задач подразделения выводятся врайон постоянного расквартирования.

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

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

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

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

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

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

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


ВЫВОД

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

Базаданных была разработана и функционирует под управлением СУБД InterBase, одного из наиболее популярных, функциональных и надёжных серверов базданных в мире. Клиентское приложение разработано при помощи средыпрограммирования Borland Delphi 7.0, представляющей из себямощное и современное средство для разработки приложений в архитектуреклиент-сервер.

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

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

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


СПИСОК ССЫЛОК

1. Дейт К. Дж. Введение всистемы баз данных – М.: Издательский дом “Вильямс”, 2001. – 1072 с.

2. Атре Ш. Структурныйподход к организации баз данных – М.: Финансы и статистика, 1983. – 317с.

3. Кузнецов С.Д. Основысовременных баз данных — www.citforum.ru/database/osbd/contents.shtml

4. Кириллов В. В. Основыпроектирования реляционных баз данных — www.citforum.ru/database/dbguide/index.shtml

5. Пушников А. Ю. Введениев системы управления базами данных — www.citforum.ru/database/dblearn/index.shtml

6. Грабер М. Введение в SQL –М.: Лори, 1996. – 380 с.

7. Ковязин А., Востриков С.Мир InterBase. Архитектура, администрирование и разработкаприложений баз данных в InterBase/Firebird/Yaffil – М.: КУДИЦ-ОБРАЗ, 2002. – 432 с.

8. Гофман В. Э., ХомоненкоА. Д. Delphi 6 – СПб.: БХВ-Петербург, 2001. – 1152 с.

9. Канту М. Delphi6 для профессионалов – СПб.: Питер, 2002. – 1088 с.

10. Культин Н. Б.Программирование в Turbo Pascal 7.0 и Delphi– СПб.: БХВ-Петербург, 1997. – 240 с

11. ЗаконУкраины об охране труда от 25.11. 1992г.

12. ГОСТ12.0.003 – 74* ССБТ. Опасные и вредные производственные факторы. Классификация.– Введ. 01.01.76.

13. ОНТП 24 – 86. Общесоюзные нормы технологического проектирования.Определение категорий зданий и сооружений по взрывопожарной и пожарнойопасности. – М.: Стройиздат, 1987. – 128 с.

14.ДБНВ 1.1 – Захист відпожежі. Пожежна безпека об’єктів булівництва, 2002 –41с.

15. СНиП 2.09.02 – 85. Строительные нормы и правила. Производственныездания промышленных предприятий. Нормы проектирования. – М: Стройиздат, 1986.

16. ГОСТ 12.1 005 – 88*. ССБТ. Общие санитарно-гигиенические требования квоздуху рабочей зоны. – Введ. 01.01.89.

17. СНиП. II – 4 – 79. Строительные нормы иправила. Естественное и искусственное освещение. Нормы проектирования. – М.:Стройиздат, 1980. – 110 с.

18. ГОСТ 12.1.003 – 83*. ССБТ. Шум. Общие требования безопасности. –Введ.01.07.84.

19. ГОСТ 12.1.045 – 84. ССБТ. Электростатические поля. Допустимые уровнина рабочих местах и требования к проведению контроля. – Введ.01.01.85.

20. ГОСТ 12.1.006 – 84.ССБТ. Электромагнитные поля радиочастот.Допустимые уровни на рабочих местах и требования к проведению контроля. –Введ.01.01.85.

21. ДНАОП 0.00 – 1.31. – 99 Правила охраны труда приэксплуатации ЭВМ. – К.:1999.

22.Санитарно – гигиенические нормы допустимых уровней ионизации воздухапроизводственных и общественных помещений № 2152 – 80. – Минздрав СССР,1980.

23. ГОСТ 12.1.038 – 82.ССБТ. Электробезопасность. Предельно – допустимыеуровни напряжений прикосновения и токов.

24. СНиП2.04.05-93 Нормы проектирования. Отопление, вентиляция и кондиционирование. — М.: Стройиздат, 1994-64 с.

25. ДНАОП0.03-3.14-85 Санітарнінорми допустимих рівнів шуму на робочих місцях №3223-85.

26. ГОСТ 12.1.012-90 ССБТ. Вибрационнаябезопасность. Общие требования. – Введ.01.07.91.

27. ГОСТ12.2.007.0-75 ССБТ. Изделия электрические. Общие требования безопасности. — Введ.01.01.76.

28. ПУЭ –87. Правила устройства электроустановок. – М.: Энерогоатомиздат, 1987. –648 с.

29. ГОСТ14255-69. Аппараты электрические напряжением до 1000В. Оболочки. Степенизащиты.

30. ГОСТ12.1.004-91 ССБТ. Пожарная безопасность. Общие требования. – Введ.01.07.91.

31. РД34.21.122-87 Инструкция по устройству молниезащиты зданий и сооружений /Минэнерго СССР. — М.: Энергоатомиздат. – 1989. – 58 с.

32. ЗаконУкраины «Об охране окружающей природной среды» от 25.06.91г.

33.Государственный стандарт Украины «Система управления окружающей средой» ISO 14001-97 – К.: ГОСТАНТДАРТ УКРАИНЫ.1997 – 31 с.

34. Депутат О.П. Коваленко І.В. Мужик І.С.Цивільна оборона – Львів: Афіша, 2000 – 336 с.

35. Атаманюк В.Г. и др. Гражданская оборона – М: Высш. шк., 1987. – 288 с.


ПРИЛОЖЕНИЯ

Приложение А

Формы приложения этапе проектирования

/>

Рисунок А.1 – Форма MainForm на этапе проектирования

/>

Рисунок А.2 – Модуль данных DataModule1 на этапе проектирования


/>

Рисунок А.3 – Форма EditForm на этапе проектирования

/>

Рисунок А.4 – Форма FindForm на этапе проектирования

/>

Рисунок А.5 – Форма DeleteForm на этапе проектирования


/>

Рисунок А.6 – Форма FilterForm на этапе проектирования

/>

Рисунок А.7 – Форма DirSourceForm на этапе проектирования

/>

Рисунок А.8 – Форма PathForm на этапе проектирования

/>

Рисунок А.9 – Форма UserForm на этапе проектирования


/>

Рисунок А.10 – Форма AboutForm на этапе проектирования


Приложение Б

Листинг проекта приложения Lib.dpr

program Lib;

uses

Forms,

Main in 'Main.pas' {MainForm},

DBUnit in 'DBUnit.pas' {DataModule1:TDataModule},

DirSource in 'DirSource.pas'{DirSourceForm},

Edit in 'Edit.pas' {EditForm},

Files in 'Files.pas',

About in 'About.pas'{AboutBox},

Delete in 'Delete.pas'{DeleteForm},

Data in 'Data.pas',

Find in 'Find.pas' {FindForm},

Filter in 'Filter.pas'{FilterForm},

User in 'User.pas' {UserForm},

Path in 'Path.pas' {PathForm};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TMainForm,MainForm);

Application.CreateForm(TDataModule1,DataModule1);

Application.CreateForm(TDirSourceForm,DirSourceForm);

Application.CreateForm(TEditForm,EditForm);

Application.CreateForm(TAboutBox,AboutBox);

Application.CreateForm(TDeleteForm,DeleteForm);

Application.CreateForm(TFindForm,FindForm);

Application.CreateForm(TFilterForm,FilterForm);

Application.CreateForm(TUserForm,UserForm);

Application.CreateForm(TPathForm,PathForm);

Application.Run;

end.


Приложение В

Листинг модуля Main.pas

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants,Classes, Graphics, Controls, Forms,

Dialogs, Grids, DBGrids,StdCtrls, ExtCtrls, Buttons, DBCtrls, ImgList,

ComCtrls, ToolWin, DBActns,ActnList, AppEvnts, Menus, StdActns;

type

TMainForm = class(TForm)

ToolBar1: TToolBar;

TBInsert: TToolButton;

TBDelete: TToolButton;

ImageList1: TImageList;

TBUpdate: TToolButton;

TBFirst: TToolButton;

TBPrev: TToolButton;

TBNext: TToolButton;

TBLast: TToolButton;

ActionList1: TActionList;

DataSetFirst: TDataSetFirst;

DataSetPrior: TDataSetPrior;

DataSetNext: TDataSetNext;

TBRefrash: TToolButton;

DataSetLast: TDataSetLast;

DataSetInsert: TAction;

DataSetDelete: TAction;

DataSetUpdate: TAction;

DataSetRefrash: TAction;

ApplicationEvents1:TApplicationEvents;

FileExit: TFileExit;

MainMenu1: TMainMenu;

HelpAbout: TAction;

mmTable: TMenuItem;

mmFile: TMenuItem;

mmSort: TMenuItem;

mmExit: TMenuItem;

mmFirst: TMenuItem;

mmPrior: TMenuItem;

mmNext: TMenuItem;

mmLast: TMenuItem;

N5: TMenuItem;

mmInsert: TMenuItem;

mmDelete: TMenuItem;

mmUpdate: TMenuItem;

mmRefrash: TMenuItem;

mmHelp: TMenuItem;

SortByNum: TAction;

SortByAut: TAction;

SortByTit: TAction;

SortByLan: TAction;

SortByNo: TAction;

SortDirInc: TAction;

SortDirDec: TAction;

TBOpen: TToolButton;

DataSetOpen: TAction;

mmOpen: TMenuItem;

mmSortByNum: TMenuItem;

mmSortByAut: TMenuItem;

mmSortByTit: TMenuItem;

mmSortByLan: TMenuItem;

mmSortByNo: TMenuItem;

N12: TMenuItem;

mmSortDirInc: TMenuItem;

mmSortDirDec: TMenuItem;

mmAbout: TMenuItem;

DataSetFind: TAction;

DataSetFilter: TAction;

N14: TMenuItem;

mmFind: TMenuItem;

TBFind: TToolButton;

TBSapce2: TToolButton;

DataSetFindNext: TAction;

TBSpace1: TToolButton;

TBFindNext: TToolButton;

mmFindNext: TMenuItem;

TBFilter: TToolButton;

mmFilter: TMenuItem;

DataSetAll: TAction;

TBAll: TToolButton;

mmAll: TMenuItem;

FileUser: TAction;

N18: TMenuItem;

mmUser: TMenuItem;

mmOptions: TMenuItem;

OptColor: TAction;

OptFont: TAction;

FileDataBasePath: TAction;

mmDataBasePath: TMenuItem;

ColorDialog1: TColorDialog;

FontDialog1: TFontDialog;

mmColor: TMenuItem;

mmFont: TMenuItem;

PanelMain: TPanel;

PanelMemo: TPanel;

DBMemo1: TDBMemo;

Panel1: TPanel;

PanelGrid: TPanel;

Panel2: TPanel;

DBGrid1: TDBGrid;

Splitter1: TSplitter;

StatusBar1: TStatusBar;

Edit1: TEdit;

OptConfDel: TAction;

mmOptConfDel: TMenuItem;

N19: TMenuItem;

procedure FormCreate(Sender:TObject);

procedure FormActivate(Sender:TObject);

procedure FormDestroy(Sender:TObject);

procedure SaveIniFiles;

procedure RestoreIniFiles;

procedureApplicationEvents1Hint(Sender: TObject);

procedure RadioGroup1Click(Sender:TObject);

procedureRadioGroup2Click(Sender: TObject);

procedureDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;

DataCol: Integer; Column:TColumn; State: TGridDrawState);

procedureDBGrid1ColExit(Sender: TObject);

procedure DBGrid1KeyPress(Sender:TObject; var Key: Char);

procedure Edit1Exit(Sender:TObject);

procedureDataSetInsertExecute(Sender: TObject);

procedureDataSetDeleteExecute(Sender: TObject);

procedureDataSetUpdateExecute(Sender: TObject);

procedure DataSetRefrashExecute(Sender:TObject);

procedureDataSetOpenExecute(Sender: TObject);

procedureDataSetFindExecute(Sender: TObject);

procedureDataSetFindNextExecute(Sender: TObject);

procedureDataSetFilterExecute(Sender: TObject);

procedureDataSetAllExecute(Sender: TObject);

procedureFileDataBasePathExecute(Sender: TObject);

procedureFileUserExecute(Sender: TObject);

procedureOptColorExecute(Sender: TObject);

procedureOptFontExecute(Sender: TObject);

procedureOptConfDelExecute(Sender: TObject);

procedureHelpAboutExecute(Sender: TObject);

private

EditField: Integer;

OpenCounter: Integer;

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

uses DB, ShellAPI, IniFiles,DBUnit,

Edit, About, Files, Delete,Data, Find,

Filter, User, Path;

{$R *.dfm}

procedureTMainForm.FormCreate(Sender: TObject);

begin

Root:=ExtractFilePath(Application.ExeName);

if not DirectoryExists(TmpDir)then

MkDir(TmpDir)

else

DeleteFiles(MainForm.Handle,Concat(Root,TmpDir,'*.*'));

MkDir(BrowseDir);

OpenCounter:=0;

end;

procedureTMainForm.FormActivate(Sender: TObject);

begin

RestoreIniFiles;

if not DataModule1.InitDBParamsthen Close;

DataModule1.SetAccess;

DataSetInsert.Enabled:=DataModule1.fWriter;

DataSetDelete.Enabled:=DataModule1.fWriter;

DataSetUpdate.Enabled:=DataModule1.fWriter;

DataSetRefrashExecute(Sender);

end;

procedureTMainForm.FormDestroy(Sender: TObject);

begin

DeleteFiles(MainForm.Handle,Concat(Root,TmpDir,'*.*'));

ChDir(Root);

RmDir(TmpDir);

SaveIniFiles;

end;

procedure TMainForm.SaveIniFiles;

var

F: TIniFile;

FN: ANSIString;

begin

FN:=Concat(Root,IniFile);

F:=TIniFile.Create(FN);

with F do

begin

WriteString('DataBase','Server',DataModule1.fServer);

WriteString('DataBase','File',DataModule1.fFile);

WriteString('DataBase','DefaultUser',DBDefaultUser);

WriteString('DataBase','DefaultPassword',DBDefaultPass);

WriteInteger('Window','State',Ord(WindowState));

WriteInteger('Window','Top',BoundsRect.Top);

WriteInteger('Window','Left',BoundsRect.Left);

WriteInteger('Window','Bottom',BoundsRect.Bottom);

WriteInteger('Window','Right',BoundsRect.Right);

WriteInteger('Window','Spliter',PanelMemo.Height);

WriteInteger('Memo','Top',PanelMemo.BoundsRect.Top);

WriteInteger('Memo','Bottom',PanelMemo.BoundsRect.Bottom);

WriteInteger('Grid','Author',DBGrid1.Columns.Items[0].Width);

WriteInteger('Grid','Title',DBGrid1.Columns.Items[1].Width);

WriteInteger('Grid','Language',DBGrid1.Columns.Items[2].Width);

WriteInteger('Grid','Archive',DBGrid1.Columns.Items[3].Width);

WriteInteger('Grid','File',DBGrid1.Columns.Items[4].Width);

WriteInteger('Options','Color',DBMemo1.Color);

WriteBool('Options','ConfDel',ConfirmDelete);

WriteInteger('Font','Charset',DBMemo1.Font.Charset);

WriteInteger('Font','Color',DBMemo1.Font.Color);

WriteInteger('Font','Height',DBMemo1.Font.Height);

WriteString('Font','Name',DBMemo1.Font.Name);

WriteInteger('Font','Pitch',Ord(DBMemo1.Font.Pitch));

WriteInteger('Font','Size',DBMemo1.Font.Size);

WriteBool('Font','Bold',fsBoldin DBMemo1.Font.Style);

WriteBool('Font','Italic',fsItalicin DBMemo1.Font.Style);

WriteBool('Font','Underline',fsUnderlinein DBMemo1.Font.Style);

WriteBool('Font','StrikeOut',fsStrikeOutin DBMemo1.Font.Style);

Free;

end;

end;

procedureTMainForm.RestoreIniFiles;

var

F: TIniFile;

FN: ANSIString;

WinSt: Byte;

WinTop: Integer;

WinLeft: Integer;

WinBottom: Integer;

WinRight: Integer;

X: LongInt;

S: ShortString;

begin

FN:=Concat(Root,IniFile);

if FileExists(FN) then

begin

F:=TIniFile.Create(FN);

with DataModule1 do

begin

fServer:=F.ReadString('DataBase','Server',DBDefaultServer);

fFile:=F.ReadString('DataBase','File',DBDefaultFile);

end;

DBDefaultUser:=F.ReadString('DataBase','DefaultUser',DBDefaultUser);

DBDefaultPass:=F.ReadString('DataBase','Default Password',DBD efault Pass);

WinSt:=F.ReadInteger('Window','State',DefaultWinState);

case WinSt of

0: WindowState:=wsNormal;

1: WindowState:=wsMinimized;

2: WindowState:=wsMaximized;

end;

WinTop:=F.ReadInteger('Window','Top',DefaultWinTop);

WinLeft:=F.ReadInteger('Window','Left',DefaultWinLeft);

WinBottom:=F.ReadInteger('Window','Bottom',DefaultWinBottom);

WinRight:=F.ReadInteger('Window','Right',DefaultWinRight);

SetBounds(WinLeft,WinTop,WinRight-WinLeft,WinBottom-WinTop);

PanelMemo.Height:=F.ReadInteger('Window','Spliter',30);

with DBGrid1.Columns do

begin

Items[0].Width:=F.ReadInteger('Grid','Author',DefaultGrid1);

Items[1].Width:=F.ReadInteger('Grid','Title',DefaultGrid2);

Items[2].Width:=F.ReadInteger('Grid','Language',DefaultGrid3);

Items[3].Width:=F.ReadInteger('Grid','Archive',DefaultGrid4);

Items[4].Width:=F.ReadInteger('Grid','File',DefaultGrid5);

end;

X:=F.ReadInteger('Options','Color',DefaultColor);

DBGrid1.Color:=X;

DBMemo1.Color:=X;

Edit1.Color:=X;

ConfirmDelete:=F.ReadBool('Options','ConfDel',ConfirmDelete);

X:=F.ReadInteger('Font','Charset',DefaultFontCharset);

DBGrid1.Font.Charset:=X;

DBMemo1.Font.Charset:=X;

Edit1.Font.Charset:=X;

X:=F.ReadInteger('Font','Color',DefaultFontColor);

DBGrid1.Font.Color:=X;

DBMemo1.Font.Color:=X;

Edit1.Font.Color:=X;

X:=F.ReadInteger('Font','Height',DefaultFontHeight);

DBGrid1.Font.Height:=X;

DBMemo1.Font.Height:=X;

Edit1.Font.Height:=X;

S:=F.ReadString('Font','Name',DefaultFontName);

DBGrid1.Font.Name:=S;

DBMemo1.Font.Name:=S;

Edit1.Font.Name:=S;

X:=F.ReadInteger('Font','Pitch',DefaultFontPitch);

case X of

0:

begin

DBGrid1.Font.Pitch:=fpDefault;

DBMemo1.Font.Pitch:=fpDefault;

Edit1.Font.Pitch:=fpDefault;

end;

1:

begin

DBGrid1.Font.Pitch:=fpFixed;

DBMemo1.Font.Pitch:=fpFixed;

Edit1.Font.Pitch:=fpFixed;

end;

2:

begin

DBGrid1.Font.Pitch:=fpVariable;

DBMemo1.Font.Pitch:=fpVariable;

Edit1.Font.Pitch:=fpVariable;

end;

end;

X:=F.ReadInteger('Font','Size',DefaultFontSize);

DBGrid1.Font.Size:=X;

DBMemo1.Font.Size:=X;

Edit1.Font.Size:=X;

ifF.ReadBool('Font','Bold',DefaultFontBold) then

begin

DBGrid1.Font.Style:=DBGrid1.Font.Style+[fsBold];

DBMemo1.Font.Style:=DBMemo1.Font.Style+[fsBold];

Edit1.Font.Style:=Edit1.Font.Style+[fsBold];

end;

ifF.ReadBool('Font','Italic',DefaultFontItalic) then

begin

DBGrid1.Font.Style:=DBGrid1.Font.Style+[fsItalic];

DBMemo1.Font.Style:=DBMemo1.Font.Style+[fsItalic];

Edit1.Font.Style:=Edit1.Font.Style+[fsItalic];

end;

ifF.ReadBool('Font','Underline',DefaultFontUnderline) then

begin

DBGrid1.Font.Style:=DBGrid1.Font.Style+[fsUnderline];

DBMemo1.Font.Style:=DBMemo1.Font.Style+[fsUnderline];

Edit1.Font.Style:=Edit1.Font.Style+[fsUnderline];

end;

ifF.ReadBool('Font','StrikeOut',DefaultFontStrikeOut) then

begin

DBGrid1.Font.Style:=DBGrid1.Font.Style+[fsStrikeOut];

DBMemo1.Font.Style:=DBMemo1.Font.Style+[fsStrikeOut];

Edit1.Font.Style:=Edit1.Font.Style+[fsStrikeOut];

end;

F.Free;

end;

end;

procedureTMainForm.ApplicationEvents1Hint(Sender: TObject);

begin

StatusBar1.SimpleText:=Application.Hint;

end;

procedureTMainForm.RadioGroup1Click(Sender: TObject);

begin

DataSetRefrashExecute(Sender);

end;

procedureTMainForm.RadioGroup2Click(Sender: TObject);

begin

DataSetRefrashExecute(Sender);

end;

procedureTMainForm.DBGrid1DrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol:Integer; Column: TColumn;

State: TGridDrawState);

begin

if (DataModule1.fWriter) and(gdFocused in State) then

if (Column.Field.FieldName ='Author') or

(Column.Field.FieldName ='Title') or

(Column.Field.FieldName ='Language') then

begin

EditField:=Column.Field.FieldNo-1;

Edit1.Text:=Column.Field.AsString;

with Edit1 do

begin

Left := Rect.Left +DBGrid1.Left;

Top := Rect.Top +DBGrid1.Top+PanelGrid.Top+PanelMain.Top;

Width := Rect.Right — Rect.Left+ 2;

Visible := True;

end;

end;

end;

procedureTMainForm.DBGrid1ColExit(Sender: TObject);

var

FldName: ShortString;

begin

if DataModule1.fWriter then

begin

FldName:=DBGrid1.SelectedField.FieldName;

if (FldName = 'Author') or

(FldName = 'Title') or

(FldName = 'Language') then

begin

Edit1.Visible := False;

end;

end;

end;

procedureTMainForm.DBGrid1KeyPress(Sender: TObject; var Key: Char);

var

FldName: ShortString;

begin

if DataModule1.fWriter then

begin

FldName:=DBGrid1.SelectedField.FieldName;

if (FldName = 'Author') or

(FldName = 'Title') or

(FldName = 'Language') then

if (Key <> Chr(9)) then

begin

Edit1.SetFocus;

SendMessage(Edit1.Handle,WM_CHAR, Word(Key), 0);

end;

end;

end;

procedureTMainForm.Edit1Exit(Sender: TObject);

const

NamePre='Update';

ParPre ='ip';

Par: array [1..5] ofShortString=('Aut', 'Tit', 'Lan', 'Typ' ,'Ext');

begin

with DataModule1,DataModule1.IBStoredProc1 do

ifIBDataSet1.Fields.Fields[EditField].AsString<>Edit1.Text then

begin

StoredProcName:=NamePre+IBDataSet1.FieldList.Strings[EditField];

ParamByName(ParPre+Par[EditField]).Value:=Edit1.Text;

ParamByName('ipNum').Value:=IBDataSet1.Fields.Fields[0].AsInteger;

Prepare;

ExecProc;

DataSetRefrashExecute(Sender);

end;

end;

procedureTMainForm.DataSetInsertExecute(Sender: TObject);

var

N: Integer;

ArcName: ANSIString;

Stream: TMemoryStream;

Res: Boolean;

begin

if not Assigned (EditForm) then

EditForm:= TEditForm.Create(Application);

with EditForm do

begin

Caption:=InsertWinName;

ShowModal;

if ModalResult=mrOK then

begin

case RadioGroupSource.ItemIndexof

0:

begin

ifTrim(EditNewArc.Text)<>'' then

ArcName:=GetNewArcName(EditNewArc.Text+ArcExt)

else

begin

ArcName:=ExtractFileLastDir(EditDir.Text);

ArcName:=GetNewArcName(LibDir+ArcName+ArcExt);

end;

Res:=PackFiles(ArcName,EditDir.Text+'\*.*');

end;

1:

begin

if(Trim(EditNewArc.Text)<>'') then

begin

ArcName:=GetNewArcName(EditNewArc.Text+ArcExt);

Res:=(CopyFiles(Application.Handle,EditArc.Text,ArcName)=0);

end

else

begin

ArcName:=EditArc.Text;

Res:=True;

end;

end;

2:

begin

ifTrim(EditNewArc.Text)<>'' then

ArcName:=GetNewArcName(EditNewArc.Text+ArcExt)

else

begin

ArcName:=ExtractFileName(EditFile.Text);

DeleteFileExt(ArcName);

ArcName:=GetNewArcName(LibDir+ArcName+ArcExt);

end;

Res:=PackFiles(ArcName,EditFile.Text);

end;

end;

if Res then

begin

Stream:=TMemoryStream.Create;

Memo1.Lines.SaveToStream(Stream);

DataModule1.CallInsertBook(ComboBoxAut.Text,

ComboBoxTit.Text,

ComboBoxLan.Text,

Stream,

ArcName,

ExtractFileName(EditFile.Text),N);

Stream.Free;

MainForm.DataSetRefrashExecute(Sender);

DataModule1.IBDataSet1.Locate('Number',N,[loPartialKey]);

end;

end;

end;

end;

procedureTMainForm.DataSetDeleteExecute(Sender: TObject);

begin

if ConfirmDelete then

begin

if not Assigned (DeleteForm)then

DeleteForm:= TDeleteForm.Create(Application);

with DeleteForm do

begin

Caption:=DeleteWinName;

ShowModal;

end;

if (DeleteForm.ModalResult =mrYes) then

DataModule1.CallDeleteBook;

end

else

DataModule1.CallDeleteBook;

DataSetRefrashExecute(Sender);

end;

procedureTMainForm.DataSetUpdateExecute(Sender: TObject);

var

N: Integer;

ArcName: ANSIString;

Str: ANSIString;

Stream: TStream;

MStream: TMemoryStream;

Res: Boolean;

begin

if not Assigned (EditForm) then

EditForm:= TEditForm.Create(Application);

with EditForm do

begin

Caption:=EditWinName;

with DataModule1.IBDataSet1 do

begin

N:=Fields.Fields[0].AsInteger;

ComboBoxAut.Text:=Fields.Fields[1].AsString;

ComboBoxTit.Text:=Fields.Fields[2].AsString;

ComboBoxLan.Text:=Fields.Fields[3].AsString;

RadioGroupSource.ItemIndex:=1;

EditDir.Text:='';

EditArc.Text:='';

EditFile.Text:=FieldByName('File').AsString;

Stream:=CreateBLOBStream(FieldByName('Sections'),bmRead);

Memo1.Lines.LoadFromStream(Stream);

EditArc.Text:=FieldByName('Archive').AsString;

Stream.Free;

end;

ShowModal;

if ModalResult=mrOK then

begin

ArcName:=Root+TmpDir+TmpFile+'.rar';

case RadioGroupSource.ItemIndexof

0:

begin

if EditDir.Text<>'' then

begin

ArcName:=Concat(Root+TmpDir+TmpFile);

Res:=PackFiles(ArcName,EditDir.Text+'\*.*');

ArcName:=ArcName+'.rar';

end;

end;

1:

begin

if EditArc.Text<>'' then

begin

ArcName:=EditArc.Text;

Res:=True;

end;

end;

2:

begin

Str:=DataModule1.IBDataSet1.FieldByName('File').AsString;

if EditFile.Text<>Strthen

begin

ArcName:=Root+TmpDir+TmpFile+'.rar';

Res:=PackFiles(ArcName,EditFile.Text);

end;

end;

end;

if Res then

begin

MStream:=TMemoryStream.Create;

Memo1.Lines.SaveToStream(MStream);

DataModule1.CallUpDateBook(N,ComboBoxAut.Text,

ComboBoxTit.Text,

ComboBoxLan.Text,

MStream,

ArcName,

ExtractFileName(EditFile.Text));

MStream.Free;

end;

if(RadioGroupSource.ItemIndex<>1) then

DeleteFiles(EditForm.Handle,ArcName);

DataSetRefrashExecute(Sender);

DataModule1.IBDataSet1.Locate('Number',N,[loPartialKey]);

end;

end;

end;

procedureTMainForm.DataSetRefrashExecute(Sender: TObject);

var

S: ShortString;

B: TBookmark;

begin

with DataModule1.IBDataSet1 do

begin

B:=GetBookMark;

Close;

SelectSQL.Clear;

SelectSQL.Add('SELECT * FROM«Library» ');

end;

if SortByNum.Checked thenS:=SQLSortBy[0]

else if SortByAut.Checked thenS:=SQLSortBy[1]

else if SortByTit.Checked thenS:=SQLSortBy[2]

else if SortByLan.Checked thenS:=SQLSortBy[3]

else if SortByNo.Checked thenS:=SQLSortBy[4];

DataModule1.IBDataSet1.SelectSQL.Add(S);

if (not SortByNo.Checked) then

begin

if SortDirInc.Checked thenS:=SqlSortDir[0]

else S:=SqlSortDir[1];

DataModule1.IBDataSet1.SelectSQL.Add(S);

end;

with DataModule1.IBDataSet1 do

begin

Open;

GotoBookmark(B);

FreeBookmark(B);

end;

end;

procedureTMainForm.DataSetOpenExecute(Sender: TObject);

var

ArcPath: ANSIString;

FName: ANSIString;

OpenDir: ShortString;

begin

Inc(OpenCounter);

OpenDir:=Root+TmpDir+IntToStr(OpenCounter)+'\';

MkDir(OpenDir);

ArcPath:=DataModule1.IBDataSet1.FieldByName('Archive').AsString;

UnPackFiles(ArcPath,OpenDir);

FName:=DataModule1.IBDataSet1.FieldByName('File').AsString;

FName:=Concat(OpenDir+FName);

OpenFile(FName,OpenDir);

end;

procedureTMainForm.DataSetFindExecute(Sender: TObject);

begin

if not Assigned (FindForm) then

FindForm:= TFindForm.Create(Application);

FindForm.ShowModal;

if(DataModule1.fSearchRec>=0) then

DatasetFindNext.Enabled:=True

else

DatasetFindNext.Enabled:=False;

end;

procedureTMainForm.DataSetFindNextExecute(Sender: TObject);

const

Txt=’Источник не найден';

WinName='Поиск источника';

var

KeyFlds: ShortString;

KeyVals: Variant;

Loc: TLocateOptions;

Res: Boolean;

BM: TBookmark;

begin

BM:=DataModule1.IBDataSet1.GetBookmark;

FindForm.GetLocateParams(KeyFlds,KeyVals,Loc);

Res:=DataModule1.IBDataSet1.LocateNext(KeyFlds,KeyVals,Loc);

with DataModule1 do

fSearchRec:=IBDataSet1.RecNo;

if not Res then

begin

DataModule1.IBDataSet1.GotoBookmark(BM);

DataModule1.fSearchRec:=-1;

DataSetFindNext.Enabled:=False;

Application.MessageBox(Txt,WinName,mb_OK);

end;

DataModule1.IBDataSet1.FreeBookmark(BM);

end;

procedureTMainForm.DataSetFilterExecute(Sender: TObject);

begin

if not Assigned (FilterForm)then

FilterForm:=TFilterForm.Create(Application);

FilterForm.ShowModal;

end;

procedureTMainForm.DataSetAllExecute(Sender: TObject);

begin

DataModule1.IBDataSet1.Filtered:=False;

end;

procedureTMainForm.FileDataBasePathExecute(Sender: TObject);

begin

if not Assigned (PathForm) then

PathForm:=TPathForm.Create(Application);

PathForm.ShowModal;

DataSetRefrashExecute(Sender);

end;

procedureTMainForm.FileUserExecute(Sender: TObject);

var

Path: AnsiString;

User: ShortString;

Pass: ShortString;

begin

if not Assigned (UserForm) then

UserForm:=TUserForm.Create(Application);

with UserForm do

begin

ShowModal;

if ModalResult=mrOK then

begin

Path:=DataModule1.IBDatabase1.DatabaseName;

User:=UserForm.leUser.Text;

Pass:=UserForm.lePass.Text;

if notDataModule1.Connect(Path,User,Pass) then Close;

DataSetRefrashExecute(Sender);

DataModule1.SetAccess;

DataSetInsert.Enabled:=DataModule1.fWriter;

DataSetDelete.Enabled:=DataModule1.fWriter;

DataSetUpdate.Enabled:=DataModule1.fWriter;

end;

end;

end;

procedureTMainForm.OptColorExecute(Sender: TObject);

begin

if ColorDialog1.Execute then

begin

DBGrid1.Color:=ColorDialog1.Color;

DBMemo1.Color:=ColorDialog1.Color;

Edit1.Color:=ColorDialog1.Color;

end;

end;

procedureTMainForm.OptFontExecute(Sender: TObject);

begin

if FontDialog1.Execute then

begin

DBGrid1.Font.Assign(FontDialog1.Font);

DBMemo1.Font.Assign(FontDialog1.Font);

Edit1.Font.Assign(FontDialog1.Font);

end;

end;

procedureTMainForm.OptConfDelExecute(Sender: TObject);

begin

ConfirmDelete:=notConfirmDelete;

end;

procedureTMainForm.HelpAboutExecute(Sender: TObject);

begin

if not Assigned (AboutBox) then

AboutBox:= TAboutBox.Create(Application);

AboutBox.ShowModal;

end;

end.


Приложение Г

Листинг модуля DBUnit.pas

unit DBUnit;

interface

uses

SysUtils, Classes, DB,IBDatabase, IBCustomDataSet, IBQuery, IBStoredProc;

type

TDataModule1 =class(TDataModule)

DataSource1: TDataSource;

IBDatabase1: TIBDatabase;

IBTransaction1: TIBTransaction;

IBDataSet1: TIBDataSet;

IBStoredProc1: TIBStoredProc;

functionConnect(Path:ANSIString;

User, Password: ShortString):Boolean;

function InitDBParams: Boolean;

procedure SetAccess;

procedure CallInsertBook(Aut,Tit, Lan: ShortString;

Sec: TStream;

Arc: ANSIString;

Fil: ShortString;

var Num: Integer);

procedure CallUpdateBook(Num:Integer;

Aut, Tit, Lan: ShortString;

Sec: TStream;

Arc: ANSIString;

Fil: ShortString);

procedure CallDeleteBook;

procedure SetFilter(CaseFlag:Boolean; Aut, Tit, Lan, Sec: ShortString);

functionIsFieldContainStr(Field, S: ShortString): Boolean;

procedureIBDataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);

procedureIBDataSet1AfterScroll(DataSet: TDataSet);

private

fCase: Boolean;

fFltrAut: ShortString;

fFltrTit: ShortString;

fFltrLan: ShortString;

fFltrSec: ShortString;

public

fSearchRec: Integer;

fSearchKey: ShortString;

fSearchCase: Boolean;

fWriter: Boolean;

fUser: ShortString;

fPass: ShortString;

fServer: ShortString;

fFile: ShortString;

end;

var

DataModule1: TDataModule1;

implementation

uses StrUtils, DBTables,Dialogs, Main, Data;

{$R *.dfm}

{ TDataModule1 }

functionTDataModule1.Connect(Path:ANSIString;

User, Password: ShortString):Boolean;

const

ParamNames: array[0..3] ofShortString = (

'lc_ctype=',

'sql_role_name=',

'user_name=',

'password=');

CharSet='WIN1251';

SQLRole='3';

ErrPathUserPass='Неверный путь к базе или пароль пользователя';

ErrFatal='Соединение с базой данных невозможно';

var

OldUser: ShortString;

OldPass: ShortString;

OldPath: AnsiString;

begin

OldPath:='';

OldUser:='';

OldPass:='';

with IBDataBase1 do

begin

IBDataBase1.Connected:=False;

if Params.Count<>0 then

begin

OldUser:=fUser;

OldPass:=fPass;

OldPath:=DataBaseName;

end;

IBDataBase1.Params.Clear;

Params.Add(Concat(ParamNames[0],CharSet));

Params.Add(Concat(ParamNames[1],SQLRole));

Params.Add(Concat(ParamNames[2],User));

Params.Add(Concat(ParamNames[3],Password));

LoginPrompt:=False;

DatabaseName:=Path;

end;

try

IBDataBase1.Connected:=True;

fUser:=User;

fPass:=Password;

except

ShowMessage(ErrPathUserPass);

if (OldPath<>'') and(OldUser<>'') and (OldPass<>'') then

with IBDataBase1 do

begin

DatabaseName:=OldPath;

Params[2]:=OldUser;

Params[3]:=OldPass;

Connected:=False;

try

Connected:=True;

fUser:=User;

fPass:=Password;

except

ShowMessage(ErrFatal);

end;

end;

end;

Result:=IBDataBase1.Connected;

end;

functionTDataModule1.InitDBParams: Boolean;

var

Path: ANSIString;

begin

fUser:=ParamStr(1);

fPass:=ParamStr(2);

fServer:=Paramstr(3);

fFile:=Paramstr(4);

if (fUser='') thenfUser:=DBDefaultUser;

if (fPass='') thenfPass:=DBDefaultPass;

if (fServer='') thenfServer:=DBDefaultServer;

if (fFile='') thenfFile:=DBDefaultFile;

Path:=Concat(fServer,':',fFile);

Result:=DataModule1.Connect(Path,fUser,fPass);

end;

procedureTDataModule1.SetAccess;

begin

with IBStoredProc1 do

begin

StoredProcName:='IsWriter';

Prepare;

try

ExecProc;

fWriter:=True;

except

fWriter:=False;

end;

end;

end;

procedureTDataModule1.CallInsertBook(Aut, Tit, Lan: ShortString;

Sec: TStream;

Arc: ANSIString;

Fil: ShortString;

var Num: Integer);

begin

with IBStoredProc1 do

begin

StoredProcName:='InsertBook';

ParamByName('ipAut').Value:=Aut;

ParamByName('ipTit').Value:=Tit;

ParamByName('ipLan').Value:=Lan;

ParamByName('ipSec').LoadFromStream(Sec,ftMemo);

ParamByName('ipArc').Value:=Arc;

ParamByName('ipFil').Value:=Fil;

Prepare;

ExecProc;

Num:=ParamByName('opNum').Value;

end;

end;

procedureTDataModule1.CallUpdateBook(Num: Integer;

Aut, Tit, Lan: ShortString;

Sec: TStream;

Arc: ANSIString;

Fil: ShortString);

begin

with IBStoredProc1 do

begin

StoredProcName:='UpdateBook';

ParamByName('ipNum').Value:=Num;

ParamByName('ipAut').Value:=Aut;

ParamByName('ipTit').Value:=Tit;

ParamByName('ipLan').Value:=Lan;

ParamByName('ipSec').LoadFromStream(Sec,ftMemo);

ParamByName('ipArc').Value:=Arc;

ParamByName('ipFil').Value:=Fil;

Prepare;

ExecProc;

end;

end;

procedureTDataModule1.CallDeleteBook;

begin

if (IBDataSet1.RecNo<>0)then

with IBStoredProc1 do

begin

StoredProcName:='DeleteBook';

ParamByName('Num').Value:=IBDataSet1.Fields.Fields[0].Value;

Prepare;

ExecProc;

end;

end;

procedureTDataModule1.SetFilter(CaseFlag: Boolean;

Aut, Tit, Lan,Sec: ShortString);

begin

fCase:=CaseFlag;

fFltrAut:=Aut;

fFltrTit:=Tit;

fFltrLan:=Lan;

fFltrSec:=Sec;

IBDataSet1.Filtered:=False;

IBDataSet1.Filtered:=True;

end;

functionTDataModule1.IsFieldContainStr(Field, S: ShortString): Boolean;

begin

if Trim(S)<>'' then

if fCase then

Result:=ANSIContainsStr(Field,S)

else

Result:=ANSIContainsText(Field,S)

else

Result:=True;

end;

procedureTDataModule1.IBDataSet1FilterRecord(DataSet: TDataSet;

var Accept: Boolean);

var

Aut: Boolean;

Tit: Boolean;

Lan: Boolean;

Sec: Boolean;

begin

Aut:=IsFieldContainStr(DataSet['Author'],fFltrAut);

Tit:=IsFieldContainStr(DataSet['Title'],fFltrTit);

Lan:=IsFieldContainStr(DataSet['Language'],fFltrLan);

Sec:=IsFieldContainStr(DataSet['Sections'],fFltrSec);

Accept:=Aut and Tit and Lan andSec;

end;

procedureTDataModule1.IBDataSet1AfterScroll(DataSet: TDataSet);

var

Stream: TStream;

begin

if notIBDataSet1.FieldByName('Sections').IsNull then

begin

Stream:=IBDataSet1.CreateBlobStream(IBDataSet1.FieldByName('Sections'),bmRead);

Stream.Free;

end;

end;

end.


Приложение Д

Листинг модуля Edit.pas

unit Edit;

interface

uses

Windows, Messages, SysUtils,Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls,Buttons, CheckLst, Mask, Menus, ActnList;

type

TEditForm = class(TForm)

Panel1: TPanel;

BCancel: TBitBtn;

BOK: TBitBtn;

Panel2: TPanel;

RadioGroupSource: TRadioGroup;

OpenDialogArc: TOpenDialog;

GroupBoxData: TGroupBox;

LabelTit: TLabel;

LabelLan: TLabel;

LabelTyp: TLabel;

LabelAut: TLabel;

ComboBoxAut: TComboBox;

ComboBoxTit: TComboBox;

ComboBoxLan: TComboBox;

GroupBoxSections: TGroupBox;

GroupBoxPath: TGroupBox;

LabelDir: TLabel;

EditDir: TEdit;

BBrowseDir: TBitBtn;

LabelArc: TLabel;

EditArc: TEdit;

BBrowseArc: TBitBtn;

LabelFile: TLabel;

EditFile: TEdit;

BBrowseFile: TBitBtn;

EditNewArc: TEdit;

LabelNewArc: TLabel;

Memo1: TMemo;

procedure FormActivate(Sender:TObject);

procedure SetComboBox(FieldNum:Integer; CBox: TComboBox);

procedureBBrowseArcClick(Sender: TObject);

procedureBBrowseFileClick(Sender: TObject);

procedure RadioGroupSourceClick(Sender:TObject);

procedureBBrowseDirClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

EditForm: TEditForm;

implementation

uses DB, DirSource, DBUnit, Files,Data;

{$R *.dfm}

procedureTEditForm.FormActivate(Sender: TObject);

begin

SetComboBox(1,ComboBoxAut);

SetComboBox(2,ComboBoxTit);

SetComboBox(3,ComboBoxLan);

RadioGroupSourceClick(Sender);

end;

procedureTEditForm.SetComboBox(FieldNum: Integer; CBox: TComboBox);

var

B: TBookmark;

S: ShortString;

Present: Boolean;

I: Integer;

begin

CBox.Items.Clear;

with DataModule1.IBDataSet1 do

begin

B:=GetBookmark;

First;

DisableControls;

while not EOF do

begin

S:=Fields.Fields[FieldNum].AsString;

if S<>'' then

begin

Present:=False;

for I:=0 to CBox.Items.Count-1do

if S=CBox.Items.Strings[I] then

begin

Present:=True;

Break;

end;

if (not Present) then

CBox.Items.Add(S);

end;

Next;

end;

GotoBookmark(B);

FreeBookmark(B);

EnableControls;

end;

end;

procedureTEditForm.BBrowseArcClick(Sender: TObject);

begin

with OpenDialogArc do

begin

Title:='Поиск архива';

Filter :=

'Любые архивы|*.RAR;*ZIP;*ARJ'+

'Любые файлы|*.*'+

'RAR-архивы(*.rar)|*.RAR|'+

'ZIP-архивы(*.zip)|*.ZIP|'+

'ARJ-архивы(*.arj)|*.ARJ'; InitialDir:=InitDir;

if Execute then

begin

EditArc.Text:=FileName;

BBrowseFile.Enabled:=True;

EditFile.Text:='';

end;

end;

end;

procedureTEditForm.BBrowseFileClick(Sender: TObject);

var

ArcPath: ANSIString;

OpenDir: ANSIString;

Res: Boolean;

OpenDialogFile: TOpenDialog;

begin

Res:=True;

if RadioGroupSource.ItemIndex =1 then

begin

Res:=CopyFiles(EditForm.Handle,EditArc.Text,

Root+TmpDir+ExtractFileName(EditArc.Text))=0;

if Res then

begin

ArcPath:=Concat(Root,TmpDir,ExtractFileName(EditArc.Text));

OpenDir:=Concat(Root,BrowseDir);

Res:=UnPackFiles(ArcPath,OpenDir);

end;

end;

if Res then

begin

OpenDialogFile:=TOpenDialog.Create(Application);

with OpenDialogFile do

begin

InitialDir:='E:\Andrew\';

Title:='Главный файл';

Filter :=

'Любые документы |'+

'*.TXT;*.DOC;*.RTF;*.WRI;*.PDF;*.HTM;*.HTML;*.SHTML;*.XML|'+

'Любые файлы (*.*)|*.*|'+

'Текстовые файлы (*.txt)|*.TXT|'+

'Докуметы Word(*.doc)|*.DOC|'+

'Rich TextFormat(*.rtf)|*.RTF|'+

'Текст в формате WRI(*.wri)|*.WRI|'+

'Документы Acrobat (*.pdf)|*.PDF|'+

'Web-страницы(*.htm, *.html,*.shtml, *.xml)|*.HTM;*.HTML;*.SHTML;*. case RadioGroupSource.ItemIndex of

0:InitialDir:=DirSourceForm.ShellComboBox1.Path;

1: InitialDir:=Root+BrowseDir;

2: InitialDir:=InitDir;

end;

if Execute then

case RadioGroupSource.ItemIndexof

0:EditFile.Text:=ExtractFileName(FileName);

1:EditFile.Text:=ExtractFileName(FileName);

2: EditFile.Text:=FileName;

end;

end;

OpenDialogFile.Free;

end;

if RadioGroupSource.ItemIndex =1 then

begin

DeleteFiles(EditForm.Handle,Root+BrowseDir+'*.*');

DeleteFiles(EditForm.Handle,Root+TmpDir+ExtractFileName(EditArc.Text));

end;

end;

procedureTEditForm.RadioGroupSourceClick(Sender: TObject);

begin

LabelDir.Enabled:=RadioGroupSource.ItemIndex= 0;

EditDir.Enabled:=RadioGroupSource.ItemIndex= 0;

BBrowseDir.Enabled:=RadioGroupSource.ItemIndex= 0;

LabelArc.Enabled:=RadioGroupSource.ItemIndex= 1;

EditArc.Enabled:=RadioGroupSource.ItemIndex= 1;

BBrowseArc.Enabled:=RadioGroupSource.ItemIndex= 1;

end;

procedureTEditForm.BBrowseDirClick(Sender: TObject);

begin

if not Assigned (DirSourceForm)then

DirSourceForm:=TDirSourceForm.Create (Application);

DirSourceForm.ShowModal;

if DirSourceForm.ModalResult =mrOK then

EditDir.Text:=DirSourceForm.ShellComboBox1.Path;

end;

end.


Приложение Е

Листинг модуля Delete.pas

unit Delete;

interface

uses Windows, SysUtils,Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls;

type

TDeleteForm = class(TForm)

Bevel1: TBevel;

Label1: TLabel;

BYes: TBitBtn;

BNo: TBitBtn;

Image1: TImage;

private

{ Private declarations }

public

{ Public declarations }

end;

var

DeleteForm: TDeleteForm;

implementation

{$R *.dfm}

end.


Приложение Ж

Листинг модуля Filter.pas

unit Filter;

interface

uses

Windows, Messages, SysUtils,Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons,ExtCtrls;

type

TFilterForm = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

GBFilterValue: TGroupBox;

EditAut: TEdit;

EditTit: TEdit;

EditLan: TEdit;

LabelAut: TLabel;

LabelTit: TLabel;

LabelLan: TLabel;

BBOK: TBitBtn;

BBCancel: TBitBtn;

LabelSec: TLabel;

EditSec: TEdit;

CBCase: TCheckBox;

procedureFormDeactivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FilterForm: TFilterForm;

implementation

uses DB, DBUnit;

{$R *.dfm}

procedureTFilterForm.FormDeactivate(Sender: TObject);

begin

if ModalResult=mrOK then

DataModule1.SetFilter(CBCase.Checked,

EditAut.Text,

EditTit.Text,

EditLan.Text,

EditSec.Text);

end;

end.


Приложение З

Листинг модуля Find.pas

unit Find;

interface

uses

Windows, Messages, SysUtils,Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls,Buttons, DB;

type

TFindForm = class(TForm)

Panel1: TPanel;

BOK: TBitBtn;

Panel2: TPanel;

gbValue: TGroupBox;

LabelAut: TLabel;

LabelTit: TLabel;

LabelLan: TLabel;

LabelSec: TLabel;

EditAut: TEdit;

EditTit: TEdit;

EditLan: TEdit;

EditSec: TEdit;

BCancel: TBitBtn;

EditNum: TEdit;

LabelNum: TLabel;

gbParam: TGroupBox;

CheckBoxCase: TCheckBox;

CheckBoxSubStr: TCheckBox;

procedureFormDeactivate(Sender: TObject);

procedureSetFieldParams(FldNum: Byte;

var Fields: ShortString; varValues: Variant);

procedure GetLocateParams(varKeyFields: ShortString;

var KeyValues: Variant; varOptions: TLocateOptions);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FindForm: TFindForm;

implementation

uses DBUnit, Data;

{$R *.dfm}

procedureTFindForm.FormDeactivate(Sender: TObject);

const

Txt='Источник не найден';

WinName='Поиск источника';

var

KeyFlds: ShortString;

KeyVals: Variant;

Loc: TLocateOptions;

Res: Boolean;

BM: TBookmark;

begin

if ModalResult=mrOK then

begin

BM:=DataModule1.IBDataSet1.GetBookmark;

GetLocateParams(KeyFlds,KeyVals,Loc);

Res:=DataModule1.IBDataSet1.Locate(KeyFlds,KeyVals,Loc);

with DataModule1 do

fSearchRec:=IBDataSet1.RecNo;

if not Res then

begin

DataModule1.IBDataSet1.GotoBookmark(BM);

DataModule1.fSearchRec:=-1;

Application.MessageBox(Txt,WinName,mb_OK);

end;

DataModule1.IBDataSet1.FreeBookmark(BM);

end;

end;

procedureTFindForm.GetLocateParams(var KeyFields: ShortString;

var KeyValues: Variant; varOptions: TLocateOptions);

begin

KeyFields:='';

KeyValues:=VarArrayOf([]);

SetFieldParams(0,KeyFields,KeyValues);

SetFieldParams(1,KeyFields,KeyValues);

SetFieldParams(2,KeyFields,KeyValues);

SetFieldParams(3,KeyFields,KeyValues);

SetFieldParams(4,KeyFields,KeyValues);

Options:=[];

if CheckBoxCase.Checked then

Options:=Options+[loCaseInsensitive];

if CheckBoxSubStr.Checked then

Options:=Options+[loPartialKey];

end;

procedureTFindForm.SetFieldParams(FldNum: Byte;

var Fields: ShortString; varValues: Variant);

var

S: ShortString;

N: Integer;

begin

case FldNum of

0: S:=EditNum.Text;

1: S:=EditAut.Text;

2: S:=EditTit.Text;

3: S:=EditLan.Text;

4: S:=EditSec.Text;

end;

S:=Trim(S);

if S<>'' then

begin

Fields:=Concat(Fields,FieldNames[FldNum],';');

N:=VarArrayHighBound(Values,1)+1;

VarArrayRedim(Values,N);

if (FldNum = 0) then

Values[N]:=StrToInt(S)

else

Values[N]:=S;

end;

end;

end.


Приложение И

Листинг модуля DirSource.pas

unit DirSource;

interface

uses Windows, SysUtils,Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, ComCtrls,ShellCtrls;

type

TDirSourceForm = class(TForm)

Bevel1: TBevel;

BCancel: TBitBtn;

BOK: TBitBtn;

ShellComboBox1: TShellComboBox;

ShellTreeView1: TShellTreeView;

private

{ Private declarations }

public

{ Public declarations }

end;

var

DirSourceForm: TDirSourceForm;

implementation

{$R *.dfm}

end.


Приложение К

Листинг модуля Path.pas

unit Path;

interface

uses

Windows, Messages, SysUtils,Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls,Buttons;

type

TPathForm = class(TForm)

Panel1: TPanel;

BBOK: TBitBtn;

BBCancel: TBitBtn;

Panel2: TPanel;

leServer: TLabeledEdit;

leFile: TLabeledEdit;

procedure FormActivate(Sender:TObject);

procedureFormDeactivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

PathForm: TPathForm;

implementation

uses Data, DBUnit;

{$R *.dfm}

procedureTPathForm.FormActivate(Sender: TObject);

begin

leServer.Text:=DataModule1.fServer;

leFile.Text:=DataModule1.fFile;

end;

procedureTPathForm.FormDeactivate(Sender: TObject);

var

Path: AnsiString;

User: ShortString;

Pass: ShortString;

begin

if ModalResult=mrOK then

begin

Path:=Concat(leServer.Text,':',lefile.Text);

User:=DataModule1.fUser;

Pass:=DataModule1.fPass;

if notDataModule1.Connect(Path,User,Pass) then Close;

end;

end;

end.


Приложение Л

Листинг модуля User.pas

unit User;

interface

uses

Windows, Messages, SysUtils,Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls,Buttons;

type

TUserForm = class(TForm)

Panel1: TPanel;

BBOK: TBitBtn;

BBCancel: TBitBtn;

Panel2: TPanel;

leUser: TLabeledEdit;

lePass: TLabeledEdit;

private

{ Private declarations }

public

{ Public declarations }

end;

var

UserForm: TUserForm;

implementation

{$R *.dfm}

end.


Приложение М

Листинг модуля About.pas

unit About;

interface

uses Windows, SysUtils,Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, jpeg;

type

TAboutBox = class(TForm)

Panel1: TPanel;

ProgramIcon: TImage;

ProductName: TLabel;

Version: TLabel;

Copyright: TLabel;

Comments: TLabel;

BitBtnOK: TBitBtn;

Date: TLabel;

private

{ Private declarations }

public

{ Public declarations }

end;

var

AboutBox: TAboutBox;

implementation

{$R *.dfm}

end.


Приложение Н

Листинг модуля Data.pas

unit Data;

{$WRITEABLECONST ON}

interface

uses Graphics;

const

DBDefaultServer: ShortString='Server-1';

DBDefaultFile: ANSIString='G:\LibDB\Lib.gdb';

LibDir='\\Server-1\_Literature\__\';

InitDir='\\Server-1\_Literature\';

DBDefaultUser: ShortString='GUEST';

DBDefaultPass: ShortString='please';

IniFile='Lib.ini';

TmpDir='Tmp\';

BrowseDir=TmpDir+'Browse\';

TmpFile='Tmp';

ArcExt='.rar';

PathLen =1000;

InsertWinName=Добавление нового источника';

EditWinName='Редактирование источника ';

DeleteWinName='Удаление источника ';

FieldNames: array [0..4] ofShortString=(

'Number', 'Author', 'Title','Language', 'Sections');

SQLSortBy: array [0..4] ofShortString=(

'ORDER BY «Number» ',

'ORDER BY «Author» ',

'ORDER BY «Title» ',

'ORDER BY «Language»',

'');

SQLSortDir: array [0..1] ofShortString=(

'',

'DESC');

DefaultWinState = 2;

DefaultWinTop = 0;

DefaultWinBottom = 0;

DefaultWinLeft = 400;

DefaultWinRight = 600;

DefaultMemoTop = 0;

DefaultMemoBottom = 0;

DefaultMemoLeft = 400;

DefaultMemoRight = 600;

DefaultGrid0= 36;

DefaultGrid1= 117;

DefaultGrid2= 279;

DefaultGrid3= 52;

DefaultGrid4= 150;

DefaultGrid5= 122;

DefaultColor= clWindow;

DefaultFontCharset= 1 ;

DefaultFontColor=clWindowText;

DefaultFontHeight=-11;

DefaultFontName='MS SansSerif';

DefaultFontPitch=Ord(fpDefault);

DefaultFontSize=8;

DefaultFontBold=False;

DefaultFontItalic=False;

DefaultFontUnderLine=False;

DefaultFontStrikeOut=False;

ConfirmDelete: Boolean = True;

var

Root: ANSIString;

implementation

end.


Приложение О

Листинг модуля Files.pas

unit Files;

interface

uses Windows, SysUtils,Dialogs, IniFiles;

function CopyFiles(Handle:HWND;Source, Dest: ANSIString): Longint;

procedure DeleteFileExt(varName:ANSIString);

functionDeleteFiles(Handle:HWND; Source: ANSIString): Longint;

functionExtractFileLastDir(Name: ANSIString): ANSIString;

function GetNewArcName(Path:ShortString): ShortString;

procedure OpenFile(FileName:TFileName; Dir:ANSIString);

function PackFiles(ArcName,Path: ANSIString): Boolean;

function RunApp(Title, Name,CmdLn: ANSIString): DWORD;

function UnPackFiles(ArcName,Dir: ANSIString): Boolean;

implementation

uses ShellAPI, Forms, Classes,Data;

const

NError=3;

ErrorMsg: array[1..NError] ofShortString=(

'Упаковка файлов прервана',

'Распаковка временных файлов прервана',

'Файл неоткрывается');

RARName ='Rar.exe';

WinRARName='WinRar';

PackKey='a -ep1';

UnPackKey='x';

RARTitle='Óïàêîâêàôàéëîâ';

Bl =' ';

function CopyFiles(Handle:HWND;Source, Dest: ANSIString): Longint;

var

F: TSHFileOpStruct;

Buffer1: array[0..4096] ofChar;

Buffer2: array[0..4096] ofChar;

S: PChar;

D: PChar;

begin

FillChar(Buffer1,SizeOf(Buffer1), #0);

FillChar(Buffer2,SizeOf(Buffer2), #0);

S := @Buffer1;

D := @Buffer2;

StrPCopy(S, Source);

StrPCopy(D, Dest);

FillChar(F, SizeOf(F), #0);

F.Wnd := Handle;

F.wFunc := FO_COPY;

F.pFrom := @Buffer1;

F.pTo := @Buffer2;

F.fFlags := 0;

Result:=SHFileOperation(F);

end;

procedure DeleteFileExt(varName:ANSIString);

var

Ext: ShortString;

LenExt: Integer;

LenName: Integer;

begin

Ext:=ExtractFileExt(Name);

LenExt:=Length(Ext);

LenName:=Length(Name);

Delete(Name,LenName-LenExt+1,LenName);

end;

functionDeleteFiles(Handle:HWND; Source: ANSIString): Longint;

var

F: TSHFileOpStruct;

Buffer: array[0..4096] of Char;

S: PChar;

begin

FillChar(Buffer,SizeOf(Buffer), #0);

S := @Buffer;

StrPCopy(S, Source);

FillChar(F, SizeOf(F), #0);

F.Wnd := Handle;

F.wFunc := FO_DELETE;

F.pFrom := @Buffer;

F.fFlags := FOF_NOCONFIRMATION;

Result:=SHFileOperation(F);

end;

functionExtractFileLastDir(Name: ANSIString): ANSIString;

var

I: Integer;

L: Integer;

begin

L:=Length(Name);

I:=L+1;

repeat

Dec(I);

until Name[I]='\';

Result:=Copy(Name,I,L-I);

end;

function GetNewArcName(Path:ShortString): ShortString;

var

ExtLen: Integer;

NameLen: Integer;

I: Integer;

Ext: ShortString;

Dir: ShortString;

Name: ShortString;

begin

Dir:=ExtractFilePath(Path);

Name:=ExtractFileName(Path);

if Trim(Name)='' then

Name:='Arc';

if FileExists(Dir+Name) then

begin

Ext:=ExtractFileExt(Name);

ExtLen:=Length(Ext);

NameLen:=Length(Name);

Insert('1',Name,NameLen-ExtLen+1);

I:=2;

while FileExists(Dir+Name) do

begin

Delete(Name,NameLen-ExtLen+1,Length(Name));

Name:=Concat(Name,IntToStr(I),Ext);

Inc(I);

end;

end;

Ext:=ExtractFileExt(Name);

if Ext='' then

Name:=Concat(Name,ArcExt);

Result:=Concat(Dir,Name);

end;

procedure OpenFile(FileName:TFileName; Dir:ANSIString);

var

PPath: PChar;

POpenDir: PChar;

Res: DWORD;

begin

FileName:=Concat(FileName);

GetMem(PPath,PathLen);

GetMem(POpenDir,Length(Dir)+1);

StrPCopy(POpenDir,Dir);

FindExecutable(PChar(FileName),PChar(Dir),PPath);

Res:=ShellExecute(Application.Handle,'open',PPath,PChar(FileName),

POpenDir,SW_SHOWNORMAL);

if Res<32 then

ShowMessage(ErrorMsg[3]);

FreeMem(POpenDir);

FreeMem(PPath);

end;

function PackFiles(ArcName,Path: ANSIString): Boolean;

var

Param: ShortString;

Res: DWORD;

PPath: PChar;

F: TFileStream;

FName: TFileName;

begin

FName:=Concat(Root,TmpDir,TmpFile,'1',ArcExt);

F:=TFileStream.Create(FName,fmCreate);

GetMem(PPath, PathLen);

ifFindExecutable(PChar(FName),PChar(0),PPath)>32 then

begin

Param:=Concat(WinRARName,Bl,PackKey,Bl,ArcName,Bl,Path);

Res:=RunApp('',PPath,Param);

end

else

begin

Res:=0;

end;

if (Res<>0) then

begin

DeleteFiles(Application.Handle,ArcName);

ShowMessage(ErrorMsg[1]);

Result:=False;

end

else

Result:=True;

FreeMem(PPath);

F.Free;

DeleteFiles(Application.Handle,FName);

end;

function RunApp(Title, Name,CmdLn: ANSIString):DWORD;

var

Startup: TStartupInfo;

Process: TProcessInformation;

Status: DWORD;

Env: Pointer;

begin

ChDir(Root);

New(Env);

Startup.lpReserved := PChar(0);

Startup.lpDesktop := PChar(0);

Startup.lpTitle :=PChar(Title);

Startup.dwFlags :=STARTF_USESHOWWINDOW;

Startup.wShowWindow :=SW_SHOWNORMAL;

Startup.cbReserved2 := 0;

Startup.lpReserved2 :=PByte(0);

if CreateProcess(

PChar(Name), //lpApplicationName

PChar(CmdLn), // lpCommandLine

PSecurityAttributes(0), //lpProcessAttributes

PSecurityAttributes(0), //lpThreadAttributes

False, // bInheritHandles

NORMAL_PRIORITY_CLASS, //dwCreationFlags

Env, // lpEnvironment

PChar(0), // lpCurrentDirectory

Startup, // lpStartupInfo

Process // lpProcessInformation

)then

begin

GetExitCodeProcess(Process.hProcess,Status);

while Status = STILL_ACTIVE do

begin

Sleep(10);

GetExitCodeProcess(Process.hProcess,Status);

end;

end;

Dispose(Env);

Result:=Status;

end;

function UnPackFiles(ArcName,Dir: ANSIString): Boolean;

var

PPath: PChar;

Param: ShortString;

Res: DWORD;

begin

ArcName:=Concat('"',ArcName,'"');

GetMem(PPath, PathLen);

ifFindExecutable(PChar(ArcName),PChar(0),PPath)>32 then

begin

Param:=Concat(WinRARName,Bl,UnPackKey,Bl,ArcName,Bl,Dir);

Res:=RunApp('',PPath,Param);

end

else

begin

Res:=0;

end;

FreeMem(PPath);

if Res<>0 then

begin

DeleteFiles(Application.Handle,Dir+'*.*');

ShowMessage(ErrorMsg[2]);

Result:=False;

end

else

Result:=True;

end;

end.

еще рефераты
Еще работы по информатике, программированию