Реферат по предмету "Информатика, программирование"


Обучающе-контроллирующая система для подготовки студентов

СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1. ПОСТАНОВКА ЗАДАЧИ
2. ОБЗОР ЛИТЕРАТУРЫ
3. ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ
3.1 Концептуальная модель базы данных
3.2 Логическая модель базы данных
3.3 Структура файлов базы данных
4. ОПИСАНИЕ ПРОГРАММНЫХ МОДУЛЕЙ
4.1 Описание программы создания имодификации тестов
4.2 Описание программы администрирования
4.3 Описание программы контроля знаний
5.Руководство пользователЯ
5.1 Общие сведения
5.2 Установка файлов баз данных
5.3 Использование программы созданияи модификации тестов
5.4 Использование программыадминистрирования
5.5 Использование программы контролязнаний
6. ОХРАНА ТРУДА
6.1 Техника безопасности ипроизводственная санитария
6.1.1 Электрический ток и статическоеэлектричество
6.1.2 Излучения
6.1.3 Шум
6.1.4 Вибрация.
6.1.5 Метеоусловия
6.1.6 Освещение
6.1.7 Расчет естественного освещения
6.1.8 Организация рабочего места
6.2 Пожарная безопасность
7. ЭКОНОМИЧЕСКИЙ РАЗДЕЛ
ЗАКЛЮЧЕНИЕ.
ЛИТЕРАТУРА
Приложение 1
Приложение 2
Приложение 3

ВВЕДЕНИЕ
Развитие вычислительнойтехники, создание вычислительных систем, одновременно обслуживающих десятки исотни пользователей, открывают новые возможности применения ЭВМ в качествевысокоэффективного средства обучения. Такое обучение, управляемое учащимся,создает необходимые предпосылки для развития критического мышления и творческихспособностей.
Обучающие системы на базевычислительных машин являются достаточно эффективными не только для подготовкипользователей ЭВМ, но и специалистов других профилей. Такие системырегламентируют и контролируют учебную деятельность обучаемых, обеспечиваютсвободно-конструируемую форму ответов обучаемых в сочетании с различными видамиобмена информацией между обучаемым и ЭВМ, регистрируют ход процесса обучения иобрабатывают необходимые статистические данные, облегчая принятие решенийпреподавателями и администрацией учебного заведения.
ЭВМ как обучающееустройство позволяет обеспечить гибкое управление познавательной деятельностьюобучаемых, адаптацию к его индивидуальным особенностям на основеавтоматического сбора и обработки данных о ходе процесса его обучения, позволяетсоздавать проблемные, игровые, соревновательные ситуации для повышения уровнямотивации обучаемых, заставляя их учиться приобретать необходимые навыки сцелью обыграть партнера-машину.
В планеобщеобразовательной подготовки кадров создание автоматизированных обучающих,имитационных и тренирующих систем на базе ЭВМ становится одним из главныхсредств, обеспечивающих эффективную профессиональную подготовку специалистовразличного профиля, студентов Вузов и техникумов, учащихся средних школ.
Работы в данной областиуже давно вышли за рамки экспериментов как у нас в стране, так и за рубежом. Вчастности в США обучающие системы на базе ЭВМ прошли путь развития от частныхреализаций, работающих с 2-3 пользователями по 1-2 предметам, до вычислительныхсетей учебного назначения, обслуживающих сотни удаленных терминалов и располагающихбанками обучающих программ самого различного назначения. Примерами этих сетейявляются система PLATO- IV фирмы CDC, автоматизированные обучающие системы фирмIBM, DEC, Hewlett Packard.

1. ПОСТАНОВКА ЗАДАЧИ
Разработать универсальнуюобучающе-контролирующую систему для подготовки студентов по курсам: менеджмент,маркетинг, оценка имущества ( оборудования ), микропроцессоры ипрограммирование, электротехника и электроника.
К разрабатываемомупрограммному обеспечению предъявляются следующие требования:
1)  Язык программирования — Object Pascal.
2)  Система должна быть открыта длямодернизации и пополнения БД по другим предметам.
3)  Основные критерии формирования комплексавопросов (билетов):
·  билет состоит из10-50 вопросов;
·   количество вопросов в билетеопределяет преподаватель при загрузке БД.
4)  Критерий оценки ответов студентов:
·  90-100%правильных ответов-отлично;
·  70-90%правильных ответов-хорошо;
·  60-70%правильных ответов — удовл.;
·  
5)  Обучающе-контролирующая системадолжна предоставлять следующие возможности:
·   возможность работы системы в ЛВС сраспечаткой результатов (протокола) на принтере сервера;
·  возможность заданиявремени ответа.
6)  Обеспечение дружественногоинтерфейса.

2. ОБЗОР ЛИТЕРАТУРЫ
В учебном пособии«Система программирования обучающих курсов» рассматриваются вопросы создания ииспользования обучающих курсов с помощью СПОК(системы программированияобучающих курсов) на базе ЕС ЭВМ или М-4030.
Основные концепции,заложенные в СПОК, достаточно универсальны, так что описание ее организацииявляется также хорошим руководством по системам реального времени.
Данное учебное пособиесодержит как описание структуры СПОК, так и материалы конструктивного типа,позволяющие основным категориям пользователей СПОК быстро освоить работу с этойсистемой. Т.о., помимо пользователей СПОК — обучаемых, педагогов, разработчиковприкладных обучающих программ данное пособие может быть полезно специалистам истудентам Вузов и техникумов как основа проектирования и реализации широкогокласса систем реального времени и диалоговых систем.
Авторы учебного пособиястремились показать достаточно полно основные особенности функционирования СПОКпод управлением различных ОС и в разных режимах, не рассматривая конкретныххарактеристик системы.
Примеры, на которыхиллюстрируется работа операторов языка обучающих курсов и директив, выбранынесложными, чтобы не затруднять читателю понимания основного материала пособия.
В статье [2] приводитсяописание функциональных возможностей генератора тестов «Россь-2». Заложенные внем возможности позволяют использовать «Россь-2» при изучении практическилюбого учебного предмета.
Программа обладает следующимивозможностями:
·   создание на основе имеющихся баззнаний тестов по различным предметам;
·   использованиеготовых систем тестов по различным учебным предметам и курсам;
·   использование приизучении учебного материала и тестировании контекстных учебников и системыподсказок;
·   использованиеразличных параметров тестирования;
·   использованиеразличных учебных режимов;
·   использование приобучении мультимедийных возможностей.
Генератор тестов«Россь-2» включает следующие части:
1)  тестирующую оболочку;
2)  сервисную программу настройки.
Дополнительнопоставляется комплект утилит и сервисных программ для создания новых иредактирования имеющихся баз знаний, подключения к базам знаний графики, аудио-и видео-сопровождения, распечатки баз знаний и готовых тестов в различныхвариантах в качестве раздаточных дидактических материалов.
В поставку с ГТ «Россь-2»входит база знаний «компьютерная терминология», которая предназначена для:
1)  изучения основных терминов,встречающихся в базовом курсе информатики;
2)  изучения русских и английскихтерминов по компьютерной тематике для изучающих информатику и(или) английскийязык на углубленном уровне.
База знаний охватываеттри основные темы:
·   аппаратноеобеспечение;
·   основные терминыинформатики;
·   словарь Windows.
По первой теме базазнаний имеет библиотеку более чем из 80 графических изображений основных узлови элементов ПК, периферийных устройств и компьютерных аксессуаров.
По третьей теме базазнаний имеет библиотеку более чем из 40 графических изображений элементовинтерфейса Windows 3.X.
В докладе [3]рассматриваются принципы и особенности построения курсов по информатике.Предлагаемые курсы реализованы, как средствами специальной поддерживающейсистемы, так и с использованием языков высокого уровня. Приведены типы вопросови способы реализации контроля, средства индивидуализации хода обучения. Докладиллюстрируется, в частности, курсом по булевой алгебре и курсом по внешнимзапоминающим устройствам ЭВМ. Одним из используемых методов индивидуализации процессаосвоения материала является использование в курсе расширяемого словаря терминов.
Книга [4] посвященапрограммному пакету Delphi компании Borland — мощному средству созданияприложений для Windows,продолжающему линию компиляторов языка Pascal на качественно новом уровне.
·   В первой главерассмотрены составные части интегрированной среды разработчика и ихвзаимодействие между собой в процессе создания приложений.
·   Говорить осерьезных проектах в Delphiможно, лишь договорившись о смысле, вкладываемом в понятие объекта, его свойстви связанных с ним событий. Поэтому вторая глава посвящена языку Object Pascal. Пропускать эту главу не стоит и знатокам Паскаля,т.к. в языке появились новые возможности.
·   Третья главаописывает библиотеку визуальных компонентов VCL. По сути дела, это первая революционная попытка непросто упростить, а полностью скрыть от разработчика программный интерфейс Windows. Помня о судьбе библиотеки Object Windows Library (OWL),которая тоже начиналась в Borland Pascal и стала со временем законодателемстандарта, можно предсказать идеям VCL счастливую судьбу. Ее компоненты — это специальная разновидностьобъектов Delphi, т.е. те «кирпичики», из которых строитсяновое приложение. В главе рассмотрены методы и свойства всех компонентов(заисключением вынесенных в следующую главу). Они сгруппированы по функциональномуназначению и проиллюстрированы примерами.
·   Наконец, вчетвертой главе разбираются вопросы работы с базами данных. Здесь описаныспециальные компоненты доступа к данным, а также компоненты отображения иуправления данными. Рассматриваются способы использования этих компонентов вприложениях, предназначенных как для работы с локальными базами данных, так идля систем клиент/сервер. Отдельные разделы посвящены ядру процессора базданных Borland Database Engine, драйверам SQL Links, локальномусерверу InterBase. В главу включен пример связыванияприложения-клиента с сервером Informix.
Для усвоения материалакниги требуется понимание основ объектно-ориентированного программирования ипринципов построения программ, управляемых событиями. Какую-то часть кодасгенерирует за вас Delphi, но длясерьезной работы потребуется и серьезное знание языка Паскаль. Некоторыенеосновные свойства компонентов, описанных в книге, ссылаются напрямую напрограммный интерфейс Windows.Его знание, конечно, не будет лишним, но и не является обязательным. Та частькниги, которая посвящена работе Delphiс базами данных, требует наличия у читателя основ знаний в этой области.

3. ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ
3.1 Концептуальная модельбазы данных
Первый шаг процессапроектирования состоит в определении всех атрибутов, включаемых в базу, и вопределении связей между ними.
Наш набор атрибутов — следующий:
ТЕМА№ — порядковый номер темы с вопросами;
ТЕМА — названиераздела(темы);
ВОПРОС№ — уникальный номер вопроса;
ВОПРОС — текст вопроса;
ОТВЕТ№ — уникальный номер варианта ответа на вопрос;
ОТВЕТ — текст вариантаответа на вопрос;
ИСТИННОСТЬ — истинностьварианта ответа на вопрос(правда или ложь).
Сведем все атрибуты ипринимаемые ими на некоторый момент времени значения в следующую таблицу:
Таблица 3.1
Сводная таблица атрибутовПРО и их значенийТЕМА№ ТЕМА ВОПРОС№ ВОПРОС ОТВЕТ№ ОТВЕТ ИСТИННОСТЬ 1 тема1 1 вопрос1 1 ответ1 True 2 ответ2 False 3 ответ3 False 2 вопрос2 4 ответ4 False 5 ответ5 True 2 тема2 3 вопрос3 6 ответ6 True 7 ответ7 False 4 вопрос4 8 ответ8 False 9 ответ9 True 10 ответ10 False 3 тема3 5 вопрос5 11 ответ11 True 12 ответ12 False
Эта таблица не являетсяотношением, так как значения первых четырех полей в ней — атомарные, а значенияоставшихся трех — множественные. Чтобы таблица стала отношением, ее нужнореконструировать таким образом, чтобы каждый элемент кортежа имел атомарноезначение. Это делается с помощью простого процесса вставки (табл.3.2.).
Хотя вставка добавилабольшой объем избыточных данных, новая таблица получает статус отношения,которое называют универсальным отношением проектируемой БД. Такое отношениевключает все представляющие интерес атрибуты и все данные, которыепредполагается размещать в БД. Таким образом, получена концептуальная модельпроектируемой БД.
Таблица 3.2
Концептуальная модель БДТЕМА№ ТЕМА ВОПРОС№ ВОПРОС ОТВЕТ№ ОТВЕТ ИСТИННОСТЬ 1 тема1 1 вопрос1 1 ответ1 True 1 тема1 1 вопрос1 2 ответ2 False 1 тема1 1 вопрос1 3 ответ3 False 1 тема1 2 вопрос2 4 ответ4 False 1 тема1 2 вопрос2 5 ответ5 True 2 тема2 3 вопрос3 6 ответ6 True 2 тема2 3 вопрос3 7 ответ7 False 2 тема2 4 вопрос4 8 ответ8 False 2 тема2 4 вопрос4 9 ответ9 True 2 тема2 4 вопрос4 10 ответ10 False 3 тема3 5 вопрос5 11 ответ11 True 3 тема3 5 вопрос5 12 ответ12 False
3.2 Логическая модель базы данных
Проектирование реализацииБД(логическое проектирование) представляет собой трансформацию концептуальноймодели в набор отношений в нормальной форме Бойса-Кодда(НФБК). Для приведенияспроектированного универсального отношения в НФБК воспользуемсядекомпозиционным методом проектирования, содержанием которого является описаниесемантики универсального отношения в терминах функциональных зависимостей(ФЗ) ииспользование последних для нормализации отношения.
Введем следующие понятия:функциональная зависимость, ключ, первичный ключ, детерминант, НФБК.
Если даны два атрибута A и B, то говорят, что B функционально зависит от A(обозначается A à B), если для каждого A существует ровно одно связанное с ним значение B. A и B могут быть не только единичнымиатрибутами, но и группами из двух и более атрибутов.
Ключом называется атрибутили совокупность атрибутов, которые используются для идентификации записи иобнаружения ее на ЗУ. Ключей может быть несколько.
Первичный ключиспользуется для уникальной идентификации кортежа.
Детерминант. Если в ФЗ A à B B не зависит от любого подмножества A(т.е. функциональная зависимостьполна), то A является детерминантом B.
НФБК определяетсяследующим образом: отношение находится в НФБК, если каждый детерминантотношения является ключом. Проверим находится ли универсальное отношение R(ТЕМА№, ТЕМА, ВОПРОС№, ВОПРОС, ОТВЕТ№, ОТВЕТ, ИСТИННОСТЬ)в НФБК.
Выпишем ФЗ дляуниверсального отношения:
ТЕМА№ à ТЕМА,
ТЕМА№, ВОПРОС№ à ВОПРОС,
ВОПРОС№, ОТВЕТ№ à ОТВЕТ,
ВОПРОС№, ОТВЕТ№ à ИСТИННОСТЬ.

Из записанных ФЗ видно,что рассматриваемое отношение имеет только один ключ, а именно набор атрибутов. То есть это минимальный наборзначений атрибутов, которые, если они известны, определяют значения других атрибутовкортежа. Детерминантами отношения являются левые части всех ФЗ, а именно:, , .
Легко обнаружить, что ниодин детерминант не является ключом. Из чего следует, что рассматриваемоеотношение не находится в НФБК и подлежит декомпозиции.
Алгоритмдекомпозиционного проектирования выглядит так:
1) разрабатывается универсальное отношениедля БД;
2) определяются все ФЗ между атрибутамиотношения;
3) определяется, находится ли отношениев НФБК. Если ДА, то проектирование завершено, если НЕТ, отношение должно бытьразложено на два;
4) шаги 2 и 3 повторяются для каждогонового отношения, полученного в результате декомпозиции. Проектированиезавершается, когда все отношения будут находиться в НФБК.
Детерминант не является ключом и имеет двазависимых от него атрибута
ВОПРОС№, ОТВЕТ№ à ОТВЕТ
ВОПРОС№, ОТВЕТ№ à ИСТИННОСТЬ,
что можно рассматривать вкачестве единичной ФЗ с составными правой и левой частями ВОПРОС№, ОТВЕТ№ à ОТВЕТ, ИСТИННОСТЬ.
Таким образом, получаютсядва новых отношения R1 и R2:
R1(ТЕМА№, ТЕМА, ВОПРОС№, ВОПРОС)
ФЗ: ТЕМА№ à ТЕМА,
ТЕМА№, ВОПРОС№ à ВОПРОС.
Возможные ключи: .
Детерминанты:,.
R2(ВОПРОС№, ОТВЕТ№,ОТВЕТ, ИСТИННОСТЬ)
ФЗ: ВОПРОС№, ОТВЕТ№ à ОТВЕТ, ИСТИННОСТЬ.
Возможные ключи:.
Детерминанты: .
Отношение R2(ВОПРОС№, ОТВЕТ№,ОТВЕТ, ИСТИННОСТЬ) находится в НФБК, т.к. его детерминант является ключом, апотому в дальнейшей декомпозиции не нуждается.
В отношении R1(ТЕМА№, ТЕМА, ВОПРОС№, ВОПРОС) детерминант не является возможным ключом, поэтому R1 не находится в НФБК и подлежит дальнейшему расщеплению. Результатомрасщепления отношения R1являются отношения R3,R4:
R3(ТЕМА№, ВОПРОС№,ВОПРОС)
ФЗ: ТЕМА№, ВОПРОС№ à ВОПРОС.
Возможные ключи: .
Детерминанты: .
R4(ТЕМА№, ТЕМА)
ФЗ: ТЕМА№ à ТЕМА.
Возможные ключи: .
Детерминанты: .
Эти два отношениянаходятся в НФБК, следовательно проектирование завершается и его результатомявляется логическая модель БД в НФБК:
R2(ВОПРОС№, ОТВЕТ№,ОТВЕТ, ИСТИННОСТЬ),
R3(ТЕМА№, ВОПРОС№,ВОПРОС),
R4(ТЕМА№, ТЕМА).
3.3 Структура файлов базыданных
В качестве формата дляразрабатываемой базы данных был избран Paradox, т.к. он предоставляет следующие возможности:
·   Широкий выбортипов полей, включая авто-инкремент, BLOBs и т.п.
·   Соблюдениецелостности данных, контроля данных, обновления индексов на уровне ядра BDE.
·   Первичный индекстаблицы автоматически соблюдает уникальность записей, вторичные индексыобеспечивают отсортированный «вид» на записи таблицы.
В результате анализапоставленной задачи были разработаны следующие файлы данных:
1)  TEMA — содержит информацию о имеющихся разделах(темах);
2)  QUESTION — предназначен для хранения вопросовк темам из таблицы TEMA;
3)  ANSWER — содержит варианты ответов на вопросы из таблицы QUESTION;
4)  TICKETS — предназначен для хранения информации о билетах;
5)  CONTROL — содержит информацию о результатах тестирования;
6)  RESULT — предназначен для сбора информации об истинности ответовстудента.
Структуры файлов данныхприводятся ниже в табличной форме.
Таблица 3.3
Структура файла данных TEMA.DBНазвание поля Тип Назначение Tema_id autoincrement уникальный идентификатор раздела(темы) Tema_name alpha(100) название раздела(темы)
Таблица 3.4
Структура файла данных QUESTION.DBНазвание поля Тип Назначение Quest_id autoincrement уникальный идентификатор вопроса Tema_id long integer номер темы, которой принадлежит вопрос Quest_name memo текст вопроса

