Отладка и тестирование программы

При разработке программы использовалась среда программирования Borland C++ Builder. Эта среда представляет собой набор средств быстрой разработки и отладки приложений для Windows. При разработке приложения применялся визуальный редактор форм, редактор программного кода, палитра компонентов и инспектор объектов.

Основными операциями в процессе разработки являлись: создание форм, размещение компонентов, редактирование свойств этих компонентов, формирование визуального пользовательского интерфейса, написание кода программы для обработки событий, сохранение и компиляция проекта.

Помимо указанных операций применялись дополнительные операции для отладки созданного приложения. Для этого в составе Borland C++ Builder имеется интегральный отладчик, который позволяет обнаруживать и исправлять ошибки, как на стадии написания кода, так и на стадии отладки работающей программы.

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

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

Таблица 2

Таблица тестирования программы «Главная страница»

Код товара Количество поставок Единица измерения Цена Дата поставки в магазин Наименование магазина
АВ12 Килограммы 21.09.2011 Магнит
Фунты 22.09.2015 Пятерочка
01.01.2016 Магнит
Килограммы   11.02.2016 Ашан
Тонны 01.02.2016ва Дикси
Центнер 01.03.2013 11;:%

Тест 1: нормальные условия работы программы.

Тест 2: в поле «Код товара» введены цифры и буквы, но программа, данных об ошибке не выдает.

Тест 3: в поле «Количество поставок» введено значение равное нуль, но программа, данных об ошибке не выдает.

Тест 4: в поле «Единица измерения» были введены числа, но программа, данных об ошибке не выдала.

Тест 5: в поле «Цена» небыли введены значения, но программа, данных об ошибке не выдает.

Тест 6: в поле «Дата поставки в магазин» введены цифры и символы и неправильная дата, но программа, данных об ошибке не выдает.

Тест 7: в поле «Наименование магазина» введены цифры и символы, но программа, данных об ошибке не выдает.

Инструкция пользователю

Общие сведения.

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

Программа разработана в среде Borland C++ Builder.

Функциональное назначение.

Программа предназначена для ведения данных о товарах и их дальнейшей обработке.

Вызов и загрузка.

Программа запускается на исполнение либо двойным щелчком левой кнопки мыши по файлу Project1.exe в проводнике Windows, либо нажатием правой кнопки мыши по указанному файлу и выбором пункта меню «Открыть».

Меню и кнопки.

При запуске программы открывается главная форма (рис. 7). На ней имеется главное меню проекта со следующими кнопками:

· Главная страница;

· Поиск по дате поставки;

· Вывод информации;

· Справка о программе;

· Справка о разработчике;

· Выход из программы.

Отладка и тестирование программы - student2.ru

Рис. 7 Главная форма

При нажатие на кнопку Главная страницаоткрывается Form1 «Главная страница» (рис. 8).

Отладка и тестирование программы - student2.ru

Рис. 8 Главная страница

При нажатии на кнопку «Добавить в список» открывается окно для ввода информации . Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Сохранить в файл» текстовым файлом сохраняется информация добавленная в список. Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Загрузить из файла» загружает ранее сохраненную информацию. Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Сортировка» данные сортируются. Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Добавить строку»добавляет пустую строку в таблицу «Товары». Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Удалить строку»удаляет строку из таблицы «Товары». Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Очистка»из таблицы удаляются все данные . Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Закрыть»переходна главную форму. Отладка и тестирование программы - student2.ru

При нажатии на кнопку Поиск по дате поставкиоткрывается Form3 «Поиск по дате поставки» (рис. 9).

Отладка и тестирование программы - student2.ru

Рис. 9 Поиск по дате поставки

При нажатии на кнопку «Загрузить из файла» загружает ранее сохраненную информацию. Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Найти» ищет (по дате) загруженную информацию в первой таблице и заносит во вторую. Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Очистить поле даты» стирается введенная дата и данные из второй таблице. Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Очистить все» очищаются полностью две таблицы и поле даты. Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Закрыть»переходна главную форму. Отладка и тестирование программы - student2.ru

