首页 c 简单计算器课程设计

c 简单计算器课程设计

举报
开通vip

c 简单计算器课程设计 攀枝花学院 Panzhihua university 学生课程设计(论文) 题    目:          简单计算器            学生姓名:  00000    学  号:000000000000 所在院(系):      数学与计算机学院      专    业:          网络工程          班    级:      2012级网络工程1班    指 导 教 师:  秦振涛      职称: 讲师  2013年  6月 20 日 攀枝花学院教务处制 攀枝花学院本科学生课...

c  简单计算器课程设计
攀枝花学院 Panzhihua university 学生课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 (论文) 题    目:          简单计算器            学生姓名:  00000    学  号:000000000000 所在院(系):      数学与计算机学院      专    业:          网络工程          班    级:      2012级网络工程1班    指 导 教 师:  秦振涛      职称: 讲师  2013年  6月 20 日 攀枝花学院教务处制 攀枝花学院本科学生课程设计任务书 题 目 计算器 1、课程设计的目的 本课程设计的目的和任务:(1)巩固和加深学生对C语言课程的基本知识的理解和掌握;(2)掌握C语言编程和程序调试的基本技能;(3)利用C语言进行简单软件设计的基本思路和方法;(4)提高运用C语言解决实际问题的能力。 2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等) 一、用C实现如下功能: 使用C语言编写一个类似于Windows附件提供的计算器软件,实现计算器的基本功能,能进行浮点数的加、减、乘、除、乘方和求模运算。 二、撰写课程设计报告或课程设计总结课程设计报告要求:总结报告包括需求 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。 3、主要参考文献 [1] 揣锦华.面向对象程序设计与VC++实践.西安电子科技大学出版社,2005 [2] 张建宏,汤练兵,马德骏.计算机程序设计基础-C语言程序设计.科学出版社,2006 [3] 陈清华.Visual C++课程设计案例精选与编程指导.东南大学出版社,2004 [4] 谭浩强,c++程序设计(第二版),清华大学出版社,2011 4、课程设计工作进度 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 课程设计时间为两周,分四个阶段完成: 1. 分析设计阶段。引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。这一阶段前第1-2天完成。 2. 编码调试阶段:根据设计分析 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 编写C语言代码,然后调试该代码,实现课题要求的功能。这一阶段在第3-7天完成。 3. 总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、总体设计、详细设计、编码、测试的步骤和内容。这一阶段在第8-9天完成。 4. 考核阶段。这一阶段在第10天完成。 指导教师(签字)   日期 年 月 日 教研室意见: 年 月 日 学生(签字): 接受任务时间: 年 月 日           注:任务书由指导教师填写。 课程设计(论文)指导教师成绩评定表 题目名称   评分项目 分值 得分 评价 LEC评价法下载LEC评价法下载评价量规免费下载学院评价表文档下载学院评价表文档下载 内涵 工作 表现 20% 01 学习态度 6   遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。 02 科学实践、调研 7   通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。 03 课题工作量 7   按期圆满完成规定的任务,工作量饱满。 能力 水平 35% 04 综合运用知识的能力 10   能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。 05 应用文献的能力 5   能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。 06 设计(实验)能力,方案的设计能力 5   能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。 07 计算及计算机应用能力 5   具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。 08 对计算或实验结果的分析能力(综合分析能力、技术经济分析能力) 10   具有较强的数据收集、分析、处理、综合的能力。 成果 质量 45% 09 插图(或图纸)质量、篇幅、设计(论文)规范化程度 5   符合本专业相关规范或规定要求;规范化符合本文件第五条要求。 10 设计说明书(论文)质量 30   综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。 11 创新 10   对前人工作有改进或突破,或有独特见解。 成绩   指导教师评语 指导教师签名: 年 月 日             摘要 本课程设计将实现一个简单计算器。其类似于Windows附件中自带的计算器。这个计算器不仅实现了简单的四则运算功能,还实现了高级的科学计算功能,而且具有简洁大方的图文外观。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。在课程设计中,系统开发平台为Windows 2000XP,程序设计设计语言采用Visual C++,在程序设计中,采用了结构化与面向对象两种解决问题的方法。 关键词: 程序设计,计算器,MFC,按钮控件 目录 摘要    Ι 1 前言    3 1.1 课题背景    3 1.2 课程设计目的    3 1.3 可行性分析    3 2 相关技术分析    4 3 设计与实现    8 3.1 算法的实现    8 3.1.1 头文件    8 3.1.2 取字符    8 3.1.3 运算的处理    11 3.2 计算器的结果测试    14 3.2.1 测试一    14 3.2.2 测试二    15 3.2.3 测试三    16 3.2.4 测试四    17 4 源程序代码    18 结论    20 参 考 文 献    21 1 前言 简单计算器包括双目运算和单目运算功能。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。 1.1 课题背景 计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。要实现计算功能,可以用VC++的知识编写程序来解决此问题。该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。 1.2 课程设计目的 在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。 由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。 而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C++程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。 1.3 可行性分析 本设计是简单计算器。日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。 1.4 需求分析   本软件主要用于计算机windows 2000/XP以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。要程序能实现:加,减,乘,除,开方,倒数等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。另外还可以实现多种科学计算的功能,如:三角函数的计算,弧度与角度间的转换,对数指数的计算等等。 2 相关技术分析 如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。子程序开始时m_num为零。按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。 回到总流程图中,输完第一个操作数后,若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。若按下的是单目运算符,则直接对其处理得出结果。若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。算出后把结果保存至num2。若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。 它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作。即可单机按钮进行操作,也可直接通过键盘直接输入。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。 (1)包含的功能有:加、减、乘、除运算,开方、求倒数等功能[1]. (2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)给对话框添加菜单。 (4)制定高级按钮控件,该按钮具有不规则的形状,可以根据用户鼠标的位置和单击状态的不同,显示不同的颜色[3]。 (5)制定高级编辑控件,该编辑控件可以指定文本文字的字体和颜色。 (6)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (7)实现对话框的扩展功能[2]。 (8)计算功能基本上是用系统内部函数。 (9)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 图2.1 输入数据子函数流程图 图2.2 简单计算器总流程图 3 设计与实现 3.1 算法的实现 3.1.1 头文件 首先对于一个程序的实现,我们需要运用很多的类,而对于我们的一个简单的程序来说,再编写一个类是很麻烦的。头文件可以定义很多宏定义,就是一些全局静态变量的定义,在这样的情况下,只要修改头文件的内容,程序就可以做相应的修改,不用亲自跑到繁琐的代码内去搜索。所以我们需要应用前辈的经验,他们将很多的头文件写好,以便我们使用。 对于我所设计的简单计算器 ,就将应用很多的头文件。如: #include #include   #include #include 3.1.2 取字符 在一个简易计算器中,计算器值得输入与输出也是至关重要的,在本程序中,首先应用枚举理出计算式所有可能出现的值,C++编程语言作为一种强大的语言,在写程序的时候,我们常常需要为某个对象关联一组可选的alternative属性,所以我们常常就需要建立一个取值范围,在本函数中应用enum TOKEN value{…} 枚举函数;同时运用switch()函数来进行去自字符运算,这个函数的代码如下: enum Token_value {                    //首先定义Taken_value为enum函数,Token_value为枚举类型,枚举了该语言中的各种终结符标记(token)值。 NAME,        NUMBER,        END, PLUS='+',      MINUS='-',        MUL='*',          DIV='/',      PRINT=';',          ASSIGN='=',    LP='(',    RP=')', };                                  //中间所包含的就是枚举中的成员 定义: Token_value curr_tok = PRINT;        //curr_tok:在get_token中设置,在expr、term、prim中的switch中使用。它表示的是当前读入的标记的类别,用来控制分类别的求值及其它处理。 map table;          //number_value:在get_token中设置,在prim中使用。它表示的是当前读入数的字面值。 double number_value;               //table:在prim中设置,在prim中使用。它表示的是已经读入的符号名对应数值,符号名可以增加,对应数值通过引用类型隐含地赋值。  string string_value;                //string_value:在get_token中设置, 在prim中使用。它表示的是当前读入的符号名,用来在table中查找对应的数值。 int no_of_errors;                   //no_of_errors:在error中设置,在main中使用。它表示的是已经发生的错误数量。 取字符的主代码: Token_value get_token()                      //取字符,由程序中的get_token函数实现,它完成程序的输入和词法分析。 { char ch;                                  //定义字符ch do { if(!cin.get(ch)) return curr_tok = END;//没有输入字符或者输入的为空,将返回值为curr_tok = END。 }while(ch!='\n' && isspace(ch));          //直到ch !=换行符时和返回值为非零值时结束do…while()循环。 switch(ch) { case ';': case '\n': return curr_tok = PRINT;              //当ch得值为‘;’或者‘\n’时,返回curr_tok = PRINT case '*': case '/': case '+': case '-': case '(': case ')': case '=': return curr_tok = Token_value(ch); //当ch得值为'*'、'/'、'+'、'-'、'('、')'、'='时, 返回值为  curr_tok = Token_value (ch),即取出该值。 case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': {    cin.putback(ch); cin>>number_value; return curr_tok = NUMBER; }                                    //如果输入的是数字字符及‘.’时,就将运行花括号中的程序,cin.putback(ch)是将ch放回到输入流中去,后面可以直接读完整的数字,使输入数字时,能够保证输入的数字与想法相协调。并返回值curr_tok = NUMBER。 default:                            //由程序中map类型的table实现,用以保存程序的输入和词法分析。 { if(isalpha(ch)) { string_value = ch; while(cin.get(ch) && isalnum(ch)) string_value += ch; cin.putback(ch); return curr_tok = NAME; }                              //本段主要是对符号的输入,isalpha(ch)判断是否为中英文,若是,则返回非0值,否则,返回0值。 error("bad token"); return curr_tok = PRINT; } } 3.1.3 运算的处理 计算器的核心组成部分,它将对人们所输入的数字进行运算处理,将得到我们想要的结果。定义double expr(bool get);double prim (bool get); 在初始的时候get为真,根据不同的if()函数来判断,并将所要取的字符判断出来进行运算处理。代码如下: double expr(bool get);  //加和减 double prim(bool get)  //处理初等项 { if(get) get_token(); switch(curr_tok) { case NUMBER:    //运用switch函数,当case NUMBER;时,将把取符号时输入的number_value的值赋给v,并将值返回。 {          double v = number_value; get_token(); return v; } case NAME:    //首先运用map函数,对table[string_value]对应输入,并将字符赋给double  &v;if输入的字符与枚举列表中的ASSIGN一样的,即expr(true)为‘+’,并将字符返回v。 { double &v = table[string_value];  //把v设置为 table[string_value]的引用。 if(get_token() == ASSIGN) v = expr(true); //如果所获得的字符与枚举中的ASSIGN即加号符号相同,则expr为真,运行加法运算。 return v; } case MINUS:    //把v设置为 table[string_value]的引用;if输入的字符与枚举列表中的MINUS一样的,即-prim(true)为‘-’,并将字符返回v。 return -prim(true);  // case LP:    //如果函数满足LP,则返回到error函数。 { double e = expr(true); if(curr_tok!=RP) return error(") expected"); get_token();  //重新取字符 return  e; } default: return error("primary expected"); } } double term(bool get)  //乘除运算 { double left = prim(get); for(;;) switch(curr_tok) { case MUL: left *= prim(true);    //在prim函数中去乘以left break; case DIV: if(double d = prim(true)) {    //同理,是为除 left /= d; break; } return error("divide by 0"); default: return left; } } double expr(bool get)  //加减 { double left = term(get); for(;;) switch(curr_tok) { case PLUS: left += term(true); break; case MINUS: left -= term(true); break; default: return left; } } 3.2 计算器的结果测试 3.2.1 测试一 输入“90.5”,“-”,“60.7”,“+”,“2.36”,“ =”,运算结果32.16,与实际结果相同。 3.2.2测试二 输入“910”,“/”,“10”,运算结果为91,与实际相符。 3.2.3 测试三 输入“3”,“*”,“6”,“*”,“2”。计算结果为36,与实际结果相同。 3.2.4 测试四 输入“9”,“/”,“3”,“+”,“5”,“-”,“2”,“*”,“1”得,运算结果为6,与实际结果相同。 4 源程序代码 #include #include #include #include using namespace std; enum Token_value { NAME,    NUMBER,    END, PLUS='+',    MINUS='-',    MUL='*',    DIV='/', PRINT=';',    ASSIGN='=',    LP='(',    RP=')', }; Token_value curr_tok = PRINT; map table; double number_value; string string_value; int no_of_errors; double error(const string &s) { no_of_errors++; cerr<<"error: "<>number_value; return curr_tok = NUMBER; } default: { if(isalpha(ch)) { string_value = ch; while(cin.get(ch) && isalnum(ch)) string_value += ch; cin.putback(ch); return curr_tok = NAME; } error("bad token"); return curr_tok = PRINT; } } } double expr(bool get);  //加和减 double prim(bool get)  //处理初等项 { if(get) get_token(); switch(curr_tok) { case NUMBER: {    double v = number_value; get_token(); return v; } case NAME: { double &v = table[string_value]; if(get_token() == ASSIGN) v = expr(true); return v; } case MINUS: return -prim(true); case LP: { double e = expr(true); if(curr_tok!=RP) return error(") expected"); get_token(); return e; } default: return error("primary expected"); } } double term(bool get)  //乘除 { double left = prim(get); for(;;) switch(curr_tok) { case MUL: left *= prim(true); break; case DIV: if(double d = prim(true)) { left /= d; break; } return error("divide by 0"); default: return left; } } double expr(bool get)  //加减 { double left = term(get); for(;;) switch(curr_tok) { case PLUS: left += term(true); break; case MINUS: left -= term(true); break; default: return left; } } int main() { table["pi"] = 3.5; table["e"] = 2.4; cout<<"please input your string to calculator:"<
本文档为【c 简单计算器课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_633423
暂无简介~
格式:doc
大小:88KB
软件:Word
页数:0
分类:工学
上传时间:2019-08-20
浏览量:20