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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 15.01.2014
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ЗМІСТ

ВСТУП

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<p;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 <vcl.h>

#pragma hdrstop

#include "MainUnit.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

#include <fstream.h>

#include <istream.h>

#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; i<SG->ColCount; 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;i<SG->ColCount-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<p;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; i<sgData->RowCount; i++)

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

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

for(j=0; j<sgData->ColCount; 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<p;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<b.region) return -1;

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

if(a.kind<b.kind) return -1;

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

if(a.year<b.year) return -1;

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

if(a.size<b.size) return -1;

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

return 0;

}

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

{

Elem tmp;

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

for(int j=i+1; j<N; 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=10000;

maxY=-1;

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

{

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

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

}

Sort(Arr,N, 1);

ChartSize->BackColor = clBtnFace;

ChartSize->BorderStyle = bsNone;

ChartSize->Color = clBtnFace;

ChartSize->Frame->Color = TColor(0x00404080); //свойство 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(0x00E8E8F4); //цветовая гамма

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<N; 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; i<SG->RowCount; 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)

{

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

Key!=0;

else Key=0;

}

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

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)

{

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

else Key=0;

}

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

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

{

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

Key!=0;

else Key=0;

}

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

MainUnit.h

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

#ifndef MainUnitH

#define MainUnitH

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Grids.hpp>

#include <Chart.hpp>

#include <ExtCtrls.hpp>

#include <Series.hpp>

#include <TeEngine.hpp>

#include <TeeProcs.hpp>

#include <Dialogs.hpp>

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

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 <vcl.h>

#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 <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

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

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;

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

Размещено на Allbest.ru


Подобные документы

  • Дослідження динамічних рядів методом найменших квадратів та ковзаючого середнього. Опис логічної структури програми. Стандартні методи та елементи середовища програмування Borland Delphi 2007. Опис функцій складових частин програми і зв'язків між ними.

    курсовая работа [135,3 K], добавлен 01.04.2016

  • Розробка та налагодження програми "Заробітна плата" на мові високого рівня С++ для комп'ютерів з операційною системою Windows 7. Текстуальний опис алгоритму. Створення UML-діаграми та обробка інформації з бази даних. Інструкція по роботі з програмою.

    курсовая работа [698,4 K], добавлен 14.10.2012

  • Головні принципи візуального програмування, опис компонентів Delphi, використаних при розробці проекту. Опис програми-додатку "Психологічний тест" та список дій користувача. Алгоритм роботи програми, її форма та ієрархія. Опис графічного інтерфейсу.

    курсовая работа [1,2 M], добавлен 08.06.2010

  • Розробка програми на мові програмування С++ в середовищі Borland C++ Builder, яка надає можливість відкривати певну програму в певний час або через певний час. Проектування блок-схеми та інтерфейсу користувача. Підключення бібліотек, опис змінних.

    дипломная работа [90,0 K], добавлен 21.01.2013

  • Огляд середовища програмування Delphi виробництва корпорації Inprise. Засоби масштабування для побудови баз даних. Візуальна побудова додатків із програмних прототипів. Об’єктно-орієнтована модель компонентів. Опис структури програми, компонентів OpenGL.

    курсовая работа [1,9 M], добавлен 09.06.2010

  • Дослідження середовища візуального програмування Delphi. Вивчення процесу створення навчальної програми "Електронний словник". Опис графічного інтерфейсу. Характеристика структури та основних процедур даної програми. Аналіз роботи з програмним кодом.

    курсовая работа [831,2 K], добавлен 01.03.2014

  • Ігрові програми та BORLAND C++ BUILDER, застосованна для їх створення. Основні прийоми, застосовувані при проектуванні користувальницького інтерфейсу. Середовище розробки. Приклад використання видимих і невидимих компонентів. Прототип оброблювача подій.

    курсовая работа [611,9 K], добавлен 24.03.2009

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

    дипломная работа [1,1 M], добавлен 28.04.2010

  • Розробка, налагоджування, тестування і документування програми на мові високого рівня С++ при рішенні на комп'ютері прикладної інженерної задачі. Використання принципів модульного і структурного програмування, зображення алгоритму у вигляді блок-схеми.

    курсовая работа [1,1 M], добавлен 07.08.2013

  • Аналіз методів і засобів вирішення задачі автоматизації робочого місця працівника бібліотеки. Розробка логічної моделі бази даних "Бібліотека", інтерфейсу програми. Створення візуального додатку, що дозволяє переглядати, додавати інформацію в базу даних.

    курсовая работа [2,8 M], добавлен 06.02.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.