3. Проектирование интерфейса.
Определение групп пользователей программы.
Пользователями программы будут клиенты биржи труда. Очевидно, далеко не все они обладают достаточной компьютерной грамотностью, причем это относится как к ищущим работу, так и к работодателям. Поэтому интерфейс должен быть предельно простым и интуитивным.
Использование программы в терминале биржи требует возможности управления программой без использования мыши. Это так же накладывает большие ограничения на интерфейс программы.
Разработка диалога.
Вышеуказанные ограничения приводят к следующему решению:
Интерфейс в целом должен представлять из себя «мастер» (wizard), наиболее точно отражающий поиск работы как последовательность шагов
заполнение анкеты - сдача анкеты - получение сведений о подходящих вакансиях
Ввод и назначение пароля/ID не нарушает этой системы.
Шаг “заполнение анкеты” наиболее естественно представить в виде формы–шаблона стандартного резюме.
В случае поиска рабочей силы эта система будет так же удобна.
Описание диалога.
«Выбор режима работы»
«Подбор вакансий»
После выбора режима работы программы появляется приглашение к вводу ID:
Если ID введен (корректный или нет), клиенту предлагается ввести пароль.
Если ID и пароль корректны, пользователь попадает на шаг поиска вакансий (см. ниже).
Если пароль введен неверно, или задан некорректный ID, выдается сообщение:
После этого пользователь может снова попытаться снова ввести ID и пароль, либо оставить поле ID пустым и начать заполнять анкету.
Первая «страница» анкеты – персональные данные.
Вторая «страница» – профессиональные навыки.
Последняя страница – поиск подходящих вакансий.
«Подбор резюме»
Работа с программой начинается с приглашения к вводу ID:
Если ID введен (корректный или нет), клиенту предлагается ввести пароль (см. в «поиске работы»)
Если ID и пароль корректны, пользователь попадает на шаг поиска сотрудников (см. ниже).
Если пароль введен неверно, или задан некорректный ID, выдается сообщение (см. в «поиске работы»)
После этого пользователь может снова попытаться снова ввести ID и пароль, либо оставить поле IDа пустым и начать заполнять анкету.
Первая «страница» анкеты – реквизиты фирмы-работодателя.
Вторая «страница» – предоставляемые вакансии.
Последняя страница – результат поиска подходящих сотрудников.
Модель качества диалога
При оценивании модели качества диалога использовались следующие факторы качества:
простота освоения и запоминания операций системы:
Время, требуемое для освоения системы: при минимальных навыках работы с компьютером 15-20 мин. Для более опытных пользователей интерфейс интуитивно понятен.
Сохранение полученных навыков: навыки не теряются, алгоритм поиска предельно прост и хорошо запоминается. Количество различных окон – минимально.
Такие характеристики достигаются путем создания предельно простого в освоении интерфейса: Все шаблоны имеют стандартный набор интерфейсных объектов операционной системы. Все кнопки придерживаются одной системы наименования (реализовано соотвествие и наименованиями ОС)
быстрота достижения целей при использовании системы
Скорость: интуитивно понятный интерфейс позволяет за минимальное время провести весь цикл поиска вакансий (резюме).
субъективная удовлетворенность системой
По оценкам авторов, тестеров и пользователей программы удовлетворенность при работе с системой оценивается на 8 баллов по 10 бальной шкале.
Оценка диалога.
Естественный
Язык программы: русский, родной язык пользователей программы.
Предельно простой. Будучи спроектирован в расчете на пользователя минимальной подготовки, позволяет эффективно работать с программой широкому кругу потребителей.
Логически последовательный
Во всех частях программы используется одинаковое представление данных, однотипный интерфейс и одна и та же терминология, последовательность форм отражает естественный порядок общения с биржей труда.
Краткий
Использованные интерфейсные средства минимальны и интуитивно понятны без потери функциональности.
Хорошая поддержка пользователя
Все формы для заполнения снабжены подсказками.
Описание физической модели программы.
Иерархия классов программы
CObject
CCmdTarget
CWnd
CPropertySheet
WorkerWizard Поиск работы
VacancyWizard Поиск рабочей силы
CDialog
CPropertyPage
CID Страницы
CResume1 wizard’а
CResume2 «Поиск работы»
CResume3
CID2 Страницы
CVacancy1 wizard’а
CVacancy2 «Поиск рабочей силы»
CVacancy3
CAddLang Добавление языков
CAddProf Добавление профессий
CIDPass Ввод пароля
CLangList Список языковых знаний
CProfList Список проф. навыков
CVacaList Список вакансий
CLangElem Элементы
CProfElem соответствующих
CVacaElem списков
CFirm Данные сотрудника
CPerson Данные фирмы
Спецификация классов.
#ifndef _Super_Strucs_H_
#define _Super_Strucs_H_
#include "stdafx.h"
#include "afxtempl.h"
struct CProfElem
{
int Prof;
CString ProfDesc;
int Exp;
CString OtherInfo;
CProfElem(int p=0, CString pd="", int e=0, CString oi=""):
Prof(p),ProfDesc(pd),Exp(e),OtherInfo(oi){};
};
struct CLangElem
{
CString LangDesc;
int Lang;
int Level;
CLangElem (CString langD = "", int lID = 0, int l = 0):LangDesc(langD),Lang(lID),Level(l){};
};
struct CVacaElem
{
int Prof;
CString PositionName;
int Stage;
int Gender;
int Education;
int Lang;
int Level;
bool A,B,C,D,E;
CVacaElem ( int p=0, CString name="", int st=0, int gen=0, int edu=0, int lan=0, int lev=0,
bool a=false, bool b=false, bool c=false, bool d=false, bool e=false):
Prof(p),PositionName(name),Stage(st),Education(edu),Gender(gen),Lang(lan),Level(lev),
A(a),B(b),C(c),D(d),E(e){};
};
typedef CList<CProfElem*, CProfElem*> CProfList;
typedef CList<CLangElem*, CLangElem*> CLangList;
typedef CList<CVacaElem*, CVacaElem*> CVacaList;
struct CFirm
{
CString Name;
CString Domain;
CString Address;
CString Phone;
CString ID;
CString Password;
CVacaList VacaList;
CVacaElem *VacaCur;
void clear()
{
Name = "";
Domain = "";
Address = "";
Phone = "";
ID = "";
Password = "";
VacaList.RemoveAll();
VacaCur = 0;
};
};
struct CPerson
{
CString ID;
CString FIO;
CString BD;
int Education;
int Gender;
int FamilyStatus;
bool A,B,C,D,E;
CString Address;
CString Phone;
CString OtherInfo;
CProfList ProfList;
CLangList LangList;
CString Password;
void clear()
{
FIO = "";
BD = "";
Education = 0;
Gender = 0;
FamilyStatus = 0;
A = B = C = D = E = false;
Address = "";
Phone = "";
OtherInfo = "";
ID = "";
Password = "";
ProfList.RemoveAll();
LangList.RemoveAll();
};
};
#endif
Испытания программы
5.1 Тесты (проверка работоспособности и устойчивости)
Устойчивость
тесты на обработку некорректной информации
ввод некорректного пароля/ID
прочие возможности некорректного ввода отсечены конструкцией интерфейса
Результаты тестирования
Тестирование показало большую устойчивость и работоспособность программы.
Характеристики разработки.
КЧИК написанных разработчиками:
Superstrucs.h |
0,116 |
AddLang.cpp |
0,008 |
AddProf.cpp |
0,004 |
ID.cpp |
0,190 |
ID2.cpp |
0,134 |
IDPASS.cpp |
0,004 |
Resume1.cpp |
0,120 |
Resume2.cpp |
0,180 |
Resume3.cpp |
0,340 |
Vacancy1.cpp |
0,045 |
Vacancy2.cpp |
0,310 |
Vacancy3.cpp |
0,230 |
Exchange.cpp |
0,139 |
ExchangeDlg.cpp |
0,017 |
Итого: |
1,837 |
Работы |
Свиридов |
Грибников |
Всего |
Проектирование логической модели |
2.5% |
2.5% |
5% |
Проектирование интерфейса |
3% |
2% |
5 % |
Кодирование |
45% |
5% |
50% |
Подготовка документации |
10% |
20% |
30% |
Тестирование |
5% |
5% |
10% |
Отладка |
5% |
5% |
10% |
|
|
|
ИТОГО 100% |
Заключение.
6. Анализ качества разработанной программы
6.1 Показатели надежности
устойчивость функционирования: программа показала хорошую устойчивость и может работать в автономном режиме на терминале согласно своего назначения
Показатели сопровождения
Программа структурирована и удовлетворительно комментирована, что повышает ее наглядность.
Возможности применения программы и пути ее улучшения.
Программа полностью функциональна согласно требованиям.
Возможности улучшения:
создание администраторского рабочего места
разработка web-интерфейса и механизма взаимодействия с базой данных для возможности работы через сеть Internet
- добавление функции печати результатов поиска
Из-за большого объема текст программы не приводится.
Пример функции, работающей с базой через DAO.
void CVacancy3::Find()
{
// поиск сотрудников
CFirm& firm = ((VacancyWizard*)GetParent())->Firm;
CWorkerdatApp* pApp = (CWorkerdatApp*)AfxGetApp();
COleVariant vt;
CDaoRecordset recSet(&(pApp -> m_dbWorkBase));
CString SQL_Pattern;
SQL_Pattern.LoadString(IDS_SQL_FIND_WORKERS);
CString SQL_Str;
SQL_Str.Format(SQL_Pattern, firm.ID);
// запрос рабочих по всем вакансиям
recSet.Open(AFX_DAO_USE_DEFAULT_TYPE, (LPCSTR)SQL_Str);
CString temp;
CString FindResult;
FindResult = "Уважаемый работодатель,";
// перебор найденных вакансий
if (!recSet.IsEOF())
{
// вакансии найдены
FindResult += " для Вас найдены следующие специалисты:\r\n";
int v;
int num=1;
while(!recSet.IsEOF())
{
FindResult += "\r\n--------------------------------------------------------------------------------------\r\n";
COleVariant vt;
vt.vt = VT_BSTR;
FindResult += " Специальность: " + CString((LPSTR)vt.bstrVal) + "\r\n";
recSet.GetFieldValue("AbiAddenium",vt);
recSet.GetFieldValue("FIO",vt);
FindResult += " Ф.И.О.: " + CString((LPSTR)vt.bstrVal) + "\r\n";
recSet.GetFieldValue("AdressData",vt);
FindResult += " Адрес: " + CString((LPSTR)vt.bstrVal) + "\r\n";
recSet.GetFieldValue("PhoneData",vt);
FindResult += " Phone: " + CString((LPSTR)vt.bstrVal) + "\r\n";
recSet.GetFieldValue("OtherInfo",vt);
FindResult += " Доп.информация: " + CString((LPSTR)vt.bstrVal) + "\r\n";
recSet.GetFieldValue("Description",vt);
FindResult += " Опыт работы: " + CString((LPSTR)vt.bstrVal) + "\r\n";
COleVariant vt1;
recSet.GetFieldValue("Abilities.Experience",vt1);
temp.Format("%d",vt1.iVal);
FindResult += " Стаж работы: " + temp + "\r\n";
recSet.MoveNext();
}
FindResult += "\r\n--------------------------------------------------------------------------------------";
}
else
{
// вакансии не найдены
FindResult += " к сожалению, специалисты не найдены";
}
recSet.Close();
m_Result.SetWindowText(FindResult);
}