简单计算器.docx
《简单计算器.docx》由会员分享,可在线阅读,更多相关《简单计算器.docx(14页珍藏版)》请在冰豆网上搜索。
简单计算器
简单计算器
1.基本功能描述
简单计算器包括基本运算功能。
双目运算符包含基本的四则运算加减乘除。
可对输入任意整数操作数进行以上的所有运算并能连续运算。
出现错误会给出相应提示,退出功能以及有与所有按钮相对应的菜单项。
2.设计思路
如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。
子程序开始时m_num为零。
按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。
3.软件设计
3.1设计步骤
打开MicrosoftVisualC++6.0,在文件中点击新建,在弹出框内选择MFCAppWizard[exe]工程,输入工程名jisuanqi及其所在位置,点击确定,如图3所示。
图3新建MFCAppWizard[exe]工程
将弹出MFCAppWizard-step1对话框,选择基本对话框,点击完成,如图4所示。
图4基本对话框
这样,MFCAppWizard就建立了一个基于对话窗口的程序框架,如图5所示
图5新建的对话框
3.2界面设计
1、创建控件
在图5所示的ResoureView选项卡中打开Dialog资源组,双击IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑的对话框。
开始摆放控件,包括编辑框和按钮的创建。
按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。
1)在图5中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。
在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图6所示,在该对话框中输入ID属性。
2)在图3中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。
在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出PushButton属性对话框,如图7所示,在该对话框中输入控件的ID值和标题属性。
图7PushButton属性
按照上面的操作过程编辑其他按钮和编辑框等对象的属性。
对象
ID
标题或说明
编辑框
IDC_xianshi
结果显示
按钮
IDC_BUTTON0
=
按钮
IDC_BUTTON1
退出
输入框1
IDC_HOTKEY2
输入第一个数
输入框2
IDC_HOTKEY2
输入第二个数
下拉输入框
IDC_COMBOBOXEX1
符号输入框
各按钮和编辑框等对象的属性
完成后界面如图8所示
2、连接变量和代码
1)给编辑框连接变量。
在编辑框上单击鼠标右键,在弹出菜单中选择ClassWizard菜单项,弹出MFCClassWizard对话框,选择MemberVariables选项卡,如图9所示。
图9MFCClassWizard对话框中的MenberVariable选项卡
在ControlIDs列表框中选择IDC_xianshi,单击AddVariables按钮,在弹出的对话框中连接变量m_num。
变量类型设定为doubel型。
如图10所示。
图10m_num属性设置
2)给“1”按钮连接代码。
在“1”按钮上单击鼠标右键,选择ClassWizard菜单项,在弹出的对话框中选择MessagesMaps选项卡,然后在ObjectIDs列表框中选择IDC_ADD_BUTTON,在Messages列表框中选择BN_CLICKED项,即选择单击按钮事件,如图11所示。
图11“1”按钮链接代码对话框
3、菜单的设计
选择插入/资源命令,将显示插入资源对话框。
如图12所示。
选择Menu,点击新建即可。
图12插入资源对话框
ResoureView选项卡中打开Menu资源组,双击IDR_MENU1,然后给菜单添加相应的标题,并把每个菜单对应的ID值与相应的按钮的一致。
如图13所示。
图13菜单属性对话框
在对话框的任何一个空白域单击鼠标右键,然后在弹出的快捷菜单中选择Properties命令,弹出DialogProperties对话框,如图14。
在对话框中的菜单组合框中选择IDR_MENU1。
图14对话属性对话框
最终的得到的界面如图15
3.3关键功能实现
1)操作数的输入
编辑框所关联的变量为m_num,程序开始时为零。
每输入一个数字键,就把它累加到m_num里并刷新显示。
BOOL型变量ele来判断是否有小数点和一个整型数dint来表示小数点后的数据的位数。
当ele=TRUE时,表示有小数点,否则则表示无小数点,提示次数不合法。
如部位小数,则继续。
2)双目运算符功能的实现
双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num2中,然后把m_num清零。
这样即可保存第一个操作数。
另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。
为实现连续运算,程序有所改动。
3)退格功能的实现
当按下一次退格按键时,若m_num为整数,只需对其中数据除以10再取整即可。
4)正负号功能的实现
在头文件中定义一个BOOL型变量ele2来判断m_num的正负。
ele2=TRUE时表示为正。
在键入操作数时需要用到ele2。
在正负号按钮的消息响应函数内容为m_num=-m_num;ele2=!
ele2。
4.结论心得与体会
经过多番测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。
经过2个星期的课程设计,我在老师和同学的共同帮助下,顺利完成该课程设计。
本学期我们开设了《计算机软件基础》课部分为需要实践内容。
所以在本学期课程设计是很及时、很必要的。
这样不仅能加深我们对程序设计的掌握,而且还及时、真正的做到了学以致用。
同时知道了要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。
要善于思考。
程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。
只有这样才能纠正程序的不足并使其更加人性化。
这次课程设计让我学到了很多,不仅是巩固了先前学的程序设计知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展,受益匪浅!
5.测试结果
输入“12”,选择“/”号,输入“3”,按“=”键,得出结果。
结果正确,证明可以实现双目运算符的连续运算,菜单功能正常。
6.源程序
Main
#include"Stdafx.h"
#include
#include
#include"resource.h"
#include"MainDlg.h"
BOOLIsInt(TCHAR*str)
{
inti=atoi(str);
TCHARstrtemp[256];
wsprintf(strtemp,"%i",i);
if(strcmp(str,strtemp)!
=0)
{
returnFALSE;
}
else
{
returnTRUE;
}
}
BOOLWINAPIMain_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog);
HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose);
}
returnFALSE;
}
BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam)
{
HWNDhwndComboOP=GetDlgItem(hwnd,IDC_COMBOOP);
ComboBox_InsertString(hwndComboOP,-1,TEXT("+"));
ComboBox_InsertString(hwndComboOP,-1,TEXT("-"));
ComboBox_InsertString(hwndComboOP,-1,TEXT("*"));
ComboBox_InsertString(hwndComboOP,-1,TEXT("/"));
returnTRUE;
}
voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)
{
switch(id)
{
caseIDC_OK:
{
TCHARstr1[256];
TCHARstr2[256];
GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));
GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2));
if(IsInt(str1)==FALSE)
{
MessageBox(hwnd,TEXT("第一个数不是合法整数"),TEXT("错误"),MB_OK|MB_ICONERROR);
return;
}
if(IsInt(str2)==FALSE)
{
MessageBox(hwnd,TEXT("第二个数不是合法整数"),TEXT("错误"),MB_OK|MB_ICONERROR);
return;
}
inti1=atoi(str1);
inti2=atoi(str2);
inti3=0;
HWNDhwndComboOp=GetDlgItem(hwnd,IDC_COMBOOP);
intcurIndex=ComboBox_GetCurSel(hwndComboOp);
switch(curIndex)
{
case0:
{
i3=i1+i2;
}
break;
case1:
{
i3=i1-i2;
}
break;
case2:
{
i3=i1*i2;
}
break;
case3:
{
i3=i1/i2;
}
break;
}
TCHARstr3[256];
itoa(i3,str3,10);
SetDlgItemText(hwnd,IDC_EDIT3,str3);
}
break;
caseIDC_EXIT:
{
exit(0);
}
break;
default:
break;
}
}
voidMain_OnClose(HWNDhwnd)
{
EndDialog(hwnd,0);
}
#ifndef_MAIN_H
#define_MAIN_H
#include
BOOLWINAPIMain_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam);
BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam);
voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify);
voidMain_OnClose(HWNDhwnd);
#endif
2
//3.cpp:
Definestheentrypointfortheapplication.
//
#include"stdafx.h"
#include"resource.h"
#include"MainDlg.h"
#include
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
//EnableIPAddress、Calendar.etc
InitCommonControls();
DialogBox(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,Main_Proc);
return0;
}
3
//stdafx.cpp:
sourcefilethatincludesjustthestandardincludes
//3.pchwillbethepre-compiledheader
//stdafx.objwillcontainthepre-compiledtypeinformation
#include"stdafx.h"
//TODO:
referenceanyadditionalheadersyouneedinSTDAFX.H
//andnotinthisfile