목차
[Debug]
[res]
Calc_V1.aps
Calc_V1.clw
Calc_V1.cpp
Calc_V1.doc
Calc_V1.dsp
Calc_V1.dsw
Calc_V1.h
Calc_V1.ncb
Calc_V1.opt
Calc_V1.plg
Calc_V1.rc
Calc_V1Dlg.cpp
Calc_V1Dlg.h
ReadMe.txt
resource.h
StdAfx.cpp
StdAfx.h
파일 30,
폴더 2
7.69MB
[res]
Calc_V1.aps
Calc_V1.clw
Calc_V1.cpp
Calc_V1.doc
Calc_V1.dsp
Calc_V1.dsw
Calc_V1.h
Calc_V1.ncb
Calc_V1.opt
Calc_V1.plg
Calc_V1.rc
Calc_V1Dlg.cpp
Calc_V1Dlg.h
ReadMe.txt
resource.h
StdAfx.cpp
StdAfx.h
파일 30,
폴더 2
7.69MB
본문내용
void CCalc_V1Dlg::OnButtonEqual()
{
// TODO: Add your control notification handler code here
try { // 나눗셈 error 발생 시, 처리 위해서, error message를 throw한다
double denominator=1;
if (m_eDigitOrOper == digit) { //방금 눌려진 버튼이 숫자인 경우
//연산자가 이중으로 눌려진 경우 skip 하기 위해서이다
switch (m_eOperator)
{
case plus: // plus 연산
m_Result += atof(m_Edit);
break;
case minus: // minus 연산
m_Result -= atof(m_Edit);
break;
case multiply: // multiply연산
m_Result *= atof(m_Edit);
break;
case divide: // divide연산
denominator=atof(m_Edit);
if ( fabs(denominator)
m_Result /= denominator;
break;
default:
m_Result = atof(m_Edit);
}
}
m_Edit.Format("%g",m_Result); // 결과 출력, %g는 소수 뒷자리 알아서 처리 해 준다
UpdateData(FALSE); // 화면에 출력
m_eOperator=none; // 연산자 초기화
m_eDigitOrOper=oper; //방금 눌린것은 숫자가 아님
}
catch (char* str) // Error message 처리
{
m_Edit=str; // throw 된 message 받는다
UpdateData(FALSE); // 화면에 출력한다
}
}
void CCalc_V1Dlg::OnButtonDot() // 소수점 처리
{
if(m_Edit.Find(".")==-1) m_Edit += '.'; //소수점이 없을 경우만 추가
m_eDigitOrOper=digit; //숫자로 처리됨
UpdateData(FALSE); // 화면에 출력
}
void CCalc_V1Dlg::OnPlus()
{
GetOperators(plus); //연산자 버튼 눌렀을 경우 GetOperator 함수에서 처리
}
void CCalc_V1Dlg::OnMinus()
{
GetOperators(minus); //연산자 버튼 눌렀을 경우 GetOperator 함수에서 처리
}
void CCalc_V1Dlg::OnMultiply()
{
GetOperators(multiply); //연산자 버튼 눌렀을 경우 GetOperator 함수에서 처리
}
void CCalc_V1Dlg::OnDivide()
{
GetOperators(divide); //연산자 버튼 눌렀을 경우 GetOperator 함수에서 처리
}
void CCalc_V1Dlg::OnClear() // Clear 버튼 눌렀을 경우 처리
{
m_Edit = "0"; //CString 변수 초기화
m_eOperator = none; //연산자 종류 초기화
m_Result = 0.0; //기존 기억값 초기화
UpdateData(FALSE); //m_Edit값 화면에 출력
}
void CCalc_V1Dlg::OnBackspace() // backspace 버튼
{
int n = m_Edit.GetLength(); // 현재 숫자의 길이를 파악해서
if (n>1) m_Edit=m_Edit.Left(n-1); //1만큼 줄인다
if (n==1) m_Edit="0"; //한자리수라면 0으로 바꾼다
m_eDigitOrOper=digit; //지금 수행한 작업은 숫자임을 나타낸다
UpdateData(FALSE); // 화면에 갱신
}
void CCalc_V1Dlg::OnPlusMinus() // 부호변경버튼
{
double reverse = 0;
reverse = -1 * atof(m_Edit);
m_Edit.Format("%g",reverse);
m_eDigitOrOper=digit;
UpdateData(FALSE);
}
void CCalc_V1Dlg::OnInverse() //역수버튼
{
// TODO: Add your control notification handler code here
double val = atof(m_Edit);
if (fabs(val) < m_Tol)
{
m_Edit = "Error: too small number to be inversed.";
UpdateData(FALSE);
return;
}
val = 1./atof(m_Edit);
m_Edit.Format("%g",val);
m_eDigitOrOper=digit;
UpdateData(FALSE);
}
void CCalc_V1Dlg::GetNumbers(char a) // 숫자 입력 시
{
if (m_Edit=="0") m_Edit=""; //초기 상태에서는 0값을 지우고 시작
if (m_eDigitOrOper == oper) m_Edit=""; //+-*/=을 눌렀을 경우 지우고 시작
m_Edit += a; // 숫자값을 붙여쓴다
m_eDigitOrOper = digit; //지금의 버튼은 숫자임을 나타낸다 (= 처리버튼에서 활용)
UpdateData(FALSE); //화면에 갱신
}
void CCalc_V1Dlg::GetOperators(OperType e) //+-*/눌렀을 경우
{
OnButtonEqual(); //기존에 연산자가 눌렸을 경우 대비 먼저 연산 수행
m_eOperator = e; //인자로 들어온 m_eOperator 값 (plus, minus, multiply, divide 중 하나) 이 기록됨
m_eDigitOrOper = oper; //지금 눌려진 버튼은 operator임 (= 처리 버튼에서 활용)
}
{
// TODO: Add your control notification handler code here
try { // 나눗셈 error 발생 시, 처리 위해서, error message를 throw한다
double denominator=1;
if (m_eDigitOrOper == digit) { //방금 눌려진 버튼이 숫자인 경우
//연산자가 이중으로 눌려진 경우 skip 하기 위해서이다
switch (m_eOperator)
{
case plus: // plus 연산
m_Result += atof(m_Edit);
break;
case minus: // minus 연산
m_Result -= atof(m_Edit);
break;
case multiply: // multiply연산
m_Result *= atof(m_Edit);
break;
case divide: // divide연산
denominator=atof(m_Edit);
if ( fabs(denominator)
break;
default:
m_Result = atof(m_Edit);
}
}
m_Edit.Format("%g",m_Result); // 결과 출력, %g는 소수 뒷자리 알아서 처리 해 준다
UpdateData(FALSE); // 화면에 출력
m_eOperator=none; // 연산자 초기화
m_eDigitOrOper=oper; //방금 눌린것은 숫자가 아님
}
catch (char* str) // Error message 처리
{
m_Edit=str; // throw 된 message 받는다
UpdateData(FALSE); // 화면에 출력한다
}
}
void CCalc_V1Dlg::OnButtonDot() // 소수점 처리
{
if(m_Edit.Find(".")==-1) m_Edit += '.'; //소수점이 없을 경우만 추가
m_eDigitOrOper=digit; //숫자로 처리됨
UpdateData(FALSE); // 화면에 출력
}
void CCalc_V1Dlg::OnPlus()
{
GetOperators(plus); //연산자 버튼 눌렀을 경우 GetOperator 함수에서 처리
}
void CCalc_V1Dlg::OnMinus()
{
GetOperators(minus); //연산자 버튼 눌렀을 경우 GetOperator 함수에서 처리
}
void CCalc_V1Dlg::OnMultiply()
{
GetOperators(multiply); //연산자 버튼 눌렀을 경우 GetOperator 함수에서 처리
}
void CCalc_V1Dlg::OnDivide()
{
GetOperators(divide); //연산자 버튼 눌렀을 경우 GetOperator 함수에서 처리
}
void CCalc_V1Dlg::OnClear() // Clear 버튼 눌렀을 경우 처리
{
m_Edit = "0"; //CString 변수 초기화
m_eOperator = none; //연산자 종류 초기화
m_Result = 0.0; //기존 기억값 초기화
UpdateData(FALSE); //m_Edit값 화면에 출력
}
void CCalc_V1Dlg::OnBackspace() // backspace 버튼
{
int n = m_Edit.GetLength(); // 현재 숫자의 길이를 파악해서
if (n>1) m_Edit=m_Edit.Left(n-1); //1만큼 줄인다
if (n==1) m_Edit="0"; //한자리수라면 0으로 바꾼다
m_eDigitOrOper=digit; //지금 수행한 작업은 숫자임을 나타낸다
UpdateData(FALSE); // 화면에 갱신
}
void CCalc_V1Dlg::OnPlusMinus() // 부호변경버튼
{
double reverse = 0;
reverse = -1 * atof(m_Edit);
m_Edit.Format("%g",reverse);
m_eDigitOrOper=digit;
UpdateData(FALSE);
}
void CCalc_V1Dlg::OnInverse() //역수버튼
{
// TODO: Add your control notification handler code here
double val = atof(m_Edit);
if (fabs(val) < m_Tol)
{
m_Edit = "Error: too small number to be inversed.";
UpdateData(FALSE);
return;
}
val = 1./atof(m_Edit);
m_Edit.Format("%g",val);
m_eDigitOrOper=digit;
UpdateData(FALSE);
}
void CCalc_V1Dlg::GetNumbers(char a) // 숫자 입력 시
{
if (m_Edit=="0") m_Edit=""; //초기 상태에서는 0값을 지우고 시작
if (m_eDigitOrOper == oper) m_Edit=""; //+-*/=을 눌렀을 경우 지우고 시작
m_Edit += a; // 숫자값을 붙여쓴다
m_eDigitOrOper = digit; //지금의 버튼은 숫자임을 나타낸다 (= 처리버튼에서 활용)
UpdateData(FALSE); //화면에 갱신
}
void CCalc_V1Dlg::GetOperators(OperType e) //+-*/눌렀을 경우
{
OnButtonEqual(); //기존에 연산자가 눌렸을 경우 대비 먼저 연산 수행
m_eOperator = e; //인자로 들어온 m_eOperator 값 (plus, minus, multiply, divide 중 하나) 이 기록됨
m_eDigitOrOper = oper; //지금 눌려진 버튼은 operator임 (= 처리 버튼에서 활용)
}
소개글