на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Побудова і використання класів
p align="left">Заповнення круга відповідним кольором в класі roundBar відбувається за допомогою функції pieslice модуля graphics.h. Ця функція дозволяє намалювати зафарбований сектор круга. Аналогічно організовано клас ringBar, тільки всередині круга розташований ще один зафарбований круг меншого радіуса.

2.4 Методи тестування програми

Розглянемо тіло основної процедури та методи тестування програми. На початку йде ініціалізація графічного режиму (в режимі VGA 640x480x16). Далі користувачеві надається можливість вибрати один з чотирьох PrograssBar. Після вибору на екрані з'являється віконце смужки прогресу. З цього моменту користувач може двигати її в різні сторони екрана, користуючись кнопками “a”,”s”,”d”,”w”. Закінчення руху позначається натисканням кнопки “r”. Недоліком такої організації руху є те, що щоб перемістити об'єкт треба 2 рази натиснути на відповідну кнопку. Це трапилося внаслідок подвійного використання функції getch() - запиту символу з клавіатури. Перший раз йде перевірка, чи є нажата кнопка “r”, а другий раз ідентифікує саму нажату кнопку та виконує відповідні дії.

Нехай вибрано варіант 1 - горизонтальна смужка прогресу. Тоді йде ініціалізація самого об'єкту, використовуючи основний конструктор horBar. Далі йде створення та ініціалізація такого ж самого об'єкту за допомогою конструктора копіювання та використання методів my_color та my_font базових класів. За допомогою метода size вибирається необхідний розмір віконця смужки прогресу. Далі, використовуючи метод show, смужка прогресу починає свій рух. Після зупинки об'єкт «горизонтальна смужка прогресу» знищується за допомогою деструктора.

Аналогічно тестується вертикальна смужка прогресу - варіант 2 (клас vertBar), тільки конструктор копіювання не використовується.

Інший спосіб ініціалізації та користування об'єктів описаний при виклику смужки прогресу в вигляді круга (roundBar). Тут створюється спочатку сам об'єкт, потім створюється вказівник на нього за тим же типом (roundBar). Далі можна використовувати методи класу, звертаючись до них через вказівник. Тобто, тут використовується динамічна пам'ять для роботи з класом, його методами та даними.

Тестування класу ringBar проводилося як і для класів horBar та vertBar.

В результаті отримали бажані результати. При створенні об'єктів horBar та vertBar на екрані з'являється кероване віконце (горизонтальне та вертикальне відповідно) смужки прогресу, і після натискання кнопки “r” йде рівномірне заповнення віконця смужкою відповідного кольору. Паралельно йде відлік виконаного обсягу роботи у відсотках в верхній частині екрану.

При використанні об'єктів roundBar та ringBar на екрані з'являються відповідно керовані коло та кільце, і після натискання кнопки “r” йде рівномірне обертання радіуса з паралельним заповненням об'єктів певним кольором. Особливістю використання ringBar є те, що за рахунок різних частот (системна обумовленість) появи нового стану смужки прогресу та внутрішнього круга, іноді можна помітити внутрішню частину віконця (тобто, новий стан смужки прогресу вже є, а круга, який закриває внутрішню частину віконця, немає). Такий процес займає десяті долі секунди.

2.5 Результати виконання програми

У відповідності до обраних варіантів Progress Bar приводимо результати виконання програми.

1. Горизонтальний Progress Bar

2. Вертикальний Progress Bar

3. Круговий Progress Bar

4. Кільцевий Progress Bar

Текст програми з коментарями приведений в Додатку 1.

3. Висновки

В ході виконання курсової роботи були отримані наступні результати.

Розроблено клас classProgressBar, який призначений для базування на ньому ієрархії класів з метою створення об'єктів типу «смужка прогресу» різних форм. Розроблений клас включає два компоненти-дані та один віртуальний компонент-метод, серед яких один компонент-дане є захищеним, а всі інші - загальнодоступними.

На основі розробленого класу classProgressBar побудована ієрархія класів horBar, vertBar, roundBar та ringBar.

