Рефераты
 

Разработка программного обеспечения для оценки уровня знаний студентов с применением технологии "Клиент-сервер"

оличество верных ответов;

количество ошибок;

общее число пройденных билетов;

IP - адрес станции.

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

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

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

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

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

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

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

Далее клиентская сторона АСТ вновь переходит в режим ожидания сигнала-окончания тестирования, при получении которого происходит закрытие программы HLClient.

5. Мероприятия по охране труда, технике безопасности и противопожарной защите

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

все видеотерминалы соответствуют требованиям европейского стандарта TCO'99;

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

используются сетевые фильтры и источники бесперебойного питания;

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

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

В соответствии с ГОСТ 12.1.005-88 «Общие санитарно-гигиенические требования к воздуху рабочей зоны», в рабочих помещениях постоянно поддерживается постоянная температура воздуха 20-24 градусов по шкале Цельсия, относительная влажность 40-60% и скорости движения воздуха не более 0,1 м/с.

Перепад температуры по высоте рабочей зоны допускается до 3С0, по горизонтали до 5С0.

Интенсивность теплового облучения работающих от нагретых поверхностей оборудования, осветительных приборов не должна превышает 35 Вт/кв. м при облучении 50% поверхности тела, 70 Вт/кв. м - при величине облучаемой поверхности от 25% до 50% и 100 Вт/кв. м при облучении не более 25% поверхности тела.

Уровень электромагнитного излучения установлен ГОСТом 12.1.006-84 ССБТ. «Электромагнитные поля радиочастот. Допустимые уровни на рабочих местах и требования к проведению контроля».

Уровни инфракрасного и ультрафиолетового излучения установлены ГОСТом 27.016-86. «Дисплей; Трубки электронно-лучевые приемные».

Уровень шума, создаваемый вентиляционной системой не превышает допустимого уровня в 70 Дба, уровень шума от принтера HP 690C соответствует ISO 9296 и составляет 50 Дба, что не превышает 55 Дба установленных в ГОСТ 12.1.003-83. «Шум. Общие требования безопасности».

Каждый день проводится влажная уборка, что обеспечивает соответствие с требованиями СН 512-78 «Инструкция по проектированию зданий и помещений ЭВМ» запыленность воздуха в рабочем помещении, и не превышая предельно допустимую концентрацию (ПДК), равную 2 мг/куб. м, и находится в пределах нормы, специально для этой работы имеется технический персонал в количестве одного человека.

Все компьютерное оборудование, используемое в ГОУ СПО «Тульский экономический колледж» питается от сети переменного тока напряжением 220В, частотой 50Гц.

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

Хотя встроенные в компьютеры блоки питания, преобразующие напряжение электросети в низковольтное напряжение (12 В и 5 В), достаточно устойчивы и работают даже при понижении или повышении напряжения на 10-15%, однако далеко не всегда обеспечивают безопасность компьютеров и их устойчивую работу. С этой целью в ГОУ СПО «Тульский экономический колледж» на питание на компьютеры подаётся через средства защиты от недостатков электропитания подключенных по следующей схеме: стабилизатор Штиль 500 -> сетевой фильтр Pilot 1200F -> бесперебойного питания APC Back UPS CS 500.

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

Допустимые значения напряжения прикосновения и тока, протекающего через тело человека, регламентированы ГОСТом 12.038-82 и оцениваются по трем критериям электробезопасности:

1. Ощутимый ток. Не вызывает нарушения деятельности организма и допускается для длительного протекания. Сила тока для переменного тока 0,3 МА. Сила тока для постоянного тока 1 МА.

2. Отпускающий ток. Его действие на человека допустимо, если длительность протекания не превышает 30 секунд. Сила для переменного тока 6 МА. Сила для постоянного тока 15 МА.

3. Фибриляционный ток. Допускается воздействие не более 1 секунды. Сила для переменного тока 50 МА. Сила для постоянного тока 200 МА.

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

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

- ограждение токопроводящих частей;

- блокировку;

- предупредительные надписи;

- двойную изоляцию корпусов;

изоляцию токопроводящих частей;

защитное разделение питания;

защитное заземление металлических частей корпусов.

