简单计算器毕业课程设计报告.docx

上传人:b****1 文档编号:19025226 上传时间:2023-04-24 格式:DOCX 页数:13 大小:21.23KB
下载 相关 举报
简单计算器毕业课程设计报告.docx_第1页
第1页 / 共13页
简单计算器毕业课程设计报告.docx_第2页
第2页 / 共13页
简单计算器毕业课程设计报告.docx_第3页
第3页 / 共13页
简单计算器毕业课程设计报告.docx_第4页
第4页 / 共13页
简单计算器毕业课程设计报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

简单计算器毕业课程设计报告.docx

《简单计算器毕业课程设计报告.docx》由会员分享,可在线阅读,更多相关《简单计算器毕业课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。

简单计算器毕业课程设计报告.docx

简单计算器毕业课程设计报告

(此文档为word格式,下载后您可任意编辑修改!

目录

1.基本功能描述1

2.设计思路1

2.1相关说明1

2.2各块流程图2

3.软件设计7

3.1设计步骤7

3.2界面设计9

3.2.1添加图标9

2.2.2添加控件10

3.2.3添加菜单12

3.3关键功能的实现14

4.结论与心得体会16

5.参考文献17

6.思考题18

7.附录20

7.1调试报告20

7.2测试结果21

7.3关键源代码23

 

简单计算器

1.基本功能描述

该简单计算器主要实现了双目运算和单目运算功能。

双目运算符包含基本的四则运算及乘幂功能,单目运算符主要包含正余弦,阶乘,对数,开方,倒数等运算,同时也包含角度制的转换、科学型与标准型的转换、输出设计者信息、清除、退格、退出功能。

简单计算器可对输入的任意操作数,包括小数和整数及正数和负数进行上述各种运算并能实现连续运算,并且能在出现错误时给出相应提示。

同时也可以操作与运算按钮相对应的菜单项。

2.设计思路

2.1相关说明

1)相关的变量标志位:

m_num:

与编辑框相关联的变量

num1:

作为临时变量储存当时按下的按钮值

num2:

作为临时变量储存编辑框的值

m_、cos、tan等要考虑角度转换,之后的运算和其他单目运算符没有差别,基于以上的考虑,想到必须对相关的操作进行相应的标志位,具体的如上列举。

简单计算器,在输入数据时,调用输入数据子程序。

子程序开始时m_num为零。

按下数字按钮后,判断m_num的值是否为小数,对其进行相关处理,然后再判断是否为正数,处理后输出结果。

在sin、cos、tan运算中首先利用角度转换的标志位m__num的值,同时也记录下此时danshuang标志位的值便于在等号函数中进行调用,在输入第二个操作数后,按等号进行对双目运算符的处理运算,各项复位,并输出结果到编辑框。

流程图以log运算为例。

整个计算器系统中,总的流程是:

输完第一个操作数后,若按下的运算符是双目运算符,则把m_num存入num2,按下输入第二个操作数并按下“=”按钮后算出结果。

若按下的是单目运算符,则直接对其输入数据进行处理得出结果。

在运算中还要判断运算是否合法(如log、ln等),以及结果是否超出显示范围,做出相关提示,按下清零,对各个标志位、编辑框的值等进行清零。

算出后把结果保存并输出显示。

若需要用算出的结果继续运算则回到输入完第一个操作数后继续进相应的流程,若不需要则判断试否需要开始新一轮的运算,不需要则结束。

2.2各块流程图

图1输入子函数流程图

图2sin运算程序流程图

图3log运算流程图

图4总的流程图

3.软件设计

3.1设计步骤

打开MicrosoftVisualC++6.0应用程序,在文件菜单中点击新建,在弹出的对话框内选择MFCAppWizard[exe]工程,输入工程名liuyunlong,并找到你要保存的位置,点击确定。

如下图所示:

图5建立MFCAppWizard[exe]工程图

在弹出MFC应用程序向导-步骤1对话框中,选择基本对话框(D),若不用修改依次点击“完成”、“确定”按钮。

如下图所示:

图6创建应用程序类型图