Результати тестування підтвердили працездатність і ефективність використання об'єктів, створюваних на основі розробленого класу.

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

4. Література

1. Шилдт Г. Самоучитель С++. - С.-Пб.: БХВ-Петербург, 2003.

2. під редакцією О.Д. Хомоненка. Программирование на С++. - С.-Пб.: Корона-принт, 1999.

3. Подбельський В.В. Мова С++. - М.: Фінанси та статистика, 2003.

4. Лаптєв В.В. С++. Експрес-курс. - С.-Пб.: БХВ-Петербург, 2004.

5. Дейтел Х., Дейтел П. Як програмувати на С++. - М.: ЗАТ«Видавництво БІНОМ», 2003.

5. Додатки

Додаток 1

Текст тестової програми з коментарями.

#include <conio.h>

#include <graphics.h>

#include <dos.h>

#include <stdio.h> //підключаємо необхідні бібліотеки

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

class classProgressBar //клас classProgressBar

{

protected:

int fill //захищена змінна fillc - колір заповнення

public: //загальнодоступні дані та методи

int backc; //колір фону

virtual void my_colors(int text, int back, int fillcolor);

//прототип віртуальної функції my_colors

};

//опис віртуальної функції заміни кольору

void classProgressBar::my_colors(int text, int back, int fillcolor)

{

setcolor(text); //вибір кольору шрифту

setbkcolor(back); //вибір кольору фону

fillc = fillcolor; //запам'ятовуємо колір заповнення

backc = back; //запам'ятовуємо колір фону

}

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

class font //другий базовий клас - font

{

public:

void my_font(int font); //прототип метода my_font

};

void font::my_font(int font) //описання методу - вибір шрифту

{

settextstyle(font, 0, 0);

}

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

//клас «горизонтальна смужка»

class horBar:public classProgressBar, public font

{

protected:

int x1, y1, x2, y2, p;

public:

horBar(int p); //конструктор. р - обсяг виконаної роботи

//прототип функції - вибір розміру

void size(int xt, int yt, int xb, int yb);

horBar(horBar &h); //прототип конструктора копіювання

void show(); //прототип метода show

//перевантаження віртуальної функції

void my_colors(int text, int back, int fillcolor)

{

setcolor(text); //вибираємо колір тексту

setbkcolor(back); //вибираємо колір фону

fillc = fillcolor;

backc = back; //запам'ятовуємо кольори

};

~horBar(); //прототип деструктора

};

horBar::horBar(horBar &h) //описуємо конструктор копіювання

{

p = h.p;

}

horBar::~horBar(){} //описуємо деструктор

horBar::horBar(int per) //описуємо основний конструктор

{

p = per; //р - обсяг виконаної роботи

}

//метод size для вибору параметрів віконця

void horBar::size(int xt, int yt, int xb, int yb)

{

x1 = xt;

y1 = yt;

x2 = xb;

y2 = yb;

}

//метод show - показуємо об'єкт

void horBar::show()

{

float del = (x2 - x1) / 100; //шаг, з яким буде мінятися

//смужка

int defc = 5, step = 20; //колір рамки віконця та шаг

//переміщення

char x = 40, y = 1; //координати виводу відсотків

setcolor(defc); //встановлюємо колір рамки

//віконця - default color

rectangle(x1, y1, x2, y2); //малюємо рамку

while (getch() != 'r') //організовуємо рух

{

switch(getch())

{

case 'd': setcolor(backc); //малюємо об'єкт кольором фону

//на його старому місці (стираємо)

rectangle (x1, y1, x2, y2);

setcolor(defc);

x1 = x1 + step;

x2 = x2 + step;

rectangle (x1, y1, x2, y2); //малюємо новий об'єкт

//на новому місці

break;

case 'a': setcolor(backc);

rectangle (x1, y1, x2, y2);

setcolor(defc);

x1 = x1 - step;

x2 = x2 - step;

rectangle (x1, y1, x2, y2);

break;

case 's': setcolor(backc);

rectangle (x1, y1, x2, y2);

setcolor(defc);

y1 = y1 + step;

y2 = y2 + step;

rectangle (x1, y1, x2, y2);

break;

case 'w': setcolor(backc);

rectangle (x1, y1, x2, y2);

setcolor(defc);

y1 = y1 - step;

y2 = y2 - step;

rectangle (x1, y1, x2, y2);

break;

};

}

setcolor(fillc);

for (int w = 1; w < p + 1; w++)

{

if ((w == 25)||(w == 50)||(w == 75)||(w == 100))

{

sound(550);

delay(300);

nosound(); //організовуємо звук

}

if (w < p)

{

gotoxy (x, y);

printf ("%i%", w + 1);

line(x1 + 1, y1 + 1, x1 + 1, y2 - 1);

delay(100);

x1 = x1 + del;

}

}

getch();

}

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