Освещенность рабочего места должна удовлетворять требованиям СНиП 11-4-79 «Строительные нормы. Нормы проектирования. Естественное и искусственное освещение». Освещение при работе с ЭВМ должно быть смешанным: естественное (боковое или прямое) и искусственное (общее). Искусственное освещение должно осуществляться с помощью люминесцентных ламп. При естественном освещении должны применяться средства солнцезащиты (светорассеивающие шторы или жалюзи). Для исключения бликов отражения на экране применяются антибликовые покрытия, специальные фильтры и другие средства предусмотренные заводом изготовителем оргтехники в целях обеспечения соответствия с европейским стандартом TCO'99.

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

В соответствии с требованиями СНиП 11-4-79 уровень освещенности на рабочем месте при искусственном освещении должен быть не менее 300 лк в кабинетах колледжа этот показатель составляет в среднем 323 лк.

Элементы рабочего места - рабочее кресло и стол должны соответствовать требованиям ГОСТа 12.2.032-78 и ГОСТа 21889-76.

Площадь помещений для работников ВЦ следует предусматривать величиной не менее 6.0 м^2 на человека. В соответствии с ВСНиП 4559-88 рабочий стол должен регулироваться по высоте в пределах 680-760 мм. Оптимальные размеры рабочей поверхности столешницы 1600x900 мм. Под столешницей рабочего стола должно быть свободное пространство для ног с размерами по высоте не менее 600 мм, по ширине 500 мм, по глубине 650 мм. На поверхности рабочего стола для документов необходимо предусмотреть размещение специальной подставки, расстояние которой от глаз должно быть аналогичным расстоянию от глаз до клавиатуры, что позволяет снизить зрительное утомление.

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

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

Возможность регулировки кресла по высоте и углу наклона. Высота кресла должна легко регулироваться в пределах от 40 до 52 см (считается расстояние от пола до сиденья). Если рост выше или ниже среднего, может потребоваться кресло с большим диапазоном регулировки. Необходимо отрегулировать кресло таким образом, чтобы рабочая поверхность или полка для клавиатуры были на уровне локтя, ступни ног полностью стояли на полу, а колени согнуты и расположены немного ниже бедер. В идеальном случае сиденье кресла должно наклоняться как вперед (минимум на 5 градусов), так и назад (минимум на 10 градусов). Если кресло имеет регулируемое сиденье, необходимо наклонить его немного вперед. Это перенесет нагрузку с позвоночника на бедра и ступни, уменьшив нагрузку на спину.

Изогнутый край сиденья. Передняя часть сиденья должна быть изогнута и иметь мягкие края.

Регулируемая по высоте и наклону спинка. Очень важно, чтобы спинка плотно прилегала к нижней части спины (пояснице).

Легко вращающееся основание, которое позволяет свободно поворачиваться в обе стороны.

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

На рабочем месте необходимо предусматривать подставку для ног.

В соответствии с эргономическими требованиями, установленными ГОСТом 21829-76 ВДТ должен отвечать следующим требованиям:

яркость свечения экрана не менее 100 кд/м2;

минимальный размер светящейся точки - не более 0.4 мм;

контрастность изображения знака - не менее 0.8;

экран должен иметь антибликовое покрытие.

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

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

короткое замыкание;

повышенная температура окружающих предметов;

неисправное электрооборудование или неправильная его эксплуатация.

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

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

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

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

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

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

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

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

Противопожарные меры ГОУ СПО «Тульский экономический колледж» заключаются в следующем:

в коридорах висят планы эвакуации в случае пожара;

имеется пожарный кран в коридорах на каждом этаже и огнетушители типа ОХВП-10 в каждом кабинете.

6. Экономическая часть

6.1 Расчет себестоимости программного продукта

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

Исходные данные для расчёта себестоимости программного продукта приведены в таблице 1.

Таблица 1. Исходные данные

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

Значение

Количество форм входной информации

Из них:

переменной

нормативно-справочная

банка данных

3

2

0

1

Количество разновидностей форм выходной информации

1

Степень новизны задачи

Б

Сложность алгоритма

1

Вид используемой информации

ПИ

Сложность контроля:

входной информации

выходной информации

12

22

Язык программирования

Borland Delphi 6.0

Вид обработки

Режим реального времени (РВ)

