본문 바로가기
코스웨어/10년 시스템제어

[시스템제어] 5월 6일 수업 일지 보고서 - 25번 주강수

by 알 수 없는 사용자 2010. 5. 7.
728x90
반응형

                                                 C++
MAIN.H   

#include <iostream>

using namespace std;

enum Car_Handle
{
   LEFT,
   RIGHT,
   CENTER,
   HAN_END
};
enum Car_Color
{
   RED,
   BLACK,
   WHITE,
   BLUE,
   GRAY,
   COLOR,
   END
};
enum Car_Active
{
   FORWARD,
   BACKWARD,
   STOP,
   ACT_END
};
enum Car_Emer
{
   EON,
   EOFF,
   EM_END
};
struct car
{
   char Cname[20];
   int Price;
   int Color;
   char Vendor[10];
   int Handle;
   int Emer;
   int Door;
   int Active;
};

void Set_Color(car *p);
void Set_Active(car *p);
void Set_Handle(car *p);
void Set_Emer(car *p);
void State(car *p);
void Set_Name(car *p);
void Set_Price(car *p);
void Set_Vendor(car *p);
void Set_Drive();
void Set_Result(car *Obj);
void State(car *Obj);
extern "C" char ACar_Color[END][10];                // 맹글링방지
extern "C" char ACar_Handle[HAN_END][10];
extern "C" char ACar_Active[ACT_END][10];
extern "C" char ACar_Emer[EM_END][10];

MAIN.CPP

#include "main4.h"

int main()
{
 car Newcar;                     //  Newcar 구조체 선언
 Set_Name(&Newcar);
 Set_Color(&Newcar);
 Set_Price(&Newcar);
 Set_Vendor(&Newcar);
 Set_Drive();

 Set_Active(&Newcar);
 Set_Handle(&Newcar);
 Set_Emer(&Newcar);
 State(&Newcar);
 Set_Result(&Newcar);
 return 0;
}


CAR.CPP

#include "main4.h"

