82722

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

Дипломная

Информатика, кибернетика и программирование

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

Русский

2015-03-02

648 KB

0 чел.

Содержание

Введение………………………………………………..…………………………...7

1  Средства ведения электронной библиотеки для корпоративной системы поддержки обучения………………………………………………..………...........9

1.1 Постановка задачи…………………………………………………………..9

1.1.1 Корпоративные системы электронного обучения…………………........9

1.1.2 Электронные библиотеки в корпоративных системах электронного обучения……………………………………………………................................12

1.1.3 Анализ способов представления информации в электронной библиотеке………………………………………………………………………14

1.2 Анализ требований………………………………………………………….16

1.2.1 Анализ методов и средств реализации электронной библиотеки в корпоративной системе поддержки обучения………………………………...17

1.2.2 Применение технологии баз данных для реализации электронной библиотеки…………………………………………………………………........23

1.3 Проектирование средств ведения электронной библиотеки……………..25

1.3.1 Проектирование базы данных………………………………………........25

1.3.1.1 Построение инфологической модели предметной области…………..25

1.3.1.2 Логическое проектирование………………………………………........29

1.3.2 Проектирование средства взаимодействия пользователя с базой

данных электронной библиотеки…………………………………………........32

1.3.3 Проектирование пользовательского интерфейса……………………….35

1.4 Руководство пользователя………………………………………………….37

1.5 Тестирование программных средств…………………………………........39

2   Технико-экономическое обоснование дипломного проекта……………........40

2.1 Технико-экономическое обоснование создания  ПО……………………..40

2.2 Определение затрат на разработку ПО……………………………………41

2.3 Установление цены ПО……………………………………………………..45

2.4 Установление нижнего предела цены и договорной цены с учетом тиражирования…………………………………………………………………..46

2.5 Показатели эффективности проекта……………………………………….47

2.6 Экономическое обоснование инвестиционного проекта разработки ПО.50

3 Оптимизация зрительных условий труда пользователей ПЭВМ……………..58

3.1 Обеспечение безопасных условий труда………………………………….58

3.2 Зрительная система человека и современный компьютер……………….58

3.3 Нормы и правила создания оптимальных зрительных условий при

работе с ПЭВМ………………………………………………………………….59

3.4 Защитные экраны и фильтры…………………………………………........67

3.5 Выводы…………………………………………………………………........69

Заключение………………………………………………………………………….71

Список литературы…………………………………………………………............72

Приложение А Графическая часть…………………………………………...........73

Приложение Б Листинг программы……………………………………………….84

Приложение В Ведомость дипломного проекта…………………………….........109


Введение

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

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

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

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

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

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

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

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

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


1 Средства ведения электронной библиотеки для корпоративной системы поддержки обучения

1.1 Постановка задачи

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

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

Проектирование базы данных выполнить на основе IDEF1x – технологии.

Разработать программное средство отображения информации из базы данных при помощи web – браузера на основе XML – технологии.

В качестве СУБД использовать Microsoft SQL Server 2000.

В качестве языка разработки использовать HTML, PHP и XML.

1.1.1 Корпоративные системы электронного обучения

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

– ускорение эффективного внедрения новых информационных систем и  бизнес процессов;

– проведение гибкого и эффективного обучения персонала;

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

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

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

Системы корпоративного обучения (Learning Management System - LMS) должны обладать следующими характеристиками:

– администрирование и управление учебным процессом;

– наличие средств разработки курсов;

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

– наличие технологии совместного обучения и обучения в реальном масштабе времени;

– совместимость с другими продуктами;

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

– используемые стандарты.

Сегодня на рынке LMS-систем наблюдается довольно острая конкуренция среди множества компаний – производителей таких систем. Можно выделить WebCT, IBM, Oracle и многие другие.

Однако, современные LMS-системы, как правило, обладают  рядом недостатков:

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

– отсутствие отдельных возможностей из перечисленных выше;

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

– как правило, отсутствуют средства поддержки научно-методической деятельности, что является серьезной помехой использования  таких систем на кафедрах ВУЗов.

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

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

LearningSpace – это приложение, предназначенное для организации и проведения процесса дистанционного обучения. Система позволяет изучать курсы как используя рабочее место Lotus Notes, так и с помощью Web-браузера. Участники курса вместе с преподавателями составляют группу, каждый член которой может участвовать в дискуссиях и совместных проектах, обмениваться идеями, задавать вопросы и получать ответы.

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

При изучении курса обучаемый имеет дело с четырьмя основными функциональными областями, которые называются Schedule (Расписание), MediaCenter (Библиотека), CourseRoom (Класс) и Profiles (Журнал). Работая в этих областях и перемещаясь между ними, учащийся осваивает материал курса, используя различные методы обучения и контроля, возможные при дистанционном обучении.

Рассмотрим кратко назначение перечисленных функциональных областей.

Schedule (Расписание) – учебный план или путеводитель по курсу. Здесь содержится информация о том, что и в какие сроки нужно делать при изучении курса, а также задания и контрольные мероприятия по курсу (тесты, экзамены и др.).

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

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

Profiles (Журнал) – карточки личных дел. Эта область содержит «профили» – данные об учащемся. Каждый ученик курса имеет свой «профиль». Profiles предоставляет учащимся и преподавателям место для ввода персональных данных, которые они хотят о себе сообщить.

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

1.1.2 Электронные библиотеки в корпоративных системах электронного обучения

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

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

Хотя отмеченные составляющие информационного ресурса развиваются параллельно, в перспективе вся наиболее значимая часть традиционной составляющей будет, безусловно, представлена и в электронной форме. С другой стороны, в последние десятилетия наблюдается стремительный рост объема информации, существующей только в электронной форме или создаваемой в этой форме изначально для последующего выпуска печатных, аудио-, видео- и прочих изданий. В России (не самой передовой стране в области информационной индустрии) объем информации, содержащейся только в официально зарегистрированных базах данных, превышает весь объем информации, хранимой в Российской государственной библиотеке. Общее число баз данных у организаций, проходивших в 1996 г. обследование Госкомстата, составило почти 800 тыс., в том числе около 400 тыс. собственного производства. Общий объем всех баз данных составил свыше 15 Тб (для собственных баз данных общий объем — свыше 5 Тб). Количество электронных документов, доступных через Интернет, оценивалось в 2001 г. в 3 млрд. Проиндексированный объем российского сегмента Интернета составлял в марте 2002 г. около 1 Тб [9].

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

Под целенаправленным использованием прежде всего понимается:

– адекватность воспроизведения информации, не зависящая от средств реализации;

– удобные процедуры копирования и передачи информации;

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

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

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

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

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

1.1.3 Анализ способов представления информации в электронной библиотеке

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

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

Таблица 1.1 – Расчеты представления текста в различных форматах [8]

Учебный материал

Текстовые форматы

WORD 97

PDF

HTML

Текст (47000 символов, 24 страницы)

130 Kb

5,4 Kb/стр.

72 Kb

3 Kb/стр.

59 Kb

2,4 Kb/стр.

Текст и 6 схем (47000 символов, 26 страниц)

558 Kb

20,7 Kb/стр.

171 Kb

6,5 Kb\стр.

120 Kb

4,6 Kb/стр.

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

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

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

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

Таким образом, предпочтительными форматами при формировании учебных материалов электронной библиотеки являются следующие: HTML, GIF, JPEG, MP3, WMA, MPEG-4.

1.2 Анализ требований

В рамках создаваемой на кафедре МОиПЭВМ корпоративной системы поддержки учебного процесса разработать средства ведения электронной библиотеки. Информация об учебных материалах должна храниться в реляционной базе данных. Проектирование базы данных выполнить на основе IDEF1x – технологии. Разработать программное средство отображения информации из базы данных при помощи web – браузера на основе XML – технологии. В качестве СУБД использовать Microsoft SQL Server 2000. В качестве языка разработки использовать HTML, PHP и XML.

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

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

1.2.1 Анализ методов и средств реализации электронной библиотеки в корпоративной системе поддержки обучения

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

Проанализировав поставленную задачу, и в частности, возможность удаленного доступа к системе, выбор средств разработки пал на следующие языковые средства и среды взаимодействия приложений: языки разметки текста HTML и XML, языки программирования PHP и JavaScript, web-сервер Apache, СУБД Microsoft SQL Server 2000.

“Родным” форматом представления данных в сети является язык разметки гипертекста (HTML), именно поэтому он был изначально взят в качестве базового для разработки приложения. Но средств языка HTML недостаточно для разработки такого продукта, как ПО ведения электронной библиотеки. HTML предоставляет собой мощное средство для отображения различного рода информации, но при этом почти не имеет средств для представления логики структурированной информации. Для этой цели можно использовать не так давно разработанный расширенный язык разметки (XML).

XML (Extensible Markup Language) - это новый SGML-производный язык разметки документов, позволяющий структурировать информацию разного типа, используя для этого произвольный набор инструкций. Сегодня XML может использоваться в любых приложениях, которым нужна структурированная информация - от сложных геоинформационных систем, с гигантскими объемами передаваемой информации до обычных "однокомпьютерных" программ, использующих этот язык для описания служебной информации. XML-документы могут использоваться в качестве промежуточного формата данных в трехзвенных системах. Обычно схема взаимодействия между серверами приложений и баз данных зависит от конкретной СУБД и диалекта SQL, используемого для доступа к данным. Если же результаты запроса будут представлены в некотором универсальном текстовом формате, то звено СУБД, как таковое, станет "прозрачным" для приложения. Информация, содержащаяся в XML-документах, может изменяться, передаваться на машину клиента и обновляться по частям. XML-документ представляет собой обычный текстовый файл, в котором при помощи специальных маркеров создаются элементы данных, последовательность и вложенность которых определяет структуру документа и его содержание. Основным достоинством XML документов является то, что при относительно простом способе создания и обработки (обычный текст может редактироваться любым тестовым процессором и обрабатываться стандартными XML анализаторами), они позволяют создавать структурированную информацию, которую хорошо "понимают" компьютеры. При создании собственного языка разметки можно придумывать любые названия элементов, (почти любые, т.к. список допустимых символов ограничен и приведен в спецификации XML), соответствующих контексту их использования. В этом и заключается гибкость и расширяемость XML-производных языков - они создаются разработчиком "на лету", согласно его представлениям о структуре документа, и могут затем использоваться универсальными программами просмотра наравне с любыми другими XML-производными языками, т.к. вся необходимая для синтаксического анализа информация заключена внутри документа. Создавая новый формат, необходимо учитывать тот факт, что документов, "написанных на XML", не может быть в принципе - в любом случае авторы документа для его разметки используют основанный на стандарте XML (т.н. XML-производный) язык, но не сам XML. XML документы могут передаваться по HTTP и отображаться программой просмотра также, как и обычные HTML- страницы. Для этого нужно на стороне клиента иметь браузер, поддерживающий стилевые таблицы или JavaScript. Как уже отмечалось, в отличии от HTML, XML никак не определяет способ отображения и использования описываемых с его помощью элементов документа, т.е. программе-анализатору предоставляется возможность самой выбирать нужное оформление. Для того, чтобы использовать данные, определяемые элементами XML, например, отображать их на экране пользователя, необходимо написать программу-анализатор, которая бы выполняла эти действия.

Одним из самых мощных интерфейсов доступа к содержимому XML документов является Document Object Model - DOM. Объектная модель XML документов является представлением его внутренней структуры в виде совокупности определенных объектов. Для удобства эти объекты организуются в некоторую древообразную структуру данных - каждый элемент документа может быть отнесен к отдельной ветви, а все его содержимое, в виде набора вложенных элементов, комментариев, секций CDATA и т.д. представляется в этой структуре поддеревьями. Из внутренних сценариев HTML страницы обращение к методам объекта данных выглядит также как и для любого другого элемента документа - при помощи его идентификатора или по индексу в коллекции классов страницы.

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

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

во-вторых, XML-документ сохраняется в файл при формировании среза. В последующем он анализируется в сценарии JavaScript средствами DOM (Document Object Model).

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

– традиционностью;

– простотой;

– эффективностью;

– безопасностью;

– гибкостью.

Существует еще одна «характеристика», которая делает PHP особенно привлекательным: он распространяется бесплатно.

Традиционность. Язык PHP кажется знакомым программистам, работающим в разных областях. Многие конструкции языка позаимствованы из C и Perl, а нередко код PHP практически неотличим от того, что встречается в типичных программах C или Pascal. Это заметно снижает начальные усилия при изучении PHP.

Простота. Сценарий PHP может состоять из 10 000 строк или из одной строки – все зависит от специфики задачи. Не надо подгружать библиотеки, указывать специальные параметры компиляции или что-нибудь в этом роде. Механизм PHP просто начинает выполнять код после первой экранирующей последовательности (<?) и продолжает выполнение до того момента, когда он встретит парную экранирующую последовательность (?>). Если код имеет правильный синтаксис, он исполняется в точности так, как указал программист.

Эффективность. Эффективность является исключительно важным фактором при программировании для многопользовательских сред, к числу которых относится и WWW. В PHP 4.0 был реализован механизм выделения ресурсов и обеспечена улучшенная поддержка объектно-ориентированного программирования, а также средства управления сеансом. В последней версии появился и механизм подсчета ссылок (reference counting), предотвращающий выделение лишней памяти.

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