Таблица 3.5
Структура файла данных TICKETS.DBНазвание поля Тип Назначение Ticket_id autoincrement уникальный идентификатор записи Ticket_num long integer номер билета Quest_id long integer идентификатор вопроса
Таблица 3.6
Структура файла данных ANSWER.DBНазвание поля Тип Назначение Otvet_id autoincrement уникальный идентификатор варианта ответа Quest_id long integer идентификатор вопроса, которому принадлежит вариант ответа Otvet_name memo текст варианта ответа на вопрос Trued logical истинность варианта ответа
Таблица 3.7
Структура файла данных CONTROL.DBНазвание поля Тип Назначение Id autoincrement уникальный идентификатор записи Name alpha(40) фамилия студента Ticket_num long integer номер билета, по которому проводилось тестирование Date date дата тестирования Time time время завершения тестирования Mark number относительная оценка (0..1)
Таблица 3.8
Структура файла данных RESULT.DBНазвание поля Тип Назначение  Answer_id long integer уникальный идентификатор ответа  Trued logical истинность ответа

4. ОПИСАНИЕ ПРОГРАММНЫХ МОДУЛЕЙ
Разработаннаяуниверсальная обучающе-контролирующая система содержит следующие части:
1)  программу для создания и модификациитестов;
2)  сервисную программу настройкипараметров контроля знаний, формирования билетов, просмотра и распечаткирезультатов тестирования;
3)  программу контроля знаний
и предназначен дляразработки, модификации и эффективного использования тестов в процессе обученияпрактически по любой дисциплине.
Описание основныхпринципов функционирования программ, входящих в состав системы, приведено ниже.
4.1      Описаниепрограммы создания и модификации тестов
Программа создания имодификации тестов, являясь составной частью универсальнойобучающе-контролирующей системы, предназначена для создания и модификацииконтрольных вопросов, объединенных в разделы по тематическому признаку, а такжетаких разделов и предоставляет пользователю следующие возможности:
·   создание, модификация и удалениетематических разделов;
·   создание, модификация и удалениеконтрольных вопросов;
·   создание для любого вопросапроизвольного числа вариантов ответа;
·   модификация и удаление вариантовответа на вопрос.
Программа реализована наязыке Object Pascal в среде визуального программирования Delphi 2.0 фирмы Borland International. Текст программы и используемых еюмодулей приведен в прил.1.
Программой используютсяследующие файлы БД: Tema.db, Question.db, Answer.db. Схема связей файлов БД, используемаярассматриваемой программой, приведена на рис.4.1.
/>


Рис.4.1. Схема связейфайлов БД для программы создания тестов
Так как программаразрабатывалась в системе визуального программирования Borland Delphi всоответствии с принципом модульности, то в каждом модуле объявляется отдельныйкласс, который содержит данные и методы работы с ними а также методы работы сданными из других классов. Ниже приведены описания классов, используемых врассматриваемой программе.
1.  Класс TTreeForm ( модуль S2) ‑отображает главное окно программы.
Переменные класса:
-   x1,x2 — вспомогательные переменные;
-   CreateMainForm — индикатор созданияформы (True, если выполняется метод FormCreate).
Методы класса:
-   AddDocButClick() — выполняетдобавление нового контрольного вопроса в текущую тему;
-   MainTreeClick() — изменяет положениеуказателей в файлах БД Tema.db,Question.db;
-   DeleteButClick() — выполняет удалениетекущего вопроса или темы;
-   FullExpButClick() — производит полноераскрытие тематического дерева;
-   FullColButClick() — выполняет полноесворачивание тематического дерева;
-   ExitButClick() — производит закрытиепрограммы;
-   FormClose( ) — выполняет всенеобходимые действия перед закрытием программы;
-   AddTemaButClick() — выводит диалогдобавления новой темы;
-   FormShow() — выполняет инициализациюданных при запуске программы;
-   FormResize() — производит действия поизменению размеров объектов окна;
-   FormCreate() — выполняетинициализацию переменных x1,x2;
-   AppendQuestion() — добавляет втаблицу Question.db новый вопрос;
-   ClearQuestion() — осуществляетлогическое удаление текущего вопроса из БД.
2.  Класс TEditForm (модуль DB_Unit) — отображает окно редактирования контрольных вопросов.
Переменные класса:
-   x1,x2 — вспомогательные переменные.
Методы класса:
-   FormClose( )- производит выход изпрограммы;
-   DBEditTemaChange() — сохраняет в БДизменения в названии темы;
-   AddAnswerButClick() — добавляет новыйвариант ответа на текущий вопрос;
-   DelAnswerButClick() — удаляет текущийвариант ответа на вопрос;
-   FormCreate() — выполняетинициализацию переменных;
-   AppendAnswer() — производитдобавление в БД нового ответа;
-   ClearAnswer() — выполняет удаление изБД текущего ответа;
-   FormResize() — изменяет размеробъектов окна;
-   MemoScrollResize() — изменяет размеробъектов в области модификации ответов.
3.  Класс TAnswer (модуль DBUnit) — отвечает за отображение вариантов ответа на вопрос.
Переменные класса:
-   nocreate — индикатор созданияобъекта(False, если выполняется метод Create).
Методы класса:
-   Create() — создает объект типаTAnswer;
-   Free() — освобождает память занятуюобъектом;
-   CheckClick() — заносит в файл БДAnswer.db состояние флажка правильности ответа;
-   MemoChange() — сохраняет текст ответав файле БД Answer.db;
-   DeleteAnswer() — производитперерисовку области вывода вариантов ответа на вопрос после удаления одного изответов.
4.  Класс TWinEditTema(модуль AddTema) — отображает диалог добавления новой темы.
Методы класса:
-   butCancelClick() — добавляет новуютему в файл БД Teма.db.
-   butOkClick() — закрывает диалогдобавления новой темы.
4.2 Описание программыадминистрирования
Программаадминистрирования, являясь составной частью универсальнойобучающе-контролирующей системы, предназначена для использования в сочетании спрограммой создания тестов и предоставляет пользователю следующие возможности:
·   формированиебилетов;
·   задание времени ответа на вопросыбилета;
·   задание системыоценки результатов тестирования;
·   просмотр и распечатка результатов(протокола) тестирования на принтере.
Программа реализована наязыке Object Pascal в среде визуального программирования Delphi 2.0 фирмы Borland International. Текст программы и используемых еюмодулей приведен в прил.2.
Программой используютсяследующие файлы БД: Control.db, Tema.db, Question.db, Tickets.db. Схема связей файлов БД,используемая рассматриваемой программой, приведена на рис.4.2.
Программа создает файл Test.ini и записывает в раздел Options следующие параметры:TestTime — время тестирования (мс); MaxTicket — число сформированных билетов; MaxMark — система оценки результатов(балл).

Tema tema_id tema_name  
Question quest_id tema_id(FK) quest_name  
Tickets ticket_id ticket_num quest_id   />/>/>/>/>/>

Рис.4.2. Схема связейфайлов БД для программы администрирования
Так как программаразрабатывалась в системе визуального программирования Borland Delphi в соответствиис принципом модульности, то в каждом модуле объявляется отдельный класс,который содержит в себе данные и методы работы с ними а также методы работы сданными из других классов. Ниже приведены описания классов, используемых врассматриваемой программе.
1.  Класс TAdminForm (модуль Main) ‑отображает главное окно программы.
Переменные класса:
-   CreateForm — индикатор создания формы(True, если выполняется метод FormCreate);
-   IniFile — используется для работы сINI-файлом.
Методы класса:
-   ShowHint() — отображает подсказку встроке состояния;
-   DBControlCalcFields() — производитпересчет оценок в соответсвии с текущей системой оценки результатов;
-   FormClose() — выполняет всенеобходимые действия перед закрытием программы;
-   TestTimeChange() — сохраняет в файлеTEST.INI значение параметра TestTime;
-   MaxmarkChange() — сохраняет в файлеTEST.INI значение параметра MaxMark;
-   CreateTicketBtnClick() — выводитдиалог параметров формирования билетов;
-   FormShow() — открывает таблицыQuestion.db, Tema.db;
-   QuitBtnClick() — завершает выполнениепрограммы;
-  CreateNewDBControl()- создает новую таблицу Control.db;
-   ClearBtnClick() — очищает таблицурезультатов тестирования;
-   PrintBtnClick() — выводит на принтертаблицу с результатами тестирования.
2.  Класс TCreateTickDlg(модуль TQDialog)
Методы класса:
-   QuestCountEnter() — производитинициализацию переменных;
-   OKBtnClick() — выполняет формированиебилетов из контрольных вопросов заданной темы;
-   FormClose() — закрывает файлы БДQuestion.db, Tema.db;
-   FormShow() — считывает параметрыTestTime и MaxMark из файла Test.ini.
4.3 Описание программыконтроля знаний
Тестирующая оболочка, являясьсоставной частью универсальной обучающе-контролирующей системы, предназначенадля контроля знаний по выбранной администратором системы дисциплине ипредоставляет пользователю следующие возможности:
·   просмотр вопросов билета впроизвольном порядке;
·   возможность ответа на вопросы впроизвольном порядке;
·   возможность корректировки ответов навопрос.
Программа реализована наязыке Object Pascal в среде визуального программирования Delphi 2.0 фирмы Borland International. Текст программы и используемых еюмодулей приведен в прил.3.
Программой используютсяследующие файлы БД: Control.db, Question.db, Answer.db, Result.db, Tickets.db. Схема связей файлов БД, используемая рассматриваемойпрограммой, приведена на рис.4.3.
/>


Рис.4.3. Схема связейфайлов БД для программы контроля знаний

При запуске программыпроисходит считывание параметров TestTime и MaxTicket из раздела Options файла Test.ini. Программа производит также расчет изапись оценки ответа на вопросы билета. Запись результатов производится в БД Control.db.
Так как программаразрабатывалась в системе визуального программирования Borland Delphi всоответствии с принципом модульности, то в каждом модуле объявляется отдельныйкласс, который содержит в себе данные и методы работы с ними а также методыработы с данными из других классов. Ниже приведены описания классов,используемых в рассматриваемой программе.
1.  Класс TClientForm = (модуль SDIMain) ‑отображает главное окно программы.
Переменные класса:
-   x1,x2 — вспомогательные переменные;
-   CreateMainForm — индикатор созданияформы (True, если выполняется метод FormCreate);
-   TestTime — время тестирования вмиллисекундах;
-   MaxMark — система оценки(балл);
-   ticket — номер билета, по которомупроводится тестирование;
-   StudentName — фамилия студента.
Методы класса:
-   ShowHint()- отображает подсказку встроке состояния;
-   QuestListClick() — производит переходк следующему вопросу;
-   FormClose() — записывает результатытестирования в Control.db;
-   FormShow() — выводит диалог вводаисходных данных;
-   FormCreate()- выполняет инициализациюпеременных;
-   ExitButClick() — завершает работупрограммы;
-   PrevButClick() — делает текущимпредыдущий вопрос;
-   NextButClick() — делает текущимследующий вопрос;
-   TimerTimer() — завершает работупрограммы по истечении контрольного времени;
-   RefreshAnswers — обновляет содержимоеобласти вывода ответов;
-   DeleteAnswer() — удаленние из спискаответов одного варианта ответа;
-   FormResize() — производит действия поизменению размеров объектов окна;
-   MemoScrollResize() — изменяет размеробъектов в области вывода ответов.
2.  Класс TAnswer (модуль SDIMain) — отвечает за отображение вариантов ответа на вопрос.
Переменные класса:
-   nocreate — индикатор созданияобъекта(False, если выполняется метод Create).
Методы класса:
-   Create() — создает объект типаTAnswer;
-   Free() — освобождает память занятуюобъектом;
-   CheckClick() — заносит в файл БДResult.db состояние флажка правильности ответа;
-   MemoClick() — устанавливает фокус наобласть выбора текущего вопроса.
3.  Класс TBeginDataDlg(модуль DLGUnit) — отображает диалог ввода исходных данных.
Методы класса:
-   ShowHint() — отображает подсказку встроке состояния;
-   OkButClick() — создает файл БДResult.db и инициализирует переменные;
-   FormClose() — выполняет необходимыедействия перед закрытием диалога;
-   FormShow() — считывает параметрыMaxTicket,TestTime и MaxMark из файла Test.ini.
4.  Класс TPathDlg (модуль PathDialog)
Методы класса:
-   DriveBoxChange() — изменяет текущийдиск;
-   FormClose() — выполняет необходимыедействия перед закрытием диалога;
-   DirectoryListChange() — выводитназвание текущего каталога;
-   FormActivate() — выводит названиетекущего каталога при появлении диалога ввода пути к каталогу БД.

5. Руководство пользователЯ
5.1 Общие сведения
Разработаннаяуниверсальная обучающе-контролирующая система предназначена для разработки,модификации и эффективного использования тестов в процессе обучения практическипо любой дисциплине.
Комплекс программсодержит следующие части:
1)  программу для создания и модификациитестов;
2)  сервисную программу настройкипараметров контроля знаний, формирования билетов, просмотра и распечаткирезультатов тестирования;
3)  программу контроля знаний.
Универсальнаяобучающе-контролирующая система обладает следующими возможностями:
·   создание на основе имеющихся баззнаний тестов по различным предметам;
·   модификациясозданных тестов;
·   формированиебилетов;
·   задание времени ответа на вопросыбилета;
·   задание системыоценки результатов тестирования;
·   контроль знанийобучаемых посредством тестирования;
·   возможность работы системы в ЛВС;
·   просмотр и распечатка результатов(протокола) тестирования на принтере.
Для функционированияпрограммного обеспечение необходимо наличие на ПК операционной системы Windows-95 или Windows NT а также сетевого ПО, если будет использоватьсямногопользовательский режим работы программ.
Перед запуском любой изпрограмм системы на компьютере должен быть установлен BDE(комплекс программ и.DLL — библиотек для работы с БД), входящий в комплектпоставки универсальной обучающе-контролирующей системы. После установки BDE необходимо запустить программу BDECFG32.EXE и, выбрав закладку «Aliases», добавить новый алиас с именем «Common_base» и параметрами: TYPE = «STANDARD», DEFAULT DRIVER = «PARADOX»,PATH = .
5.2 Установка файлов базданных
Для обеспечениянормального функционирования универсальной обучающе-контролирующей системынеобходимо перед ее использованием установить в отдельный каталог на дискеследующие файлы:
Answer.db,Answer.mb, Answer.px, Answer.xg0, Answer.yg0,
Question.db,Question.mb, Question.px, Question.xg0, Question.yg0,
Tema.db, Tema.px.
Если используетсямногопользовательский вариант работы с программами комплекса, то вышеуказанныефайлы БД должны быть установлены на сервере.
5.3 Использованиепрограммы создания и модификации тестов
Программа предназначенадля создания и модификации контрольных вопросов, объединенных в разделы потематическому признаку, а также таких разделов и предоставляет пользователюследующие возможности:
·   создание, модификация и удалениетематических разделов;
·   создание, модификация и удалениеконтрольных вопросов;
·   создание для любого вопросапроизвольного числа вариантов ответа;
·   модификация и удаление вариантовответа на вопрос.
Для функционированияпрограммы необходимо наличие 600Kсвободного дискового пространства. Исполняемый файл программы — TestBuilder.exe может располагаться в любом каталоге произвольного диска.
Чтобы начать работу спрограммой необходимо запустить файл TestBuilder.exe на выполнение.
После запуска программына экране появляются два окна, размеры которых можно изменять при помощи мыши.В окне, расположенном в левой части экрана (рис.5.1.), находятся кнопки дляосуществления операций над разделами и вопросами и дерево, отображающееназвания имеющихся тематических разделов и номера вопросов.
Рассмотрим операции,которые позволяет производить программа с данными. Т.к. операции удаления имодификации производятся над объектами, которые являются в данный моментвремени текущими, то введем понятие текущего объекта. Текущим объектом (вопросом/разделом/вариантомответа) будем называть объект, который в данный момент выделен(например, номервопроса или название темы в дереве) или на нем находится курсор(например,курсор находится в поле редактирования варианта ответа). Чтобы сделать объекттекущим достаточно щелкнуть на нем мышью.
/> 
Рис.5.1. Окно выборатекущего контрольного вопроса

