Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Автоматизація побудови діаграм динаміки обсягів промислового виробництва регіонів України

КурсоваДопомога в написанніДізнатися вартістьмоєї роботи

Використовуючи властивість Caption задав заголовок форми MainForm як «Автоматизация построения диаграмм динамики объёмов промышленного производства регионов Украины». Форму MainForm приведено на рисунку 3.1. Використовуючи властивість Caption задав заголовок форми AboutForm «Автоматизация построения диаграмм динамики объёмов промышленного производства регионов Украины». Форму AboutForm приведено… Читати ще >

Автоматизація побудови діаграм динаміки обсягів промислового виробництва регіонів України (реферат, курсова, диплом, контрольна)

ЗМІСТ

ВСТУП

1. ПОСТАНОВКА ЗАДАЧІ

2. ХАРАКТЕРИСТИКА ПРОГРАМНИХ ЗАСОБІВ РЕАЛІЗАЦІЇ ПРОЕКТУ

3. ПРОЕКТУВАННЯ ТА РЕАЛІЗАЦІЯ ПРОГРАМНОГО ПРОДУКТУ

3.1 Опис структури інтерфейсу

3.2 Опис складових частин програми

3.3 Схема зв’язку між складовими частинами програми

4. РОЗРОБКА ІНСТРУКЦІЇ КОРИСТУВАЧА ВИСНОВКИ ЛІТЕРАТУРА ДОДАТОК, А ДОДАТОК Б ДОДАТОК В

ВСТУП

Темою курсового проекту є «Автоматизація побудови діаграм динаміки обсягів промислового виробництва регіонів України». Виконаний у середовищі програмування Borland Builder C++ 6.0 на мові програмування високого рівня С++.

Створена програма будує діаграми динаміки обсягів промислового виробництва регіонів України, відображає зміни обсягів виробництва у конкретному регіоні за увесь час.

Програма може бути використана будь-якими особами чи організаціями у яких є потреба у побудові діаграм динаміки обсягів промислового виробництва регіонів України.

Процес створення діаграм займає багато часу, тому програма буде особливо корисною — статистикам, у яких є потреба вести облік промислового виробництва України.

програма діаграма динаміка інтерфейс

1. ПОСТАНОВКА ЗАДАЧІ

Темою курсового проекту є «Автоматизація побудови діаграм динаміки обсягів промислового виробництва регіонів України».

Метою даного курсового проекту є створення додатку який дозволяє будувати діаграми динаміки обсягів промислового виробництва засобами інтегрованого середовища Borland Builder C++ 6.0 на мові програмування високого рівня С++.

Система повинна забезпечити наступні функції:

1 додавання запису до таблиці;

2 редагування даних таблиці;

3 видалення даних з таблиці;

4 завантаження даних з файлу;

5 збереження даних у файл;

6 будування діаграми для обраного міста.

Інтерфейс програми повинен містити вікно з компонентами призначених для відображення таблиці, додавання даних до таблиці, завантаження даних та їх збереження, побудови діаграми.

Для повноцінної роботи програми потрібно мати, як мінімум:

— тип процесора Pentium або Athlon і вище;

— обсяг оперативного запам’ятовуючого пристрою 128 Мб;

— обсяг вільного місця на жорсткому диску 1 Гб;

— операційну система Win32 (ХР/Vista/7);

— виконавчу середу dot NET v. 4.0 і вище;

2. ХАРАКТЕРИСТИКА ПРОГРАМНИХ ЗАСОБІВ РЕАЛІЗАЦІЇ ПРОЕКТУ

Для реалізації курсового проекту було використано інтегроване середовище програмування C++ Builder 6.

C++ Builder — програмний продукт, інструмент швидкої розробки додатків (RAD), інтегрована середа програмування (IDE), система, використовувана програмістами для розробки програмного забезпечення на мові програмування C.

Форми є основою додатків C + + Builder. Створення користувальницького інтерфейсу додатку полягає в додаванні у вікно форми елементів, об'єктів C + + Builder, званих компонентами. Компоненти C + + Builder розташовуються на палітрі компонентів, виконаної у вигляді багатосторінкового блокнота. Важлива особливість C + + Builder полягає в тому, що він дозволяє створювати власні компоненти і налаштовувати палітру компонентів, а також створювати різні версії палітри компонентів для різних проектів.

