5. Тексты программ
В данном разделе приведены тексты программ модуля с комментариями о назначении отдельных его логических частей и используемых в нем данных. Этим обеспечивается доступность понимания синтаксиса, семантики и прагматики программы персоналом сопровождения программного изделия, даже если он не был связан с программной реализацией.
Данный документ раскрывает содержание и логику работы модулей, реализующих выполнение п. 4.1.4.1 технического задания, т.е. обеспечивающих выполнение Запроса 1.
Весь программный код можно разделить на 3 логически взаимосвязанные составляющие, которые реализуют различные этапы выполнения данной операции.
5.1. Программный код, обеспечивающий настройку внешнего вида и заполнение информацией из справочных таблиц экранной формы, в которой задаются параметры выполняемого запроса.
5.1.1 Начнем рассмотрение текста с функции OnInitDialog, которая вызывается при инициализации диалогового окна.
Начало программного кода данной функции содержит следующие переменные:
m_strSign – данная переменная класса CString содержит значение знака, который задает параметры поиска суммы по документу
m_ctrlSign – переменная класса CComboBox служит для управления состоянием комбинированного списка, содержащего значения знаков.
db – переменная класса CDatabase. Используется для подключения к базе данный через интерфейс ODBC.
m_ctrlRecieved – переменная класса CComboBox. Используется для управления списком, содержащим перечень ФИО материально ответственных лиц.
m_ctrlMaterialName – переменная класса CComboBox. Используется для управления списком, содержащим перечень наименований материалов.
Первый фрагмент кода данной функции инициализирует значения переменных, осуществляет подключение к базе данных, очищает содержимое комбинированных списков и заполняет список знаков значениями.
CDialog::OnInitDialog();
m_strSign = "=";
UpdateData(FALSE);
db.Open("Warehouse");
OnCheckFrom();
OnCheckTo();
m_ctrlRecieved.ResetContent();
m_ctrlMaterialName.ResetContent();
m_ctrlSign.ResetContent();
m_ctrlSign.AddString("<=");
m_ctrlSign.AddString("=");
m_ctrlSign.AddString(">=");
Следующий фрагмент программного кода, используя переменную pTrebSet, которая является указателем на набор записей, с помощью которого осуществляется доступ к таблице базы данных “Материальное требование”, в цикле заполняет список ФИО материально ответственных лиц значениями из базы данных.
TrebSet *pTrebSet = new TrebSet(&db);
pTrebSet->Open();
while (!pTrebSet->IsEOF())
{
m_ctrlRecieved.AddString(pTrebSet->m_strRecieved);
pTrebSet->MoveNext();
}
pTrebSet->Close();
Следующий фрагмент кода удалят из полученного перечня повторяющиеся значений ФИО.
Переменные:
strCur – значение текущей строки в списке
strPrev – значение предыдущей строки в списке
iCur – индекс текущего элемента в списке
CString strCur;
CString strPrev="";
int iCur;
for (iCur = m_ctrlRecieved.GetCount();iCur>0;iCur--)
{
m_ctrlRecieved.GetLBText((iCur-1),strCur);
if (strCur==strPrev)
{
m_ctrlRecieved.DeleteString((iCur-1));
}
else
{
strPrev=strCur;
}
}
Последний фрагмент программного кода данной функции, используя переменную pMaterialSet, которая является указателем на набор записей, с помощью которого осуществляется доступ к таблице базы данных “Справочник материалов”, в цикле заполняет список наименований материалов значениями из базы данных.
CMaterialSet *pMaterialSet = new CMaterialSet(&db);
pMaterialSet->Open();
while (!pMaterialSet->IsEOF())
{
m_ctrlMaterialName.AddString(pMaterialSet->m_strMaterialName);
pMaterialSet->MoveNext();
}
pMaterialSet->Close();
AddToolTipText();
return TRUE;
5.1.2 Функция CheckInput
Данная функция использует логические переменные m_bFrom и m_bTo, которые являются индикаторами состояния полей ввода начальной и конечной даты. Остальные переменные функции содержат значения текстовых полей ввода диалогового окна.
Функция считывает значения переменных диалогового окна и после чего проверяет наличие хотя бы одной границы временного интервала и заполненность всех текстовых полей и по окончании выполнения возвращает логическое значение-результат.
UpdateData();
if ((m_bFrom==TRUE) && (m_bTo==TRUE))
{
MessageBox("Введите временной интервал","Ошибка ввода",MB_ICONEXCLAMATION);
return FALSE;
}
if (m_strRecieved=="")
{
MessageBox("Введите ФИО материально ответственного лица","Ошибка ввода",MB_ICONEXCLAMATION);
return FALSE;
}
if (m_strMaterialName=="")
{
MessageBox("Введите наименование материала","Ошибка ввода",MB_ICONEXCLAMATION);
return FALSE;
}
if (m_strSign=="")
{
MessageBox("Введите знак","Ошибка ввода",MB_ICONEXCLAMATION);
return FALSE;
}
if (m_strSum=="")
{
MessageBox("Введите сумму по документу","Ошибка ввода",MB_ICONEXCLAMATION);
return FALSE;
}
return TRUE;
5.1.3 Функция OnOK()
Данная функция вызывается при нажатии кнопки ОК диалогового окна и инициализирует выполнение запроса.
Функцией используются следующие переменные:
pTrebSet – указатель на класс набора записей, с помощью которого осуществляется доступ к таблице базы данных “Материальное требование”.
min_time – Объект класса CTime. Используется для нахождения самой ранней даты регистрации материального требования.
IsArhiveUsed – переменная-индикатор, показывающая, следует ли обращаться к архивной базе данных.
Логика работы данного программного фрагмента следующая: после проверки корректности информации, введенной в экранную форму (вызов функции CheckInput), в цикле производится поиск самой ранней даты в основном массиве материальных требований.
В случае если полученное значение меньше значения начальной даты, введенного в поле экранной формы, индикатору IsArchiveUsed присваивается значение 1.
if (CheckInput())
{
UpdateData();
CTime min_time(2010,01,01,0,0,0);
TrebSet *pTrebSet = new TrebSet(&db);
pTrebSet->Open();
while (!pTrebSet->IsEOF())
{
if (pTrebSet->m_timeDate < min_time)
min_time = pTrebSet->m_timeDate;
pTrebSet->MoveNext();
}
pTrebSet->Close();
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.