windows编程大作业-简单计算器_第1页
windows编程大作业-简单计算器_第2页
windows编程大作业-简单计算器_第3页
windows编程大作业-简单计算器_第4页
windows编程大作业-简单计算器_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实 验 报 告(2013 / 2014 学年 第 一 学期)课程名称windows 编程实验名称简单计算器实验时间2023年12月20日指导单位计算机、软件学院指导教师王子元学生姓名班级学号学院(系)计算机学院、软件学院专 业计算机软件与服务外包实 验 报 告实验名称简单计算器指导教师王子元实验类型设计实验学时实验时间2013.2.20一、 实验目的和要求要求:实现一个简单计算器,其类似于Windows附件中自带的计算器。要求界面简洁大方,具有一个菜单栏,一个编辑框及若干按键。按钮控件具有对鼠标敏感的功能,当鼠标位于不同的位置和状态时,控件会显示不同的颜色。1.编程思路清晰,图像美观2.代码书

2、写规范,关键部分有注释 3.功能实现全面,计算结果正确 4.文档书写规范完整,有测试过程 5.实现按钮控件对鼠标的敏感处理功能 小组成员背景 计算器的功能和界面我们都是十分熟悉的。虽然目前我们电脑上基本都配置得有windows附件自带的计算器,相较于系统自带的计算器,我们想要开发的计算器是要求能实现复杂表达式(如2*3+4-(3+2/2)之类的)运算的,并能准确快速的显示计算结果的软件。本软件的应用目标是准确快速的计算表达式运算。本软件的作用范围是面向中小学生的简单的表达式计算类型。本软件全部内容自含。该项目开发的周期为两周二、实验环境(实验设备)硬件:微型计算机软件: Microsoft V

3、isual Studio 20103、 实验原理及内容实验内容1.工程的创建。使用MFC创建一个基于对话框的工程;2.界面设计。使用控件工具栏为对话框添加所需控件,并设置控件属性;使用界面布局工具栏调整控件布局,完成应用程序界面设计。3.创建对话框成员变量和成员函数。使用ClassWizard为控件添加相关联的对话框成员变量和消息相应函数;在Workspace窗口的ClassView页中,根据需要为对话框添加其他成员变量和成员函数。4编写代码。5编译、调试程序;运行程序,并对程序功能进行测试功能设计(1) 支持加减乘除运算(2+3=5)(2)支持输入正确的乘方运算(如23=8)(3)支持混合四

4、则运算(如2+3*2=8)(4)支持正确的表达式运算(如2+3*(2-4/2)=2)(5)计算器的输入方式:支持鼠标点击输入和键盘输入本计算器支持鼠标点击操作和键盘输入。(鼠标输入是点击按钮,编辑框即显示点击的结果和计算结果,键盘输入是点击编辑框锁定光标后从键盘输入的)。(6)使用图形界面中的事件委托机制来处理事件响应计算器计算结果的输出方式:在计算器窗口的显示。(7) 本计算器应该要支持退格和清零。点击C按钮将编辑框清零,点击backspace按钮,退格,清除编辑框中最后一个输入字符。(8)算术运算的数据类型:整数和浮点数 本计算器支持的精度是6位小数,支持的运算是32位,超出即位溢出,同时

5、显示的结果仅保留6位小数。本计算器默认诸如“(8)=”的表达式有效,不设置错误提示。 出现运算异常的情况为:.被除数为0的情况,提示用户被除数不能为零!.输入的表达式不正确时,提示出错。(9)点击等号按钮,或者键盘输入等号时,计算器在编辑框显示计算结果。当用户通过计算或者输入得到一个含有等号的表达式之后,再次点击等号或者键盘输入等号均不再经行计算。 (10) 以上所有的运算都是在10进制下进行。(11) 用户不输入任何表达式,直接点击或者键盘输入等号时,默认在编辑框显示0。实验结果:注:关于鼠标敏感的实现无法截图,请看程序。进入界面 计算界面 输入除数为0输入:6/0= 运算结果溢出输入:*9

6、99= 表达式有误输入:6*(*4= 实现视图内指定区域内对鼠标点击和移动的敏感处理功能 需要新加入函数:BOOL CMFCDlg:OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) BOOL bRes=CDialog:OnSetCursor(pWnd, nHitTest, message);HCURSOR h;if(nHitTest=HTCLIENT&message=WM_RBUTTONDOWN) h=AfxGetApp()-LoadCursor(IDC_CURSOR1); bRes=TRUE;if(message=WM_LBUTTOND

7、OWN) h=AfxGetApp()-LoadCursor(IDC_CURSOR5);bRes=TRUE;if(nHitTest=HTCAPTION&message!=WM_RBUTTONDOWN&message=WM_LBUTTONDOWN) h=AfxGetApp()-LoadStandardCursor(IDC_SIZEALL); bRes=TRUE;if(nHitTest=HTMENU&message!=WM_RBUTTONDOWN) h=AfxGetApp()-LoadCursor(IDC_CURSOR4);bRes=TRUE;SetCursor(h);return bRes;关键代

8、码如下:void CMfcTESTDlg:OnBTdian() / TODO: Add your control notification handler code here/int leng;int key=0; /key来?标括?记?是?否?已?经-存?在等台?号?/leng=s.GetLength(); /判D断?是?否?存?在等台?号?/for (int i=0;i0)panduandian=s.GetAt(length-1); for(;panduandian=0&panduandian=9;length=length-1) if(length=0) /检验GetAt参?数簓是?否?

