[ Наверх ]
[ Информация ]
[ Содержание ]
[ Плакаты ]
Контакт
kes@narod.ru

3. Конструкторская часть

3.1. Структура системы

Разработанную систему можно логически разделить на три части.

  1. WWW-сайт (World Wide Web - site), разработанный в виде ASP-приложения (ASP-Application);
  2. База данных (БД Job) под управлением Microsoft SQL Server 6.5;
  3. Программная часть, осуществляющая согласование потоков работодателей и клиентов - JobSelectServer.

Укрупнённое взаимодействие этих частей показано на рис. 3.1.

Рис. 3.1. Структура системы

Рис. 3.1. Структура системы

Рассмотрим каждую из частей проекта, а также их взаимодействие подробно.

3.2. База данных Job

База данных Job работает под управлением СУБД Microsoft SQL Server 6.5 и обеспечивает хранение всех необходимых для функционирования системы данных.

3.2.1. Инфологическая модель базы данных

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

3.2.1.1. Сущности

  1. Группа_пользователей,
  2. Пользователь,
  3. Работодатель,
  4. Кандидат,
  5. Специальность,
  6. Вакансия,
  7. Параметр,
  8. Вид_Text,
  9. Вид_Password,
  10. Вид_TextArea,
  11. Вид_Select,
  12. Вид_Radio,
  13. Вид_CheckBox,
  14. Значение_Int,
  15. Значение_String,
  16. Значение_Text,
  17. Значение_Bit,
  18. Совместимость,
  19. Счёт.

3.2.1.2. Взаимосвязи между сущностями

  1. Пользователь входит в Группу_пользователей;
  2. Работодатель является Пользователем Биржи;
  3. Кандидат является Пользователем Биржи;
  4. Кандидат обладает Специальностями;
  5. Специальность имеет родительскую Специальность;
  6. Работодатель предлагает Вакансии;
  7. Работодатель создаёт Параметры отбора кандидатов;
  8. Параметр типа "Text" имеет Вид_Text;
  9. Параметр типа "Password" имеет Вид_Password;
  10. Параметр типа "TextArea" имеет Вид_TextArea;
  11. Параметр типа "Select" имеет Вид_Select;
  12. Параметр типа "Radio" имеет Вид_Radio;
  13. Параметр типа "CheckBox" имеет Вид_CheckBox;
  14. Кандидат заполняет Значение_Int параметров типов "Select" и "Radio";
  15. Кандидат заполняет Значение_String параметров типов "Text" и "Password";
  16. Кандидат заполняет Значение_Text параметров типа "TextArea";
  17. Кандидат заполняет Значение_Bit параметров типа "CheckBox";
  18. Работодатель выбирает (связывает) Параметры, созданные администратором для использования при отборе кандидатов;
  19. С каждой Вакансией Работодатель связывает Параметры для использования при отборе кандидатов;
  20. Совместимость - степень соответствия Кандидатов и Вакансий;
  21. Работодателю предоставляется Счёт за услуги.

3.1.1.3. Атрибуты сущностей

Пометка PK рядом с атрибутом значит, что атрибут является ключевым (входит в первичный ключ (Primary Key)), а FK означает, что атрибут является внешним ключом (Foreign Key).

Табл. 3.1