Средства безопасности системного уровня. В PHP реализованы механизмы безопасности, находящиеся под управлением администраторов; при правильной настройке PHP это обеспечивает максимальную свободу действий и безопасность. PHP может работать в так называемом безопасном режиме (safe mode), который ограничивает возможности применения PHP пользователями по ряду важных показателей. Например, можно ограничить максимальное время выполнения и использование памяти (неконтролируемый расход памяти отрицательно влияет на быстродействие сервера). По аналогии с cgi-bin администратор также может устанавливать ограничения на каталоги, в которых пользователь может просматривать и исполнять сценарии PHP, а также использовать сценарии PHP для просмотра конфиденциальной информации на сервере (например, файла passwd).

Средства безопасности уровня приложения. В стандартный набор функций PHP входит ряд надежных механизмов шифрования. PHP также совместим с многими приложениями независимых фирм, что позволяет легко интегрировать его с защищенными технологиями электронной коммерции (e-commerce). Другое преимущество заключается в том, что исходный текст сценариев PHP нельзя просмотреть в браузере, поскольку сценарий компилируется до его отправки по запросу пользователя. Реализация PHP на стороне сервера предотвращает похищение нетривиальных сценариев пользователями, знаний которых хватает хотя бы для выполнения команды View Source.

Гибкость. Поскольку PHP является встраиваемым (embedded) языком, он отличается исключительной гибкостью по отношению к потребностям разработчика. Хотя PHP обычно рекомендуется использовать в сочетании с HTML, он с таким же успехом интегрируется и в JavaScript, WML, XML и другие языки. Кроме того, хорошо структурированные приложения PHP легко расширяются по мере необходимости (впрочем, это относится ко всем основным языкам программирования).

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

Поскольку PHP не содержит кода, ориентированного на конкретный web-сервер, пользователи не ограничиваются определенными серверами (возможно, незнакомыми для них). Apache, Microsoft IIS, Netscape Enterprise Server, Stronghold и ZeusPHP работает на всех перечисленных серверах. Поскольку эти серверы работают на разных платформах, PHP в целом является платформенно-независимым языком и существует на таких платформах, как Solaris, FreeBSD, Windows 9x/NT, и др.

Наконец, средства PHP позволяют программисту работать с внешними компонентами, такими как Enterprise Java Beans или COM-объекты Win32. Благодаря этим новым возможностям PHP занимает достойное место среди современных технологий и обеспечивает масштабирование проектов до необходимых пределов.

Бесплатное распространение. Стратегия Open Source наделала немало шуму в программной отрасли. Распространение исходных текстов программ в массах оказало несомненно благотворное влияние на многие проекты, в первую очередь – Linux, хотя и успех проекта Apache сильно подкрепил позиции сторонников Open Source. Сказанное относится и к истории создания PHP, поскольку поддержка пользователей со всего мира оказалась очень важным фактором в развитии проекта PHP.

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

JavaScript используется в разрабатываемом приложении для обработки внутренних событий страницы, генерируемых пользователем. Но кроме этого, он используется для генерации HTML-страниц в режиме работы пользователя с локальной копией электронной библиотеки. Использование копии, скорее всего, будет происходить на машине, на которой не установлен интерпретатор PHP. Поэтому необходимо языковое средство, достаточно распространенное, коим и является JavaScript, поставляемый с большинством web-браузеров.

1.2.2 Применение технологии баз данных для реализации электронной библиотеки

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

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

В разрабатываемой электронной библиотеке база данных является центральным объектом, неся всю ее информационно-логическую нагрузку. В базе данных содержится вся информация о структуре библиотеки, о файлах, помещенных в ней, о пользователях системы и их правах доступа к документам, и т.д. Для реализации базы данных электронной библиотеки должна использоваться СУБД Microsoft SQL Server 2000. Использование этой СУБД объясняется тем, что база данных электронной библиотеки реализуется в рамках единой базы всей системы поддержки учебного процесса, а для ее реализации была выбрана именно эта СУБД.

Microsoft SQL Server является реляционной многопользовательской СУБД, предназначенной для выполнения запросов и транзакций к большим базам данных. SQL Server легко интегрируется с Microsoft Internet Information Server, предоставляя возможность публиковать данные в приложениях для интрасетей и Internet. Кроме того, он включает множество инструментов, важных для критичных по времени выполнения задач, в том числе резервное копирование и восстановление “на ходу”, автоматическое восстановление при ошибках и надежную защиту данных. SQL Server поддерживает Transact-SQL, расширенную версию SQL, позволяющую программировать бизнес-правила и логику с помощью хранимых процедур, триггеров и ограничений. SQL Server будет хорошим выбором в случае большой многопользовательской базы данных и правильным решением в случае обработки транзакций или работы с задачами, критичными ко времени исполнения.

С помощью Microsoft SQL Server можно реализовать решения, основанные на WWW, многими способами, используя браузер в качестве универсального клиента. Одним из таких средств является Microsoft SQL Server Web Assistant, построенный по принципу мастеров, которые можно найти почти во всех продуктах Microsoft. Web Assistant поставляется вместе с Microsoft SQL Server и Internet Database Connector, входящим в Internet Information Server.

1.3 Проектирование средств ведения электронной библиотеки

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

1.3.1.1 Построение инфологической модели предметной области

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

Процесс построения инфологической модели состоит из следующих шагов:

– определение сущностей;

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

– задание ключей;

– определение атрибутов сущностей;

– приведение модели к требуемому уровню нормальной формы.

Первый шаг моделирования – выделение сущностей. Каждая сущность должна обладать следующими свойствами:

– иметь уникальное имя, и к одному и тому же имени должна всегда применяться одна и та же интерпретация;

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

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

Следующим шагом моделирования является идентификация связей.

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

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

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

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

Для предметной области разрабатываемой системы был составлен набор сущностей, представленный в соответствии с таблицей 1.2.

Таблица 1.2 – Сущности предметной области

Название сущности

Идентификатор

Тип связи

Автор курса

Autor_kurs

М:1 (Пользователь)

М:1 (Учебный курс)

Права доступа к документам

Access_to_doc

М:1 (Пользователь)

М:1 (Учебный материал)

Электронная библиотека

El_bibl

1:М (Курс электронной библиотеки)

Курс электронной библиотеки

Kurs_el_bibl

М:1 (Электронная библиотека)

М:1 (Учебный курс)

Тип учебного материала

Type_u_material

1:М (Учебный материал)

Учебный курс

U_kurs

1:М (Учебный материал)

1:М (Автор курса)

1:М (Курс электронной библиотеки)

Учебный материал

U_material

М:1 (Тип учебного материала)

М:1 (Учебный курс)

1:М (Права доступа к документам)

1:М (Закладка пользователя)

Пользователь

User

М:1 (Группы пользователей)

1:М (Автор курса)

1:М (Закладка пользователя)

1:М (Права доступа к документам)

Группы пользователей

Group_user

1:М (Пользователь)

Закладка пользователя

Zakladka

М:1 (Пользователь)

М:1 (Учебный материал)

Следующий шаг моделирования – идентификация атрибутов.

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

Для разрабатываемой предметной области были определены атрибуты сущностей, представленные в соответствии с таблицами 1.3 – 1.12.

Таблица 1.3 – Атрибуты сущности Автор курса

Имя атрибута

Формат

Область допустимых значений

Роль атрибута

ID_записи

Целый, беззнаковый

0-4294967295

Ключ

ID_курса

Целый, беззнаковый

0-4294967295

Атрибут для связки

ID_пользователя

Целый, беззнаковый

0-4294967295

Атрибут для связки

Таблица 1.4 – Атрибуты сущности Права доступа к документам

Имя атрибута

Формат

Область допустимых значений

Роль атрибута

ID_записи

Целый, беззнаковый

0-4294967295

Ключ

ID_пользователя

Целый, беззнаковый

0-4294967295

Атрибут для связки

ID_уч_материала

Целый, беззнаковый

0-4294967295

Атрибут для связки

Права

Малое целое

0-255

Таблица 1.5 – Атрибуты сущности Электронная библиотека

Имя атрибута

Формат

Область допустимых значений

Роль атрибута

ID_эл_библиотеки

Целый, беззнаковый

0-4294967295

Ключ

Имя_эл_библиотеки

Текст длиной до 255 символов

Корневая_папка

Текст длиной до 255 символов

Таблица 1.6 – Атрибуты сущности Курс электронной библиотеки

Имя атрибута

Формат

Область допустимых значений

Роль атрибута

ID_записи

Целый, беззнаковый

0-4294967295

Ключ

ID_эл_библиотеки

Целый, беззнаковый

0-4294967295

Атрибут для связки

ID_курса

Целый, беззнаковый

0-4294967295

Атрибут для связки

Таблица 1.7 – Атрибуты сущности Тип учебного материала

Имя атрибута

Формат

Область допустимых значений

Роль атрибута

ID_типа

Целый, беззнаковый

0-4294967295

Ключ

Название_типа

Текст длиной до 255 символов

Таблица 1.8 – Атрибуты сущности Учебный курс

Имя атрибута

Формат

Область допустимых значений

Роль атрибута

ID_курса

Целый, беззнаковый

0-4294967295

Ключ

Название_курса

Текст длиной до 255 символов

Таблица 1.9 – Атрибуты сущности Учебный материал

Имя атрибута

Формат

Область допустимых значений

Роль атрибута

ID_уч_материала

Целый, беззнаковый

0-4294967295

Ключ

Название_материала

Текст длиной до 255 символов

ID_типа

Целый, беззнаковый

0-4294967295

Атрибут для связки

ID_курса

Целый, беззнаковый

0-4294967295

Атрибут для связки

Путь_к_файлу

Текст длиной до 255 символов

Таблица 1.10 – Атрибуты сущности Пользователь

Имя атрибута

Формат

Область допустимых значений

Роль атрибута

ID_пользователя

Целый, беззнаковый

0-4294967295

Ключ

ID_группы

Целый, беззнаковый

0-4294967295

Атрибут для связки

Личные_данные

Текст длиной до 255 символов

Логин

Текст длиной до 255 символов

Пароль

Текст длиной до 255 символов

Таблица 1.11 – Атрибуты сущности Группы пользователей

Имя атрибута

Формат

Область допустимых значений

Роль атрибута

ID_группы

Целый, беззнаковый

0-4294967295

Ключ

Имя_группы

Текст длиной до 255 символов

ID_родительской_группы

Целый, беззнаковый

0-4294967295

Атрибут для связки

Таблица 1.12 – Атрибуты сущности Закладка пользователя

Имя атрибута

Формат

Область допустимых значений

Роль атрибута

ID_записи

Целый, беззнаковый

0-4294967295

Ключ

ID_пользователя

Целый, беззнаковый

0-4294967295

Атрибут для связки

ID_уч_материала

Целый, беззнаковый

0-4294967295

Атрибут для связки

Для разработанной предметной области была составлена IDEF1X-диатрамма, представленная в приложении А.

1.3.1.2 Логическое проектирование

Как известно, единственным средством структуризации данных в

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

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

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

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

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

Отношения разрабатываемой предметной области представлены ниже.

Отношение Электроннаябиблиотека

Схема отношения.   Электроннаябиблиотека(ID_эл_библиотеки, Имя_эл_библиотеки, Корневая папка)

Возможные ключи. Имя_эл_библиотеки

Функциональные зависимости.

ID_эл_библиотеки → Имя_эл_библиотеки, Корневая папка

Имя_эл_библиотеки → ID_эл_библиотеки, Корневая папка

Отношение Учебныйкурс

Схема отношения. Учебныйкурс(ID_курса, Название_курса)

Возможные ключи. Нет

Функциональные зависимости. ID_курса → Название_курса

Отношение Курсэлектроннойбиблиотеки

Схема отношения. 

Курсэлектроннойбиблиотеки(ID_записи, ID_эл_библиотеки, ID_курса)

Возможные ключи. нет

Функциональные зависимости. ID_записи → ID_эл_библиотеки, ID_курса

Отношение Пользователь

Схема отношения. Пользователь(ID_пользователя, Логин, Пароль)

Возможные ключи. нет

Функциональные зависимости. ID_пользователя → Логин, Пароль

Отношение Авторкурса

Схема отношения. Авторкурса(ID_записи, ID_курса, ID_пользователя)

Возможные ключи. нет

Функциональные зависимости. ID_записи → ID_курса, ID_пользователя

Отношение Учебныйматериал

Схема отношения. Учебныйматериал (ID_уч_материала, Название_материала, ID_типа, ID_курса, Путь_к_файлу)

Возможные ключи. нет

Функциональные зависимости. ID_уч_материала → Название_материала, ID_типа, ID_курса, Путь_к_файлу

Отношение Правадоступакдокументам

Схема отношения.  Правадоступакдокументам (ID_записи, ID_пользователя, ID_уч_материала, Права)

Возможные ключи. нет

Функциональные зависимости.

ID_записи → ID_пользователя, ID_уч_материала, Права

Отношение Закладкапользователя

Схема отношения. 

