基于mfc编程的计算器开发与实现本科学位论文.docx
- 文档编号:17875846
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:27
- 大小:381.92KB
基于mfc编程的计算器开发与实现本科学位论文.docx
《基于mfc编程的计算器开发与实现本科学位论文.docx》由会员分享,可在线阅读,更多相关《基于mfc编程的计算器开发与实现本科学位论文.docx(27页珍藏版)》请在冰点文库上搜索。
基于mfc编程的计算器开发与实现本科学位论文
提供全套,各专业毕业设计
PINGDINGSHANUNIVERSITY
实训论文(设计)
题目:
基于MFC编程的计算器
开发与实现
院(系):
软件学院
专业年级:
13级网络工程师
姓名:
姚龙龙
学号:
131530439
指导教师:
徐向艺
2014年11月2日
基于MFC编程的计算器开发与实现
摘要
关键词:
Vc++6.0MFC代码编辑器结构功能图程序流程图类向导
目录
(采用系统自动生成目录)
1绪论1
1.1项目设计的目的1
1.2项目设计的意义1
1.3项目的主要内容和基本结构1
1.4本章小结1
2工具及核心功能介绍2
2.1开发工具2
2.1.1VisualC++的概述2
2.1.2VisualC++的特点2
2.1.3项目和项目工作区2
2.1.4代码编辑器2
2.2项目结构和程序流程2
2.2.1结构功能图3
2.2.2程序流程图3
2.3核心模块功能实现4
2.3.1四则运算模块实现4
2.3.2特殊运算模块实现5
2.3.3删除整个字符串模块实现6
3系统运行环境及截图7
3.1窗口数字和元素按钮的类向导建立7
3.2按钮响应函数7
3.3运行函数10
附录10
心得16
参考文献16
1绪论
1.1项目设计的目的
1、巩固并加深学生对C++语言程序设计知识的理解;
2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;
3、灵活应用类库模式下编写程序的技巧。
4、能够熟练掌握MFC中的各个控件,消息的添加和处理,能够独立完成一些简单的算法,并且能够具体实现一些功能。
5、掌握书写程序设计开发文档的能力。
6、掌握将具体问题抽象为类与对象的方法。
1.2项目设计的意义
通过这次实训使我们掌握基本软件开发的能力,增强对相关专业知识的感性认识,提高应用所学知识在实践中发现问题,分析问题,解决问题的能力。
1.3项目的主要内容和基本结构
课题名称:
计算器的实现
说明:
利用MFC实现一个计算器基本的功能,能执行简单的运算。
要求:
(1)用“计算器”的标准视图执行简单的计算。
基本结构:
(1)组成:
简易计算器由编辑框,数字按钮,功能按钮组成。
1.4本章小结
在前面已经基本明确了本课程报告制作的目的,要求,以及简易计算器的功能,外形的要求,为后期的制作,明确了努力方向。
2工具及核心功能介绍
2.1开发工具
2.1.1VisualC++的概述
MicrosoftVisualC++是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。
它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。
它以拥有“语法高亮”,IntelliSense(自动完成功能)以及高级除错功能而著称。
比如,它允许用户进行远程调试,单步执行等。
还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。
其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。
这些特征明显缩短程式编辑、编译及连结花费的时间,在大型软件计划上尤其显著。
2.1.2VisualC++的特点
(1)VC++6.0作为一个主流的开发平台一直深受编程爱好者的喜爱,是当下主流的Windows平台上的编程环境。
(2)VC++6.0必须具备良好的C/C++的基础,必要的英语阅读能力也是必不可少的,因为大量的技术文档多以英文形式发布。
2.1.3项目和项目工作区
(1)项目截图
(2)项目工作区
VisualC++6.0有自己的项目工作管理区,方便用户在进行项目开发时的对项目的管理和操作。
项目管理区提供三种视图供用户选择,分别是Classview,Resourceview,和Fileview。
在实际的操作中给用户提供了很大的方便。
2.1.4代码编辑器
VC++6.0的代码编辑器使用起来也是十分的方便。
用户可以同时打开多个文档,这适用于用户在进行多文件操作,可以对多个文件内的代码进行编辑。
当然用户也可以最大化当前正在浏览的文件,这样只能对当前文件内的代码进行编辑操作。
2.2项目结构和程序流图
2.2.1结构功能图
序号
文件名
主要功能
备注
1
+
加法求和
两个操作数
2
-
减法求差
两个操作数
3
*
乘法求积
两个操作数
4
/
除法求商
两个操作数
5
%
求模
两个操作数
6
Sqrt
求平方根
一个操作数
7
1/x
求导数
一个操作数
8
Back
退格
一个操作数
9
+/-
转换正负
一个操作数
10
C/CE
寄存器清零
11
=
等于
2.2.2程序流程图
2.3核心模块功能实现
2.3.1四则运算模块实现
1.加法
voidCCalcDlg:
:
OnBnClickedAdd()
{
if(!
b_Start)
{
return;
}
if(en_LastSignl==en_none)
{
en_LastSignl=en_add;
}
RunOperation(en_LastSignl);
en_LastSignl=en_add;
}
2.减法
voidCCalcDlg:
:
OnBnClickedAdd()
{
if(!
b_Start)
{
return;
}
if(en_LastSignl==en_none)
{
en_LastSignl=en_add;
}
RunOperation(en_LastSignl);
en_LastSignl=en_add;
}
3.乘法
voidCCalcDlg:
:
OnBnClickedMul()
{
if(!
b_Start)
{
return;
}
if(en_LastSignl==en_none)
{
cs_Num[1]="1";
en_LastSignl=en_mul;
}
RunOperation(en_LastSignl);
en_LastSignl=en_mul;
}
4.除法
voidCCalcDlg:
:
OnBnClickedDivide()
{
if(!
b_Start)
{
return;
}
if(en_LastSignl==en_none)
{
cs_Num[1]="1";
en_LastSignl=en_div;
}
RunOperation(en_LastSignl);
en_LastSignl=en_div;
}
2.3.2特殊运算模块
voidCCalcDlg:
:
RunOperation(eum_signle_signl)
{
doublesum=0;
doublenAdd1;
doublenAdd2;
nAdd1=atof(cs_Num[0]);
nAdd2=atof(cs_Num[1]);
switch(e_signl)
{
caseen_add:
sum=nAdd1+nAdd2;
break;
caseen_sub:
sum=nAdd1-nAdd2;
break;
caseen_mul:
sum=nAdd1*nAdd2;
break;
caseen_div:
sum=nAdd1/nAdd2;
break;
caseen_none:
sum=nAdd1;
break;
}
cs_Num[0].Format("%.3lf",sum);
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[0]);
if(!
b_Hasport&&-1==cs_Num[0].Find('.'))
{
CStringtemp;
GetDlgItemText(IDC_EDIT_SHOW,temp);
temp+=".";
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
m_i=1;
b_Hasport=FALSE;
b_Start=FALSE;
cs_Num[m_i]="0";
}
voidCCalcDlg:
:
PutIntoNum(intn)
{
CStringtem_i;
tem_i.Format("%d",n);
CStringtemp;
if(!
b_Start)
{
cs_Num[m_i]=tem_i;
b_Start=TRUE;
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
if(!
b_Hasport)
{
GetDlgItemText(IDC_EDIT_SHOW,temp);
temp+=".";
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
return;
}
cs_Num[m_i]+=tem_i;
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
if(!
b_Hasport)
{
GetDlgItemText(IDC_EDIT_SHOW,temp);
temp+=".";
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
}
2.3.3删除整个字符串模块实现
voidCCalcDlg:
:
InitAllDate()
{
en_LastSignl=en_none;
b_Hasport=FALSE;
b_Start=FALSE;
b_Hasmul=FALSE;
b_Hasdiv=FALSE;
cs_Num[0]="0";
cs_Num[1]="0";
m_i=0;
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]+".");
}
3系统运行环境及截图
3.1窗口数字和元素按钮类向导的建立
3.1.1窗口数字
在窗口输入数字后,编辑框内会显示操作者输入的操作数,即可实现基本的算数要求。
3.1.2元素按钮的类向导建立
1)元素按钮建立
在中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。
在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出PushButton属性对话框,在该对话框中输入控件的ID值和标题属性,如下图所示。
按照上面的操作过程编辑其他按钮和编辑框等对象的属性。
表3-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_zhengfuhao
+/-
按钮
IDC_BUTTONPoint
.
按钮
IDC_BTN_ADD
+
按钮
IDC_BTN_SUB
-
按钮
IDC_BTN_MUL
*
按钮
IDC_BTN_DIV
/
按钮
IDC_Sqrt
sqrt
按钮
IDC_daoshu
1/x
按钮
IDC_equal
=
按钮
IDC_Back
Backspace
按钮
IDC_CE
CE
按钮
IDC_C
C
完成后界面如下图所示:
2)元素类向导的建立:
在中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。
在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出PushButton类向导对话框,在该对话框中设置单击函数,如下图所示:
依次将每个按钮按照上面的方法创建类向导,建立单击函数即可。
3.2按钮响应函数
控件
消息
函数功能
IDC_zhengfuhao
BN_CLICKED
处理正负号单击按钮
IDC_BUTTONPoint
BN_CLICKED
处理小数点单击按钮
IDC_equal
BN_CLICKED
处理等于单击按钮
IDC_daoshu
BN_CLICKED
处理倒数单击按钮
IDC_baifenbi
BN_CLICKED
处理百分比单击按钮
IDC_Sqrt
BN_CLICKED
处理开平方单击按钮
IDC_BTN_ADD
BN_CLICKED
处理加号单击按钮
IDC_BTN_SUB
BN_CLICKED
处理减号单击按钮
IDC_BTN_MUL
BN_CLICKED
处理乘号单击按钮
IDC_BTN_DIV
BN_CLICKED
处理除号单击按钮
IDC_Back
BN_CLICKED
处理退格键单击按钮
IDC_CE
BN_CLICKED
处理清零单击按钮
IDC_C
BN_CLICKED
处理归零单击按钮
3.3运行函数
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnButton5();
afx_msgvoidOnButton7();
afx_msgvoidOnzhengfuhao();
afx_msgvoidOnBUTTONPoint();
afx_msgvoidOnButton1();
afx_msgvoidOnButton0();
afx_msgvoidOnButton2();
afx_msgvoidOnButton3();
afx_msgvoidOnBack();
afx_msgvoidOnbaifenbi();
afx_msgvoidOnButton4();
afx_msgvoidOnButton6();
afx_msgvoidOnButton8();
afx_msgvoidOnButton9();
afx_msgvoidOnC();
afx_msgvoidOnCe();
afx_msgvoidOndaoshu();
afx_msgvoidOnequal();
afx_msgvoidOnSqrt();
afx_msgvoidOnBtnDiv();
afx_msgvoidOnBtnMul();
afx_msgvoidOnBtnSub();
afx_msgvoidOnBtnAdd();
附录
计算器所在类的核心代码:
voidCJisuan3Dlg:
:
OnButton5()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
PutIntoNum(5);
}
voidCJisuan3Dlg:
:
OnButton7()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
PutIntoNum(7);
}
//-+
voidCJisuan3Dlg:
:
Onzhengfuhao()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
b_Start)
{
return;
}
CStringtemp;
GetDlgItemText(IDC_EDIT_SHOW,temp);
num=atof(temp);
num=0-num;
temp.Format("%lf",num);
SetDlgItemText(IDC_EDIT_SHOW,temp);
cs_Num[m_i]=temp;
}
voidCJisuan3Dlg:
:
OnBUTTONPoint()
//TODO:
Addyourcontrolnotificationhandlercodehere
//已有小数点时
if(b_Hasport)
{
return;
}
//无小数点
cs_Num[m_i]+=".";
b_Hasport=TRUE;
b_Start=TRUE;
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
}
voidCJisuan3Dlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
PutIntoNum
(1);
}
voidCJisuan3Dlg:
:
OnButton0()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(cs_Num[m_i]=="0")
{return;}
cs_Num[m_i]+="0";
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
if(!
b_Hasport)
{
CStringtemp;
GetDlgItemText(IDC_EDIT_SHOW,temp);
temp+=".";
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
}
voidCJisuan3Dlg:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
PutIntoNum
(2);
}
voidCJisuan3Dlg:
:
OnButton3()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
PutIntoNum(3);
}
//退格键
voidCJisuan3Dlg:
:
OnBack()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
b_Start)
{
return;
}
doublenum;
CStringtemp;
intlen;
CHARtemp_ch[32];
GetDlgItemText(IDC_EDIT_SHOW,temp);
//AfxMessageBox(temp);
num=atof(temp);
sprintf(temp_ch,"%g",num);
num=0;
//AfxMessageBox(temp_ch);
len=strlen(temp_ch);
intte_i=len-1;
if(temp_ch[te_i]=='.')
te_i-=1,b_Hasport=FALSE;
temp_ch[te_i]='\0';
//////////////////////////////////////////////////////////////////////////
//AfxMessageBox(temp_ch);
if(strlen(temp_ch)==0)
{
temp_ch[0]='0';
temp_ch[1]='\0';
}
//////////////////////////////////////////////////////////////////////////
sscanf(temp_ch,"%lf",&num);
temp.Format("%g",num);
//AfxMessageBox(temp);
SetDlgItemText(IDC_EDIT_SHOW,b_Hasport?
temp:
temp+".");
cs_Num[m_i]=temp;
}
}
//%
voidCJisuan3Dlg:
:
Onbaifenbi()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
b_Start)
{
return;
}
doublenum;
CStringtemp;
GetDlgItemText(IDC_EDIT_SHOW,temp);
num=atof(temp);
num/=100;
temp.Format("%lf",num);
if(temp.Find('.')==-1)
SetDlgItemText(IDC_EDIT_SHOW,temp+".");
else
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
voidCJisuan3Dlg:
:
OnButton4()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
PutIntoNum(4);
}
voidCJisuan3Dlg:
:
OnButton6()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
PutIntoNum(6);
}
voidCJisuan3Dlg:
:
OnButton8()
{
//TODO:
Addyourcontrolnotificationhandl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 mfc 编程 计算器 开发 实现 本科 学位 论文