СущностьАтрибуты
Группа пользователейИдентификатор группы (PK)
Название
Строка, используемая для соединения с базой данных
ПользовательИдентификатор пользователя (PK)
Дата и время регистрации
Идентификатор группы (FK)
Имя
Пароль
РаботодательИдентификатор работодателя (PK, FK)
Название фирмы
Адрес
Проезд
Телефон
E-mail
Информация о фирме в виде HTML-страницы
КандидатИдентификатор кандидата (PK, FK)
Имя
Фамилия
Отчество
Телефон
E-mail
Резюме в виде HTML-страницы
Флаг действия подбора
СпециальностьИдентификатор специальности (PK)
Название
Идентификатор родительской специальности (FK)
Идентификатор пользователя, который добавил специальность (FK)
ВакансияИдентификатор вакансии (PK)
Название
Дата и время появления
Флаг действия подбора
Идентификатор работодателя (FK)
Идентификатор специальности (FK)
Схема подбора персонала
Выражение для рейтинга
Количество вакансий
Информация
Пороговый рейтинг
Количество участников конкурса
Текст приглашения
ПараметрИдентификатор параметра (PK)
Название
Тип
Комментарии
Идентификатор пользователя, добавившего параметр (FK)
Вид_TextИдентификатор параметра (PK, FK)
Длина строки ввода
Максимально возможная длина вводимой строки
Первоначальное содержание строки
Вид_PasswordИдентификатор параметра (PK, FK)
Длина строки ввода
Максимально возможная длина вводимой строки
Первоначальное содержание строки
Вид_TextAreaИдентификатор параметра (PK, FK)
Количество строк
Количество столбцов
Первоначальное содержание
Вид_SelectИдентификатор параметра (PK, FK)
Количество элементов списка одновременно отображаемых на экране
Номер первоначально выбранного варианта
Варианты
Вид_RadioИдентификатор параметра (PK, FK)
Номер первоначально выбранного варианта
Варианты
Вид_CheckBoxИдентификатор параметра (PK, FK)
Первоначальное состояние
Значение_IntИдентификатор параметра (PK, FK)
Идентификатор пользователя (PK, FK)
Значение
Значение_StringИдентификатор параметра (PK, FK)
Идентификатор пользователя (PK, FK)
Значение
Значение_TextИдентификатор параметра (PK, FK)
Идентификатор пользователя (PK, FK)
Значение
Значение_BitИдентификатор параметра (PK, FK)
Идентификатор пользователя (PK, FK)
Значение
СовместимостьИдентификатор кандидата (PK, FK)
Идентификатор вакансии (PK, FK)
Рейтинг
Состояние
СчётИдентификатор работодателя (PK, FK)
Количество подобранных вакансий
Количество подобранных кандидатов

3.2.2. Даталогическая модель базы данных

3.2.2.1. Пользовательские типы данных

Microsoft SQL Server 6.5 позволяет добавлять в базу данных пользовательские типы данных, которые в дальнейшем можно использовать для указания типа полей таблиц также, как и встроенные типы.

Разработчиком выделены следующие часто используемые типы (см. табл. 3.2):

  1. Id - для идентификаторов,
  2. String - для строк переменной длины, не превышающих 255 символов.

Табл. 3.2

НазваниеОснован на типе
IdInteger
StringVarchar(255)

3.2.2.2. Таблицы

Сведения о таблицах, содержащихся в базе данных Job, обобщены в табл. 3.3.

Табл. 3.3

НазваниеКомментарии
1JobGroupГруппы пользователей
2JobUserИнформация обо всех пользователях Биржи
3EmployerСведения о работодателях
4ClientСведения о кандидатах
5SpecСпециальности и их классификация
6VacancyВакансии
7SchemeСхемы отбора кандидатов
8ConformСведения о соответствии кандидатов вакансиям
9StateСостояния кандидатов
10ClientSpecСведения о специальностях соискателей
11ParamПараметры отбора кандидатов
12ParamTypeТипы параметров
13ParamTextВид параметров типа "Text"
14ParamRadioВид параметров типа "Radio"
15ParamSelectВид параметров типа "Select"
16ParamCheckBoxВид параметров типа "CheckBox"
17ParamTextAreaВид параметров типа "TextArea"
18ParamPasswordВид параметров типа "Password"
19ValueIntЗначения параметров типов "Radio", "Select", "CheckBox"
20ValueBitЗначения параметров типа "CheckBox"
21ValueStringЗначения параметров типов "Text", "Password"
22ValueTextЗначения параметров типа "TextArea"
23BindParamСвязь параметров с работодателями
24VacParamПараметры, используемые при отборе кандидатов на вакансии
25AccountИнформация о подобранных вакансиях

3.2.1.3. Описания таблиц

Таблица Spec

Специальности и их классификация.

НазваниеТипКомментарии
Spec_idIdИдентификатор специальности
NameStringНазвание
Parent_specIdИдентификатор родительской специальности
User_idIdИдентификатор пользователя, добавившего специальность

Первичный ключSpec_id.
Внешний ключParent_spec ссылается на поле Spec_id таблицы Spec.
Внешний ключUser_id ссылается на поле User_id таблицы JobUser.

