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

При разработке программы использовалась среда программирования 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). На ней имеется главное меню проекта со следующими кнопками:

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

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

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

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

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

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

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

 

 

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

 

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

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

 

 

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

При нажатии на кнопку «Загрузить из файла» загружает ранее сохраненную информацию.

 

При нажатии на кнопку «Сортировка» данные сортируются.

 

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

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

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

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

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

 

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

 

При нажатии на кнопку «Загрузить из файла» загружает ранее сохраненную информацию.

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

 

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

 

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

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

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

 

 

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

 

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

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

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

 

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

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

Рис. 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

Приложение А

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

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

Приложение Б

 

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

 

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

Приложение В

 

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

 

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());

}

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