Смекни!
smekni.com

Побудова і використання класів (стр. 5 из 5)

Текст програми з коментарями приведений в Додатку 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: //загальнодоступні дані та методи

intbackc; //колір фону

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; //запам’ятовуємо колір фону

}

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

classfont//другий базовий клас - 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);//прототип конструктора копіювання

voidshow();//прототип метода 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(intper)//описуємо основний конструктор

{

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;//шаг, з яким буде мінятися

//смужка

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

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

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

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

//віконця – defaultcolor

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, "...&bsol;bgi");

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

printf("Progress Bars:"

"&bsol;n1 - Horizontal;&bsol;n2 - Vertical;"

"&bsol;n3 - Round; &bsol;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();

}