Таблица JobGroup

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

НазваниеТипКомментарии
Group_idTinyintИдентификатор группы
NameStringНазвание группы
ConnectionstringStringСтрока, используемая для подключения к базе данных

Первичный ключGroup_id.

Записи таблицы JobGroup

Group_idNameConnectionstring
1"Разработчик""Data Source = KES_Company Job; User Id = jobdeveloper; Password=;"
2"Администратор""Data Source = KES_Company Job; User Id = jobadmin; Password=;"
3"Работодатель""Data Source = KES_Company Job; User Id = jobemployer; Password=;"
4"Клиент""Data Source = KES_Company Job; User Id = jobclient; Password=;"

Таблица JobUser

Пользователи Биржи.

НазваниеТипКомментарии
User_idIdИдентификатор пользователя
DateDatetimeДата и время регистрации
Group_idTinyintИдентификатор группы, к которой принадлежит пользователь
LoginStringLogin
PasswordStringПароль

Первичный ключUser_id
Внешний ключGroup_id ссылается на поле Group_id таблицы Jobgroup
Уникальный индексLogin

Таблица Employer

Сведения о работодателях.

НазваниеТипКомментарии
User_idIdИдентификатор работодателя
NameStringНазвание фирмы
AddressStringАдрес
TravelTextПроезд
PhoneStringТелефон
EmailStringE-mail
InfoTextИнформация о фирме (в виде HTML-страницы)

Первичный ключUser_id
Внешний ключUser_id ссылается на поле User_id таблицы JobUser

Таблица Vacancy

Сведения о вакансиях.

НазваниеТипКомментарии
Vacancy_idIdИдентификатор вакансии
NameStringНазвание вакансии
DateDatetimeДата и время появления вакансии
FopenBitФлаг действительности вакансии (установлен, когда вакансия открыта)
Emp_idIdИдентификатор работодателя
Spec_idIdИдентификатор специальности
Scheme_idTinyintИдентификатор схемы подбора персонала
TotalCountIntКоличество вакансий
RuleTextStringПравило отбора в виде строки
RuleLexStringПравило отбора после преобразования во внутренний формат
InfoTextДополнительная информация о вакансии
RatingIntПороговое значение рейтинга для порогового отбора
CompetIntПервоначально набираемое число кандидатов для конкурсного отбора
InvitTextТекст приглашения для подошедшего кандидата

Первичный ключVacancy_id
Внешний ключEmp_id ссылается на поле User_id таблицы Employer
Внешний ключSpec_id ссылается на поле Spec_id таблицы Spec
Внешний ключScheme_id ссылается на поле Scheme_id таблицы Scheme

Таблица Scheme

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

НазваниеТипКомментарии
Scheme_idTinyintИдентификатор схемы
NameStringНазвание

Первичный ключScheme_id

Записи таблицы Scheme.

Scheme_idName
0"Нет отбора"
1"Конкурсный отбор"
2"Ручной отбор"
10"Пороговый отбор"
11"Пороговый отбор + конкурсный отбор"
12"Пороговый отбор + ручной отбор"

Таблица Param

Параметры отбора кандидатов.

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
NameStringНазвание параметра
Type_idTinyintИдентификатор типа параметра
CommentStringКомментарии
User_idIdИдентификатор пользователя, который создал параметр

Первичный ключParam_id
Внешний ключType_id ссылается на поле Type_id таблицы ParamType
Внешний ключUser_id ссылается на поле User_id таблицы JobUser

Таблица ParamType

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

НазваниеТипКомментарии
Type_idTinyintИдентификатор типа параметра
TypeStringНазвание типа параметра

Первичный ключType_id

Записи таблицы ParamType.

Type_idType
1"Text"
2"Radio"
3"Select"
4"CheckBox"
5"TextArea"
6"Password"

Таблица ParamText

Вид параметров типа "Text".

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
SizeIntДлина строки ввода
MaxLengthIntМаксимально возможная длина вводимой строки
ValueStringПервоначальное содержание строки

Первичный ключParam_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param

Таблица ParamRadio

Вид параметров типа "Radio".

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
CheckedIntНомер первоначально выбранного варианта
ValueTextВарианты, разделённые