При нажатии на кнопку Вывод информацииоткрывается Form4 «Вывод информации» (рис. 10).

Отладка и тестирование программы - student2.ru

Рис. 10 Вывод информации

При нажатии на кнопку «Вывод» выводится информация о товарах за последний месяц из формы «Поиск по дате поставки».

Отладка и тестирование программы - student2.ru

При нажатии на кнопку «Закрыть»переходна главную форму. Отладка и тестирование программы - student2.ru

При нажатии на кнопку Справка о программеоткрывается Form5 «Справка о программе» с данными о текущей программе (рис. 11).

Отладка и тестирование программы - student2.ru

Рис. 11 Справка о программе

При нажатии на кнопку Справка о разработчикеоткрывается Form6 «Справка о разработчике» с данными о разработчике (рис. 12).

Отладка и тестирование программы - student2.ru

Рис. 12 Справка о разработчике

При нажатии на кнопку Выходпрограмма закрывается.

Входные данные.

В программе были использованы несколько типов входных данных:

1. Текстовый. Представлен в виде файла в формате .txt;

2. Web странички. Представлен в виде файла в формате .html.

Существует два способа ввода этих данных в программу:

1. Прямая загрузка в режиме разработки форм;

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

Более наглядно входные данные отражены в таблице 3.

Таблица 3

Файл Формат данных Описание данных
Папка Файлы txt   Содержит текстовые файлы с данными для программы
Папка Скриншоты JPEG png Содержит фоновые изображения для форм в программе
Папка Справка html Web-страничка содержащий сведения о программе и о разработчике

Заключение

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

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

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

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

Поставленная цель была достигнута.

Список литературы

Используемая литература:

1. Иванов В.Б. Прикладное программирование на С/С++. С нуля до мультимедийных и сетевых приложений, Солон-Пресс, 2010 ,240с.

2.Мальковский М., Грацианова Т., Полякова И. Прикладное программное обеспечение, Издательство МАКС «Пресс» 2011,310с.

Интернет - ресурсы:

1. Образовательный портал: http\\www.edu.sety.ru

2. Учебная мастерская:http\\www.edu.BPwin -- Мастерская Dr_dimdim.ru

3. Образовательный портал: http\\www.edu.bd.ru

4. Интернет-форум:http://www.cyberforum.ru/cpp-builder/thread795260.html

Приложение А

Отладка и тестирование программы - student2.ru

Form2- Главная форма.

Отладка и тестирование программы - student2.ru

Form1 - Главная страница.

Приложение Б

Отладка и тестирование программы - student2.ru

Form3 - Поиск по дате поставки

Отладка и тестирование программы - student2.ru

Form4 - Вывод информации

Приложение В

Отладка и тестирование программы - student2.ru

Form5 - Справка о программе

Отладка и тестирование программы - student2.ru

Form6 - Справка о разработчике

Приложение Г

Листинг программы

Form1:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

int GetLine(int f, AnsiString *st);

struct TSklad{

AnsiString Kod,Kol,Ed,Cena,Data,Naimenovanie;};

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Form1->Close();

Form2->Show();

}

//---------------------------------------------------------------------------

int i;

void __fastcall TForm1::FormCreate(TObject *Sender)

