Добавил:
Kolobok
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Для специальностей ПМИ-ПМ. Лаба 2 вариант 6 / Zad1 / STRUCT
.CPP#include "graphics.h"
#include "conio.h"
#include "string.h"
#ifndef _STRUCT_TA_CPP_10981234928734
#define _STRUCT_TA_CPP_10981234928734
#define FILL 2
#define UP 1
#define BGI ""
#define CW 8
#define CH 10
typedef char char80[80];
struct TBorder
{
int x1,y1,x2,y2,s,c;
};
struct TPalette
{
int simple,edit,error,chosen,menu;
};
int ShowMenu (TBorder * item, char80*caption, int number,int cycl=0);
void DrawBorder (TBorder q);
int GetInt (TBorder b, int can=1);
float GetFl (TBorder br, char can=1);
void Cursor (TBorder br, void *curs, int width, int height, int &x1, int &y1, int op=0);
int YesNo (char *s);
TBorder EditWindow (char *s);
void clrkbd ();
TPalette Palette={0,10,3,2,0};
//НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН\\
void DrawBorder(TBorder q)
{
if (q.s & UP)
{
setcolor(7);
setfillstyle(1,q.c);
if (q.s & FILL) {bar(q.x1,q.y1,q.x2,q.y2);}
setcolor(8);
line(q.x1-1,q.y1,q.x1-1,q.y2);
line(q.x1,q.y2+1,q.x2,q.y2+1);
setcolor(15);
line(q.x2+1,q.y1,q.x2+1,q.y2);
line(q.x1,q.y1-1,q.x2,q.y1-1);
}
else
{
setcolor(7);
setfillstyle(1,q.c);
if (q.s & FILL) {bar(q.x1,q.y1,q.x2,q.y2);}
setcolor(15);
line(q.x1-1,q.y1,q.x1-1,q.y2);
line(q.x1,q.y2+1,q.x2,q.y2+1);
setcolor(8);
line(q.x2+1,q.y1,q.x2+1,q.y2);
line(q.x1,q.y1-1,q.x2,q.y1-1);
}
};
//НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН\\
char isint(int a[5],int len) //if a can be translated into int isint() returns 100;
{
if ( (len<5)||(
(len==5)&&((a[0]<3)||(
(a[0]==3)&&((a[1]<2)||(
(a[1]==2)&&((a[2]<7)||(
(a[2]==7)&&((a[3]<6)||(
(a[3]==6)&& (a[4]<=7))))))))))) return 100;
else return 0;
}
int GetInt(TBorder b, int can)
{
setfillstyle(1,b.c);
setcolor(b.c);
b.s=b.s|FILL;
DrawBorder(b);
int a[5]={0,0,0,0,0};
setcolor(Palette.edit);
char len=0,min=0,ch=0,zero=0;
do
{
ch=getch();
setcolor(Palette.edit);
if (zero)
{if (ch=='\b') {zero=0; DrawBorder(b);} }
else
{ switch(ch)
{ case '\b':
if ((len>0)||(min)) bar((len+1)*CW+b.x1,b.y1,(len+2)*CW+b.x1,CH*3/2+b.y1);
if ((min)&&(!len)) min=0;
else if (len>0) len--;
break;
case '-': if ((can)&&(len==0)&&(!min)) {min=1; outtextxy(b.x1+CW*(len+1),b.y1+CH/2,"-");}
break;
case '0': if (len==0) {zero=1;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"0");}
else if (len<5) {a[++len-1]=0;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"0");}
break;
case '1': if (len<5) {a[++len-1]=1;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"1");}
break;
case '2': if (len<5) {a[++len-1]=2;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"2");}
break;
case '3': if (len<5) {a[++len-1]=3;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"3");}
break;
case '4': if (len<5) {a[++len-1]=4;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"4");}
break;
case '5': if (len<5) {a[++len-1]=5;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"5");}
break;
case '6': if (len<5) {a[++len-1]=6;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"6");}
break;
case '7': if (len<5) {a[++len-1]=7;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"7");}
break;
case '8': if (len<5) {a[++len-1]=8;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"8");}
break;
case '9': if (len<5) {a[++len-1]=9;outtextxy(b.x1+(len+1)*CW+min,b.y1+CH/2,"9");}
break;
case '\n','\r':// getch();
case ' ':
if (len==0) ch='q';
break;
}
if (!isint(a,len)) {len--; bar((len+1)*CW+b.x1,b.y1,(len+2)*CW+b.x1,CH*3/2+b.y1);}
} //end of switch
}
while (!((ch=='\n')||(ch=='\r')||(ch==' ')));
int res=0;
for (int i=0;i<len;i++)
{res=10*res+a[i];}
setcolor(Palette.simple);
if (min) return -res;
return res;
}
//НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН\\
char isfloatrange(int a[2],int len)
{if ((len<2)||((len==2)&&((a[0]<3)||((a[0]==3)&&(a[1]<=8))))) return 1;
else return 0;
}
float GetFl(TBorder br,char can)
{
setfillstyle(1,br.c);
setcolor(br.c);
br.s=br.s|FILL;
DrawBorder(br);
int res1=0;
int a[20],b[2];
for (int i=0;i<20;i++){a[i]=0;}
for (i=0;i<2;i++){b[i]=0;}
char len=0,lene=0,min=0,mine=0,point=0,ch=0,e=0,zero=0;
do
{
setcolor(Palette.edit);
ch=getch();
if (zero==1)
{if (ch=='\b') {zero=0; len=0;bar((len+2)*CW+br.x1,br.y1,(len+3)*CW+br.x1,CH*3/2+br.y1);}
else if (ch=='.' || ch ==',')
{ len=1;
point=1;
zero=2;
outtextxy(br.x1+CW*(len+2),br.y1+CH/2,".");
}
}
else
{
if (!e) {
switch(ch)
{ case '\b':
if ((len>point)&&(point)) {bar((len+2)*CW+br.x1,br.y1,(len+3)*CW+br.x1,CH*3/2+br.y1);len--;}
else if ((len>0)&&(!point))
{ bar((len+1)*CW+br.x1,br.y1,(len+2)*CW+br.x1,CH*3/2+br.y1);
len--;}
else if ((len==point)&&(point))
{
if (zero==2) {zero=1;}
bar((len+2)*CW+br.x1,br.y1,(len+3)*CW+br.x1,CH*3/2+br.y1);
point=0;
}
else if (len==0)
{ if (min) {min=0;bar((len+1)*CW+br.x1,br.y1,(len+2)*CW+br.x1,CH*3/2+br.y1);}}
break;
case 'e':case 'E': if(len) {e=1; outtextxy(br.x1+CW*(len+2+(point>0)),br.y1+CH/2,"E");} break;
case '-': if ((can)&&(len==0)&&(!min)) {min=1; outtextxy(br.x1+CW*(len+1),br.y1+CH/2,"-");}
break;
case '.':case ',': if ((len>0)&&(!point)) {point=len; outtextxy(br.x1+CW*(len+2),br.y1+CH/2,".");} break;
case '0': if (len==0) {zero=1;outtextxy(br.x1+CW*(len+2+(point>0)),br.y1+CH/2,"0");} else if (len<20) {a[++len-1]=0; outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"0");}
break;
case '1': if (len<20) {a[++len-1]=1; outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"1");}
break;
case '2': if (len<20) {a[++len-1]=2;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"2");}
break;
case '3': if (len<20) {a[++len-1]=3;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"3");}
break;
case '4': if (len<20) {a[++len-1]=4;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"4");}
break;
case '5': if (len<20) {a[++len-1]=5;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"5");}
break;
case '6': if (len<20) {a[++len-1]=6;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"6");}
break;
case '7': if (len<20) {a[++len-1]=7;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"7");}
break;
case '8': if (len<20) {a[++len-1]=8;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"8");}
break;
case '9': if (len<20) {a[++len-1]=9;outtextxy(br.x1+CW*(len+1+(point>0)),br.y1+CH/2,"9");}
break;
case '\n':
case '\r':
case ' ':
if (len==0) ch='q';
break;
} }
else {
switch(ch)
{ case '\b':
bar(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,br.x1+(len+4+lene+(point>0)+mine)*CW+min,br.y1+3*CH/2);
if ((!mine)&&(!lene)) e=0; else
if ((mine)&&(!lene)) mine=0; else
if (lene>0) lene--;
break;
case '-': if ((!lene)&&(!mine)) {mine=1; outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"-");}
break;
case '0': if (lene<2) {b[++lene-1]=0;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"0");}
break;
case '1': if (lene<2) {b[++lene-1]=1;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"1");}
break;
case '2': if (lene<2) {b[++lene-1]=2;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"2");}
break;
case '3': if (lene<2) {b[++lene-1]=3;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"3");}
break;
case '4': if (lene<2) {b[++lene-1]=4;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"4");}
break;
case '5': if (lene<2) {b[++lene-1]=5;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"5");}
break;
case '6': if (lene<2) {b[++lene-1]=6;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"6");}
break;
case '7': if (lene<2) {b[++lene-1]=7;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"7");}
break;
case '8': if (lene<2) {b[++lene-1]=8;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"8");}
break;
case '9': if (lene<2) {b[++lene-1]=9;outtextxy(br.x1+(len+2+lene+(point>0)+mine)*CW+min,br.y1+CH/2,"9");}
break; }
res1=0;
if (lene==2) {res1=b[0]*10+b[1];}
else {if (lene==2) res1=b[0];}
if (((res1+len-point>38)&&(!mine))||
((((res1-point>37)&&(point))||((res1-len>37)&&(!point)))&&(mine)))
{lene--;bar(br.x1+(len+3+lene+(point>0)+mine)*CW+min,br.y1+CH/2,br.x1+(len+4+lene+(point>0)+mine)*CW+min,br.y1+3*CH/2);}
}
//end switch
} //end if (e)
}//end if (!zero)
while (!((ch=='\n')||(ch=='\r')||(ch==' ')));
long double res=0.0;
long double aft=0.0;
if (point)
{ for (i=0;i<point;i++)
{res=10*res+a[i];}
for (i=len-1;i>=point;i--)
{aft=aft/10.0+a[i];}}
else {for (i=0;i<len;i++)
{res=10*res+a[i];}}
res1=0;
for (i=0;i<lene;i++)
{res1=res1*10+b[i];}
res=res+aft/10.0;
if (!mine) { for (i=0;i<res1;i++) {res*=10;}}
else {for (i=0;i<res1;i++) {res/=10.0;}};
setcolor(Palette.simple);
if (!min) {return res;}
else {return -res;}
}
//НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН\\
int ShowMenu (TBorder * item, char80*caption, int number,int cycl)
{
int i=0,pos=0;
char key;
item[0].s=0;
DrawBorder(item[0]);
setcolor(Palette.menu);
outtextxy(item[0].x1+CW,item[0].y1+CH/2,caption[0]);
for (i=1; i<number; i++)
{
item[i].s=UP;
DrawBorder(item[i]);
setcolor(Palette.menu);
outtextxy(item[i].x1+CW,item[i].y1+CH/2,caption[i]);
}
while ((key!='\r')&&(key!=' ')&&(key!='\n')&&(key!=27))
{
key=getch();
if (key==80)
{
if (pos<number-1)
{
item[pos].s=UP;
DrawBorder(item[pos]);
pos++;
item[pos].s=0;
DrawBorder(item[pos]);
}
else if (cycl)
{
item[pos].s=UP;
DrawBorder(item[pos]);
pos=0;
item[pos].s=0;
DrawBorder(item[pos]);
}
}
if (key==72)
{
if (pos>0)
{
item[pos].s=UP;
DrawBorder(item[pos]);
pos--;
item[pos].s=0;
DrawBorder(item[pos]);
}
else if (cycl)
{
item[pos].s=UP;
DrawBorder(item[pos]);
pos=number-1;
item[pos].s=0;
DrawBorder(item[pos]);
}
}
}
if (key==27) return -1;
return pos;
}
//НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН\\
void Cursor (TBorder br, void *curs, int width, int height, int &x1, int &y1, int op)
{
void *buffer;
char key=0;
buffer=(void*)new char[imagesize(1,1,width+1,height+1)];
getimage(x1,y1,x1+width,y1+height,buffer);
putimage(x1,y1,curs,op);
while (key!=27 && key!='\n' && key!='\r' && key!=' ')
{
key=getch();
if (key==80)
{
if (y1<br.y2-5-height)
{
putimage(x1,y1,buffer,0);
y1+=5;
getimage(x1,y1,x1+width,y1+height,buffer);
putimage(x1,y1,curs,op);
}
}
if (key==72)
{
if (y1>br.y1+5)
{
putimage(x1,y1,buffer,0);
y1-=5;
getimage(x1,y1,x1+width,y1+height,buffer);
putimage(x1,y1,curs,op);
}
}
if (key==77)
{
if (x1<br.x2-5-width)
{
putimage(x1,y1,buffer,0);
x1+=5;
getimage(x1,y1,x1+width,y1+height,buffer);
putimage(x1,y1,curs,op);
}
}
if (key==75)
{
if (x1>br.x1+5)
{
putimage(x1,y1,buffer,0);
x1-=5;
getimage(x1,y1,x1+width,y1+height,buffer);
putimage(x1,y1,curs,op);
}
}
}
delete(buffer);
}
void Begin()
{
int gdriver =9 , gmode=2, errorcode;
initgraph(&gdriver, &gmode, BGI);
while (kbhit()) {getch();}
}
void End()
{
closegraph();
cputs("\n\n\n This program is created by Tishka17.\n\r Press any key to exit.");
getch();
while (kbhit()) {getch();}
}
TBorder EditWindow(char *s)
{
TBorder Wnd ={190,110,410,150,UP|FILL,7};
TBorder Edit ={195,130,405,145,FILL,0};
DrawBorder(Wnd);
setcolor(Palette.simple);
outtextxy(Wnd.x1+5,Wnd.y1+5,s);
DrawBorder(Edit);
return Edit;
}
int YesNo(char *s)
{
TBorder MainMenuWindow={175,195,495,235,UP|FILL,7};
TBorder MainMenu[]=
{
{180,215,315,230},
{345,215,490,230},
};
char80 MainMenuItems[]=
{
" Yes",
" No",
};
const MainMenuNumber=2;
// MainMenuWindow.x2=strlen(s)*CW+MainMenuWindow.x1;
// MainMenuWindow.x1=100;
// MainMenu[2].x1=MainMenuWindow.x2-115;
// MainMenu[2].x2=MainMenuWindow.x2;
DrawBorder(MainMenuWindow);
setcolor(Palette.simple);
outtextxy(180,200,s);
return (!ShowMenu(MainMenu,MainMenuItems,MainMenuNumber,1));
}
void clrkbd()
{
while (kbhit()) {getch();}
}
#pragma startup Begin
#pragma exit End
#endif _STRUCT_TA_CPP_10981234928734