9、合?法?break;else panduandian=s.GetAt(length-1); /长度减?少?if (lengthGetWindowText(s1); s=s+s1; GetDlgItem(IDC_EDIT1)-SetWindowText(s);else GetDlgItem(IDC_BTdian)-GetWindowText(s1); s=s+0+s1; GetDlgItem(IDC_EDIT1)-SetWindowText(s);void CMfcTESTDlg:OnBtc() / TODO: Add your control notification handler code

10、 heres=;GetDlgItem(IDC_EDIT1)-SetWindowText(0);void CMfcTESTDlg:OnBtadd() /函数簓功|能:阰判D断?是?否?输?入?例如?:阰+,?+-,?+/之?类?的?运?算?,?并显?示?输?入?/ TODO: Add your control notification handler code here/int leng;int key=0; /key来?标括?记?是?否?已?经-存?在等台?号?/leng=s.GetLength(); /判D断?是?否?存?在等台?号?/for (int i=0;i0) panduandian

11、=s.GetAt(length-1); if (panduandian=0&panduandianGetWindowText(s1);s=s+s1; GetDlgItem(IDC_EDIT1)-SetWindowText(s); else/CMfcTESTDlg.OnBtback();int length=s.GetLength(); / onbtback功|能重?用?s.Delete(length-1,1);GetDlgItem(IDC_EDIT1)-SetWindowText(s); GetDlgItem(IDC_BTADD)-GetWindowText(s1);s=s+s1; GetDl

12、gItem(IDC_EDIT1)-SetWindowText(s); elseGetDlgItem(IDC_BTADD)-GetWindowText(s1); s=s+0+s1; GetDlgItem(IDC_EDIT1)-SetWindowText(s);void CMfcTESTDlg:OnBtsub() / TODO: Add your control notification handler code here/int leng;int key=0; /key来?标括?记?是?否?已?经-存?在等台?号?/leng=s.GetLength(); /判D断?是?否?存?在等台?号?/fo

13、r (int i=0;i0) panduandian=s.GetAt(length-1); if (panduandian=0&panduandianGetWindowText(s1);s=s+s1; GetDlgItem(IDC_EDIT1)-SetWindowText(s); else/CMfcTESTDlg.OnBtback();int length=s.GetLength();/ onbtback功|能重?用?s.Delete(length-1,1);GetDlgItem(IDC_EDIT1)-SetWindowText(s);GetDlgItem(IDC_BTSUB)-GetWind

14、owText(s1);s=s+s1; GetDlgItem(IDC_EDIT1)-SetWindowText(s); /*else if (length=0) GetDlgItem(IDC_BTSUB)-GetWindowText(s1);s=s+s1;GetDlgItem(IDC_EDIT1)-SetWindowText(s);*/elseGetDlgItem(IDC_BTSUB)-GetWindowText(s1); s=s+0+s1; GetDlgItem(IDC_EDIT1)-SetWindowText(s);bool flag_opt; /标括?记?是?否?有瓺除y0操作痢?,?默?

15、认?为a0,?没?有瓺bool flag_input; /标括?记?是?否?有瓺输?入?错洙?误,?默?认?为a0,?没?有瓺bool flag_maxout; /标括?记?是?否?有瓺溢?出?,?默?认?为a0,?没?有瓺void CMfcTESTDlg:OnBteq() / TODO: Add your control notification handler code hereint length; CString s1;char sout100;char str25;memset(str,0,sizeof(str); /申?请?空?间? flag_opt=0;flag_input=0;

16、flag_maxout=0; int key=0; /key来?标括?记?是?否?已?经-存?在等台?号?/length=s.GetLength(); /判D断?是?否?存?在等台?号?/for (int i=0;iSetWindowText(s);s=;else if(key!=1|s.Right(1)=) /.if (s.Right(1)!=) /表括?达?式?末?尾2没?有瓺等台?号?,?则添?加进?去?GetDlgItem(IDC_BTEQ)-GetWindowText(s1);s1=s1+n;s=s+s1; int numl=0; / 标括?记?左哩?右?括?号?是?否?匹¥配?/i

17、nt numr=0; length=s.GetLength(); /转羇换?成字?符?数簓组哩?for (int i=length;i0;i-) stri-1=s.GetAt(i-1);if (stri-1=() /左哩?右?括?号?匹¥配?问题琣 numl+;if (stri-1=) numl-;strlength=0; float score=compute(str,length); /计?算?if (flag_opt) /出?错洙?处鋦理? MessageBox(存?在除y数簓为a0,?请?检查输?入?, Error, MB_ICONERROR | MB_OK); else if (flag_input)MessageBox(表括?达?式?输?入?有瓺误,?请?检查输?入?, Error, MB_ICONERROR | MB_OK); else if (flag_maxout) MessageBox(运?算?结果?溢?出?, Error, MB_ICONERROR | MB_OK);else if (numl!=0) /括?号?不?匹¥配? MessageBox(表括?达?式?输?入?括?号?不?匹¥配?,?请?检查输?入?, Error, MB_ICONERROR | MB_OK); numl=0;/numr=0; else /没?出?错洙?则显?示?结果?

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论