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이므로 별다른 코드가 필요없다.)
}
'코스웨어 > 10년 시스템제어' 카테고리의 다른 글
일일보고 순서 ((( 수정 ))) (1) | 2010.05.12 |
---|---|
시스템제어(10/05/10) - C++(참조전달, 생성자, 소멸자), WinAPI(TextOut, GraphOut, MessageBox) (1) | 2010.05.10 |
[시스템 제어]5월 7일 26번 주진호 (1) | 2010.05.10 |
도서관리 프로그램 (2) | 2010.05.10 |
일일보고 순서 (1) | 2010.05.06 |
[시스템제어] 5월 4일 수업 일지 보고서 - 27번 최영훈 (1) | 2010.05.04 |
Atmega128 (Zigbee Timer/Counter) & C, Linux (4월 29일/ 26번 지성하) (1) | 2010.04.30 |
시스템제어-4월26일 보고서-정기열(23번) (1) | 2010.04.29 |