当前位置:文档之家› windows编程大作业简单计算器

windows编程大作业简单计算器

实验报告(2013 / 2014 学年第一学期)课程名称windows 编程实验名称简单计算器实验时间2023 年12 月20 日指导单位计算机、软件学院指导教师王子元学生姓名班级学号学院(系) 计算机学院、软件学院专业计算机软件与服务外包实验报告实验名称简单计算器指导教师王子元实验类型设计实验学时实验时间2013.2.20 一、实验目的和要求要求:实现一个简单计算器,其类似于Windows附件中自带的计算器。

要求界面简洁大方,具有一个菜单栏,一个编辑框及若干按键。

按钮控件具有对鼠标敏感的功能,当鼠标位于不同的位置和状态时,控件会显示不同的颜色。

1.编程思路清晰,图像美观2.代码书写规范,关键部分有注释3.功能实现全面,计算结果正确4.文档书写规范完整,有测试过程5.实现按钮控件对鼠标的敏感处理功能小组成员背景计算器的功能和界面我们都是十分熟悉的。

虽然目前我们电脑上基本都配置得有windows附件自带的计算器,相较于系统自带的计算器,我们想要开发的计算器是要求能实现复杂表达式(如2*3+4-(3+2/2)之类的)运算的,并能准确快速的显示计算结果的软件。

本软件的应用目标是准确快速的计算表达式运算。

本软件的作用范围是面向中小学生的简单的表达式计算类型。

本软件全部内容自含。

该项目开发的周期为两周二、实验环境(实验设备)硬件:微型计算机软件:Microsoft Visual Studio 2010三、实验原理及内容[实验内容]1. 工程的创建。

使用MFC 创建一个基于对话框的工程;2. 界面设计。

使用控件工具栏为对话框添加所需控件,并设置控件属性;使用界面布局工具栏调整控件布局,完成应用程序界面设计。

3. 创建对话框成员变量和成员函数。

使用ClassWizard为控件添加相关联的对话框成员变量和消息相应函数;在Workspace窗口的ClassView页中,根据需要为对话框添加其他成员变量和成员函数。

4.编写代码。

5.编译、调试程序;运行程序,并对程序功能进行测试功能设计(1)支持加减乘除运算(2+3=5)(2)支持输入正确的乘方运算(如2^3=8)(3)支持混合四则运算(如2+3*2=8)(4)支持正确的表达式运算(如2+3*(2-4/2)=2)(5)计算器的输入方式:支持鼠标点击输入和键盘输入本计算器支持鼠标点击操作和键盘输入。

(鼠标输入是点击按钮,编辑框即显示点击的结果和计算结果,键盘输入是点击编辑框锁定光标后从键盘输入的)。

(6)使用图形界面中的事件委托机制来处理事件响应计算器计算结果的输出方式:在计算器窗口的显示。

(7)本计算器应该要支持退格和清零。

点击C按钮将编辑框清零,点击backspace按钮,退格,清除编辑框中最后一个输入字符。

(8)算术运算的数据类型:整数和浮点数本计算器支持的精度是6位小数,支持的运算是32位,超出即位溢出,同时显示的结果仅保留6位小数。

本计算器默认诸如“(8)=”的表达式有效,不设置错误提示。

出现运算异常的情况为:①.被除数为0的情况,提示用户被除数不能为零!②.输入的表达式不正确时,提示出错。

(9)点击等号按钮,或者键盘输入等号时,计算器在编辑框显示计算结果。

当用户通过计算或者输入得到一个含有等号的表达式之后,再次点击等号或者键盘输入等号均不再经行计算。

(10) 以上所有的运算都是在10进制下进行。

(11) 用户不输入任何表达式,直接点击或者键盘输入等号时,默认在编辑框显示0。

实验结果:注:关于鼠标敏感的实现无法截图,请看程序。

进入界面计算界面输入除数为0输入:6/0=运算结果溢出输入:9666666666666666666666666666666666666666*999999999999999999999999999999999999=表达式有误输入: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_LBUTTONDOWN){h=AfxGetApp()->LoadCursor(IDC_CURSOR5);bRes=TRUE;}if(nHitTest==HTCAPTION&&message!=WM_RBUTTONDOWN&&mess age==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;}关键代码如下: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;i<leng;i++) {// if (s.GetAt(i)=='=') {// key=1;// }// }if (s.Find('=')!=-1) {key=1;}if(key==1){s="";}CString s1;char panduandian;//判D断?是?否?能ü输?入?小?数簓点?// 标括?示?s的?最?后ó一?位?,?并¢判D断?是?否?为a数簓字?0-9,?同?时骸?满ú足?标括?示?符?前°移?至á距à离?最?近ü的?小?数簓点?中D间?有瓺操ù作痢?符?。

£int length=s.GetLength();// 有瓺可é能ü出?现?的?情é况? 1.2.1,?opt.,if(length>0){panduandian=s.GetAt(length-1);for(;panduandian>='0'&&panduandian<='9';length=length-1) {if(length<=0) //检ì验éGetAt参?数簓是?否?合?法ぁ?break;else {panduandian=s.GetAt(length-1);}} //长¤度è减?少Θ?if (length<s.GetLength()&&panduandian=='.') {;}else if(length==s.GetLength()){;}else{GetDlgItem(IDC_BTdian)->GetWindowText(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 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;i<leng;i++) {// if (s.GetAt(i)=='=') {// key=1;// }// }if (s.Find('=')!=-1) {key=1;}if(key==1){s="";}CString s1;char panduandian;int length=s.GetLength();if (length>0) {panduandian=s.GetAt(length-1);if (panduandian>='0'&&panduandian<='9'||panduandian==')') {GetDlgItem(IDC_BTADD)->GetWindowText(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;GetDlgItem(IDC_EDIT1)->SetWindowText(s);}}else{GetDlgItem(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断?是?否?存?在ú等台?号?// for (int i=0;i<leng;i++) {// if (s.GetAt(i)=='=') {// key=1;// }// }if (s.Find('=')!=-1) {key=1;}if(key==1){s="";}CString s1;char panduandian;int length=s.GetLength();if (length>0) {panduandian=s.GetAt(length-1);if (panduandian>='0'&&panduandian<='9'||panduandian==')') {GetDlgItem(IDC_BTSUB)->GetWindowText(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)->GetWindowText(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);}*/else{GetDlgItem(IDC_BTSUB)->GetWindowText(s1);s=s+'0'+s1;GetDlgItem(IDC_EDIT1)->SetWindowText(s);}}bool flag_opt; //标括?记?是?否?有瓺除y0操ù作痢?,?默?认?为a0,?没?有瓺bool flag_input; //标括?记?是?否?有瓺输?入?错洙?误ó,?默?认?为a0,?没?有瓺bool flag_maxout; //标括?记?是?否?有瓺溢?出?,?默?认?为a0,?没?有瓺void CMfcTESTDlg::OnBteq(){// TODO: Add your control notification handler code hereint length;CString s1;char sout[100];char str[25];memset(str,0,sizeof(str)); //申Θ?请?空?间?flag_opt=0;flag_input=0;flag_maxout=0;int key=0; //key来ぁ?标括?记?是?否?已?经-存?在ú等台?号?// length=s.GetLength(); //判D断?是?否?存?在ú等台?号?// for (int i=0;i<length;i++) {// if (s.GetAt(i)=='=') {// key=1;// }// }if (s.Find('=')!=-1) {key=1;}if (s.GetLength()==0||s=='0') { //什?么′都?没?输?入?,?按恪?等台?号?的?结á果?。

相关主题