Материал: Глобалізація світових товарних ринків

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Выходными данными в Личном кабинете являются:

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

Список транзакций по карте.

4.3 Руководство пользователя

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

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

Руководство пользователя представлено в приложении Б.

Главное окно и развернутое swipe-меню "Приложения для управления бонусной программой" представлено на рисунке 2.

Главный экран "Личного кабинета держателя бонусной карты" представлен на рисунке 3.

Рисунок 2 - Главное окно "Приложения для управления бонусной программой"

Рисунок 3 - Главный экран "Личного кабинета"

Ниже представлен исходный код основных функций "Приложения для управления бонусной программой" и "Личного кабинета держателя бонусной карты".

) Функция начисления бонусных баллов:

(ToggleSwitch1->Enabled)

{

// АВТО РЕЖИМ(ToggleSwitch1->State == tssOff & bonus>=0)

{>Filter = L"card_id = "+ IntToStr (card_id);>Filtered = true;>Active = true;>Active = false;>SQL->Clear ();>SQL->Add ("Select max (trans_id) as max_id from transactions");>Active = true;>Execute ();

// ОПЛАТА БОНУСАМИ--------->Edit ();(RadioButton2->Checked) // ЧАСТИЧНАЯ

{>FieldByName ("balance") - >AsInteger = CardsTable->FieldByName ("balance") - >AsInteger - ceil (sCurrencyEdit2->Value);

}// ВСЕМИ БОНУСАМИ

{(ceil (itog) >= CardsTable->FieldByName ("balance") - >AsInteger) // Если сумма платежа больше количества бонусов на счету

{>FieldByName ("balance") - >AsInteger = CardsTable->FieldByName ("balance") - >AsInteger - CardsTable->FieldByName ("balance") - >AsInteger;

}(ceil (itog) < CardsTable->FieldByName ("balance") - >AsInteger) // Если сумма платежа МЕНЬШЕ количества бонусов на счету

{>FieldByName ("balance") - >AsInteger = CardsTable->FieldByName ("balance") - >AsInteger - ceil (itog);

}

}>Post ();(summa<itog)

{>Insert ();>FieldByName ("trans_id") - >AsInteger = ServiceQuery->FieldByName ("max_id") - >AsInteger + 1;>FieldByName ("card_id") - >AsInteger = card_id;>FieldByName ("points") - >AsInteger = bonus;>FieldByName ("description") - >AsString = L"Оплата бонусами";>FieldByName ("trans_date") - >AsDateTime = Now ();>FieldByName ("comment") - >AsString = "Покупка - "+Edit1->Text + " - " + sSpinEdit1->Text + "x за счет бонусных баллов";

TransTable->Post ();

}

// НАЧИСЛЕНИЕ БОНУСОВ ЗА ПОКУПКУ-----

CardsTable->Edit ();>FieldByName ("balance") - >AsInteger = CardsTable->FieldByName ("balance") - >AsInteger + ceil (bonus);>Post ();>Active = false;>Active = true;>Execute ();>Insert ();>FieldByName ("trans_id") - >AsInteger = ServiceQuery->FieldByName ("max_id") - >AsInteger + 1;>FieldByName ("card_id") - >AsInteger = card_id;>FieldByName ("points") - >AsInteger = bonus;>FieldByName ("description") - >AsString = L"Покупка";>FieldByName ("trans_date") - >AsDateTime = Now ();(CheckBox1->Checked)

{>FieldByName ("valid_thru") - >AsDateTime = AdvDateTimePicker1->DateTime;

}>FieldByName ("comment") - >AsString = "Оплата - "+Edit1->Text + " - " + sSpinEdit1->Text + "x";>Post ();>Execute ();>MessageBox (L"Бонусные баллы успешно начислены в режиме авто!",L"Бонусная система", MB_OK);

}

// РУЧНОЙ РЕЖИМ(ToggleSwitch1->State == tssOn & sCurrencyEdit3->Value>0)

{>Filter = L"card_id = "+ IntToStr (card_id);>Filtered = true;>Active = true;>Edit ();>FieldByName ("balance") - >AsInteger = CardsTable->FieldByName ("balance") - >AsInteger + ceil (sCurrencyEdit3->Value);>Post ();>Active = false;>SQL->Clear ();>SQL->Add ("Select max (trans_id) as max_id from transactions");>Active = true;>Execute ();>Insert ();>FieldByName ("trans_id") - >AsInteger = ServiceQuery->FieldByName ("max_id") - >AsInteger + 1;>FieldByName ("card_id") - >AsInteger = card_id;>FieldByName ("points") - >AsInteger = ceil (sCurrencyEdit3->Value);>FieldByName ("description") - >AsString = Edit2->Text;>FieldByName ("trans_date") - >AsDateTime = Now ();(CheckBox1->Checked)

{>FieldByName ("valid_thru") - >AsDateTime = AdvDateTimePicker1->DateTime;

}>FieldByName ("comment") - >AsString = Memo1->Text;>Post ();>Execute ();>MessageBox (L"Бонусные баллы успешно начислены в ручном режиме!",L"Бонусная система", MB_OK);

}

}

) Функция занесения данных в систему (на примере добавления бонусной карты):