{ StringGrid1->Cells[0][0]= "Код товара";

StringGrid1->Cells[1][0]= "Количество поставок";

StringGrid1->Cells[2][0]= "Единица измерения";

StringGrid1->Cells[3][0]= "Цена";

StringGrid1->Cells[4][0]= "Дата поставки в магазин";

StringGrid1->Cells[5][0]= "Наименование магазина";

StringGrid1->Options << goEditing;

StringGrid1->Options << goTabs;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

int i,j;int index,index0;int Kod;int Lstr;

AnsiString Lst; TSklad Sklad1;

Sklad1.Kod = InputBox("Ввод данных по складу","Введите Код товара",Kod);

Sklad1.Kol = InputBox("Ввод данных по складу","Введите Количество поставок","Пусто");

Sklad1.Ed = InputBox("Ввод данных по складу","Введите Единицу измерения","Пусто");

Sklad1.Cena = InputBox("Ввод данных по складу","Введите Цену товаров","Пусто");

Sklad1.Data =InputBox("Ввод данных по складу","Введите Дату поставки в магазин","Пусто");

Sklad1.Naimenovanie = InputBox("Ввод данных по складу","Введите Наименованме магазина","Пусто");

index0 = StringGrid1->RowCount;

for (i=0; i <index0;i++)

{Lst= StringGrid1->Cells[1][i];

Lstr =Lst.Length();

if (Lstr==0) break; index = i; }

if(index <(index0 -1)) StringGrid1->RowCount=(index0+1);

Kod=index +1;

StringGrid1->Cells[0][Kod]=Sklad1.Kod;

StringGrid1->Cells[1][Kod]= Sklad1.Kol;

StringGrid1->Cells[2][Kod]= Sklad1.Ed;

StringGrid1->Cells[3][Kod]= Sklad1.Cena;

StringGrid1->Cells[4][Kod]=Sklad1.Data;

StringGrid1->Cells[5][Kod]=Sklad1.Naimenovanie; }

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

StringGrid1->RowCount++;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

int count=StringGrid1->RowCount;

int row=StringGrid1->Row;

if(count-StringGrid1->FixedRows <= 1) return;

for(int i=row; i < count;i++)

{

StringGrid1->Rows[i]=StringGrid1->Rows[i+1];

}

StringGrid1->RowCount--;

StringGrid1->SetFocus() ;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)

{

int i,j;

for(i=1; i<StringGrid1->RowCount; i++)

for(j=0; j<StringGrid1->ColCount; j++)

StringGrid1->Cells[j][i]="";

StringGrid1->RowCount=2;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender)

