




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+课程设计报告( 2009 - 2010 年度第 2学期)计算器的设计专业计算机科学与技术(软件开发)学生姓名班级学号指导教师王 榕完成日期2010年6月21日20 / 22文档可自由编辑打印目 录1 概 述11.1 课程设计目的11.2 课程设计内容12 系统需求分析12.1 系统目标12.2 主体功能12.3 开发环境13 系统概要设计23.1 系统流程图23.2 系统功能划分24系统详细设计34.1 设计步骤34.2 界面设计55 测试75.1 测试方案75.2 测试结果76 小结8参考文献10附 录11附录1 源程序清单11计算器的设计1 概 述 1.1 课程设计目的1、巩固并加深学
2、生对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、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算。3、以角度、弧度两种方式实现上述部分函数。2.3 开发环境Windows操作系统,VC+ 6.0, OFFICE WORD3 系统概要设计3.1 系统流程图开始输入第一个操作数加法减法乘法除法求幂求模开平方求正弦求余弦求对数输入第二个操作数显示结果寄存器清零结束图3-1 系统流程图3.2
4、系统功能划分表3-1 系统功能表序号文件名主要功能备注1+加法求和两个操作数2-减法求差两个操作数3*乘法求积两个操作数4/除法求商两个操作数5%求模两个操作数6求x的y次幂两个操作数7S求平方根一个操作数8Sin求正弦一个操作数9Cos求余弦一个操作数10ln求对数一个操作数11n!求阶乘一个操作数12=等于13C寄存器清零 1) 假设执行操作“+”,先输入一个数,再输入“+”,再输入另一个数,最后输入“+”。整个功能“+”就执行完毕。 2)执行操作“Sin”,先输入一个数,在输入“Sin”,整个功能“Sin”就执行完毕。3)执行操作“n!”,先输入一个数,再输入“n!,整个功能“n!”执行
5、完毕。4系统详细设计4.1 设计步骤打开Microsoft Visual C+ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizardexe工程,输入工程名yeyahui及其所在位置,点击确定,如图4-1所示。图4-1 新建MFC AppWizardexe工程将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图4-2所示。 图4-2基本对话框这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图4-3所示。图4-3新建的对话框4.2 界面设计界面设计主要是创建控件,在图4-3所示的Resoure View选项卡中打开Dialog资源
6、组,双击IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。1)在图4-3中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图4-4所示,在该对话框中输入ID属性。 图4-4 Edit属性对话框2)在图4-2中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画
7、出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图4-5所示,在该对话框中输入控件的ID值和标题属性。图4-5 Push Button属性按照上面的操作过程编辑其他按钮和编辑框等对象的属性。表4-1 各按钮和编辑框等对象的属性对象ID标题或说明编辑框IDC_xianshi结果显示按钮IDC_BUTTON00按钮IDC_BUTTON11按钮IDC_BUTTON22按钮IDC_BUTTON33按钮IDC_BUTTON44按钮IDC_BUTTON55按钮IDC_BUTTON66按钮IDC_BUTTON77按钮IDC_BU
8、TTON88按钮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=完成后界面如图4-6所示。图4-6 设计界面加入标准型和科学型按键:图4-7 加入标准型和科学型按键界面标准型:图4-8标准型界面科学型:图4-9科学型界面5 测试5.1 测试方案先用标准
9、型进行简单的四则运算:+ - * /,测试完成后。再用科学型进行稍复杂的运算:sin,cos,tan,log,ln,n!等,核对其计算结果的正确性。5.2 测试结果经测试标准型计算器,进行简单的四则运算,结果均正确,如图5-1所示。 图5-1 四则运算测试结果图测试科学型计算器,进行sin,cos,tan,log,ln,n!等运算,结果均正确,求sin30(如图5-2所示)。 图5-2 求sin30测试结果图求5 !(如图5-3所示),测试完成。 图5-3 求5!测试结果图6 小结通过两个星期的折腾,总算把课程设计给完成了,这是一个坚苦而又漫长的过程。看着劳动成果,很欣慰! 刚开始,可以说是没
10、有头绪,于是就去图书馆找资料,找到了一些关于程序方面的,可是这点小进展远远不够,这只是一个小小的开始。下一步是上网查,找到了些与我题目相似的,那时我很高兴,可是那还不是我要的,于是又上网查到了些有关的函数等等,终于在我的努力下,完成了这个程序。虽然对着电脑做程序,有点累有点热,可是当看到劳动成果时,真是别有一番滋味在心头啊!世上无难事,只怕有心人,的确如此。做完这个课程设计,我的自信一下子提高了,我也会写程序了;尽管对于有些人这种程序会很简单,可对我说,已经很不容易了。这次体验为以后的学习计算机的我增强了信心。享受劳动成果的滋味实在很美妙啊!参考文献1谭浩强. C程序设计(第三版)(
11、M).北京:清华大学出版社,2005. 2谭浩强. C程序设计题解与上机指导(第三版) (M).北京:清华大学出版社,2005.3甄炜. C+语言和面向对象程序设计教程(M).北京:机械工业出版社,2005.附 录附录1 源程序清单/ CalculatorDlg.cpp : implementation file#include "stdafx.h"#include "Calculator.h"#include "CalculatorDlg.h"#include "math.h"#ifdef _DEBUG
12、#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDl
13、g)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* pDX)C
14、Dialog: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)/AFX_DATA_I
15、NIT(CCalculatorDlg)m_result = _T("");m_isDegree = -1;m_sentific = -1;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_hAccel = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDD);DtoR=1;m_coff
16、=0.1;m_bCoff=0;m_errorState = ErrNone;m_bOperandAvail=FALSE;m_operator=OpNone;void CCalculatorDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CCalculatorDlg)DDX_Text(pDX, IDC_DISPLAY, m_result);DDX_Radio(pDX, IDC_DEGREE, m_isDegree);DDX_Radio(pDX, IDC_SENTIFIC, m_sent
17、ific);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)/AFX_MSG_MAP(CCalculatorDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_COMMAND_RANGE(IDC_0, IDC_9, OnOperandInput)ON_BN_CLICKED(IDC_ADD, OnAdd)ON_BN_CLICKED(IDC_MINUS, OnMinus)ON_BN_CLICKED(IDC_DIVID, OnDivid)ON_BN_CLICKED(IDC_
18、MULTIPLY, OnMultiply)ON_BN_CLICKED(IDC_EQUAL, OnEqual)ON_BN_CLICKED(IDC_SQRT, OnSqrt)ON_BN_CLICKED(IDC_SIGN, OnSign)ON_BN_CLICKED(IDC_RECIPROCAL, OnReciprocal)ON_BN_CLICKED(IDC_POINT, OnPoint)ON_BN_CLICKED(IDC_CLEAR, OnClear)ON_BN_CLICKED(IDC_LOG, OnLog)ON_BN_CLICKED(IDC_LN, OnLn)ON_BN_CLICKED(IDC_F
19、ACTORIAL, OnFactorial)ON_BN_CLICKED(IDC_EXP, OnExp)ON_BN_CLICKED(IDC_SENTIFIC, OnSentific)ON_BN_CLICKED(IDC_SIN, OnSin)ON_BN_CLICKED(IDC_SQUAR, OnSquar)ON_BN_CLICKED(IDC_TAN, OnTan)ON_BN_CLICKED(IDC_STANDARD, OnStandard)ON_BN_CLICKED(IDC_DEGREE, OnDegree)ON_BN_CLICKED(IDC_RAD, OnRad)ON_BN_CLICKED(ID
20、C_COS, OnCos)/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) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTB
21、OX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The f
22、ramework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereGetWindowRect(rcSentific);CWnd* m_pMark=GetDlgItem(IDC_DISPLAY);ASSERT(m_pMark);CRect rect;m_pMark
23、->GetWindowRect(rect);rcStandard=rcSentific;rcStandard.right=rect.right+5;m_bIsExpand=0;m_sentific=1;OnStandard();m_result="0."m_isDegree=1;UpdateData(FALSE);return TRUE; / return TRUE unless you set the focus to a controlvoid CCalculatorDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID
24、& 0xFFF0) = 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 frame
25、work.void CCalculatorDlg: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(&am
26、p;rect);int x = (rect.Width() - 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 CCalculatorDlg:OnQueryDragIcon()return (
27、HCURSOR) m_hIcon;void CCalculatorDlg:OnOperandInput(UINT nID)ASSERT(nID >= IDC_0 && nID <= IDC_9);if (m_errorState != ErrNone)return;if(m_func!=FuncNone)m_func=FuncNone;Calculate();if (!m_bOperandAvail)m_operand = 0; if(!m_bCoff) m_operand=m_operand*10+(nID-IDC_0);elsem_operand=m_opera
28、nd+(nID-IDC_0)*m_coff;m_coff*=0.1;m_bOperandAvail=TRUE;UpdateDisplay();void CCalculatorDlg:Calculate()if (m_errorState != ErrNone)return;if (m_bOperandAvail)if (m_operator = OpNone)m_accum = m_operand;else if (m_operator = OpMultiply)m_accum *= m_operand;else if (m_operator = OpDivide)if (m_operand
29、= 0)m_errorState = ErrDivideByZero;elsem_accum /= m_operand;else if (m_operator = OpAdd)m_accum += m_operand;else if (m_operator = OpSubtract)m_accum -= m_operand;m_bOperandAvail = FALSE;m_bCoff=0;m_coff=0.1;UpdateDisplay();void CCalculatorDlg:UpdateDisplay()if (GetSafeHwnd() = NULL)return;if (m_err
30、orState != ErrNone)m_result="除数不能为零"elsefloat lVal = (m_bOperandAvail) ? m_operand : m_accum;m_result.Format(_T("%f"), lVal);int i=m_result.GetLength();while(m_result.GetAt(i-1)='0')m_result.Delete(i-1,1);i-=1;UpdateData(FALSE);BOOL CCalculatorDlg:Keyboard(LPCTSTR szButto
31、n)switch (szButton0)case 'c':case 'C':OnClear();break;case '/':OnDivid();break;case '+':OnAdd();break;case '-':OnMinus();break;case '*':OnMultiply();break;case '=':OnEqual();break;default:if (szButton0 >= '0' && szButton0 <
32、;= '9')if (m_errorState != ErrNone) return FALSE; if (!m_bOperandAvail) m_operand = 0; m_operand=m_operand*10+szButton0 - '0' m_bOperandAvail=TRUE; UpdateDisplay();elsereturn FALSE;break;return TRUE;void CCalculatorDlg:OnAdd() / TODO: Add your control notification handler code hereCa
33、lculate();m_operator = OpAdd;void CCalculatorDlg:OnMinus() / TODO: Add your control notification handler code hereCalculate();m_operator = OpSubtract;void CCalculatorDlg:OnDivid() / TODO: Add your control notification handler code hereCalculate();m_operator = OpDivide;void CCalculatorDlg:OnMultiply(
34、) / TODO: Add your control notification handler code hereCalculate();m_operator = OpMultiply;void CCalculatorDlg:OnEqual() / TODO: Add your control notification handler code hereCalculate();m_operator = OpNone;void CCalculatorDlg:OnSign() / TODO: Add your control notification handler code herem_oper
35、and*=-1;UpdateDisplay();void CCalculatorDlg:OnSqrt() / TODO: Add your control notification handler code here m_func=FuncSqrt;Run_Func();void CCalculatorDlg:OnReciprocal() / TODO: Add your control notification handler code here m_func=FuncRec;Run_Func();void CCalculatorDlg:OnPoint() / TODO: Add your
36、control notification handler code herem_bCoff=1;UpdateDisplay();void CCalculatorDlg:OnClear() / TODO: Add your control notification handler code herem_operator = OpNone;m_operand = 0;m_accum = 0;m_bOperandAvail = FALSE;m_errorState = ErrNone;m_coff=0.1;UpdateDisplay();BOOL CCalculatorDlg:PreTranslat
37、eMessage(MSG* pMsg)if (m_hAccel != NULL && TranslateAccelerator(m_hWnd, m_hAccel, pMsg)return TRUE;return CDialog:PreTranslateMessage(pMsg);void CCalculatorDlg:OnLog() / TODO: Add your control notification handler code herem_func=FuncLog;Run_Func();void CCalculatorDlg:OnLn() / TODO: Add your
38、 control notification handler code herem_func=FuncLn;Run_Func();void CCalculatorDlg:OnFactorial() / TODO: Add your control notification handler code here m_func=FuncN;Run_Func();void CCalculatorDlg:OnExp() / TODO: Add your control notification handler code herem_func=FuncExp;Run_Func();void CCalcula
39、torDlg:OnSentific() / TODO: Add your control notification handler code herem_bIsExpand=1;m_sentific=0;ExpandToSentific();void CCalculatorDlg:OnSin() / TODO: Add your control notification handler code herem_func=FuncSin;Run_Func();void CCalculatorDlg:OnSquar() / TODO: Add your control notification ha
40、ndler code here m_func=FuncSqre;Run_Func();void CCalculatorDlg:OnTan() / TODO: Add your control notification handler code herem_func=FuncTan;Run_Func();void CCalculatorDlg:OnStandard() / TODO: Add your control notification handler code herem_bIsExpand=0;m_sentific=1;ExpandToSentific();void CCalculatorDlg:Run_Func()if (m_errorState != ErrNone)return;if (m_bOperandAvail)if(m_func=FuncExp)m_operand=exp(m_operand);if(m_func=FuncLn)m_operand=log(m_operand);if(m_func=FuncLog)m_operand=log10(m_o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目成本控制技巧分析试题及答案
- 2025年审计流程优化策略试题及答案
- 2024年微生物新进展题目试题及答案
- 2025年证券从业资格证自我评估试题及答案
- 矿山配电硐室施工方案
- 项目管理导向与成功率的关系试题及答案
- 注会备考的逆向思维与策略分享试题及答案
- 股票市场与经济数据的联动性分析试题及答案
- 2024年项目管理认证职业路径试题及答案
- 高效备战特许金融分析师考试的试题及答案
- 比例尺单元测试卷及答案
- 北京市朝阳区2025届高三下学期一模试题 数学 含答案
- 食品工厂5S管理
- 运输公司安全管理制度
- 2025届吉林省长春市高三下学期4月三模政治试题(原卷版+解析版)
- 2025届江苏省扬州市中考一模语文试题(含答案)
- 2025年河北省唐山市中考一模道德与法治试题(含答案)
- 2025年一级注册计量师考试题库大全及答案
- 卫生院全国预防接种日宣传活动总结(8篇)
- 工程造价咨询服务投标方案(专家团队版-)
- 2024年广东省中考生物+地理试卷(含答案)
评论
0/150
提交评论