版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、重庆邮电大学C+课程设计报告C+课程设计报告(2011 2012 学年第二学期)题目:功能齐全的计算器学院:计算机科学与技术学院专业:计算机科学与技术姓名:袁肇豪班级: 0411005学号: 2010211926完成日期: 2012 年 5 月 9 日星期三重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告目录1 概述31.1课程设计目的31.2课程设计内容31.3课程设计思想32 系统需求分析62.1系统目标62.2主体功能62.3开发环境63 系统概要设计63.1设计步骤63.2界面设计84 结论与心得体会125 附录125.1测试125.2 程序源代码14重庆邮电大学C+课程设计报
2、告重庆邮电大学C+课程设计报告1 概述1.1课程设计目的1、巩固并加深学生对C+语言程序设计知识的理解;2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用VC+ 6.0 集成开发环境;4、提高运用C+语言解决实际问题的能力;5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS 系统;6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。1.2课程设计内容课题名称: 功能齐全的计算器说明: 实现一个功能齐全的计算器。要求 :1)实现的功能有:加、减、乘、除、求sin、求 cos、求 tan、求模、求平方根、求10 的 n
3、次幂;2)器上数字0 9 为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件;3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中;4)计算功能基本上是用系统内部函数。;5)可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0 开头等不正常现象。6)“ clear” 按钮可以清除所有已输入的数据从头计算;7)“ Backspace”按钮可以退位。1.3课程设计思想如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。子程序开始时m_result为零。按下数字按钮后,判断m_result的正负号,对其进行相关处理,然后在判断是否有小数点,处
4、理后输出结果。具体操作:输完第一个操作数后,将第一个数存入result这个变量当中,若按下双目运算符,则把 result存入 tempvalue ,按下输入第二个操作数并将其存入result这个变量里面,根据所按的按钮, 将 result和 tempvalue 进行运算, 并算出结果。 若按下的是单目运算符,则先判断输入的变量是否合法,再直接对其处理得出结果。若按下清零,则把result变成重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告0,再将结果赋给m_result ,若按下退位键,则先判断数据是否为小数,然后再进行退位操作。编辑框关联变量=0键入一个数是否为正数?YNresult
5、 =10*result+iresult =10*result -i是否为小数?Y还原 resultN根据小数点后位数将键入的数 除 以n次10累 加 到Y继续键入数字?把 result 的值赋给 m_result图 1. 输入数据子函数流程图重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告开始输入数据子函数双目运算符单目运算符编辑框关联的变量保存至result输入数据子函数进行运算运算是否合法Y把结果保存到tempvalueY是否用保存的结果继续进行运算N是否开始新一轮的计算N弹出对话框显示 ERRORresult 清零YN结束图 2. 总流程图重庆邮电大学C+课程设计报告重庆邮电大学
6、C+课程设计报告2 系统需求分析2.1系统目标我们在学习生活中, 常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。要计算功能有以下几个方面:加法,减法,乘法,除法,求幂,求模,求平方根,求Sin ,求 Cos。2.2主体功能1、十进制数的加、减、乘、除、乘方、取模等简单计算。2、科学计算函数,包括( 反 ) 正弦、 ( 反 ) 余弦、 ( 反 ) 正切、 ( 反 ) 余切、开方、指数等函数运算。3、以角度、弧度两种方式实现上述部分函数。2.3开发环境Windows 操作系统, VC+ 6.0, OFFICE WORD3 系统详
7、细设计3.1设计步骤打开 MicrosoftVisual C+ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizardexe工程,输入工程名Calculator及其所在位置,点击确定,如图3 所示。重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告图 3 新建 MFC AppWizardexe工程接下来,选择基本对话框,点击完成,如图4 所示。图 4.基本对话框重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告图 5. 新建对话框3.2界面设计界面设计主要是创建控件,在选项卡中打开Dialog资源组,双击IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑
8、的对话框。开始摆放控件,包括编辑框和按钮的创建。1)在 “编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时弹出Edit 属性对话框,如图6 所示,在该对话框中输入ID 属性。图 6. Edit 属性对话框2)在“ Button按”钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,如图 7 所示,在该对话框中输入控件的ID 值和标题属性。重庆邮电大学C+课程设计报告重庆邮电大学C+课程
9、设计报告图 7. Push Button属性表 1 各按钮和编辑框等对象的属性对象ID标题或说明编辑框IDC_RESULTi结果显示按钮IDC_NUM00按钮IDC_NUM11按钮IDC_NUM22按钮IDC_NUM33按钮IDC_NUM44按钮IDC_NUM55按钮IDC_NUM66按钮IDC_NUM77按钮IDC_NUM88按钮IDC_NUM99按钮IDC_dian.按钮IDC_jia+按钮IDC_jian-按钮IDC_cheng*按钮IDC_chu/按钮IDC_jiechengn!按钮IDC_daoshu1/x按钮IDC_sqrtsqrt按钮IDC_daoshu1/x按钮IDC_jiec
10、hengn!按钮IDC_lnln按钮IDC_sinsin按钮IDC_coscos按钮IDC_cifang10x按钮IDC_Onequal=重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告完成后界面如图8 所示。图 8 计算器界面2、连接变量和代码1)给编辑框连接变量。在编辑框上单击鼠标右键,在弹出菜单中选择ClassWizard 菜单项,弹出 MFC ClassWizard对话框,选择Member Variables 选项卡,如图9 所示。2)在 Control IDs 列表框中选择 IDC_RESULT,单击 Add Variables 按钮,在弹出的对话框中连接变量 m_resul
11、t 。变量类型设定为 doubel 型。如图 10 所示。重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告图 10 m_result 属性设置3)在“ 1按”钮上单击鼠标右键, 在弹出的对话框中选择 Messages Maps 选项卡,然后在 Object IDs 列表框中选择 IDC_ADD_BUTTON,在 Messages 列表框中选择 BN_CLICKED项,即选择单击按钮事件,如图 11 所示。图 11 “ cos ”按钮链接代码对话框最终的得到的界面如图12重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告图 12 计算器完整界面4 结论与心得体会其实, 最近的事情比
12、较多,所以也是这几天才开始研究MFC编程,所以对 MFC这个类库还不是很了解, 只是一开始就从网上下载了几份源码来看,再将源码里面的思想和方法转化成自己的,才写出这个计算器。感觉写得并不是很好,因为还有一些问题没有得到完全的解决,比如小数点的那个问题,至今还没找到解决的方法,只能以后有空再好好想想了!本来还想上网学一下MFC的美化, 把这个页面做得好看一些的,但时间不允许了,因为明天就要交上去了!这个学期没有好好学习C+,感觉愧对潇潇这位好老师!接下来的时间,没有那么多繁琐的事情了,可以好好弄一下C+了,真的要好好学习C+了。总的来说, 这次的课程设计, 还是让自己学到不少东西, 同时也感觉到
13、自己现在的不足基础不够扎实,很多东西都是一知半解,真的要好好加强对基础知识的学习了!很多问题,不仅仅只是把功能实现就行了,还要注意代码的优化,把结果做得更好!5 附录5,1测试1) 先用标准型进行简单的四则运算:+ - * /,测试完成后。再用科学型进行稍复杂的运算: sin,cos,tan,ln,n!等,核对其计算结果的正确性。2)输入“ 48.9 ” , “ - ”, “ 26.3 ” , “ = ”,并在菜单中同样输入这组操作,均得到结果如图 13重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告图 13结果正确,证明可以实现双目运算符的连续运算,菜单功能正常3)输入“ 7”,点击
14、“ n! ”,得到结果如图14 所示图 14运算结果证明单目运算符能运行成功!4)输入“ 0”,点击“ ln ”,得到结果如图15 所示重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告图 15证明错误提示功能实现正常。5,2程序源代码CalculatorDig.cpp的代码/ CalculatorDlg.cpp : implementation file/#include stdafx.h#include Calculator.h#include CalculatorDlg.h#include math.h#ifdef _DEBUG#define new DEBUG_NEW#undef
15、 THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides /AFX_VIRTUAL(CAbout
16、Dlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pD
17、X)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers /AFX_MSG_MAPEND_MESSAGE_MAP()/ CCalculatorDlg dialogCCalculatorDlg:CCalculatorDlg(CWnd* pParent /*=NULL*/): CDialog(CCalculatorDlg:IDD, pParent)重庆邮电大学C
18、+课程设计报告重庆邮电大学C+课程设计报告/AFX_DATA_INIT(CCalculatorDlg)/m_num1 = 0.0;/m_num2 = 0.0;m_result = 0.0;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);tempvalue = 0; result = 0;sort = 0;/1加法, 2 减法, 3 乘法, 4 除法。append = 0;/clic
19、k = 0;/默认未点击“ . ”void CCalculatorDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CCalculatorDlg)DDX_Control(pDX, IDC_RESULT, m_CResult);/DDX_Text(pDX, IDC_FIRNUM, m_num1);/DDX_Text(pDX, IDC_SECNUM, m_num2);DDX_Text(pDX, IDC_RESULT, m_result);/AFX_DATA_MAPBEGIN_MESSAGE
20、_MAP(CCalculatorDlg, CDialog)/AFX_MSG_MAP(CCalculatorDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_JIA, OnJia)ON_BN_CLICKED(IDC_JIAN, OnJian)ON_BN_CLICKED(IDC_CHENG, OnCheng)ON_BN_CLICKED(IDC_CHU, OnChu)ON_BN_CLICKED(IDC_NUM1, OnNum1)ON_BN_CLICKED(IDC_NUM2, OnNum2)ON_BN_C
21、LICKED(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, OnNum9)ON_BN_CLICKED(IDC_NUM0, OnNum0)重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告ON_BN_CLICKED(IDC_clear, Onclea
22、r)ON_BN_CLICKED(IDC_dengyu, Ondengyu)ON_BN_CLICKED(IDC_sqrt, Onsqrt)ON_BN_CLICKED(IDC_sin, Onsin)ON_BN_CLICKED(IDC_cos, Oncos)ON_BN_CLICKED(IDC_tan, Ontan)ON_BN_CLICKED(IDC_daoshu, Ondaoshu)ON_BN_CLICKED(IDC_ln, Onln)ON_BN_CLICKED(IDC_jiecheng, Onjiecheng)ON_BN_CLICKED(IDC_cifang, Oncifang)ON_BN_CLI
23、CKED(IDC_dian, Ondian)ON_BN_CLICKED(IDC_backspace, Onbackspace)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCalculatorDlg message handlersBOOL CCalculatorDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range. ASSERT(IDM_ABOUTBOX & 0xFFF0
24、) = 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 the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FA
25、LSE);/ Set small icon重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CCalculatorDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysComma
26、nd(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 CCalculatorDlg:OnPaint()if (IsIconic()CPaintDC dc(this); / device context for p
27、aintingSendMessage(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.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Dra
28、w the icon dc.DrawIcon(x, y, m_hIcon);else重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告CDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CCalculatorDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CCalculatorDlg:OnJia()click = 0;check = fal
29、se;dint = 0;sort = 1;tempvalue = result;m_result = 0;append = 1;void CCalculatorDlg:OnJian()check = false;dint = 0;sort = 2;tempvalue = result;m_result = 0;append = 1;void CCalculatorDlg:OnCheng()check = false;dint = 0;sort = 3;tempvalue = result;m_result = 0;append = 1;void CCalculatorDlg:OnChu()重庆
30、邮电大学C+课程设计报告重庆邮电大学C+课程设计报告check = false;dint = 0;sort = 4;tempvalue = result;m_result = 0;append = 1;void CCalculatorDlg:OnNum0()if(append=1)result=0;if(check = true)dint = dint+;m_result = result;else if(check = false)result = result * 10 + 0;m_result = result;append = 0;UpdateData(false);void CCal
31、culatorDlg:OnInputNum(int n)number = n;if(append=1)result=0;if(check = true)dint = dint+;for(i = 0; i 0)for (i = 0; i dint - 1; i+)/移动小数点result = result * 10;/移动至只有一个小数位result = result - fmod(result, 1); /去掉小数位for(i = 0; i = 1.7E308 | m_result SetWindowText(结果无法显示 );tempvalue = 0;result = 0;check =
32、false;/点击后“ =”后,默认无小数点dint = 0;void CCalculatorDlg:Onsin()result = sin(result * 3.1415926 / 180);m_result = result;UpdateData(false);if(m_result = 1.7E308 | m_result SetWindowText(结果无法显示 );tempvalue = 0;result = 0;check = false;/点击后“ =”后,默认无小数点dint = 0;void CCalculatorDlg:Oncos()result = cos(result
33、* 3.1415926 / 180);m_result = result;UpdateData(false);if(m_result = 1.7E308 | m_result SetWindowText(结果无法显示 );tempvalue = 0;result = 0;check = false;/点击后“ =”后,默认无小数点dint = 0;void CCalculatorDlg:Ontan()if(cos(result * 3.1415926 / 180) = 0)GetDlgItem(IDC_RESULT)-SetWindowText( 数据有误! ); else重庆邮电大学C+课程设计报告重庆邮电大学C+课程设计报告result= (sin(result* 3.1415926 / 180)/ (cos(result* 3.1415926 / 180);m_result = result;UpdateData(false);if(m_result = 1.7E308 | m_result SetWindowText(结果无法显示 );tempvalue = 0;result = 0;check = false;/点击后“ =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人工关节置换病人的护理
- 安全行为习惯养成指南
- 2025年九江市消防救援支队政府专职消防员招聘考试真题
- 2025年玉林市北流市疾病预防控制中心招聘真题
- 2025年杭州桐庐县医疗卫生单位招聘考试真题
- 《数控加工编程与操作2》课件-1.1.8约束与冲突
- 2026年大同市消防救援系统事业单位人员招聘考试备考试题及答案详解
- 2026年东莞市工会系统事业单位人员招聘考试备考试题及答案详解
- 2026年保定市社区工作者招聘考试备考试题及答案详解
- 2026广西崇左天等县天鸿投资集团有限公司招聘工作人员3人考试备考试题及答案解析
- 河南资本集团笔试题库
- 2026年ESG(可持续发展)考试题及答案
- 2026广东广州市越秀区人民街道办事处招聘社区退管专职人员2人笔试参考题库及答案详解
- 13.1 在劳动中创造人生价值 课件(内嵌视频)2025-2026学年统编版道德与法治七年级上册
- 2026年科技馆展品维护工程师面试技术问答
- 2026年新版事故应急处置卡模板(新版27类事故分类依据YJT 32-2025要求编制)
- 2026广东中考历史押题必刷卷含答案
- 2026年高级社会工作师押题宝典题库及1套完整答案详解
- 2026年辅警转正考试时事政治试题及答案
- 20S515 钢筋混凝土及砖砌排水检查井
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
评论
0/150
提交评论