if (sEdit1->Text == "") // Проверка полей ввода

{

Shape2->Visible = true;

Application->MessageBox (L"Не все поля заполнены!",L"Ошибка выполнения", MB_OK | MB_ICONWARNING);

return;

}>Active = false;>SQL->Clear ();>SQL->Add ("SELECT card_id FROM cards WHERE card_id = " + sEdit1->Text); // Проверка на наличие номера карты в базе>Active = true;(ServiceQuery->RecordCount>0)

{>MessageBox (L"Карта с таким номером уже существует!",L"Ошибка выполнения", MB_OK | MB_ICONWARNING);

return; // Если карта существует, то прерываем выполнение функции

}

// >Insert ();>FieldByName ("card_id") - >AsInteger = StrToInt (sEdit1->Text);>FieldByName ("balance") - >AsInteger = ceil (sCurrencyEdit1->Value);>FieldByName ("stat_id") - >AsInteger = 1;>FieldByName ("stat") - >AsString = L"Активна"; (ComboBox1->ItemIndex==0) // Проверяем какой тип карты выбран

}(ComboBox1->ItemIndex==1) // Проверяем какой тип карты выбран

{>FieldByName ("type_id") - >AsInteger = 10;>FieldByName ("type") - >AsString = L"Подарочная";

}>FieldByName ("output_date") - >AsDateTime = Now ();(CheckBox1->Checked) {CardsTable->FieldByName ("valid_thru") - >AsDateTime = sDateEdit1->Date; }>FieldByName ("comment") - >AsString = sMemo1->Text;>Post ();>MessageBox (L"Карта успешно добавлена!",L"Выполнено", MB_OK | MB_ICONINFORMATION);

AddTabRefresh->Execute (); // Выполняем действие по очистке формы

) Функция редактирования данных (на примере редактирования информации о карте):>Active = false; // Составление строки запроса-НАЧАЛО

ServiceQuery->SQL->Clear ();>SQL->Add ("UPDATE cards");>SQL->Add ("SET balance = " + FloatToStr (ceil (BonusEdit->Value)));>SQL->Add (",stat_id = "+IntToStr (StatusComboBox->ItemIndex));>SQL->Add (",stat = '"+StatusComboBox->Text+"'");(CardTypeComboBox->ItemIndex==0)

{>SQL->Add (",type_id = 1");>SQL->Add (",type = 'Персональная'");

}(CardTypeComboBox->ItemIndex==1)

{>SQL->Add (",type_id = 10");>SQL->Add (",type = 'Персональная'");

}(CheckBox2->Checked)