Закладкапользователя(ID_записи, ID_пользователя, ID_уч_материала)

Возможные ключи. нет

Функциональные зависимости. 

ID_записи → ID_пользователя, ID_уч_материала

Отношение Типучебногоматериала

Схема отношения. Типучебногоматериала(ID_типа, Название_типа)

Возможные ключи. Название_типа

Функциональные зависимости. ID_типа → Название_типа

Название_типа → ID_типа

Отношение Группыпользователей

Схема отношения. Группыпользователей (ID_группы, Имя_группы, ID_родительской_группы)

Возможные ключи. Нет

Функциональные зависимости. 

ID_группы → Имя_группы, ID_родительской_группы

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

1.3.2 Проектирование средства взаимодействия пользователя с базой данных электронной библиотеки

База данных электронной библиотеки является частью единой базы данных системы поддержки учебного процесса, непосредственной реализацией которой занимается другой программист. На момент реализации средств ведения электронной библиотеки эта база не была реализована, поэтому мне пришлось сделать отдельную базу данных электронной библиотеки. Она аналогична той части общей базы, с которой будут работать средства ведения электронной библиотеки. База данных реализована с использованием СУБД Microsoft Access, а работа с ней ведется через ODBC. Работа с базой данных в приложении построено таким образом, чтобы при минимальных исправлениях в коде, программу можно было переориентировать на работу непосредственно с конкретной СУБД (а не через ODBC). Таки образом, когда будет реализована действительная база данных разрабатываемой системы, то программный код средств ведения электронной библиотеки будет несложно исправить под эту базу.

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

Ниже коротко рассмотрено функциональное назначение каждого модуля.

Модуль Viewer.php. Вызывается в режиме просмотра документов. Делит окно браузера на три фрейма, в которые включаются файлы tree.php, header.php и right.html. Кроме того, в одном из фреймов отображается документ, выбираемый пользователем для просмотра.

Модуль header.php. Заголовок окна в режиме просмотра документов. Выводит информацию об открытом документе и управляющие органы для формирования закладки пользователя. При активации управляющих органов делает закладку пользователя для текущего документа.

Модуль Tree.php. Отображает содержание электронной библиотеки. Дерево разделов библиотеки отображается в раскрывающемся меню. Предоставляется возможность изменения структуры отображаемого дерева документов. Выбор просматриваемого документа осуществляется щелчком по его имени в раскрывающемся меню. Для отображения дерева документов пользуется функциями подгружаемого модуля XMLfunc.php.

Модуль AddDoc.php. Вызывается в режиме добавления документов. Делит окно браузера на два фрейма, в которые включаются файлы TreeAdd.php и Add.php.

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

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

Модуль DeleteDoc.php. Вызывается в режиме удаления документов. Делит окно браузера на два фрейма, в которые включаются файлы TreeAdd.php и Delete.php.

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

Модуль CopyCreater.php. Вызывается в режиме выполнения среза библиотеки. В каталог CD-копии помещает файлы доступных пользователю документов, файлы, содержащие структуру разделов библиотеки и файлы, необходимые для просмотра данной копии. Для отображения дерева документов пользуется функциями подгружаемого модуля DBfunc.php.

Модуль XMLfunc.php. Файл, содержащий функции отображения в web-браузер документа XML, несущего в себе структуру разделов электронной библиотеки. Дерево разделов отображается в виде раскрывающегося меню. Для формирования дерева документов пользуется функциями подгружаемого модуля DBfunc.php.

Модуль DBfunc.php. Файл, содержащий функции отображения информации о документах электронной библиотеки и структуры ее разделов в XML-документ. В зависимости от полученного параметра, дерево разделов строится по разным критериям.

Модули Viewer.html, Tree.html, Header.html. Модули для работы с CD-копией электронной библиотеки. Предоставляют возможность просмотра документов данной копии. Разбор XML-документов, содержащих информацию о разделах, осуществляется средствами JavaScript с использованием DOM (Document Object Model).

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

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

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

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

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

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

Одним из важных аспектов создания интерфейса является выбор цветовой палитры. В выборе цветовой палитры должны быть учтены эргономические требования: значения цветов должны быть постоянны и соответствовать устойчивым ассоциациям. Ощущение времени и пространства - наибольшее чувство удаления от предмета (увеличение пространства) создают цвета сине-голубой части спектра, а противоположные им оранжево-желтые тона дают эффект приближения предметов; цвета красно-желтой части спектра вызывают ощущение тепла, цвета сине-голубой части спектра - ощущение холода, максимум ощущения тепла падает на оранжевый цвет. Основное свойство «теплых» цветов - вызывать возбуждение, они стимулируют интерес человека к внешнему миру, общению и деятельности. «Холодные» цвета вызывают торможение. Это успокаивающие и снимающие возбуждение цвета, они вносят в поведение человека рассудочность, рациональность. Наиболее возбуждающее действие оказывает красный цвет, воспринимающийся также как самый активный. Визуальное равновесие приходится на зеленый цвет, сочетающий в себе легкость и живость желтого со спокойствием и тяжестью синего. При совмещении активных и пассивных цветов нужно учитывать, что активные цвета всегда воспринимаются ярче и лучше запоминаются, поэтому для достижения равновесия они должны подаваться в меньших пропорциях. Цвета сине-голубой части хроматического круга считаются наиболее тяжелыми для восприятия. Желтый цвет, наоборот, выглядит наиболее легким и воздушным. Очень хорошо гармонируют полярные цветовые таблицы, когда они сочетаются на сером фоне или в разных плоскостях. Серый - нейтральный цвет. Он не привлекает к себе внимания, не вызывает никаких реакций, создает ощущение стабильности.

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

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

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

1.4 Руководство пользователя

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

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

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

В режиме формирования локальной копии библиотеки в окно браузера выводится дерево разделов библиотеки, некоторая информация по поводу выполнения среза и кнопка, по активации которой и происходит создание копии. Копия создается в корневом каталоге документов web-сервера. Помимо документов библиотеки в нее включаются файлы, необходимые для работы с ней. Для работы с копией надо в окне браузера открыть файл Viewer.html. Локальная копия электронной библиотеки может использоваться только в режиме просмотра документов. Для работы с ней требуется web-браузер с поддержкой JavaScript и XML.

1.5 Тестирование программных средств

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

Тестирование проходило на компьютере, работающем под управлением операционных систем Microsoft Windows Millenium Edition и Microsoft Windows 2000 Professional.


2 Технико-экономическое обоснование дипломного проекта

2.1 Технико-экономическое обоснование создания  ПО

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

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

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

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

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

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

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

2.2 Определение затрат на разработку ПО

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

(2.1)

где Зр  – заработная плата разработчиков, руб.;

Зд  –  дополнительная заработная плата, руб.;

Зс  – отчисления на социальные нужды, руб.;

Зн  –  накладные расходы, руб.;

Рэкспл  – эксплуатационные расходы, руб.

Оплата труда разработчика ПО 2800 руб. в месяц (89,56 руб. в день). Разработка ПО велась в течение 52 дней. Таким образом, общая заработная плата за 60 дней разработки составит

Дополнительная заработная плата определяется по формуле:

где Кд – коэффициент, учитывающий дополнительную заработную плату (0,08 – 0,12).

Примем Кд равным 0,08, тогда получаем, что дополнительная заработная плата составляет

Отчисления на социальные нужды определяются по формуле:

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

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

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

Исходя из того, что П равен 75 %, получим накладные расходы в размере

руб

Расчет стоимости одного часа эксплуатации ЭВМ производится по формуле:

(2.2)

где Сэ – стоимость электроэнергии, потребляемой компьютером за год, руб.;

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

А – амортизационные отчисления, руб.;

Ср – расходы на текущий ремонт, руб.;

Фг – годовой полезный фонд времени работы ЭВМ, ч.

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

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

где Мn – потребляемая мощность ЭВМ, кВт;

Цэ – цена 1 кВт-ч электроэнергии, руб.

Согласно последней тарифной ставке 1 кВт-ч электроэнергии стоит 0,75 руб. Потребляемая мощность компьютера 0,3 кВт. Затраты на электроэнергию составят

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

(2.3)

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

Эо  – количество обслуживаемых им единиц оборудования;

12 – количество месяцев в году.

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

Амортизационные отчисления определяются по формуле:

(2.4)

где На – норма амортизации ускоренная (50 %);

С – балансовая стоимость компьютера, руб.

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

Таким образом, согласно формуле (2.4), амортизационные отчисления составят

Расходы на текущий ремонт Ср определяются как 5 % от балансовой стоимости компьютера. Таким образом, получаем, что расходы на текущий ремонт составят

 

Подставляя вычисленные значения в формулу (2.2) получаем, что стоимость одного часа эксплуатации ЭВМ равна

Из 52 дней, затраченных на разработку ПО, 42 дня приходится на кодирование и 10 дней – на отладку ПО. Учитывая, что в день компьютер работает в течение восьми часов, получаем, что эксплуатационные расходы составят

Согласно формуле (2.1) затраты на разработку программного обеспечения составят

2.3 Установление цены ПО

Цена разработанной программы определяется по формуле:

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

Приняв нормативом рентабельности 21 %, цена разрабатываемого программного продукта составит

Итак, цена программного продукта, полученного в ходе дипломного проектирования, составляет 16161 руб. при норме рентабельности 21 %. Себестоимость программы – 13356 руб.

2.4 Установление нижнего предела цены и договорной цены с учетом тиражирования

В условиях высокой и неоднородной инфляции, что характерно для России, целесообразно проводить расчеты в стабильных денежных единицах (долларах США) с последующим перерасчетом в текущие цены (рубли) и учетом инфляции. В связи с этим проведем перерасчет ранее полученной себестоимости разрабатываемого ПО из рублей в доллары США и в дальнейшем все расчеты будут проводиться в них. С учетом последнего курса доллара (30,50 руб. за доллар США) затраты на ПО составляют 437,93 доллара (13356 руб.).

Нижний предел цены (Цнп) с учетом желаемой рентабельности (Р), тиражированием (N) и НДС (Н) определяется по формуле:

Приняв НДС равным 20 %, а за желаемый тираж в первый год 8 штук рассчитываем предел нижней цены

Договорная цена устанавливается с учетом дополнительной прибыли, которая принимается в процентах к Цнп (последний не может быть ниже ставки банковского процента – 15 % для валютного депозита) и равна

Окончательную цену разрабатываемого ПО примем на уровне 95 долларов.

2.5 Показатели эффективности проекта

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

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

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

Поток накопленных реальных денег (  ) должен быть положительным на каждом шаге расчета.

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

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

Соизмерение разновременных затрат и результатов осуществляется путем дисконтирования – приведения их к ценностям в начальном периоде. Для этого используется норма дисконта (Е), равная приемлемой норме дохода на капитал. При расчетах в твердой валюте в качестве нормы дисконта (барьерной ставки) принимается валютный депозит 0,15, для рискованных проектов – до 0,18-0,2.

Приведение осуществляется путем умножения затрат и результатов на коэффициент дисконтирования (КД), равный

(2.5)

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

– чистая дисконтированная стоимость (доход);

– внутренняя норма доходности (рентабельности);

– индекс доходности (рентабельности инвестиций);

– срок окупаемости.

Чистая дисконтированная стоимость (ЧДС) или интегральный экономический эффект (Эин) определяется как сумма потоков реальных денег (текущих эффектов Эt), приведенная за весь расчетный период (Т) к начальному году. Чистая дисконтированная стоимость вычисляется по формуле:

(2.6)

где  Рt – результат в t-м году расчета, долл.;

Зt – затраты в том же году, долл.

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

дополнительная прибыль вследствие увеличения объема реализации;

экономия за счет снижения эксплуатационных затрат.

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

Затраты на t-м шаге рассчитываются по формуле:

где Иt – текущие издержки на t-м шаге;

Кt – единовременные затраты на том же шаге;

Лt – выручка от продажи выбывающих фондов.

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

– единовременные вложения (К) имеют место на нулевом шаге;

– среднегодовые результаты (Р) и затраты (З) являются постоянными на протяжении периода.

При этих допущениях формула интегрального эффекта имеет вид:

где  Нa – норма амортизационных отчислений, равная

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

(2.7)

где  – значение ставки дисконта, при котором ЧДС принимает последнее положительное значение;

– последнее положительное значение ЧДС, долл.;

– последнее отрицательное значение ЧДС, долл.

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

Индекс доходности (ИД) рассчитывается по формуле:

(2.8)

где  – затраты на t-м шаге расчетов без учета инвестиций;

К – привлеченная величина инвестиций.

Привлеченная величина инвестиций рассчитывается по формуле:

При ИД>1 проект является эффективным; при ИД<1 – убыточным.

Срок окупаемости (Ток) – это период времени, который потребуется для возмещения инвестиций. Его определяют с учетом дисконтирования, а именно:

(2.9)

2.6 Экономическое обоснование инвестиционного проекта разработки ПО

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

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

Предварительно следует установить горизонт расчетов. Его можно принять равным сроку морального устаревания ПО (Ту), равного

где Ур – коэффициент, учитывающий время годового устаревания – 0,003-0,4.

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

В дальнейшем понадобятся следующие данные:

