1 // CalculatorDemoDlg.cpp : implementation file
2
3
4 #include "stdafx.h"
5 #include "TestCalculatorDemo.h"
6 #include "CalculatorDemoDlg.h"
7 #include "math.h"
8 #include "string"
9
10 #ifdef _DEBUG
11 #define new DEBUG_NEW
12 #undef THIS_FILE
13 static char THIS_FILE[] = __FILE__;
14 #endif
15
16 /////////////////////////////////////////////////////////////////////////////
17 // CCalculatorDemoDlg dialog
18
19
20 CCalculatorDemoDlg::CCalculatorDemoDlg(CWnd* pParent /*=NULL*/)
21 : CDialog(CCalculatorDemoDlg::IDD, pParent)
22 {
23 //{{AFX_DATA_INIT(CCalculatorDemoDlg)
24 // NOTE: the ClassWizard will add member initialization here
25 //}}AFX_DATA_INIT
26 }
27
28
29 void CCalculatorDemoDlg::DoDataExchange(CDataExchange* pDX)
30 {
31 CDialog::DoDataExchange(pDX);
32 //{{AFX_DATA_MAP(CCalculatorDemoDlg)
33 // NOTE: the ClassWizard will add DDX and DDV calls here
34 //}}AFX_DATA_MAP
35 }
36
37
38 BEGIN_MESSAGE_MAP(CCalculatorDemoDlg, CDialog)
39 //{{AFX_MSG_MAP(CCalculatorDemoDlg)
40 ON_BN_CLICKED(IDC_BTN_NO1, OnBtnNo1)
41 ON_BN_CLICKED(IDC_BTN_NO2, OnBtnNo2)
42 ON_BN_CLICKED(IDC_BTN_NO3, OnBtnNo3)
43 ON_BN_CLICKED(IDC_BTN_NO4, OnBtnNo4)
44 ON_BN_CLICKED(IDC_BTN_NO5, OnBtnNo5)
45 ON_BN_CLICKED(IDC_BTN_NO6, OnBtnNo6)
46 ON_BN_CLICKED(IDC_BTN_NO7, OnBtnNo7)
47 ON_BN_CLICKED(IDC_BTN_NO8, OnBtnNo8)
48 ON_BN_CLICKED(IDC_BTN_NO9, OnBtnNo9)
49 ON_BN_CLICKED(IDC_BTN_NO0, OnBtnNo0)
50 ON_BN_CLICKED(IDC_BTN_PORT, OnBtnPort)
51 ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
52 ON_BN_CLICKED(IDC_BTN_SUB, OnBtnSub)
53 ON_BN_CLICKED(IDC_BTN_MUL, OnBtnMul)
54 ON_BN_CLICKED(IDC_BTN_DIV, OnBtnDiv)
55 ON_BN_CLICKED(IDC_BTN_EQUEL, OnBtnEquel)
56 ON_BN_CLICKED(IDC_BTN_PERCENT, OnBtnPercent)
57 ON_BN_CLICKED(IDC_BTN_DOWN, OnBtnDown)
58 ON_BN_CLICKED(IDC_BTN_NEQUA, OnBtnNequa)
59 ON_BN_CLICKED(IDC_BTN_SPACE, OnBtnSpace)
60 ON_BN_CLICKED(IDC_BTN_C, OnBtnC)
61 ON_BN_CLICKED(IDC_BTN_SQRT, OnBtnSqrt)
62 //}}AFX_MSG_MAP
63 END_MESSAGE_MAP()
64
65 /////////////////////////////////////////////////////////////////////////////
66 // CCalculatorDemoDlg message handlers
67
68 void CCalculatorDemoDlg::OnBtnNo1()
69 {
70 // TODO: Add your control notification handler code here
71 PutIntoNum(1);
72 }
73
74 void CCalculatorDemoDlg::OnBtnNo2()
75 {
76 // TODO: Add your control notification handler code here
77 PutIntoNum(2);
78 }
79
80 void CCalculatorDemoDlg::OnBtnNo3()
81 {
82 // TODO: Add your control notification handler code here
83 PutIntoNum(3);
84 }
85
86 void CCalculatorDemoDlg::OnBtnNo4()
87 {
88 // TODO: Add your control notification handler code here
89 PutIntoNum(4);
90 }
91
92 void CCalculatorDemoDlg::OnBtnNo5()
93 {
94 // TODO: Add your control notification handler code here
95 PutIntoNum(5);
96 }
97
98 void CCalculatorDemoDlg::OnBtnNo6()
99 {
100 // TODO: Add your control notification handler code here
101 PutIntoNum(6);
102 }
103
104 void CCalculatorDemoDlg::OnBtnNo7()
105 {
106 // TODO: Add your control notification handler code here
107 PutIntoNum(7);
108 }
109
110 void CCalculatorDemoDlg::OnBtnNo8()
111 {
112 // TODO: Add your control notification handler code here
113 PutIntoNum(8);
114 }
115
116 void CCalculatorDemoDlg::OnBtnNo9()
117 {
118 // TODO: Add your control notification handler code here
119 PutIntoNum(9);
120 }
121
122 void CCalculatorDemoDlg::OnBtnNo0()
123 {
124 // TODO: Add your control notification handler code here
125 // TODO: Add your control notification handler code here
126 //如果第一次输入数字
127 if (cs_Num[m_i]=="0")
128 {
129 return ;
130 }
131 cs_Num[m_i]+="0";
132 SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
133 if (!b_Hasport)
134 {
135 CString temp;
136 GetDlgItemText(IDC_EDIT_SHOW,temp);
137 temp+=".";
138 SetDlgItemText(IDC_EDIT_SHOW,temp);
139 }
140 }
141
142 void CCalculatorDemoDlg::OnBtnPort()
143 {
144 //已有小数点时
145 if (b_Hasport)
146 {
147 return;
148 }
149 //无小数点
150 cs_Num[m_i]+=".";
151 b_Hasport=TRUE;
152 b_Start=TRUE;
153 SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
154 }
155
156
157 //四则运算符
158
159 void CCalculatorDemoDlg::OnBtnAdd()
160 {
161 if (!b_Start)
162 {
163 return;
164 }
165 if (en_LastSignl==en_none)
166 {
167 en_LastSignl=en_add;
168 }
169 RunOperation(en_LastSignl);
170 en_LastSignl=en_add;
171 }
172
173 void CCalculatorDemoDlg::OnBtnSub()
174 {
175 if (!b_Start)
176 {
177 return;
178 }
179
180 // TODO: Add your control notification handler code here
181 if (en_LastSignl==en_none)
182 {
183 en_LastSignl=en_sub;
184 }
185 RunOperation(en_LastSignl);
186 en_LastSignl=en_sub;
187 }
188
189 void CCalculatorDemoDlg::OnBtnMul()
190 {
191 if (!b_Start)
192 {
193 return;
194 }
195 if (en_LastSignl==en_none)
196 {
197 cs_Num[1]="1";
198 en_LastSignl=en_mul;
199 }
200
201 RunOperation(en_LastSignl);
202 en_LastSignl=en_mul;
203 }
204
205 void CCalculatorDemoDlg::OnBtnDiv()
206 {
207 if (!b_Start)
208 {
209 return;
210 }
211 if (en_LastSignl==en_none)
212 {
213 cs_Num[1]="1";
214 en_LastSignl=en_div;
215 }
216 RunOperation(en_LastSignl);
217 en_LastSignl=en_div;
218 }
219
220 void CCalculatorDemoDlg::OnBtnEquel()
221 {
222 // TODO: Add your control notification handler code here
223 RunOperation(en_LastSignl);
224 //****特殊****
225 en_LastSignl=en_none;
226 b_Start=TRUE;
227 }
228
229 BOOL CCalculatorDemoDlg::OnInitDialog()
230 {
231 CDialog::OnInitDialog();
232
233 // TODO: Add extra initialization here
234 InitAllDate();
235 return TRUE; // return TRUE unless you set the focus to a control
236 // EXCEPTION: OCX Property Pages should return FALSE
237 }
238
239 void CCalculatorDemoDlg::PutIntoNum(int n)
240 {
241 CString tem_i;
242 tem_i.Format("%d",n);
243 CString temp;
244 //第一次输入
245 if (!b_Start)
246 {
247 cs_Num[m_i]=tem_i;
248 b_Start=TRUE;
249 SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
250 if (!b_Hasport)
251 {
252 GetDlgItemText(IDC_EDIT_SHOW,temp);
253 temp+=".";
254 SetDlgItemText(IDC_EDIT_SHOW,temp);
255 }
256 return;
257 }
258 cs_Num[m_i]+=tem_i;
259 SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
260 if (!b_Hasport)
261 {
262 GetDlgItemText(IDC_EDIT_SHOW,temp);
263 temp+=".";
264 SetDlgItemText(IDC_EDIT_SHOW,temp);
265 }
266 }
267
268 void CCalculatorDemoDlg::InitAllDate()
269 {
270 en_LastSignl=en_none;
271 b_Hasport=FALSE;
272 b_Start=FALSE;
273 b_Hasmul=FALSE;
274 b_Hasdiv=FALSE;
275 cs_Num[0]="0";
276 cs_Num[1]="0";
277 m_i=0;
278 SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]+".");
279 }
280
281 void CCalculatorDemoDlg::RunOperation(eum_signl e_signl)
282 {
283 // TODO: Add your control notification handler code here
284 double sum;
285 double nAdd1;
286 double nAdd2;
287 nAdd1=atof(cs_Num[0]);
288 nAdd2=atof(cs_Num[1]);
289
290 //sum=nAdd1+nAdd2;
291 switch(e_signl)
292 {
293 case en_add:
294 sum=nAdd1+nAdd2;
295 break;
296 case en_sub:
297 sum=nAdd1-nAdd2;
298 break;
299 case en_mul:
300 sum=nAdd1*nAdd2;
301 break;
302 case en_div:
303 sum=nAdd1/nAdd2;
304 break;
305 }
306
307 cs_Num[0].Format("%g",sum);
308 SetDlgItemText(IDC_EDIT_SHOW,cs_Num[0]);
309 if (!b_Hasport && -1==cs_Num[0].Find('.'))
310 {
311 CString temp;
312 GetDlgItemText(IDC_EDIT_SHOW,temp);
313 temp+=".";
314 SetDlgItemText(IDC_EDIT_SHOW,temp);
315 }
316 m_i = 1;
317 b_Hasport=FALSE;
318 b_Start=FALSE;
319 cs_Num[m_i]="0";
320 }
321
322 //void CCalculatorDemoDlg::RunOperation(eum_signl en_signl)
323 //{
324
325 //}
326
327 void CCalculatorDemoDlg::OnBtnC()
328 {
329 // TODO: Add your control notification handler code here
330 InitAllDate();
331 }
332
333 // 根号
334 void CCalculatorDemoDlg::OnBtnSqrt()
335 {
336 // TODO: Add your control notification handler code here
337 if (!b_Start)
338 {
339 return;
340 }
341
342 double num;
343 CString temp;
344 GetDlgItemText(IDC_EDIT_SHOW,temp);
345 num=atof(temp);
346 num=sqrt(num);
347 temp.Format("%lf",num);
348 if (temp.Find('.')==-1)
349 SetDlgItemText(IDC_EDIT_SHOW,temp+".");
350 else
351 SetDlgItemText(IDC_EDIT_SHOW,temp);
352 }
353
354
355 // %
356 void CCalculatorDemoDlg::OnBtnPercent()
357 {
358 // TODO: Add your control notification handler code here
359
360 }
361
362 // 1/x
363 void CCalculatorDemoDlg::OnBtnDown()
364 {
365 // TODO: Add your control notification handler code here
366 if (!b_Start)
367 {
368 return;
369 }
370 double num;
371 CString temp;
372 GetDlgItemText(IDC_EDIT_SHOW,temp);
373 num=atof(temp);
374 num=1/num;
375 temp.Format("%lf",num);
376 if (temp.Find('.')==-1)
377 SetDlgItemText(IDC_EDIT_SHOW,temp+".");
378 else
379 SetDlgItemText(IDC_EDIT_SHOW,temp);
380 }
381
382 // +-
383 void CCalculatorDemoDlg::OnBtnNequa()
384 {
385 // TODO: Add your control notification handler code here
386 if (!b_Start)
387 {
388 return;
389 }
390 double num;
391 CString temp;
392 GetDlgItemText(IDC_EDIT_SHOW,temp);
393 num=atof(temp);
394 num=0-num;
395 SetDlgItemText(IDC_EDIT_SHOW , b_Hasport ? temp:temp+".");
396 }
397
398 // 退格键
399 void CCalculatorDemoDlg::OnBtnSpace()
400 {
401 // TODO: Add your control notification handler code here
402 if (!b_Start)
403 {
404 return;
405 }
406 double num;
407 CString temp;
408 int len;
409 CHAR temp_ch[32];
410 GetDlgItemText(IDC_EDIT_SHOW,temp);
411 //AfxMessageBox(temp);
412 num=atof(temp);
413 sprintf(temp_ch,"%g",num);
414 num=0;
415 //AfxMessageBox(temp_ch);
416 len=strlen(temp_ch);
417 int te_i=len-1;
418 if(temp_ch[te_i]=='.')
419 te_i-=1,b_Hasport=FALSE;
420 temp_ch[te_i]='\0';
421 //////////////////////////////////////////////////////////////////////////
422 //AfxMessageBox(temp_ch);
423 if (strlen(temp_ch)==0)
424 {
425 temp_ch[0]='0';
426 temp_ch[1]='\0';
427 }
428 //////////////////////////////////////////////////////////////////////////
429 sscanf(temp_ch,"%lf",&num);
430 temp.Format("%g",num);
431 //AfxMessageBox(temp);
432 SetDlgItemText(IDC_EDIT_SHOW,b_Hasport?temp:temp+".");
433 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
CalculatorDemoDlg.h
1 #if !defined(AFX_CALCULATORDEMODLG_H__6033594F_8916_49DF_B7FE_B09720CC9632__INCLUDED_)
2 #define AFX_CALCULATORDEMODLG_H__6033594F_8916_49DF_B7FE_B09720CC9632__INCLUDED_
3
4 #if _MSC_VER > 1000
5 #pragma once
6 #endif // _MSC_VER > 1000
7 // CalculatorDemoDlg.h : header file
8 //
9
10 /////////////////////////////////////////////////////////////////////////////
11 // CCalculatorDemoDlg dialog
12 //加减乘除四则运算
13 enum eum_signl {en_none,en_add,en_sub,en_mul,en_div};
14
15 class CCalculatorDemoDlg : public CDialog
16 {
17 // Construction
18 public:
19 eum_signl en_LastSignl;
20 BOOL b_Hasdiv;
21 BOOL b_Hasmul;
22 void RunOperation(eum_signl en_signl);
23 void InitAllDate();
24 void PutIntoNum(int n);
25 BOOL b_Hasport; //是否输入了小数点
26 BOOL b_Start; //是否开始输入一个数据
27 int m_i; //记录当前使用哪个CString
28 //存两个数据
29 CString cs_Num[2];
30
31 CCalculatorDemoDlg(CWnd* pParent = NULL); // standard constructor
32
33 // Dialog Data
34 //{{AFX_DATA(CCalculatorDemoDlg)
35 enum { IDD = IDD_CALC_SLP_DLG };
36 // NOTE: the ClassWizard will add data members here
37 //}}AFX_DATA
38
39
40 // Overrides
41 // ClassWizard generated virtual function overrides
42 //{{AFX_VIRTUAL(CCalculatorDemoDlg)
43 protected:
44 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
45 //}}AFX_VIRTUAL
46
47 // Implementation
48 protected:
49
50 // Generated message map functions
51 //{{AFX_MSG(CCalculatorDemoDlg)
52 afx_msg void OnBtnNo1();
53 afx_msg void OnBtnNo2();
54 afx_msg void OnBtnNo3();
55 afx_msg void OnBtnNo4();
56 afx_msg void OnBtnNo5();
57 afx_msg void OnBtnNo6();
58 afx_msg void OnBtnNo7();
59 afx_msg void OnBtnNo8();
60 afx_msg void OnBtnNo9();
61 afx_msg void OnBtnNo0();
62 afx_msg void OnBtnPort();
63 afx_msg void OnBtnAdd();
64 afx_msg void OnBtnSub();
65 afx_msg void OnBtnMul();
66 afx_msg void OnBtnDiv();
67 afx_msg void OnBtnEquel();
68 virtual BOOL OnInitDialog();
69 afx_msg void OnBtnPercent();
70 afx_msg void OnBtnDown();
71 afx_msg void OnBtnNequa();
72 afx_msg void OnBtnSpace();
73 afx_msg void OnBtnC();
74 afx_msg void OnBtnSqrt();
75 //}}AFX_MSG
76 DECLARE_MESSAGE_MAP()
77 };
78
79 //{{AFX_INSERT_LOCATION}}
80 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
81
82 #endif // !defined(AFX_CALCULATORDEMODLG_H__6033594F_8916_49DF_B7FE_B09720CC9632__INCLUDED_)