С + + багато років вдосконалюється і оптимізується для більш легкого створення і використання, багато допоміжних компонентів створено для його вдосконалення. На практиці мова програмування С + + застосовується в багатьох галузях промисловості, на його основі створені багато інших мов програмування. На даний момент С + + задовольняє всім сучасним вимогам у створенні програм (як невеликих додатків так і вузькоспеціалізованих програмних комплексів) [1, 2].

3. ПРОЕКТУВАННЯ ТА РЕАЛІЗАЦІЯ ПРОГРАМНОГО ПРОДУКТУ

3.1 Опис алгоритму програми

Меню повинно давати користувачеві наступні можливості:

— інформація про програму;

— додавання записів;

— редагування записів;

— видалення записів;

— завантаження нових записів;

— зберігання записів у файл;

— побудови діаграм;

— вихід з програми;

Алгоритм роботи програми:

1 користувач додає новий запис у таблиця, шляхом або ж одиничного додавання, або може завантажити з файлу відразу всі записи;

2 користувач може редагувати введену або завантажену інформацію;

3 обирає регіон, діаграми якого він хоче побачити;

4 виводиться діаграма, яка відображає динаміку зміни обсягів виробництва для обраного регіону за кожний рік;

5 Користувач має можливість зберегти записи таблиці у файл.

3.2 Проектування інтерфейсу програми

До складу розробленої програми входять 2 форми. Призначення форм проекту приведено у таблиці 3.3.

Таблиця 3.3 — Призначення форм проекту

Ім'я

Призначення

MainForm

Форма для побудови діаграми

AboutForm

Форма інформації про програму (автора, та зміст)

Форма MainForm для побудови діаграми. На ній розміщені компоненти: ComboBox, Chart, GroupBox, Label, Button, OpenDialog, SaveDialog, StringGrid, Edit.

Використовуючи властивість Caption задав заголовок форми MainForm як «Автоматизация построения диаграмм динамики объёмов промышленного производства регионов Украины». Форму MainForm приведено на рисунку 3.1.

Рисунок 3.1 — Вигляд форми MainForm, яка призначена для побудови діаграм

Компонент ComboBox призначений для вибору регіону діаграми динаміки зміни обсягів виробництва якого ми хотіли би побудувати. Компонент Chart призначений для побудови діаграми.

Компонент GroupBox призначений для групування компонентів записів таблиці.

Компонент Label призначений для виводу підказок користувачу.

Компоненти Button виконують функції:

— додавання записів;

— редагування записів;

— видалення записів;

Компоненти Edit призначені для вводу року, типу промисловості, об'єму виробництва, регіону.

Компонент StringGrid призначений для виводу усіх записів таблиці.

Компонент SaveDialog призначений для збереження записів таблиці у файл.

Компонент OpenDialog призначений для завантаження записів у таблицю.

Форма AboutForm дозволяє користувачу дізнатися інформацію про програму, а саме хто є автором, та що вона робить. На ній розміщені компоненти: Label, Panel.

Використовуючи властивість Caption задав заголовок форми AboutForm «Автоматизация построения диаграмм динамики объёмов промышленного производства регионов Украины». Форму AboutForm приведено на рисунку 3.2.

Рисунок 3.2 — Вигляд форми AboutForm, яка призначена для виводу інформації про програму Компонент Label призначений для виведення напису «О программе». Компонент Panel призначений для виведення інформації про програму.

3.3 Опис складових частин програми

Програма містить два модулі, які приведені в таблиці 3.4.

Таблиця 3.4 — Вміст модулів програми

Назва модулю

Перелік обробників подій

MainUnit

void __fastcall FormCreate (TObject *Sender);

void __fastcall bAddClick (TObject *Sender);

void __fastcall bDelClick (TObject *Sender);

void __fastcall bChangeClick (TObject *Sender);

void __fastcall MakeChartClick (TObject *Sender);

void __fastcall bSaveClick (TObject *Sender);

void __fastcall bLoadClick (TObject *Sender);

