Текст програми з коментарями приведений в Додатку 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, "...\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();
}