C++计算器程序.docx
- 文档编号:16985317
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:32
- 大小:238.45KB
C++计算器程序.docx
《C++计算器程序.docx》由会员分享,可在线阅读,更多相关《C++计算器程序.docx(32页珍藏版)》请在冰点文库上搜索。
C++计算器程序
计算器程序
1.基本功能描述
1)“标准型”计算器,开始运行程序,界面显示的窗口就是标准型的。
标准型计算器包含了计算器基本运算功能,通过数字键按钮和符号按钮实现数字的加、减、乘、除运算,以及数字回删和清除功能。
2)“科学型”计算器。
通过点击单选组框中的“科学型”选项,将计算器转换为科学型。
科学型计算器除了包含标准型所有的功能外,还增加了数字的“正弦”、“余弦”、“幂”、“开放”、“开根号”、“对数”等扩展功能。
其中,科学型计算器还包含了一个“弧度”、“度数”的单选组匡,以实现弧度和度数的转换。
3)菜单栏,包含“查看”、“操作”、“帮助”三个功能。
“查看”中有“科学型”和“标准型”两种界面显示方式;“操作”中有“退出”功能键;“帮助”中有“关于”和“帮助”两个功能。
用户可根据需求选择菜单栏里的选项。
2.设计思路
首先利用MFC类向导制作对话框的界面,按照自己预先规划的样式进行界面的设计。
例如,按钮的个数,位置;编辑框的个数,位置,只读属性;静态提示的文字位置等等。
其次,给每一个控件修改ID以便于自己的识别,控件的属性要按自己的思路修改。
以下是相关变量:
m_Edit_Result:
与编辑框相关的变量。
num1:
作为临时变量存储当前的键入值。
num2:
作为临时变量存储计算结果的的值。
flag:
双目运算符的标志位。
j:
小数点的标志位。
h:
弧度与度数的标志位,为0时表示弧度。
具体设计要根据自己所画的流程图来进行,流程图要尽可能的详细,这样在实施起来就会清晰而方便。
图1数据的输入与输出
图2单目运算符流程图
图3双目运算符流程图
图4程序计算流程图
3.软件设计
3.1设计步骤
1)打开VC++6.0,在File菜单下选择NEW,创建MFCAppWizard(exe)工程,键入的工程名zhoujie_caculate_update,在应用程序类型中选择基本对话框,其他属性直接选用默认,单击确定完成对话框的创建。
最后弹出新建工程信息对话框,该对话框列出了关于新建的应用程序项目文件的相关信息。
单击确定,应用程序向导所有的工作就全部完成了,此时向导为用户生成了一个可执行的应用程序框架。
图5新建工程
图6选择基于对话框,其他默认,按“finish”
图7单击“OK”完成工程新建
2)初始化界面,在对话框中添加所需的控件如按钮,文本,编辑框,菜单,Picture控件,进度条;放置在相应的位置上。
根据需要对其属性进行修改,添加对应的控件变量,并建立类向导,在相应的地方添加响应函数。
图8添加控件并设定属性
图9利用类向导添加消息的响应函数
图10利用类向导添加成员变量
3)制作菜单并为相应的菜单项设定ID和变量以及响应函数,部分菜单具体功能与主界面相同,可以直接将ID设为与界面控件一致即可实现相同功能,不用另外添加代码。
图11为菜单项设定ID
图12为菜单项添加响应函数
4)在实现文件.cpp中添加实现功能所需要的各种函数,并添加相应的代码,同时在头文件中添加对各种函数及变量的声明。
3.2界面设计
1)初始化界面如下所示:
图13主界面初始显示图
2)主界面控件设置如下:
表1主界面对话框控件表
控件名称
控件类型
属性(ID)
对应函数名
0
按钮
ID_BUTTON_ZERO
OnButtonZero()
1
按钮
ID_BUTTON_ONE
OnButtonOne()
2
按钮
ID_BUTTON_TWO
OnButtonwo()
3
按钮
ID_BUTTON_THREE
OnButtonThree()
4
按钮
ID_BUTTON_FOUR
OnButtonFour()
5
按钮
ID_BUTTON_FIVE
OnButtonFive()
6
按钮
ID_BUTTON_SIX
OnButtonSix()
7
按钮
ID_BUTTON_SEVEN
OnButtonSeven()
8
按钮
ID_BUTTON_EIGHT
OnButtonEight()
9
按钮
ID_BUTTON_NINE
OnButtonNine()
.
按钮
ID_BUTTON_POINT
OnButtonPoint()
+
按钮
ID_BUTTON_ADD
OnButtonAdd()
-
按钮
ID_BUTTON_SUBSTRACT
OnButtonSubstract()
*
按钮
ID_BUTTON_MULTIPLY
OnButtonMutiply()
/
按钮
ID_BUTTON_DEVIDE
OnButtonDevide()
=
按钮
ID_BUTTON_DENGYU
OnButtonDengyu()
back
按钮
ID_BUTTON_BACKSPACE
OnButtonBackspace()
clear
按钮
ID_BUTTON_CLEEAR
OnButtonClear()
sin
按钮
ID_BUTTON_SIN
OnButtonSin()
续表1
cos
按钮
ID_BUTTON_COS
OnButtonCos()
log
按钮
ID_BUTTON_LOG
OnButtonLog()
sqrt
按钮
ID_BUTTON_SQURT
OnButtonSqurt()
^
按钮
ID_BUTTON_ZHISHU
OnButtonZhishu()
!
按钮
ID_BUTTON_JIECHENG
OnButtonJiecheng()
科学型
单选按钮
ID_RADIO_KEXUE
OnRadioKexue()
标准型
单选按钮
ID_RADIO_BIAOZHUN
OnRadioBiaozhun()
弧度
单选按钮
ID_RADIO_HUDU
OnRadioHudu()
度数
单选按钮
ID_RADIO_DUSHU
OnRdioDushu()
表2主界面菜单项列表
菜单名称
菜单ID
菜单函数名称
标准型
ID_BIAOZHUN
Oniaozhun()
科学型
ID_KEXUE
OnKexue()
关于
ID_Guanyu
OnGuanyu()
帮助
ID_HELP_USING
OnHelp()
退出
ID_EXIT
OnExit()
3)程序的菜单制作
图14菜单制作
3.3关键功能的实现
1)数字键:
首先在对话框中设置0-9十个数字的按钮控件,再分别对每个控件添加类向导函数。
在键入数字之前要判断双目运算符标志位、小数点标志位的值,根据标志位来键入相应的数字。
2)单目运算符:
在对话框中添加单目运算符-/+、log、sqrt、cos、sin、tan、log的控件,并分别对这些控件添加类向导函数。
首先对输入的数值判断是否合法,如开平方、取对数、取倒数等操作,不合法时输出响应的提示,合法时利用数学函数进行运算,并用m_Edit_Result记录结果。
3)双目运算符:
在对话框中添加双目运算符+、-、*、/、^的控件,并对这些控件添加类向导函数。
设置z为双目运算符标志位,当键入一个数字后键入双目运算符,将z赋值为1。
接着可以键入下一个数字,执行运算。
其中第一个数字用变量num1保存,计算结果现保存在num2中,最后将结果赋值给m_Edit_Result。
4)等于:
在对话框中添加=符号的控件,对它添加类向导函数。
该功能是针对双目运算符的结果进行输出。
以flag作为标志位。
+、-、*、/、^对应的flag值分别为1、2、3、4、5,根据相应的flag的值再利用swich执行各个双目运算符的算法。
5)回删与清除数字:
在对话框中添加back、clear控件按钮,为它们添加类向导函数。
首先判断当前数值是否是小数,如果不是小数则对编辑框里边的数进行除10操作,然后进行取余操作,减去该十分位小数;当该数为小数时,利用小数点后的位数标志位j进行for循环,移动小数点的位置,当只有十分位时停止,减去该位,再次利用for循环将小数点移至原来的数后面,用UpdateData(FALSE),刷新输出到编辑框。
对于清除功能,只要将编辑框变量m_Edit_Result赋值为0即可实现。
6)科学性与标准型切换:
在对话框中添加“科学型”、“标准型”的单选按钮控件,并把它们设置成一个复组匡。
使用SetWindowPos()函数,它可以改变窗先将窗口的大小和位置。
先将窗口初始化,即SetWindowPos(NULL,0,0,279,340,SWP_NOMOVE);然后在“科学型”按钮函数里添加SetWindowPos(NULL,0,0,400,340,SWP_NOMOVE)语句,使窗口大小改变,这样,就可以将科学型包含的功能得以显现。
“标准型”按钮函数设置为与初始化相同。
通过这两个按钮来实现“科学型”、“标准型”的转换。
7)弧度与度数切换:
首先在对话框中添加“弧度”、“度数”的单选按钮控件,并把它们设置成一个复组匡。
设置h为标志位,如果是度数,令h=1,例如取余弦值就可以用m_edit_result=sin(m_edit_result*PI/180)语句给变量赋值。
如果是弧度,令h=0,如果取余弦,用m_edit_result=sin(m_edit_result)语句进行转换,并UpdateData(true)更新数据到文档中。
8)小数点:
在对话框中添加“.”的控件,对它添加类向导函数。
首先通过小数标志位j判断当前是否有小数点。
最开始,j初始化为0,键入数字后按下小数点按钮,将j赋值为1,之后每键入一个数字j将加一,利用m_edit_result=m_edit_result+8/(pow(10,j))语句来实现键入的数字为小数。
最后利用UpdateData(FALSE),刷新输出到编辑框。
4.结论与心得体会
从最开始的初定题目,到最后程序的完成,历经两周的时间。
在这期间,遇到了各种问题,各种困难,程序运行错误,无法实现功能的挫败和绝望感,解决问题后的欣喜和满足感,各种感受记忆犹新。
之所以选择计算器程序,主要是因为之前做过简单的两位数计算。
想当然的以为这个课设应该相对容易一些。
但是当真正开始做以后,才发现一个完整的计算器涉及的知识点、功能竟然这么多,一个小数点的功能实现耗费了我两天的时间,怎么调试都不行,遇到了瓶颈。
之后通过翻阅书籍,网上查询才最终完成这一功能。
整个过程中的实际操作确实是对我的一种考验。
之前学习过C++语言,对MFC编程的印象还是比较深的,但是经过课设以后,无疑更加加深了印象。
让我再一次体会到了VC++的强大与复杂,感觉到自己学习C++就好像在大海里挣扎,这门语言真的好复杂。
系统提供的各种类,各种函数真是多如牛毛。
尽管我只用了很少的一些函数,但是这几天在网上搜索资料,对C++有了进一步的了解。
最强的感觉就是,自己真的好菜,好水。
不得已,只得要用什么功能就在网上搜索对应的资料。
这样才感觉有了一点眉目,要不然真的是只能望洋兴叹了。
正所谓“纸上谈兵终觉浅,觉知此事要躬行。
”所以在本学期课程设计是很及时、很必要的。
这样不仅能加深我们对MFC程序设计的掌握,而且还及时、真正的做到了学以致用。
做MFC程序,首先就是做界面了,主体是一个对话框。
我是先在纸上画出了界面的布局,然后照着预先的布局做的界面,添加各种各样的控件,每添加一个控件我就会在布局的纸上相应控件的位置上标上自己更改以后控件的ID号,这样既便于认识出控件是代表哪个,又不至于以后弄混淆了无法差错,同样的方法,修改了控件的属性,对应的函数以及变量名,目的就是为了自己能更好地识别每一个控件,防止自己犯低级错误。
当然,之所以这样做,也是由于以前犯过弄混淆ID和变量对应不好的低级错误。
然后就是对各个控件添加代码了,这一过程才是真正考验自己编程能力和真正的难度所在。
记得最开始实现双目运算符功能时,一直在纠结怎样键入运算符后再键入第二个数字,怎么将结果通过“=”按钮显示出来。
各种翻阅资料和冥想后才想出了解决办法,利用flag标志位和swich语句实现了这一功能。
由于时间问题和自身编程能力限制,虽然最后做出的计算器并不令我十分满意,由于编辑框变量设置为double型,无法显示+、-等符号,使界面不那么友好。
但这次课设确实让我收获了很多,所学的理论知识也及时得到巩固。
5.思考题
1)程序中如何实现小数的显示与运算?
答:
首先通过小数标志位j判断当前是否有小数点。
最开始,j初始化为0,表示不是小数键入数字后按下小数点按钮,将j赋值为1,之后每键入一个数字,j将加一,利用m_edit_result=m_edit_result+8/(pow(10,j))语句来实现之后键入的数字为小数。
最后再利用UpdateData(FALSE),刷新输出到编辑框。
2)描述等号对应的消息处理函数中需要处理的问题及相应的实现代码。
答:
等号对应的消息处理函数主要处理双目运算符的运算。
利用单双目运算符的标志位flag,判断其值选择相应的双目运算符的算法表达式进行运算,这些双目运算按顺序依次为:
加法、减法、乘法、除法及取对数。
其中在除法和取对数运算中还要判断操作数是否合法,如果不合法输出提示内容,如果合法进行运算。
然后对结果判断是否超过double型数据的显示范围,若超过也输出提示信息。
最后对相应的标志位进行复位。
实现代码如下:
voidCZhoujie_calculate_updateDlg:
:
OnButtonDengyu()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
switch(flag){
case1:
num2=num1+m_edit_result;break;
case2:
num2=num1-m_edit_result;break;
case3:
num2=num1*m_edit_result;break;
case4:
num2=num1/m_edit_result;break;
case5:
num2=pow(num1,m_edit_result);break;
}
m_edit_result=num2;
z=1;
j=0;
UpdateData(false);
}
3)(选做)若实现了科学型和标准型,说明科学型和标准型实现的关键算法?
答:
使用SetWindowPos()函数,它可以改变窗先将窗口的大小和位置。
先将窗口初始化,即SetWindowPos(NULL,0,0,279,340,SWP_NOMOVE);然后在“科学型”按钮函数里添加SetWindowPos(NULL,0,0,400,340,SWP_NOMOVE)语句,使窗口大小改变,这样,就可以将科学型包含的功能得以显现。
“标准型”按钮函数设置为与初始化相同。
通过这两个按钮来实现“科学型”、“标准型”的转换。
6.附录
6.1调试报告
1)在编译时出现Can’topenprecompiledheaderfile:
debug/zhoujie_caculate.pch:
Nosuchfileordirector.按f7编译所有,可解决这一错误。
2)输入一个小数,按下回删键,出现错误。
在回删键的函数里没有对小数的情况进行算法设置,利用if语句判断小数点标志位j,然后进行回删。
3)未定义变量的错误:
例如:
'h':
undeclaredidentifier。
在调试的过程中会出现某些变量未定义,导致这种错误有可能是在对控件建立类向导的时候没有添加变量,也有可能是在添加代码的时候变量名输错导致的;对变量建立类向导的时候添加变量或者改正错误的变量名就能改正这种错误。
4)未添加消息响应函数的逻辑错误:
在类的源文件中添加代码之后,运行的过程中代码并没有被应用,错误原因是没有添加相应的消息函数;在类向导中添加相应的消息函数之后,代码就是可用的了。
5)头文件错误:
例如:
unexpectedendoffilewhilelookingforprecompiledheaderdirective添加了打开文件的相关代码后,编译显示相关语句没有定义不能识别:
这是由于忘了加头文件;加上头文件后编译成功。
6)丢失分号的语法错误:
syntaxerror:
missing';'before'}'在错误出现的地方查看分号丢失的位置并添加上。
6.2测试结果
1)打开计算器程序程序,界面显示如下:
图15初始化主界面显示图
图16科学型计算器界面图
2)数字键入显示
图17数字键入显示图
3)菜单栏功能显示图
图18菜单栏功能显示图
6.3关键源代码
1)定义全局变量
intflag;//双目运算符标志位
intz=0;
intj=0;//小数点标志符
inth=0;//弧度角度标志位
doublenum1;//作为临时变量存储当前的键入值
doublenum2;//作为临时变量存储运算结果
2)数字键函数
voidCZhoujie_calculate_updateDlg:
:
OnButtonZero()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(z!
=0)
m_edit_result=0;
if(j==0)
m_edit_result=m_edit_result*10+0;
else{
m_edit_result=m_edit_result+0/(pow(10,j));
j++;}
UpdateData(false);
z=0;
}
voidCZhoujie_calculate_updateDlg:
:
OnButtonOne()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(z!
=0)
m_edit_result=0;
if(j==0)
m_edit_result=m_edit_result*10+1;
else{
m_edit_result=m_edit_result+1/(pow(10,j));
j++;}
UpdateData(false);
z=0;
}
voidCZhoujie_calculate_updateDlg:
:
OnButtonTwo()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(z!
=0)
m_edit_result=0;
if(j==0)
m_edit_result=m_edit_result*10+2;
else{
m_edit_result=m_edit_result+2/(pow(10,j));
j++;}
UpdateData(false);
z=0;
}
voidCZhoujie_calculate_updateDlg:
:
OnButtonThree()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(z!
=0)
m_edit_result=0;
if(j==0)
m_edit_result=m_edit_result*10+3;
else{
m_edit_result=m_edit_result+3/(pow(10,j));
j++;}
UpdateData(false);
z=0;
}
voidCZhoujie_calculate_updateDlg:
:
OnButtonFour()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(z!
=0)
m_edit_result=0;
if(j==0)
m_edit_result=m_edit_result*10+4;
else{
m_edit_result=m_edit_result+4/(pow(10,j));
j++;}
UpdateData(false);
z=0;
}
voidCZhoujie_calculate_updateDlg:
:
OnButtonFive()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(z!
=0)
m_edit_result=0;
if(j==0)
m_edit_result=m_edit_result*10+5;
else{
m_edit_result=m_edit_result+5/(pow(10,j));
j++;}
UpdateData(false);
z=0;
}
voidCZhoujie_calculate_updateDlg:
:
OnButtonSix()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(z!
=0)
m_edit_result=0;
if(j==0)
m_edit_result=m_edit_result*10+6;
else{
m_edit_result=m_edit_result+6/(pow(10,j));
j++;}
UpdateData(false);
z=0;
}
voidCZhoujie_calculate_updateDlg:
:
OnButtonSeven()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(z!
=0)
m_edit_result=0;
if(j==0)
m_edit_result=m_edit_result*10+7;
else{
m_edit_result=m_edit_result+7/(pow(10,j));
j++;}
UpdateData(false);
z=0;
}
voidCZhoujie_calculate_updateDlg:
:
OnButtonEight()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(z!
=0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 计算器 程序