void __fastcall sgDataClick (TObject *Sender);

void __fastcall AboutClick (TObject *Sender);

void __fastcall eKindKeyPress (TObject *Sender, char &Key);

void __fastcall eYearKeyPress (TObject *Sender, char &Key);

void __fastcall eSizeKeyPress (TObject *Sender, char &Key);

void __fastcall eRegionKeyPress (TObject *Sender, char &Key);

AboutUnit

TAbout_Form *About_Form;

Перелік підпрограм/функцій які входять до складу модуля MainUnit приведено у таблиці 3.5.

Таблиця 3.5 — Перелік підпрограм/функцій які входять до складу модуля MainUnit

Підпрограми/функції

Призначення

bool CheckData

Перевіряє введені дані на коректність

void FormatGrid

Формує таблицю записів

3.4 Схема зв’язку між складовими частинами програми

Схема зв’язку між складовими частинами програми, показана на рисунку 3.5.

Рисунок 3.5 — Схема зв’язку між складовими частинами програми

3.5 Контроль коректності вхідних та вихідних даних

Контролю коректності даних, що вводяться користувачем, необхідно приділяти чималу увагу, оскільки необроблені помилки, що виникають при неправильному введенні даних, приводять до помилок в роботі програми, часто є катастрофічним.

Для запобігання помилок та виявлення нештатних ситуацій були прий-няті такі заходи:

1. Для коректного введення року не дозволяється залишати поле порожнім

if (_year=="")

{

*err="Заполните поле Год" ;

return false;

}

2. Для коректного введення року не дозволяється вводити рік менш ніж 1900 та не більш ніж 2013

if ((((TEdit*)Sender)->Text.Length () < 3) || (StrToInt (eYear->Text)<1900)||(StrToInt (eYear->Text)>2013))

{

MessageBox (0," Некоректная дата" ," Ошибка", mrOk);

return;

}

3. Для коректного введення року був доданий обробник подій для полів введення OnKeyPress, який не дозволяє вводити нічого окрім цифр та не більш ніж 4 рази

if ((Key >= '0') && (Key <= '9') || (Key == VK_BACK))

Key≠0;

else

Key=0;

if (Key == VK_BACK)

return;

if (((TEdit*)Sender)->Text.Length () > 3)

{

Key = 0;

return;

}

4. Для коректного введення типу промисловості не дозволяється залишати поле порожнім

if (_kind=="")

{

*err="Заполните поле Вид промышленности" ;

return false;

}

5. Для коректного введення типу промисловості був доданий обробник подій для полів введення OnKeyPress, який не дозволяє введення нічого окрім букв російського та українського алфавіту

if (((Key>='а') && (Key<='я'))||((Key>='А') && (Key<='Я'))||(Key<='і')||(Key<='ї')||(Key<='І')||(Key<='Ї')|| (Key == VK_BACK))

Key≠0;

else

Key=0;

6. Для коректного введення об'єму виробництва не дозволяється залишати поле порожнім

if (_size=="")

{

*err="Заполните поле Объём производства" ;

return false;

}

7. Для коректного введення об'єму виробництва був доданий обробник подій для полів введення OnKeyPress, який не дозволяє вводити нічого окрім цифр

if ((Key >= '0') && (Key < '9') || (Key == VK_BACK))

Key≠0;

else

Key=0;

8. Для коректного введення регіону не дозволяється залишати поле порожнім

if (_region=="")

{

*err="Заполните поле Регион" ;

return false;

}

9. Для коректного будування діаграми не дозволяється додавати до таблиці записів однакових записів

p=sgData->RowCount;

