
- •Зробите титулку бо я хз як ви називаєтесь)) Анотація
- •2 Розробка структури і компонентів
- •1 Аналіз вимог та уточнення специфікації
- •1.1 Аналіз завдання і вибір технології, мови та середовища розробки
- •1.2 Аналіз методу сортування Шелла
- •1.3 Аналіз збереженої інформації і вибір структур даних для її представлення
- •1.4 Вибір алгоритму розв‘язку задачі
- •2 Розробка структури і компонентів програмного продукту
- •2.1 Проектування інтерфейсу користувача
- •3 Вибір стратегії тестування та розробка тестів
- •Висновки
- •Список використаних джерел
- •(Титулкузробите, бо я хз як воно там у вас все називається)
- •1. Вступ
- •2. Призначення
- •3. Вимоги до програми або програмного виробу
- •Додаток б. Довідка. Використання програмного продукту
2 Розробка структури і компонентів програмного продукту
Цей розділ передбачає огляд різних способів і форм взаємодії користувача з системою і обґрунтування вибору певної форми діалогу (що лежить в основі будь-якої взаємодії) для спілкування з програмним продуктом, який розробляється.
2.1 Проектування інтерфейсу користувача
Структурна схема — схема, яка визначає основні функціональні частини виробу, їх взаємозв'язки та призначення. Під функціональною частиною розуміють складову частину схеми: елемент, пристрій, функціональну групу, функціональну ланку
Структурна схема - схема, що відображає склад і взаємодія з управління частин розроблювального продукту. При об'єктної декомпозиції такими частинами є об'єкти (рисунок 2.1).
Рисунок 2.1 – Структурна схема
На етапі проектування здійснюється побудова моделі реалізації (або фізичної моделі), яка демонструє, як система буде задовольняти вимоги які пред’являються до неї (без технічних деталей). Одним з самих розповсюджених є метод структурного проектування. Структурні карти Константайна являються моделлю відношень ієрархії між програмними модулями. Вузли структурних карт відповідають модулям і областям даних, потоки відображають міжмодульні виклики. Базовим елементом структурної карти є модуль (рисунок 2.2).
Рисунок 2.2 – Структурна карта
2.1 Розробка інтерфейсу користувача, форм вводу-виводу інформації, вибір класів, компонентів, властивостей та алгоритмів С++ для проектування інтерфейсу користувача
Принципи розробки інтерфейсу - це високорівневі концепції та уявлення, які можуть використовуватися при проектуванні програмного забезпечення. Потрібно визначити, який з принципів найбільш важливий і прийнятний для вашої системи.
Відповідно до завдання розробки додатку сортування масиву методом Шелла інтерфейс користувача повинен дозволяти виконувати завантаження даних, збереження даних, генерацію даних на випадок відсутності для завантаження, відображення процесу сортування, підраховувати кількість перестановок. Програма під час запуску повинна мати заставку. Інтерфейс може містити основні об‘єкти: головне та контекстне меню, панель інструментів, допомогу, інформацію про автора. Початкові дані можуть вводитись з клавіатури та зчитуватися з файлу, а результат крім виведення на екран можна зберігати у вигляді файлу.
Найменування програми: «Сортування методом Шелла». Для завантаження програми потрібно активізувати файл Shell_sort.exe. Після завантаження програми бачимо головну форму програми, що представлена у вигляді головного меню та засобів маніпуляції сортування.
При створенні інтерфейсу користувача (дивитися рисунок 2.3) для відповідної програми було наперед визначено структуру самого вікна та його елементів, що включають в себе меню (MenuStrip), п‘ять кнопок (Button), дві мітки (Label), два текст-бокси (TextBox), три перемикачі (RadioButton) та сітку даних (DataGridView) куди записуватиметься процес сортування. Більш детальне їхнє використання наведено нижче.
Рисунок 2.3 - Інтерфейс програмного продукту
Щоб запрограмувати задачу, необхідно в Microsoft Visual Studio в пункті меню File виконати команду New Project. У вікні New Project в лівій колонці знаходиться список встановлених шаблонів (Installed Templat es). Серед них - шаблон мови програмування Visual C++. У вузлі Visual C++ в області типів проектів виберемо середовище CLR, а потім в області шаблонів (у середній колонці) виберемо шаблон (Templat es) Windows Forms Application Visual C++. тепер введемо ім'я проекту (Name) Merge_Sort клацнемо на кнопці OK, в результаті побачимо вікно представлене нижче (дивитися рисунок 2.4).
Рисунок 2.4 - Створення форми
Створення форми. У цьому вікні зображена екранна форма - Form1, в якій програмісти розташовують різні компоненти графічного інтерфейсу користувача або, як їх інакше називають, елементи управління. Це поля для введення тексту TextBox, командні кнопки Button, строчки тексту у формі - мітки Label, які не можуть бути відредаговані користувачем, та інші елементи управління. Cлід відзначити, що тут використовується найсучасніше, так зване візуальне програмування, що припускає просте перетягування елементів за допомогою миші з панелі елементів Toolbox, де розташовані всілякі елементи управління, в форму. Це допомагає звести до мінімуму безпосереднє написання програмного коду.
Лістинг запуску пустої форми:
#include "Shsort.h"
using namespace System;
using namespace System::Windows::Forms;
[STAThread]
void Main(array<String^>^ args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Shell_sort::Shsort form;
Application::Run(%form);
}
Меню. Меню включає в себе такі елементи, як "Довідка" - виклик файлу довідки та Автор - отримання інформації про автора.
Меню виконане за допомогою компонента MenuStrip (див. рисунок 2.5).
Рисунок 2.5 - Створення меню
Компонент MenuStrip представляє собою головне меню програми. Після того як у форму буде добавлений компонент MenuStrip, у верхній частині форми з‘явиться рядок меню, на початку якого знаходиться область введення тексту. Щоб створити перший пункт меню, потрібно зробити клік в область введення тексту і ввести назву пункту меню, Довідка. Як тільки буде введена перша буква, справа і знизу від області введення з‘явиться ще дві області введення тексту, а в праву назву наступного пункту меню, наприклад, Автор (див. рисунок 2.5). Після того як структура меню буде сформована, можна виконати настройку меню (об‘єктів типу ToolStripMenuItem).
Об‘єкт ToolStripMenuItem здатний сприймати подію Click, що відбувається в результаті кліка на елемент меню.
Функції, що відповідають елементам меню:
Довідка:
private: System::Void halpToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
Process^ myProcess = gcnew Process();
myProcess->StartInfo->FileName = "help.doc";
myProcess->Start();
}
Автор:
private: System::Void authorToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
String^ FileName = "autor.txt";
System::IO::StreamReader ^ sr = gcnew System::IO::StreamReader(FileName);
MessageBox::Show(sr->ReadToEnd());
sr->Close();
}
};
}
Рисунок 2.5 - Автор проекту
Мітки.
Компонент Label (див. рисунок 2.6) призначений для відображення текстової інформації. Задати текст, що буде відображатися на формі, можна як і під час розробки форми, так і під час роботи над програмою, задавши значення властивості Text.
Рисунок 2.6 - Створення мітки
Інтерфейс додатка містить дві текстові мітки, що служать підписами для текстових полів (див. рисунок 2.7).
Рисунок 2.7 - Текстові мітки
Кнопки.
Компонент Button реагує на клік миші, та виконує команди задані програмно. Компонент має набір властивостей, які відповідають за відображення кнопки на формі.
Рисунок 2.8 - Створення кнопок
Програмний інтерфейс має п‘ять кнопок.
"Внести дані" - виводить у форму початкові дані відповідно до вибраного перемикача (Завантажити з файлу, Ввести дані, Згенерувати).
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
if (gen->Checked == true){
input->Enabled=false;
file->Enabled=false;
dataGridView1->Visible=true;
int nsize = System::Convert::ToInt32(size->Text);
Random ^ rnd = gcnew Random;
int rand_num;
if (nsize==0){
nsize=10;
size->Text=nsize.ToString();
}
for (int i = 0; i < nsize; i++){
dataGridView1->Columns->Add("", "");
dataGridView1->Columns[i]->Width = 40;
rand_num=rnd->Next(0, 100);
dataGridView1[i,0]->Value=rand_num.ToString();
}
size->Text=nsize.ToString();
}
if (input->Checked == true){
int nsize = System::Convert::ToInt32(size->Text);
if (nsize==0){
nsize=10;
size->Text=nsize.ToString();
}
for (int i = 0; i < nsize; i++){
dataGridView1->Columns->Add("","");
dataGridView1->Columns[i]->Width = 40;
}
gen->Enabled=false;
file->Enabled=false;
}
if (file->Checked == true){
String^ fileName = "data.txt";
int nsize = System::Convert::ToInt32(size->Text);
StreamReader^ din = File::OpenText(fileName);
String^ str;
str = din->ReadLine();
array<String^> ^arr;
arr=str->Split(' ');
int m=arr->Length;
nsize=m;
for(int i=0; i<nsize; i++)
X[i]= Convert::ToInt32(arr[i]);
for (int i = 0; i < nsize; i++){
dataGridView1->Columns->Add("","");
dataGridView1->Columns[i]->Width = 40;
}
for(int i=0; i<nsize; i++)
dataGridView1[i,0]->Value=X[i].ToString();
size->Text=nsize.ToString();
gen->Enabled=false;
input->Enabled=false;
}
}
"Відсортувати" - запускає процедуру сортування масиву. Виводить отримані дані на екран форми.
private: System::Void Sort_Click(System::Object^ sender, System::EventArgs^ e) {
int nsize = System::Convert::ToInt32(size->Text);
StreamWriter^ sw = gcnew StreamWriter(File::Open("sort.txt", FileMode::Append, FileAccess::Write));
for(int i=0; i<nsize;i++)
X[i]= Convert::ToInt32(dataGridView1[i,0]->Value);
for(int j=0; j<nsize; j++){
sw->Write(X[j].ToString());
sw->Write(" ");
}
sw->WriteLine();
sw->Close();
Shell(nsize);
double c;
textBox2->Text=count.ToString();
String^ fileName = "sort.txt";
StreamReader^ din = File::OpenText(fileName);
String^ str;
dataGridView1->Columns->Clear();
for (int i = 0; i < nsize; i++){
dataGridView1->Columns->Add("","");
dataGridView1->Columns[i]->Width = 40;
}
int k=0;
while ((str = din->ReadLine()) != nullptr) {
array<String^> ^arr;
arr=str->Split(' ');
for(int i=0; i<nsize; i++)
X[i]= Convert::ToInt32(arr[i]);
Thread::Sleep(100);
dataGridView1->Rows->Add();
for(int j=0; j<nsize; j++){
// Thread::Sleep(100);
dataGridView1[j,k]->Value=X[j].ToString();
}
k++;
}
din->Close();
System::IO::File::Delete("sort.txt");
count=0;
}
"Зберегти" - зберігає отримані результати у файл res.txt, що знаходиться в папці проекту: Merge_Sort\Merge_Sort\ res.txt
private: System::Void Save_Click(System::Object^ sender, System::EventArgs^ e) {
int nsize = System::Convert::ToInt32(size->Text);
String^ fileName = "res.txt";
StreamWriter^ sw = gcnew StreamWriter(fileName);
int A[50][100];
int RowC;
RowC=dataGridView1->RowCount;
for(int i=0; i<RowC; i++){
for(int j=0; j<nsize; j++){
A[i][j]=Convert::ToInt32(dataGridView1[j,i]->Value);
}
}
for(int i=0; i<RowC-1; i++){
for(int j=0; j<nsize; j++){
sw->Write(A[i][j].ToString());
sw->Write(" ");
}
sw->WriteLine();
}
sw->Close();
}
"Очистити"- приводить форму до стартового варіанту.
private: System::Void Clear_Click(System::Object^ sender, System::EventArgs^ e) {
dataGridView1->Columns->Clear();
textBox2->Text="0";
size->Text="0";
gen->Enabled=true;
input->Enabled=true;
file->Enabled=true;
count=0;
file->Checked = false;
gen->Checked = false;
input->Checked = false;
}
"Вихід" - забезпечує вихід з програми.
private: System::Void Exit_Click(System::Object^ sender, System::EventArgs^ e) {
Close();
}
TextBox
Компонент TextBox задає у формі однорядкове і багаторядкове поле, яке можна редагувати. Через таке поле вводять/виводять строкові дані.
Інтерфейс має два компоненти типу TextBox (див. рисунок 2.9). Одне текстове поле використовується для введення розміру масиву, який потрібно відсортувати, друге для виведення кількості перестановок.
Рисунок 2.9 - Компонент TextBox
Початкове значення в полях задається при запуску форми.
private: System::Void Shsort_Load(System::Object^ sender, System::EventArgs^ e) {
size->Text="0";
textBox2->Text="0";
}
Перемикачі (RadioButton)
Перемикачі (RadioButton) - це елементи управління, які дозволяють користувачеві вибирати один варіант з кількох взаємовиключних варіантів. Перемикач може знаходиться в одному з двох станів: "обраний" і "не вибраний". Це визначається властивістю Checked, яке приймає значення True або False відповідно.
Інтерфейс додатку має три перемикачі: "Зчитати з файлу", "Ввести дані" та "Згенерувати" (див. рисунок 2.10)
"Зчитати з файлу" вказує, що зчитування елементів масиву для сортування відбуватиметься з файлу data.txt, що знаходиться в папці проекту: Merge_Sort\Merge_Sort\ data.txt, автоматично визначиться розмір прочитаного масиву та при натисненні кнопки "Ввести дані" виведуться на екран елементи масиву для сортування.
"Згенерувати" вказує, що масив буде згенеровано випадковим чином Розмір масиву відповідає введеному користувачем в відповідне поле значенню, якщо таке значення не введене розмір масиву дорівнюватиме 10. При натисненні кнопки "Ввести дані" виведуться на екран елементи масиву для сортування.
Input - вказує на те, що дані будуть вводитися користувачем вручну. При натисненні кнопки "Ввести дані" на екран виведеться форма для введення даних, розміром, що попередньо заданий користувачем, в іншому випадку розмір масиву дорівнюватиме 10.
Таблиця даних (DataGridView).
Для виведення даних на форму було використано елемент керування DataGridView (див. рисунок 2.11). Цей компонент призначений для перегляду даних, які зручно відображати у вигляді таблиць, з можливістю їх редагування.
Рисунок 2.11 - Виведення інформації
Розмір таблиці генерується відповідно до потреб сортування. DataGridView служить для відображення процесу сортування, та генерується після натиснення кнопки "Відсортувати" та змінюється після закінчення сортування.
Оголошення DataGridView
private: System::Void dataGridView1_CellContentClick(System::Object^ sender, System::Windows::Forms::DataGridViewCellEventArgs^ e) {
}
Приклад заповнення DataGridView
for (int i = 0; i < nsize; i++){
dataGridView1->Columns->Add("", "");
dataGridView1->Columns[i]->Width = 40;
rand_num=rnd->Next(0, 100);
dataGridView1[i,0]->Value=rand_num.ToString();
}
Всі ці компоненти вдало поєднуються для забезпечення зручної роботи користувача з розробленим програмним продуктом.