Первичный ключParam_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param

Таблица ParamSelect

Вид параметров типа "Select".

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
SizeIntКоличество элементов списка одновременно отображаемых на экране
SelectedIntНомер первоначально выбранного варианта
OptionsTextВарианты, разделённые .

Первичный ключParam_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param

Таблица ParamCheckBox

Вид параметров типа "CheckBox".

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
CheckedBitПервоначальное состояние (Checked = 0 - , Checked = 1 - )

Первичный ключParam_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param

Таблица ParamTextArea

Вид параметров типа "TextArea".

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
RowsIntКоличество строк
ColsIntКоличество столбцов
ValueTextПервоначальное содержание

Первичный ключParam_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param

Таблица ParamPassword

Вид параметров типа "Password".

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
SizeIntДлина строки ввода
MaxLengthIntМаксимально возможная длина вводимой строки
ValueStringПервоначальное содержание строки

Первичный ключParam_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param

Таблица BindParam

Связь параметров и пользователей.

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
User_idIdИдентификатор пользователя

Первичный ключParam_id + User_id.
Внешний ключParam_id ссылается на поле Param_id таблицы Param.
Внешний ключUser_id ссылается на поле User_id таблицы JobUser.

Таблица Client

Кандидаты на вакансии.

НазваниеТипКомментарии
Client_idIdИдентификатор кандидата
NameStringИмя
SurnameStringФамилия
PatronymicStringОтчество
PhoneStringТелефон
EmailStringE-mail
InfoTextРезюме. Информация о кандидате в виде HTML-страницы.
FOpenBitФлаг действия подбора

Первичный ключClient_id
Внешний ключClient_id ссылается на поле User_id таблицы JobUser

Таблица ClientSpec

Данные о специальностях кандидатов.

НазваниеТипКомментарии
Client_idIdИдентификатор кандидата
Spec_idIdИдентификатор специальности

Первичный ключClient_id + Spec_id.
Внешний ключClient_id ссылается на поле Client_id таблицы Client.
Внешний ключSpec_id ссылается на поле Spec_id таблицы Spec.

Таблица Conform

Сведения о соответствии кандидатов вакансиям.

НазваниеТипКомментарии
Client_idIdИдентификатор кандидата
Vacancy_idIdИдентификатор вакансии
RatingIntРейтинг кандидата
State_idTinyintИдентификатор состояния кандидата

Первичный ключClient_id + Vacancy_id
Внешний ключClient_id ссылается на поле Client_id таблицы Client
Внешний ключVacancy_id ссылается на поле Vacancy_id таблицы Vacancy
Внешний ключState_id ссылается на поле State_id таблицы State

Таблица State

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

НазваниеТипКомментарии
State_idTinyintИдентификатор состояния кандидата
NameStringОписание

Первичный ключState_id

Записи таблицы State.

State_idName
1Не прошел пороговый отбор
2Не прошёл конкурсный отбор
3Не прошёл ручной отбор
4Не прошёл собеседование
10Ждёт окончания конкурса
11Ждёт окончания ручного отбора
20Приглашён на собеседование
30Взяли на работу

Иллюстрация, поясняющая состояния кандидата, приведена в приложении 9.1.

Таблица ValueInt

Значения параметров (типов "Radio", "Select") для пользователей.

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
User_idIdИдентификатор пользователя
ValueIntЗначение

Первичный ключParam_id + User_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param
Внешний ключUser_id ссылается на поле User_id таблицы JobUser

Таблица ValueBit

Значения параметров (типа "CheckBox") для пользователей.

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
User_idIdИдентификатор пользователя
ValueBitЗначение

Первичный ключParam_id + User_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param
Внешний ключUser_id ссылается на поле User_id таблицы JobUser

Таблица ValueString

Значения параметров (типов "Text", "Password") для пользователей.

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
User_idIdИдентификатор пользователя
ValueStringЗначение

Первичный ключParam_id + User_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param
Внешний ключUser_id ссылается на поле User_id таблицы JobUser

Таблица ValueText

Значения параметров (типа "TextArea") для пользователей.

НазваниеТипКомментарии
Param_idIdИдентификатор параметра
User_idIdИдентификатор пользователя
ValueTextЗначение

