C课程设计简易计算器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《程序设计基础》(C++)课程设计报告
计算器
姓名:
班级:
学号:
指导教师:
成绩:
完成时间:
完成地点:
计算器
1 基本功能描述
计算器包含基本的四则运算、开方、倒数、相反数(正负)等运算。
可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算。
同时包含清除功能。
2 设计思路
如图1是计算器总流程图,输完第一个操作数后,若点击双目运算符,则把m_edit 传递给op1,并传递给变量calculator相对运算符对应的值,输入的第二个操作数传递给op2,点击等号根据calculator的值进行相应运算并输出结果。
若点击的是单目运算符,则直接对其处理得出结果。
若点击清零,则m_edit等于0。
设计思路流程图如下(见下页)。
图1 计算器设计思路总流程图
3 软件设计
创建步骤
打开Microsoft Visual C++ ,选择新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名Calculator及其所在位置。
将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成。
MFC AppWizard建立基于对话窗口的程序框架。
界面设计
1、创建控件
在对话框上的合适的位置画出编辑框和下压式按钮。
如图2所示。
图2 绘制编辑框
在按钮和编辑框属性对话框中输入控件的ID值和标题属性。
如图3所示。
图3 Push Button属性
按照上面的操作过程编辑其他按钮和编辑框等对象的属性。
表1 各对象属性
对象ID 标题或说明
编辑框IDC_EDIT1 结果显示
按钮IDC_BUTTON0 0
按钮IDC_BUTTON1 1
按钮IDC_BUTTON2 2
按钮IDC_BUTTON3 3
按钮IDC_BUTTON4 4
按钮IDC_BUTTON5 5
按钮IDC_BUTTON6 6
按钮IDC_BUTTON7 7
按钮IDC_BUTTON8 8
按钮IDC_BUTTON9 9
按钮IDC_ BUTTONneg +/-
按钮IDC_ BUTTONpot .
按钮IDC_ BUTTONadd +
按钮IDC_BUTTONsub -
按钮IDC_BUTTONmul *
按钮IDC_BUTTONdiv /
按钮IDC_BUTTONsqrt sqrt
按钮IDC_BUTTONCE CE
完成后界面如图4所示。
图4 计算器界面
2、连接变量和代码
1) 给编辑框连接变量。
在编辑框上单击鼠标右键,在弹出菜单中选择ClassWizard菜单项,弹出MFC ClassWizard对话框,选择Member Variables选项卡,如图5所示。
图5 MFC ClassWizard对话框中的Menber Variable选项卡单击Add Variables按钮,在弹出的对话框中连接变量m_edit。
变量类型设定为CString 型。
如图6所示。
图6 m_edit属性设置
2) 给“1”按钮连接代码。
在“1”按钮上单击鼠标右键,选择ClassWizard菜单项,在弹出的对话框中选择Messages Maps选项卡,在Messages列表框中选择BN_CLICKED项,即选择单击按钮事件,如图7所示。
图7 “1”按钮链接代码对话框
关键功能的实现
1)操作数的输入
编辑框所关联的变量为m_edit,程序开始时为零。
每点击一个数字键按钮,就把它累加到m_edit里并刷新显示。
2)单目运算符功能的实现
单目运算符中包含要执行运算的函数。
①正负号功能的实现
利用语句("-")寻找操作数中是否有符号“-”,若没有符号,则在字符串m_edit前添加“-”。
若有符号,则把字符串型变量m_edit转变为浮点型,进行相反数运算(对数值取负),再转变为字符串型通过传递给m_edit输出。
②开方sqrt功能的实现
利用语句x=sqrt(x),实现功能。
③倒数功能的实现
利用语句x=1/x,实现功能。
3)双目运算符功能的实现
执行双目运算符把m_edit中的操作数值保存到变量op1中,然后把m_edit清零。
再将输入的第二个操作数保存到变量op2中。
根据相应的运算符赋予变量calculator相应值,执行等号运算时,根据calculator值选择对应运算函数,讲运算结果传递给m_edit并输出。
4)小数点
利用语句(".") 寻找操作数中是否有符号“.”,若有不添加“.”。
若没有判断(),若大于0,添加字符串“.”;若等于0,添加字符串“0.”。
4 结论与心得体会
经过测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。
经过2个星期的课程1”>=0)
a=1;
}
if (a==0&&()>0)m_edit=m_edit+".";
if (a==0&&()==0)m_edit=m_edit+"0.";
UpdateData(false);
}
⑤等号“=”程序代码
void CCalculatorDlg::OnButtonequal()
{
UpdateData(true);
op2=atof(m_edit);
float s;
switch(calculate)
{
case'+':s=op1+op2;break; //与运算符键相对应的运算函数
case'-':s=op1-op2;break;
case'*':s=op1*op2;break;
case'/':s=op1/op2;break;
case's':s=sqrt(op1);break;
case'w':s=0;break;
}
("%f",s);
UpdateData(false);
}
⑥清除CE程序代码
void CCalculatorDlg::OnButtonCE() {
m_edit="";
UpdateData(false);
}
⑦百分号程序代码
void CCalculatorDlg::OnButtonperc() {
k=1;
float x;
UpdateData(true);
x=atof(m_edit);
x=x*100;
("%f",x);
m_edit=m_edit+"%";
UpdateData(false);
}
⑧正负号(相反数)
void CCalculatorDlg::OnButtonneg () {
k=1;
if ("-")>=0)
{
float x;
UpdateData(true);
x=atof(m_edit);
x=-x;
("%f",x);
UpdateData(false);
}
else
{
UpdateData(true);
m_edit="-"+m_edit;
UpdateData(false);
}
}
⑨倒数1/x程序代码
void CCalculatorDlg::OnButtonreci() {
k=1;
float x;
UpdateData(true);
x=atof(m_edit);
x=1/x;
("%f",x);
UpdateData(false);
}。