C++mfc计算器的设计报告_第1页
C++mfc计算器的设计报告_第2页
C++mfc计算器的设计报告_第3页
C++mfc计算器的设计报告_第4页
C++mfc计算器的设计报告_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、 PINGDINGSHAN UNIVERSITY 实训论文(设计)题 目: 计算器 院(系): 软件学院 专业年级: 软件工程 2012级 姓 名: 陈存新 学 号: 121530216 指导教师: 吕 帅 琼 2013年10月21日1目 录目 录21 概 述31.1 课程设计目的31.2 课程设计内容32 系统需求分析32.1 系统目标32.2 主体功能32.3 开发环境33 系统概要设计43.1 系统流程图43.2 系统功能划分44系统详细设计74.1 设计步骤74.2 界面设计95 测试125.1 测试方案125.2 测试结果126 小结14参考文献15附 录16附录1 源程序清单163

2、计算器的设计1 概 述 1.1 课程设计目的1、巩固并加深学生对C+语言程序设计知识的理解;2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用VC+ 6.0集成开发环境;4、提高运用C+语言解决实际问题的能力; 5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS系统;6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。1.2 课程设计内容课题名称:计算器的实现说明:实现一个计算器。要求: 1)用“计算器”的标准视图执行简单的计算。2)用其科学型视图执行高级的科学计算。2 系统需求分析2.1 系统目标我们在学习生活中

3、,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。要计算功能有以下几个方面:加法,减法,乘法,除法,求幂,求模,求平方根,求Sin,求Cos。2.2 主体功能1、十进制数的加、减、乘、除、乘方、取模等简单计算。2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算。2.3 开发环境Windows操作系统,VC+ 6.0, OFFICE WORD3 系统概要设计3.1 系统流程图开始输入第一个操作数加法减法乘法除法求幂求模开平方求正弦求余弦求对数输入第二个操作数显示结果寄存器清零结束图3-1

4、系统流程图3.2 系统功能划分表3-1 系统功能表序号文件名主要功能备注1+加法求和两个操作数2-减法求差两个操作数3*乘法求积两个操作数4/除法求商两个操作数5%求模两个操作数6求x的y次幂两个操作数7S求平方根一个操作数8Sin求正弦一个操作数9Cos求余弦一个操作数10ln求对数一个操作数11n!求阶乘一个操作数12=等于13C寄存器清零1) 假设执行操作“+”,先输入一个数,再输入“+”,再输入另一个数,最后输入“+”。整个功能“+”就执行完毕。四则代码如下void CMyDlg:RunOperation(eum_signl en_signl) double sum;double nA

5、dd1; double nAdd2; nAdd1=atof(cs_Num0); nAdd2=atof(cs_Num1);/sum=nAdd1+nAdd2; switch(en_signl) case en_add: sum=nAdd1+nAdd2; break; case en_sub: sum=nAdd1-nAdd2; break; case en_mul: sum=nAdd1*nAdd2; break; case en_div: sum=nAdd1/nAdd2; break; cs_Num0.Format(%g,sum); SetDlgItemText(IDC_EDIT1,cs_Num0)

6、; if (!b_Hasport & -1=cs_Num0.Find(.) CString temp; GetDlgItemText(IDC_EDIT1,temp); temp+=.; SetDlgItemText(IDC_EDIT1,temp); m_i = 1; b_Hasport=FALSE; b_Start=FALSE;cs_Numm_i=0;void CMyDlg:OnNumAdd() / TODO: Add your control notification handler code hereif (!b_Start) return; if (en_LastSignl=en_non

7、e) en_LastSignl=en_add; RunOperation(en_LastSignl); en_LastSignl=en_add;(此处略去减乘除) 2)执行操作“Sin”,先输入一个数,在输入“Sin”,整个功能“Sin”就执行完毕(功能未实现)。3)执行操作“n!”,先输入一个数,再输入“n!,整个功能“n!”执行完毕(功能未实现)。4系统详细设计4.1 设计步骤打开Microsoft Visual C+ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizardexe工程,输入工程名yeyahui及其所在位置,点击确定,如图4-1所示。图4-1 新建MFC AppW

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

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

10、辑框等对象的属性。表4-1 各按钮和编辑框等对象的属性对象ID标题或说明编辑框IDC_EDIT1结果显示按钮IDC_NUM00按钮IDC_NUM11按钮IDC_NUM22按钮IDC_NUM33按钮IDC_NUM44按钮IDC_NUM55按钮IDC_NUM66按钮IDC_NUM77按钮IDC_NUM88按钮IDC_NUM99按钮IDC_NUM_NEQUA+/-按钮IDC_NUM_PORT.按钮IDC_NUM_ADD+按钮IDC_NUM_SUB-按钮IDC_NUM_MUL*按钮IDC_NUM_DIV/按钮IDC_NUM_SQRTsqrt按钮IDC_NUM_Daoshu1/x按钮IDC_NUM_Ji