{ServiceQuery->SQL->Add (",valid_thru = '"+FormatDateTime ("yyyy-mm-dd",ValidDateEdit->Date) +"'"); }

{CardsTable->FieldByName ("valid_thru") - >Value=Null; }>SQL->Add (",comment = '"+CommentMemo->Text+"'");>SQL->Add ("WHERE card_id = "+CardsTable->FieldByName ("card_id") - >AsString);

ServiceQuery->ExecSQL ();

// Составление строки запроса-КОНЕЦ>MessageBox (L"Изменения успешно внесены!",L"Выполнено", MB_OK | MB_ICONINFORMATION);

// Обновим информацию в визуальных компонентах>Active = false; CardsTable->Active = true;

CardsQuery->Refresh ();

) Функция импорта данных для любой таблицы:

void __fastcall TForm1:: SpeedButton2Click (TObject *Sender)

{>Active = false;>TableName = DBLookupComboBox1->Text;>Active = true;col,row;->ActivePage = TabSheet3;->LoadFromXLSSheet (sFilenameEdit1->FileName,Edit1->Text);= AdvStringGrid1->RowCount;->Max = row-1;= AdvStringGrid1->ColCount;(int i = 0; i < row-1; i++)

{>Insert ();(int j = 0; j < col; j++)

{ftype = FieldTypeNames [Table->FieldByName (AdvStringGrid1->Cells [j] [0]) - >DataType];(ftype == "WideString" & AdvStringGrid1->Cells [j] [i+1]! ="") {Table->FieldByName (AdvStringGrid1->Cells [j] [0]) - >AsString = AdvStringGrid1->Cells [j] [i+1]; }(ftype == "DateTime" & AdvStringGrid1->Cells [j] [i+1]! ="") {Table->FieldByName (AdvStringGrid1->Cells [j] [0]) - >AsDateTime = StrToDateTime (AdvStringGrid1->Cells [j] [i+1]); }(ftype == "Date" & AdvStringGrid1->Cells [j] [i+1]! ="") {Table->FieldByName (AdvStringGrid1->Cells [j] [0]) - >AsDateTime = StrToDate (AdvStringGrid1->Cells [j] [i+1]); }(ftype == "Integer" & AdvStringGrid1->Cells [j] [i+1]! ="") {Table->FieldByName (AdvStringGrid1->Cells [j] [0]) - >AsInteger = StrToInt (AdvStringGrid1->Cells [j] [i+1]); }(ftype == "AutoInc" & AdvStringGrid1->Cells [j] [i+1]! ="") {}

}>Post ();->Position = ProgressBar1->Position +1;

}->ActivePage = TabSheet4;

) Функция авторизации клиента:

// ПОДКЛЮЧЕНИЕ К БАЗЕ{MyConnection1->Connected=true; }(.) {ShowMessage (L"Ошибка соединения. Проверьте подключение к интернету!"); return; }

// ПРОВЕРЯЕМ ЗАПОЛНЕНИЕ ПОЛЕЙ ВВОДА

if (Edit2->Text=="") {ShowMessage (L"Введите Email!"); return; }

if (Edit1->Text=="") {ShowMessage (L"Введите Пароль!"); return; }

// ВЫПОЛНЕНИЕ ЗАПРОСА С ПАРАМЕТОМ

MyQuery2->ParamByName ("email") - >Value = Edit2->Text; // считываем параметр

MyQuery2->Active=true;->Execute (); // выполняем запрос

// АВТОРИЗАЦИЯ(MyQuery2->FieldByName ("passwd") - >AsString == Edit1->Text) // Проверяем введеный пароль

{>MyQuery1->ParamByName ("clientid") - >Value = MyQuery2->FieldByName ("client_id") - >AsInteger; // считывам параметр для запроса>Show ();

}

{(L"Неверный Email или Пароль!"); return;

}

) Функция регистрации пользователя:

if (MyConnection1->Connected==true)

{

// СОЗДАЕМ ЗАПИСЬ->Active=true;->Execute ();maxid = MyQuery1->FieldByName ("max_id") - >AsInteger + 1;->Active=true;->Insert ();->FieldByName ("first_name") - >AsString = Edit3->Text;->FieldByName ("last_name") - >AsString = Edit4->Text;->FieldByName ("mobile_phone") - >AsString = Edit5->Text;->FieldByName ("email") - >AsString = Edit6->Text;->FieldByName ("passwd") - >AsString = Edit7->Text;->FieldByName ("birth_date") - >AsDateTime = DateEdit1->Date;(RadioButton1->IsChecked==true) {MyTable1->FieldByName ("gender") - >AsString = L"Мужской"; }(RadioButton2->IsChecked==true) {MyTable1->FieldByName ("gender") - >AsString = L"Женский"; }->FieldByName ("client_id") - >AsInteger = maxid;->FieldByName ("card_id") - >AsInteger = StrToInt (Edit8->Text);->Post ();

// ЧИСТИМ ФОРМУ->Text=""; Edit4->Text=""; Edit5->Text=""; Edit6->Text=""; Edit7->Text=""; Edit8->Text="";->IsEmpty=true;->IsChecked=false; RadioButton2->IsChecked=false;

// ПЕРЕХОДИМ НА ВКЛАДКУ ОБ УСПЕШНОЙ РЕГИСТРАЦИИ

ChangeTabAction3->Execute ();->Start ();

}

{ (L"Ошибка соединения. Проверьте подключение к интернету!");

return;

}

) Функция редактирования профиля пользователя:

// ПОДКЛЮЧЕНИЕ К БАЗЕ{MyConnection1->Connected=true; }(.) {ShowMessage (L"Ошибка соединения. Проверьте подключение к интернету!"); return; }

if (Edit7->Text == "") {ShowMessage (L"Введите ваш старый пароль для редактирования профиля!"); return; }

if (MyTable1->Filtered == true)

{

if (Edit7->Text == MyTable1->FieldByName ("passwd") - >AsString) // Проверяем правильность введенного пароля пароль

{->Edit ();->FieldByName ("first_name") - >AsString = Edit3->Text; // Обновляем имя->FieldByName ("last_name") - >AsString = Edit4->Text; // Обновляем фамилию

// ОбНОВЛЯЕМ ПОЛ(RadioButton1->IsChecked == true)

{->FieldByName ("gender") - >AsString = RadioButton1->Text;

}(RadioButton2->IsChecked == true)

{->FieldByName ("gender") - >AsString = RadioButton2->Text;

}->FieldByName ("birth_date") - >AsDateTime = DateEdit1->Date;->FieldByName ("mobile_phone") - >AsString = Edit5->Text;->FieldByName ("email") - >AsString = Edit6->Text; (Edit1->Text! = "") // Если поле НОВЫЙ ПАРОЛЬ заполнено, то обновляем пароль

{->FieldByName ("passwd") - >AsString = Edit1->Text;

}

MyTable1->Post ();

}

}

4.4 Тестирование программы

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

Различают различные виды тестирования программного обеспечения информационных систем.

Функциональное тестирование - проверка соответствия продукта функциональным требованиям и спецификациям.

Интеграционное тестирование - это совместное выполнение двух или более классов, пакетов, компонентов или подсистем, созданных несколькими программистами или группами.

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

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

Способы тестирования программного обеспечения "Информационной системы бонусных программ лояльности":

Тестирование интерфейса: тестирование интерфейса производится по таким критериям, как: естественность, согласованность, дружественность, принцип "обратной связи", простота, гибкость, эстетическая привлекательность;

Базовое тестирование: информационная система тестируется на ввод корректных данных, которые вводит пользователь и показывает результат работы системы;

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

Источник: https://www.bibliofond.ru/view.aspx?id=877461