for (int i=1;i

if (eRegion->Text==sgData->Cells[3][i])

if (eKind->Text==sgData->Cells[1][i])

if (eYear->Text==sgData->Cells[0][i])

{

MessageBox (0," Такая запись уже присутствует", «Ошибка», mrOk);

return;

}

10. Для коректного будування діаграми не дозволяється будування при порожній таблиці

if (sgData->Cells[0][1]=="")

{

MessageBox (0," Перед построением графика заполните таблицу с данными", «Ошибка», mrOk);

return;

}

11. Для коректного збереження таблиці записів не дозволяється зберігати порожню таблицю

if (sgData->Cells[0][1]=="")

{

MessageBox (0, «Перед сохранением необходимо заполнить таблицу», «Ошибка», mrOk);

return;

}

4. РОЗРОБКА ІНСТРУКЦІЇ КОРИСТУВАЧА

Об'єм каталогу проекту має розмір 2,77 МБ (2 905 090 байт).

Об'єм виконуваного файлу ManufactureChartProject. exe має розмір 57,5 КБ (58 880 байт).

Запуск програми здійснюється наступним чином:

вибрати необхідний файл та відкрити його подвійним клацанням;

Після запуску програми на екран монітору з’явиться головне вікно програми, яке зображене на рисунку 4.1.

Рисунок 4.1 — Вигляд головного вікна програми після запуску При виборі пункту «Добавить», введені записи додаються до таблиці записів, приклад зображено на рисунку 4.2

Рисунок 4.2 — Вигляд головного вікна програми після реалізації функції «Добавить»

При виборі пункту «Изменить», активний запис редагується, після чого додається до таблиці записів, приклад зображено на рисунку 4.3

Рисунок 4.3 — Вигляд головного вікна програми після реалізації функції «Изменить»

При виборі пункту «Удалить», активний запис видаляється з таблиці записів, приклад зображено на рисунку 4.4

Рисунок 4.4 — Вигляд головного вікна програми після реалізації функції «Удалить»

При виборі пункту «Загрузить», загружається з файлу інформація до таблиці записів, приклад зображено на рисунку 4.5 та 4.6

Рисунок 4.5 — Вигляд головного вікна програми по запуску функції «Загрузить»

Рисунок 4.6 — Вигляд головного вікна програми після реалізації функції «Загрузить»

При виборі пункту «Сохранить», таблиця записів зберігається у файл, приклад зображено на рисунку 4.7

Рисунок 4.7 — Вигляд головного вікна програми при запуску функції «Сохранить»

При виборі пункту «Построить», будується діаграма виходячи із обраного регіону, приклад зображено на рисунку 4.8

Рисунок 4.8 — Вигляд головного вікна програми після реалізації функції «Построить»

При виборі пункту «О программе», виводиться форма, яка відображає інформацію про програму та її зміст, приклад зображено на рисунку 4.9

Рисунок 4.8 — Вигляд головного вікна програми після вибору пункту «О программе»

ВИСНОВКИ

Протягом роботи над курсовим проектом «Автоматизація побудови діаграм динаміки обсягів промислового виробництва регіонів України» було створено програму, яка дозволяє будувати діаграми виходячи з динаміки обсягів промислового виробництва.

Використовуючи інтегроване середовище програмування Borland Builder C++ 6.0 на мові програмування високого рівня С++.

Програма може бути використана будь-якими особами чи організаціями у яких є потреба у побудові діаграм динаміки обсягів промислового виробництва регіонів України.

Розроблена програма має зручний та зрозумілий інтерфейс для роботи, який відповідає виконуваним функціям.

Розроблений програмний продукт у повному обсязі виконує усі функції, задані у постановці задачі.

ЛІТЕРАТУРА

1 Архангельский, А. Я. Язык С++ Builder. Справочное и методическое пособие. [Текст] / А. Я. Архангельский.М.: Бином, 2008.-942 с.

2 Архангельский, А. Я. Программирование в C++ Builder 6[Текст] / А. Я. Архангельский.М.: Бином, 2003.-1152 с.

ДОДАТОК А

Вхідні дані. Склад контрольного прикладу

ДОДАТОК Б

Структурна схема алгоритму програми

ДОДАТОК В

Текст програми

MainUnit.срр

//—————————————————————————————————————;

#include

#pragma hdrstop

#include «MainUnit.h»

//—————————————————————————————————————;

#pragma package (smart_init)

#pragma resource «*.dfm»

#include

#include

#include «AboutUnit.h»

TMainForm *MainForm;

//—————————————————————————————————————;

__fastcall TMainForm: TMainForm (TComponent* Owner)

: TForm (Owner)

{

}

bool TMainForm: CheckData (AnsiString _year, AnsiString _kind, AnsiString _size, AnsiString _region, AnsiString *err)

{

if (_year=="")

{

*err="Заполните поле Год" ;

return false;

}

if (_kind=="")

{

*err="Заполните поле Вид промышленности" ;

return false;

}

if (_size=="")

{

*err="Заполните поле Объём производства" ;

return false;

}

if (_region=="")

{

*err="Заполните поле Регион" ;

return false;

}

try

{

if (StrToInt (_year)<=0)

{

*err="Год должен быть положительным числом" ;

return false;

}

}

catch (…)

{

*err="Год должен быть целым числом" ;

return false;

}

try

{

if (StrToFloat (_size)<0)

{

*err="Объём производства не может быть отрицательным числом" ;

return false;

}

}

catch (…)

{

*err="Объём производства должен быть вещественным числом" ;

return false;

}

*err="" ;

return true;

}

void FormatGrid (TStringGrid *SG)

{

int i, W=0;

SG->ColCount=4;

for (i=0; iColCount; i++)

SG->Cols[i]->Clear ();

SG->RowCount=2;

SG->Cells[0][0]="Год" ;

SG->Cells[1][0]="Вид промышленности" ;

SG->Cells[2][0]="Объём производства" ;

SG->Cells[3][0]="Регион" ;

SG->ColWidths[0]=70;

SG->ColWidths[1]=200;

SG->ColWidths[2]=200;

for (i=0;iColCount-1;i++)W+=SG->ColWidths[i];

SG->ColWidths[3]=SG->Width — W — 35;

}

//—————————————————————————————————————;

void __fastcall TMainForm: FormCreate (TObject *Sender)

{

FormatGrid (sgData);

}

//—————————————————————————————————————;

void __fastcall TMainForm: bAddClick (TObject *Sender)

{

int p;

AnsiString err;

if (!CheckData (eYear->Text, eKind->Text, eSize->Text, eRegion->Text, &err))

{

MessageBox (0,err.c_str (), «Ошибка», mrOk);

return;

}

if ((((TEdit*)Sender)->Text.Length () < 3) ||(StrToInt (eYear->Text)<1900)||(StrToInt (eYear->Text)>2013)){ MessageBox (0," Некоректная дата" ," Ошибка", mrOk); return; }

p=sgData->RowCount;

for (int i=1;i

if (eRegion->Text==sgData->Cells[3][i])

if (eKind->Text==sgData->Cells[1][i])

if (eYear->Text==sgData->Cells[0][i])

{

MessageBox (0," Такая запись уже присутствует", «Ошибка», mrOk);

return;

}

p=sgData->RowCount;

if (sgData->Cells[0][p-1]=="")

p—;

else

sgData->RowCount++;

sgData->Cells[0][p]=eYear->Text;

sgData->Cells[1][p]=eKind->Text;

sgData->Cells[2][p]=eSize->Text;

sgData->Cells[3][p]=eRegion->Text;

bDel->Enabled=true;

FillRegion (cbRegion, sgData, 3);

}

//—————————————————————————————————————;

void __fastcall TMainForm: bDelClick (TObject *Sender)

{

int p=sgData->Selection.Top, i, j;

if (p<1)

{

MessageBox (0," Выберите данные для удаления", «Ошибка», mrOk);

return;

}

if (sgData->Cells[0][p]=="")

{

MessageBox (0," Данные для удаления не найдены", «Ошибка», mrOk);

return;

}

for (i=p+1; iRowCount; i++)

for (j=0; jColCount; j++)

sgData->Cells[j][i-1]=sgData->Cells[j][i];

for (j=0; jColCount; j++)

sgData->Cells[j][sgData->RowCount-1]="" ;

if (sgData->RowCount>2)

sgData->RowCount—;

else

bDel->Enabled=false;

FillRegion (cbRegion, sgData, 3);

}

//—————————————————————————————————————;

void __fastcall TMainForm: bChangeClick (TObject *Sender)

{

int p;

AnsiString err;

if (!CheckData (eYear->Text, eKind->Text, eSize->Text, eRegion->Text, &err))

{

MessageBox (0,err.c_str (), «Ошибка», mrOk);

return;

}

if ((((TEdit*)Sender)->Text.Length () < 3) ||(StrToInt (eYear->Text)<1900)||(StrToInt (eYear->Text)>2013)){ MessageBox (0," Некоректная дата" ," Ошибка", mrOk); return; }

p=sgData->RowCount;

for (int i=1;i

if (eRegion->Text==sgData->Cells[3][i])

if (eKind->Text==sgData->Cells[1][i])

if (eYear->Text==sgData->Cells[0][i])

if (eSize->Text==sgData->Cells[2][i])

{

MessageBox (0," Такая запись уже присутствует", «Ошибка», mrOk);

return;

}

p=sgData->Selection.Top;

if (p<1)

{

MessageBox (0," Выберите данные для изменения", «Ошибка», mrOk);

return;

}

if (sgData->Cells[0][p]=="")

{

MessageBox (0," Данные для изменения не найдены", «Ошибка», mrOk);

return;

}

sgData->Cells[0][p]=eYear->Text;

sgData->Cells[1][p]=eKind->Text;

sgData->Cells[2][p]=eSize->Text;

sgData->Cells[3][p]=eRegion->Text;

FillRegion (cbRegion, sgData, 3);

}

//—————————————————————————————————————;

int Compare (Elem a, Elem b)

{

if (a.region

if (a.region>b.region) return 1;

if (a.kind

if (a.kind>b.kind) return 1;

if (a.year

if (a.year>b.year) return 1;

if (a.size

if (a.size>b.size) return 1;

return 0;

}

void Sort (Elem *arr, int N, int opt)

{

Elem tmp;

for (int i=0; i

for (int j=i+1; j

if (Compare ((arr)[i],(arr)[j])==opt)

{

tmp=(arr)[i];

(arr)[i]=(arr)[j];

(arr)[j]=tmp;

}

}

void __fastcall TMainForm: MakeChartClick (TObject *Sender)

{

const TColor color[16] = {clRed, clSkyBlue, clGreen, clYellow, clBlue, clWhite, clGray, clPurple,

clNavy, clSilver, clOlive, clLime, clAqua, clTeal, clFuchsia,

clMaroon};

int i, j, p, N, minY, maxY;

Elem *Arr, tmp, *ArrTMP;

AnsiString st = cbRegion->Text, kind="" ;

TBarSeries *T;

if (sgData->Cells[0][1]=="")

{

MessageBox (0," Перед построением графика заполните таблицу с данными", «Ошибка», mrOk);

return;

}

N=sgData->RowCount-1;

Arr = new Elem[N];

for (i=1; i<=N; i++)

{

Arr[i-1]. year = StrToInt (sgData->Cells[0][i]);

Arr[i-1]. kind = sgData->Cells[1][i];

Arr[i-1].size = StrToFloat (sgData->Cells[2][i]);

Arr[i-1]. region = sgData->Cells[3][i];

}

Sort (Arr, N, 1);

i=N;

for (i=N; i>0; i—)

if ((Arr[i]. year==Arr[i-1].year)&&(Arr[i].kind==Arr[i-1].kind)&&(Arr[i].region==Arr[i-1].region)&&(Arr[i].region≠""))

{

Arr[i-1].size+=Arr[i].size;

Arr[i].year=0;

Arr[i].kind="" ;

Arr[i].size=0;

Arr[i].region="" ;

}

Sort (Arr, N, -1);

p=N-1;

while (Arr[p]. region=="")

p—;

p++;

ArrTMP = new Elem[p];

memcpy (ArrTMP, Arr, sizeof (Arr[0])*p);

delete [] Arr;

Arr = new Elem[p];

memcpy (Arr, ArrTMP, sizeof (Arr[0])*p);

N=p;

minY=10 000;

maxY=-1;

for (i=0; i

{

if ((Arr[i]. region==st)&&(minY>Arr[i].year)) minY=Arr[i]. year;

if ((Arr[i]. region==st)&&(maxY

}

Sort (Arr, N, 1);

ChartSize->BackColor = clBtnFace;

ChartSize->BorderStyle = bsNone;

ChartSize->Color = clBtnFace;

ChartSize->Frame->Color = TColor (0×404 080); //свойство Frame определяет рамку вокруг диаграммы

ChartSize->Frame->Style = psSolid;

ChartSize->Title->Text->Clear ();

ChartSize->Title->Text->Add («Объемы производства для региона '» +st+" '"); //Текст подписи можно осуществить через Text

ChartSize->Title->Alignment = taCenter;

ChartSize->Title->Font->Color = clMaroon;

ChartSize->Title->Font->Name = «Arial» ;

ChartSize->Title->Font->Size = 8;

ChartSize->LeftWall->Color = TColor (0×00E8E8F4); //цветовая гамма

ChartSize->BottomWall->Color = clMaroon; //размер стенок

ChartSize->BackWall->Color = clBtnFace;

ChartSize->MarginLeft = 1;

ChartSize->MarginRight = 1;

ChartSize->MarginTop = 0;

ChartSize->MarginBottom = 0;

ChartSize->LeftAxis->LabelsOnAxis = false;

ChartSize->SeriesList->Clear ();

p=0;

T = new TBarSeries (ChartSize);

T->Marks->Visible = false;

T->Title = «Test» ;

for (i=minY; i<=maxY; i++)

T->AddXY (i, 0, IntToStr (i), T->LegendItemColor (0));

bool flag= false;

for (i=0; i

{

if (Arr[i]. region==st)

{

if (kind=="")

{

T->Marks->Visible = false;

T->Title = Arr[i]. kind;

kind=Arr[i].kind;

}

if (Arr[i].kind≠kind)

{

if (!flag) T->AddXY (minY, 0, IntToStr (minY), T->LegendItemColor (p));

if (kind≠"")

ChartSize->AddSeries (T);

kind=Arr[i]. kind;

T = new TBarSeries (ChartSize);

T->Marks->Visible = false;

T->Title = Arr[i]. kind;

flag=false;

}

if (minY==Arr[i].year)flag=true;

T->AddXY (Arr[i].year, Arr[i].size, IntToStr (Arr[i]. year), T->LegendItemColor (p));

}

}

ChartSize->AddSeries (T);

ChartSize->Legend->Visible = true; //Legend — список обозначений на диаграмме

}

void TMainForm: FillRegion (TComboBox *CB, TStringGrid *SG, int p)

{

CB->Items->Clear ();

for (int i=1; iRowCount; i++)

if (CB->Items->IndexOf (SG->Cells[p][i])==-1)

CB->Items->Add (SG->Cells[p][i]);

if (CB->Items->Count>0)

CB->ItemIndex=0;

}

//—————————————————————————————————————;

void __fastcall TMainForm: bSaveClick (TObject *Sender)

{

if (sgData->Cells[0][1]=="")

{

MessageBox (0, «Перед сохранением необходимо заполнить таблицу», «Ошибка», mrOk);

return;

}

if (SaveDialog1->Execute ())

{

TStringList *Table = new TStringList;

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

Table->Add (sgData->Rows[i]->DelimitedText);

Table->SaveToFile (SaveDialog1->FileName);

delete Table;

MessageBox (0," Данные сохранены" ," Информация", mrOk);

}

}

//—————————————————————————————————————;

void __fastcall TMainForm: bLoadClick (TObject *Sender)

{

if (OpenDialog1->Execute ())

{

FormatGrid (sgData);

TStringList *Table = new TStringList;

Table->LoadFromFile (OpenDialog1->FileName);

int N=Table->Count;

for (int i=1; i<=N; i++)

sgData->Rows[i]->DelimitedText = Table->Strings[i-1];

if (N>0)

if (N==1)

sgData->RowCount=2;

else

{

sgData->RowCount=N+1;

bDel->Enabled=true;

}

delete Table;

FillRegion (cbRegion, sgData, 3);

MessageBox (0," Данные загружены" ," Информация", mrOk);

}

}

//—————————————————————————————————————;

void __fastcall TMainForm: sgDataClick (TObject *Sender)

{

int p=sgData->Selection.Top;

eYear->Text = sgData->Cells[0][p];

eKind->Text = sgData->Cells[1][p];

eSize->Text = sgData->Cells[2][p];

eRegion->Text = sgData->Cells[3][p];

}

//—————————————————————————————————————;

void __fastcall TMainForm: AboutClick (TObject *Sender)

{

About_Form->Show ();

}

//—————————————————————————————————————;

void __fastcall TMainForm: eKindKeyPress (TObject *Sender, char &Key)

//—————————————————————————————————————;

void __fastcall TMainForm: eYearKeyPress (TObject *Sender, char &Key)

{

if ((Key >= '0') && (Key < '9') || (Key == VK_BACK)) Key≠0;

else Key=0;

if (Key == VK_BACK) return;

if (((TEdit*)Sender)->Text.Length () > 3) { Key = 0; return; }

}

//—————————————————————————————————————;

void __fastcall TMainForm: eSizeKeyPress (TObject *Sender, char &Key)

(Key == VK_BACK)) Key≠0;

else Key=0;

//—————————————————————————————————————;

void __fastcall TMainForm: eRegionKeyPress (TObject *Sender, char &Key)

(Key<='І')

//—————————————————————————————————————;

MainUnit.h

//—————————————————————————————————————;

#ifndef MainUnitH

#define MainUnitH

//—————————————————————————————————————;

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//—————————————————————————————————————;

struct Elem

{

int year;

double size;

AnsiString kind, region;

};

class TMainForm: public TForm

{

__published: // IDE-managed Components

TStringGrid *sgData;

TEdit *eYear;

TLabel *Label1;

TGroupBox *GroupBox1;

TLabel *Label2;

TEdit *eKind;

TLabel *Label3;

TEdit *eSize;

TLabel *Label4;

TEdit *eRegion;

TButton *bAdd;

TButton *bDel;

TChart *ChartSize;

TButton *bChange;

TComboBox *cbRegion;

TButton *MakeChart;

TLabel *Label5;

TButton *bLoad;

TButton *bSave;

TSaveDialog *SaveDialog1;

TOpenDialog *OpenDialog1;

TButton *About;

void __fastcall FormCreate (TObject *Sender);

void __fastcall bAddClick (TObject *Sender);

void __fastcall bDelClick (TObject *Sender);

void __fastcall bChangeClick (TObject *Sender);

void __fastcall MakeChartClick (TObject *Sender);

void __fastcall bSaveClick (TObject *Sender);

void __fastcall bLoadClick (TObject *Sender);

void __fastcall sgDataClick (TObject *Sender);

void __fastcall AboutClick (TObject *Sender);

void __fastcall eKindKeyPress (TObject *Sender, char &Key);

void __fastcall eYearKeyPress (TObject *Sender, char &Key);

void __fastcall eSizeKeyPress (TObject *Sender, char &Key);

void __fastcall eRegionKeyPress (TObject *Sender, char &Key);

private: // User declarations

bool CheckData (AnsiString _year, AnsiString _kind, AnsiString _size, AnsiString _region, AnsiString *err);

void FillRegion (TComboBox *CB, TStringGrid *SG, int p);

public: // User declarations

__fastcall TMainForm (TComponent* Owner);

};

//—————————————————————————————————————;

extern PACKAGE TMainForm *MainForm;

//—————————————————————————————————————;

AboutUnit.cpp

//—————————————————————————————————————;

#include

#pragma hdrstop

#include «AboutUnit.h»

//—————————————————————————————————————;

#pragma package (smart_init)

#pragma resource «*.dfm»

TAbout_Form *About_Form;

//—————————————————————————————————————;

__fastcall TAbout_Form:TAbout_Form (TComponent* Owner)

: TForm (Owner)

{

}

//—————————————————————————————————————;

AboutUnit.h

//—————————————————————————————————————;

#ifndef AboutUnitH

#define AboutUnitH

//—————————————————————————————————————;

#include

#include

#include

#include

#include

//—————————————————————————————————————;

class TAbout_Form: public TForm

{

__published: // IDE-managed Components

TPanel *Panel1;

TPanel *Panel2;

TLabel *Label1;

private: // User declarations

public: // User declarations

__fastcall TAbout_Form (TComponent* Owner);

};

//—————————————————————————————————————;

extern PACKAGE TAbout_Form *About_Form;

//—————————————————————————————————————;

Показати весь текст
Заповнити форму поточною роботою