此时就建立了一个基于对话窗口的应用程序的大致框架,包括界面、主要的头文件、实现文件等。

如下图所示:

图7对话框基本框架创建完成图

3.2界面设计

3.2.1添加图标

1)在图7所示的ResoureView选项卡中打开Icon资源组,在Icon上单击鼠标右键,在弹出的快捷菜单中选择引入选项,此时弹出“引入资源”对话框,选择要添加的图标,之后单击“引入”按钮,如下图所示:

图8引入图标资源对话框图

2)在Icon资源组中此时会出现一个新的图标项,ID:

IDI_ICON1,将原来的图标项IDR_MAINFRAME用“delete”键删除,鼠标右键单击IDI_ICON1在快捷菜单中选择属性项,在图标属性对话框中将新的图标ID改为IDR_MAINFRAME。

如下图所示:

图9图标属性对话框图

2.2.2添加控件

在图7所示的ResoureView选项卡中打开Dialog资源组,双击IDD_LIUYUNLONG_DIALOG,在右边的工作区中显示出要编辑的对话框。

将对话框中原有的按钮、静态文本框按“delete”键删除,之后开始摆放所需要的控件,包括编辑框和按钮。

按钮的添加以“0”为例,其他按钮类似。

1)在图7中控件的“按钮”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的按钮。

在按钮上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出PushButton属性对话框,在该对话框中输入ID号和标题。

如下图所示:

图10PushButton属性对话框图

2)在图7中控件的“编辑框”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。

在编辑框上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时弹出Edit属性对话框,在该对话框中输入控件的ID值。

如下图所示:

图11Edit属性图

对应的按钮、编辑框属性如下表:

表1按钮和编辑框等对象属性表

控件

ID

标题或说明

编辑框

IDC_SHUCHU

结果显示

按钮

IDC_NUMBER0

0

按钮

IDC_NUMBER1

1

按钮

IDC_NUMBER2

2

按钮

IDC_NUMBER3

3

按钮

IDC_NUMBER4

4

按钮

IDC_NUMBER5

5

按钮

IDC_NUMBER6

6

按钮

IDC_NUMBER7

7

按钮

IDC_NUMBER8

8

按钮

IDC_NUMBER9

9

按钮

IDC_CHANGE

+-

按钮

IDC_POINT

.

按钮

IDC_ADD

+

按钮

IDC_DIFFERENCE

-

按钮

IDC_MULTIPLY

*

按钮

IDC_DIVIDE

按钮

IDC_SGRT

sqrt

按钮

IDC_DAOSHU

1x

按钮

IDC_JIECHENG

n!

按钮

IDC_LN

ln

按钮

IDC_SIN

sin

按钮

IDC_COS

cos

按钮

IDC_MI10

1O^x

按钮

IDC_LOG

Log

按钮

IDC_arcsin

asin

按钮

IDC_arccos

acos

按钮

IDC_EXP

exp

按钮

IDC_EQUAL

=

按钮

IDC_BACKSPACE

按钮

IDC_CLERA

C

单选框

IDC_RADIO_hudu

弧度

单选框

IDC_RADIO_jiaodu

3.2.3添加菜单

1)在图7所示的ResoureView选项卡中打开Icon资源组,鼠标右键单击liuyunlongresource,在快捷菜单中单击“插入”,弹出“插入资源”对话框,单击Menu选项,之后单击“新建”。

如下图所示:

图12插入资源对话框图

2)右键单击菜单项,修改菜单资源的ID为IDR_MENU,在工作区右键单击矩形框,选择属性,在标明里写要添加的菜单项名称,同时修改ID。

如下图所示:

图13添加的查看菜单项图

对应的菜单属性如下表:

表2菜单属性表

菜单选项

ID

=

IDC_EQUAL

.

IDC_POINT

+

IDC_ADD

-

IDC_DIFFERENCE

*

IDC_MULTIPLY

IDC_DIVIDE

sin

IDC_SIN

cos

IDC_COS

asin

IDC_arcsin

acos

IDC_arccos

Log

IDC_LOG