Алгоритм расчёта себестоимости программного продукта:

анализ исходных данных;

расчёт трудоёмкости разработки программного продукта;

расчёт стоимости машинного часа;

расчёт стоимости программного продукта;

Расчёт трудоёмкости разработки программного продукта по стадиям представлен в Таблице 2.

Таблица 2. Трудоёмкость разработки по стадиям

Стадия разработки проекта

Затраты времени

Поправочный коэффициент

Затраты времени с учётом поправочного коэффициента

Значение

Значение

1

2

3

4

1. Разработка технического задания

1.1. Затраты времени разработчика постановки задачи

15

0,65

9,5

1.2. Затраты времени разработчика программного обеспечения

15

0,35

5,25

2. Разработка эскизного проекта

2.1. Затраты времени разработчика постановки задачи

34

0,7

23,8

2.2. Затраты времени разработчика программного обеспечения

34

0,3

10,2

3. Разработка технического проекта

3.1. Затраты времени разработчика постановки задачи

9

1,827

16,443

3.2. Затраты времени разработчика программного обеспечения

5

1,827

9,135

4. Разработка рабочего проекта

4.1. Затраты времени разработчика постановки задачи

3

3,6936

11,0808

4.2. Затраты времени разработчика программного обеспечения

27

3,6936

99,7272

5. Внедрение

5.1. Затраты времени разработчика постановки задачи

5

1,39

6,95

5.2. Затраты времени разработчика программного обеспечения

5

1,39

6,95

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

Таким образом, затраты времени на отладку и внедрение составляют 49 человеко-дней или 392 часов.

6.1.1 Расчёт стоимости одного машинного часа.

Стоимость одного машинного часа определяется по формуле

, где (7)

Эксп - эксплуатационные годовые затраты (в рублях);

Тф - количество часов, отработанных всеми машинами в год (час).

Эксплуатационные годовые затраты включают в себя:

1 Годовая амортизация оборудования (Аоб), формула 8;

2 Годовые затраты на ремонт оборудования (Роб), формула 9;

3 Расходы на электроэнергию (Зэл), формула 10;

4 Прочие расходы (Зпр), формула 14.

1. Годовая амортизация оборудования определяется:

, где (8)

Косн - коэффициент амортизации основного оборудования (в процентах);

Сосн - стоимость основного оборудования (в рублях);

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

Свсп - стоимость вспомогательного оборудования (в рублях).

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

руб.

2. Годовые затраты на текущий ремонт составляют 5% от общей стоимости используемого оборудования.

, где (9)

Собщ - общая стоимость оборудования (в рублях).

руб.

3. Затраты на электроэнергию складываются из расходов на освещение Вос (формула 10) и расходов на производственное потребление электроэнергии Вэ (формула 11).

Зэлосэ, где (10)

Вос - расходы на освещение (в рублях);

Вэ - расходы на производственное потребление электроэнергии (в рублях).

, где (11)

S - площадь помещения (в квадратных метрах);

Кэ - усреднённый расход энергии, для освещения одного квадратного метра площади помещения в год (кВт на квадратный метр);

Стар - тариф (в рублях).

руб.

, где (12)

Нуст - мощность одного компьютера (кВт);

Н - количество компьютеров (штук);

К - коэффициент учитывающий потери в сети;

Стар - тариф (в рублях);

Ф - годовой фонд времени работы оборудования рассчитывается по формуле:

, где (13)

Нг - число дней в году;

Нвых - число выходных дней в году;

Нпр - число праздничных дней в году;

Ксм - коэффициент сменности;

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

Кзаг - коэффициент загрузки оборудования;

Крем - коэффициент, учитывающий потери времени на ремонт оборудования.

часа.

Тогда расходы на производственное потребление электроэнергии (по формуле 12) равны руб.

Затраты на электроэнергию (по формуле 10) равны руб.

4. Прочие расходы составляют 5% от суммы расходов по предыдущим пунктам.

, где (14)

Аоб - сумма годовой амортизации (в рублях);

Робщ - годовые затраты на ремонт (в рублях);

Э - расходы на электроэнергию (в рублях).

руб.

Тогда эксплуатационные годовые расходы составляют:

, где (15)