– НДС составляет 20 %;

– налог на доход 35 %;

– стоимость доработки в конкретных условиях – 20 % от цены ПО.

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

Реальные деньги за каждый год расчета составят величину равную

(2.10)

где Дt – денежный поток на t-м шаге расчета, долл.;

Пt – прибыль от реализации на t-м шаге расчета, долл.;

0,35 – налог на доход.

Прибыль от реализации определяется по формуле:

(2.11)

где  Вt – выручка от реализации без НДС на t-м шаге расчета, долл.;

Сt – себестоимость на t-м шаге расчета, долл.

Выручку от реализации (доход) вычисляется по формуле:

     (2.12)

где  Ц – цена изделия, долл.;

Nt – объем продаж на t-м шаге расчета, шт.

Подставляя данные в формулу (2.12) получаем, что доход в первый год составил 760 долл. (95долл.* 8 шт.), во второй – 570 долл. (95 долл.* 6 шт.), в третий – 475 долл. (95 долл.* 5 шт.).

Себестоимость вычисляется по формуле:

(2.13)

где Здор – расходы на доработку на t-м шаге расчета;

Зндс – расходы с учетом НДС на t-м шаге расчета.

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

Подставляя ранее полученный доход за каждый год в формулу, получим, что расход на доработку в первый год составил 152 долл. (760 долл. * 0.20), во второй – 114 долл. (570 долл. * 0.20), в третий – 95 долл.( 475 долл. * 0.20).

Постольку поскольку НДС составляет 20 %, то расходы с учетом НДС (Зндс) примут те же значения, что и расходы на доработку, а именно: 152, 114 и 95 долларов соответственно в первый, второй и третий годы расчета.

По формуле (2.13) получаем, что себестоимость в первый год расчета равна 304 долл. (152+152), во второй – 228 долл. (114+114), в третий – 190 долл.

По формуле (2.11) вычисляется прибыль от реализации, и она составляет 456 долл. в первый год (760 – 304), 342 долл. во второй (570– 228) и 285 долл. в третий (475 – 190).

По формуле (2.10) получаем

где Д1, Д2, Д3 – денежные потоки в первый, второй и третий годы расчета.

Сведем полученные результаты в таблицу 2.1.

Таблица 2.1 – План денежных потоков

Показатели

0-й год, долл.

1-й год, долл.

2-й год, долл.

3-й год, долл.

Выручка от реализации

760

570

475

Расходы на разработку

437,93

Расходы НДС (20 %)

152

114

95

Расходы на доработку

152

114

95

Прибыль от реализации

456

342

285

Налог на доход (35 %)

159,6

119,7

99,75

Денежные потоки

437,93

296,4

222,3

185,25

Диаграмма денежных потоков приведена на рисунке 2.1.

Рисунок 2.1 – Диаграмма денежных потоков

Вычисление ставки дисконтирования:

где 0,18 – цена капитала (валютный депозит);

0,04 – коэффициент, учитывающий риск;

0,01 – уровень инфляции на валютном рынке.

По формуле (2.5) вычислим коэффициент дисконтирования:

Вычислим текущую дисконтированную стоимость, текущую дисконтированную стоимость с нарастающим итогом и чистую дисконтированную стоимость по формуле (2.6) и занесем результаты в таблицу 2.2.

Таблица 2.2 – Вычисление чистой дисконтированной стоимости

Год

КД при Е=0,23

Дt

ТДС

ТДС нарастающим итогом

0

1

-437,93

-437,93

-437,93

1

0,8130

296,4

240,97

-196,96

2

0,6540

222,3

145,38

-51,58

3

0,5374

185,25

99,55

+47,97

ЧДС=+47,97

График ТДС и ТДС с нарастающим итогом приведен на рисунке 2.2.

По формуле (2.9) определяем срок окупаемости инвестиций:

Рисунок 2.2 – График ТДС и ТДС с нарастающим итогом

По формуле (2.8) получаем, что индекс доходности равен

Так как при ИД>1 проект является эффективным, при ИД<1 – убыточным, а рассчитанный индекс доходности равен 1,11, следовательно, проект разработки ПО является эффективным.

Средняя рентабельность проекта равна

где Т=3, т.к. проект рассчитывается на три года.

Для того, чтобы вычислить внутреннюю норму доходности (Евн) необходимо рассчитать ЧДС при ставке дисконта (Е) равной 30 % и при Е=31 %. С этой целью рассчитывается КД при Е=30 % по формуле (2.5):

Вычисление ЧДС по формуле (2.6) при Е=30 % приведено в таблице 2.3.

Таблица 2.3

Год

КД при Е=30 %

Дt

ТДС

0

1

-437,93

-437,93

1

0,77

296,4

228,23

2

0,59

222,3

131,16

3

0,46

185,25

85,22

ЧДС=6,68

Аналогичным образом рассчитывается ЧДС при Е=31 %. Для начала вычисляется КД при Е=31 %.

Вычисление ЧДС при Е=31 % по формуле (2.6) приведено в таблице 2.4.

Таблица 2.4

Год

КД при Е=31 %

Дt

ТДС

0

1

-437,93

-437,93

1

0,76

296,4

225,26

2

0,58

222,3

128,93

3

0,44

185,25

81,51

ЧДС=-2,23

По формуле (2.7) определяется внутренний коэффициент доходности:

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

Рисунок 2.3 - Графическое определение Евн

Как уже ранее оговаривалось, что оценка инвестиционного проекта разработки ПО производится с использованием следующих показателей: ЧДС, Евн, ИД и Ток. Для наглядности проведения оценки, рассчитанные и рекомендуемые значения показателей занесены в таблицу 2.5.

Таблица 2.5 – Показатели эффективности

Показатели

Полученные по расчету величины

Рекомендуемые значения

ЧДС, долл.

47,97

Положительная

Ток, лет

2,52

До 4

ИД

1,11

Свыше 1

Евн, %

30,75

Свыше 21

Данные таблицы 2.5 показывают, что рассматриваемый инвестиционный проект разработки ПО является эффективным.


3 Оптимизация зрительных условий труда пользователя ПЭВМ

3.1 Обеспечение безопасных условий труда

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

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

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

3.2 Зрительная система человека и современный компьютер

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

3.3 Нормы и правила создания оптимальных зрительных условий при работе с  ПЭВМ

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

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

Эргономическая безопасность компьютеризации оценивается требованиями:

– к визуальным параметрам средств отображения информации индивидуального пользования;

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

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

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

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

В новых Государственных стандартах России (ГОСТ Р 50948-96 «Средства отображения информации индивидуального пользования. Общие эргономические требования и требования безопасности» и ГОСТ Р 50949-96 «Средства отображения информации индивидуального пользования. Методы измерений и оценки эргономических параметров и параметров безопасности») и в утвержденных и введенных в действие Санитарных правилах и нормах СанПиН 2.2.2.542-96. «Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организация работы, гармонизированных с международным и европейским стандартами» установлены требования к двум группам визуальных параметров: первая – яркость, освещенность, угловой размер знака и угол наблюдения и вторая – неравномерность яркости, блики, мелькания, расстояние между знаками, словами, строками, геометрические и нелинейные искажения, дрожание изображения и т.д. (всего более 20 параметров). Некоторые из этих параметров представлены в таблицах 3.1 и 3.2.

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

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

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

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

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

Практические количественные рекомендации по выбору оптимальных и допустимых значений визуальных эргономических параметров могут быть получены после испытаний конкретных типов дисплеев и оценки реальной рабочей обстановки. Проведение таких испытаний предусмотрено государственным стандартом России ГОСТ Р 50948-96 и новыми СанПиН.

Таблица 3.1- Визуальные эргономические параметры ВДТ и пределы их изменений

Наименование параметров

Пределы значений  параметров

миним.

(не менее)

макс.

(не более)

Яркость знака (яркость фона), кд/кв.м (измеренная в темноте)

35

120

Внешняя освещенность экрана, лк

100

250

Угловой размер знака, угл. мин.

16

60

Таблица 3.2 - Нормируемые визуальные параметры видеодисплейных терминалов

Наименование параметров

Значения параметров

1

Контраст (для монохромных ВДТ)

От 3:1 до 1,5:1

2

Неравномерность яркости 2/

Элементов  знаков, %,

не более +25

3

Неравномерность яркости 2/ рабочего поля экрана, %,

не более +20

4

Формат  матрицы знака

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

не менее 7*9 элементов изображения

не менее 5*7 элементов изображения

5

Отношение ширины  знака к его высоте для прописных букв

от 0,7 до 0,9 (допускается от 0,5 до 1,0)

6

Размер минимального элемента отображения (пикселя) для монохромного ВДТ, мм

0.3

7

Угол наклона линии наблюдения, град.

не более 60 град ниже

горизонтали

8

Угол наблюдения, град.

не более 40 град. от нормали  к любой точке экрана дисплея

9

Допустимое горизонтальное смещение однотипных знаков, % от ширины  знака,

не более 5

Продолжение таблицы 3.2

Наименование параметров

Значения параметров

10

Допустимое вертикальное смещение однотипных знаков, % от высоты матрицы,

не более 5

11

Отклонение формы рабочего поля экрана ВДТ от правильного прямоугольника не должно превышать:

- по горизонтали

- по вертикали

- по диагонали

где   В1 и В2 - значения длин верхней и нижней строк текста на рабочем поле экрана, мм; Н1 и Н2 - значения длин крайних столбцов на рабочем поле экрана, мм; D1 и D2 - значения длин диагоналей рабочего поля экрана, мм.

_B=

_H=

_D=

12

Допустимая пространственная нестабильность изображения (дрожание по амплитуде изображения) при частоте

колебаний в диапазоне от 0,5

до 30 Гц, мм

не более

(L - расстояние наблюдения,

мм)

13

Допустимая  временная не стабильность изображения

(мерцание)

Не должна быть зафиксирована 90 % наблюдателей

14

Отражательная способность, зеркальное и смешанное отражение (блики), %, (допускается выполнение требования при использовании при экранного фильтра)

Не более 1

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

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

–  помещения с ВДТ и ПЭВМ должны иметь естественное и искусственное освещение;

– естественное освещение должно осуществляться через светопроемы, ориентированные преимущественно на север и северо-восток и обеспечивать коэффициент естественной освещенности (КЕО) не ниже 1.2 % в зонах с устойчивым снежным покровом и не ниже 1.5 % на остальной территории.                                        Указанные значения КЕО нормируются для зданий, расположенных в III световом климатическом поясе. Расчет КЕО для других поясов светового климата проводится по общепринятой методике согласно СНиП "Естественное и искусственное освещение";

– расположение рабочих мест с ВДТ и ПЭВМ для взрослых пользователей в подвальных помещениях не допускается. Размещение рабочих мест с ВДТ и ПЭВМ во всех учебных заведениях и дошкольных учреждениях не допускается в цокольных и подвальных помещениях. В случаях производственной необходимости, эксплуатация ВДТ и ПЭВМ в помещениях без естественного освещения может проводиться только по согласованию с органами и учреждениями Государственного санитарно-эпидемиологического надзора. Площадь на одно рабочее место с ВДТ или ПЭВМ для взрослых пользователей должна составлять не менее 6,0 кв.м, а объем не менее 20,0 куб.м;

– для внутренней отделки интерьера помещений с ВДТ и ПЭВМ должны использоваться диффузно-отражающие материалы с коэффициентом отражения для потолка – 0.7 - 0.8; для стен – 0.5 - 0.6; для пола – 0.3 - 0.5;

– полимерные материалы, используемые для внутренней отделки интерьера помещений с ВДТ и ПЭВМ, должны быть разрешены для применения органами и учреждениями Государственного санитарно-эпидемиологического надзора;

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

– искусственное освещение в помещениях ВЦ следует осуществлять в виде общего равномерного освещения. Уровни искусственной освещенности на рабочих местах должны соответствовать нормативным величинам;

– освещенность на поверхности стола в зоне размещения рабочего документа должна быть 300–500 лк. Допускается установка светильников местного освещения для подсветки документов. Местное освещение не должно создавать бликов на поверхности экрана и увеличивать освещенность экрана более 300 лк;

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

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

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

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

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

Достаточно важным для сохранения здоровья пользователя ПЭВМ и в частности зрения является правильное расположение  рабочего места относительно окон: нормаль поверхности экрана монитора и линия падения света должны составлять угол 90˚.

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

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

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

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

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

3.4 Защитные экраны и фильтры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.5 Выводы

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

1) избегайте того, чтобы Ваш терминал был обращен в сторону окна, так как интенсивная освещенность поля зрения размывает изображение оригинала на сетчатке глаза. Экран дисплея компьютера должен быть перпендикулярен оконному стеклу - что исключает блики на экране;

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

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

4) для людей воспринимающих мерцание монитора можно рекомендовать выбор высокочастотного монитора с частотой кадров от 100Гц;

5)  лицевые панели ПЭВМ должны располагаться в плоскости перпендикулярной нормальной линии взора и не должна отклоняться от линии взора и не должны отклоняться от этой линии больше чем на 45 градусов;

6)   экран видеомонитора должен находиться от глаз пользователя на оптимальном расстоянии 600-700 мм, но не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов.