n Добавление нового тематическогораздела
Для того чтобы создатьновый раздел необходимо щелкнуть мышью на кнопке />. При этом на экранбудет выведен диалог запроса названия раздела(рис.5.2.). После того как вывведете название новой темы, необходимо нажать кнопку «Добавить», есливы хотите чтобы созданная тема была добавлена в список существующих тем, икнопку «Отмена» — в противном случае.
/>
Рис.5.2. Диалоговое окноввода названия новой темы
n Добавление нового вопроса
Для добавления новоговопроса в какую-либо тему необходимо сначала сделать эту тему текущей а затемнажать кнопку />. После этого можно вводить икорректировать текст вопроса в области редактирования, над которой находитсянадпись «Текст вопроса».
n Удаление разделов и вопросов
Для того, чтобы удалитьтекущий раздел либо вопрос необходимо нажать кнопку />.
При этом на экран будетвыведен диалог подтверждения удаления с соответствующим случаю текстом(рис.5.3.).
/>
Рис.5.3. Запросподтверждения удаления вопроса

В окне, расположенном вправой части экрана (рис.5.4), можно производить модификацию названийтематических разделов, текста контрольных вопросов и операции создания,модификации, удаления над вариантами ответов на вопросы.
/>
Рис.5.4. Окно модификацииданных
n Редактирование названия раздела
Модифицировать названиетекущего раздела можно в области редактирования, над которой имеется надпись«Название темы».
n Редактирование текста вопроса
Модифицировать тексттекущего вопроса можно в области редактирования, над которой имеется надпись«Текст вопроса».
n Добавление нового варианта ответа
Для добавления новоговарианта ответа в текущий вопрос необходимо нажать кнопку />
После этого в появившейсяобласти ввода можно вводить и модифицировать текст варианта ответа на вопрос.Истинность текущего варианта ответа отмечается пометкой в квадратике, которыйрасположен правее соответствующего варианта ответа.
n Удаление варианта ответа на вопрос
Чтобы удалить текущийвариант ответа необходимо нажать кнопку />.
n Редактирование варианта ответа
Чтобы модифицироватьтекст варианта ответа на вопрос необходимо сделать его текущим а затемпроизводить корректировку текста. Истинность варианта ответа можно изменить,установив флажок, который расположен правее соответствующего варианта ответа.Если эта область имеет пометку, то данный вариант ответа на вопрос являетсяправильным.
Назначение 3-ехвспомогательных кнопок следующее:
/> - разворачивает все темы;
/> - сворачивает все темы;
/> - выход из программы.
5.5 Использованиепрограммы администрирования
Программа предназначенадля использования в сочетании с программой создания тестов и предоставляетпользователю следующие возможности:
·   формированиебилетов;
·   задание времени ответа на вопросыбилета;
·   задание системыоценки результатов тестирования;
·   просмотр и распечатка результатов(протокола) тестирования на принтере.
Для функционированияпрограммы необходимо наличие 600Kсвободного дискового пространства. Исполняемый файл программы — TestAdmin.exe может располагаться в любом каталоге произвольногодиска.
Чтобы начать работу спрограммой необходимо запустить файл TestAdmin.exe на выполнение.
После запуска программына экране появляется главное окно программы (рис.5.5.), в котором в табличнойформе выводятся сведения о результатах предыдущего тестирования.
/>
Рис.5.5. Главное окнопрограммы администрирования
В этом окне задаютсяпараметры тестирования: время тестирования(в минутах) и система оценки(вбаллах). Когда параметры тестирования заданы, можно приступать к формированиюбилетов. Для этого необходимо нажать кнопку «Создать», следствием чегобудет появление диалогового окна задания параметров формированиябилетов(рис.5.6.).
/>
Рис.5.6. Диалог заданияпараметров формирования билетов

Перед формированиембилетов необходимо задать следующие параметры:
1) тема, из вопросов которой будутформироваться билеты;
2) количество вопросов в билете;
3) число билетов, которое вы желаетеполучить.
Если вы нажмете кнопкусоздать, то по завершению формирования билетов на экран будет выдано сообщение«Формирование билетов завершено!» (рис.5.7.).
/>
Рис.5.7. Сообщение озавершении формирования билетов
При формировании билетоввопросы заданной темы распределяются по билетам случайным образом.
Кнопка «Выход»служит для завершения работы программы.
Кнопка «Очистить»предназначена для удаления всех записей из таблицы результатов тестирования.
Кнопка «Печать»предназначена для получения твердой копии результатов тестирования. Примерраспечатанных результатов приведен на рис.5.8.
/>
Рис.5.8. Распечаткарезультатов тестирования

5.3 Использованиепрограммы контроля знаний
Тестирующая оболочкапредназначена для контроля знаний по выбранной администратором системыдисциплине. Для функционирования программы необходима ОС Windows95 или Windows NT и наличие не менее 1M свободного дискового пространства. Исполняемый файл программы — TestClient.exe может располагаться в любом каталоге произвольногодиска.
Чтобы начать сеанстестирования необходимо запустить файл TestClient.exe на выполнение. Если программа запускается впервые, тона экран будет выдан запрос на ввод имени каталога БД, т.е. того каталога, гдехранятся установленные ранее файлы Tickets.db, Tema.db, Question.db, Answer.db(рис.5.9).
/>
Рис.5.9. Диалог установкикаталога файлов БД
Когда каталог файлов БДвыбран, необходимо нажать кнопку «Все» чтобы продолжить выполнениепрограммы либо кнопку «Отмена» для ее завершения. Если вы ввели верноеимя каталога файлов БД, то на экране появится диалог, в котором необходимоввести фамилию и выбрать номер билета для тестирования (рис.5.10).

/>
Рис.5.10. Диалог запросаисходных данных для тестирования
Переход по полям вводаданных и кнопкам осуществляется с помощью клавиши ‘Tab’, а в обратном порядке при помощи ‘Shift-Tab’. Для подтверждения введенных данных нажмите кнопку «Все».Для выхода из программы нажмите кнопку «Выход» либо клавишу Esc. После подтверждения введенныхданных на экране появится окно(рис.5.11.), в котором вы сможете в произвольномпорядке просматривать вопросы билета и отвечать на них.
/>
Рис.5.11. Основное окнопрограммы контроля знаний
В верхней части окнарасположена область, в которой выводится текст вопроса. Ниже располагаютсяварианты ответов на вопрос. Чтобы отметить правильный ответ достаточноустановить флажок, который находится справа от соответствующего варианта ответа.При этом в указанной области должен появится значок пометки. При повторномщелчке пометка снимается. Для любого вопроса могут быть одновременно верными нескольковариантов ответа. Можно отвечать на вопросы в произвольном порядке, производитькорректировку ответов на вопросы и просматривать вопросы в произвольномпорядке.
Номер текущего вопросаотображается выделением в вертикальном списке номеров вопросов, расположеннномв левой части окна программы. Для перехода к следующему вопросу необходимонажать кнопку «Следующий», а к предыдущему — «Предыдущий».Перейти к произвольному вопросу можно щелкнув на его номере мышью в спискевопросов.
Время, истекшее с началамомента тестирования, отображается с помощью индикатора, расположенного надтекстом вопроса. По истечении времени, заданного администратором системы дляответов на вопросы, либо при нажатии кнопки «Завершить», программазавершает свою работу и выводит на экран сообщение о результатах тестирования(рис.5.12.).
/>
Рис.5.12. Сообщение орезультатах тестирования

6. ОХРАНА ТРУДА
В связи с автоматизацией процессовпроизводства и управления, развитием вычислительной техники и разработкой системавтоматизации проектных, исследовательских и технологических работ широкоераспространение получили видеотерминалы (ВТ) — устройства, отображающиеинформацию о ходе процесса или состояние объекта наблюдения на экране индикатора.Видеотерминалы используются в информационных и вычислительных центрах, на предприятияхсвязи, полиграфии, в диспетчерских пунктах управления технологическимипроцессами и транспортными перевозками и т.д.
Использование ВТ вразличных сферах производственной деятельности выдвигает проблему оздоровленияи оптимизации условий труда операторов ввиду формирования при этом целого ряданеблагоприятных факторов: высокая интенсивность труда, монотонность производственногопроцесса, гипокинезия и гиподинамия, специфические условия зрительной работы,наличие электромагнитных излучений, тепловыделений и шума от технологическогооборудования.
6.1 Техника безопасностии производственная санитария
Условия труда операторовВТ характеризуется возможностью воздействия на них комплекса опасных и вредныхпроизводственных факторов:
·   электрический ток и статическоеэлектричество;
·   ионизирующих и неионизирующихизлучений;
·   шума;
·   тепловыделений и вредных веществ;
·   специфических условий зрительнойработы, параметров технологического оборудования и рабочего места шума;
·   вибрации.
6.1.1 Электрический ток истатическое электричество
Эксплуатациявычислительной техники связана с применением электрической энергии.Электрический ток, проходя через организм, оказывает термическое,электролитическое и биологическое действие, вызывая местные и общиеэлектротравмы.
Местные травмыподразделяются на:
-  электрические ожоги;
-  электрические знаки;
-  металлизацию кожи;
-  механические повреждения;
-  электроофтальмию.
Общие электротравмы илиэлектрические удары по степени тяжести делятся на четыре степени.
Основными причинамивоздействия тока на человека являются:
-  случайное прикосновение илиприближение на опасное расстояние к токоведущим частям;
-  появление напряжения на металлическихчастях оборудования в результате повреждения изоляции или ошибочных действийперсонала.
Основные меры защиты отпоражения током:
-  изоляция;
-  недоступность токоведущих частей;
-  электрическое разделение сети спомощью специальных разделяющих трансформаторов;
-  применение малого напряжения;использование двойной изоляции;
-  защитное заземление;
-  защитное отключение.
Опасность возникновениястатического электричества проявляется в возможности образования электрическойискры и вредном действии его на организм человека. Эта искра может служитьпричиной воспламенения горючих или взрывоопасных газов, паров или пыли своздухом.
Статическое электричествооказывает вредное воздействие на организм человека, причем не только принепосредственном контакте с зарядом, но и за счет действия электрического поля,возникающего вокруг заряженных поверхностей.
Основные способы защитыот статического электричества:
-  заземление оборудования;
-  увеличение поверхностей проводимостидиэлектриков;
-  увлажнение окружающего воздуха;
-  ионизация воздуха или средынейтрализаторами статического электричества.
6.1.2 Излучения
При работе с дисплееммогут возникнуть следующие опасные факторы:
— электромагнитные поля;
— рентгеновскоеизлучение;
— ультрафиолетовое иинфракрасное излучение.
Воздействиеэлектромагнитных полей на человека зависит от напряжённостей электрического имагнитного полей, потока энергии, частоты колебаний, размера облучаемойповерхности тела и индивидуальных особенностей организма.
Наиболее эффективным ичасто применяемым из названных методов защиты от электромагнитных излученийявляется установка экранов. Экранируют либо источник излучения, либо рабочееместо. Экраны бывают отражающие и поглощающие. Индивидуальные экранирующиекомплексы предназначены для защиты от воздействия электрического поля, напряженностькоторого не превышает 60 кВ/м.
Для обеспечениябезопасности работ с источниками электромагнитных волн (в данном случае с ПЭВМ)производится систематический контроль фактических значений нормируемыхпараметров на рабочих местах. Контроль осуществляется измерением напряженияэлектрического и магнитного полей, а также измерением плотности потока энергии.
Для экранов применяютматериалы с высокой электрической проводимость (сталь, медь, алюминий, латунь)в виде листов толщиной не менее 0,5 мм или сетки с ячейками не более 4x4 мм.Небольшие отверстия в экране, предусматриваемые для осей штурвалов, кнопок идругих приспособлений, экранируют густой металлической сеткой с ячейками неболее 4x4 мм. Каждый экран обязательно заземляют. Защита с помощью экранов выполняетсямногоступенчатой, включая экранирования генераторного (первичного) контура,рабочих контуров (плавильных, нагревательных и др.) и установки в целом.
Степень ослабленияэлектромагнитного поля экраном характеризуется величиной, условно называемойглубиной проникновения электромагнитного поля в материал экрана, толщинакоторого должна быть больше глубины проникновения поля.
Эластичные экраны (изспециальной ткани с вплетенной тонкой металлической сеткой) применяют дляизготовления экранных штор, чехлов, спецодежды и т.п. Для экранов применяют иоптически прозрачное стекло, покрытое полупроводником — двуокисью олова; онотакже обеспечивает ослабление электромагнитного поля.
Основными мероприятиями,направленными на снижение опасности воздействия инфракрасного излученияявляются:
-  снижение интенсивности источника;
-  защитное экранирование источника ирабочего места;
-  использование средств индивидуальнойзащиты;
-  лечебно-профилактические мероприятия.
Необходимо также в целяхпредосторожности ограничить продолжительность работы с экраном ВТ, не размещатьВТ концентрированно в рабочей зоне и выключать их, если на них не работают,использовать защитные экраны.
6.1.3 Шум
По своему происхождениюшум делится на механический, обусловленный колебаниями деталей машины,аэродинамический(гидравлический), возникающий в упругих конструкциях, в газеили жидкости, и шумы электрических машин. Для рабочих мест ВЦ характерноналичие всех видов шумов.
Основными источникамишума в помещениях, оборудованных ВТ, являются пишущие машинки, принтеры,множительная техника и оборудование для кондиционирования воздуха, в самих ВТ —вентиляторы систем охлаждения и трансформаторы. Уровень шума в таких помещенияхиногда достигает 85 дБА.
Согласно ГОСТ 12.1.003-83ССБТ уровень шума на рабочих местах операторов не должен превышать 50 дБА (см.табл. 6.1).
Таблица 6.1
Уровень шума на рабочихместахПомещения Среднегеометрические частоты активных полос, Гц Уровни звука и эквивалентные 63 125 250 500 1000 4000 8000 уровни звука дБА для персонала, осуществляющего эксплуатацию ЭВМ 71 61 84 49 45 40 38 50
Нормированные уровни шумаобеспечиваются путем использования малошумного оборудования, применениемзвукопоглощающих материалов для облицовки помещений а также различныхзвукопоглощающих устройств (перегородки, кожухи, прокладки и т.д.).
Шум не превышаетдопустимых пределов, так как в вычислительной технике нет вращающихся узлов имеханизмов (за исключением вентилятора), а наиболее шумное оборудование (модем)находится в специально отведенном помещении.
6.1.4 Вибрация
Вибрация — этоколебательное движение механической системы. Она характеризуется частотой f,Гц; смещением A(t), м; скорость V(t), м/с; ускорением a(t), м/с2.Источником вибрации являются механизмы, машины, механизированный инструмент.
Вибрация по способупередачи телу человека подразделяется на общую (воздействие на все тело черезопорные поверхности) и локальную (воздействие на отдельные части тела: руки илиноги).
Вибрация относится кфакторам обладающим большой биологической активностью. Как общая, так илокальная вибрация оказывает неблагоприятное влияние на организм человека,вызывают изменения в функциональном состоянии вестибулярного анализатора,центральной нервной, сердечно‑сосудистой и других систем, приводят кутомлению, снижают работоспособность, ухудшают самочувствие и могут привести кразвитию профессионального заболевания — вибрационной болезни, сопровождаемойстойкими паталогоческими нарушениями в организме работающего (поражение мышц,изменение в костях и суставах, смещение внутренних органов).
Согласно ГОСТ 12.1.012-90ССБТ уровень вибрации на рабочих местах операторов не должен превышать 75 дБ(по виброскорости). Нормированные уровни вибрации обеспечиваются путемиспользования виброизоляторов из материалов с большим внутренним трением(резины, пробки, войлока, асбеста или стальных пружин).
При работе свычислительной техникой уровень вибрации не превышает допустимых пределов, таккак в вычислительной технике нет вращающихся узлов и механизмов (за исключениемвентилятора).