11、echengn!按钮IDC_NUM_Lnln按钮IDC_NUM_Sinsin按钮IDC_NUM_Coscos按钮IDC_NUM_Powxy按钮IDC_NUM_EQUEL=完成后界面如图4-6所示。图4-6 设计界面5 测试5.1 测试方案先用标准型进行简单的四则运算:+ - * /,测试完成后,核对其计算结果的正确性。5.2 测试结果经测试标准型计算器,进行简单的四则运算,结果均正确,如图5-1所示。 图5-1 四则运算测试结果图6 小结经过一个月的努力,课程设计基本完成了。在课程设计的实践中,学到很多有用的知识,也积累了不少宝贵的经验。课程设计是以一个计算器的实现为基础,掌握一个基于对话框的

12、应用程序的编程方法以及对话框常用控件的高级编程。在课程设计中我了解到到对话框应用程序的编程模式、改变按钮的客户区形状、在按钮客户区内作图及对话框的扩展等知识。在此期间,遇上了不少的技术难题,但是经过老师知道,难题还是一个个被解决了。经过设计的各个环节,从中学到了很多,锻炼了自己系统的设计的能力,从系统的需求到系统的功能,到系统的测试,到系统的发布,可以掌握到一个完全的过程,这样对我们以后在工作中或学习中得到很好的锻炼,为用VC+编辑软件奠定基础。参考文献1谭浩强.C程序设计(第三版)(M).北京:清华大学出版社,2005. 2谭浩强.C程序设计题解与上机指导(第三版) (M).北京:清华大学出

13、版社,2005.3甄炜. C+语言和面向对象程序设计教程(M).北京:机械工业出版社,2005.25附 录附录1 源程序清单/ 计算器Dlg.cpp : implementation file/#include stdafx.h#include 计算器.h#include 计算器Dlg.h#include math.h#include string#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutc

14、lass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotec

15、ted:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MA

16、P(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyDlg dialogCMyDlg:CMyDlg(CWnd* pParent /*=NULL*/): CDialog(CMyDlg:IDD, pParent)/AFX_DATA_INIT(CMyDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIc

17、on in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CMyDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CMyDlg)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMyDlg, CDialog)/AFX_MSG_MAP(CMyDlg)ON_WM_SYSCOMMAND()ON_WM_PA

18、INT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_NUM1, OnNum1)ON_BN_CLICKED(IDC_NUM2, OnNum2)ON_BN_CLICKED(IDC_NUM3, OnNum3)ON_BN_CLICKED(IDC_NUM4, OnNum4)ON_BN_CLICKED(IDC_NUM5, OnNum5)ON_BN_CLICKED(IDC_NUM6, OnNum6)ON_BN_CLICKED(IDC_NUM7, OnNum7)ON_BN_CLICKED(IDC_NUM8, OnNum8)ON_BN_CLICKED(IDC_NUM9, On

19、Num9)ON_BN_CLICKED(IDC_NUM0, OnNum0)ON_BN_CLICKED(IDC_NUM_SQRT, OnNumSqrt)ON_BN_CLICKED(IDC_NUM_ADD, OnNumAdd)ON_BN_CLICKED(IDC_NUM_SUB, OnNumSub)ON_BN_CLICKED(IDC_NUM_MUL, OnNumMul)ON_BN_CLICKED(IDC_NUM_DIV, OnNumDiv)ON_BN_CLICKED(IDC_NUM_PORT, OnNumPort)ON_BN_CLICKED(IDC_NUM_NEQUA, OnNumNequa)ON_B

20、N_CLICKED(IDC_NUM_SPACE, OnNumSpace)ON_BN_CLICKED(IDC_NUM_EQUEL, OnNumEquel)ON_BN_CLICKED(IDC_NUM_C, OnNumC)ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)ON_BN_CLICKED(IDC_NUM_Sin, OnNUMSin)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyDlg message handlersBOOL CMyDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. me

21、nu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when

22、the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereInitAllDate();return TRUE; / return TRUE unless you set the focus to a controlvoid CMyDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF

23、0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void C

24、MyDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.W

25、idth() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CMyDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CMyDlg:Pu

26、tIntoNum(int n) CString tem_i; tem_i.Format(%d,n); CString temp; /第一次输入 if (!b_Start) cs_Numm_i=tem_i; b_Start=TRUE; SetDlgItemText(IDC_EDIT1,cs_Numm_i); if (!b_Hasport) GetDlgItemText(IDC_EDIT1,temp); temp+=.; SetDlgItemText(IDC_EDIT1,temp); return; cs_Numm_i+=tem_i; SetDlgItemText(IDC_EDIT1,cs_Num

27、m_i); if (!b_Hasport) GetDlgItemText(IDC_EDIT1,temp); temp+=.; SetDlgItemText(IDC_EDIT1,temp); void CMyDlg:InitAllDate() en_LastSignl=en_none; b_Hasport=FALSE; b_Start=FALSE; b_Hasmul=FALSE; b_Hasdiv=FALSE; cs_Num0=0; cs_Num1=0; m_i=0; SetDlgItemText(IDC_EDIT1,cs_Numm_i+.);void CMyDlg:OnNum1() / TOD