7) фильтры должны применяться с учётом особенностей рабочего места

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

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

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

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


Заключение

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

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

1) обзор существующих обучающих систем и рассмотрение способов реализации в них электронных библиотек;

2) анализ способов представления информации в электронной библиотеке. На этом этапе были выявлены файловые форматы документов, наиболее подходящие для использования в электронной библиотеке;

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

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

5) проектирование базы данных электронной библиотеки. Проектирование базы данных осуществлялось на основе IDEF1X-технологии;

6) проектирование и реализация средств ведения электронной библиотеки. Программные средства разработаны с применением языков программирования PHP 4.0 и JavaScript. Для реализации интерфейса пользователя использовался язык разметки текста HTML;

7) тестирование разработанных программных средств. Тестирование проводилось разработчиком. При тестировании не было обнаружено каких-либо ошибок или сбоев в работе программы.

Кроме того, в данном дипломном проекте были рассмотрены  некоторые вопросы оптимизации зрительных условий труда пользователя ПЭВМ, а также проведён технико-экономический анализ создания ПО.


Список литературы

  1.   Гигиенические требования к видеодисплейным терминалам, ПЭВМ и организации работы. Санитарные нормы и правила. СанПиН 2.2.2.542 – 96. – Министерство здравоохранения, 1996.
  2.  И. Литвак Человек у экрана / Охрана труда и социальное страхование.‍ – 1999. – №3.– С. 40 – 43.
  3.  В. Шумилин Ещё раз о защитных экранах / Охрана труда и социальное страхование. – 1996. – №6. – С. 36 – 38.
  4.  Аарэс А., Бьерсет Г., Хорген Г. Освещение, эргономика и фотометрия рабочих мест операторов видеомониторов / Светотехника. – 1999. – №6. –

С. 11 – 13.

  1.  Вашкевич Н.П., Зинкин С.А. Сетевые технологии в образовании. Подготовка компьютерных учебных изданий на основе сетевых технологий: Учебное пособие – Выпуск 1 – Пенза: Издательство Пензенского государственного университета, 2001.
  2.  Гилмор В.  PHP 4. Учебный курс. – СПб.: Питер, 2001.
  3.  Е.А. Кольчугина, С.В. Самуйлов, С.В. Шибанов Базы данных: Методические указания к лабораторным работам – Пенза: Издательство Пензенского государственного университета, 2000.
  4.  Лукьянов С.П., Сивергин М.Ю. Параметры учебной информации при построении спутниковой учебной системы / Телекоммуникации и информатизация образования. – 2001. – №3(4). – С. 87 – 91.
  5.  Горный Е., Вигурский К. Развитие электронных библиотек:
    мировой и российский опыт, проблемы, перспективы.  Http://www.zhurnal.ru/staff/gorny/texts/dlib.html


ГРАФИЧЕСКАЯ ЧАСТЬ

Приложение А

(обязательное)












ЛИСТИНГ ПРОГРАММЫ

Приложение Б

(обязательное)


Модуль Viewer.php

<html>

<frameset rows="62,1*">

<?php

print "<frame id=frhead src=\"header.php ? iduser=".$iduser." & iddoc=-1\">\n";

?>

<frameset cols="35%,1*">

<?php

print "<frame id=frame1 src=\"tree.php ? iduser=".$iduser."\">";

print "<frame id=frame2 src=\"right.html\">";

?>

</frameset>

</frameset>

</html>

Модуль header.php

<html>

<head>

<LINK title=css0 href="tree.css" rel=stylesheet>

<script language="javascript">

function mclick(id_code){

 if(id_code==view_code){

<?php

 print "  parent.frame1.window.location=\"tree.php ? iduser=".$iduser."\";";

?>

   parent.frame2.window.location="right.html";

   headcode1.innerHTML=" [ -|- ] ";

 }

 if(id_code==home_code){

   parent.frame1.document.all["iddocnowhid"].value=-1;

   parent.frame2.window.location="right.html";

   headcode1.innerHTML=" [ -|- ] ";

 }

 if(id_code==zakl_code){

<?php

 print "iduser=".$iduser.";";

?>

 iddoc=parent.frame1.document.all["iddocnowhid"].value;

 window.location="header.php ? iduser="+iduser+" & iddoc="+iddoc;

 }

}

function mover(id_code){

 id_code.className="sortfileon";

 if(id_code==view_code){

   parent.window.status="Обновить дерево документов";

 }

 if(id_code==home_code){

   parent.window.status="Закрыть текущий документ ";

 }

 if(id_code==zakl_code){

   parent.window.status="Создать закладку для текущего документа ";

 }

}

function mout(id_code){

 id_code.className="sortfileout";

 parent.window.status="";

}

function textclick(){

}

</script>

</head>

<body bgcolor=#e6e6e6>

<table width=100%>

<tr>

 <td colspan=7>

  <code>

   <font color=mediumblue size=big>

    <b>Viewer</b>

   </font> текущий документ:

  </code>

  <code id=headcode1> [ -|- ]</code>

<?php

function Getquery($query){

 GLOBAL $connect;

 $result=odbc_exec($connect,$query);

 odbc_fetch_row($result);

 $res=odbc_result($result,1);

 return($res);

}

function Getqueryins($query){

 GLOBAL $connect;

 $result=odbc_exec($connect,$query);

 return;

}

if($iddoc >= 0){

 $connect=odbc_connect("Dbase","","") or die("no connect to database");

 if(0==Getquery("SELECT COUNT(*) FROM Zakladka WHERE ID_user=".$iduser." AND ID_u_material=".$iddoc)){

   $idzakl=1+Getquery("SELECT MAX(ID_zakl) FROM Zakladka");

   Getqueryins("INSERT INTO Zakladka VALUES(".$idzakl.", ".$iduser.", ".$iddoc.")");

 }

 odbc_close($connect);

 $way=Getquery("SELECT Way FROM U_material WHERE ID_u_material=".$iddoc);

 print "<script language=\"javascript\">\n headcode1.innerHTML=\" [ ".$way." ]\";</script>\n";

}

?>

 </td>

</tr>

<tr>

 <td>

   <code class=sortfileout id=view_code onMouseOver="mover(view_code);" onMouseOut="mout(view_code);" onclick="mclick(view_code);"> Обновить </code>

 </td>

 <td>

   <code class=sortfileout id=home_code onMouseOver="mover(home_code);" onMouseOut="mout(home_code);" onclick="mclick(home_code);"> Закрыть&nbspтекущий&nbspдокумент </code>

 </td>

 <td>

   <code class=sortfileout id=zakl_code onMouseOver="mover(zakl_code);" onMouseOut="mout(zakl_code);" onclick="mclick(zakl_code);"> Создать&nbspзакладку </code>

 </td>

 <td width=100%>

 </td>

</tr>

</table>

</body>

</html>

Модуль tree.php

<?php

require_once 'XMLfunc.php';

?>

<html>

<head>

<LINK title=css0 href="tree.css" rel=stylesheet>

<script language="javascript">

function SortClick(sort,divtree){

 sort1.className='sortfileout';

 sort2.className='sortfileout';

 sort3.className='sortfileout';

 divtree1.style.display='none';

 divtree2.style.display='none';

 divtree3.style.display='none';

 sort.className='sortfileon';

 divtree.style.display='block';

}

function PlusClick(divid,imgid){

 if(divid.style.display=="block"){

   divid.style.display="none";

   imgid.src="images/plus.bmp";

 }else{

   divid.style.display="block";

   imgid.src="images/minus.bmp";

 }

}

function FileDocOpen(hid,idhid){

 parent.frame2.window.location=hid.value;

 iddocnowhid.value=idhid.value;

 parent.frhead.document.all["headcode1"].innerHTML="[ "+hid.value+" ]";

}

</script>

</head>

<body bgcolor=#e6e6e6>

<INPUT type="hidden" name="iddocnowhid" value=-1>

<table border=0>

<tbody>

<tr><td>

<table border=0>

<tr>

 <td colspan=3><code>сортировка&nbspдерева&nbspпо:</code></td>

</tr>

<tr>

 <td><code id=sort1 class=sortfileon onclick="SortClick(sort1,divtree1);"> структуре</code></td>

 <td><code id=sort2 class=sortfileout onclick="SortClick(sort2,divtree2);"> типам</code></td>

 <td><code id=sort3 class=sortfileout onclick="SortClick(sort3,divtree3);"> именам</code></td>

 </tr>

</table>

<tr><td>

<div id=divtree1 style="DISPLAY: block">

<?php

 print_db_tree($iduser,1);

?>

</div>

<div id=divtree2 style="DISPLAY: none">

<?php

 print_db_tree($iduser,2);

?>

</div>

<div id=divtree3 style="DISPLAY: none">

<?php

 print_db_tree($iduser,3);

?>

</div>

<tr><td>

<?php

 print_db_zakl($iduser);

?>

</tbody>

</table>

</body>

</html>

Модуль XMLfunc.php

<?php

 function ferror($text)

 {

   print "<b class=FailedError>$text</b>";

   exit;

 }

$counter=0;

class XML_TREE_PRINTER {

 VAR $xmlparser;

 VAR $cspace=0;

 function XML_TREE_PRINTER(){

   $this->xmlparser = xml_parser_create();

   xml_set_object($this->xmlparser,&$this);

   xml_set_element_handler($this->xmlparser,"startTag","endTag");

   xml_set_character_data_handler($this->xmlparser,"characterData");

 }

 function destroy(){

   xml_parser_free($this->xmlparser);

 }

 function characterData($parser, $characterData){

   print $characterData;

 }

 function startTag($parser,$tagname,$attributes){

   GLOBAL $counter;

   GLOBAL $cspace;

   switch ($tagname):

     case ("XMLZ"):

 $counter++;

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<img class=imgclick id=img".$counter." src=\"images/plus.bmp\" onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<code class=dirclick onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<b>Закладка пользователя</b>\n</code></table>\n";

 print "<div id=div".$counter." style=\"DISPLAY: none\">\n";

 $this->cspace+=2;

 break;

     case ("XMLTREE"):

 $counter++;

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<img class=imgclick id=img".$counter." src=\"images/plus.bmp\" onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<code class=dirclick onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<b>Электронные библиотеки</b>\n</code></table>\n";

 print "<div id=div".$counter." style=\"DISPLAY: none\">\n";

 $this->cspace+=2;

 break;

     case ("EL_BIBL"):

 $counter++;

 $id_el_bibl = reset($attributes);

 $name = next($attributes);

 $dir = next($attributes);

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<img class=imgclick id=img".$counter." src=\"images/plus.bmp\" onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<code class=dirclick onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<b>".$name."</b>\n</code></table>\n";

 print "<div id=div".$counter." style=\"DISPLAY: none\">\n";

 $this->cspace+=2;

 break;

     case ("KURS"):

 $counter++;

 $id_kurs = reset($attributes);

 $name = next($attributes);

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<img class=imgclick id=img".$counter." src=\"images/plus.bmp\" onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<code class=dirclick onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<b>".$name."</b>\n</code></table>\n";

 print "<div id=div".$counter." style=\"DISPLAY: none\">\n";

 $this->cspace+=2;

 break;

     case ("DIR"):

 $counter++;

 $name = reset($attributes);

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<img class=imgclick id=img".$counter." src=\"images/plus.bmp\" onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<code class=dirclick onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<b>".$name."</b>\n</code></table>\n";

 print "<div id=div".$counter." style=\"DISPLAY: none\">\n";

 $this->cspace+=2;

 break;

     case ("FILE"):

 $counter++;

 $idmaterial = reset($attributes);

 $way = next($attributes);

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<INPUT type=\"hidden\" name=\"idfilehid".$counter."\" value=".$idmaterial.">\n";

 print "<INPUT type=\"hidden\" name=\"hid".$counter."\" value=\"".$way."\">\n<code class=filename onclick=\"FileDocOpen(hid".$counter.", idfilehid".$counter.");\">";

 break;

   endswitch;

 }

 function endTag($parser,$tagname){

   switch ($tagname):

     case ("FILE"):

 print "</code></td></tr></table>\n";

 break;

     default:

 $this->cspace-=2;

 print "</div>\n";

 break;

   endswitch;

 }

 function parse($data){

   if(! xml_parse($this->xmlparser,$data)){

     print" Ошибка разбора XML-дерева";

   }

 }

}

function Print_xml_tree($filename){

 if(!is_file($filename)) {ferror("XML - file $filename not finded");}

 $file=fopen($filename,"r") or ferror("File $filename not opened");

 $xmltree=fread($file,filesize($filename)) or ferror("File $filename not read");

 if(!fclose($file)) {ferror("File $filename not closed");}

 $xml_parser = new XML_TREE_PRINTER;

 $xml_parser->parse($xmltree);

 $xml_parser->destroy();

}

require_once 'DBfunc.php';

function print_db_tree($iduser,$reg){

 $xmltree=get_tree($iduser,$reg);

 $xml_parser = new XML_TREE_PRINTER;

 $xml_parser->parse($xmltree);

 $xml_parser->destroy();

 return ($xmltree);

}

function print_db_zakl($iduser){

 $xmltree=get_zakl($iduser);

 $xml_parser = new XML_TREE_PRINTER;

 $xml_parser->parse($xmltree);

 $xml_parser->destroy();

}