Аоб - сумма годовой амортизации (в рублях);

Робщ - годовые затраты на ремонт (в рублях);

Э - расходы на электроэнергию (в рублях);

Зпр - прочие расходы (в рублях).

руб.

Количество часов, отработанных всеми машинами в год равно:

, где (16)

Н - количество компьютеров (в штуках);

Ф - годовой фонд времени работы оборудования (в часах).

часов

Тогда стоимость одного машинного часа (по формуле 7) равна:

руб.

6.1.2 Расчёт стоимости программного продукта.

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

, где (17)

Тдн - затраты времени на разработку (чел.-дней);

Змес - среднемесячная зарплата (в рублях);

Ндн - количество рабочих дней в месяце (дни);

Тмаш - затраты времени на отладку и внедрение (в часах);

См.ч. - стоимость одного машинного часа (в рублях).

руб.

Заключение

В данном дипломном проекте представлена «Автоматизированная система контроля знаний на основе архитектуры клиент-сервер», реализованная в среде программирования Borland Delphi 6.0.

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

· стандартная строка меню;

· кнопки - для активизации функций системы;

· сопроводительные сообщения.

Для повышения надежности хранения информации предусмотрены программные средства защиты информации:

· резервное сохранение базы теста;

Наличие встроенной контекстной помощи позволяет упростить использование программы.

Дипломный проект был выполнен в заданный срок.

Приложение 1

Листинг кода серверной части программы

program HLServer;

uses

Forms,

BaseUnit in 'BaseUnit.pas' {MainForm},

QBaseWork in 'QBaseWork.pas',

UBaseWork in 'UBaseWork.pas';

{$R *.res}

begin

Application. Initialize;

Application. CreateForm (TServerForm, ServerForm);

Application. Run;

end.

unit BaseUnit;

interface

uses

QBaseWork, UBaseWork, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ScktComp, Grids, StdCtrls, ExtCtrls, Menus, CommCtrl, ComCtrls,

IniFiles, WinSock, ComObj, OleServer, Word97, ShellCtrls, Buttons, Word2000;

const

NM_Register1 = 6; // прием списка групп

NM_Register2 = 7; // запрос на список студентов

NM_RegisterGetWorks = 66; // запрос / ответ 'список предметов'

NM_RegisterGetTeachers = 77; // запрос / ответ 'список преподователей'

NM_RegisterOK = 8; // клиент зарегистрирован

NM_Service = 31; // прием сервисной информации

NM_TestEvent = 55; // событие по ходу тестирования

NM_FileOperation = 10; // сетевая операция с файлами

NM_EndOfTest = 33; // окончание тестирования

NM_KickFromServer = 44; // отключение от сервера администратором

NM_OutOfTime = 50; // отключение по истечении времени

NM_DataError = 54; // проблема с БД

NM_Wait = 61;

type

PCustomWinSocket=TCustomWinSocket;

Questions=record // Структура вопроса

Passed:boolean; // пройден (да/нет)

Style:byte; // стиль вопроса {radio, check, memo}

UserAnswer: word; // ответ пользователя

TrueAnswer: word; // верный ответ

end;

PathID=record

WorkID:byte;

TeacherID:byte;

end;

Peoples=record // структура 'Пользователь'

SocketHandle: Integer; // дескриптор соединения

Ip:string[15]; //IP адрес

Num:byte; // номер клиента

Registered:boolean; // прошел регистрацию (да/нет)

TestingAbortedByTime:boolean;

Group:string[8]; // группа

Name:string[20]; // имя

Teacher:string[40]; // преподаватель

WorkName:string[40]; // наим. дисциплины

WorkPath:string[255]; // рабочая директория пользователя

UserWorkPathID: PathID; // идентификаторы дисциплины и преподавателя

ImageType:string[3]; // тип файла вопросов {зарезервировано}

QuestCount:byte; // количество вопросов

OpenQuest:byte; // Ссылка на билет из массива Questions

 // для дальнейшего

TimeLater:TTime; // потрачено времени

SumTime:TTime; // общий бюджет бремени

PassedCount:byte; // пройдено вопросов

True_:byte; // верных ответов

False_:byte; // неверных ответов

Mark:byte; // оценка

PassTest:boolean; // тест пройден (да/нет)

