// 기말고사11 실기문제
// 본 소스에는 버그들이 있다. 이를 수정하여 계산기가 되도록 완성하라.
// 버튼 중에 C는 클리어(0 되게), +/-는 값의 부호를 바꿈
#include <windows.h>
#include <stdio.h>
#include "resource.h"
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam);
BOOL CALLBACK DlgProc(HWND hDlg, UINT iMsg,
WPARAM wParam, LPARAM lParam);
HINSTANCE hInst;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS WndClass;
hInst = hInstance;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = WndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = MAKEINTRESOURCE(ID_MENU1);
WndClass.lpszClassName = "Window Class Name";
RegisterClass(&WndClass);
hwnd = CreateWindow("Window Class Name",
"기말11실기(계산기) - 이름", // 자기 이름 넣을 것
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam)
{
switch (iMsg)
{
case WM_CREATE:
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_40002 :
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwnd, DlgProc);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}
void operation(int _nOp, float* _fResult, float _fNumber)
{
switch(_nOp)
{
case 0 :
{
*_fResult = _fNumber;
}
break;
case 1 :
{
*_fResult += _fNumber;
}
break;
case 2 :
{
*_fResult -= _fNumber;
}
break;
case 3 :
{
*_fResult *= _fNumber;
}
break;
case 4 :
{
*_fResult /= _fNumber;
}
break;
}
}
BOOL CALLBACK DlgProc(HWND hDlg, UINT iMsg,
WPARAM wParam, LPARAM lParam)
{
int count;
float result;
char num[100];
int op;
float number;
char answer[100]= {NULL};
switch(iMsg)
{
case WM_INITDIALOG:
count = 0;
result = 0.0f;
op = 0;
return 1;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_BUTTON_PULS:
number = atof(num);
operation(op, &result, &number);
num[0] = \'\\0\';
count = 0;
op = 1;
sprintf(answer, "%f", result);
SetDlgItemText(hDlg, IDC_DISPLAY, answer);
break;
case ID_BUTTON_MINUSE:
number = atof(num);
operation(op, &result, &number);
num[0] = \'\\0\';
count = 0;
op = 2;
sprintf(answer, "%f", result);
SetDlgItemText(hDlg, IDC_DISPLAY, answer);
break;
case ID_BUTTON_MUL:
number = atof(num);
number = atof(num);
operation(op, &result, &number);
num[0] = \'\\0\';
count = 0;
op = 3;
sprintf(answer, "%f", result);
SetDlgItemText(hDlg, IDC_DISPLAY, answer);
break;
case ID_BUTTON_AVG:
number = atof(num);
operation(op, &result, &number);
num[0] = \'\\0\';
count = 0;
op = 4;
sprintf(answer, "%f", result);
SetDlgItemText(hDlg, IDC_DISPLAY, answer);
break;
case ID_1 :
{
num[count] = \'1\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
break;
case ID_2 :
{
num[count] = \'2\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
break;
case ID_3 :
{
num[count] = \'3\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
break;
case ID_4 :
{
num[count] = \'4\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
break;
case ID_5 :
{
num[count] = \'5\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
break;
case ID_6 :
{
num[count] = \'6\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
break;
case ID_7 :
{
num[count] = \'7\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
break;
case ID_8 :
{
num[count] = \'8\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
break;
case ID_9 :
{
num[count] = \'9\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
break;
case ID_0 :
{
if(count)
{
num[count] = \'0\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
}
break;
case ID_DOT :
{
num[count] = \'.\';
count++;
num[count] = \'\\0\';
SetDlgItemText(hDlg, IDC_DISPLAY, num);
}
break;
case ID_EQ :
{
number = atof(num);
num[0] = \'\\0\';
count = 0;
operation(op, &result, &number);
sprintf(answer, "%f", result);
SetDlgItemText(hDlg, IDC_DISPLAY, answer);
}
break;
case ID_BUTTON_EXIT:
EndDialog(hDlg, 0);
break;
case IDCANCEL:
EndDialog(hDlg, 0);
break;
}
break;
}
return 0;
}
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.