char ACar_Handle[HAN_END][10]=
{
 "LEFT",
 "RIGHT",
 "CENTER"
};
char ACar_Color[END][10]=
{
 "RED",
 "BLACK",
 "WHITE",
 "BLUE",
 "GRAY",
 "COLOR"
};
char ACar_Active[ACT_END][10]=
{
 "FORWARD",
 "BACKWARD",
 "STOP"
};
char ACar_Emer[EM_END][10]=
{
 "EON",
 "EOFF"
};
void State(car *Obj)
{
 cout<<endl;
 cout<<"**************************"<<endl<<endl;
 cout<<"**************************"<<endl<<endl;
 cout <<"당신이 선택한 차종의 상태는"<<endl;
 cout <<"***************************"<<endl;
    cout <<"차이름은:";
 cout<<(*Obj).Cname <<endl;
    cout <<"차가격은:";
 cout<<(*Obj).Price <<endl;
    cout <<"차색깔은:";
    cout<<ACar_Color[((*Obj).Color)-1]<<endl;
 cout <<"제조사는:";
 cout<<(*Obj).Vendor << endl;
}
void Set_Color(car *p)
{
 int iCnt;
 cout<<"컬러 입력"<<endl;
    for(iCnt=RED;END>iCnt;++iCnt)
 {
  cout<<" [ "<<iCnt+1<<" ] "<<":"<< ACar_Color[iCnt] <<endl;
 }
    cout <<"차색깔은:";
    cin>>(*p).Color;
 /*
 if((*p).Color>END)
 {
  cout<<"숫자를 잘못입력하셨습니다"<<endl;
 }else
 {
  cout <<"차색깔은:";
     cin>>(*p).Color;
 }
 */
}
void Set_Active(car *p)
{
   int iCnt;
   cout<<"<자동차 방향>"<<endl;
   for(iCnt=FORWARD;ACT_END>iCnt;++iCnt)
   {
     cout <<"["<<iCnt+1<<"]"<<":"<<ACar_Active[iCnt]<<endl;
   }
   cout<<"방향 입력:";
   cin>>(*p).Active;
}
void Set_Handle(car *p)
{
   int iCnt;
   cout<<"<핸들 방향>"<<endl;
   for(iCnt=LEFT;HAN_END>iCnt;++iCnt)
   {
     cout <<"["<<iCnt+1<<"]"<<":"<<ACar_Handle[iCnt]<<endl;
   }
   cout<<"핸들 방향 입력:";
   cin>>(*p).Handle;
}
void Set_Emer(car *p)
{  
   int iCnt;
   cout<<"<전 조 등>"<<endl;
    for(iCnt=EON;EM_END>iCnt;++iCnt)
   {
     cout <<"["<<iCnt+1<<"]"<<":"<<ACar_Emer[iCnt]<<endl;
   }
   cout<<"전조등 입력:";
   cin>>(*p).Emer;
}
void Set_Name(car *p)
{
    cout <<"차이름은:";
 cin>>(*p).Cname;
}
void Set_Price(car *p)
{
    cout <<"차가격은:";
 cin >>(*p).Price;
}
void Set_Vendor(car *p)
{
 cout <<"제조사는:";
    cin>>(*p).Vendor;
}
void Set_Drive()
{
 cout <<"당신의 차가 출고 되었습니다"<<endl;
 cout <<"이제 드라이브를 떠나볼까요?"<<endl;
 cout <<" GoGo Sing ~~~~!!!!!" <<endl;
}
void Set_Result(car *Obj)
{
 cout<<endl;
 cout<<"당신의 차  "<<(*Obj).Cname <<" 는 지금"<<endl;
    cout<<"***(*Obj:


컴파일 과정

g++ --save-temps -c main.cpp car.cpp

그러면 오브젝트 파일이 만들어 진다.

링킹 과정

g++ -o main.o car.o

main.o car.o 를 가지고 링킹을 한다


                            API

#include<windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
HINSTANCE g_hlnst;    //전역변수
LPCTSTR lpszClass=TEXT("First");

//전역변수, 윈도우클래스를 정의하는데 사용, 타이틀바에 표시됨.

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevlnstance,LPSTR lpszCmdParam, int nCmdShow)
//엔트리포인트는 main()이 아니라 WinMain(),이다.
//윈도우를 만들고 화면에 표시하기만 할 뿐, 대부분의 일은 아래의 함수에서 이루어진다.
//WinMain에서 하는 가장 중요한 일은 메인 윈도우를 만드는 일이다.
{
 HWND hWnd;
 MSG Message;
 WNDCLASS WndClass;
//만들어질 윈도우의 여러가지 특성을 정의하는 구조체

 g_hInst=hInstance;
//메인함수의 첫번째 인자인 hInstance를 전역변수에 대입

 WndClass.cbClsExtra=0;//특수한 목적에 사용되는 여분의 공간, 사용하지
 WndClass.cbWndExtra=0;//않을 때는 0으로 지정한다.
 WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//배경색상 설정
 WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);  //커서지정
 WndClass.hIcon=LoadIcon(NULL, IDI_APPLICATION); //마우스지정
 WndClass.hInstance=hInstance; //클래스를 등록하는 프로그램 번호
 WndClass.lpfnWndProc=WndProc; //윈도우의 메시지 처리함수를 지정(여기는 WndProc)
 WndClass.lpszClassName=lpszClass;//이름지정, 전역변수를 대입하므로 "First"가 들어감
 WndClass.lpszMenuName=NULL;//메뉴지정, NULL이므로 생략
 WndClass.style=CS_HREDRAW|CS_VREDRAW;  //윈도우의 스타일 정의
 
 RegisterClass(&WndClass);
  //이런 이런 특성을 가진 윈도우를 앞으로 사용하겠다고 등록함.

 //윈도우를 만들려면 윈도우 클래스를 등록한 후 CreateWindow함수를 호출한다.
 
 hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
  CW_USEDEFAULT,CW_USEDEFAULT, NULL,(HMENU)NULL,hInstance,NULL);
 //등록된 클래스를 기본으로 실제 윈도우 생성(메모리에 진입)
 //이 함수의 인자들은 위에서 등록한 내용들이 각각의 인자로 들어온다.
 //이 함수는 윈도우에 관한 모든 정보를 메모리에 만든후 대표 번호인 윈도우 핸들을 반환한다.
 
 ShowWindow(hWnd,nCmdShow); //화면에 출력하는 함수. //첫번째 인자는 출력하고자 하는 윈도
 //우의 핸들이며 CreateWindow함수가 리턴한 값이다. 두번째 인자는 출력하는 방법 지정.

 //아래의 While문은 프로그램 메시지를 처리하는 부분이다.
 while(GetMessage(&Message,NULL,0,0)) //메시지를 읽어들여서 false가 리턴될때 까지 반복
 {
  TranslateMessage(&Message); //키보드에 이벤트가 발생하면 그 것을 나타 내 준다.
  DispatchMessage(&Message);  //받은 메시지를 WndProc함수로 전달한다
     //그러면 그 함수에서 메시지를 점검하여 동작하게 된다.
 }
 return (int)Message.wParam;
}
LRESULTCALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam, LPARAM lParam)
//사용자와 시스템이 보내오는 메시지를 처리하는 함수. (운영체제에 의해 호출)
{
 switch (iMessage)
 {
 case WM_DESTROY:   
//사용자가 프로그램을 끝내려고 한다면

  PostQuitMessage(0);
//이 함수를 호출하여 &message에 fault를 리턴한다.

  return 0;
 }
 return(DefWindowProc(hWnd,iMessage,wParam,lParam));
   //실제로 각 이벤트들이

   //수행되는 부분이다. (default이므로 별다른 코드가 필요없다.)
}

728x90