ln

IDC_LN

sqrt

IDC_SGRT

exp

IDC_EXP

1O^x

IDC_MI10

科学型

ID_MENU_kexue

标准型

ID_MENU_biaozhun

exit

ID_exit

关于计算器

ID_MENU_guanyu

3)帮助菜单弹出对话框:

右键单击Dialog,在快捷菜单中单击插入Dialog,确定,在新生成的对话框中加入静态文本框,并编辑相应的文字。

如下图所示:

图14帮助菜单项弹出的对话框图

根据以上操作最终的界面图:

图15最终界面的显示图

3.3关键功能的实现

1)界面颜色的改变:

首先重载对话框的CLiuyunlongDlg类的OnPaint()成员函数,即WM_PAINT消息。

利用GetClientRect()函数获取窗口客户区的坐标。

然后利用FillSolidRect成员函数用指定的固体色填充矩形,其中颜色由RGB函数进行设定。

2)窗口的伸缩的实现:

首先要在对话框中要伸缩的位置插入一个图像控件,将其拉成一条直线,并取消可见。

其次在实现文件里边定义两个静态变量,用来存储对话框尺寸信息。

为了实现第一次显示为标准型,所以获取显示尺寸和位置信息以及执行SetWindowPos函数的最佳时机应放在对话框创建之后,第一次显示之前。

为此利用WM_INITDIALOG消息的响应函数OnInitDialog来对对话框及控件进行相关的设置和修改。

该函数中利用GetDlgItem函数获得图像控件的窗口句柄,结合GetWindowRect函数得到图像控件的矩形框。

进而进行标准型参数的获取,利用SetWindowPos()函数完成对对话框的宽度、高度等参数的初始化设置。

最后添加相应的菜单响应函数,在响应函数里边利用SetWindowPos()函数完成对对话框的宽度、高度等参数的设置。

3)标准型和科学型选择标记的实现:

首先在对话框类的实现文件中添加ON_WM_INITMENUPOPUP入口到消息映射里面。

其次在对话框类的头文件中添加消息函数声明afx_msgvoidOnInitMenuPopup(CMenu*pPopupMenu,UINTnIndex,BOOLbSysMenu);

再次在对话框类的实现文件中添加相应的voidCLiuyunlongDlgOnInitMenuPopup函数代码,该段代码大部分取自WinFrm.cpp文件的函数CFrameWnd:

:

OnInitMenuPopup()。

最后在实现文件中定义两个全局的布尔型变量kexue、biaozhun,通过这两个变量的值判断执行的是标准型、科学型的哪一个,并给标准型和科学型菜单项添加相应的UPDATE_COMMAND_UI响应函数,在响应函数里调用SetRadio函数来进行标记。

4)帮助菜单中关于计算器菜单的实现:

首先创建新的对话框资源,在创建完对话框资源之后,生成一个相关的对话框类。

其次创建相应的菜单项资源,即添加帮助菜单,并添加相应的CAMMAND消息响应函数,在响应函数里边定义对话框类对象,调用DoModal函数。

5)操作数的实现:

首先通过小数标志位point判断当前是否有小数点,如果有用num1记录当前键入的数值,并将小数点后的位数标志位加一,利用for循环,实现该数在小数点哪一位,然后通过正负标志位zhengfu判断当前数值是正数还是负数,如果是正数直接将m_num和小数num1相加,如果是负号则m_num减去num1;如果没有小数点则直接判断该数的正负,若为正数则m_num乘10之后加上键入的数,若为负号则m_num乘10之后减去键入的数。

并把结果保存到m_num中,利用UpdateData(FALSE),刷新输出到编辑框。

6)退格键的实现:

首先判断当前数值是否是小数,如果不是小数则对编辑框里边的数进行除10操作,然后利用fmod进行取余操作,减去该十分位小数;当该数为小数时,利用小数点后的位数标志位dianhou进行for循环,移动小数点的位置,当只有十分位时停止,减去该位,再次利用for循环将小数点移至原来的数后面,用UpdateData(FALSE),刷新输出到编辑框。