Questions:array [1..255] of Questions; // массив пройденных вопросов

end;

type

TServerForm = class(TForm)

ServerSocket1: TServerSocket;

PageControl1: TPageControl;

TabSheet1: TTabSheet;

ComboBox1: TComboBox;

ListBox1: TListBox;

Label2: TLabel;

Label3: TLabel;

Timer1: TTimer;

Label4: TLabel;

Label5: TLabel;

TabSheet4: TTabSheet;

ConnectionCount: TLabel;

Timer2: TTimer;

TabSheet8: TTabSheet;

Panel3: TPanel;

Button3: TButton;

Button4: TButton;

Image1: TImage;

RadioGroup1: TRadioGroup;

ShellTreeView1: TShellTreeView;

ShellListView1: TShellListView;

ComboBox2: TComboBox;

Bevel8: TBevel;

Label1: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label16: TLabel;

Label10: TLabel;

Label17: TLabel;

Label18: TLabel;

Bevel1: TBevel;

Bevel4: TBevel;

Bevel5: TBevel;

Bevel6: TBevel;

Bevel7: TBevel;

Bevel9: TBevel;

Bevel13: TBevel;

Bevel10: TBevel;

Bevel11: TBevel;

Bevel12: TBevel;

Bevel14: TBevel;

Bevel15: TBevel;

Bevel16: TBevel;

Bevel17: TBevel;

Bevel18: TBevel;

Bevel19: TBevel;

Bevel20: TBevel;

WordDocument1: TWordDocument;

SpeedButton1: TSpeedButton;

PageControl2: TPageControl;

TabSheet3: TTabSheet;

TabSheet5: TTabSheet;

StringGrid1: HLringGrid;

StringGrid2: HLringGrid;

TabSheet6: TTabSheet;

Memo1: TMemo;

Button7: TButton;

Button8: TButton;

SaveDialog1: TSaveDialog;

Panel2: TPanel;

Label29: TLabel;

Label30: TLabel;

Label31: TLabel;

Label32: TLabel;

TabSheet7: TTabSheet;

ReportGrid: HLringGrid;

Button1: TButton;

procedure ServerSocket1ClientConnect (Sender: TObject;

Socket: TCustomWinSocket);

procedure FormCreate (Sender: TObject);

procedure FormDestroy (Sender: TObject);

procedure ServerSocket1ClientRead (Sender: TObject;

Socket: TCustomWinSocket);

procedure ComboBox1Change (Sender: TObject);

procedure Timer1Timer (Sender: TObject);

procedure ServerSocket1ClientDisconnect (Sender: TObject;

Socket: TCustomWinSocket);

procedure Timer2Timer (Sender: TObject);

procedure StringGrid1DblClick (Sender: TObject);

procedure Button3Click (Sender: TObject);

procedure ShellListView1Change (Sender: TObject; Item: TListItem;

Change: TItemChange);

procedure ShellListView1DblClick (Sender: TObject);

procedure Image1Click (Sender: TObject);

procedure ShellTreeView1Enter (Sender: TObject);

procedure ServerSocket1ClientError (Sender: TObject;

Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;

var ErrorCode: Integer);

procedure Button1Click (Sender: TObject);

procedure SpeedButton1Click (Sender: TObject);