Первичный ключParam_id + User_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param
Внешний ключUser_id ссылается на поле User_id таблицы JobUser

Таблица VacParam

Параметры, используемые при отборе кандидатов на вакансии.

НазваниеТипКомментарии
Vac_idIdИдентификатор вакансии
Param_idIdИдентификатор параметра

Первичный ключVac_id +Param_id
Внешний ключParam_id ссылается на поле Param_id таблицы Param
Внешний ключVac_id ссылается на поле Vacancy_id таблицы Vacancy

Таблица Account

Информация о подобранных вакансиях.

НазваниеТипКомментарии
Emp_idIdИдентификатор работодателя
VacCountIntКоличество подобранных вакансий
ClientCountIntКоличество подобранных кандидатов

Внешний ключEmp_id ссылается на поле User_id таблицы Employer

3.2.3. Графическое представление даталогической модели базы данных

Рис. 3.2. Графическое представление даталогической модели базы данных

Рис. 3.2. Графическое представление даталогической модели базы данных

3.2.4. Ссылочная целостность

В качестве средства обеспечения ссылочной целостности используются как первичные (primary key) и внешние ключи (foreign key), так и уникальные индексы (unique index).

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

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

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

3.2.5. Разграничение доступа к базе данных

3.2.5.1. Пользователи

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

Табл. 3.4

LoginPasswordКомментарии
Joblogin""Используется приложением JobSelectServer
Jobemployer""Работодатели
Jobclient""Кандидаты
Jobadmin""Администратор
Jobselect""Используется при регистрации и входе в систему

3.2.5.2. Права пользователей на таблицы

Права пользователей на таблицы

Примечания:S- SELECT
I- INSERT
U- UPDATE
D- DELETE

3.3. ASP-приложение

ASP-приложение представляет собой виртуальный каталог (Virtual Directory), содержащий файл global.asa, а также набор связанных между собой asp-файлов, обеспечивающих интерфейс с пользователями сайта и реализующих часть логики сервера.

3.3.1. Файл global.asa

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

  1. при инициализации asp-приложения (функция Application_OnStart),
  2. при деинициализации asp-приложения (функция Application_OnEnd),
  3. при инициализации сессии пользователя asp-приложения (функция Session_OnStart),
  4. при деинициализации сессии пользователя asp-приложения (функция Session_OnEnd).

При помощи данных процедур на Бирже организован счётчик посещений.

3.3.2. Разграничение доступа к системе

Для получения доступа к сервису посетителю Web-сайта (клиенту Биржи) предлагается зарегистрироваться. Причём для работодателей и кандидатов предусмотрены разные процедуры регистрации. В процессе регистрации клиент получает Имя (login) и Пароль, которые будут использованы им при последующих визитах на Биржу на странице Идентификация.

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

Подсоединение клиентов Биржи к базе данных Job происходит через разных пользователей базы данных (login), обладающих различными правами доступа к базе данных (эти права заданы разработчиком Биржи). Для всех работодателей это пользователь jobemployer, а для всех кандидатов - пользователь jobclient.

3.3.3. Взаимодействие с базой данных

Рис. 3.3. Взаимодействие ASP приложения с БД

Рис. 3.3. Взаимодействие ASP приложения с БД

Для работы с базой данных написан файл sql.inc, содержащий реализации двух функций:

  1. ExecuteSQLCommand(),
  2. GetError().
Для их использования в файл asp необходимо включить инструкцию: <!--#include file="sql.inc"-->

Функция ExecuteSQLCommand(sql), исполняет SQL-команду, передаваемую ей в виде строки sql, и возвращает результат в виде множества записей Recordset. При реализации функции ExecuteSQLCommand использована технология ADO (ActiveX Data Objects).

При исполнении SQL-команды может произойти ошибка. Её код можно получить посредством вызова функции GetError() - нулевое значение указывает на нормальное завершение.

3.3.4. HTML-формы

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

Элементами форм являются:

  1. поле ввода,
  2. селекторная кнопка,
  3. список,
  4. контрольный переключатель,
  5. область текста,
  6. поле ввода пароля.

3.3.4.1. Поле ввода

Поле ввода (text-field) применяется главным образом для ввода алфавитно-цифровых данных.