6.1.5Метеоусловия
С целью обеспечениякомфортных условий для обслуживающего персонала и надежности технологическогопроцесса согласно ГОСТ 12.1.005-88, п.1.4 устанавливают следующие требования кмикроклиматическим условиям (см. табл. 6.2.)
Таблица 6.2
Требования кмикроклиматическим условиямПериод года Категория Параметры воздушной среды на рабочих местах работ t, °С относительная влажность, % скорость движения воздуха, м/с Холодный Легкая -Iа 22-24 40-60 0,1 Теплый Легкая -Iа 23-25 40-60 0,1
Согласно ГОСТ 12.1.005-88п.1.8 интенсивность теплового излучения работающих от нагретых поверхностейтехнологического оборудования, осветительных приборов, инсоляции на постоянныхместах не должна превышать 35 Вт/м2 при облучении 50% поверхноститела и более.
Для создания нормальныхмикроклиматических условий наиболее целесообразно уменьшить тепловыделения отсамого источника — монитора, что должно предусматриваться при разработке егоконструкции. Кроме того, это достигается также обеспечением соответствующейплощади и объема производственного помещения, устройством эффективной системывентиляции и кондиционирования.
Кондиционеры — это вентиляционныеустановки, которые с помощью приборов автоматического регулированияподдерживают в помещении заданные параметры воздушной среды.
Кондиционеры бывают двухвидов:
-  установки полного кондиционированиявоздуха, обеспечивающие постоянство температуры, относительной влажности,скорости движения и чистоты воздуха;
-  установки неполногокондиционирования, обеспечивающие постоянство только части этих параметров илиодного параметра, чаще всего температуры.
Контроль параметровмикроклимата осуществляется с помощью приборов непрерывного и периодическогоизмерения. Измерения производятся пять раз в смену на высоте 1.5 метра от пола.Приборы непрерывного измерения: термографы, барографы. Они измеряютсоответственно температуру, относительную влажность, атмосферное давление. Дляобеспечения требуемых метеорологических условий труда принимают системы отопления,вентиляции и кондиционирования. Для очищения воздуха пыли в местах забораустанавливают фильтры 2-го и 3-го класса типов ФППУ, ФСВУ, ФЯЛ, ФВН.
Для эксплуатации ЭВМпредусматривается три типа помещений:
-  основные — к ним относятся: машинныйзал, помещения для размещения сервисной и периферийной аппаратуры;
-  вспомогательные — помещения дляхранения носителей информации, помещения для размещения приточно-вытяжныхвентиляторов и устройств кондиционирования воздуха;
-  производственные- помещения дляприема и выдачи информации, помещения для обслуживающего персонала ЭВМ.
Помещения ВЦ, ихразмеры(площадь, объем) выбираются в соответствии количеством работающих иразмещенном в них оборудованием. Для обеспечения нормальных условий труда всанитарных нормах устанавливают на одного работающего объем производственногопомещения не менее 15 м.
К основным помещениямпредъявляются особые требования. Площадь машинного зала соответствует площади,необходимой по заводским техническим условиям для данного типа ЭВМ:
-  высота зала под техническим полом доподвесного потолка 3-3.5 метра,
-  расстояние между подвесным и основнымпотолком при этом должно быть 0.5-0.8 метра,
-  габариты дверей машинного залапринимаются не менее 1.8 х 1.1 метра.
Площадь помещения дляхранения магнитных носителей информации составляет не менее 16 м. Пол, потолоки стены хранилища покрывают несгораемыми материалами. Двери должны бытьметаллическими или деревянными, обитые листовым железом по войлоку, смоченномураствором глины, или асбесту.
Все вспомогательныепомещения ВЦ расположены в нижних и цокольных этажах, их высота — 3.3 метра.
6.1.6Освещение
Важное место в комплексемероприятий по охране труда и оздоровлению условий труда работающих с ВТзанимает создание оптимальной световой среды, т.е. рациональная организацияестественного и искусственного освещения помещения и рабочих мест.
Согласно СНиП II-4-79п.1.2 помещения для работы с дисплеями и видеотерминалами относятся к I группепо задачам зрительной работы.
Нормированный уровеньосвещенности для работы с ВТ принят 400 лк (см. табл. 6.3)
Таблица 6.3
Нормирование уровня освещенности Искусственное освещение Естественное освещение Помещения Освещен-ность рабочих поверхностей, лк Показатель дискомфорта, не более Коэффици-ент пульса-ции осве-щенности, % не более
КЕО eHIII, % при верхнем или верхнем и боковом при боковом освещении в зоне с устойчивым снежным покровом на остальной территории СССР Помещения для работы с дисплеями, видеотерми-налами 400 40 10 4 1,2 1,5
В этих случаяхпредусматриваются меры для ограничения слепящего воздействия светопроемов,имеющих высокую яркость (8000 кд/м2 и более), и прямых солнечныхлучей для обеспечения благоприятного распределения светового потока в помещениии исключения на рабочих поверхностях ярких и темных пятен, засветки экрановпосторонним светом, а так же для снижения теплового эффекта от инсоляции. Этодостигается путем соответствующей ориентации светопроемов, правильногоразмещения рабочих мест и использования солнцезащитных средств.
Требования к снижениюдискомфортной блескости и зеркального отражения в экранах удовлетворяются путемиспользования светильников с комбинированным прямым и отраженным направлениемсвета, которое осуществляется с помощью двойной крестовой оптики. Часть прямогосветового потока лампы направляется через параболический зеркальный растр такимобразом, что ограничивается слепящее действие прямого и отраженного света;отраженная часть излучения лампы направляется широким потоком на потолок (рис.6.1.)

/>
Рис 6.1. Кривая силы света светильника с двойнойкрестовой оптикой.
Благодаря такомусветораспределению в верхней полусфере яркость потолка в любом месте, в томчисле и непосредственно под светильником, не превышает 200 кд/м2. Габаритнаяяркость светильников в зоне углов излучения более 50 ° от вертикали ограничивается в обеихплоскостях 200 кд/м2. (рис. 6.2.)
/>
Рис.6.2. Ограничение яркости (L) светильников общегоосвещения для работы с видеотерминалом

В ВЦ применяютодностороннее естественное освещение. В машинных залах рабочие местаоператоров, работающих с дисплеями, располагают подальше от окон и такимобразом, чтобы оконные проемы находились сбоку от работающих. В случае еслиэкран ВТ обращен к оконному проему, должны быть предусмотрены специальныеэкранирующие устройства. Окна рекомендуется снабжать светорассеивающими шторами(r=0,5-0,7), регулируемыми жалюзи илисолнцезащитной пленкой с металлическим покрытием.
В тех случаях когда одногоестественного освещения в помещении недостаточно, устраивают совмещенноеосвещение. При этом дополнительное искусственное освещение в помещении ирабочих местах должно создавать хорошую видимость информации на экране ВТ,машинописного и рукописного текста и других рабочих материалов. При этом в полезрения работающих должны быть обеспечены оптимальные соотношения яркостирабочих и окружающих поверхностей, исключена или максимально ограничена отраженнаяблеклость от экрана и клавиатуры в результате отражения в них световых потоковот светильников и источников света.
Для искусственногоосвещения помещений ВЦ следует использовать главным образом, люминесцентныелампы белого света (ЛБ) и темно-белого цвета (ЛТБ) мощностью 20,40 или 80 Вт.
Планировка рабочего местадолжна удовлетворять требованиям удобства выполнения работ и экономии энергииоператора, рационального использования площадей и удобства обслуживанияустройств ЭВМ. Кнопки для включения, ручки управления средств сигнализациидолжны обеспечивать минимальные затраты.
6.1.7 Расчетестественного освещения
Помещения с постояннымпребыванием людей должны иметь, как правило, естественное освещение.
Естественное освещениеподразделяется на боковое, верхнее и комбинированное.
При одностороннем боковомосвещении нормируется минимальное значение КЕО в точке, расположенной нарасстоянии 1 метра от стены, наиболее удалённой от световых проёмов, напересечении вертикальной плоскости характерного разреза помещения и условнойрабочей поверхности (или пола).
При двухстороннем боковомосвещении нормируется минимальное значение КЕО в точке посередине помещения напересечении вертикальной плоскости характерного разреза помещения и условнойрабочей поверхности (или пола).
Исходные данные длярасчета:
-   размер помещения — 15 * 17 * 4, м;
-   два окна с двойным остеклением иметаллическими переплетами выходят на восток;
-   площадь остекления — 4 м2;
-   размеры остекления — 240*200, см.
Нормируемое значение КЕО eн определяется по формуле
/>, (6.1.)
где /> = 1,5% для бокового освещения,
m — коэффициент светового климата,принят 0,9,
C — коэффициент солнечности климата,принят 0,8.
Получаем />= 1.5×0.9×0.8 = 0.1.
Предварительный расчётплощади боковых проёмов производится по формуле
/>, (6.2.)
где S0 — площадь световых проёмов в свету,
Sn — площадь пола помещения,
eH- нормированное значение КЕО,
Кз — коэффициент запаса, принят 1,2,
h0 — световая характеристика окно, принят 15,
Кзд — коэффициент, учитывающий затенение окон противостоящими зданиями, принят 1,2,
t0 — коэффициент светопропускания материала,определяется по формуле
/>, (6.3.)
гдеt1 — коэффициент светопропускания материала, принят 0,8,
t2 — коэффициент, учитывающий потери света в переплётахсветопроёмов, принят 0,6,
t3 — коэффициент, учитывающий потери света в несущихконструкциях при боковом освещении, принят 1,
t4 — коэффициент, учитывающий потери света в солнцезащитныхустройствах, принят 1,
t5 — коэффициент, учитывающий потери света в защитнойсетке, устанавливаемой под фонарями, принимается равным 0,9.
Отсюда />= 0,4.
r1 — коэффициент, учитывающий повышение КЕО при боковомосвещении, принят 1,25.
При выборе коэффициентовиспользовались значения для лаборатории центра ИТ.
Расчёт коэффициентаестественной освещённости (КЕО) производится по формуле
/>, (6.4.)
где/> - геометрический КЕО врасчётной точке при боковом освещении, учитывающий свет неба,
q — коэффициент, учитывающийнеравномерную яркость облачного неба, принят 0,91 при угловой высотесветопроёма над рабочей поверхностью 34 град,
/> — геометрический КЕО в расчётнойточке при боковом освещении, учитывающий свет, отражённый от противостоящихзданий,
R — коэффициент, учитывающийотносительную яркость противостоящих зданий, принят 0,15 при Z1 = 0,5, Z2 = 1.
Геометрическиекоэффициенты естественной освещенности, учитывающие прямой свет неба, вкакой-либо точке помещения определяются по формуле
/> (6.5.)
где n1 — количество лучей проходящих от неба через световыепроёмы в расчётную точку на поперечном разрезе помещения, принято 7,
n2 — количество лучей проходящих от неба через световыепроёмы в расчётную точку на плане помещения, принято 8.
Геометрическиекоэффициенты естественной освещенности, учитывающие свет, отражённый отпротивостоящего здания /> при боковомосвещении определяется по формуле
/>, (6.6.)
где /> - количество лучейпроходящих от противостоящего здания через световые проёмы в расчётную точку напоперечном разрезе помещения, принято 5,
/> - количество лучей проходящих отпротивостоящего здания через световые проёмы в расчётную точку на планепомещения, принято 6.
Расчёт:
/> = 0,56,
/> = 0,42,
/> = 0,239.
Расчётное значение КЕОбольше нормируемого, поэтому при заданных размерах оконных проёмовобеспечивается достаточная освещённость рабочего места.
6.1.8 Организациярабочего места
При размещении ВТ нарабочем месте согласно ГОСТ 12.2.032-78 учитываются границы полей зренияоператора, которые определяются движениями глаз и головы. Различают зонызрительного наблюдения в вертикальной плоскости, ограниченные определеннымиуглами, в которых располагаются экран ВТ (40-60 °), пюпитр (35-45 °) и клавиатура. (рис. 6.3.)
/>
Рис.6.3. Зоны зрительногонаблюдения в вертикальной плоскости

При организации рабочего местаучитываются антропометрические данные операторов, а также предусматриваетсясоответствующие размещение элементов оборудования в зависимости от характеравыполняемой работы. Зоны для выполнения ручных операций и размещения органовуправления показаны на рис.6.4.
Высота сидения от поладолжна регулироваться в пределах 42-55 см. Зависимость высоты рабочейповерхности от роста человека показана на рис.6.5. По желанию оператора устанавливаетсяподставка для ног размером 40х30х15 см и углом наклона 0-20° с нескользящим покрытием и неперемещаемаяпо полу.
/> />/>
Рост человека, мм Рост человека, мм

Рис. 6.5. Номограмма зависимости высоты рабочей поверхности для разных видов работ (1-4), пространства для ног (5) и высоты рабочего сиденья (6) от роста человека  

При постоянной работе(рис.6.6) экран должен быть расположен в центре поля обзора, документы слева настоле или на специальной подставке. Рабочий стол должен иметь стабильную конструкцию.Плоскость стола выбирают в зависимости от размера документов. При большихразмерах документов она должна быть 160х90 см. Плоскость стола, а также сидениеоператора должны регулироваться по высоте. Высоту плоскости стола необходиморегулировать в диапазоне 65-85 см или 68-84 см. При этом высота отгоризонтальной линии зрения до рабочей поверхности стола при выпрямленнойрабочей позе должна быть 45-50 см.
/>
Рис. 6.6. Расположение элементов оборудования ВТ припостоянной работе с экраном
6.2 Пожарная безопасность
В современных ЭВМ имеетсявысокая плотность размещения элементов электронных схем. В непосредственнойблизости друг от друга располагаются соединительные провода, коммуникационныекабели. При протекании по ним электрического тока выдается значительноеколичество теплоты, что может привести к повышению температуры отдельных узловдо 80-100 °С, при этомвозможно отклонение изоляции соединительных проводов что, как правило приводитк короткому замыканию, которое сопровождается искрением и ведет к недостаточнойнадежности и перегрузке элементов электронных схем. В последствии перегреваясь,сгорают с разбрызгиванием искр. Для отбора избыточной теплоты от ЭВМ служатсистемы вентиляции и кондиционирования воздуха. Однако, мощные разветвления,постоянно действующие системы вентиляции и кондиционирования представляютдополнительную пожарную опасность для ВЦ, так как с одной стороны онообеспечивает подачи кислорода — окислителя во все помещения, а с другой — привозникновении пожара быстро распространяют огонь и продукты горения во всемпомещении и устройствам, с которым связаны воздуховоды.
Напряжение кэлектроустановкам ВЦ подается по кабельным линиям, которые представляют особуюпожарную опасность. Наличие горючего изоляционного материала, вероятныхисточников зажигания в виде электрических дуг и искр, разветвленности,труднодоступность делают кабельные линии местом наиболее вероятноговозникновения и развития пожара.
По взрывной и пожарнойопасности помещения и здания подразделяются на категории А, Б, В, Г, Д взависимости от выполняемых в них технологических процессов, свойств применяемыхвеществ и материалов, а так же условиями их обработки.
Так как в процессепроизводства используются горючие вещества и материалы (бумага, магнитныеленты, порошковые картриджи для множительной и оргтехники), которые привзаимодействии с кислородом воздуха могут гореть, то назначаем категориюпожарной безопасности В (ОНТП 24-86, табл.1).
Одной из важных задачпожарной профилактики является защита строительных конструкций от разрушений иобеспечение их достаточной прочности в условиях воздействия высоких температурпри пожаре. Учитывая высокую стоимость электронного оборудования ВЦ, а так жекатегорию их пожарной опасности, здания для ВЦ и части зданий другогоназначения, в которых предусмотрено размещение ЭВМ относятся к 1 или 2 ступенистойкости. Для изготовления строительных конструкций используют, как правилокирпич, железобетон, стекло и другие негорючие материалы.
Для предотвращенияраспространения огня во время пожара с одной части здания на другую устраиваютпротивопожарные преграды в виде стен, перегородок, дверей, окон, люков, клапанов.Особое требование предъявляется к устройству и размещению кабельныхкоммуникаций. Все виды кабелей прокладываются в металлических газовых агрегатовдо распределительных щитов или стоек питания.
Для ликвидации пожаров вначальной стадии применяются первичные средства пожаротушения:
-  внутренние пожарные водопроводы,
-  огнетушители типа ОХП-10, ОХП-11,
-  сухой песок,
-  асбестовые одеяла и др.
В здании ВЦ краныустанавливают в коридорах, на площадках лестничных клеток, у входа, т.е. вдоступных и защитных местах. На каждые 100 квадратных метра пола производственныхпомещений обычно требуется 1-2 огнетушителя (табл. 6.4.). Время действия пенныхогнетушителей 50-70с, длина струи 6-8м, кратность пены 5, стойкость 40 мин.
Углекислые огнетушителинаполнены сжиженным углекислым газом, находящемся под давлением 6МПа. Дляприведения их в действие достаточно открыть вентиль. Углекислый газ выходит ввиде снега и сразу превращается в газ.
Таблица 6.4
Примерные нормы первичных средствпожаротушения на действующих промышленных предприятиях и складахПомещение, сооружение, установка
Единица измерения, м2 Углекислые огнетушители ручные ОУ-2, ОУ-5, ОУ-8 Пенные, химические, воздушно-пенные огнетушители Войлок, кошма или асбест (1x1, 2x1.5, 2x2 м) вычислитель-ные центры 100 1 1 1

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