procedure StringGrid1SelectCell (Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure Button7Click (Sender: TObject);

procedure Button8Click (Sender: TObject);

private

function DecodeNumToSocketNum (StationNum: byte): byte;

procedure SendQuestion (ForStation: byte; TheFile: String; QuesHLyle:byte; TrueAnswer: Word);

procedure TestEvent (StationNum: byte; Socket_:PCustomWinSocket);

procedure SendFileMessage (var Message: TMessage); message WM_USER;

procedure LogMessage (var Message: TMessage); message WM_USER+2;

procedure FillReportTable;

procedure CreateReport;

procedure TableClear (Table:HLringGrid);

procedure ReFillTable;

procedure CriticalClientDisconnect (Ip, Name, Group, WorkName,

TeacherName: String; TrueAnsw, FalseAnsw: byte; TimeLater: TTime);

procedure TimeRefresh;

procedure ProblemWithData (From_:PCustomWinSocket; TxtMessage: string);

procedure AddLogMessage (Message_: string);

procedure DisconnectComboBoxUpdate;

procedure TimeOUTTesting (StationNum: byte);

 // function DecodeSocketToClientNum (Socket_: THandle): byte;

end;

var

ServerForm: TServerForm;

FOptions:TIniFile;

NetworkErrors:word;

RootPath:string;

DataSetForReport:array [0..44] of Peoples;

CurrenHLation:byte;

GroupList: String;

RegisteredClients:byte;

PassedTestCount:byte;

ConnectedSumm:byte;

 // TimeForPassTest:TTime;

SelectedRow:integer;

CurrentQuestFile:string;

CurrentQuestionNum:integer;

DoAction:boolean;

QUESTIONBASE:TQuestDB;

USERSBASE:TUsersDB;

SecCounter:byte;

Processing:boolean;

implementation

{$R *.dfm}

procedure TServerForm. SendQuestion (ForStation:byte; TheFile: String; QuesHLyle: Byte; TrueAnswer: Word); // Отправка вопроса

var FileStream:TMemoryStream; // Файловый поток

Command:byte; // Команда

procedure LoadFileForSend (const FileName: string); // Локальная процедура подготовки

var Stream: HLream; // файлового потока

Count: Int64; // размер файла данных

MakePointer:DWORD; // искусственный указатель

CurrSize: Int64; // размер файлового потока

FNameLen:byte; // длина имени файла (для корректного распознавания на стороне клиента)

begin

Stream:= TFileStream. Create (FileName, fmOpenRead or fmShareDenyWrite); // создаем поток

try

Count:= Stream. Size;

Stream. Position:=0;

 // далее переносим информацию в поток

FileStream. WriteBuffer (Count, SizeOf(Int64)); // размер файла данных

FNameLen:=Length(FileName);

FileStream. WriteBuffer (FNameLen, 1); // длина имени файла

FileStream. WriteBuffer (Pointer(FileName)^, FNameLen); // имя файла

FileStream. Position:=0;

CurrSize:=FileStream. Size;

FileStream. SetSize (Count+CurrSize); // расширяем поток (в смысле размера)

MakePointer:=DWORD (FileStream. Memory)+CurrSize;

if Count<>0 then Stream. ReadBuffer (Pointer(MakePointer)^, Count); // переписываем данные из потока в поток

 // с использованием указателя на память

finally

Stream. Free; // освобождаем промежуточный поток

end;

end;

begin

try

Command:=NM_FileOperation;

FileStream:=TMemoryStream. Create;

FileStream. WriteBuffer (Command, 1);

FileStream. WriteBuffer (TrueAnswer, 2);

FileStream. WriteBuffer (QuesHLyle, 1);

LoadFileForSend(TheFile);

FileStream. Position:=0;

ServerSocket1. Socket. Connections[ForStation].SendStream(FileStream); // отправка потока

except

FileStream. Free;

end

end;

 // очищать неверный дисконнект

procedure TServerForm. SendFileMessage (var Message: TMessage); // внутреннее событие отправка файла

var

DataStream:TMemoryStream;

Data:byte;

StationNum:byte;

PSock:TCustomWinSocket;

begin

StationNum:=Message.WParam;

if DataSetForReport[StationNum].PassedCount=0 then

begin

DataStream:=TMemoryStream. Create; // создаем поток

Data:=NM_Service; // код команды

DataStream. WriteBuffer (Data, 1);

Data:=DataSetForReport[StationNum].QuestCount; // количество вопросов

DataStream. WriteBuffer (Data, 1);

DataStream. WriteBuffer (DataSetForReport[StationNum].SumTime, SizeOf (DataSetForReport[StationNum].SumTime)); // время на тестирование

DataStream. Position:=0;

ServerSocket1. Socket. Connections [DecodeNumToSocketNum(StationNum)].SendStream(DataStream);

 // отправка потока

sleep(1); // задержка 1ms

end;

PSock:=ServerSocket1. Socket. Connections [DecodeNumToSocketNum(StationNum)];

TestEvent (StationNum,@PSock); // генерация события связанного с тестированием

Страницы: 1, 2, 3, 4


© 2010 BANKS OF РЕФЕРАТ