Поле ввода создаётся при помощи тега <INPUT TYPE="Text"> и выглядит так:

3.3.4.2. Селекторная кнопка

Селекторные кнопки (radio button) используется для предоставления пользователю выбора одного из заранее заданного перечня вариантов. Создать селекторную кнопку можно, используя тег <INPUT TYPE="Radio">.

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

Пример группы селекторных кнопок:

Раменское
Жуковский
Москва

3.3.4.3. Список

Список (selection list) обеспечивает возможность выбора одного или нескольких элементов из определённого множества.

Для создания списка используется контейнер <SELECT></SELECT>, в котором с помощью тегов <OPTION>; задаются его элементы.

Пример списка:

3.3.4.4. Контрольный переключатель

Контрольный переключатель (CheckBox) обеспечивает возможность выбора между двумя вариантами -
включено(on)
и выключено(off).

Для создания контрольного переключателя используется тег <INPUT TYPE="CheckBox">.

3.3.4.5. Область текста

Область текста (text-area) - это элемент формы, подобный полю ввода, но с возможностью ввода нескольких строк текста. Для создания области текста используется тег <TEXTAREA>, а для определения её размеров - атрибуты ROWS и COLS.

Пример области текста:

3.3.4.6. Поле ввода пароля

Поле ввода пароля (password field) - это такое поле ввода, где вместо каждого введённого символа отображается символ звёздочки (*). Пароли используют для защиты конфиденциальной информации, которая должна быть доступна только определённым пользователям. Создать поле ввода пароля позволяет тег <INPUT TYPE="Password">.

Пример поля ввода пароля:

3.3.5. Получение информации о кандидатах

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

Табл. 3.5

Тип параметраЭлемент формыТип переменной
TextПоле вводаСтрока
RadioСелекторная кнопкаЧисло
SelectСписокЧисло
CheckBoxКонтрольный переключательЛогическая переменная
TextAreaОбласть текстаСтрока
PasswordПоле ввода пароляСтрока

3.6.6. Лексический анализ

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

Каждая лексема представляется классом Lex (файл polska.inc) и имеет тип (Type) и значение (Value). Информация о возможных типах лексем приведена в табл. 3.6.

Табл. 3.6

Тип
(поле Type)
ОписаниеЗначение
(поле Value)
1ОператорКод операции
2СтрокаСтрока
3ПеременнаяИдентификатор
4ЧислоЗначение
5Логическая константа0 - false (ложь)
-1 - true (правда)

3.3.7. Перевод выражения в обратную польскую нотацию

Перевод выражения для рейтинга в обратную польскую нотацию, также как и его лексический анализ, осуществляет функция strPolska (файл polska.inc).

Для выполнения преобразования потребуется два стека: X и Y.

Приоритеты заданы следующим образом (см. табл. 3.7).

Табл. 3.7

Код операции01234567891011121314151617
Операция"<>""==""OR""AND""NOT""<="">=""<"">""-""+""/""*""STR""VAL""("")"Фиктивная операция
Приоритет33127444455668800-1

Рис. 3.4. Алгоритм перевода выражения в обратную польскую нотацию

Рис. 3.4. Алгоритм перевода выражения в обратную польскую нотацию

Рис. 3.4. Алгоритм перевода выражения в обратную польскую нотацию

3.4. Взаимодействие ASP-приложения и приложения JobSelectServer

Взаимодействие ASP-приложения с приложением JobSelectServer ограничивается передачей запросов в направлении от ASP-приложения к приложению JobSelectServer (см. рис. 3.5).

Рис. 3.5. Передача запросов от ASP приложения к приложению JobSelectServer

Рис. 3.5. Передача запросов от ASP приложения к приложению JobSelectServer

Оба приложения работают на сервере:

  • ASP-приложение в среде Internet Information Server (IIS),
  • JobSelectServer в среде Windows NT Server.

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

Для исключения потерь запросов для каждого запроса ASP-приложение создаёт отдельный процесс JobSelectClient и передаёт ему параметры запроса.

Параметрами запроса являются:

  1. Тип запроса (Type). Выделены два типа запросов:
    • запрос на подбор вакансий для клиента (Type = 1),
    • запрос на подбор кандидатов на вакансию (Type = 2).
  2. Идентификатор (ID). Если Type=1, то передаётся идентификатор клиента, а если Type=2 - идентификатор вакансии.

