#include
#include
#include
void blue(); //글자색을 파랗게
void red(); //글자색을 빨갛게
void white(); //글자색을 하얗게
void yellow(); //글자색을 노랗게
void gotoxy(int,int);
void clrscr(); //화면전체 지우기
void input (int *, char *,int *); //수정사항 입력 함수
class Box{
int sx,sy,ex,ey;
char *title;
int color;
public:
Box(void);// 1,1,80,24로 좌표초기화
Box(int,int,int,int,char*,int); //overloaded construct
Box(Box &); // copy construct
~Box(); // Destruct
void output(void); //화면에출력
void clear(void); //박스지우기
void update(int *p,char*,int*); //수정사항을 바꿔 줄곳
};
Box :: Box(void) //default counstrut
{
title = new char[10];
strcpy(title,"Big Box");
this->sx = 1;
this->sy = 1;
this->ex = 80;
this->ey = 24;
this->color = 3;
}
Box :: Box(int asx, int asy, int aex, int aey, char * atitle, int acolor)//overloaded construct
{
title = new char[10];
strcpy(title,atitle);
this->sx = asx;
this->sy = asy;
this->ex = aex;
this->ey = aey;
this->color = acolor;
}
Box :: Box(Box &cbox) //deep copy consturnct
{
title = new char[10];
strcpy(title,cbox.title);
this->sx = cbox.sx;
this->sy = cbox.sy;
this->ex = cbox.ex;
this->ey = cbox.ey;
this->color = cbox.color;
}
Box :: ~Box() //destruct
{
delete []title;
}
void Box :: output(void) //입력값으로 박스 출력
{
switch(color){ //받아온 색깔별로~
case 1 : ::blue(); break;
case 2 : ::red(); break;
case 3 : ::yellow(); break;
case 4 : ::white(); break;
}
int i,j,k;
gotoxy(sx, sy);
for(i=1 ; i <= ex-sx+1; i++){ //사각형 윗줄 시작부터 끝까지
cout<<'*'<
for(k=0 ; k <= ey-sy; k++){
gotoxy(sx,k+sy);
cout<<'*'<
cout<<'*'<
gotoxy(sx, ey);
for(j=1 ; j <= ex-sx+1; j++){
cout<<'*'<
gotoxy((sx+ex-strlen(title))/2,(sy+ey+1)/2); //중간부분에 타이틀 출력하고
cout<
gotoxy(1,25);
}
void Box :: clear(void)
{
int i,j,k,l;
int len = strlen(title);
gotoxy(sx, sy);
for(i=1 ; i <= ex-sx+1; i++){ //사각형 윗줄 시작부터 끝까지
cout<<' '<
for(k=0 ; k <= ey-sy; k++){
gotoxy(sx,k+sy);
cout<<' '<
cout<<' '<
gotoxy(sx, ey);
for(j=1 ; j <= ex-sx+1; j++){
cout<<' '<
gotoxy((sx+ex-strlen(title))/2,(sy+ey+1)/2);
for(l=0 ; l< len ; l++){
cout<<' '<
gotoxy(1,25); //박스와 글자 부분 지우기
}
void Box :: update (int *p, char * utitle, int *ucolor) //상자를 바꿔바꿔...
{
strcpy(title, utitle); //입력받은 문자열로 복사~
this->sx = *p; //각좌표 값 넣고~
this->sy = *(p+2);
this->ex = *(p+1);
this->ey = *(p+3);
this->color = *ucolor; //색깔도 넣어주고~
}
void main()
{
int nnum[4],color;
char nname[10]; //상자 바꿀때 쓸 임시 보관소들..
Box mybox1; //객체 생성
Box mybox2(11,10,60,20,"Mini Box",2);
Box mybox3(mybox1);
mybox1.output(); //mybox1 출력
getch();
mybox1.clear(); //mybox1 지우기
mybox2.output(); //mybox2 출력
getch();
mybox2.clear(); //mybox2 지우기
mybox3.output(); //mybox3 출력
getch();
mybox3.clear(); //mybox3 지우기
gotoxy(1,1);
white();
cout<<"Box1를 수정하겠습니다."<
input(nnum,nname,&color);//새값을 받아온다.
mybox1.update(nnum,nname,&color); //mybox1개체를 새값으로..
clrscr(); //화면 지우고;
mybox1.output(); // mybox1 출력~
getch();
}
void gotoxy(int x, int y)
{
COORD Pos = {x - 1, y - 1};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
void blue() //글자색을 파랗게
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_BLUE);
}
void red() //글자색을 빨갛게
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
}
void yellow() //글자색을 노랗게
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED| FOREGROUND_GREEN);
}
void white() //글자색을 하얗게
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED| FOREGROUND_GREEN| FOREGROUND_BLUE);
}
void input(int *p, char *q, int *cr)
{
int sx,ex,sy,ey; //좌표를 입력 받을 변수선언
char temp[10]; //문자열 임시저장배열
int chocor; //선택 색깔 임시저장
/*좌표 입력 받기*/
while(1){
cout<<"sx좌표 입력(1~70) : "<
if( 1 <= sx && sx <= 70 ){*p=sx; break;}
} //x시작좌표가 1~70사이를 넣을때 까지 반복
while(1){
cout<<"ex좌표 입력("<
if( sx <= ex && ex <= 80 ){*(p+1)=ex; break;} //x끝좌표가 시작좌표보다 크고 80사이를 넣을때까지 반복
}
while(1){
cout<<"sy좌표 입력(1~20) : "<
if( 1 <= sy && sy <= 20 ){*(p+2)=sy; break;} //y시작좌표가 1~20사이를 넣을때 까지 반복
}
while(1){
cout<<"ey좌표 입력("<
if( sy <= ey && ey <= 24 ){*(p+3)=ey; break;} //y시작좌표가 1~20사이를 넣을때 까지 반복
}
while(1){ //나올글자 입력받기~ 10글자 이내로 만 입력받게 함.
cout<<"Title을 10글자 이내로 입력하세요. : "<
if(strlen(temp)<10){ strcpy(q,temp); break;}
cout<<"10글자 초과하셨습니다. 다시 입력하세요."<
while(1){ //색깔 고르기~
cout<<"색깔을 고르세요. (1)파랑 (2)빨강 (3)노랑 (4)흰색 : "<
if(chocor == 1 || chocor == 2 || chocor == 3 || chocor ==4){ *cr = chocor; break;}
cout<<"잘못누르셨습니다. 다시 고르세요."<
}
void clrscr() //창지우기 마지막에 입력받은 내용 다 지울라니.. 창을 다 스페이스로 뭉개 버림;;
{
gotoxy(1,1);
for(int i=0 ; i<80 ;i++){
for(int j=0 ; j<25 ; j++){
cout<<' '<
}
}
댓글 없음:
댓글 쓰기