?>

Модуль DBfunc.php

<?php

function Getquery($query,$num){

 $connect=odbc_connect("Dbase","","") or ferror("no connect to database");

 $result=odbc_exec($connect,$query);

 $x=0;

 while($arr=odbc_fetch_row($result)){

   for($y=0;$y<$num;$y++){

     $res[$x][$y]=odbc_result($result,$y+1);

   }

   $x++;

 }

 odbc_close($connect);

 return($res);

}

function get_file($iduser,$kurs,$type){

 if($kurs!=""){

   $strkurs=" WHERE M.ID_u_material=A.ID_u_material AND A.Access>127 AND A.ID_User=".$iduser." AND M.ID_kurs=".$kurs;

   if($type!=""){

     $strtype=" AND M.ID_type=".$type;

   }else{

     $strtype="";

   }

 }else{

   $strkurs="";

   if($type!=""){

     $strtype=" WHERE M.ID_u_material=A.ID_u_material AND A.Access>127 AND A.ID_User=".$iduser." AND M.ID_type=".$type;

   }else{

     $strtype=" WHERE M.ID_u_material=A.ID_u_material AND A.Access>127 AND A.ID_User=".$iduser;

   }

 }

 $result="";

 $query="SELECT M.ID_u_material, M.Way, M.Name_material FROM Access_to_doc A, U_material M ".$strkurs.$strtype." ORDER BY M.Name_material";

 $res=Getquery($query,3);

 for($x=0; $x < sizeof($res); $x++){

   $result=$result."<file id_u_material=\"".$res[$x][0]."\" way=\"".$res[$x][1]."\">".$res[$x][2]."</file>\n";

 }

 

 return($result);

}

function get_dir($iduser,$kurs,$reg){

 if($reg<3){

   if($kurs!=""){

     $strkurs=" AND M.ID_kurs=".$kurs;

   }else{

     $strkurs="";

   }

   $result="";

   $query="SELECT DISTINCT T.ID_type, T.Name_type FROM Type_u_material T, U_material M WHERE T.ID_type = M.ID_type".$strkurs." ORDER BY T.Name_type";

   $res=Getquery($query,2);

   for($x=0; $x < sizeof($res); $x++){

     $result=$result."<dir name=\"".$res[$x][1]."\">\n";

     $result=$result.get_file($iduser,$kurs,$res[$x][0]);

     $result=$result."</dir>";

   }

 }else{

   $result=get_file($iduser,$kurs,"");

 }

 return($result);

}

function get_kurs($iduser,$el_bibl,$reg){

 $result="";

 if($reg<2){

   $query="SELECT K.ID_kurs, K.Name_kurs FROM U_kurs K, Kurs_el_bibl E WHERE K.ID_kurs = E.ID_kurs AND E.ID_el_bibl=".$el_bibl;

   $res=Getquery($query,2);

   for($x=0; $x < sizeof($res); $x++){

     $result=$result."<kurs id_kurs=\"".$res[$x][0]."\" name=\"".$res[$x][1]."\">\n";

     $result=$result.get_dir($iduser,$res[$x][0],$reg);

     $result=$result."</kurs>";

   }

 }else{

   $result=get_dir($iduser,"",$reg);

 }

 return($result);

}

function get_el_bibl($iduser,$reg){

 $query="SELECT ID_el_bibl, Name_el_bibl, Directory FROM El_bibl";

 $res=Getquery($query,3);

 $result="";

 for($x=0; $x < sizeof($res); $x++){

   $result=$result."<el_bibl id_el_bibl=\"".$res[$x][0]."\" name=\"".$res[$x][1]."\" dir=\"".$res[$x][2]."\">\n";

   $result=$result.get_kurs($iduser,$res[$x][0],$reg);

   $result=$result."</el_bibl>";

 }

 return $result;

}

function get_tree($iduser,$reg){

 $xmltree="<?xml version=\"1.0\"?>\n<xmltree>\n";

 $xmltree=$xmltree.get_el_bibl($iduser,$reg);

 $xmltree=$xmltree."</xmltree>";

 return($xmltree);

}

function get_zakl($iduser){

 $result="<?xml version=\"1.0\"?>\n<xmlz>\n";

 $query="SELECT M.ID_u_material, M.Way, M.Name_material FROM U_material M, Zakladka Z WHERE M.ID_u_material=Z.ID_u_material AND Z.ID_user=".$iduser." ORDER BY M.Name_material";

 $res=Getquery($query,3);

 for($x=0; $x < sizeof($res); $x++){

   $result=$result."<file id_u_material=\"".$res[$x][0]."\" way=\"".$res[$x][1]."\">".$res[$x][2]."</file>\n";

 }

 $result=$result."</xmlz>";

 return($result);

}

?>

Модуль AddDoc.php

<html>

<frameset cols="35%,1*">

<?php

print "<frame id=frame1 src=\"treeadd.php ? iduser=".$iduser."\">";

print "<frame id=frame2 src=\"add.php ? iduser=".$iduser."\">";

?>

</frameset>

</html>

Модуль Add.php

<html>

<head>

<LINK title=css0 href="tree.css" rel=stylesheet>

<script language="javascript">

function Viewdivhelp(){

 if(divhelp.style.display=='none'){

   divhelp.style.display='block';

   codehelp.innerHTML="Спрятать подсказку";

 }else{

   divhelp.style.display='none';

   codehelp.innerHTML="Показать подсказку";

 }

}

</script>

</head>

<body bgcolor=#e6e6e6>

<table width=100%>

<tr><td>

<table width=100%>

<tr><td align=right width=100%>

<code class=codelink id=codehelp onclick="Viewdivhelp();">Показать подсказку</code>

</td></tr><tr><td>

<br>

<div id=divhelp style="DISPLAY: none">

<code>Чтобы добавить документ в базу данных электронной библиотеки

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

документ, путь, по которому он находится, а также новый адрес

(названия электронной библиотеки, курса и тип документа) добавляемого документа.

</code><br>

<code>Для идентификации можно воспользоваться деревом каталогов.

</code>

<br><br>

</div>

</td></tr>

</table>

</tr></td>

<tr><td>

<table class=blacktable>

<tr><td>

<?php

$connect=odbc_connect("Dbase","","") or die("no connect to database");

function Getquery($query){

 GLOBAL $connect;

 $result=odbc_exec($connect,$query);

 odbc_fetch_row($result);

 $res=odbc_result($result,1);

 return($res);

}

function GetqueryMult($query){

 $connect=odbc_connect("Dbase","","") or ferror("no connect to database");

 $result=odbc_exec($connect,$query);

 $x=0;

 while($arr=odbc_fetch_row($result)){

   $res[$x]=odbc_result($result,1);

   $x++;

 }

 odbc_close($connect);

 return($res);

}

function Getqueryins($query){

 GLOBAL $connect;

 $result=odbc_exec($connect,$query);

 return;

}

$form="

<FORM ACTION=\"Add.php\" enctype=\"multipart/form-data\" method=\"post\">

<INPUT type=\"hidden\" name=\"seenform\" value=\"y\">

<INPUT type=\"hidden\" name=\"iduser\" value=\"".$iduser."\">

<center><code>Имя документа</code><br>

<INPUT size=50 type=text name=filename value=\"".$filename."\"></center>

</td></tr>

</table>

</tr></td>

<tr><td>

<table class=blacktable>

<tr><td>

<center><code>Полный путь к файлу документа</code><br>

<INPUT size=50 type=\"file\" name=\"fileway\" value=\"".$fileway."\"></center>

</td></tr>

</table>

</tr></td>

<tr><td>

<table class=blacktable>

<tr><td>

<center><code>Имя библиотеки</code><br>

<INPUT size=50 type=text name=biblname value=\"".$biblname."\"></center>

</td></tr>

</table>

</tr></td>

<tr><td>

<table class=blacktable>

<tr><td>

<center><code>Имя курса</code><br>

<INPUT size=50 type=text name=kursname value=\"".$kursname."\"></center>

</td></tr>

</table>

</tr></td>

<tr><td>

<table class=blacktable>

<tr><td>

<center><code>Тип документа</code><br>

<INPUT size=50 type=text name=dirname value=\"".$dirname."\"></center>

</td></tr>

</table>

</tr></td>

<tr><td>

<table width=100%>

<tr><td>

<center>

<INPUT type=\"submit\" value=\" # Добавить # \">

</center>

</FORM>";

$err="";

if($seenform != "y"){

 print "$form";

}else{

 if(!is_file($fileway)){

   $err=$err."Ошибка: файл с указанным именем не существует \\n";

 }

 $x=1;

 if($biblname==""){

   $err=$err."Ошибка: не указано имя библиотеки \\n";

   $x=0;

 }else{

   $bname=Getquery("SELECT Name_el_bibl FROM El_bibl WHERE Name_el_bibl='".$biblname."'");

   if($bname!=$biblname){

     $err=$err."Ошибка: указанная библиотека не найдена \\n";

     $x=0;

   }

 }

 if($kursname==""){

   $err=$err."Ошибка: не указано имя курса \\n";

   $x=0;

 }

 if($dirname==""){

   $err=$err."Ошибка: не указан тип документа";

   $x=0;

 }

 if($filename==""){

   $err=$err."Ошибка: не указано имя документа \\n";

 }elseif(0<Getquery("SELECT COUNT(ID_type) FROM Type_u_material WHERE Name_type='".$dirname."'")){

   $idtype=Getquery("SELECT ID_type FROM Type_u_material WHERE Name_type='".$dirname."'");

   $idbibl=Getquery("SELECT ID_el_bibl FROM El_bibl WHERE Name_el_bibl='".$biblname."'");

   if(0<Getquery("SELECT COUNT(K.ID_kurs) FROM U_kurs K, Kurs_el_bibl KB WHERE K.Name_kurs='".$kursname."' AND K.ID_kurs=KB.ID_kurs AND KB.ID_el_bibl=".$idbibl)){

     $idkurs=Getquery("SELECT K.ID_kurs FROM U_kurs K, Kurs_el_bibl KB WHERE K.Name_kurs='".$kursname."' AND K.ID_kurs=KB.ID_kurs AND KB.ID_el_bibl=".$idbibl);

     if($x==1 && 0<Getquery("SELECT COUNT(*) FROM U_material WHERE Name_material='".$filename."' AND ID_type=".$idtype." AND ID_kurs=".$idkurs)){

       $err=$err."Ошибка: документ с таким именем уже существует \\n";

     }

   }

 }

 if($err==""){

   $fway=$biblname."/".$kursname."/".$dirname."/".$filename;

   $idbibl=Getquery("SELECT ID_el_bibl FROM El_bibl WHERE Name_el_bibl='".$biblname."'");

   if(0==Getquery("SELECT COUNT(*) FROM U_kurs K, Kurs_el_bibl KB WHERE K.Name_kurs='".$kursname."' AND K.ID_kurs=KB.ID_kurs AND KB.ID_el_bibl=".$idbibl)){

     $idkurs=1+Getquery("SELECT MAX(ID_kurs) FROM U_kurs");

     Getqueryins("INSERT INTO U_kurs VALUES(".$idkurs.", '".$kursname."')");

     Getqueryins("INSERT INTO Kurs_el_bibl VALUES(".$idbibl.", ".$idkurs.")");

     Getqueryins("INSERT INTO Autor_kurs VALUES(".$idkurs.", ".$iduser.")");

     mkdir($biblname."/".$kursname,7);

   }else{

      $idkurs=Getquery("SELECT ID_kurs FROM U_kurs WHERE Name_kurs='".$kursname."'");

   }

   $res=Getquery("SELECT COUNT(*) FROM Type_u_material WHERE Name_type='".$dirname."'");

   if(!is_dir($biblname."/".$kursname."/".$dirname)){

     mkdir($biblname."/".$kursname."/".$dirname,7);

   }

   if($res<1){

     $iddir=1+Getquery("SELECT MAX(ID_type) FROM Type_u_material");

     Getqueryins("INSERT INTO Type_u_material VALUES(".$iddir.", '".$dirname."')");

   }else{

     $iddir=Getquery("SELECT ID_type FROM Type_u_material WHERE Name_type='".$dirname."'");

   }

   $iddoc=1+Getquery("SELECT MAX(ID_u_material) FROM U_material");

   Getqueryins("INSERT INTO U_material VALUES(".$iddoc.", '".$filename."', ".$idkurs.", ".$iddir.", '".$fway."')");

   //  <Назначение прав доступа>

   $res=GetqueryMult("SELECT ID_user FROM User",1);

   for($x = 0; $x < sizeof($res); $x++){

     if($iduser==$res[$x]){

       Getqueryins("INSERT INTO Access_to_doc VALUES(".$iduser.", ".$iddoc.", 224)");

     }else{

       Getqueryins("INSERT INTO Access_to_doc VALUES(".$res[$x].", ".$iddoc.", 128)");

     }

   }

   // <<Назначение прав доступа>>

   if(!copy($fileway,$fway)){

     print "<script language=\"javascript\"> \n alert(\"Не могу скопировать файл\"); \n </script> \n";

   }

 }else{

   print "<script language=\"javascript\"> \n alert(\"".$err."\"); \n </script> \n";

 }

 print "$form";

}