class vertBar: public classProgressBar, public font

{

protected:

int x1, y1, x2, y2, p;

friend void my_size(vertBar *t, int xt, int yt, int xb, int yb);

public:

vertBar(int p);

void size(int xt, int yt, int xb, int yb);

void show();

~vertBar();

};

vertBar::~vertBar(){}

vertBar::vertBar(int per)

{

p = per;

}

void vertBar::size(int xt, int yt, int xb, int yb)

{

x1 = xt;

y1 = yt;

x2 = xb;

y2 = yb;

}

void vertBar::show()

{

float del = (y2 - y1) / 100;

int defc = 5;

char x = 40, y = 1, step = 20;

setcolor(defc);

rectangle(x1, y1 - 1, x2, y2);

while (getch() != 'r')

{

switch(getch())

{

case 'd': setcolor(backc);

rectangle (x1, y1 - 1, x2, y2);

setcolor(defc);

x1 = x1 + step;

x2 = x2 + step;

rectangle (x1, y1 - 1, x2, y2);

break;

case 'a': setcolor(backc);

rectangle (x1, y1 - 1, x2, y2);

setcolor(defc);

x1 = x1 - step;

x2 = x2 - step;

rectangle (x1, y1 - 1, x2, y2);

break;

case 's': setcolor(backc);

rectangle (x1, y1 - 1, x2, y2);

setcolor(defc);

y1 = y1 + step;

y2 = y2 + step;

rectangle (x1, y1 - 1, x2, y2);

break;

case 'w': setcolor(backc);

rectangle (x1, y1 - 1, x2, y2);

setcolor(defc);

y1 = y1 - step;

y2 = y2 - step;

rectangle (x1, y1 - 1, x2, y2);

break;

default: putch('q');

};

}

setcolor(fillc);

for (int w = 1; w < p + 2; w++)

{

if ((w == 26)||(w == 51)||(w == 76)||(w == 101))

{

sound(550);

delay(300);

nosound();

}

if (w < p + 1)

{

gotoxy(x, y);

printf("%i%", w);

line(x1 + 1, y2 - 1, x2 - 1, y2 - 1);

delay(100);

y2 = y2 - del;

}

}

getch();

}

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

void my_size(vertBar *t, int xt, int yt, int xb, int yb)

{

t -> x1 = xt;

t -> y1 = yt;

t -> x2 = xb;

t -> y2 = yb;

}

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

class roundBar: public classProgressBar, public font

{

protected:

int x0, y0, r, p, defc;

public:

void size(int x, int y);

void size(int rad);

void show();

roundBar(int per);

~roundBar();

};

roundBar::~roundBar(){}

void roundBar::size(int x, int y)

{

x0 = x;

y0 = y;

}

void roundBar::size(int rad)

{

r = rad;

}

roundBar::roundBar(int per)

{

p = per;

}

void roundBar::show()