7. ЭКОНОМИЧЕСКИЙ РАЗДЕЛ
При расчете экономическойэффективности разработки программного обеспечения “Универсальнойобучающе-контролирующей системы” необходимо сопоставить затраты на решениезадачи при ручном методе ее решения с затратами, связанными с ее автоматизацией.
Определение годовогоэкономического эффекта от сокращения ручного труда при обработке информациипроизводится в описанной ниже последовательности.
Годовые эксплуатационныерасходы при ручной обработке информации определяются по формуле
Зр = Тр*к*tчр*(1+q)*(1+a)*(1+b), (7.1.)
гдеТр —трудоемкость разового решения задачи вручную, чел-ч. (Тр = 3.5),
к — периодичность решениязадачи в течение года (к = 200),
tчр —среднечасовая ставка работника, осуществляющего ручной расчет задачи, руб.,
q — коэффициент,учитывающий процент премий (q = 0.4),
а — коэффициент,учитывающий дополнительную заработную плату (а = 0.15),
b — коэффициент,учитывающий начисления на заработную плату, включая отчисления в фондсоциальной защиты населения — 35%, детских учреждений — 5% и чрезвычайныйчернобыльский налог — 12% (b = 0.52).
Трудоемкость разовогорешения задачи вручную определяется по нормам времени на разработкуконструкторской или технологической документации [19].
Среднечасовая ставкаработника определяется исходя из Единой тарифной системы оплаты труда вРеспублике Беларусь по следующей формуле
tчр = О1*kт/167, (7.2.)
гдеО1 —среднемесячная заработная плата работника 1 разряда (по состоянию на 01.04.97 —170000 руб.),
kт — тарифныйкоэффициент работника соответствующего разряда (kт = 4.06),
167 — нормативноеколичество рабочих часов в месяце.
Разряд работника,выполняющего ручной расчет задачи, и соответствующий ему тарифный коэффициентвыбирается из табл.7.1.
Таблица 7.1
Тарифные коэффициентыспециалистов с высшим образованиемКатегория работников Разряд Тарифные коэффициенты
Специалисты с высшим образованием:
без категории 8 3.69 2 категории 9 4.06 1 категории 10 4.47 высшей категории 11 4.78
tчр = 170000*4.06/167 = 4132.93 (руб),
Зр = 3.5*200*4132.93*(1+0.4)*(1+0.15)*(1+0.52) = 7079874.41(руб)
Годовые текущие затраты,связанные с эксплуатацией задачи, определяются по формуле
Зт = Зп+За, (7.3.)

гдеЗп —затраты на заработную плату пользователя программы,
За — затратына оплату аренды ЭВМ при решении задачи.
Затраты на заработнуюплату пользователя программы определяются по формуле
Зп = Тз*к*tчп*(1+q)*(1+a)*(1+b), (7.4.)
гдеТз — времярешения задачи на ЭВМ, час.,
tчп —среднечасовая ставка пользователя программы, руб. (определяется аналогичноставке работника, осуществляющего ручной расчет, кт = 3.69).
Время решения задачи наЭВМ определяется по формуле
Тз = (Твв+Тр+Твыв)*(1+dпз)/60, (7.5.)
гдеТвв — времяввода в ЭВМ исходных данных, необходимых для решения задачи, мин.,
Тр — времявычислений, мин.( Тр = 0.1),
Твыв — времявывода результатов решения задачи (включая время распечатки на принтере играфопостроителе), мин. (Твыв = 4),
dпз —коэффициент, учитывающий подготовительно-заключительное время (dпз =0.20).
Время ввода в ЭВМисходных данных может быть определено по формуле

Твв = Кz*Hz/100, (7.6.)
гдеКz —среднее количество знаков, набираемых с клавиатуры при вводе исходных данных (Кz= 250),
Hz — нормативнабора 100 знаков, мин. (Hz = 2).
Время вычислений и времявывода информации может быть определено экспериментальным путем при отладкеконтрольного примера.
tчп = 170000*3.69/167 = 3756.29 (руб),
Твв = 250*2/100 = 5 (мин),
Тз = (5+0.1+4)*(1+0.20)/60 = 0.182 (час),
Зп = 0.182*200*3756.29*(1+0.4)*(1+0.15)*(1+0.52) = 334603.10 (руб).
Затраты на оплату арендыЭВМ для решения задачи определяются по следующей формуле
За = Тз*к*Sмч, (7.7.)
гдеSмч —стоимость одного машино-часа работы ЭВМ, руб.
Стоимость машино-часаработы ЭВМ определяется по формуле
Sмч = Сэ+(Аэвм+Рэвм+Апл+Рпл+Нн)/Фэвм, (7.8.)
гдеСэ —расходы на электроэнергию за час работы ЭВМ, руб.,
Аэвм — годоваявеличина амортизационных отчислений на реновацию ЭВМ, руб.,
Рэвм — годовыезатраты на ремонт и техническое обслуживание ЭВМ, руб.,
Апл — годоваявеличина амортизационных отчислений на реновацию производственных площадей,занимаемых ЭВМ, руб.,
Рпл — годовыезатраты на ремонт и содержание производственных площадей, руб.,
Нн — годоваявеличина налога на недвижимость, руб.,
Фэвм — годовойфонд времени работы ЭВМ, час.
Расходы на электроэнергиюза час работы ЭВМ определяются по формуле
Сэ = Nэ*kис*Цэ или Сэ = Чэл*Цэ, (7.9.)
гдеNэ —установленная мощность электродвигателя ЭВМ, кВт (Nэ = 0.2),
kис —коэффициент использования энергоустановок по мощности (kис = 0.9),
Цэ — стоимость1 кВт-часа электроэнергии, руб. (Цэ = 690),
Чэл —среднечасовое потребление электроэнергии ЭВМ, кВт.
Сэ = 0.2*0.9*690 = 124.2 (руб).
Годовая величина амортизационныхотчислений на реновацию ЭВМ определяется по формуле
Аэвм = Цэвм*kу*kм*Наэвм/100 = Цбэвм*Наэвм/100, (7.10.)
гдеЦэвм — ценаЭВМ на момент ее выпуска, руб. (Цэвм = 17500000),
kу —коэффициент удорожания ЭВМ (зависит от года выпуска). В том случае, когда в качествецены используется цена 1997г., коэффициент удорожания kу = 1,
kм —коэффициент, учитывающий затраты на монтаж и транспортировку ЭВМ (kм =1.1),
Наэвм — нормаамортизационных отчислений на ЭВМ, % (Наэвм = 10),
Цбэвм —балансовая стоимость ЭВМ, руб.

Цбэвм = 17500000*1*1.1 = 19250000 (руб),
Аэвм = 17500000*1*1.1*10/100 = 1925000 (руб).
Годовые затраты на ремонти техническое обслуживание ЭВМ укрупненно могут быть определены по формуле
Рэвм = Цбэвм*kро, (7.11.)
гдеkро —коэффициент, учитывающий затраты на ремонт и техническое обслуживание ЭВМ, втом числе затраты на запчасти, зарплату ремонтного персонала и др. (kро =0.1).
Рэвм = 19250000*0.1 = 1925000 (руб).
Годовая величинаамортизационных отчислений на реновацию производственных площадей, занятых ЭВМопределяется по формуле
Апл = Цбпл*Напл/100 = Sэвм*kд*Цпл*Напл/100, (7.12.)
гдеЦбпл —балансовая стоимость площадей, руб.,
Напл — нормаамортизационных отчислений на производственные площади, % (Напл = 1.2 ),
Sэвм —площадь, занимаемая ЭВМ, кв. м. (Sэвм = 1 кв. м.),
kд —коэффициент, учитывающий дополнительную площадь (kд = 3),
Цпл — цена 1квадратного метра площади, руб. (Цпл = 4363837.5).
Цбпл = 1*3*4363837.5 = 13091512.5 (руб),
Апл = 13091512.5*1.2/100 = 157098.15 (руб).
Годовые затраты на ремонти содержание производственных площадей укрупненно могут быть определены поформуле

Рпл = Цбпл*kрэ, (7.13.)
гдеkрэ —коэффициент, учитывающий затраты на ремонт и эксплуатацию производственныхплощадей (kрэ = 0.05).
Рпл = 13091512.5*0.05 = 654575.63 (руб).
Величина налога нанедвижимость определяется по формуле
Нн = (Цбэвм+Цбпл)*Снн, (7.14.)
гдеСнн —ставка налога на недвижимость (Снн = 0.01).
Нн = (19250000+13091512.5)*0.01 = 323415.13 (руб).
Годовой фонд времениработы ЭВМ определяется исходя из режима ее работы и может быть рассчитан поформуле
Фэвм = tсс*Тсг, (7.15.)
гдеtсс —среднесуточная фактическая загрузка ЭВМ, час. (tсс = 8),
Тсг — среднееколичество дней работы ЭВМ в год (Тсг = 250).
Фэвм = 8*250 = 2000 (час),
Sмч = 124.2+(1925000+1925000+157098.15+654575.63+323415.13)/2000 = 2504.96 (руб).
Прирост условной прибылив результате внедрения задачи определяется по формуле
Пу = (Зр-Зт)*(1-Снп), (7.16.)
гдеСнп —ставка налога на прибыль (Снп = 0.3).

За = 0.182*200*2504.96 = 91180.54 (руб),
Зт = 334603.10 + 91180.54 = 425783.64 (руб),
Пу = (7079874,41-425783,64)*(1-0,3) = 4657863.54 (руб).
Для определения годовогоэкономического эффекта от разработанной программы необходимо определитьсуммарные капитальные затраты на разработку и внедрение программы по формуле
Ко = Кз+Цпр, (7.17.)
гдеКз —капитальные и приравненные к ним затраты, руб.,
Цпр —отпускная цена программы, руб.,
Капитальные иприравненные к ним затраты определяются по формуле
Кз = Цбэвм*(1-X*Наэвм/100)*Тз*к/Фэвм,, (7.18.)
гдеХ — количество летвыработки ЭВМ, лет.
Кз = 19250000*(1-5*10/100)*0.182*200/ 2000 = 175175 (руб).
Отпускная цена программыопределяется по формуле
Цпр = Цо+(Зрз+Пр)*Ндоб, (7.19.)
гдеЦо —оптовая цена программы, руб.,
Зрз — затратына заработную плату разработчиков программы, руб.,
Пр — размерплановой прибыли на программу, руб.,
Ндоб — ставканалога на добавленную стоимость (Ндоб = 0.20).
Затраты на заработнуюплату разработчиков программы определяются по формуле
Зрз = Трз*tчрз*(1+q)*(1+a)*(1+b), (7.20.)

гдеТрз —трудоемкость разработки программы, час.,
tчрз —среднечасовая ставка работника, осуществляющего разработку программы, руб.
Трудоемкость разработкипрограммы включает время на постановку задачи и время на программированиезадачи и определяется по формуле
 nэnэ
Трз = (åТпосi+åТпргi)*8, (7.21.)
 i=1i=1
 
гдеnэ — количествоэтапов разработки программы,
Тпосi —трудоемкость постановки задачи на i-м этапе разработки программы, дней,
Тпргi —трудоемкость программирования задачи на i-м этапе разработки программы, дней.
Разработка пакетапрограмм, представленного в настоящем проекте, включала в себя 4 этапа:
1.  Проектирование структур баз данных (Тпос= 1, Тпрг = 3);
2.  Разработка программы создания имодификации тестов (Тпос = 0.4, Тпрг = 18);
3.  Разработка программы контроля знаний(Тпос = 0.3, Тпрг = 15);
4.  Разработка программыадминистрирования (Тпос = 0.3, Тпрг = 11);
Трз = 392 (час),
tчрз = 170000*4.78/167 = 4865.87 (руб),
Зрз = 392*4865.87*(1+0.4)*(1+0.15)*(1+0.52) = 4667840.77 (руб).
Нормы времени учитываютряд факторов, наибольшим образом влияющих на трудоемкость разработки проекта:
·   количество разновидностей формвходной информации;
·   количество разновидностей формвыходной информации;
·   степень новизны задачи;
·   сложность алгоритма;
·   вид используемой информации;
·   сложность контроля входной и выходнойинформации;
·   язык программирования;
·   объем входной информации;
·   использование типовых решений, типовыхпроектов и программ,
·   стандартных модулей.
Предусмотрено четырестепени новизны разрабатываемых задач:
·   А — разработка задач, предусматривающаяприменение принципиально новых методов разработки, проведениенаучно-исследовательских работ;
·   Б — разработка типовых проектныхрешений, оригинальных задач и систем, не имеющих аналогов;
·   В — разработка проекта сиспользованием типовых проектных решений при условии их изменения, разработкапроектов, имеющих аналогичные решения;
·   Г — привязка типовых проектныхрешений.
Сложность алгоритмапредставлена тремя группами:
·   1 — алгоритмы оптимизации имоделирования систем и объектов;
·   2 — алгоритмы учета, отчетности,статистики и поиска;
·   3 — алгоритмы, реализующиестандартные методы решения, а также не предусматривающие применения сложныхчисленных и логических методов.
Пакет программ,представленный в настоящем проекте, относится к степени В новизныразрабатываемой задачи. Сложность алгоритма решаемой задачи — 3.
Плановая прибыль напрограмму определяется по формуле
Пр = Спр*Нп,, (7.22.)

гдеСпр —себестоимость программы, руб.,
Нп — нормаприбыли проектной организации (Нп = 0.25).
Себестоимость программыопределяется по формуле
Спр = Зрз*F+Зот, (7.23.)
гдеF — коэффициентнакладных расходов проектной организации без учета эксплуатации ЭВМ (F = 1.15),
Зот — затратына отладку программы.
Затраты на отладкупрограммы определяются по формуле
Зот = Тотл*Sмч, (7.24.)
гдеТотл —трудоемкость отладки программы, час. (Тотл = 32).
Зот = 32* 2504.96 = 80159 (руб),
Спр = 4667840.77*1.15+80159= 5448175.89 (руб).
Оптовая цена программыопределяется по формуле
Цо = Спр+Пр. (7.25.)
 Пр = 5448175.89 *0.25 = 1362043.97 (руб),
Цо = 5448175.89 + 1362043.97 = 5440712.13 (руб),
Цпр = 5440712.13+(4667840.77+1362043.97)*0.2 = 6646689.08 (руб).
Ожидаемый годовойэкономический эффект от сокращения ручного труда при обработке информацииопределяется по формуле
ЭФ = Пу-Е*Ко = Пу-Е*(Кз+Цпр), (7.26.)
гдеЕ — коэффициентэффективности, равный ставке за кредиты на рынке долгосрочных кредитов (Е = 0.25).
Ко = 175175+6646689.08 = 6821864.08 (руб), ЭФ = 4657863.54 -0.25*6821864.08= 2952397.52 (руб).
Срок возврата инвестицийопределяется по формуле
Тв = Ко/Пу, (7.27.)
Тв = 6821864.08/ 4657863.54 = 1.46 (лет).
Результаты расчетасведены в табл. 7.2.
Таблица 7.2
Технико‑экономическиепоказатели проектаНаименование показателя Базовый вариант Проектный вариант Трудоемкость решения задачи, час. 4 0.182 Периодичность решения задачи, раз/год 200 200 Годовые текущие затраты, связанные с решением задачи, млн. руб. 7.080 0.335 Отпускная цена программы, млн. руб. —  6.647 Степень новизны программы — В Группа сложности алгоритма — 3 Прирост условной прибыли, млн. руб. — 4.658 Ожидаемый годовой экономический эффект, млн. руб. — 2.952 Срок возврата инвестиций, лет — 1.46
Разработанная«Обучающе-контролирующая система» обеспечивает получение годового экономическогоэффекта в сумме 2.952 млн. рублей. Прирост условной прибыли составляет 4.658млн. рублей. При отпускной цене программы в 6.647 млн. рублей проектобеспечивает возврат инвестиций за 1.46 года.

ЗАКЛЮЧЕНИЕ
В результате дипломногопроектирования разработана универсальная обучающе-контролирующая система,состоящая из следующих функциональных частей:
1)  программа для создания и модификациитестов;
2)  сервисная программа администрирования;
3)  программа контроля знаний.
Разработанная универсальнаяобучающе-контролирующая система обладает следующими возможностями:
·   создание на основе имеющихся баззнаний тестов по различным предметам;
·   модификациясозданных тестов;
·   формированиебилетов;
·   задание времени ответа на вопросыбилета;
·   задание системыоценки результатов тестирования;
·   контроль знанийобучаемых посредством тестирования;
·   возможность работы системы в ЛВС;
·   просмотр и распечатка результатов(протокола) тестирования на принтере
и может быть использованав учебном процессе преподавателями вузов, техникумов и средних школ.
Перспективнымнаправлением дальнейших разработок по проблематике обучающе-контролирующихсистем может служить применение в таких системах OLE и мультимедиа технологий.
Все задачи, поставленныепри постановке задания, выполнены. Проведенный расчет говорит о экономической целесообразностиразработки системы и возможности использования ее в учебном процессе.

