Розробка програми для відображення динамічної мнемосхеми насосної станції підкачки
Вступ
Для закріплення здобутих теоретичних знань, застосування їх при вирішенні питань виробничого характеру, а також з метою набуття навиків по створенню програмного забезпечення , виконується курсова робота з дисципліни “Програмування та алгоритмічні мови” . В курсовій роботі необхідно розробити програму на мові програмування C++,яка б показувала відображення динамічної мнемосхеми насосної станції підкачки.
Задача .
Скласти на одній з алгоритмічних мов програму,яка б відображувала графічно динамічну мнемосхему насосної станції підкачки (мал.1) і працювала з різними даними.
мал.1
Текст програми.
//-------------Оголошення бiблiотек---------------------------------
#include
#include
#include
#include
#include
#define PIXEL_COUNT 10000
#define DELAY_TIME 0
//-------------Пiдпрограма,для побудови схеми------------------------
void sxema(void)
{ int gdriver=DETECT,gmode,errorcode;
initgraph(&gdriver,&gmode,"c:\\bcpp\\bgi");
errorcode=graphresult();
if(errorcode !=grOk)
{
printf("Помилка графiчного режиму типу:%s\n",grapherrormsg(errorcode));
printf("Натиснiть будь-яку клавiшу для виходу");
getch();
exit(1);
}
setcolor(2); //Задання кольору
rectangle(0,360,350,390); //будуе прямокутник
rectangle(0,390,350,430);
setfillstyle(7,6); //стиль заповнення
floodfill(141,361,2); //координати простору,який потрiбно заповнити
setfillstyle(1,1);
floodfill(141,391,2);
setcolor(2);
line(410,390,630,390); //будуе лiнiю
line(410,200,410,390);
line(410,200,406,210);
line(410,200,414,210);
line(620,386,630,390);
line(620,394,630,390);
setcolor(10);
outtextxy(470,35,"Графiк"); //виводить на екран текст
setcolor(15);
line(425,70,435,70);
outtextxy(440,67,"H1(перший насос)");
setcolor(3);
rectangle(410,65,420,75);
setfillstyle(1,3);floodfill(411,70,3);
setcolor(15);
line(425,90,435,90);
outtextxy(440,87,"H2(другий насос)");
setcolor(4);
rectangle(410,85,420,95);
setfillstyle(1,4);floodfill(411,90,4);
setcolor(15);
line(425,110,435,110);
outtextxy(440,107,"H3(третiй насос)");
setcolor(5);
rectangle(410,105,420,115);
setfillstyle(1,5);floodfill(411,110,5);
setcolor(15);
line(425,130,435,130);
outtextxy(440,127,"H4(четвертий насос)");
setcolor(6);
rectangle(410,125,420,135);
setfillstyle(1,6);floodfill(411,130,6);
setcolor(10);
outtextxy(70,65,"Схема насосноi станцii");
setcolor(12);
outtextxy(390,200,"V");
outtextxy(625,375,"t");
//-----------Шкала----------------------------------------------------
line(408,355,412,355);
outtextxy(380,350,"100");
line(408,322,412,322);
outtextxy(380,315,"200");
line(408,289,412,289);
outtextxy(380,285,"300");
line(408,256,412,256);
outtextxy(380,251,"400");
//---------------<1>НАСОС--------------------------------------------
setcolor(6);
outtextxy(50,200,"M1");
outtextxy(50,250,"H1");
setcolor(2);
line(30,85,30,110);
line(25,110,35,110);
line(25,110,35,130);
line(35,110,25,130);
line(25,130,35,130);
line(30,130,30,150);
line(25,150,35,150);
line(25,150,35,170);
line(35,150,25,170);
line(25,170,35,170);
line(30,170,30,230);
line(40,233,46,227);
line(43,236,50,229);
circle(53,222,8);
circle(30,245,15);
line(30,260,30,290);
line(24,290,36,290);
line(24,320,36,320);
line(24,290,36,320);
line(36,290,24,320);
line(30,320,30,360);
//---------------<2>НАСОС--------------------------------------------
setcolor(6);
outtextxy(130,200,"M2");
outtextxy(130,250,"H2");
setcolor(2);
line(110,85,110,110);
line(105,110,115,110);
line(105,110,115,130);
line(115,110,105,130);
line(105,130,115,130);
line(110,130,110,150);
line(105,150,115,150);
line(115,150,105,170);
line(105,150,115,170);
line(105,170,115,170);
line(110,170,110,230);
line(120,233,126,227);
line(123,236,130,229);
circle(133,222,8);
circle(110,245,15);
line(110,260,110,290);
line(104,290,116,290);
line(104,320,116,320);
line(104,290,116,320);
line(116,290,104,320);
line(110,320,110,360);
//---------------<3>НАСОС--------------------------------------------
setcolor(6);
outtextxy(210,200,"M3");
outtextxy(210,250,"H3");
setcolor(2);
line(190,85,190,110);
line(185,110,195,110);
line(185,110,195,130);
line(195,110,185,130);
line(185,130,195,130);
line(190,130,190,150);
line(185,150,195,150);
line(195,150,185,170);
line(185,150,195,170);
line(185,170,195,170);
line(190,170,190,230);
line(200,233,206,227);
line(203,236,210,229);
circle(213,222,8);
circle(190,245,15);
line(190,260,190,290);
line(184,290,196,290);
line(184,320,196,320);
line(184,290,196,320);
line(196,290,184,320);
line(190,320,190,360);//---------------<4>НАСОС--------------------------------------------
setcolor(6);
outtextxy(290,200,"M4");
outtextxy(290,250,"H4");
setcolor(2);
line(270,85,270,110);
line(265,110,275,110);
line(265,110,275,130);
line(275,110,265,130);
line(265,130,275,130);
line(270,130,270,150);
line(265,150,275,150);
line(275,150,265,170);
line(265,150,275,170);
line(265,170,275,170);
line(270,170,270,230);
line(280,233,286,227);
line(283,236,290,229);
circle(293,222,8);
circle(270,245,15);
line(270,260,270,290);
line(264,290,276,290);
line(264,320,276,320);
line(264,290,276,320);
line(276,290,264,320);
line(270,320,270,360);
setlinestyle(0,0,3); //стиль лiнii
line(30,85,330,85);
setfillstyle(1,2);floodfill(30,169,2);
setfillstyle(1,2);floodfill(110,169,2);
setfillstyle(1,2);floodfill(190,169,2);
setfillstyle(1,2);floodfill(270,169,2);
}
void Men(void);
void *er;
int ze;
//------------Пiдпрограма для автоматичного режиму------------------------------
float avtomat(void)
{ int i,j,k,l;
float N1,N2,N3,N4;
int gdriver=DETECT,gmode,errorcode;
initgraph(&gdriver,&gmode,"c:\\bcpp\\bgi");
errorcode=graphresult();
if(errorcode !=grOk)
{
printf("Помилка графiчного режиму типу:%s\n",grapherrormsg(errorcode));
printf("Натиснiть будь-яку клавiшу для виходу");
getch();
exit(1);
}
N1=90; //Присвоюемо змiнним значення
N2=185;
N3=278;
N4=392;
sxema();
//Закрашуе коло червоним кольором(включаються 1 i 3 насоси).
setfillstyle(1,4);floodfill(30,245,2);
setfillstyle(1,4);floodfill(190,245,2);
//Цикл,який будуе на графiку лiнiю 1-го насоса
for(i=389;i>389-N1/3;i--)
{setcolor(3);
line(420,i,432,i);
delay(100); //Затримка
}
//Цикл,який будуе на графiку лiнiю 3-го насоса
for(j=389;j>389-N3/3;j--)
{setcolor(5);
line(432,j,444,j);delay(100);
}
//Закрашуе коло чорним кольором(виключаються 1 i 3 насоси).
setfillstyle(1,0);floodfill(30,245,2);
setfillstyle(1,0);floodfill(190,245,2);
delay(100);
//Закрашуе коло червоним кольором(включаються 2 i 4 насоси).
setfillstyle(1,4);floodfill(110,245,2);
setfillstyle(1,4);floodfill(270,245,2);
//Цикл,який будуе на графiку лiнiю 2-го насоса
for(j=389;j>389-N2/3;j--)
{setcolor(4);
line(444,j,456,j);delay(100);
}
//Цикл,який будуе на графiку лiнiю 4-го насоса
for(j=389;j>389-N4/3;j--)
{setcolor(6);
line(456,j,468,j);delay(100);
}
//Закрашуе коло чорним кольором(виключаються 2 i 4 насоси).
setfillstyle(1,0);floodfill(110,245,2);
setfillstyle(1,0);floodfill(270,245,2);
delay(100);
//Закрашуе коло червоним кольором(включаються 1 i 4 насоси).
setfillstyle(1,4);floodfill(30,245,2);
setfillstyle(1,4);floodfill(270,245,2);
for(i=389;i>389-N1/3;i--)
{setcolor(3);
line(468,i,480,i);delay(100);
}
for(j=389;j>389-N4/3;j--)
{setcolor(6);
line(480,j,492,j);delay(100);
}
//Закрашуе коло чорним кольором(виключаються 1 i 4 насоси).
setfillstyle(1,0);floodfill(30,245,2);
setfillstyle(1,0);floodfill(270,245,2);
delay(100);
//Закрашуе коло червоним кольором(включаються 2 i 3 насоси).
setfillstyle(1,4);floodfill(110,245,2);
setfillstyle(1,4);floodfill(190,245,2);
for(j=389;j>389-N2/3;j--)
{setcolor(4);
line(492,j,504,j);delay(100);
}
for(j=389;j>389-N3/3;j--)
{setcolor(5);
line(504,j,516,j);delay(100);
}
//Закрашуе коло чорним кольором(виключаються 2 i 3 насоси).
setfillstyle(1,0);floodfill(110,245,2);
setfillstyle(1,0);floodfill(190,245,2);
delay(100);
//Закрашуе коло червоним кольором(включаються 1 i 2 насоси).
setfillstyle(1,4);floodfill(30,245,2);
setfillstyle(1,4);floodfill(110,245,2);
for(i=389;i>389-N1/3;i--)
{setcolor(3);
line(516,i,528,i);delay(100);
}
for(j=389;j>389-N2/3;j--)
{setcolor(4);
line(528,j,540,j);delay(100);
}
//Закрашуе коло чорним кольором(виключаються 1 i 2 насоси).
setfillstyle(1,0);floodfill(30,245,2);
setfillstyle(1,0);floodfill(110,245,2);
delay(100);
//Закрашуе коло червоним кольором(включаються 3 i 4 насоси).
setfillstyle(1,4);floodfill(190,245,2);
setfillstyle(1,4);floodfill(270,245,2);
for(j=389;j>389-N3/3;j--)
{setcolor(5);
line(540,j,552,j);delay(100);
}
for(j=389;j>389-N4/3;j--)
{setcolor(6);
line(552,j,564,j);delay(100);
}
//Закрашуе коло чорним кольором(виключаються 3 i 4 насоси).
setfillstyle(1,0);floodfill(190,245,2);
setfillstyle(1,0);floodfill(270,245,2);
getch();
return(0);
}
//------------Пiдпрограма для ручного режиму------------------------------
float ruchnuy_regum(void)
{ int i,j,k,l;
float N1,N2,N3,N4,voda;
int gdriver=DETECT,gmode,errorcode;
initgraph(&gdriver,&gmode,"c:\\bcpp\\bgi");
errorcode=graphresult();
if(errorcode !=grOk)
{printf("Помилка графiчного режиму типу:%s\n",grapherrormsg(errorcode));
printf("Натиснiть будь-яку клавiшу для виходу");
getch();
exit(1);
}
restorecrtmode(); //вихiд з графiчного режиму
printf("\n Введiть кiлькiсть кубiчних метрiв води,"); //виводить на екран текст
printf("\n яку будуть викачувати насоси при включеннi:");
H1:
printf("\n H1(max:100)=");
scanf("%f",&N1);
if(N1>100)goto H1; //Умова,при якiй потрiбно буде ввести нове значення
//printf("\n Буде велике навантаження на насос");
else
{H2: printf(" H2(max:200)=");
scanf("%f",&N2);}
if(N2>200)goto H2;
else
{H3: printf(" H3(max:300)=");
scanf("%f",&N3);}
if(N3>300)goto H3;
else
{H4: printf(" H4(max:400)=");
scanf("%f",&N4);}
if(N4>400)goto H4;
voda=(N1+N2+N3+N4)*3;
printf("\n Буде викачано %.f кубiчних метрiв",voda);
getch();
clrscr();
setgraphmode(getgraphmode());//вихiд в графiчний режим
sxema();
setfillstyle(1,4);floodfill(30,245,2);
setfillstyle(1,4);floodfill(190,245,2);
for(i=389;i>389-N1/3;i--)
{setcolor(3);
line(420,i,432,i);delay(100);
}
for(j=389;j>389-N3/3;j--)
{setcolor(5);
line(432,j,444,j);delay(100);
}
setfillstyle(1,0);floodfill(30,245,2);
setfillstyle(1,0);floodfill(190,245,2);
delay(100);
setfillstyle(1,4);floodfill(110,245,2);
setfillstyle(1,4);floodfill(270,245,2);
for(j=389;j>389-N2/3;j--)
{setcolor(4);
line(444,j,456,j);delay(100);
}
for(j=389;j>389-N4/3;j--)
{setcolor(6);
line(456,j,468,j);delay(100);
}
setfillstyle(1,0);floodfill(110,245,2);
setfillstyle(1,0);floodfill(270,245,2);
delay(100);
setfillstyle(1,4);floodfill(30,245,2);
setfillstyle(1,4);floodfill(270,245,2);
for(i=389;i>389-N1/3;i--)
{setcolor(3);
line(468,i,480,i);delay(100);
}
for(j=389;j>389-N4/3;j--)
{setcolor(6);
line(480,j,492,j);delay(100);
}
setfillstyle(1,0);floodfill(30,245,2);
setfillstyle(1,0);floodfill(270,245,2);
delay(100);
setfillstyle(1,4);floodfill(110,245,2);
setfillstyle(1,4);floodfill(190,245,2);
for(j=389;j>389-N2/3;j--)
{setcolor(4);
line(492,j,504,j);delay(100);
}
for(j=389;j>389-N3/3;j--)
{setcolor(5);
line(504,j,516,j);delay(100);
}
setfillstyle(1,0);floodfill(110,245,2);
setfillstyle(1,0);floodfill(190,245,2);
delay(100);
setfillstyle(1,4);floodfill(30,245,2);
setfillstyle(1,4);floodfill(110,245,2);
for(i=389;i>389-N1/3;i--)
{setcolor(3);
line(516,i,528,i);delay(100);
}
for(j=389;j>389-N2/3;j--)
{setcolor(4);
line(528,j,540,j);delay(100);
}
setfillstyle(1,0);floodfill(30,245,2);
setfillstyle(1,0);floodfill(110,245,2);
delay(100);
setfillstyle(1,4);floodfill(190,245,2);
setfillstyle(1,4);floodfill(270,245,2);
for(j=389;j>389-N3/3;j--)
{setcolor(5);
line(540,j,552,j);delay(100);
}
for(j=389;j>389-N4/3;j--)
{setcolor(6);
line(552,j,564,j);delay(100);
}
setfillstyle(1,0);floodfill(190,245,2);
setfillstyle(1,0);floodfill(270,245,2);
getch();
return(0);
}
//---------Головна програма--------------------------------------------
void main(void)
{ int STEP=85;
char c;
int X,y,q=1;
int gdriver=DETECT,gmode,errorcode;
initgraph(&gdriver,&gmode,"c:\\bcpp\\bgi");
errorcode=graphresult();
if(errorcode !=grOk)
{
printf("Помилка графiчного режиму типу:%s\n",grapherrormsg(errorcode));
printf("Натиснiть будь-яку клавiшу для виходу");
getch();
exit(1);
}
//-------------Створення меню---------------------------------------
meny:
q=1;
Men();
X=160;
y=90;
setfillstyle(1,8);
setcolor(10);
rectangle(220,100,370,130);floodfill(222,110,10);
rectangle(220,185,370,215);floodfill(222,192,10);
rectangle(220,270,370,300);floodfill(222,290,10);
outtextxy(224, 114, "Автоматичний режим");
outtextxy(248,197,"Ручний режим");
outtextxy(278,283,"Вихiд");
do
{
//putimage(X+185,y-30,er,XOR_PUT);
putimage(X,y-30,er,XOR_PUT);
c=getch();
//putimage(X+185,-30,er,XOR_PUT);
putimage(X,y-30,er,XOR_PUT);
switch(c)
{
case 80:y+=STEP;q++;if(y==345){y=90 ;q=1;}break;
case 72: y-=STEP;q--;if(y==5){y=260;q=3;}break;
case 13:
//Якщо в меню буде вибраний третiй пункт,то здiйсниться вихiд з програми
if(q==3)
{closegraph();}
//Якщо в меню буде вибраний другий пункт,то вiдбудеться запуск пiдпрограми
// з ручним режимом
if(q==2)
{ ruchnuy_regum();
clrscr();
setgraphmode(getgraphmode());
goto meny;
}
//Якщо в меню буде вибраний перший пункт,то вiдбудеться запуск пiдпрограми
// з атоматичним режимом
if(q==1)
{avtomat();
clrscr();
setgraphmode(getgraphmode());
goto meny;
}}}
while(c!=27);
}
//-------Пiдпрограма,яка будуе хлопчика---------------------------------
void Men(void )
{setcolor(14);
circle(100,100,8);
line(100,108,100,123);
line(94,111,100,117);line(100,117,106,111);
line(100,123,94,130);
line(100,123,106,130);
line(97,98,97,98);
line(103,98,103,98);
line(100,100,100,102);
arc(100,105,180,0,1);
line(94,89,96,92);
line(104,92,106,89);
line(100,92,100,88);
setfillstyle(1,4);floodfill(102,102,14);
rectangle(90,99,92,101);
rectangle(108,99,110,101);
//setcolor(4);
//fillellipse(100,100,15,5);
ze=imagesize(50,50,150,150);
er=malloc(ze);
getimage(58,58,152,152,er);
putimage(58,58,er,XOR_PUT);
}
Приклад
Введіть кількість кубічних метрів води,яку будуть викачувати насоси при включенні:
H1(max:100)=50
H2(max:200)=125
H3(max:300)=230
H4(max:400)=345
Висновок
Завдяки цій курсовій роботі я закріпив здобуті теоретичні знання з курсу “Програмування та алгоритмічні мови”, навчився застосувати їх при вирішенні питань виробничого характеру.
Література
1.Крис Паппас, Уїльям Мюррей, Програмирование на С и С++,“Ирина”, BHV,Киев,2000.
2.Ганкин М.З. Комплексна автоматизація і АСУ ТП, М., “Агропромиздат”,
1991 р.