- •1. Специальная часть 6
- •2. Технологическая часть. Особенности разработки программ на скриптовом языке Perl с использованием интерфейса cgi 60
- •3. Организационно-экономическая часть. Особенности сегментации рынка программного продукта 76
- •4. Производственная и экологическая безопасность. Организация рабочего места программиста и пользователя эвм 88
- •Введение
- •1. Специальная часть
- •Введение
- •1.1. Анализ системы орокс
- •1.1.2. Состав индивидуального учебного плана пользователя
- •1.1.1. Организация обучения на базе системы орокс
- •1.1.3. Процесс взаимодействия обучаемого с учебным заведением
- •1.1.4. Анализ существующих функций администрирования процесса обучения
- •1.1.5. Постановка задачи
- •1.1.5.1. Требования к информационной и программной совместимости
- •1.1.5.2. Основные элементы интерфейса, предоставляемые технологией www
- •1.2. Проектирование подсистемы статистического учёта успеваемости студентов
- •1.2.1. Язык моделирования, используемый при проектировании подсистемы
- •1.2.2. Разработка общей структурной схемы подсистемы.
- •1.2.3. Структура данных, используемых подсистемой
- •1.2.4. Проектирование и реализация компонентов подсистемы
- •1.2.4.1. Учебная карточка студента
- •1.2.4.2. Передача работ преподавателю
- •1.2.4.3. Текущая успеваемость
- •1.2.4.4. Статистика по студентам
- •1.3. Особенности реализации подсистемы
- •1.3.1. Взаимодействие с базой данных
- •1.3.2. Передача значений между формами
- •1.3.3. Особенности, связанные с подготовкой отчётов для печати
- •1.3.4. Сортировка массивов
- •1.4. Методика испытаний
- •2. Технологическая часть. Особенности разработки программ на скриптовом языке Perl с использованием интерфейса cgi
- •Введение
- •2.1. Интерфейс cgi. Вопросы взаимодействия внешних прикладных программ с информационным сервером http
- •2.1.1. Введение в технологию www
- •2.1.2. Common Gateway Interface как средство расширения возможностей World Wide Web технологии
- •2.2. Особенности языка Perl
- •2.2.1. История создания языка
- •2.2.2. Синтаксис языка
- •2.3. Особенности отладки cgi-программ
- •2.2.1. Ошибки в Perl-программе
- •2.2.2. Отладка шаблонов
- •2.2.3. Использование ModPerl
- •2.2.4. Ошибки при настройке www-сервера
- •2.2.5. Ошибки при выполнении sql-выражений
- •2.4. Диаграммы uml, используемые при проектировании подсистемы
- •2.4.1. Введение
- •2.4.2. Диаграммы вариантов использования
- •2.4.3. Диаграммы деятельности
- •2.4.4. Диаграммы последовательностей
- •3. Организационно-экономическая часть. Особенности сегментации рынка программного продукта
- •Введение
- •3.1. Принципы сегментации с учётом специфики продукта
- •3.2. Методика расчёта сегментации рынка
- •3.3. Поиск сегментов рынка для подсистемы статистического учёта успеваемости студентов
- •3.5. Оценка затрат на создание программного продукта и определение точки безубыточности
- •3.6. Вывод
- •4. Производственная и экологическая безопасность. Организация рабочего места программиста и пользователя эвм
- •Введение
- •4.1. Вредные факторы на рабочем месте программиста и пользователя эвм
- •Излучения экрана монитора.
- •Физические перегрузки (статические);
- •4.1.1. Излучения экрана монитора
- •4.1.2. Микроклимат помещения
- •4.1.3. Требования к уровням шума
- •4.1.4. Психофизиологические факторы
- •4.1.4.1. Физические перегрузки (статические)
- •4.1.4.2. Монотонность труда
- •4.1.4.3. Описание зрительной работы оператора
- •Заключение
- •Список литературы
- •Приложения Фрагмент текста программы
1.3.3. Особенности, связанные с подготовкой отчётов для печати
При подготовке документа для печати необходимо открыть новое окно Интернет-браузера и отобразить содержимое документа.
Для этих целей можно воспользоваться временными файлами, куда записывается HTML-документ и затем открывается средствами языка JavaScript. Но в таком случае требуется обеспечить уникальность имён файлов при каждом вызове приложения и удаление ненужных временных файлов.
Для устранения этих недостатков был выбран другой способ. При нажатии на кнопку «Создать документ» заполненная форма отправляется на сервер, где в создаваемый HTML-документ записывается функция window.open() языка JavaScript, исполняемая при загрузке пользователем HTML-документа. Эта функция инициирует создание нового окна, в котором производится вызов того же приложения с передачей ему всех необходимых значений с помощью метода GET в виде «имя=значение&имя2=значение2...»
Поскольку передача значений с помощью метода GET происходит через URL документа, то во избежание проблем с пониманием символов кириллицы некоторыми типами Интернет-браузеров, необходимо обеспечить преобразование всех передаваемых значений, содержащих русские буквы к виду, понимаемому всеми браузерами, т.е. «%»+ «шестнадцатеричный код символа».
Это осуществляется с использованием шаблонов и функции unpack языка Perl.
Ниже приведён фрагмент кода, в котором осуществляется такое преобразование имени учебной группы $group и производится вызов функции open языка JavaScript для открытия нового окна с передачей туда всех необходимых значений:
$group=~s{(.|\n)}{'%'.unpack('H2',$1)}eg;
t_print qq(
<SCRIPT language=\"JavaScript\">
<!--
var aWinObj;
aWinObj = window.open('$CGIname?hv=$forms::hv&$str&show_nv=$FORM{show_nv}&short_form=$FORM{short_form}&group_by=$FORM{group_by}&s_plan=$s_plan&selected=$FORM{selected}&gr_plans=$FORM{gr_plans}&group=$group&zaversh=$FORM{zaversh}&plans=$FORM{plans}&selected=$FORM{selected}&diss=$diss&tests=$tests&inf=$in','Result',"toolbar=yes,directories=0,status=no,menubar=yes,scrollbars=yes,resizable=yes,copyhistory=0");
// -->
</SCRIPT>);
}
1.3.4. Сортировка массивов
При отображении результатов на экране в виде таблицы и создании отчётов часто возникала необходимость сортировки выводимых значений по какому-либо столбцу таблицы. Т.е. фактически необходимо было переставить элементы всех массивов в соответствии с перестановкой элементов в сортируемом массиве. Поскольку массивов с данными, которые необходимо отразить на экране может быть несколько, и количество элементов массива довольно большое (количество элементов одинаково во всех массивах), требовалось максимально ускорить данную процедуру.
Эта задача решалась следующим образом:
Создавался новый массив элементов, содержащий элементы от нуля до количества элементов сортируемого массива.
Производилась сортировка элементов массива с помощью функции быстрой сортировки sort() языка Perl, причём результаты сортировки записывались в созданный на предыдущем шаге массив: индексы массива располагались в соответствии с расположением элементов в отсортированном массиве.
При выводе результатов на экран обращение ко всем элементам массивов, выводимых на экран, осуществлялось с использованием отсортированного массива индексов.
Далее приведён фрагмент программы, в котором приведена сортировка массивов @studs, @groups и @rs_dates в соответствии с выбором пользователя ($FORM{'sort'}) с использованием массива индексов и вывод отсортированных элементов на экран:
my @ind=(); # Это массив индексов
for ($i=0; $i<scalar(@studs); $i++)
{
push(@ind,$i);
}
if ($FORM{'sort'} eq 'student') # Если сортируем по ФИО студента
{
@ind=sort{$studs[$a] cmp $studs[$b]}@ind;
}
elsif ($FORM{'sort'} eq 'group') # Если сортируем по уч. группе
{
@ind=sort{$groups[$a] cmp $groups[$b]}@ind;
}
elsif ($FORM{'sort'} eq 'rs_date') # Если сортируем по Дате
{
@ind=sort
{
cmp_dates(str_to_date($rs_dates[$b]), str_to_date($rs_dates[$a]))
}@ind;
}
# Вывод на экран
for ($i=0; $i<scalar(@studs); $i++)
{
t_print qq(
Студент: $studs[$ind[$i]], Группа: $groups[$ind[$i]], Дата: $rs_dates[$ind[$i]]
);
}