odbc_close($connect);

?>

</td></tr></table>

</table>

<script language="javascript">

<?php

echo "  parent.frame1.window.location=\"treeadd.php ? iduser=".$iduser."\";\n";

?>

</script>

</body>

</html>

Модуль treeadd.php

<?php

require_once 'DBfunc.php';

?>

<html>

<head>

<LINK title=css0 href="tree.css" rel=stylesheet>

<script language="javascript">

function PlusClick(divid,imgid,value,num){

 if(divid.style.display=="block"){

   divid.style.display="none";

   imgid.src="images/plus.bmp";

 }else{

   divid.style.display="block";

   imgid.src="images/minus.bmp";

 }

 if(num==1){

   parent.frame2.document.all["biblname"].value=value.innerHTML;

   parent.frame2.document.all["kursname"].value="";

   parent.frame2.document.all["dirname"].value="";

   parent.frame2.document.all["filename"].value="";

 }

 if(num==2){

   parent.frame2.document.all["kursname"].value=value.innerHTML;

   parent.frame2.document.all["dirname"].value="";

   parent.frame2.document.all["filename"].value="";

 }

 if(num==3){

   parent.frame2.document.all["dirname"].value=value.innerHTML;

   parent.frame2.document.all["filename"].value="";

 }

}

function filenameclick(codeid){

 parent.frame2.document.all["filename"].value=codeid.innerHTML;

}

</script>

</head>

<body bgcolor=#e6e6e6>

<h1 id=h123></h1>

<?php

 function ferror($text)

 {

   print "<b class=FailedError>$text</b>";

   exit;

 }

$counter=0;

class XML_TREE_PRINTER {

 VAR $xmlparser;

 VAR $cspace=0;

 function XML_TREE_PRINTER(){

   $this->xmlparser = xml_parser_create();

   xml_set_object($this->xmlparser,&$this);

   xml_set_element_handler($this->xmlparser,"startTag","endTag");

   xml_set_character_data_handler($this->xmlparser,"characterData");

 }

 function destroy(){

   xml_parser_free($this->xmlparser);

 }

 function characterData($parser, $characterData){

   print $characterData;

 }

 function startTag($parser,$tagname,$attributes){

   GLOBAL $counter;

   switch ($tagname):

     case ("XMLTREE"):

 $counter++;

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<img class=imgclick id=img".$counter." src=\"images/plus.bmp\" onclick=\"PlusClick(div".$counter.", img".$counter.", 0, 0);\">\n";

 print "<code class=dirclick onclick=\"PlusClick(div".$counter.", img".$counter.");\">\n";

 print "<b>Электронные библиотеки</b>\n</code></table>\n";

 print "<div id=div".$counter." style=\"DISPLAY: none\">\n";

 $this->cspace+=2;

 break;

     case ("EL_BIBL"):

 $counter++;

 $id_el_bibl = reset($attributes);

 $name = next($attributes);

 $dir = next($attributes);

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<img class=imgclick id=img".$counter." src=\"images/plus.bmp\" onclick=\"PlusClick(div".$counter.", img".$counter.", b".$counter.", 1);\">\n";

 print "<code class=dirclick onclick=\"PlusClick(div".$counter.", img".$counter.", b".$counter.", 1);\">\n";

 print "<b id=b".$counter.">".$name."</b>\n</code>\n</table>\n";

 print "<div id=div".$counter." style=\"DISPLAY: none\">\n";

 $this->cspace+=2;

 break;

     case ("KURS"):

 $counter++;

 $id_kurs = reset($attributes);

 $name = next($attributes);

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<img class=imgclick id=img".$counter." src=\"images/plus.bmp\" onclick=\"PlusClick(div".$counter.", img".$counter.", b".$counter.", 2);\">\n";

 print "<code class=dirclick onclick=\"PlusClick(div".$counter.", img".$counter.", b".$counter.", 2);\">\n";

 print "<b id=b".$counter.">".$name."</b>\n</code>\n</table>\n";

 print "<div id=div".$counter." style=\"DISPLAY: none\">\n";

 $this->cspace+=2;

 break;

     case ("DIR"):

 $counter++;

 $name = reset($attributes);

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<img class=imgclick id=img".$counter." src=\"images/plus.bmp\" onclick=\"PlusClick(div".$counter.", img".$counter.", b".$counter.", 3);\">\n";

 print "<code class=dirclick onclick=\"PlusClick(div".$counter.", img".$counter.", b".$counter.", 3);\">\n";

 print "<b id=b".$counter.">".$name."</b>\n</code>\n</table>\n";

 print "<div id=div".$counter." style=\"DISPLAY: none\">\n";

 $this->cspace+=2;

 break;

     case ("FILE"):

 $counter++;

 $way = reset($attributes);

 print "<table><tr><td><code>";

 for($x=0; $x<$this->cspace; $x++){

   print"&nbsp";

 }

 print "</code>\n";

 print "<INPUT type=\"hidden\" name=\"hid".$counter."\" value=\"".$way."\">\n<code id=code".$counter." class=filenamegray onclick=\"filenameclick(code".$counter.")\">";

 break;

   endswitch;

 }

 function endTag($parser,$tagname){

   switch ($tagname):

     case ("FILE"):

 print "</code></td></tr></table>\n";

 break;

     default:

 $this->cspace-=2;

 print "</div>\n";

 break;

   endswitch;

 }

 function parse($data){

   if(! xml_parse($this->xmlparser,$data)){

     print" Ошибка разбора XML-документа";

   }

 }

}

function Print_xml_tree($iduser){

 $xmltree=get_tree($iduser,1);

 $xml_parser = new XML_TREE_PRINTER;

 $xml_parser->parse($xmltree);

 $xml_parser->destroy();

}

Print_xml_tree($iduser)

?>

</body>

</html>

Модуль DeleteDoc.php

<html>

<frameset cols="35%,1*">

<?php

print "<frame id=frame1 src=\"treeadd.php ? iduser=".$iduser."\">";

print "<frame id=frame2 src=\"delete.php ? iduser=".$iduser."\">";

?>

</frameset>

</html>

Модуль delete.php

<html>

<head>

<LINK title=css0 href="tree.css" rel=stylesheet>

<script language="javascript">

function Viewdivhelp(){

 if(divhelp.style.display=='none'){

   divhelp.style.display='block';

   codehelp.innerHTML="Спрятать подсказку";

 }else{

   divhelp.style.display='none';

   codehelp.innerHTML="Показать подсказку";

 }

}

</script>

</head>

<body bgcolor=#e6e6e6>

<table width=100%>

<tr><td>

<table width=100%>

<tr><td align=right width=100%>

<code class=codelink id=codehelp onclick="Viewdivhelp();">Показать подсказку</code>

</td></tr><tr><td>

<br>

<div id=divhelp style="DISPLAY: none">

<code>Чтобы удалить документ из базы данных электронной библиотеки

укажите полный адрес документа (имя документа, электронной библиотеки, курса и папки).

</code><br>

<code>Для идентификации можно воспользоваться деревом каталогов.

</code>

<br>

</div>

</td></tr>

</table>

</tr></td>

<tr><td>

<table class=blacktable>

<tr><td>

<?php

$connect=odbc_connect("Dbase","","") or die("no connect to database");

function Getquery($query){

 GLOBAL $connect;

 $result=odbc_exec($connect,$query);

 odbc_fetch_row($result);

 $res=odbc_result($result,1);

 return($res);

}

function Getquerydel($query){

 GLOBAL $connect;

 $result=odbc_exec($connect,$query);

 return;

}

$form="

<FORM ACTION=\"Delete.php\" method=\"post\">

<INPUT type=\"hidden\" name=\"seenform\" value=\"y\">

<INPUT type=\"hidden\" name=\"iduser\" value=\"".$iduser."\">

<center><code>Имя документа</code><br>

<INPUT size=50 type=text name=filename></center>

</td></tr>

</table>

</tr></td>

<tr><td>

<table class=blacktable>

<tr><td>

<center><code>Имя библиотеки</code><br>

<INPUT size=50 type=text name=biblname></center>

</td></tr>

</table>

</tr></td>

<tr><td>

<table class=blacktable>

<tr><td>

<center><code>Имя курса</code><br>

<INPUT size=50 type=text name=kursname></center>

</td></tr>

</table>

</tr></td>

<tr><td>

<table class=blacktable>

<tr><td>

<center><code>Тип документа</code><br>

<INPUT size=50 type=text name=dirname></center>

</td></tr>

</table>

</tr></td>

<tr><td>

<table width=100%>

<tr><td>

<center>

<INPUT type=\"submit\" value=\" # Удалить # \">

</center>

</FORM>";

if($seenform == "y"){

 $x=1;

 if($biblname==""){

   $err=$err."Ошибка: не указано имя библиотеки \\n";

   $x=0;

 }else{

   $bname=Getquery("SELECT Name_el_bibl FROM El_bibl WHERE Name_el_bibl='".$biblname."'");

   if($bname!=$biblname){

     $err=$err."Ошибка: указанная библиотека не найдена \\n";

     $x=0;

   }

 }

 if($kursname==""){

   $err=$err."Ошибка: не указано имя курса \\n";

   $x=0;

 }elseif($x==1){

   $idbibl=Getquery("SELECT ID_el_bibl FROM El_bibl WHERE Name_el_bibl='".$biblname."'");

   $kname=Getquery("SELECT K.Name_kurs FROM U_kurs K, Kurs_el_bibl KB WHERE K.Name_kurs='".$kursname."' AND K.ID_kurs=KB.ID_kurs AND KB.ID_el_bibl=".$idbibl);

   if($kname!=$kursname){

     $err=$err."Ошибка: указанный курс не найден \\n";

     $x=0;

   }

 }

 if($dirname==""){

   $err=$err."Ошибка: не указан тип документа";

   $x=0;

 }else{

   $tname=Getquery("SELECT Name_type FROM Type_u_material WHERE Name_type='".$dirname."'");

   if($tname!=$dirname){

     $err=$err."Ошибка: указанный тип не найден \\n";

     $x=0;

   }

 }

 if($filename==""){

   $err=$err."Ошибка: не указано имя документа \\n";

 }elseif($x==1){

   $idtype=Getquery("SELECT ID_type FROM Type_u_material WHERE Name_type='".$dirname."'");

   $idkurs=Getquery("SELECT K.ID_kurs FROM U_kurs K, Kurs_el_bibl KB WHERE K.Name_kurs='".$kursname."' AND K.ID_kurs=KB.ID_kurs AND KB.ID_el_bibl=".$idbibl);

   $num=Getquery("SELECT COUNT(*) FROM U_material WHERE Name_material='".$filename."' AND ID_type=".$idtype." AND ID_kurs=".$idkurs);

   if(0==$num){

     $err=$err."Ошибка: документ с таким именем не найден \\n";

   }else{

     $res=Getquery("SELECT ID_u_material FROM U_material WHERE Name_material='".$filename."' AND ID_type=".$idtype." AND ID_kurs=".$idkurs);

     if(192 > Getquery("SELECT Access FROM Access_to_doc WHERE ID_user=".$iduser." AND ID_u_material=".$res)){

       $err=$err."Ошибка: У вас нет прав на удаление этого документа \\n";

     }

   }

 }

 if($err==""){

   $iddoc=Getquery("SELECT ID_u_material FROM U_material WHERE Name_material='".$filename."' AND ID_type=".$idtype." AND ID_kurs=".$idkurs);

   $file=Getquery("SELECT Way FROM U_material WHERE ID_u_material=".$iddoc);

   Getquerydel("DELETE FROM U_material WHERE ID_u_material=".$iddoc);

   Getquerydel("DELETE FROM Access_to_doc WHERE ID_u_material=".$iddoc);

   Getquerydel("DELETE FROM Zakladka WHERE ID_u_material=".$iddoc);

   unlink($file);

 }else{

   print "<script language=\"javascript\"> \n alert(\"".$err."\"); \n </script> \n";

 }

}

print "$form";

odbc_close($connect);

?>

</td></tr></table>

</table>

<script language="javascript">

<?php

echo "  parent.frame1.window.location=\"treeadd.php ? iduser=".$iduser."\";\n";

?>

</script>

</body>

</html>

Модуль CopyCreater.php

<hmtl>

<head>

<LINK title=css0 href="tree.css" rel=stylesheet>

<script language="javascript">

function FileDocOpen(hid,idhid){

}

function PlusClick(divid,imgid){

 if(divid.style.display=="block"){

   divid.style.display="none";

   imgid.src="images/plus.bmp";

 }else{

   divid.style.display="block";

   imgid.src="images/minus.bmp";

 }

}

</script>

</head>

<body bgcolor=#e6e6e6>

<table bgcolor=#d0d0d0 style="BORDER: #000000 1px solid" width=100% height=100%>

<tr width=100%>

<td width=40%>

<table bgcolor=#e6e6e6 style="BORDER: #000000 1px solid" width=100% height=100%>

<tr width=100%>

<td width=100%>

<?php

 require_once 'XMLfunc.php';

 $xmltree=print_db_tree($iduser,1);

