MFC计算器程序报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++课程设计实验报告
学号姓名
院系专业
一、课题名称
简易的计算器设计。
二、问题陈述
编写一个计算器程序,能够进行四则运算、取模等运算
要求:
1、个人完成;
2、运用对话框编写,界面上只能有一个输出框,数据通过按钮输入到程序,并显
示在输出框中;当按下运算符后再输入数据,输出框中应显示新数据;运算结果也显示在输出框中。
3、四则运算、取模运算是最低要求,程序能正确执行;
4、界面设计美观、合理;
5、独立完成;
三、设计目标和设计任务
编写一个计算器程序,能够进行四则运算、取模、乘方、立方,并且给计算器程序添加背景。
四、解题算法思想
1.创建一个基于对话框的项目
2. 给对话框加入相应的操作按钮
3. 给按钮加上代码,设置属性
4. 为实现四则运算、取模等操作添加必要函数
五、程序算法过程
①选择File→New菜单命令,选择Project选项卡,并选择MFC AppWizard(exe), name 命名为calculator;选择应用程序基于对话框,即Dialog based。多次单击next,最后单击Finish后,系统弹出一对话框,如下图:
②使用按钮控件、文本编辑框控件和组控件,将他们加入到对话框中,并通过更改按钮控件的属性中的标题部分。选中所有按钮,在属性中的Extended Style中选中Modal frame,使其达到下图效果:(注意,在布局按钮时,为了使按钮总体整齐美观,可以先创建一行或一列按钮,使他们保持整齐后,按住Ctrl键,选中这一行或一列按钮,再移动鼠标,即可生成另一行或一列按钮;也可以通过Layout菜单中的指令对其进行布局)
③鼠标右击按钮控件,选择属性,即可对其ID进行更改,各ID与标题内容对应如下:
ID 标题ID 标题IDC_BUTTON0 0 IDC_BUTTONCLS 清零
IDC_BUTTON1 1 IDC_ADD +
IDC_BUTTON2 2 IDC_PLUS -
IDC_BUTTON3 3 IDC_MULTIPL Y *
IDC_BUTTON4 4 IDC_DEVIDE /
IDC_BUTTON5 5 IDC_EQUALL =
IDC_BUTTON6 6 IDC_QUM 取模
|IDC_BUTTON7 7 IDC_SQU 平方
IDC_BUTTON8 8 IDC_CUB 立方
IDC_BUTTON9 9
④在对话框非控件部分单击鼠标右键,打开类向导ClassWizard,将数字按钮0~9关联到函数OnEnternum(),方法为单击数字按钮ID,然后单击Message中的BN_CLICKED,最后单击右侧的Add Function,在其中输入函数名即可。如下图:
用相同的方法,将运算符+、-、*、/ 按钮关联到函数OnComputer(),将清零按钮关联到函数OnButtoncls(),将等号按钮关联到函数OnEquall(),将取模按钮关联到函数OnQum (),将平方按钮关联到函数OnSqu(),将立方按钮关联到函数OnCub()。
⑤为文本编辑框IDC_EDIT1添加关联float型变量m_nnum。方法为打开类向导,单击Member Variables选项卡,选中IDC_EDIT1,单击右侧的Add Variable...,在弹出的对话框中添加变量。如下图:
添加类成员变量,它们的名称及用途为:
private:
BOOL m_bnext;//记录在键入数据后是否键入过运算符
int m_ncomflag;//记录键入运算符次数
float m_numold;//记录上次运算的结果
operation m_oper;//记录上次运算符号
方法为在Class View 选项卡中打开CCalculatorDlg,在
class CCalculatorDlg : public CDialog 中添加上述代码。
如下图:
同时添加代码:
typedef enum{add,plus,multiply,devide}operation;//定义一个数据类型,该类型的变量值只
//能在enum定义的范围内取,即add,plus,multiply,devide。
⑥接下来为各个函数添加代码。代码内容及解释如下:
void CCalculatorDlg::OnEnternum()
{
// TODO: Add your control notification handler code here
CString strnum,strold;//定义两个CString类型的变量,方便之后字符串的拼接。
this->GetDlgItemText(IDC_EDIT1,strold);//获得编辑框控件内显示的标题,并将它赋
//给strold。
this->GetFocus()->GetWindowText(strnum);//将所按下的数字符的标题内容赋给strnum。if(m_bnext)//bnext变量在此的作用是判断输入数字符前,是否已输入操作符。m_bnext
//的初始值为TURE。
{this->SetDlgItemText(IDC_EDIT1,strnum);//如果m_bnext的值为TURE,即已输入//操作符,则将编辑框控件内的正文直接重置为strnum的值。
m_bnext=FALSE;//由于按下了数字符,故将m_bnext的值设为FALSE,为下一次数
//字的输入做好准备。
}
else
{if(strold=="0")
this->SetDlgItemText(IDC_EDIT1,strnum);//若编辑框内的数字显示为零(即第一次//按下的数字符是0),也要将编辑框的正文重置。
else
this->SetDlgItemText(IDC_EDIT1,strold+strnum);//将编辑框控件内的正文设
//置为strold+strnum,即将新按下的数字符拼接在原编辑框正文之后。
}
UpdateData(TRUE);//将编辑框显示的内容传递给m_nnum。
}
void CCalculatorDlg::OnComputer()
{
// TODO: Add your control notification handler code here
CString stroper;
m_ncomflag++;//变量m_ncomflag的作用是记录操作符的键入次数。
m_bnext=TRUE;//由于按下了操作符,故将m_bnext的值置为TRUE。
if(m_ncomflag>1)//以下代码是为了应对出现的连续运算而设计的。
{m_numold=computer(m_numold,m_oper);//m_numold的作用是记录下上次运算的结
//果。
this->GetFocus()->GetWindowText(stroper);//将所按下的操作符的标题内容赋给
//stroper。
if(stroper=="+")m_oper=add;
if(stroper=="-")m_oper=plus;
if(stroper=="*")m_oper=multiply;
if(stroper=="/")m_oper=devide;//四种符号对应四种运算,方便接下来在computer函数
//中的运算执行过程。