{

int x = 40, y = 1, step = 20;

setcolor(5);

circle(x0, y0, r);

backc = 0;

while (getch() != 'r')

{

switch (getch())

{

case 'd': setcolor(backc);

circle(x0, y0, r);

x0 = x0 + step;

setcolor(5);

circle (x0, y0, r);

break;

case 'a': setcolor(backc);

circle(x0, y0, r);

x0 = x0 - step;

setcolor(5);

circle (x0, y0, r);

break;

case 's': setcolor(backc);

circle(x0, y0, r);

y0 = y0 + step;

setcolor(5);

circle (x0, y0, r);

break;

case 'w': setcolor(backc);

circle(x0, y0, r);

y0 = y0 - step;

setcolor(5);

circle (x0, y0, r);

break;

}

}

for (int j = 0; j < p + 1; j++)

{

if ((j == 26) || (j == 51) || (j == 76) || (j == 100))

{

sound(550);

delay(200);

nosound();

}

gotoxy (x, y);

printf ("%i%", j);

pieslice(x0, y0, 0, j * 3.6, r);

delay(300);

}

getch();

}

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

class ringBar: virtual public roundBar

{

public:

ringBar(int per): roundBar(per)

{

p = per;

};

void show();

void operator + (ringBar&);

};

void ringBar::operator + (ringBar &c)

{

c.r = c.r + r;

}

void ringBar::show()

{

int x = 40, y = 1, step = 20;

setcolor(5);

circle(x0, y0, r);

circle(x0, y0, r / 1.5);

while (getch() != 'r')

{

switch (getch())

{

case 'r': break;

case 'd': setcolor(backc);

circle(x0, y0, r);

circle(x0, y0, r / 1.5);

x0 = x0 + step;

setcolor(5);

circle(x0, y0, r);

circle(x0, y0, r / 1.5);

break;

case 'a': setcolor(backc);

circle(x0, y0, r);

circle(x0, y0, r / 1.5);

x0 = x0 - step;

setcolor(5);

circle (x0, y0, r);

circle(x0, y0, r / 1.5);

break;

case 's': setcolor(backc);

circle(x0, y0, r);

circle(x0, y0, r / 1.5);

y0 = y0 + step;

setcolor(5);

circle (x0, y0, r);

circle(x0, y0, r / 1.5);

break;

case 'w': setcolor(backc);

circle(x0, y0, r);

circle(x0, y0, r / 1.5);

y0 = y0 - step;

setcolor(5);

circle (x0, y0, r);

circle(x0, y0, r / 1.5);

break;

}

}

for (int j = 0; j < p + 1; j++)

{

if ((j == 26) || (j == 51) || (j == 76) || (j == 100))

{

sound(550);

delay(200);

nosound();

}

gotoxy (x, y);

printf ("%i%", j);

pieslice(x0, y0, 0, j * 3.6, r);

setfillstyle(0, 0);

fillellipse(x0, y0, r / 1.5, r / 1.5);

setfillstyle(1, 1);

delay(300);

}

getch();

}

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

void main()

{

clrscr();

int gd = VGA, gm = 2;

initgraph(&gd, &gm, "...\\bgi");

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

printf("Progress Bars:"

"\n1 - Horizontal;\n2 - Vertical;"

"\n3 - Round; \n4 - Ring.");

switch(getch())

{

case '1': horBar a(100);

horBar a1 = a;

a1.my_colors(1, 0 ,2);

a1.my_font(4);

a1.size(140, 140, 240, 170);

a1.show();

a1.horBar::~horBar();

break;

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

case '2': vertBar b = vertBar(100);

b.my_colors(1, 0 ,2);

b.my_font(4);

my_size(&b, 140, 140, 190, 240);

b.show();

b.vertBar::~vertBar();

break;

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

case '3': roundBar c(100);

roundBar *k;

k = &c;

k -> size(150, 150);

k -> size(100);

(*k).show();

c.roundBar::~roundBar();

break;

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

case '4': ringBar d(5);

d.size(150, 150);

d.size(100);

d.show();

break;

default: gotoxy (1, 6);

printf ("Choose 1, 2, 3, or 4 !!!");

getch();

}

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

closegraph();

}

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.