| ДОДАТКИ
Додаток 1
Текст тестової програми з коментарями.
#include
#include
#include
#include //підключаємо необхідні бібліотеки
//----------------------------------
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();
} скачати
|