Запрос типа 1 посылается в случае изменения вакансии.

Запрос типа 2 посылается в следующих случаях:

  • Добавление специальности кандидата,
  • Удаление специальности кандидата,
  • Прохождение анкетирования кандидатом,
  • Изменение параметра кандидата,
  • Разрешение подбора кандидатом.

Так как серверные скрипты ASP-приложения написаны на языке JavaScript, а этот язык предоставляет удобные средства работы с COM-объектами, представляется возможность вызова внешнего приложения (процесса) посредством технологии OLE-автоматизации (OLE-automation). С этой целью написан сервер OLE-автоматизации KesJob (файл kesjob.exe).

3.4.1. Сервер OLE-автоматизации KesJob

Сервер OLE-автоматизации (OLE-automation server) KesJob разработан на Microsoft Visual C++ с помощью MFC (Microsoft Foundation Classes) и раскрывает единственный метод Go(Type, ID), имеющий два параметра - тип запроса (Type) и идентификатор (ID), который посредством API-вызова CreateProcess создаёт процесс JobSelectClient и передаёт ему параметры запроса. Для того чтобы сервер KesJob зарегистрировался в системе (с внешним именем "KESJOB.TASK") необходимо в первый раз (самостоятельно) запустить его. Это необходимый этап, иначе контроллер автоматизации не найдёт в системе сервер автоматизации.

В данном случае ASP-приложение является контроллером OLE-автоматизации (OLE-automation controller), так как для посылки запросов оно вызывает метод Job сервера KesJob.

Таким образом, код, который посылает из JavaScript-скрипта ASP-приложения запрос на выполнение подбора кандидатов на вакансию с идентификатором VacancyID, выглядит следующим образом:

Job = new ActiveXObject("KESJOB.TASK");
Job.Go(1,VacancyID);
Job = null;

А посылка запроса на выполнение подбора вакансий для кандидата UserID выглядит так:

Job = new ActiveXObject("KESJOB.TASK");
Job.Go(2, UserID);
Job = null;

3.5. Приложение JobSelectServer

JobSelectServer (файл JobSelectServer.exe) является приложением, разработанным с использованием Microsoft Visual C++ и библиотеки MFC (Microsoft Foundation Classes).

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

  • CAboutDlg,
  • CBool,
  • CClient,
  • CClientSpecSet,
  • CConformSet,
  • CExpression,
  • CJobSelectServerApp,
  • CJobSelectServerDlg,
  • CLex,
  • CLongSet,
  • CParamSet,
  • CSelectThread,
  • CServer,
  • CServerThread,
  • CSpecSet,
  • CTask,
  • CTasks,
  • CVacancySet,
  • CValueIntSet,
  • CValueStringSet,
  • CVarValue,
  • CVarValues.

Класс CBool представляет логическое значение.

Класс CJobSelectServerDlg обеспечивает взаимодействие пользователя с главной формой приложения.

Класс CAboutDlg реализует диалог "About".

Классы ClientSpecSet, CConformSet, CLongSet, CParamSet, CSpecSet, CVacancySet, CValueIntSet, CValueStringSet, CClient организуют выборки из таблиц базы данных.

Класс CJobSelectServerApp представляет собой класс приложения.

Класс CLex представляет лексему.

Класс CServer представляет сервер и реализует его запуск и остановку.

Класс CServerThread представляет поток, который принимает заявки и помещает их в очередь.

Класс CSelectThread представляет поток, который извлекает заявки из очереди и обслуживает их.

Класс CTask представляет заявку.

Класс CTasks представляет список задач, предоставляющий эксклюзивный доступ к данным.

Класс CVarValue представляет шаблон переменной.

Класс CVarValues представляет шаблон переменных.

Класс CExpression представляет выражение. Выражение хранится в виде массива лексем.

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

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

Для уменьшения времени обслуживания запросов и, следовательно, числа процессов на сервере разработчиком в рамках процесса JobSelectServer выделены два потока:

  1. ServerThread,
  2. SelectThread.

