2010년 4월 17일 토요일

박스가 출력대고 한번 수정하는 프로그램~

#include
#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<<'*'< gotoxy(ex,k+sy);
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<<' '< gotoxy(ex,k+sy);
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) : "< cin>>sx;

if( 1 <= sx && sx <= 70 ){*p=sx; break;}
} //x시작좌표가 1~70사이를 넣을때 까지 반복

while(1){

cout<<"ex좌표 입력("< cin>>ex;

if( sx <= ex && ex <= 80 ){*(p+1)=ex; break;} //x끝좌표가 시작좌표보다 크고 80사이를 넣을때까지 반복
}

while(1){

cout<<"sy좌표 입력(1~20) : "< cin>>sy;

if( 1 <= sy && sy <= 20 ){*(p+2)=sy; break;} //y시작좌표가 1~20사이를 넣을때 까지 반복
}

while(1){

cout<<"ey좌표 입력("< cin>>ey;

if( sy <= ey && ey <= 24 ){*(p+3)=ey; break;} //y시작좌표가 1~20사이를 넣을때 까지 반복
}

while(1){ //나올글자 입력받기~ 10글자 이내로 만 입력받게 함.

cout<<"Title을 10글자 이내로 입력하세요. : "< cin >> temp;

if(strlen(temp)<10){ strcpy(q,temp); break;}
cout<<"10글자 초과하셨습니다. 다시 입력하세요."< }

while(1){ //색깔 고르기~
cout<<"색깔을 고르세요. (1)파랑 (2)빨강 (3)노랑 (4)흰색 : "< cin >> chocor;
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<<' '< }
}
}

댓글 없음:

댓글 쓰기