C++课程设计:计算器(4)_第1页
C++课程设计:计算器(4)_第2页
C++课程设计:计算器(4)_第3页
C++课程设计:计算器(4)_第4页
C++课程设计:计算器(4)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、.课 程 设 计 报 告 课程名称:面向对象程序设计C+ 设计题目: 计算器 专 业:计算机科学与技术 姓 名: 学 号: 指导教师:李 晓 虹2016 年 1 月 1 日(1) 系统需求分析编写一个程序来实现算术计算器。通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、-、*、/、等运算符号),然后将其信息存入文件中。输入一个算术计算式,就在屏幕上显示结果。(2) 总体设计是通过在计算器的界面上按下相应的按钮,来进行基本的加,减,乘,除等基本运算。A 创建一个基于对话框的应用程序。 B 利用资源编辑器编辑对话框资源,及设计

2、计算器界面并修改对话框各按钮的ID属性和Caption属性。 C 利用ClassWizard为各按钮添加消息映射(代码在下面详细介绍)。 D 设置对话框文本背景颜色。(3) 详细设计打开Microsoft Visual C+ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizardexe工程,输入工程名计算器及其所在位置,点击确定,如图1-1图1-1将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图1-2图1-2这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图1-3图1-3界面设计1、创

3、建控件Resoure View选项卡中打开Dialog资源组,双击IDD_main,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。1)在图5中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,在该对话框中输入ID属性。 如图2-1图1-42)Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个

4、大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,在该对话框中输入控件的ID值和标题属性。如图1-5图1-5按照上面的操作过程编辑其他按钮和编辑框等对象的属性。如表2-1各按钮和编辑框等对象的属性对象ID标题或说明编辑框IDC_EDIT结果显示按钮IDC_00按钮IDC_11按钮IDC_22按钮IDC_33按钮IDC_44按钮IDC_55按钮IDC_66按钮IDC_77按钮IDC_88按钮IDC_99按钮IDC_CHANGE+/-按钮IDC_DOT.按钮IDC_PLUSS+按钮IDC_SUB-按钮IDC_MUL*按钮IDC_

5、DIV/按钮IDC_SQRTSqrt按钮IDC_1CX1/x按钮IDC_BFH%按钮IDC_CC按钮IDC_CECE按钮IDC_BACKSPACEBackspace按钮IDC_STATIC按钮IDC_MCMC按钮IDC_MRMR按钮IDC_MSMS按钮IDC_MPLUSSM+表2-1完成后界面如图1-6图1-62、连接变量和代码1) 给编辑框连接变量。在编辑框上单击鼠标右键,在弹出菜单中选择ClassWizard菜单项,弹出MFC ClassWizard对话框,选择Member Variables选项卡3、菜单的设计选择 插入/资源命令,将显示插入资源对话框。选择Menu,点击新建即可。如图1

6、-7图1-7Resoure View选项卡中打开Menu资源组,双击IDR_MENU,如图1-8图1-8最终的得到的界面如图1-9图1-9(4) 系统调试加减乘除均能正常运行 当除数为0时 如图1-10图1-10证明错误提示功能实现正常。计算器功能基本实现。(5) 结果分析在Windows可视化界面中,消息映射函数十分重要,每个按钮必须与与之对应的消息函数对应,同时,函数的变量也应该在MFC Class Wizard里设置准确,否则会影响最终的调试。在设置编辑框的变量时要注意与程序中的的变量名保持一致,这样才能保证键入的数值能正确显示在程序框中。在初始化列表框的过程中,添加Onintdialo

7、g中的代码时要注意各个操作项的顺序,否则会造成操作项的反串给对应按键加函数时注意添加到源文件中正确的位置,否则会造成程序产生错误。(6) 总结通过计算器程序的设计,使我对VC+ MFC有了一定了解,使用MFC类库可以大大简化程序的设计,为我们设计程序提供了很大的方便。我们通过查阅各种介绍MFC编程的书籍,最后学会了从利用MFC的应用程序向导(AppWizard)创建一个应用程序,再到添加控件,再到消息函数的创建,再到控件代码的编辑,最后完成程序。在程序设计中遇到困难时,我和同学们一起讨论,解决问题,遇到实在是想不通的地方,通过老师的指点答疑,最终共同完成了程序。在整个过程中,也增进了我发现问题

8、和解决问题的能力。附源代码Main.cpp/ 计算器.cpp : Defines the entry point for the application./#include "stdafx.h"#include "resource.h"#include "MainDlg.h"#include <COMMCTRL.H>int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)/Enable

9、IPAddress、Calendar.etcInitCommonControls();DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, Main_Proc);return 0;MainDlg.cpp#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include "resource.h"#include "MainDlg.h"#include <math.h>TCHAR

10、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)

11、; 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;i<lstrlen(text);i+)if (texti!='0'&&texti!='0')j=i;for (j=

12、j+1;j<lstrlen(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 '-

13、9;: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_ED

14、IT,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&

15、;&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);ha

16、ve=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'

17、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_EDIT,TEXT("0.");break;case IDC_CHANGE:if (strlen(text)!=0&&enable)num1=atof(text);num1=-num1;sprintf(text,TEXT("%

18、f"),num1);trim();SetDlgItemText(hwnd,IDC_EDIT,text);break;case IDC_1CX:if (enable)num1=atof(text);if (num1=0)SetDlgItemText(hwnd,IDC_EDIT,TEXT("除数不能为零.");enable=FALSE; elsenum1=1.0/num1;sprintf(text,TEXT("%f"),num1);trim();SetDlgItemText(hwnd,IDC_EDIT,text);break;case IDC_BFH:break;case IDC_SQRT:if (enable)num1=atof(text);if (num1<0)SetDlgItemText(hwnd,IDC_EDIT,TEXT("被开方数不能为负数.");enable=FALSE;elsenum1=sqr

温馨提示

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

最新文档

评论

0/150

提交评论