




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 报 告 课程名称: 面向对象程序设计C+ 设计题目: 计算器课程设计 专 业: 计算机科学与技术2013级 姓 名: 学 号: 指导教师: 李晓虹 2015 年 1 月 10 日目 录1背景与目的32需求分析33总体设计思路34详细设计64.1设计步骤64.2界面设计74.3功能实现125计算器的测试结果135.1测试一135.2测试二145.3测试三145.3测试四146结果分析157总结157附源代码151背景与目的计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。要实现计算功能,可以用VC+的知识编写程序来解决此问题。该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。简单计算器包括双目运算和单目运算功能。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C+程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束2需求分析本软件主要用于计算机windows2000/XP以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。要程序能实现:加,减,乘,除,开方,倒数等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。另外还可以实现多种科学计算的功能,如:三角函数的计算,弧度与角度间的转换,对数指数的计算等等。3总体设计思路整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。子程序开始时m_num为零。按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。回到总流程图中,输完第一个操作数后,若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。若按下的是单目运算符,则直接对其处理得出结果。若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。算出后把结果保存至num2。若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。图3-1输入数据子函数流程图图3-2简单计算器总流程图4详细设计4.1设计步骤打开MicrosoftVisualC+6.0,在文件中点击新建,在弹出框内选择MFCAppWizardexe工程,输入工程名jisuanqi及其所在位置,点击确定,如图4-1所示:图4-1新建MFCAppWizardexe工程将弹出MFC AppWizard-step1对话框,选择基本对话框,点击完成,如图4-2所示。图4-2基本对话框这样,MFCAppWizard就建立了一个基于对话窗口的程序框架,如图4-3所示。图4-3新建的对话框4.2界面设计1、创建控件在图4-3所示的ResoureView选项卡中打开Dialog资源组,双击IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。1)在图4-3中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图4-4所示,在该对话框中输入ID属性。图4-4Edit属性对话框2)在图3中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出PushButton属性对话框,如图4-5所示,在该对话框中输入控件的ID值和标题属性。图4-5PushButton属性再按照上面的操作过程编辑其他按钮和编辑框等对象的属性。表4-1各按钮和编辑框等对象的属性对象ID标题或说明编辑框IDC_xianshi结果显示按钮IDC_BUTTON00按钮IDC_BUTTON11按钮IDC_BUTTON22按钮IDC_BUTTON33按钮IDC_BUTTON44按钮IDC_BUTTON55按钮IDC_BUTTON66按钮IDC_BUTTON77按钮IDC_BUTTON88按钮IDC_BUTTON99按钮IDC_change+/-按钮IDC_point.按钮IDC_add+按钮IDC_difference-按钮IDC_multiply*按钮IDC_devide/按钮IDC_sqrtsqrt按钮IDC_daoshu1/x按钮IDC_jiechengn!按钮IDC_lnln按钮IDC_sinsin按钮IDC_coscos按钮IDC_powxy按钮IDC_Onequal=按钮IDC_backspaceBackspace按钮IDC_OnclearClear完成后界面如图4-6所示:图4-6计算器界面2、连接变量和代码1)给编辑框连接变量。在编辑框上单击鼠标右键,在弹出菜单中选择ClassWizard菜单项,弹出MFCClassWizard对话框,选择MemberVariables选项卡,如图4-7所示。图4-7MFC ClassWizard对话框中的MenberVariable选项卡在ControlIDs列表框中选择IDC_xianshi,单击AddVariables按钮,在弹出的对话框中连接变量m_num。变量类型设定为doubel型。如图4-8所示。图4-8m_num属性设置2)给“1”按钮连接代码。在“1”按钮上单击鼠标右键,选择ClassWizard菜单项,在弹出的对话框中选择MessagesMaps选项卡,然后在ObjectIDs列表框中选择IDC_ADD_BUTTON,在Messages列表框中选择BN_CLICKED项,即选择单击按钮事件,如图4-9所示。图4-9“1”按钮链接代码对话框3、菜单的设计选择“插入/资源”命令,将显示插入资源对话框。如图4-10所示。选择Menu,点击新建即可。图4-10插入资源对话框ResoureView选项卡中打开Menu资源组,双击IDR_MENU1,然后给菜单添加相应的标题,并把每个菜单对应的ID值与相应的按钮的一致。如图4-11所示。图4-11菜单属性对话框在对话框的任何一个空白域单击鼠标右键,然后在弹出的快捷菜单中选择Properties命令,弹出DialogProperties对话框,如图4-12。在对话框中的菜单组合框中选择IDR_MENU1。图4-12对话属性对话框最终的得到的界面如图4-13。图4-13计算器完整界面4.3功能实现1、操作数的输入编辑框所关联的变量为m_num,程序开始时为零。每按下一个数字键按钮,就把它累加到m_num里并刷新显示。BOOL型变量ele来判断是否有小数点和一个整型数dint来表示小数点后的数据的位数。当ele=TRUE时,表示有小数点,否则表示无小数点。按下小数点按钮后执行ele=TRUE。当按下一个数字键时,首先根据ele判断是否按下小数点,若有则把小数点后数的位数加1,dint则为此次键入的数所处的位数,将键入的数除以dint个10然后累加到编辑框所关联的变量m_num上,若没有则把m_num乘以10,然后累加到编辑框所关联的变量m_num上。2、单目运算符功能的实现由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_num=sqrt(m_num).按下按钮即可实现其功能。为实现连续运算,程序有所改动。3、双目运算符功能的实现双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num2中,然后把m_num清零。这样即可保存第一个操作数。另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。为实现连续运算,程序有所改动。4、退格键功能的实现当按下一次退格按钮时,若m_num为整数,只需对其中数据除以10再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数dint进行操作,先对m_num执行(dint-1)次乘以10运算,然后取整,接着执行(dint-1)次除以10的运算即可。完成后需要把dint将减小1。5、正负号功能的实现在头文件中定义一个BOOL型变量ele2来判断m_num的正负。ele2=TRUE时表示为正。在键入操作数时需要用到ele2。在正负号按钮的消息响应函数内容为m_num=-m_num;ele2=!ele2。6、连续运算功能的实现要连续运算必须将每次运算的结果保存下来,对于双目运算符:首先在等号按钮的消息处理函数中在m_num清零之前将m_num的值赋给num2.不过这样的话如果再按双目运算符则num2的值将会被覆盖,于是在双目运算符按钮的消息处理函数中将“num2=m_num;”改为“if(m_num!=0)num2=m_num;”.这样若已经保存了结果则不进行覆盖。然后在每个数字按钮前加上“if(addt=0)num2=0;”,这样如果进行完一次运算之后按下任一数字键表示不需要连续运算,则将保存的结果删除,若按下的是双目运算符按钮则可以继续运算。对于单目运算符:每次运算完之后都会对m_num清零,因此其结果也要赋给num2,下次运算是则会用到num2,于是第一次运算时直接将m_num的值赋给num2,对其进行运算。为实现连续运算是不需要按下等号即可实现,又在所有的运算符按钮的消息处理函数代码前加上了“if(addt!=0)Onequal();”。既若之前有按下双目运算符和两个操作数则连续运算再按下任一运算符时会自动调用等号的处理函数将上次的运算完成并保存结果方便下一次的运算。5计算器的测试结果5.1测试一点击“123.456”“+”“78”“=”,运算结果201.456,与实际结果相同。图5-1 测试运算结果5.2测试二点击“0”进行清零,接下来准备输入“12”“+”“1”“=”,当点击“+”后,屏幕出现了结果213.456,说明是根据上一次的结果继续进行计算的,没有实现清零的功能。图5-2 测试运算结果5.3测试三点击“210”“-”“21”“=”,结果为10,与实际结果相符。图5-3 测试运算结果5.3测试四点击“78”“*”“2”“=”,结果为156,与实际结果相符。图5-4 测试运算结果6结果分析通过对计算器的功能测试,各类运算功能都已经实现,只有没有的实现清零的功能,所以会在连续对数进行操作的时候发生错误。还有,当输入的数据很大或者很小时,会致使结果很大或者很小,此时,若是结果的大小超过数据类型的表示范围,那么就会产生错误,并且显示错误信息。若是没有超出数据的表示范围,那么就会用浮点数来表示比较大或者比较小的数据。7总结经过多次测试,得出结论为设计的计算器基本完成功能描述内容中的全部功能。尽管还有一小部分的功能没有实现,但是收获很大。这样不仅能加深我们对MFC程序设计的掌握,而且还及时、真正的做到了学以致用。基本功要过硬。不能马虎经常犯小错误。提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的头脑来完成它了。要善于思考。程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足并使其更加人性化。这次课程设计让我学到了很多,不仅是巩固了先前学的MFC程序设计知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。希望今后类似这样课程设计、类似这样的锻炼机会能更多些!做一份课程设计出来,不仅做了需求分析、软件开发,还有做了测试工作。做到了一举三得,在以后的学习中,我也会这样鞭策自己学习。7附源代码#include stdafx.h#include #include #include resource.h#include MainDlg.h#include TCHAR text50;TCHAR opt=c;BOOL have=FALSE,enable=TRUE;double num1=0,num2=0;BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) switch(uMsg) HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); return FALSE;BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)memset(text,0,sizeof(TCHAR)*50);SetDlgItemText(hwnd,IDC_EDIT,TEXT(0.); return TRUE;void trim()int i=0,j=0;for (i=0;ilstrlen(text);i+)if (texti!=0&texti!=0)j=i;for (j=j+1;jlstrlen(text);j+)textj=0;void AppendText(HWND hwnd,TCHAR c)if (lstrlen(text)=1&text0=0&c!=.)text0=c;elsetextlstrlen(text)=c;SetDlgItemText(hwnd,IDC_EDIT,text);void result(HWND hwnd)switch(opt)case +:num2=num2+num1;break;case -:num2=num2-num1;break;case *:num2=num1*num2;break;case /:if (num1=0)SetDlgItemText(hwnd,IDC_EDIT,TEXT(除数不能为零.);enable=FALSE;return; elsenum2=num2/num1;break;default:num2=num2+num1;break;num1=0;sprintf(text,TEXT(%f),num2);trim();SetDlgItemText(hwnd,IDC_EDIT,text);void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)TCHAR c2; switch(id) case IDC_0:case IDC_1:case IDC_2:case IDC_3:case IDC_4:case IDC_5:case IDC_6:case IDC_7:case IDC_8:case IDC_9:if (enable)GetDlgItemText(hwnd,id,c,2);AppendText(hwnd,c0);break;case IDC_DOT:if (!have&enable)have=TRUE;if (lstrlen(text)=0)AppendText(hwnd,0);AppendText(hwnd,.);break;case IDC_PLUSS:case IDC_SUB:case IDC_MUL:case IDC_DIV:if(enable)if (lstrlen(text)!=0)num1=atof(text);result(hwnd);GetDlgItemText(hwnd,id,c,2);opt=c0;memset(text,0,sizeof(TCHAR)*50);have=FALSE; elseGetDlgItemText(hwnd,id,c,2);opt=c0;break;case IDC_EQUAL:if (lstrlen(text)!=0&enable)num1=atof(text);result(hwnd);memset(text,0,sizeof(TCHAR)*50);have=FALSE;break;case IDC_C:memset(text,0,sizeof(TCHAR)*50);num1=0;num2=0;have=FALSE;enable=TRUE;opt=c;SetDlgItemText(hwnd,IDC_EDIT,TEXT(0.);break;case IDC_CE:memset(text,0,sizeof(TCHAR)*50);num1=0;have=FALSE;enable=TRUE;SetDlgItemText(hwnd,IDC_ED
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金属圆锯行业跨境出海战略研究报告
- 房地产开发部及经理岗位职责指引
- 五年级下学期语文学习资源整合计划
- 县级卫生院可疑新冠肺炎病例监测流程
- 2025年公益活动民族团结实施方案
- 六年级美术实践与体验教学计划
- 金融消费者权益保护-全面剖析
- 跨链技术在多链生态中的融合-全面剖析
- 2024-2025学年双语教育推广计划
- 科技公司研发项目管理办法与流程
- 江西省人才发展集团有限公司招聘考试内容
- 高中主题班会 奋力拼搏圆梦高考课件-高三下学期冲刺高考主题班会
- 2025-2030全球及中国汽车制动卡钳行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 武汉市部分学校2025届高三第四次月考(数学试题)试题
- 17J008挡土墙(重力式、衡重式、悬臂式)图示图集
- 【S镇35kV变电站一次系统设计(论文)14000字】
- 行政复议法-形考作业4-国开(ZJ)-参考资料
- 高墩(40m高)安全专项施工方案(专家)
- 配电室运行维护投标方案(技术标)
- 中建盘扣式落地卸料平台施工方案
- 《归去来兮辞(并序)》 全省一等奖 教学课件
评论
0/150
提交评论