28、O: Add your control notification handler code herePutIntoNum(1);void CMyDlg:OnNum2() / TODO: Add your control notification handler code herePutIntoNum(2);void CMyDlg:OnNum3() / TODO: Add your control notification handler code herePutIntoNum(3);void CMyDlg:OnNum4() / TODO: Add your control notificati

29、on handler code herePutIntoNum(4);void CMyDlg:OnNum5() / TODO: Add your control notification handler code herePutIntoNum(5);void CMyDlg:OnNum6() / TODO: Add your control notification handler code herePutIntoNum(6);void CMyDlg:OnNum7() / TODO: Add your control notification handler code herePutIntoNum

30、(7);void CMyDlg:OnNum8() / TODO: Add your control notification handler code herePutIntoNum(8);void CMyDlg:OnNum9() / TODO: Add your control notification handler code herePutIntoNum(9);void CMyDlg:OnNum0() / TODO: Add your control notification handler code herePutIntoNum(0);void CMyDlg:OnNumSqrt() /

31、TODO: Add your control notification handler code hereif (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT_SHOW,temp); num=atof(temp); num=sqrt(num); temp.Format(%lf,num); if (temp.Find(.)=-1) SetDlgItemText(IDC_EDIT_SHOW,temp+.); else SetDlgItemText(IDC_EDIT_SHOW,temp);void CMyDlg

32、:OnNumAdd() / TODO: Add your control notification handler code hereif (!b_Start) return; if (en_LastSignl=en_none) en_LastSignl=en_add; RunOperation(en_LastSignl); en_LastSignl=en_add;void CMyDlg:OnNumSub() / TODO: Add your control notification handler code hereif (!b_Start) return; if (en_LastSignl

33、=en_none) en_LastSignl=en_sub; RunOperation(en_LastSignl); en_LastSignl=en_sub;void CMyDlg:OnNumMul() / TODO: Add your control notification handler code here if (!b_Start) return; if (en_LastSignl=en_none) cs_Num1=1; en_LastSignl=en_mul; RunOperation(en_LastSignl); en_LastSignl=en_mul;void CMyDlg:On

34、NumDiv() / TODO: Add your control notification handler code hereif (!b_Start) return; if (en_LastSignl=en_none) cs_Num1=1; en_LastSignl=en_div; RunOperation(en_LastSignl); en_LastSignl=en_div;void CMyDlg:OnNumPort() / TODO: Add your control notification handler code here /已有小数点时 if (b_Hasport) retur

35、n; /无小数点 cs_Numm_i+=.; b_Hasport=TRUE; b_Start=TRUE; SetDlgItemText(IDC_EDIT1,cs_Numm_i);void CMyDlg:OnNumNequa() / TODO: Add your control notification handler code hereif (!b_Start) return; double num; CString temp; GetDlgItemText(IDC_EDIT1,temp); num=atof(temp); num=0-num; SetDlgItemText(IDC_EDIT1

36、 , b_Hasport ? temp:temp+.);void CMyDlg:OnNumSpace() / TODO: Add your control notification handler code hereif (!b_Start) return; double num; CString temp; int len; CHAR temp_ch32; GetDlgItemText(IDC_EDIT1,temp); /AfxMessageBox(temp); num=atof(temp); sprintf(temp_ch,%g,num); num=0; /AfxMessageBox(te

37、mp_ch); len=strlen(temp_ch); int te_i=len-1; if(temp_chte_i=.) te_i-=1,b_Hasport=FALSE; temp_chte_i=0; / /AfxMessageBox(temp_ch); if (strlen(temp_ch)=0) temp_ch0=0; temp_ch1=0; / sscanf(temp_ch,%lf,&num); temp.Format(%g,num); /AfxMessageBox(temp); SetDlgItemText(IDC_EDIT1,b_Hasport?temp:temp+.);void

38、 CMyDlg:RunOperation(eum_signl en_signl) double sum;double nAdd1; double nAdd2; nAdd1=atof(cs_Num0); nAdd2=atof(cs_Num1); /sum=nAdd1+nAdd2; switch(en_signl) case en_add: sum=nAdd1+nAdd2; break; case en_sub: sum=nAdd1-nAdd2; break; case en_mul: sum=nAdd1*nAdd2; break; case en_div: sum=nAdd1/nAdd2; break; cs_Num0.Format(%g,s

温馨提示

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

评论

0/150

提交评论