{

int f;

if (FileExists("TOVARI.txt"))

f= FileOpen("TOVARI.txt",fmOpenWrite);

else

f = FileCreate("TOVARI.txt");

if (f!=-1)

{ for (int i =1; i<StringGrid1->RowCount; i++)

{

AnsiString st = StringGrid1->Rows[i]->DelimitedText+"\r\n";

FileWrite(f,st.c_str(), st.Length());}

FileClose(f); }

else

ShowMessage("ошибка доступа к файлу");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn3Click(TObject *Sender)

{

int f; AnsiString st;

bool f1=true;

if((f = FileOpen("TOVARI.txt",fmOpenRead))==-1)

return;

while (GetLine(f,&st) !=0)

{ if (f1)

{ StringGrid1->Rows[StringGrid1->Row] -> DelimitedText= st;

f1= false; }

else

{ StringGrid1->RowCount++;

StringGrid1->Row = StringGrid1->RowCount -1;

StringGrid1->Rows[StringGrid1->Row]-> DelimitedText=st; } }

FileClose(f);}

int GetLine (int f, AnsiString *st)

{

unsigned char buf[256];

unsigned char *p = buf;

int n;

int len = 0;

n = FileRead(f,p,1);

while (n!= 0)

{if(*p =='\r')

{ n = FileRead(f,p,1);

break;}

len++;p++;

n = FileRead(f,p,1);}

*p = '\0';

if (len !=0)

st -> printf("%s",buf);return len;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn4Click(TObject *Sender)

{

int i,j,minind,colin=1;

AnsiString minval;

TStringList *TempList=new TStringList;

if(!TempList)throw Exception("Нет памяти");

for(i=1;i<this->StringGrid1->RowCount;i++)

{

minind=i;

minval=this->StringGrid1->Cells[colin][i];

for (j=i+1;j<this->StringGrid1->RowCount;j++)

{

if(minval>this->StringGrid1->Cells[colin][j])

{

minind=j;

minval=this->StringGrid1->Cells[colin][j];

} ;

};

TempList->Text=this->StringGrid1->Rows[minind]->Text;

this->StringGrid1->Rows[minind]->Text=this->StringGrid1->Rows[i]->Text;

this->StringGrid1->Rows[i]->Text=TempList->Text;

};

delete TempList;

}

//---------------------------------------------------------------------------

Form2:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

#include "Unit6.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)

{

Form1->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button2Click(TObject *Sender)

{

Form2->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button3Click(TObject *Sender)

{

Form3->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button4Click(TObject *Sender)

{

Form4->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button5Click(TObject *Sender)

{

Form5->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::Button6Click(TObject *Sender)

{

Form6->Show();

}

//---------------------------------------------------------------------------

Form3:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

#include "Unit3.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm3 *Form3;

//---------------------------------------------------------------------------

__fastcall TForm3::TForm3(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

int GetLine(int f, AnsiString *st);

void __fastcall TForm3::Button2Click(TObject *Sender)

{

Form3->Close();

Form2->Show();

}

//---------------------------------------------------------------------------

int i;

void __fastcall TForm3::FormCreate(TObject *Sender)

{ StringGrid1->Cells[0][0]= "Код товара";

StringGrid1->Cells[1][0]= "Количество поставок";

StringGrid1->Cells[2][0]= "Единица измерения";

StringGrid1->Cells[3][0]= "Цена";

StringGrid1->Cells[4][0]= "Дата поставки в магазин";

StringGrid1->Cells[5][0]= "Наименование магазина";

StringGrid1->Options << goEditing;

StringGrid1->Options << goTabs;

StringGrid2->Cells[0][0]= "Код товара";

StringGrid2->Cells[1][0]= "Количество поставок";

StringGrid2->Cells[2][0]= "Единица измерения";

StringGrid2->Cells[3][0]= "Цена";

StringGrid2->Cells[4][0]= "Дата поставки в магазин";

StringGrid2->Cells[5][0]= "Наименование магазина";

}

//---------------------------------------------------------------------------

void __fastcall TForm3::Button1Click(TObject *Sender)

{

int f; AnsiString st;

bool f1=true;

if((f = FileOpen("TOVARI.txt",fmOpenRead))==-1)

return;

while (GetLine(f,&st) !=0)

{ if (f1)

{ StringGrid1->Rows[StringGrid1->Row] -> DelimitedText= st;

f1= false; }

else

{ StringGrid1->RowCount++;

StringGrid1->Row = StringGrid1->RowCount -1;

StringGrid1->Rows[StringGrid1->Row]-> DelimitedText=st; } }

FileClose(f);}

int GetLine (int f, AnsiString *st)

{

unsigned char buf[256];

unsigned char *p = buf;

int n;

int len = 0;

n = FileRead(f,p,1);

while (n!= 0)

{if(*p =='\r')

{ n = FileRead(f,p,1);

break;}

len++;p++;

n = FileRead(f,p,1);}

*p = '\0';

if (len !=0)

st -> printf("%s",buf);return len;

}

//---------------------------------------------------------------------------

void __fastcall TForm3::Button6Click(TObject *Sender)

{

int i,j;

float f;

for(i=1; i<StringGrid1->RowCount; i++)

for(j=0; j<StringGrid1->ColCount; j++)

StringGrid1->Cells[j][i]="";

StringGrid1->RowCount=2;

for(i=1; i<StringGrid2->RowCount; i++)

for(j=0; j<StringGrid2->ColCount; j++)

StringGrid2->Cells[j][i]="";

StringGrid2->RowCount=2;

if(f==1)

{ Form3->Edit1->Text = "0"; }

else { Form3->Edit1->Text= ""; return;}

}

//---------------------------------------------------------------------------

void __fastcall TForm3::Button3Click(TObject *Sender)

{

StringGrid2->Visible = true;

AnsiString s1,s2;

s1 = Edit1->Text;

for (i=1; i<=StringGrid1->RowCount; i++)

{s2= StringGrid1->Cells[4][i];

if(s1==s2) break;

else {ShowMessage("Введена некорректная дата");

StringGrid2->Visible = false;}}

StringGrid2->Rows[1]=StringGrid1->Rows[i];

}

//---------------------------------------------------------------------------

void __fastcall TForm3::BitBtn1Click(TObject *Sender)

{float f;

int i,j;

for(i=1; i<StringGrid2->RowCount; i++)

for(j=0; j<StringGrid2->ColCount; j++)

StringGrid2->Cells[j][i]="";

StringGrid2->RowCount=2;

if(f==1)

{ Form3->Edit1->Text = "0"; }

else { Form3->Edit1->Text= ""; return;}

}

//---------------------------------------------------------------------------

Form 4:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "DateUtils.hpp"

#include "Unit4.h"

#include "Unit3.h"

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm4 *Form4;

//---------------------------------------------------------------------------

__fastcall TForm4::TForm4(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm4::Button1Click(TObject *Sender)

{

int i,j;

TDateTime i1,j1;

for(i=0;i<Form3->StringGrid1->RowCount;i++){

StringGrid1->Cells[0][i]=Form3->StringGrid1->Cells[1][i];

StringGrid1->Cells[1][i]=Form3->StringGrid1->Cells[2][i];

StringGrid1->Cells[2][i]=Form3->StringGrid1->Cells[3][i];

StringGrid1->Cells[3][i]=Form3->StringGrid1->Cells[4][i];

StringGrid1->Cells[4][i]=Form3->StringGrid1->Cells[5][i];

}

StringGrid1->RowCount=Form3->StringGrid1->RowCount;;

for(j=0;j<Form3->StringGrid1->RowCount-1;j++){

for(i=1;i<Form3->StringGrid1->RowCount-1;i++) {

i1=StringGrid1->Cells[3][i];

j1=StringGrid1->Cells[3][i+1];

if (i1.Val<j1.Val){

StringGrid1->Rows[StringGrid1->RowCount+1]=StringGrid1->Rows[i+1];

StringGrid1->Rows[i+1]= StringGrid1->Rows[i];

StringGrid1->Rows[i]=StringGrid1->Rows[StringGrid1->RowCount+1]; }

} }

}

//---------------------------------------------------------------------------

void __fastcall TForm4::FormCreate(TObject *Sender)

{

StringGrid1->Cells[0][0]= "Количество поставок";

StringGrid1->Cells[1][0]= "Единица измерения";

StringGrid1->Cells[2][0]= "Цена";

StringGrid1->Cells[3][0]= "Дата поставки в магазин";

StringGrid1->Cells[4][0]= "Наименование магазина";

StringGrid1->Options << goEditing;

StringGrid1->Options << goTabs;

}

//---------------------------------------------------------------------------

void __fastcall TForm4::Button2Click(TObject *Sender)

{

Form4->Close();

Form2->Show();

}

//---------------------------------------------------------------------------

Form 5:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit5.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "SHDocVw_OCX"

#pragma resource "*.dfm"

TForm5 *Form5;

//---------------------------------------------------------------------------

__fastcall TForm5::TForm5(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm5::Label1Click(TObject *Sender)

{

Form5->CppWebBrowser1->Navigate((WideString(ExtractFilePath(ParamStr(0)))+ L"О Программе.html").c_bstr());

}

//---------------------------------------------------------------------------

Form 6:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit6.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "SHDocVw_OCX"

#pragma resource "*.dfm"

TForm6 *Form6;

//---------------------------------------------------------------------------

__fastcall TForm6::TForm6(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm6::Label1Click(TObject *Sender)

{

Form6->CppWebBrowser1->Navigate((WideString(ExtractFilePath(ParamStr(0)))+ L"ОРазработчике.html").c_bstr());

}

//----------------------------------------------------------------------------

Наши рекомендации