При проведении тестирования ошибок выявлено не было. В результате тестирование система показала себя как стабильное и удобное в работе приложение.
информационный интерфейс программа
Заключение
В результате выполнения курсового проекта было создано приложение «Справочник почтовой индексации», реализующее следующие основные функции:
- данные организованы в файлы;
- хранение данные о почтовых индексах и местоположении;
- добавление, редактирование и удаление сведений из таблицы;
- поиск данных по нескольким полям.
Разработанное приложение имеет простой и интуитивно-понятный для пользователя интерфейс.
При реализации работы были пройдены этапы:
- описание и постановка задачи;
- кодирование программы на алгоритмический язык;
- тестирование полученного приложения.
Благодаря получившемуся приложению, пользователи смогут получать информацию о необходимых данных в кратчайшие сроки и в удобной для них форме.
Список использованных источников
1. ЛАБОРАТОРНАЯ РАБОТА №4 Проектирование графического интерфейса пользователя [Электронный ресурс]: https://www.bsuir.by/m/12_101523_1_108313.pdf
2. Структурная схема разрабатываемого программного обеспечения [Электронный ресурс]: https://bstudy.net/725019/informatika/strukturnaya_shema_razrabatyvaemogo_programmnogo_obespecheniya
3. Что такое тестирование ПО [Электронный ресурс]: https://synergy.ru/akademiya/programming/testirovanie_programmnogo_obespecheniya
4. Кетков, Юлий Практика программирования: Visual Basic, C++ Builder, Delphi. Самоучитель (+ дискета) / Юлий Кетков , Александр Кетков. - М.: БХВ-Петербург, 2012. - 464 c.
5. Архангельский, А. Я. Язык С++ в С++Builder / А.Я. Архангельский. - М.: Бином-Пресс, 2008. - 944 c.
6. Федоренко, Ю. П. Алгоритмы и программы на C++ Builder (+ CD-ROM) / Ю.П. Федоренко. - М.: ДМК Пресс, 2010. - 544 c.
Приложение А
Интерфейс программы
Рисунок А.1 - Общий вид главного окна программы
Рисунок А.2 - Панель поиска
Рисунок А.3 - Форма о программе
Приложение Б
Блок-схема программы
Приложение В
Текст программы
//---------------------------------------------------------------------------
#include <vcl.h>
#include <memory>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
using namespace std;
TForm1 *Form1;
String fileName = "";
bool flEdit;
int row;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)
{
if(SaveDialog1->Execute()) //вызываем стандартное окно сохранения файла
{
fileName = SaveDialog1->FileName; //сохраняем имя файла и путь
}
else return; //если пользователь отказался от сохранения выходим из функции
auto_ptr<TStringList> L (new TStringList); //создаем список, куда будем заносить данные для сохранения
for(int i = 0; i < StringGrid1->RowCount; i++) //проходимя по всем строкам таблицы
L->Add(StringGrid1->Rows[i]->CommaText); //добавлем данные для сохранения
L->SaveToFile(fileName); //сохраняем данные в файд
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
if (OpenDialog1->Execute()) //вызываем стандартное диалоговое окно открытия
{
fileName = OpenDialog1->FileName; //сохраняем имя файла
auto_ptr<TStringList> L (new TStringList); //создаем список, куда будем читать данные из файла
L->LoadFromFile(fileName); //загружаем данные
for(int i = 0; i < StringGrid1->RowCount; i++)
StringGrid1->Rows[i]->Clear(); //очищаем таблицу для вывода новых данных
StringGrid1->RowCount = L->Count; //устаналиваем количество строк равное количеству запусей
for(int i = 0; i < L->Count; i++) //по всем строкам списка
StringGrid1->Rows[i]->CommaText = L->Strings[i]; //загружаем данные в таблицу
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
if(fileName== "")
{
if(SaveDialog1->Execute())
{
fileName = SaveDialog1->FileName;
}
else return;
}
auto_ptr<TStringList> L (new TStringList);
for(int i = 0; i < StringGrid1->RowCount; i++)
L->Add(StringGrid1->Rows[i]->CommaText);
L->SaveToFile(fileName);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->ColWidths[0] = 250;
StringGrid1->Cells[0][0] = "Республика";
StringGrid1->ColWidths[1] = 250;
StringGrid1->Cells[1][0] = "Край (область)";
StringGrid1->ColWidths[2] = 250;
StringGrid1->Cells[2][0] = "Район";
StringGrid1->ColWidths[3] = 250;
StringGrid1->Cells[3][0] = "Населенный пункт";
StringGrid1->ColWidths[1] = 200;
StringGrid1->Cells[4][0] = "Индекс";
StringGrid2->ColWidths[0] = 250;
StringGrid2->Cells[0][0] = "Республика";
StringGrid2->ColWidths[1] = 250;
StringGrid2->Cells[1][0] = "Край (область)";
StringGrid2->ColWidths[2] = 250;
StringGrid2->Cells[2][0] = "Район";
StringGrid2->ColWidths[3] = 250;
StringGrid2->Cells[3][0] = "Населенный пункт";
StringGrid2->ColWidths[1] = 200;
StringGrid2->Cells[4][0] = "Индекс";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton4Click(TObject *Sender)
{if (Panel2->Visible) ShowMessage("Сперва закройте поиск!");
else {
Panel1->Visible = true;
LabeledEdit1->Text = StringGrid1->Cells[0][row];
LabeledEdit2->Text = StringGrid1->Cells[1][row];
LabeledEdit3->Text = StringGrid1->Cells[2][row];
LabeledEdit4->Text = StringGrid1->Cells[3][row];
LabeledEdit5->Text = StringGrid1->Cells[4][row];
flEdit = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton5Click(TObject *Sender)
{
if (Panel2->Visible) ShowMessage("Сперва закройте поиск!"); //если идет работа с панелью поиска, удалять нельзя
else {
if(MessageDlg(L"Удалить строку?", mtWarning, TMsgDlgButtons() << mbOK << mbCancel, 0) == mrOk) //если пользователь согласен
{
row = StringGrid1->Row; //запомнить текущую строку
for (int i=row; i<StringGrid1->RowCount-1; i++) //от текущей строки до конца таблицы
{
StringGrid1->Rows[i] = StringGrid1->Rows[i+1]; //сдвинуть все на одну вверх
}
StringGrid1->RowCount--; //уменьшить количество строк
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{if (Panel2->Visible) ShowMessage("Сперва закройте поиск!");
else {
Panel1->Visible = true;
flEdit = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
LabeledEdit1->Text = "";
LabeledEdit2->Text = "";
LabeledEdit3->Text = "";
LabeledEdit4->Text = "";
LabeledEdit5->Text = "";
Panel1->Visible = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
if (flEdit)
{
StringGrid1->Cells[0][row] = LabeledEdit1->Text;
StringGrid1->Cells[1][row] = LabeledEdit2->Text;
StringGrid1->Cells[2][row] = LabeledEdit3->Text;
StringGrid1->Cells[3][row] = LabeledEdit4->Text;
StringGrid1->Cells[4][row] = LabeledEdit5->Text;
}
else
{
int i = StringGrid1->RowCount;
if (StringGrid1->Cells[0][i-1]=="") i--;
StringGrid1->RowCount = i+1;
StringGrid1->FixedRows = 1;
StringGrid1->Cells[0][i] = LabeledEdit1->Text;
StringGrid1->Cells[1][i] = LabeledEdit2->Text;
StringGrid1->Cells[2][i] = LabeledEdit3->Text;
StringGrid1->Cells[3][i] = LabeledEdit4->Text;
StringGrid1->Cells[4][i] = LabeledEdit5->Text;
}
LabeledEdit1->Text = "";
LabeledEdit2->Text = "";
LabeledEdit3->Text = "";
LabeledEdit4->Text = "";
LabeledEdit5->Text = "";
Panel1->Visible = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
row = StringGrid1->Row;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N9Click(TObject *Sender)
{
this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton7Click(TObject *Sender)
{
CheckBox1->Checked = false;
CheckBox2->Checked = false;
CheckBox3->Checked = false;
CheckBox4->Checked = false;
LabeledEdit6->Text = "";
LabeledEdit7->Text = "";
LabeledEdit8->Text = "";
LabeledEdit9->Text = "";
LabeledEdit6->Enabled = false;
LabeledEdit7->Enabled = false;
LabeledEdit8->Enabled = false;
LabeledEdit9->Enabled = false;
StringGrid2->Visible = false;
StringGrid2->RowCount = 2;
StringGrid2->Cells[0][1] = "";
StringGrid2->Cells[1][1] = "";
StringGrid2->Cells[2][1] = "";
StringGrid2->Cells[3][1] = "";
StringGrid2->Cells[4][1] = "";
Panel2->Visible = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox3Click(TObject *Sender)
{
if (CheckBox3->Checked)
LabeledEdit8->Enabled = true;
else
LabeledEdit8->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
if (CheckBox1->Checked)
LabeledEdit6->Enabled = true;
else
LabeledEdit6->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox2Click(TObject *Sender)
{
if (CheckBox2->Checked)
LabeledEdit7->Enabled = true;
else
LabeledEdit7->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox4Click(TObject *Sender)
{
if (CheckBox4->Checked)
LabeledEdit9->Enabled = true;
else
LabeledEdit9->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{
Panel2->Visible = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton6Click(TObject *Sender)
{
StringGrid2->Visible = true; //показать таблицу поиска
int j = 1; //количество записей 1
if (CheckBox1->Checked) //если выбрано первое поле для поиска
{
for (int i=0; i<=StringGrid1->RowCount; i++) //идти по всем строкам таблицы
{
if (StringGrid1->Cells[0][i] == LabeledEdit6->Text) //если значение совпадает
{
if (CheckBox2->Checked) //если выбрано второе поле для поиска
if (StringGrid1->Cells[1][i] != LabeledEdit7->Text) //сверить значения, если не совпадает
continue; //перейти к следующей записи
if (CheckBox3->Checked) //если выбрано третье поле для поиска
if (StringGrid1->Cells[2][i] != LabeledEdit8->Text) //сверить значения, если не совпадает
continue; //перейти к следующей записи
if (CheckBox4->Checked) //если выбрано четвертое поле для поиска
if (StringGrid1->Cells[3][i] != LabeledEdit9->Text) //сверить значения, если не совпадает
continue; //перейти к следующей записи
j++; //если все надено, что нужно, то увеличиваем количество строка
StringGrid2->RowCount = j; //увеличивает количество строк в таблице
StringGrid2->Rows[j-1] = StringGrid1->Rows[i]; //переносим запись в таблицу поиска
}
}
return; //закончить работу функции
}
if (CheckBox2->Checked)
{
for (int i=0; i<=StringGrid1->RowCount; i++)
{
String temp = StringGrid1->Cells[1][i];
if (StringGrid1->Cells[1][i] == LabeledEdit7->Text)
{
if (CheckBox3->Checked)
if (StringGrid1->Cells[2][i] != LabeledEdit8->Text)
continue;
if (CheckBox4->Checked)
if (StringGrid1->Cells[3][i] != LabeledEdit9->Text)
continue;
j++;
StringGrid2->RowCount = j;
StringGrid2->Rows[j-1] = StringGrid1->Rows[i];
} }
return;
}
if (CheckBox3->Checked)
{
for (int i=0; i<=StringGrid1->RowCount; i++)
{
if (StringGrid1->Cells[2][i] == LabeledEdit8->Text)
{
if (CheckBox4->Checked)
if (StringGrid1->Cells[3][i] != LabeledEdit9->Text)
continue;
j++;
StringGrid2->RowCount = j;
StringGrid2->Rows[j-1] = StringGrid1->Rows[i];
} }
return;
}
if (CheckBox4->Checked)