Приложение1
ТЕКСТ ПРОГРАММЫ TESTBUILDER
programTestBuilder;
uses
Forms,
S2 in 'S2.PAS'{TreeForm},
db_unit in'db_unit.pas' {EditForm},
addtema in'addtema.pas' {WinEditTema},
progrInd in'progrInd.pas' {ProcessForm};
{$R *.RES}
begin
Application.Title:='TestBuilder';
Application.CreateForm(TTreeForm,TreeForm);
Application.CreateForm(TEditForm,EditForm);
Application.CreateForm(TWinEditTema,WinEditTema);
Application.CreateForm(TProcessForm,ProcessForm);
Application.Run;
end.
Текст модуля DB_Unit
unit S2;
interface
uses
SysUtils,WinTypes,{ Windows,} Messages, Classes, Graphics, Controls,
Forms,Dialogs, Buttons, StdCtrls, Grids, Outline, ComCtrls, DBCtrls,
DBTables, DB;
type
TTreeForm =class(TForm)
MainTree:TOutline;
AddDocBut:TSpeedButton;
DeleteBut:TSpeedButton;
FullExpBut:TSpeedButton;
FullColBut:TSpeedButton;
ExitBut:TSpeedButton;
AddTemaBut:TSpeedButton;
TemaSource:TDataSource;
QuestSource:TDataSource;
DBTema:TTable;
DBTemaTema_id:TAutoIncField;
DBTemaTema_name:TStringField;
DBQuest:TTable;
DBQuestTema_id:TIntegerField;
DBQuestQuest_id:TAutoIncField;
DBQuestQuest_name:TMemoField;
procedureAddDocButClick(Sender: TObject);
procedureMainTreeClick(Sender: TObject);
procedureDeleteButClick(Sender: TObject);
procedureFullExpButClick(Sender: TObject);
procedureFullColButClick(Sender: TObject);
procedureExitButClick(Sender: TObject);
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedureAddTemaButClick(Sender: TObject);
procedureFormShow(Sender: TObject);
procedureFormResize(Sender: TObject);
procedureFormCreate(Sender: TObject);
procedureAppendQuestion(temaId: longint);
procedureClearQuestion;
private
{ Privatedeclarations }
x1,x2:integer; {вспомогательные переменные}
CreateMainForm:boolean;
public
{ Publicdeclarations }
end;
var
TreeForm:TTreeForm;
implementation
uses db_unit,addtema, progrInd;
{$R *.DFM}
procedureTTreeForm.AddDocButClick(Sender: TObject);
var
Nodename:string;
number,ind,docindex:longint;
begin
If MainTree.Items[MainTree.SelectedItem].Level= 1 then Exit;
If MainTree.Items[MainTree.SelectedItem].Level= 2 then {в NUMBER заносится номер темы }
begin
number:=longint(MainTree.Items[MainTree.SelectedItem].Data);{в NUMBER заносится номер темы}
ind:= MainTree.SelectedItem;
end
else
begin
number:=longint(MainTree[MainTree.SelectedItem].Parent.Data);
ind:=MainTree[MainTree.SelectedItem].Parent.Index;
end;
AppendQuestion(number);{добавление нового вопроса в БД вопросов}
WithMainTree.Items[ind] do
If HasItemsthen number:= GetLastChild — GetFirstChild + 2 {определение числа потомков + 2}
else number:=1;
Str(number,Nodename);{номер вопросав теме}
If MainTree.Items[MainTree.SelectedItem].Level= 2 then
begin
docIndex:= MainTree.AddChildObject(MainTree.SelectedItem,NodeName,
pointer(DBQuest.Fields[1].AsInteger));
MainTree.Items[MainTree.SelectedItem].Expand;
end
else {if… =3}
docIndex:=MainTree.AddObject(MainTree.SelectedItem,NodeName,
pointer(DBQuest.Fields[1].AsInteger));
MainTree.Selecteditem:=docIndex; {установление фокусана new вопрос}
end;
procedureTTreeForm.MainTreeClick(Sender: TObject);
Var
cur_id:longint;
NewAnswer:TAnswer;
del_count,i:integer;
begin
ifMainTree.Items[MainTree.SelectedItem].Level = 1 then
begin
EditForm.QuestLabel.Hide;
EditForm.DBEditTema.Hide;
EditForm.MemoQuest.Hide;
EditForm.MemoScroll.Enabled:=False;
EditForm.AddAnswerBut.Enabled:=False;
EditForm.DelAnswerBut.Enabled:=False;
Exit;
end;
cur_id:=Longint(MainTree.Items[MainTree.SelectedItem].Data);
EditForm.QuestLabel.Show;
ifMainTree.Items[MainTree.SelectedItem].Level = 3 then
begin
WithTreeForm.DBQuest do begin {установка фильтра на БД вопросов }
SetKey;
Fields[1].AsInteger:=cur_id;
GotoKey;
end;
EditForm.DBEditTema.Hide;
EditForm.QuestLabel.Caption:='Текст вопроса';
EditForm.MemoQuest.Show;
EditForm.MemoScroll.Enabled:=True;
EditForm.AddAnswerBut.Enabled:=True;
EditForm.DelAnswerBut.Enabled:=True;
i:= 0; {индекс ДЛЯОБЪЕКТА TMemo в списке}
EditForm.DBAnswer.First;{чтобы не было глюков при повторном щелчке на вопросе}
while NOTEditForm.DBAnswer.Eof do
begin
If (i+1) >EditForm.MemoScroll.ComponentCount then
NewAnswer:=TAnswer.Create(EditForm.MemoScroll,100); {добавление new варианта ответав список}
TMemo(EditForm.MemoScroll.Components[i]).Text:=
EditForm.DBAnswer.Fields[2].AsString;{Otvet_name}
TCheckBox(EditForm.MemoScroll.Components[i+1]).Checked:=
EditForm.DBAnswer.Fields[3].AsBoolean;{Otvet_name}
inc(i,2); //
EditForm.DBAnswer.Next;
end;
While i
TAnswer.DeleteAnswer(EditForm.MemoScroll,EditForm.MemoScroll.ComponentCount- 2);
IfEditForm.MemoScroll.ComponentCount > 0 then TMemo(EditForm.MemoScroll.Components[0]).SetFocus;{Set focus on first answer.}
end
else {if level= 2, т.е. выбранатема}
begin
WithTreeForm.DBTema do begin {установка фильтра на БД тем }
SetKey;
Fields[0].AsInteger:=cur_id;
GotoKey;
end;
EditForm.AddAnswerBut.Enabled:=False;
EditForm.DelAnswerBut.Enabled:=False;
EditForm.MemoScroll.Enabled:=False;
EditForm.MemoQuest.Hide;
EditForm.QuestLabel.Caption:='Название темы';
EditForm.DBEditTema.Show;
end;
end;
procedureTTreeForm.DeleteButClick(Sender: TObject);
begin
IfMaintree.SelectedItem = 1 then Exit;
If MainTree.Items[MainTree.SelectedItem].Level= 3 then
begin
IfApplication.MessageBox('Удалить вопрос ?','Удаление вопроса',
mb_YesNo+mb_IconQuestion+MB_DEFBUTTON2)= IdYes then
begin
ClearQuestion; //логическое удаление вопроса из БД
MainTree.Delete(MainTree.SelectedItem);{удаление текущего узла дерева}
end;
end
else
IfApplication.MessageBox('Удалить раздел ?','Удаление раздела',
mb_YesNo+mb_IconQuestion+MB_DEFBUTTON2)= IdYes then
begin
DBQuest.IndexName:='tema_ind';
DBQuest.SetKey;
DBQuest.Fields[0].AsInteger:=DBTema.Fields[0].AsInteger; // Fields[0] — Tema_Id
While DBQuest.GotoKey doClearQuestion; // логическое удаление всех вопросов, принадлежащих теме
DBQuest.IndexName:= '';
DBTema.Delete; { Удалениевыбранной темы }
{ DBTema.Edit;DBTema.Fields[1].Clear; DBTema.Post; // logical delete }
MainTree.Delete(MainTree.SelectedItem);{удаление текущего узла дерева}
end;
end;
procedureTTreeForm.FullExpButClick(Sender: TObject);
begin
MainTree.FullExpand;
end;
procedureTTreeForm.FullColButClick(Sender: TObject);
begin
MainTree.FullCollapse;
end;
procedureTTreeForm.ExitButClick(Sender: TObject);
begin
TreeForm.Close;
end;
procedureTTreeForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
EditForm.DBAnswer.Active:=False;
DBQuest.Active:=False;
DBTema.Active:=False;
end;
procedureTTreeForm.AddTemaButClick(Sender: TObject);
var
index:Longint;
FoundEmpty:boolean;
begin
WinEditTema.ShowModal;
IfWinEditTema.ModalResult = mrOk then begin
FoundEmpty:=False;
DBTema.First;
While (notDBTema.EOF) and (not FoundEmpty) do {поиск записи вDBTEMA с пустымполем Tema_name}
begin
IfDBTema.Fields[1].IsNull Then FoundEmpty:= True
elseDBTema.Next;
end;
If FoundEmptythen DBTema.Edit
else DBTema.Append;{добавление новой темы в БД, если не найдено пустой}
DBTema['Tema_name']:=WinEditTema.TemaEdit.Text;
DBTema.Post;
AppendQuestion(DBTema.Fields[0].AsInteger);{добавление новоговопроса в БД }
index:=MainTree.AddChildObject(1,
DBTema.Fields[1].AsString,
pointer(DBTema.Fields[0].AsInteger));{добавление new темы}
MainTree.AddChildObject(index,'1',
pointer(DBQuest.Fields[1].AsInteger));{добавление пустоговопроса в тему}
If notMainTree.Items[1].Expanded then
MainTree.Items[1].Expand;{раскрытие корневого узла}
MainTree.Items[index].Expand;{раскрытие узла темы}
MainTree.Selecteditem:=index; {установление фокусана new тему}
end;
end;
procedureTTreeForm.FormShow(Sender: TObject);
Var
cur_node,i:Longint;
node_name:string;
begin
ifCreateMainForm then
begin
ProcessForm.Show;
DBTema.Active:=True; {Открытие БД тем и вопросов}
DBQuest.Active:=True;
ProcessForm.ProgressBar.Max:=DBTema.RecordCount + DBQuest.RecordCount;
While notDBTema.EOF do begin {загрузка дереваиз БД}
ProcessForm.ProgressBar.StepIt;
If notDBTema.Fields[1].IsNull then
begin
cur_node:=MainTree.AddChildObject(1,
DBTema.Fields[1].AsString,
pointer(DBTema.FieldByName('Tema_id').AsInteger));{добавление темы в дерево}
i:= 1;
While notDBQuest.EOF do begin
ProcessForm.ProgressBar.StepIt;
Str(i,node_name);
MainTree.AddChildObject(cur_node,node_name,
pointer(DBQuest.Fields[1].AsInteger));{добавление вопросав тек.тему}
DBQuest.Next;inc(i);
end;
end;
DBTema.Next;
end; {while}
DBQuest.IndexName:=''; {отключение связи между DBTema и DBQuest}
DBQuest.MasterFields:='';
ProcessForm.Close;
CreateMainForm:=False;
end;
EditForm.Show;
end;
procedureTTreeForm.FormResize(Sender: TObject);
begin
ifTreeForm.Height >= 300 then
MainTree.Height:=TreeForm.ClientHeight — Maintree.Top — x1
else
TreeForm.Height:=300;
IFTreeForm.Width >= 263 then
MainTree.Width:=TreeForm.ClientWidth — MainTree.Left — x2
else
TreeForm.Width:=263;
end;
procedureTTreeForm.FormCreate(Sender: TObject);
begin
CreateMainForm:=True;
x1:=ClientHeight — MainTree.Top — MainTree.Height;
x2:=ClientWidth — MainTree.Left — Maintree.Width;
TreeForm.Height:=GetSystemMetrics(SM_CYMAXIMIZED) — 10;
end;
procedureTTreeForm.AppendQuestion(temaId: longint);
{ Добавляет в таблицуDBQuest новый вопрос.
temaId — содержитзначение темы, которой принадлежит вопрос
}
begin
DBQuest.IndexName:='tema_ind'; {подключение вторичного индекса}
DBQuest.SetKey; {поискзаписи с 0-ым значением DBQuest.Tema_id}
DBQuest.Fields[0].AsInteger:=0;
If DBQuest.GotoKey then {еслинайдена запись, то редактируем ее поля}
begin
DBQuest.IndexName:= ''; {отключениевторичного индекса}
DBQuest.Edit;
end
else {если не найденатакая запись, то добавляем новую}
begin
DBQuest.IndexName:= ''; {отключениевторичного индекса}
DBQuest.Append;
end;
DBQuest['Tema_id']:=TemaId;
DBQuest.Post;
end;
procedureTTreeForm.ClearQuestion;
{осуществляет логическоеудаление текущего вопроса из БД}
begin
{обнуление параметраQuest_id во всех связанных записях БД answer.db}
EditForm.DBAnswer.First;
While notEditForm.DBAnswer.Eof do EditForm.ClearAnswer;
{обнуление tema_idтекущего вопроса}
DBQuest.Edit;
DBQuest.Fields[0].AsInteger:=0; // DBQUEST.Tema_id
DBQuest.Fields[2].AsString:=''; // DBQUEST.QUest_name
DBQuest.Post;
end;
end.
Текст модуля DB_Unit
unit db_unit;
interface
uses
SysUtils,Windows, Messages, Classes, Graphics, Controls,
StdCtrls,Forms, Mask, Buttons,
DBTables, DB,DBCtrls;
type
TEditForm =class(TForm)
MemoQuest:TDBMemo;
QuestName:TLabel;
QuestLabel:TLabel;
DBEditTema:TDBEdit;
MemoScroll:TScrollBox;
AddAnswerBut:TSpeedButton;
DelAnswerBut:TSpeedButton;
DBAnswer:TTable;
AnswerSource:TDataSource;
DBAnswerOtvet_id:TAutoIncField;
DBAnswerQuest_id:TIntegerField;
DBAnswerOtvet_name:TMemoField;
DBAnswerTrued:TBooleanField;
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedureDBEditTemaChange(Sender: TObject);
procedureAddAnswerButClick(Sender: TObject);
procedureDelAnswerButClick(Sender: TObject);
procedureFormCreate(Sender: TObject);
procedureAppendAnswer(QuestId: longint);
procedureClearAnswer;
procedureFormResize(Sender: TObject);
procedureMemoScrollResize(Sender: TObject);
private
x1,x2: integer;{вспомогательные переменные}
public
end;
TAnswer =Class(TObject)
memo: TMemo;
check:TCheckBox;
constructorCreate(AOwner:TComponent;Height_: Integer);
procedureFree;
procedureCheckClick(Sender: TObject);
procedureMemoChange(Sender: TObject);
classprocedure DeleteAnswer(AOwner: TComponent;Number: integer);
private
nocreate:boolean; {TRUE — if don't run the CREATE-constructor}
end;
var
EditForm:TEditForm;
implementation
uses S2;
{$R *.DFM}
procedureTEditForm.AppendAnswer(QuestId: longint);
{ Добавляет в таблицуDBQuest новый вопрос.
temaId — содержитзначение темы, которой принадлежит вопрос
}
Var
i: integer;
Isinsert:boolean;
NewAnswer:TAnswer;
begin
IsInsert:=false; {True if NOT APPEND new record into database}
DBAnswer.MasterFields:='';
DBAnswer.SetKey;{поиск записис 0-ым значением DBAnswer.Tema_id}
DBAnswer.Fields[1].AsInteger:=0;
If DBAnswer.GotoKeythen
begin
DBAnswer.Edit;
IsInsert:=True;
end
else DBAnswer.Append;{еслине найдена запись, то добавляем новую}
DBAnswer.Fields[1].AsInteger:=QuestId;
DBAnswer.Post;
DBAnswer.MasterFields:='Quest_id';
NewAnswer:=TAnswer.Create(MemoScroll,100); {добавление new варианта ответав список}
If IsInsertthen
begin
DBAnswer.First;i:=0;
While i
begin
DBAnswer.Edit;
DBAnswerOtvet_name.Assign(Tmemo(MemoScroll.Components[i]).Lines);
DBAnswer.Fields[3].AsBoolean:=TCheckBox(MemoScroll.Components[i+1]).Checked;
DBAnswer.Post;
DBAnswer.Next;inc(i,2);
end;
end; {endif}
end;
procedureTEditForm.ClearAnswer;
{логическое удаление изБД текущего варианта ответа для текущнго вопроса}
begin
DBAnswer.Edit;
DBAnswer['Quest_id']:=0;
DBAnswer.Fields[2].Clear;{ Otvet_name }
DBAnswer['Trued']:=False;
DBAnswer.Post;
end;
constructorTAnswer.Create(AOwner:TComponent;Height_: Integer);
begin
NoCreate:=False;
memo:=TMemo.Create(Aowner);
memo.Parent:=TWinControl(AOwner);
With memo dobegin
IfComponentIndex = 0 then
begin
Left:= 0; Top:=0;
end
else
begin
Left:= 0;
Top:=TMemo(AOwner.Components[ComponentIndex-2]).Top +
TMemo(AOwner.Components[ComponentIndex-2]).Height;
end;
Width:=TScrollBox(AOwner).Width — 60;
Height:=Height_;
If(ComponentIndex div 2 + 1)*Height > TScrollBox(AOwner).VertScrollBar.Range
thenTScrollBox(AOwner).VertScrollBar.Range:= (ComponentIndex div 2 + 1)*Height;
OnChange:=MemoChange;
SetFocus;
end; {end InitMemo}
check:=TCheckBox.Create(AOwner);
check.Parent:=TWinControl(AOwner);
With check dobegin
Left:=Memo.Left + Memo.Width + 15;
Top:= Memo.Top+ Memo.Height div 2;
Height:= 17;
Width:= 17;
OnClick:=CheckClick;
end;
NoCreate:=True;
end;
procedureTAnswer.Free;
begin
check.Free;
memo.Free;
end;
procedureTAnswer.CheckClick(Sender: TObject);
begin
If nocreatethen begin
EditForm.DBAnswer.First;
EditForm.DBAnswer.MoveBy((Check.Componentindex-1)div 2);
EditForm.DBAnswer.Edit;
EditForm.DBAnswer['Trued']:=check.checked;
EditForm.DBAnswer.Post;
end;
end;
procedureTAnswer.MemoChange(Sender: TObject);
begin
Ifmemo.Modified then
begin
EditForm.DBAnswer.First;
EditForm.DBAnswer.MoveBy(Memo.Componentindexdiv 2);
EditForm.DBAnswer.Edit;
EditForm.DBAnswerOtvet_name.Assign(Memo.Lines);
EditForm.DBAnswer.Post;
end;
end;
classprocedure TAnswer.DeleteAnswer(AOwner: TComponent;Number: integer);
Var
i: integer;
{удаленние из спискаобъекта NUMBER и NUMBER+1}
begin
TCheckBox(AOwner.Components[number+1]).Free;
TMemo(AOwner.Components[number]).Free;
For i:= Numberto AOwner.ComponentCount-1 do {перерисовка компонентов в ScrollBox}
IfAOwner.Components[i] is TMemo then
TMemo(AOwner.Components[i]).Top:=TMemo(AOwner.Components[i]).Top -
TMemo(AOwner.Components[i]).Height
else
TCheckBox(AOwner.Components[i]).Top:=TCheckBox(AOwner.Components[i]).Top -
TMemo(AOwner.Components[i-1]).Height;
IfAOwner.ComponentCount > 0 then
TScrollBox(AOwner).VertScrollBar.Range:=(AOwner.ComponentCount div 2)*
TMemo(AOwner.Components[0]).Height;
end;
procedureTEditForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TreeForm.Close;{закрыть окно, содержащее дерево}
end;
procedureTEditForm.DBEditTemaChange(Sender: TObject);
begin
IfDBEditTema.Modified Then
begin
TreeForm.DBTema.Post;
TreeForm.MainTree.Items[TreeForm.MainTree.SelectedItem].Text:=TreeForm.DBTema.Fields[1].AsString;
{модификация названияузла дерева, содержащего тему}
end;
end;
procedureTEditForm.AddAnswerButClick(Sender: TObject);
begin
AppendAnswer(TreeForm.DBQuest.Fields[1].AsInteger);
end;
procedureTEditForm.DelAnswerButClick(Sender: TObject);
var
CurAnswer,i:integer;
begin {удаленние из списка CURRENT ANSWER, если на нем стоит курсор}
i:= 0;
CurAnswer:=-1;
While i
begin
IfTMemo(MemoScroll.Components[i]).Focused then
CurAnswer:=TMemo(MemoScroll.Components[i]).ComponentIndex;
inc(i,2);
end;
if CurAnswer> -1 then
begin
EditForm.DBAnswer.First;
EditForm.DBAnswer.MoveBy(CurAnswerdiv 2);
ClearAnswer;
TAnswer.DeleteAnswer(MemoScroll,CurAnswer);
end;
end;
procedureTEditForm.FormCreate(Sender: TObject);
begin
EditForm.DBAnswer.Active:=True; {Открытие БД ответов}
x1:=ClientHeight — MemoScroll.Top — MemoScroll.Height;
x2:=ClientWidth — MemoScroll.Left — MemoScroll.Width;
EditForm.Height:=GetSystemMetrics(SM_CYMAXIMIZED) — 10;
end;
procedureTEditForm.FormResize(Sender: TObject);
begin
ifEditForm.Height >= 300 then
MemoScroll.Height:=EditForm.ClientHeight — MemoScroll.Top — x1
elseEditForm.Height:= 300;
IFEditForm.Width >= 300 then
begin
MemoScroll.Width:=EditForm.ClientWidth — MemoScroll.Left — x2;
MemoQuest.Width:=EditForm.ClientWidth — MemoQuest.Left — x2;
DBEditTema.Width:=EditForm.ClientWidth — DBEditTema.Left — x2;
end
elseEditForm.Width:= 300;
end;
procedureTEditForm.MemoScrollResize(Sender: TObject);
var
i: integer;
begin
i:= 0;
While i
begin
TMemo(MemoScroll.Components[i]).Width:=MemoScroll.Width — 60;
TCheckBox(MemoScroll.Components[i+1]).Left:=
TMemo(MemoScroll.Components[i]).Left+ TMemo(MemoScroll.Components[i]).Width + 15;
inc(i,2);
end;
end;
end.
Текст модуля AddTema
unit addtema;
interface
uses Windows,SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons,ExtCtrls;
type
TWinEditTema =class(TForm)
TemaEdit:TEdit;
TemaNameLabel:TLabel;
OkBtn:TBitBtn;
CancelBtn:TBitBtn;
procedurebutCancelClick(Sender: TObject);
procedure butOkClick(Sender:TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
WinEditTema:TWinEditTema;
implementation
{$R *.DFM}
procedureTWinEditTema.butCancelClick(Sender: TObject);
begin
Modalresult:=mrCancel;
end;
procedureTWinEditTema.butOkClick(Sender: TObject);
begin
Modalresult:=mrOk;
end;
end.
Текст модуля ProgrInd
unit progrInd;
interface
uses Windows,SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons,ExtCtrls, ComCtrls;
type
TProcessForm =class(TForm)
Bevel1:TBevel;
ProgressBar:TProgressBar;
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
ProcessForm:TProcessForm;
implementation
{$R *.DFM}
end.

Приложение2
ТЕКСТ ПРОГРАММЫ TESTADMIN
programTestAdmin;
uses
Forms,
main in'main.pas' {AdminForm},
TQDialog in'TQDialog.pas' {CreateTickDlg},
ResultReportin 'ResultReport.pas' {ReportForm};
{$R *.RES}
begin
Application.Title:='TestAdmin';
Application.CreateForm(TAdminForm,AdminForm);
Application.CreateForm(TCreateTickDlg,CreateTickDlg);
Application.CreateForm(TReportForm,ReportForm);
Application.Run;
end.
Текст модуля Main
unit main;
interface
uses
Dialogs,IniFiles,SysUtils,Forms,DB, DBTables, Classes, Controls, Grids, DBGrids,
StdCtrls,Spin, ExtCtrls,Windows, Buttons, ComCtrls;
type
TAdminForm =class(TForm)
ControlSource:TDataSource;
DBControl:TTable;
DBControlId:TAutoIncField;
DBControlName:TStringField;
DBControlMark:TFloatField;
DBControlDate:TDateField;
DBControlTime:TTimeField;
Journal:TDBGrid;
DBControlTicket_num:TIntegerField;
DBControlOcenka:TFloatField;
Maxmark:TSpinEdit;
TestTime:TSpinEdit;
TimeLabel:TLabel;
MarkLabel:TLabel;
CreateTicketBtn:TBitBtn;
Bevel1:TBevel;
QuitBtn:TBitBtn;
ClearBtn:TBitBtn;
PrintBtn:TBitBtn;
Bevel2:TBevel;
Label1:TLabel;
StatusBar:TStatusBar;
procedureShowHint(Sender: TObject);
procedureDBControlCalcFields(DataSet: TDataSet);
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedure TestTimeChange(Sender:TObject);
procedureMaxmarkChange(Sender: TObject);
procedureCreateTicketBtnClick(Sender: TObject);
procedureFormShow(Sender: TObject);
procedureFormCreate(Sender: TObject);
procedureQuitBtnClick(Sender: TObject);
procedureCreateNewDBControl;
procedureClearBtnClick(Sender: TObject);
procedurePrintBtnClick(Sender: TObject);
private
CreateForm:boolean;
public
IniFile:TIniFile;
end;
var
AdminForm:TAdminForm;
implementation
uses TQDialog,PathDialog, ResultReport;
{$R *.DFM}
procedureTAdminForm.ShowHint(Sender: TObject);
begin
StatusBar.SimpleText:=Application.Hint;
end;
procedureTAdminForm.DBControlCalcFields(DataSet: TDataSet);
begin
DBControl.Fields[3].AsFloat:=DBControl.Fields[2].AsFloat * MaxMark.Value; // fields[2] — 'Mark'
end;
procedureTAdminForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IniFile.Free;
Action:=caFree;
end;
procedureTAdminForm.TestTimeChange(Sender: TObject);
begin
IniFile.WriteInteger('Options','TestTime', TestTime.Value * 60000);
end;
procedureTAdminForm.MaxmarkChange(Sender: TObject);
begin
IniFile.WriteInteger('Options','MaxMark',MaxMark.Value);
end;
procedureTAdminForm.CreateTicketBtnClick(Sender: TObject);
begin
CreateTickDlg.ShowModal;
end;
procedureTAdminForm.CreateNewDBControl;
{создает новую таблицу DBControl. изменяет состояние DBControl.Active:= False}
begin
//---------Create new local table CONTROL.DB --------------
with DBControldo
begin
Active:=False;
DatabaseName:='Common_base';
TableName:='Control';
TableType:=ttParadox;
with FieldDefsdo
begin
Clear;
Add('Id',ftAutoInc,0, False);
Add('Ticket_num',ftInteger, 0, False);
Add('Name',ftString,40, False);
Add('Mark',ftFloat,0, False);
Add('Date',ftDate,0, False);
Add('Time',ftTime,0, False);
end;
with IndexDefsdo
begin
Clear;
Add('Id','Id', [ixPrimary, ixUnique]);
end;
CreateTable;
end;
//---------end of create -------------------------
end;
procedureTAdminForm.FormShow(Sender: TObject);
Var
List:TStrings;
AliasPath:string;
begin
If CreateFormthen
begin
Session.ConfigMode:=cmAll; {Global and local aliases !!!}
try
List:=TStringList.Create;
Session.GetAliasParams('Common_base',List);// may be occurs an error
AliasPath:=List.Values['PATH'];
List.Free;
except
end;
IniFile:=TIniFile.Create(AliasPath+'\Test.INI');
TestTime.Value:=IniFile.ReadInteger('Options', 'TestTime', 600000{10 min})div 60000;
MaxMark.Value:=IniFile.ReadInteger('Options', 'MaxMark', 5);
// CreateTickDlg.MaxTicket.Value:=IniFile.ReadInteger('Options', 'MaxTicket', 1);
try
DBControl.Active:=True;
except
CreateNewDBControl;
DBControl.Active:=True;
end;
CreateForm:=False;
end;
end;
procedureTAdminForm.FormCreate(Sender: TObject);
begin
CreateForm:=True;
Application.OnHint:=ShowHint;
end;
procedureTAdminForm.QuitBtnClick(Sender: TObject);
begin
Close;
end;
procedureTAdminForm.ClearBtnClick(Sender: TObject);
begin
CreateNewDBControl;
DBControl.Active:=True;
end;
procedureTAdminForm.PrintBtnClick(Sender: TObject);
begin
ReportForm.QuickReport.Preview;
end;
end.
Текст модуля TQDialog
unit TQDialog;
interface
uses Windows,SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons,ExtCtrls, Spin, DB, DBTables, Grids, DBGrids;
type
TCreateTickDlg= class(TForm)
OKBtn:TBitBtn;
CancelBtn:TBitBtn;
Bevel1:TBevel;
QuestCount:TSpinEdit;
MaxTicket:TSpinEdit;
TickLabel:TLabel;
QuestLabel:TLabel;
DBGrid1:TDBGrid;
DBTicket:TTable;
TicketSource:TDataSource;
TemaSource:TDataSource;
DBTema:TTable;
DBQuest:TTable;
QuestSource:TDataSource;
procedureQuestCountEnter(Sender: TObject);
procedureOKBtnClick(Sender: TObject);
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedureFormShow(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
CreateTickDlg:TCreateTickDlg;
implementation
uses main;
{$R *.DFM}
procedureTCreateTickDlg.QuestCountEnter(Sender: TObject);
begin
QuestCount.MaxValue:=DBQuest.RecordCount;
IfQuestCount.MaxValue >1 then QuestCount.Increment:=1
else
begin
QuestCount.Value:=QuestCount.MaxValue;
QuestCount.Increment:=0;
end;
end;
procedureTCreateTickDlg.OKBtnClick(Sender: TObject);
Var
List,List2:TList;
i,j,n: longint;
begin
//---------Create new empty table TICKETS.DB --------------
with DBTicketdo
begin
Active:=False;
DatabaseName:='Common_base';
TableName:='Tickets';
TableType:=ttParadox;
IndexName:='many_ind';
with FieldDefsdo
begin
Clear;
Add('Ticket_id',ftAutoInc, 0, False);
Add('Ticket_num',ftInteger, 0, False);
Add('Quest_id',ftInteger, 0, False);
end;
with IndexDefsdo
begin
Clear;
Add('','Ticket_id', [ixPrimary, ixUnique]);
Add('many_ind','Ticket_num;Quest_id',[ixCaseInsensitive]);
end;
CreateTable;
end;
//---------end of create -------------------------
DBTicket.Active:=True;
DBQuest.First;
List:=TList.Create;
List2:=TList.Create;
for i:=1 to CreateTickDlg.QuestCount.Valuedo
begin
for j:=1 to CreateTickDlg.MaxTicket.Valuedo List.Add(pointer(j)); // fill list
randomize;
repeat
n:=random(List.Count-1);
DBTicket.SetKey;
DBTicket['Ticket_num']:=longint(List.Items[n]);
DBTicket['Quest_id']:=DBQuest['Quest_id'];
IfDBTicket.GotoKey then
begin
List2.Add(List.Items[n]);
List.Delete(n);
Continue;
end
else
begin
DBTicket.Append;
DBTicket['Ticket_num']:=longint(List.Items[n]);
DBTicket['Quest_id']:=DBQuest['Quest_id'];
DBTicket.Post;
DBQuest.Next;If DBQuest.EOF then DBQuest.First;
List.Delete(n);//List.Pack;
While (List2.count> 0) do
begin
List.Add(List2.Items[0]);
List2.Delete(0);
end;
end;
untilList.Count = 0;
end;
DBTicket.IndexName:='';
DBTicket.DeleteIndex('many_ind');
DBTicket.AddIndex('tick_ind','Ticket_num',[ixCaseInsensitive]);
DBTicket.Active:=False;
List.Free;
List2.Free;
AdminForm.IniFile.WriteInteger('Options','MaxTicket',MaxTicket.Value);
Application.MessageBox('Формирование билетовзавершено!','',MB_ICONINFORMATION);
end;
procedureTCreateTickDlg.FormClose(Sender: TObject;
var Action:TCloseAction);
begin
DBQuest.Active:=False;
DBTema.Active:=False;
end;
procedureTCreateTickDlg.FormShow(Sender: TObject);
begin
DBTema.Active:=True;
DBQuest.Active:=True;
end;
end.
Текст модуля ResultReport
unitResultReport;
interface
uses
Windows,Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Quickrep,StdCtrls, ExtCtrls;
type
TReportForm =class(TForm)
QuickReport:TQuickReport;
PageHeader:TQRBand;
Detail:TQRBand;
QRLabel1:TQRLabel;
TicketField:TQRDBText;
NameField:TQRDBText;
OcenkaField:TQRDBText;
DateField:TQRDBText;
ColumnHeader:TQRBand;
QRLabel2:TQRLabel;
QRLabel3:TQRLabel;
CurrentNum:TQRSysData;
QRLabel4:TQRLabel;
QRLabel5:TQRLabel;
QRLabel6:TQRLabel;
QRBand1:TQRBand;
QRLabel7:TQRLabel;
PageNum: TQRSysData;
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
ReportForm:TReportForm;
implementation
uses main;
{$R *.DFM}
end.

Приложение3
ТЕКСТ ПРОГРАММЫ TESTCLIENT
programTestClient;
uses
Forms,
Sdimain in'SDIMAIN.PAS' {ClientForm},
DlgUnit in'DlgUnit.pas' {BeginDataDlg},
PathDialog in'\$$$\ADMIN\PathDialog.pas' {PathDlg};
{$R *.RES}
begin
Application.Title:='TestClient';
Application.CreateForm(TClientForm,ClientForm);
Application.CreateForm(TBeginDataDlg,BeginDataDlg);
Application.Run;
end.
Текст модуля SdiMain
unit Sdimain;
interface
uses Windows,DBTables,DB, ExtCtrls, StdCtrls, Forms, Classes, Controls,
ComCtrls,SysUtils,Gauges, DBCtrls,Graphics;
type
TClientForm =class(TForm)
QuestList:TListBox;
Timer: TTimer;
TicketSource:TDataSource;
DBTicket:TTable;
DBTicketTicket_id:TAutoIncField;
DBTicketTicket_num:TIntegerField;
DBTicketQuest_id:TIntegerField;
AnswerSource:TDataSource;
DBAnswer:TTable;
DBAnswerOtvet_id:TAutoIncField;
DBAnswerQuest_id:TIntegerField;
DBAnswerOtvet_name:TMemoField;
DBAnswerTrued:TBooleanField;
ResultSource:TDataSource;
DBResult:TTable;
DBResultAnswer_id:TIntegerField;
DBResultTrued:TBooleanField;
MemoScroll:TScrollBox;
PrevBut:TButton;
NextBut:TButton;
ExitBut:TButton;
TestGauge:TGauge;
ControlSource:TDataSource;
DBControl:TTable;
QuestName:TDBMemo;
QuestSource:TDataSource;
DBQuest:TTable;
StatusBar:TStatusBar;
procedureShowHint(Sender: TObject);
procedureQuestListClick(Sender: TObject);
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedureFormShow(Sender: TObject);
procedureFormCreate(Sender: TObject);
procedureExitButClick(Sender: TObject);
procedurePrevButClick(Sender: TObject);
procedureNextButClick(Sender: TObject);
procedureTimerTimer(Sender: TObject);
procedureRefreshAnswers;
procedureDeleteAnswer(AOwner: TComponent;Number: integer);
procedureFormResize(Sender: TObject);
procedureMemoScrollResize(Sender: TObject);
private
x1,x2:integer;
public
CreateMainForm:boolean;
TestTime: LongInt; {времятестирования в миллисекундах }
MaxMark: LongInt; {системаоценки(балл)}
ticket:longint; {Users ticket}
StudentName:string[40];
end;
TAnswer =Class(TObject)
memo: TMemo;
check:TCheckBox;
constructorCreate(AOwner:TComponent;Height_: Integer);
procedureFree;
procedureCheckClick(Sender: TObject);
procedureMemoClick(Sender: TObject);
private
nocreate:boolean; {TRUE — if don't run the CREATE-constructor}
end;
var
ClientForm:TClientForm;
implementation
uses DlgUnit,PathDialog;
{$R *.DFM}
{----------------------------------}
procedureTClientForm.RefreshAnswers;
{Изменяет размеры областивывода ответов, содержимое ответов, число ответов
в зависимости отвыбранного вопроса.}
Var
NewAnswer:TAnswer;
i: integer;
begin
DBTicket.First;
DBTicket.MoveBy(QuestList.ItemIndex);{Go to the selected Question}
i:= 0; {индекс ДЛЯОБЪЕКТА TMemo в списке}
DBAnswer.First; {чтобы небыло глюков при повторном щелчке на вопросе}
while NOTDBAnswer.Eof do
begin
If (i+1) >MemoScroll.ComponentCount then
NewAnswer:=TAnswer.Create(MemoScroll,100); {добавление new варианта ответав список}
TMemo(MemoScroll.Components[i]).Text:=DBAnswer['Otvet_name']; {Otvet_name}
TCheckBox(MemoScroll.Components[i+1]).Checked:=DBResult['Trued'];
inc(i,2); //
DBAnswer.Next;
end;
While i
DeleteAnswer(MemoScroll,MemoScroll.ComponentCount- 2);
IfMemoScroll.ComponentCount > 0 then
begin
TMemo(MemoScroll.Components[0]).SetFocus;{Set focus on first answer.}
QuestList.SetFocus;{and tnen set focus on questions-list}
end;
ClientForm.MemoScrollResize(MemoScroll);{изменение размеров областей выводаответов}
end;
{----------------------------------}
constructorTAnswer.Create(AOwner:TComponent;Height_: Integer);
begin
NoCreate:=False;
memo:=TMemo.Create(Aowner);
with memo dobegin
Parent:=TWinControl(AOwner);
ReadOnly:=True;
TabStop:=False;
Left:= 0;
OnClick:=MemoClick;
end;
check:=TCheckBox.Create(AOwner);
With check dobegin
Parent:=TWinControl(AOwner);
Height:= 17;
Width:= 17;
TabStop:=False;
OnClick:=CheckClick;
end;
NoCreate:=True;
end;
procedureTAnswer.Free;
begin
check.Free;
memo.Free;
end;
procedureTAnswer.MemoClick(Sender: TObject);
begin
ClientForm.QuestList.SetFocus;
end;
procedureTAnswer.CheckClick(Sender: TObject);
begin
If nocreatethen begin
ClientForm.DBAnswer.First;{передвигаем указатель в DBAnswer и вместе с ним вDBResult}
ClientForm.DBAnswer.MoveBy((Check.Componentindex-1)div 2);
ClientForm.DBResult.Edit;
ClientForm.DBResult['Trued']:=Check.Checked;
ClientForm.DBResult.Post;
ClientForm.QuestList.SetFocus;
end;
end;
procedureTClientForm.DeleteAnswer(AOwner: TComponent;Number: integer);
Var
i: integer;
{удаленние из спискаобъекта NUMBER и NUMBER+1}
begin
TCheckBox(AOwner.Components[number+1]).Free;
TMemo(AOwner.Components[number]).Free;
For i:= Numberto AOwner.ComponentCount-1 do {перерисовка компонентов в ScrollBox}
IfAOwner.Components[i] is TMemo then
TMemo(AOwner.Components[i]).Top:=TMemo(AOwner.Components[i]).Top -
TMemo(AOwner.Components[i]).Height
else
TCheckBox(AOwner.Components[i]).Top:=TCheckBox(AOwner.Components[i]).Top -
TMemo(AOwner.Components[i-1]).Height;
IfAOwner.ComponentCount > 0 then
TScrollBox(AOwner).VertScrollBar.Range:=(AOwner.ComponentCount div 2)*
TMemo(AOwner.Components[0]).Height;
end;
procedureTClientForm.ShowHint(Sender: TObject);
begin
StatusBar.SimpleText:=Application.Hint;
end;
procedureTClientForm.FormShow(Sender: TObject);
begin
IfCreateMainForm then BeginDataDlg.ShowModal;
end;
procedureTClientForm.QuestListClick(Sender: TObject);
begin
RefreshAnswers;
end;
procedureTClientForm.FormClose(Sender: TObject; var Action: TCloseAction);
Var
Quest_cnt, {всеговопросов}
MyAnswerTrued, {1 — еслиответ правильный}
TruedCnt: word;{количество правильных ответов}
SumTrued:real; {относительная оценка}
S: string;
begin
{действия по получениюоценки и выводу ее на экран и в БД}
IfBeginDataDlg.ModalResult mrOk then Exit;
quest_cnt:= 0;SumTrued:= 0; MyAnswerTrued:= 0; TruedCnt:= 0;
DBTicket.First;
while notDBTicket.EOF do
begin
inc(quest_cnt);
DBAnswer.First;
while notDBAnswer.EOF do
begin
IfDBResult['Trued'] = DBAnswer['Trued'] then MyAnswerTrued:= 1
else
begin
MyAnswerTrued:= 0; {Ответна вопрос неверен.}
Break; {выход из цикла}
end;
DBAnswer.Next;
end;
DBTicket.Next;
TruedCnt:=TruedCnt + MyAnswerTrued;
end;
SumTrued:=TruedCnt / quest_cnt; {средний бал 0..1}
Str((SumTrued*ClientForm.MaxMark):5:2,S);
Application.MessageBox(PChar('Правильных ответов: '+
IntToStr(TruedCnt)+'из '+IntToStr(Quest_cnt)+
#13+'Оценка: ' + s),
'Результаттестирования',MB_ICONINFORMATION);
DBResult.Active:=False; {Close databases}
DBAnswer.Active:=False;
DBQuest.Active:=False;
DBTicket.Active:=False;
DBControl.Active:=True; {Save info of current user in CONTROL.DB}
DBControl.Append;
DBControl['Date']:=Date;
DBControl['Time']:=Time;
DBControl['Ticket_num']:=ticket;
DBControl['Mark']:=SumTrued;
DBControl['Name']:=StudentName;
DBControl.Post;
DBControl.Active:=False;
end;
procedureTClientForm.FormCreate(Sender: TObject);
begin
CreateMainForm:=True;
x1:=ClientHeight — MemoScroll.Top — MemoScroll.Height;
x2:=ClientWidth — MemoScroll.Left — MemoScroll.Width;
ClientForm.Height:=GetSystemMetrics(SM_CYMAXIMIZED) — 10;
end;
procedureTClientForm.ExitButClick(Sender: TObject);
begin
Close;
end;
procedureTClientForm.PrevButClick(Sender: TObject);
begin
QuestList.ItemIndex:=QuestList.ItemIndex — 1;
RefreshAnswers;
end;
procedureTClientForm.NextButClick(Sender: TObject);
begin
QuestList.ItemIndex:=QuestList.ItemIndex + 1;
RefreshAnswers;
end;
procedureTClientForm.TimerTimer(Sender: TObject);
begin
TestGauge.AddProgress(Timer.Interval);
TestTime:=TestTime — Timer.Interval;
IfTestGauge.PercentDone > 75 then TestGauge.BackColor:= clYellow;
If TestTime = 0 thenClose; {в OnClose д/б предусмотрен расчет оценки и запись ее в БД}
end;
procedureTClientForm.FormResize(Sender: TObject);
begin
ifClientForm.Height >= 400 then
begin
MemoScroll.Height:=ClientForm.ClientHeight — MemoScroll.Top — x1;
QuestList.Height:=ClientForm.ClientHeight — QuestList.Top — x1;
StatusBar.Top:=ClientForm.ClientHeight — StatusBar.Height;
PrevBut.Top:=StatusBar.Top — PrevBut.Height — 6; {modify buttons place}
NextBut.Top:=PrevBut.Top; ExitBut.Top:= NextBut.Top;
end
elseClientForm.Height:= 400;
IFClientForm.Width >= 440 then
begin
MemoScroll.Width:=ClientForm.ClientWidth — MemoScroll.Left — x2;
QuestName.Width:=ClientForm.ClientWidth — QuestName.Left — x2;
TestGauge.Width:=ClientForm.ClientWidth — TestGauge.Left — x2;
StatusBar.Width:=ClientForm.ClientWidth;
end
elseClientForm.Width:= 440;
end;
procedureTClientForm.MemoScrollResize(Sender: TObject);
{этот обработчиквызывается также в RefreshAnswers}
var
i,CommonHeight:integer;
begin
i:= 0;CommonHeight:= 0;
While i
begin
If i>0 thenTMemo(MemoScroll.Components[i]).Top:=
TMemo(MemoScroll.Components[i-2]).Top+
TMemo(MemoScroll.Components[i-2]).Height;
TMemo(MemoScroll.Components[i]).Width:=MemoScroll.Width — 60;
TMemo(MemoScroll.Components[i]).Height:=
Trunc((2-1/3)*Abs(TMemo(MemoScroll.Components[i]).Font.Height)*
TMemo(MemoScroll.Components[i]).Lines.Count);
TCheckBox(MemoScroll.Components[i+1]).Left:=
TMemo(MemoScroll.Components[i]).Left+ TMemo(MemoScroll.Components[i]).Width + 15;
TCheckBox(MemoScroll.Components[i+1]).Top:=
TMemo(MemoScroll.Components[i]).Top+ (TMemo(MemoScroll.Components[i]).Height-
TCheckBox(MemoScroll.Components[i+1]).Height)div 2;
CommonHeight:=CommonHeight + TMemo(MemoScroll.Components[i]).Height;
inc(i,2);
end;
MemoScroll.VertScrollBar.Range:=CommonHeight;
end;
end.
Текст модуля DlgUnit
unit DlgUnit;
interface
usesDb,Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
IniFiles,Buttons,ExtCtrls, Spin, ComCtrls;
type
TBeginDataDlg= class(TForm)
EditName:TEdit;
Label1:TLabel;
TicketEdit:TSpinEdit;
Label2:TLabel;
Bevel1:TBevel;
OkBut:TBitBtn;
QuitBut:TBitBtn;
StatusBar:TStatusBar;
procedureShowHint(Sender: TObject);
procedureOkButClick(Sender: TObject);
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedureFormShow(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
BeginDataDlg:TBeginDataDlg;
implementation
uses Sdimain,PathDialog;
{$R *.DFM}
procedureTBeginDataDlg.ShowHint(Sender: TObject);
begin
StatusBar.SimpleText:=Application.Hint;
end;
procedureTBeginDataDlg.OkButClick(Sender: TObject);
Var
i: integer;
begin
withClientForm do
begin
StudentName:=EditName.Text;
Ticket:=TicketEdit.Value;
DBTicket.Active:= True;
{Выбор номера билета.Выбранный номер билета заносим в Ticket}
DBTicket.SetRangeStart;{установка фильтра}
DBTicket['Ticket_num']:=ticket;
DBTicket.SetRangeEnd;
DBTicket['Ticket_num']:=ticket;
DBTicket.ApplyRange;
DBQuest.Active:=True;
with DBResultdo //--------- Create new local table RESULT.DB ----------
begin
Active:=False;
DatabaseName:='';
TableName:='Result';
TableType:=ttParadox;
with FieldDefsdo
begin
Clear;
Add('Answer_id',ftInteger, 0, False);
Add('Trued',ftBoolean, 0, False);
end;
with IndexDefsdo
begin
Clear;
Add('Answer_ind','Answer_id', [ixPrimary, ixUnique]);
end;
CreateTable;
end; //---------end of create -------------------------
DBAnswer.Active:=True;
DBresult.Active:=True;
i:=0; {заполнениеQuestList номерами вопросов}
While notDBTicket.EOF do
begin
inc(i);
QuestList.Items.Add(IntToStr(i));
While notDBAnswer.EOF do {Fill RESULT-table}
begin
DBResult.Append;
DBResult['Answer_id']:=DBAnswer['Otvet_id'];
DBResult['Trued']:=False;
DBResult.Post;
DBAnswer.Next;
end;
DBTicket.Next;
end;
RefreshAnswers;
WindowState:=wsNormal;
Application.OnHint:=ShowHint;
TestGauge.MaxValue:=TestTime; {Set max value of indicator }
Timer.Enabled:=True; { Activate the timer.}
CreateMainForm:=False;
end; { of withClientForm}
end;
procedureTBeginDataDlg.FormClose(Sender: TObject;
var Action:TCloseAction);
begin
If Modalresult mrOk then ClientForm.Close;
Action:=caFree;
end;
procedureTBeginDataDlg.FormShow(Sender: TObject);
Var
IniFile:TIniFile;
List:TStringList;
AliasPath:string;
begin
Application.OnHint:=ShowHint;
Session.ConfigMode:=cmAll; {Global and local aliases !!!}
try
List:=TStringList.Create;
Session.GetAliasParams('Common_base',List);// may be occurs an error
AliasPath:=List.Values['PATH'];
List.Free;
except
Application.CreateForm(TPathDlg,PathDlg);
PathDlg.ShowModal;
IfPathDlg.Modalresult = mrOk then
begin
AliasPath:=PathDlg.DirectoryList.Directory;
Session.AddStandardAlias('Common_base',AliasPath,'PARADOX');{add NEW alias if none}
Session.SaveConfigFile;
end
elseModalresult:= mrCancel;
end;
IniFile:=TIniFile.Create(AliasPath+'\Test.INI');
ClientForm.TestTime:=IniFile.ReadInteger('Options', 'TestTime', 600000{10 min});
TicketEdit.MaxValue:=IniFile.ReadInteger('Options', 'MaxTicket', 1);
IfTicketEdit.MaxValue = 1 then TicketEdit.Increment:= 0;
IniFile.Free;
end;
end.
Текст модуля PathDialog
unitPathDialog;
interface
uses Windows,SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons,ExtCtrls, FileCtrl;
type
TPathDlg =class(TForm)
OKBtn:TButton;
CancelBtn:TButton;
DirectoryList:TDirectoryListBox;
DriveBox:TDriveComboBox;
PathLabel:TEdit;
Label1:TLabel;
procedureDriveBoxChange(Sender: TObject);
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedureDirectoryListChange(Sender: TObject);
procedureFormActivate(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
PathDlg:TPathDlg;
implementation
{$R *.DFM}
procedureTPathDlg.DriveBoxChange(Sender: TObject);
begin
DirectoryList.Drive:=DriveBox.Drive;
end;
procedureTPathDlg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
procedureTPathDlg.DirectoryListChange(Sender: TObject);
begin
PathLabel.Text:=DirectoryList.Directory;
end;
procedureTPathDlg.FormActivate(Sender: TObject);
begin
PathLabel.Text:=DirectoryList.Directory;
end;
end.


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

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

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.