?>

<tr width=100% height=100%>

<td>

</table>

<td>

<table bgcolor=#e6e6e6 style="BORDER: #000000 1px solid" width=100% height=100%>

<tr width=100%>

<td width=100%>

<h3 align=center>Создание CD-версии электронной библиотеки</h3>

<br>

<a>&nbsp&nbsp&nbsp&nbsp&nbspВы можете создать копию доступной вам части разделов электронной

библиотеки.

<br>&nbsp&nbsp&nbsp&nbsp&nbspВнимание: копия создается в корневой папке документации

web-сервера в каталоге cdcopy.

<br>&nbsp&nbsp&nbsp&nbsp&nbspВы можете пользоваться копией на любом

компьютере, имеющем web-браузер с поддержкой JavaScript и XML.

</a>

<br><br>

<?php

$form="

<FORM ACTION=\"CopyCreater.php\" method=\"post\">

<INPUT TYPE=hidden NAME=\"iduser\" VALUE=\"".$iduser."\">\n

<INPUT TYPE=hidden NAME=\"seenform\" VALUE=\"y\">\n

<center>

<INPUT TYPE=submit VALUE=\" Создать \">

</center>

</FORM>";

class XML_TREE_MAKER {

 VAR $xmlparser;

 VAR $rootcopy="";

 VAR $rootbibl="";

 VAR $delfile="";

 function XML_TREE_MAKER($rootstr, $xmltree){

   $this->xmlparser = xml_parser_create();

   chdir($rootstr);

   if(is_dir($rootstr."/cdcopy"))

   { $this->deldir("cdcopy");}

   mkdir("cdcopy",7);

   chdir("cdcopy");

   $this->rootcopy = $rootstr."/cdcopy/";

   xml_set_object($this->xmlparser,&$this);

   xml_set_element_handler($this->xmlparser,"startTag","endTag");

   xml_set_character_data_handler($this->xmlparser,"characterData");

 }

 function deldir($dirname){

   chdir($dirname);

   $dh = opendir(".");

   while($file = readdir($dh)){

     if(is_dir($file)){

       if(!($file=="." or $file=="..")){

         $this->deldir($file);

       }

     }else{

       unlink($file);

     }

   }

   closedir($dh);

   chdir("..");

   rmdir($dirname);

 }

 

 function destroy(){

   xml_parser_free($this->xmlparser);

 }

 function characterData($parser, $characterData){

  if(!($characterData=="\n")){

   $firstfile=$this->rootbibl.$this->delfile;

   $secondfile=$this->rootcopy.$this->delfile;

   copy($firstfile, $secondfile);

  }

 }

 function startTag($parser,$tagname,$attributes){

   switch ($tagname):

     case ("XMLTREE"):

 break;

     case ("EL_BIBL"):

 reset($attributes);

 $name = next($attributes);

 $dir = next($attributes);

 mkdir($name,7);

 $this->rootbibl=$dir;

 chdir($name);

 break;

     case ("KURS"):

 reset($attributes);

 $name = next($attributes);

 mkdir($name,7);

 chdir($name);

 break;

     case ("DIR"):

 $name = reset($attributes);

 mkdir($name,7);

 chdir($name);

 break;

     case ("FILE"):

 reset($attributes);

 $way = next($attributes);

 $this->delfile=$way;

 break;

   endswitch;

 }

 function endTag($parser,$tagname){

   switch ($tagname):

     case ("FILE"):

 break;

     default:

 chdir("..");

 break;

   endswitch;

 }

 function parse($data){

   if(! xml_parse($this->xmlparser,$data)){

     print" Ошибка разбора XML-дерева";

   }

 }

}

function Copy_cd_bibl($rootcopy, $cd_bibl){

 chdir($rootcopy);

 $dh=opendir($cd_bibl);

 while($file = readdir($dh)){

   if(is_dir($cd_bibl."/".$file)){

     if(!($file=="." or $file=="..")){

       mkdir($file,7);

       Copy_cd_bibl($rootcopy.$file."/", $cd_bibl."/".$file);

     }

   }else{

     copy($cd_bibl."/".$file, $rootcopy.$file);

   }

 }

 closedir($dh);

 chdir("..");

}

if($seenform == "y"){

 print $form;

 $xml_parser = new XML_TREE_MAKER($DOCUMENT_ROOT, $xmltree);

 $xml_parser->parse($xmltree);

 $rootdir=$xml_parser->rootcopy;

 $xml_parser->destroy();

 Copy_cd_bibl($rootdir,dirname($DOCUMENT_ROOT.$PATH_INFO)."/cd_bibl");

 chdir($rootdir);

 $fh=fopen("xml1.xml", "w+");

 fwrite($fh, $xmltree);

 fclose($fh);

 $xmltree=get_tree($iduser,2);

 $fh=fopen("xml2.xml", "w+");

 fwrite($fh, $xmltree);

 fclose($fh);

 $xmltree=get_tree($iduser,3);

 $fh=fopen("xml3.xml", "w+");

 fwrite($fh, $xmltree);

 fclose($fh);

}else{

 print $form;

}

?>

<tr width=100% height=100%>

<td width=100%>

</table>

</table>

</body>

</html>

Модуль tree.html

<html>

<head>

<LINK title=css0 href="tree.css" rel=stylesheet>

<script language="javascript">

var xmltree = new ActiveXObject("msxml");

var Arr = new Array();

Arr[0] = new Array();

Arr[1] = new Array();

Arr[2] = new Array();

var xmlsource = new Array();

xmlsource[0]="xml1.xml";

xmlsource[1]="xml2.xml";

xmlsource[2]="xml3.xml";

var ii=-1;

function SortClick1(){

 sort1.className='sortfileon';

 divtree1.style.display='block';

 sort2.className='sortfileout';

 divtree2.style.display='none';

 sort3.className='sortfileout';

 divtree3.style.display='none';

}

function SortClick2(){

 sort1.className='sortfileout';

 divtree1.style.display='none';

 sort2.className='sortfileon';

 divtree2.style.display='block';

 sort3.className='sortfileout';

 divtree3.style.display='none';

}

function SortClick3(){

 sort1.className='sortfileout';

 divtree1.style.display='none';

 sort2.className='sortfileout';

 divtree2.style.display='none';

 sort3.className='sortfileon';

 divtree3.style.display='block';

}

function PlusClick(divid,imgid){

 if(divid.style.display=="block"){

   divid.style.display="none";

   imgid.src="images/plus.gif";

 }else{

   divid.style.display="block";

   imgid.src="images/minus.gif";

 }

}

function FileDocOpen(elem){

 parent.frame2.window.location=elem.way;

 parent.frhead.document.all["headcode1"].innerHTML="[ "+elem.way+" ]";

}

function ViewFile(elem,Arrnum){

 this.document.writeln('<tr>');

 this.document.writeln('<td>');

 this.document.writeln('<code class=filename onclick="FileDocOpen(Arr['+Arrnum+']['+elem.num+']);">'+elem.name+'</code>');

 this.document.writeln('</td>');

 this.document.writeln('</tr>');

}

function ViewTree(elem,Arrnum){

 if(elem==null) return;

 var i=0;

 var elem_;

 this.document.writeln('<tr>');

 this.document.writeln('<td>');

 this.document.writeln('<img class=imgclick id=img'+elem.num+' src="images/plus.gif" onclick="PlusClick(div'+elem.num+',img'+elem.num+');"><code class=dirclick onclick="PlusClick(div'+elem.num+',img'+elem.num+');"><b> '+elem.name+'</b></code>');

 this.document.writeln('</td>');

 this.document.writeln('</tr>');

 this.document.writeln('<tr>');

 this.document.writeln('<td>');

 this.document.writeln('<div id=div'+elem.num+' style="DISPLAY: none">');

 this.document.writeln('<table border=0>');

 this.document.writeln('<tr>');

 this.document.writeln('<td width=20>');

 this.document.writeln('</td>');

 this.document.writeln('<td>');

 this.document.writeln('<table border=0>');

 for(i=0;i<elem.childcount;i++){

   elem_=elem.child[i];

   if((elem_.type=="DIR")||(elem_.type=="KURS")||(elem_.type=="EL_BIBL")){

     ViewTree(elem_,Arrnum);

   }

   if(elem_.type=="FILE"){

     ViewFile(elem_,Arrnum);

   }

 }

 this.document.writeln('</table>');

 this.document.writeln('</td>');

 this.document.writeln('</tr>');

 this.document.writeln('</table>');

 this.document.writeln('</div>');

 this.document.writeln('</td>');

 this.document.writeln('</tr>');

}

function GetFileArray(elem,Arrnum){

 ii++;

 if(elem==null) return;

 Arr[Arrnum][ii] = new Object();

 Arr[Arrnum][ii].num = ii;

 Arr[Arrnum][ii].type = elem.tagName;

 Arr[Arrnum][ii].name = elem.text;

 Arr[Arrnum][ii].way = elem.GetAttribute('way');

 return(Arr[Arrnum][ii]);

}

function GetKurs(elem,Arrnum){

 ii++;

 if(elem==null) return;

 var i=-1;

 var iii=ii;

 var elem_;

 var name;

 Arr[Arrnum][iii] = new Object();

 Arr[Arrnum][iii].num = iii;

 Arr[Arrnum][iii].type = elem.tagName;

 if(elem.tagName=="XMLTREE"){

   name="Электронные библиотеки";

   Arr[Arrnum][iii].name = name;

 }else{

   name=elem.GetAttribute('name');

   Arr[Arrnum][iii].name = name;

 }

 Arr[Arrnum][iii].child = new Array();

 if(elem.children!=null){

   for(i=0;i<elem.children.length;i++){

     elem_=elem.children.item(i);

     if((elem.children.item(i).tagName=="KURS")||(elem.children.item(i).tagName=="DIR")||(elem.children.item(i).tagName=="EL_BIBL")){

       Arr[Arrnum][iii].child[i]=GetKurs(elem_,Arrnum);

     }

     if(elem.children.item(i).tagName=="FILE"){

       Arr[Arrnum][iii].child[i]=GetFileArray(elem_,Arrnum);

     }

   }

 }

 Arr[Arrnum][iii].childcount = i;

 return(Arr[Arrnum][iii]);

}

 

function Mainxml(){

 xmltree.URL=xmlsource[0];

 this.document.writeln('<body bgcolor=silver>');

 this.document.writeln('<table border=0>');

 this.document.writeln('<thead>');

 this.document.writeln('<tr>');

 this.document.writeln('<table border=0>');

 this.document.writeln('<tr>');

 this.document.writeln('<td colspan=3><code>сортировка&nbspдерева&nbspпо:</code></td>');

 this.document.writeln('</tr>');

 this.document.writeln('<tr>');

 this.document.writeln('<td><code id=sort1 class=sortfileon onclick="SortClick1();"> структуре</code></td>');

 this.document.writeln('<td><code id=sort2 class=sortfileout onclick="SortClick2();"> типам</code></td>');

 this.document.writeln('<td><code id=sort3 class=sortfileout onclick="SortClick3();"> именам</code></td>');

 this.document.writeln('</tr>');

 this.document.writeln('</table>');

 this.document.writeln('</tr>');

 this.document.writeln('</thead>');

 this.document.writeln('<tbody>');

 this.document.writeln('<div id=divtree1 style="DISPLAY: block">');

 elem=GetKurs(xmltree.root,0);

 ViewTree(elem,0);

 this.document.writeln('</div>');

 this.document.writeln('<div id=divtree2 style="DISPLAY: none">');

 xmltree.URL=xmlsource[1];

 elem=GetKurs(xmltree.root,1);

 ViewTree(elem,1);

 this.document.writeln('</div>');

 this.document.writeln('<div id=divtree3 style="DISPLAY: none">');

 xmltree.URL=xmlsource[2];

 elem=GetKurs(xmltree.root,2);

 ViewTree(elem,2);

 this.document.writeln('</div>');

 this.document.writeln('</tbody>');

 this.document.writeln('</table>');

 this.document.writeln('</body>');

}

Mainxml();

</script>

</head>

</html>


ВЕДОМОСТЬ ДИПЛОМНОГО ПРОЕКТА

Приложение В

(обязательное)


 

А также другие работы, которые могут Вас заинтересовать

64638. Рынок труда и заработная плата 68.05 KB
  На рынке труда происходит жестокий, беспощадный отбор наиболее способных, предприимчивых. Но вместе c тем рынок стимулирует высококвалифицированный труд, способствует созданию жесткой взаимосвязи между вкладом каждого и полученным конкретным результатом.
64639. Финансовый менеджмент. Методические указания 147.5 KB
  Она завершает изучение дисциплины Финансовый менеджмент и является важным этапом перед подготовкой выпускной квалификационной работы ВКР. Целью выполнения курсовой работы является углубление полученных знаний по дисциплине Финансовый менеджмент а также приобретение практических навыков самостоятельного решения задач финансового управления.
64644. Рассчет и постройка структуры силовых линий ЭМП системы из трёх элементарных электрических вибраторов 2.18 MB
  Подставляя поочередно выражения (2) также функцию Грина неограниченного трехмерного пространства в выражение для векторного потенциала сторонних электрических токов, получим...