7)清除键的实现:

将编辑框连接的变量m_num,所有的临时变量num1、num2,标志位dianhou、danshuang、point、zhengfu,进行清零复位操作即可。

8)角度值转换的实现:

利用单选按钮框,连接相应的变量m_”得到相应的错误提示如17图所示;然后点击“C”和单选按钮“度”依次并输入“90”,“sin”,“*”,“2”,“exp”,“ln”“sqrt”得到相应的结果,之后结合菜单项实现结果一直,如18图所示:

图17反正弦输入错误提示图

图18点击科学型菜单后运算结果图

在点击查看菜单中的科学型选项后,如图17、图18所示,界面进行了科学型的扩展,添加了三角函数、幂、取对数、阶乘等运算按钮及角度制转换的单选按钮。

经检验和√2相当的接近,运算结果无误,且能实现对输入的错误操作数的错误提示功能。

该界面中还包含了编辑、查看、帮助菜单项,其中编辑中主要是运算符菜单,进行数值计算,查看中包含了标准型、科学型、exit选项,实现计算器界面的伸缩和退出,而在帮助菜单中是关于计算器菜单项,点击后显示计算器的制作者信息。

如下图所示:

图19关于计算器信息显示图

7.3关键源代码

定义的相关变量

BOOLzhengfu=true;zhengfu定义为布尔值,判断当前值是否是正数还是负数

intdanshuang;单双目运算符转换

inti;

intdianhou;diann判断小数后的位数

BOOLpoint=false;point定义为布尔值,判断是否有小数点

boolkexue=false;

boolbiaozhun=TRUE;

doublenum2;

doublenum1;

doublem_jiao;角度与弧度转换临时变量

CRectrectLarge;

CRectrectSmall;新加的扩展与收缩对话框的变量

编辑框和单选按钮的变量初始化

CLiuyunlongDlg:

:

CLiuyunlongDlg(CWnd*pParent*=NULL*)

:

CDialog(CLiuyunlongDlg:

:

IDD,pParent)

{

{{AFX_DATA_INIT(CLiuyunlongDlg)

m_num=0.0;

m_doesnotrequireasubsequentDestroyIconinWin32

m_=AfxGetApp()->LoadIcon(IDR_MAINFRAME);图标显示

}

界面伸缩式扩展代码

BOOLCLiuyunlongDlg:

:

OnInitDialog()

{

TODO:

AddextrainitializationTRUE;returnTRUEunlessyousetthefocustoacontrol

}

设置背景颜色所加代码

voidCLiuyunlongDlg:

:

OnPaint()

{

if(IsIconic())

{

……

}

else

{

CRectrect;

CPaintDCdc(this);

GetClientRect(rect);获取该对话框的位置坐标

dc.FillSolidRect(rect,RGB());设置为绿色背景

CDialog:

:

OnPaint();

}

}

在标准和科学型菜单前面加点标志为了使响应函数调用所加的代码

voidCLiuyunlongDlg:

:

OnInitMenuPopup(CMenu*pPopupMenu,UINTnIndex,BOOLbSysMenu){

ASSERT(pPopupMenu!

=NULL);

Checktheenabledstateofvariousmenuitems.

CCmdUIstate;

state.m_pMenu=pPopupMenu;

ASSERT(state.m_pOther==NULL);

ASSERT(state.m_pParentMenu==NULL);

Determineifmenuispopupintop-levelmenuandsetm_pOtherto

itifso(m_pParentMenu==NULLindicatesthatitissecondarypopup).

HMENUpopupisfound,m_pParentMenuiscontainingmenu.

state.m_pParentMenu=CMenu:

:

FromHandle(=false;

}

标准型、科学型标记实现,以标准型为例:

voidCLiuyunlongDlg:

:

OnUpdateMENUbiaozhun(CCmdUI*pCmdUI)

{

TODO:

AddyourcommandupdateUI);设置单选标记函数

}

退出功能

voidCLiuyunlongDlg:

:

Onexit()

{

TODO:

Addyourcommandhandlercodehere

OnOK();退出

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1