При этом обслуживание запроса (процессом ServerThread) представляет собой формирование на его основе заявки и постановку её в очередь. Обслуживанием же заявок занимается поток SelectThread.

Взаимодействие процессов (а также потоков ServerThread и SelectThread в рамках процесса JobSelectServer) показано на рис. 3.6.

Рис. 3.6. Взаимодействие процессов

Рис. 3.6. Взаимодействие процессов

3.5.1. Очередь

Очередь имеет дисциплину обслуживания - FIFO (First In - First Out, первый пришёл, - первый вышел) и реализуется классом CTasks. Класс CTasks обеспечивает эксклюзивный доступ к очереди, то есть в одно и то же время только один поток может работать с очередью. При реализации класса CTasks использованы механизмы синхронизации Windows - события (event, класс MFC CEvent) и критические секции (critical section, класс MFC CCriticalSection).

Интерфейс класса CTasks составляют две функции:

  1. AddTask, которая добавляет заявку в очередь и
  2. GetTask, которая извлекает заявку из очереди.

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

3.5.2. Поток ServerThread

Функции потока ServerThread (класс CServerThread) заключаются в приёме заявок и постановке их в очередь.

При реализации взаимодействия процессов JobSelectClient и потока ServerThread использованы механизмы синхронизации Windows - события (event, класс MFC CEvent) и взаимные исключения (mutex, класс MFC CMutex).

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

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

Причём в этих случаях ожидание не является активным, так как для его организации используются внутренние механизмы Windows (класс MFC CSingleLock).

Передача данных - параметров запроса - происходит через средство межпроцессного взаимодействия Windows, именованную трубу (named pipe).

Постановка заявки в очередь реализуется при помощи вызова функции AddTask класса CTasks.

3.5.3. Поток SelectThread

Функции потока SelectThread (класс CSelectThread) заключаются в получении заявок из очереди и их обработке.

Получение заявок организуется при помощи вызова функции GetTask класса CTasks.

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

  1. параметры запроса (тип заявки и идентификатор),
  2. информация, хранящаяся в базе данных Job (Таблицы client, clientspec, param, spec, vacancy, vacparam, valuebit, valueint, valuestring, valuetext).

Выходными данными являются значения рейтинга (поле rating) и состояния (поле state_id) для пар {вакансия (поле vacancy_id), кандидат (поле client_id)}, совместимых (подходящих) по специальности. Выходная информация помещается в таблицу conform базы данных. Иллюстрация, поясняющая возможные состояния кандидата (поле state_id), приведена в приложении 9.1.

Взаимодействие потока SelectThread с базой данных организуется с использованием интерфейса ODBC (Open DataBase Connectivity) при помощи MFC классов CRecordset и CDatabase.

Класс CRecordset используется для выборки информации из базы, а класс CDatabase - для занесения выходной информации в базу.

Для присоединения к базе данных Job с помощью ODBC используется строка "ODBC; DSN=KES_Company Job; UID=jobselect; PWD=;".

То есть работа с базой данных ведётся "от имени" пользователя jobselect.

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

  • пустым,
  • заполненным.

Пустой шаблон переменной содержит только идентификатор переменной (param_id).

Заполненный шаблон переменной содержит:

  1. идентификатор переменной (param_id),
  2. тип переменной (type),
  3. значение переменной (value).

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

Рис. 3.7. Алгоритм функционирования потока SelectThread

Рис. 3.7. Алгоритм функционирования потока SelectThread

Так как поток SelectThread обрабатывает два типа заявок, реализованы два алгоритма подбора (по одному на каждый тип заявки), приведённые ниже.

3.1.1.1. Подбор кандидатов на вакансию

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

Рис. 3.8. Алгоритм подбора кандидатов на вакансию

Рис. 3.8. Алгоритм подбора кандидатов на вакансию

3.1.1.2. Подбор вакансий для кандидата

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

Рис. 3.9. Алгоритм подбора вакансий для кандидата

Рис. 3.9. Алгоритм подбора вакансий для кандидата

3.1.1.3. Расчёт значения выражения в обратной польской нотации

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

Рис. 3.10. Алгоритм расчёта значения выражения в обратной польской нотации

Рис. 3.10. Алгоритм расчёта значения выражения в обратной польской нотации

Используются технологии uCoz