C计算器课程设计.doc

上传人:飞****2 文档编号:56208176 上传时间:2022-11-01 格式:DOC 页数:30 大小:624.50KB
返回 下载 相关 举报
C计算器课程设计.doc_第1页
第1页 / 共30页
C计算器课程设计.doc_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《C计算器课程设计.doc》由会员分享,可在线阅读,更多相关《C计算器课程设计.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、华科学院计算机科学与技术专业程序设计综合课程设计报告 (2011/2012学年 第一学期)学生姓名: 王奥辉 学生班级: 信息管理H学生学号: 7指导教师: 薛颂东 2011年12月30日目录一、需求分析.1 1 系统的基本要求.1 2 数据结构设计及用法说明.1 3 功能模块.1 4 流程图.2 5 数据结构.3 6 系统开发.3二、基本功能描述.4 1 设计思路.4 2 软件设计.7三、测试过程与结果.15四、结论与心得体会.16五、参考文献.17六、附录.17简单计算器一.需求分析1.系统的基本要求1. 算术运算功能。能够实现+、-、*、/、mod、int运算。2. 函数运算功能。能够实

2、现exp、ln、sin、xy、log、cos、x3、n!、tan、x2、1/x等运算。3. 进制之间的转换功能。能够实现十六、十、二、八进制数据之间的转换。4.通过键盘控制字符和数字的输入。2.数据结构设计及用法说明此程序调用的函数主要有 /*数学函数的定义*/ /*屏幕操作函数*/ /*I/O函数*/ /*库函数*/ / /*字符操作函数*/。基本使用:用控制鼠标图形移动,当*变量长度参数表*/ /*图形函数*/ /*字符串函数*移动到相应得按钮时按回车键输入当前数字或执行对应的函数。加法:输入一个被加数数,按“+”,输入被加数,按“=”,输出结果。乘法: 输入一个数,按“*”,输入另个数,

3、按“=”,输出结果。除法: 输入一个被除数,按“+”,输入另个除数,按“=”,输出结果。求余:输入一个数,按“mod”,按“=”,输出结果。取整:输入一个数,按“int”,按“=”,输出结果。八进制转十进制:输入一个八进制数,按“10-8”,按“=”,输出十进制结果。十六进制转十进制:输入一个十六进制数,按下“jz”+“16- 10” 按“=”,输出十进制结果3.功能模块键盘控制模块:通过int specialkey(void)和键盘来实现输入数据,操作方式的控制。计算模块:通过调用math.h中的数学函数,如:+、-、*、/、sin、cos、mod等来实现对result的赋值。输出模块:在指

4、定位置输出计算模块中result的值,在指定位置输出键盘控制模块中对参量所赋的值以及在指定位置输出键盘控制模块中得到的运算符。4.流程图流程图开始输入第一个数x输入第二个数y+、-、*、/、xy、log、等显示结果结束mod、x3、ln、exp、tan、cos、x2、1/x、n!、sin、以及进制转换按“Esc”退出按“CE”清零5.数据结构用到了if判断语句,for循环语句,while语句,且主要通过while语句实现对键盘、光标的操作和数据、运算符的输入,还用到了switch语句,switch语句的主要作用是实现对所输入的数据的运算操作,然后将运算结果赋值给result,最后输出。6. 系

5、统实现(开发工具) Visual C+Visual C+6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C+源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C+6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual C+6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。VC+6.0是Windows 95/98、XP或Windows NT下的一个应用程

6、序,本身对软硬件没有特殊要求。就是说它对环境的要求与Windows 95/98、Windows NT要求是一致的。硬件要求:一般在586以上的处理器、16MB以上内存、100MB以上的硬盘。软件要求:Windows 95/98或Windows NT3.51以上版本。VC+ 6.0系统可以在一张CD盘上,也可以在“Visual Studio( Visual C+、Visual Foxpro)”等产品的第一张CD盘上。一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。在安装好VC 6.0系统后,有时根据需要添加或删除某

7、些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。与一般的应用软件一样,有以下两种启动方式:(1)通过“开始”按钮,选择“程序”菜单,然后打开“Microsoft Visual studio 6.0中文版”子菜单中的“Microsoft Visual C+ 6.0 中文版”程序。(2)用户也可以使用命令行启动VC。单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:Program FilesMicrosoft Visual StudioVC98VC6

8、.exe(按默认盘符和路径安装)即可。二基本功能描述简单计算器包括双目运算和单目运算功能。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。可对输入任意操作数,包括 小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。1 设计思路如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。子程序开始时m_num为零。按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。回到总流程图中,输完第一个操作数后,若按下双

9、目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。若按下的是单目运算符,则直接对其处理得出结果。若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。算出后把结果保存至num2。若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。NNY键入一个数是否为正数?m_num =10*m_num+im_num =10*m_num-i是否为小数?用UpdateData(FALSE)刷新显示还原m_num根据小数点后位数将键入的数除以n次10累加到m_numYN继续键入数字

10、?Y输入数据子函数编辑框关联变量m_num=0图1 输入数据子函数流程图Y开始输入数据子函数编辑框关联的变量保存至num2输入数据子函数进行运算运算是否合法把结果保存到num2m_num清零弹出对话框显示ERRORNY是否用保存的结果继续进行运算N结束jie双目运算符单目运算符是否开始新一轮的计算YN图2 简单计算器总流程图2 软件设计2.1 设计步骤打开Microsoft Visual C+ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizardexe工程,输入工程名zhoutong及其所在位置,点击确定,如图3所示。 图3 新建MFC AppWizardexe工程将弹出MFC

11、AppWizard-step 1对话框,选择基本对话框,点击完成,如图4所示。图4 基本对话框这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图5所示。图5 新建的对话框2.2 界面设计1、创建控件在图5所示的Resoure View选项卡中打开Dialog资源组,双击IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。1)在图5中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编

12、辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图6所示,在该对话框中输入ID属性。 图6 Edit属性对话框2)在图3中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图7所示,在该对话框中输入控件的ID值和标题属性。图7 Push Button属性按照上面的操作过程编辑其他按钮和编辑框等对象的属性。表1 各按钮和编辑框等对象的属性对象ID标题或说明编辑框IDC_xia

13、nshi结果显示按钮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按钮I

14、DC_coscos按钮IDC_powxy按钮IDC_Onequal=按钮IDC_backspaceBackspace按钮IDC_OnclearClear完成后界面如图8所示。图8 计算器界面2、连接变量和代码1) 给编辑框连接变量。在编辑框上单击鼠标右键,在弹出菜单中选择ClassWizard菜单项,弹出MFC ClassWizard对话框,选择Member Variables选项卡,如图9所示。 图9 MFC ClassWizard对话框中的Menber Variable选项卡在Control IDs列表框中选择IDC_xianshi,单击Add Variables按钮,在弹出的对话框中连接

15、变量m_num。变量类型设定为doubel型。如图10所示。图10 m_num属性设置2) 给“1”按钮连接代码。在“1”按钮上单击鼠标右键,选择ClassWizard菜单项,在弹出的对话框中选择Messages Maps选项卡,然后在Object IDs列表框中选择IDC_ADD_BUTTON,在Messages列表框中选择BN_CLICKED项,即选择单击按钮事件,如图11所示。 图11 “1”按钮链接代码对话框3、菜单的设计选择 插入/资源命令,将显示插入资源对话框。如图12所示。选择Menu,点击新建即可。图12 插入资源对话框Resoure View选项卡中打开Menu资源组,双击I

16、DR_MENU1, 然后给菜单添加相应的标题,并把每个菜单对应的ID值与相应的按钮的一致。如图13所示。图13 菜单属性对话框在对话框的任何一个空白域单击鼠标右键,然后在弹出的快捷菜单中选择Properties命令,弹出Dialog Properties对话框,如图14。在对话框中的菜单组合框中选择IDR_MENU1。图14 对话属性对话框最终的得到的界面如图15。图15 计算器完整界面2.3 关键功能的实现1)操作数的输入编辑框所关联的变量为m_num,程序开始时为零。每按下一个数字键按钮,就把它累加到m_num里并刷新显示。BOOL型变量ele来判断是否有小数点和一个整型数dint来表示小

17、数点后的数据的位数。当ele=TRUE时,表示有小数点,否则则表示无小数点。按下小数点按钮后执行ele=TRUE。当按下一个数字键时,首先根据ele判断是否按下小数点,若有则把小数点后数的位数加1,dint则为此次键入的数所处的位数,将键入的数除以dint个10然后累加到编辑框所关联的变量m_num上,若没有则把m_num乘以10,然后累加到编辑框所关联的变量m_num上。2)单目运算符功能的实现由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_num=sqrt(m_num).按下按钮即可实现其功能。为实现连续运算,程序有所改动,参见(6)。3)双目运算符功能的实现双

18、目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num2中,然后把m_num清零。这样即可保存第一个操作数。另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。为实现连续运算,程序有所改动,参见(6)。4)退格键功能的实现当按下一次退格按钮时,若m_num为整数,只需对其中数据除以10再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数dint进行操作,先对m_num执行(dint-1)次乘以10运算,然后取整,接着执行(dint-1)

19、次除以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

20、_num;”.这样若已经保存了结果则不进行覆盖。然后在每个数字按钮前加上“if(addt=0)num2=0;”,这样如果进行完一次运算之后按下任一数字键表示不需要连续运算,则将保存的结果删除,若按下的是双目运算符按钮则可以继续运算。对于单目运算符:每次运算完之后都会对m_num清零,因此其结果也要赋给num2,下次运算是则会用到num2,于是第一次运算时直接将m_num 的值赋给num2,对其进行运算。以开根号为例,在消息处理函数代码中将“m_num=sqrt(m_num);”改为“num2=m_num;m_num=sqrt(num2); num2=m_num;”。但是第一次运算执行完成之后m

21、_num被清零,所以之后将m_num 的值不能赋给num2,代码改为 “if(m_num=0)m_num=sqrt(num2); num2=m_num;”。其他单目运算符同理。为实现连续运算是不需要按下等号即可实现,又在所有的运算符按钮的消息处理函数代码前加上了“if(addt!=0)Onequal();”。既若之前有按下双目运算符和两个操作数则连续运算再按下任一运算符时会自动调用等号的处理函数将上次的运算完成并保存结果方便下一次的运算。三. 测试过程及结果1.输入“90.5”,“-”,“60.7”,“+”,“2.36”,“ =”,并在菜单中同样输入这组操作,均得到结果如图16。图16 结果图

22、1结果正确,证明可以实现双目运算符的连续运算,菜单功能正常。2.输入“901”,“+/-”,“backspace”,“+”,“120”,“sin”,结果如图17.图17 结果图2因为取的是3.,因此与0.5有小小偏差,认为结果正确。证明可以实现单目运算符的连续运算与backspace回格功能。3.输入“0”,“ln”,结果如图18.结果图18证明错误提示功能实现正常。四. 结论与心得体会经过多番测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。经过3个星期的VC+课程设计,我在老师和同学的共同帮助下,顺利完成该课程设计,收获很大。我们已经学习了C+课程设计和数据结构,对老师所讲的知

23、识也有了很大的认识。正所谓“纸上谈兵终觉浅,觉知此事要躬行。”所以在本学期课程设计是很及时、很必要的。这样不仅能加深我们对程序设计的掌握,而且还及时、真正的做到了学以致用。主要是以下几点。基本功要过硬。不能马虎经常犯犯小错误。提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的头脑来完成它了。要善于思考。程序中有些实现难点和最初完成程序时免不了的许多不足就

24、需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足并使其更加人性化。这次课程设计让我学到了很多,不仅是巩固了先前学的程序设计知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。希望今后类似这样课程设计、类似这样的锻炼机会能更多些!五. 参考文献1 揣锦华.面向对象程序设计与VC+实践.西安电子科技大学出版社,20052 张建宏,汤练兵,马德骏.计算机程序设计基础-C语言程序设计.科学出版社,20063 陈清华.Visual C+课程设计案例精选与编程指导.东南大学出版社,2004六. 附录源代码#include stdafx.h#include #include #includ

25、e resource.h#include MainDlg.hdouble num,numtmp;TCHAR result256,numstr256;int sel;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_OnC

26、lose); return FALSE;BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)ZeroMemory(result,sizeof(result)/sizeof(TCHAR);ZeroMemory(numstr,sizeof(numstr)/sizeof(TCHAR);SetDlgItemText(hwnd,IDC_EDIT1,TEXT(0); return TRUE;void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) s

27、witch(id) TCHAR content256;ZeroMemory(content,sizeof(content)/sizeof(TCHAR); case ID_MENUITEMCOPY:strncpy(content,result,sizeof(result);/GetDlgItemText(hwnd,IDC_EDIT1,content,sizeof(content); break;case ID_MENUITEMPOST:SetDlgItemText(hwnd,IDC_EDIT1,content);break; case IDC_BIN0:/输入数字0strcat(result,0

28、);SetDlgItemText(hwnd,IDC_EDIT1,result); break;case IDC_BIN1:/输入数字1strcat(result,1);SetDlgItemText(hwnd,IDC_EDIT1,result); break;case IDC_BIN2:/输入数字2strcat(result,2);SetDlgItemText(hwnd,IDC_EDIT1,result);break;case IDC_BIN3:/输入数字3strcat(result,3);SetDlgItemText(hwnd,IDC_EDIT1,result);break;case IDC_

29、BIN4:/输入数字4strcat(result,4);SetDlgItemText(hwnd,IDC_EDIT1,result);break;case IDC_BIN5:/输入数字5strcat(result,5);SetDlgItemText(hwnd,IDC_EDIT1,result);break;case IDC_BIN6:/输入数字6strcat(result,6);SetDlgItemText(hwnd,IDC_EDIT1,result);break;case IDC_BIN7:/输入数字7strcat(result,7);SetDlgItemText(hwnd,IDC_EDIT1

30、,result); break;case IDC_BIN8:/输入数字8strcat(result,8);SetDlgItemText(hwnd,IDC_EDIT1,result);break;case IDC_BIN9:/输入数字9strcat(result,9);SetDlgItemText(hwnd,IDC_EDIT1,result);break;case IDC_BINPORT:/输入.if(strchr(result,.)=NULL)strcat(result,.); SetDlgItemText(hwnd,IDC_EDIT1,result);break;case IDC_BINB:

31、/退格TCHAR resulttmp256;strcpy(resulttmp,result);ZeroMemory(result,sizeof(result)/sizeof(TCHAR);if(strlen(resulttmp)-1=0)SetDlgItemText(hwnd,IDC_EDIT1,TEXT(0);break;strncpy(result,resulttmp,strlen(resulttmp)-1);ZeroMemory(resulttmp,sizeof(resulttmp)/sizeof(TCHAR);SetDlgItemText(hwnd,IDC_EDIT1,result);

32、break; case IDC_BINC:/清零SetDlgItemText(hwnd,IDC_EDIT1,TEXT(0);ZeroMemory(result,sizeof(result)/sizeof(TCHAR); ZeroMemory(numstr,sizeof(numstr)/sizeof(TCHAR);sel=0;break;case IDC_BINEQU:/=运算Main_Count(hwnd);sel=0; break; case IDC_BINF:/+/-号运算sel=1;Main_Count(hwnd); break;case IDC_BINADD:/+运算Main_Coun

33、t(hwnd);sel=2; break;case IDC_BINSUB:/-运算Main_Count(hwnd);sel=3; break;case IDC_BINMUL:/*运算Main_Count(hwnd);sel=4; break;case IDC_BINDIV:/运算Main_Count(hwnd);sel=5; break;case IDC_BINSQU:/平方运算sel=6;Main_Count(hwnd); break;case IDC_BINSQRT:/平方根运算sel=7;Main_Count(hwnd); break;case IDC_BINSIN:/sin运算sel=

34、8;Main_Count(hwnd); break;case IDC_BINASIN:/acsin运算sel=9;Main_Count(hwnd); break;case IDC_BINCOS:/cos运算sel=10;Main_Count(hwnd); break;case IDC_BINACOS:/accos运算sel=11;Main_Count(hwnd); break;case IDC_BINLN:/ln运算sel=12;Main_Count(hwnd); break;case IDC_BINEXP:/e指数运算sel=13;Main_Count(hwnd); break;case I

35、DC_BIND:/=运算sel=14;Main_Count(hwnd); break; default:break; void Main_Count(HWND hwnd)num=atof(result);ZeroMemory(result,sizeof(result)/sizeof(TCHAR);switch(sel)case 1:numtmp=-num;gcvt(numtmp,10,numstr);ZeroMemory(result,sizeof(result)/sizeof(TCHAR);SetDlgItemText(hwnd,IDC_EDIT1,numstr);break;case 2:

36、numtmp+=num;gcvt(numtmp,10,numstr);ZeroMemory(result,sizeof(result)/sizeof(TCHAR);SetDlgItemText(hwnd,IDC_EDIT1,numstr);break;case 3:numtmp-=num;gcvt(numtmp,10,numstr);ZeroMemory(result,sizeof(result)/sizeof(TCHAR);SetDlgItemText(hwnd,IDC_EDIT1,numstr);break;case 4:numtmp*=num;gcvt(numtmp,10,numstr);ZeroMemory(result,sizeof

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