C++计算器的设计报告
c实现计算器课程设计报告
得分:信电工程学院课程设计报告基于VC的表达式计算器软件设计课程:程序设计综合训练1班级:12软嵌2班学号:223姓名:***指导教师:**2013年6 月28日目录1引言------------------------------------------------------------------------------- 1 课题背景-----------------------------------------------------------------2课程设计目的-----------------------------------------------------------32需求分析-------------------------------------------------------------------------5 系统功能模块-----------------------------------------------------------5设计要求-----------------------------------------------------------------63系统实现------------------------------------------------------------------------8 对话框界面设计-------------------------------------------------------8数值计算功能的实现-----------------------------------------------104程序关键代码及运行结果-------------------------------------------------12 5总结与体会------------------------------------------------------------------151 引言课题背景计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具;要实现计算功能,可以用VC++的知识编写程序来解决此问题;该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度;该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用.课程设计目的本课程是一门实践性很强的课程,既要熟练掌握相关概念,又要动手编程,还要上机调试运行;同时,本课程也注重提高学生编写技术文档和技术文档阅读的能力;学生通过本课程的学习实践,将学习和强化软件开发的能力、文档写作能力、英语阅读能力、软件使用能力等;为今后计算机编程的学习和工作打下良好、扎实的理论实践基础;2 需求分析系统功能模块1输入的符号,数字从左向右显示; 点击“=”输出结果,在输出行显示2支持加减乘除运算;3支持“xˆy”的运算;4 括号“”“”的使用;5支持混合运算;6功能键“ANS” ,“CLEAR” ,“BACKSPACE”的使用;7计算器的输入方式:支持鼠标点击计算器键输入;8计算器计算结果的输出方式:在计算器窗口的输出行显示9算数运算的数据类型:整数和浮点数;10特殊情况的计算;11以上所有的运算都是在10进制下进行.1输入的符号,数字从右向左显示;先输入“8”再输入“×”点击“=”输出结果,在输出行显示.2支持加减乘除运算.a.c. 减法计算d.除法运算特殊情况见2)支持求次方x ˆy运算;求次方x ˆy运算:“ˆ”为次方x ˆy在输入行中的显示符号4“”“”的使用;括号的使用要使用“”“”的时候,先点击“”,再输入数字或符号,内容输入完毕以后,点击“”,完成“”“”的所有功能;例如:2×2+2=22+222+222+25支持混合运算;附:运算符的优先级表 优先级 功能键 显示 结合律从 高 到 低、 、 自左向右 x ˆy 、1/x ˆ、~ 自左向右 ×、÷ 、/ 自左向右 ﹢﹣ ﹢﹣自左向右例如:5+2×5=5+256功能键“CLEAR ”及“BACKSPACE ”的使用;a .“CLEAR ”为清0键;只要按下“CLEAR ”键,输入行所有字符清0,输出行回到原始状态; 输入前:5+25输入后:b.“BACKSPACE ”为退格键;当输入任何数字或运算符,只要按下“BACKSPACE ”混合运算则按优先级表中的运算符优先顺序从左向右计算键,字符位自右向左消去一位;注:初始的“0”不能被删除输入前:输入后:C.“ANS”为变量储存器;当一次结果被清除后,个结果;如:按“CLEAR”键后,再按“ANS”键就会这样7计算器的输入方式:只支持鼠标点击计算器键输入;8计算器计算结果的输出方式:在计算器窗口的输出行显示;9算数运算的数据类型:整数和浮点数;a.输入行最大显示的字符数32位,每个运算符算一位;b.“”,“”各占一个字符位;c.输出行最大显示的字符数为32位;d.纯小数显示的最大字符数为小数点后30位,整数及小数点各占一位;若纯小数为负数,则显示最大字符数为小数点后29位,“-”占一位;e.输入行在未输入任何数字的时候,显示“0”,只占一个字符位;当输入任何数字时;“0”消失,输入的的数字取代“0”;当输入任何运算符时;默认之前输入数字“0”;f.点击“=”键后方可显示数字或字母或汉字;10特殊情况的运算A.运算结果整数部分超出32位,显示Infinity无穷大;出现运算异常B.除数为0的情况,提示用户被除数不能为零C.在运算时,若结果为纯小数,小数位超过30位,则超出的字符舍弃;若舍弃超出部位后,结果全为0,则结果为0D.在运算时,若结果的整数位不为0a.总位数在最大字符位内,则直接显示;b.总位数在最大字符位以外,整数部分在最大字符位以内,则只优先显示整数部位,弃掉32位以后的字符E.当用户输入“^0”时,若“^0”之前的算式或数字的值为0,点击“=”后,输出界面显示“底数不能为0”11)以上所有的运算都是在10进制下进行设计要求1 了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2 理解需求分析过程,掌握需求分析文档编写;3 理解面向对象程序设计的基本思路和方法;4 掌握用VC++开发MFC应用程序的一般步骤和方法;5 掌握基于对话框的应用程序的编写,主要包括文本框和按钮等;6 掌握后缀表达式算法;7 掌握VC++开发工具的使用;包括资源管理,项目创建,运行调试等;8 完成表达式的计算器应用程序,实现基本的加、减、乘、除等四则运算,且支持包括括号的表达式运算功能;3系统实现对话框界面设计数值计算实现例如:2×2+2=2222+222+222+284程序关键代码及运行结果include <iostream>include <string>include ""include <cmath>using namespace std;bool jisuandouble a,double b,char c,double& d{switch c{case '+':d=a+b;"using namespace std;ifdef _DEBUGdefine new DEBUG_NEWendifvoid CCompuetrDlg::OnPaint{if IsIconic{CPaintDC dcthis; // 用于绘制的设备上下文SendMessageWM_ICONERASEBKGND, reinterpret_cast<WPARAM>, 0;// 使图标在工作矩形中居中int cxIcon = GetSystemMetricsSM_CXICON;int cyIcon = GetSystemMetricsSM_CYICON;CRect rect;GetClientRect▭int x = - cxIcon + 1 / 2;int y = - cyIcon + 1 / 2;// 绘制图标x, y, m_hIcon;}else{CRect rect;CPaintDC dcthis;GetClientRectrect;rect,RGB255,0,0;//设置背景颜色CDialog::OnPaint;CDialog::OnPaint;}}// : 定义应用程序的类行为;//include ""include ""include ""ifdef _DEBUGdefine new DEBUG_NEWendif// CCompuetrAppBEGIN_MESSAGE_MAPCCompuetrApp, CWinAppON_COMMANDID_HELP, CWinApp::OnHelpEND_MESSAGE_MAP// CCompuetrApp 构造CCompuetrApp::CCompuetrApp{// TODO: 在此处添加构造代码,// 将所有重要的初始化放置在InitInstance 中}// 唯一的一个CCompuetrApp 对象CCompuetrApp theApp;// CCompuetrApp 初始化BOOL CCompuetrApp::InitInstance{// 如果一个运行在Windows XP 上的应用程序清单指定要// 使用版本6 或更高版本来启用可视化方式,//则需要InitCommonControls;否则,将无法创建窗口;InitCommonControls;CWinApp::InitInstance;// 标准初始化// 如果未使用这些功能并希望减小// 最终可执行文件的大小,则应移除下列// 不需要的特定初始化例程// 更改用于存储设置的注册表项// TODO: 应适当修改该字符串,// 例如修改为公司或组织名SetRegistryKey_T"应用程序向导生成的本地应用程序";CCompuetrDlg dlg;m_pMainWnd = &dlg;INT_PTR nResponse = ;if nResponse == IDOK{// TODO: 在此放置处理何时用“确定”来关闭//对话框的代码}else if nResponse == IDCANCEL{// TODO: 在此放置处理何时用“取消”来关闭//对话框的代码}// 由于对话框已关闭,所以将返回FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵;return FALSE;}//stackinclude<iostream>include<string>include<new>using namespace std;template <class T>class LinkedStack;template <class T>class Node{friend LinkedStack<T>; private:T data;Node<T> link;};template <class T>class LinkedStack{public:LinkedStack{top=0;length=0;}~LinkedStack;bool isEmptyconst{return top==0;}bool isFullconst;T Top const;LinkedStack<T>&Addconst T& x;LinkedStack<T>&DeleteT& x;int getLength{return length;} private:Node<T> top;int length;};template <class T>LinkedStack<T>::~LinkedStack{Node<T> next;whiletop{next=top->link;delete top;top=next;}}template <class T>bool LinkedStack<T>::isFullconst{try{Node<T> p=new Node<T>;delete p;return false;}catchbad_alloc& e{return true;}}template <class T>T LinkedStack<T>::Topconst{ifisEmptythrow CString"堆栈空异常";return top->data;}template <class T>LinkedStack<T>& LinkedStack<T>::Addconst T& x {Node<T> p=new Node<T>;p->data=x;p->link=top;top=p;length++;return this;}template <class T>LinkedStack<T>& LinkedStack<T>::DeleteT& x {ifisEmptythrow CString"堆栈空异常";x=top->data;Node<T> p=top;top=top->link;delete p;length--;return this;}5总结与体会计算器虽然是我们生活中常见的一样工具,但不知道实现这样一个工具,说实话不是很简单,对于我这个学习一般的人来说,很难计算器虽小,但包含了一些简单却又重要的功能,包括加减乘除,次方,括号等一些基本功能,它方便了大众的日常生活中遇到的计算问题;完成这个任务,说实话很艰难,但挺了过来,坚持了过来,所谓凡事贵在坚持,所以要学会坚持,坚持就是胜利;一个人的力量是有限的,学会与人合作,积极请教他人谦虚学习是必要的,它只会让你更加的进步,会更好;所以这个任务让我学到了很多,坚持,努力,合作,进取,积极向上,天下无难事,只要肯用心。
c课程设计计算器报告
c 课程设计计算器报告一、教学目标本课程的教学目标是使学生掌握C语言的基本语法,熟练使用C语言进行程序设计。
具体分为三个部分:1.知识目标:学生需要掌握C语言的基本语法,包括数据类型、运算符、控制结构、函数等。
2.技能目标:学生能够使用C语言编写简单的程序,解决实际问题。
3.情感态度价值观目标:培养学生对计算机科学的兴趣,提高学生解决问题的能力。
二、教学内容教学内容主要包括C语言的基本语法和程序设计的基本方法。
具体安排如下:1.第一章:C语言概述,介绍C语言的历史和发展,理解C语言的特点。
2.第二章:数据类型和运算符,学习C语言的基本数据类型和运算符。
3.第三章:控制结构,学习C语言的条件语句和循环语句。
4.第四章:函数,学习C语言的函数定义和调用。
5.第五章:数组和字符串,学习C语言的数组和字符串操作。
6.第六章:指针,学习C语言的指针概念和应用。
7.第七章:结构体和文件,学习C语言的结构体和文件操作。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法:1.讲授法:讲解C语言的基本语法和概念。
2.案例分析法:通过分析实际案例,让学生理解C语言的应用。
3.实验法:安排实验课程,让学生动手编写C语言程序。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《C程序设计语言》2.参考书:《C Primer Plus》、《C和指针》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、编程环境五、教学评估本课程的评估方式包括平时表现、作业、考试等。
具体安排如下:1.平时表现:占课程总评的30%,包括课堂参与度、提问回答、小组讨论等。
2.作业:占课程总评的30%,包括课后练习、编程任务等。
3.考试:占课程总评的40%,包括期中考试和期末考试。
评估方式要求客观、公正,能够全面反映学生的学习成果。
我们将根据学生的实际情况,及时给予反馈,帮助学生提高。
六、教学安排本课程的教学进度安排如下:1.每周一次课,每次课2小时。
c简单计算器课程设计报告
c 简单计算器 课程设计报告一、课程目标知识目标:1. 让学生掌握简单计算器的基本功能,包括加、减、乘、除等四则运算。
2. 使学生理解计算器操作规则,如先算乘除后算加减、括号的作用等。
3. 帮助学生掌握计算器上的其他功能键,如清除、取反、百分比等。
技能目标:1. 培养学生运用计算器进行四则运算的能力,提高计算速度和准确性。
2. 培养学生运用计算器解决实际问题的能力,如购物找零、计算面积等。
3. 培养学生通过观察、思考、提问等方式,发现计算器使用过程中的问题,并尝试解决。
情感态度价值观目标:1. 培养学生对待计算器等电子设备的正确态度,爱护设备,遵守使用规范。
2. 培养学生在合作学习中互相帮助、共同进步的精神,增强团队意识。
3. 通过计算器教学,激发学生对数学学科的兴趣,提高学生的自信心和自主学习能力。
本课程针对年级学生的特点,注重培养学生的学习兴趣和实践能力。
课程性质为实践操作类,强调学生在动手实践中掌握知识。
在教学过程中,教师需关注学生的学习需求,及时调整教学策略,确保学生能够达到课程目标。
课程目标分解为具体学习成果,以便于后续教学设计和评估。
在教学结束后,学生应能独立使用计算器完成四则运算,解决实际问题,并在学习过程中培养良好的情感态度和价值观。
二、教学内容1. 计算器基本结构认知:让学生了解计算器各部分名称及其功能,如数字键、运算符号键、等于键、清除键等。
2. 四则运算操作方法:教学加、减、乘、除四则运算的计算器操作方法,以及运算顺序和括号的使用。
- 加法和减法运算- 乘法和除法运算- 混合运算及括号应用3. 计算器其他功能键使用:介绍取反、百分比、开方等特殊功能键的操作方法。
4. 实践应用:设计实际应用场景,让学生运用计算器解决购物找零、计算面积、计算速度等问题。
- 购物找零问题- 长度、面积、体积计算- 速度、时间、路程计算教学内容参考教材相关章节,结合课程目标进行整合。
教学大纲安排如下:第一课时:计算器基本结构认知、四则运算操作方法(加法和减法运算)第二课时:四则运算操作方法(乘法和除法运算)第三课时:四则运算操作方法(混合运算及括号应用)第四课时:计算器其他功能键使用第五课时:实践应用(购物找零问题)第六课时:实践应用(长度、面积、体积计算)第七课时:实践应用(速度、时间、路程计算)教学内容注重科学性和系统性,确保学生能够循序渐进地掌握计算器的使用方法,并在实际应用中巩固所学知识。
简单计算器C语言课程设计报告书
C语言课程设计报告书题目:简单计算器院系:班级:1.2.3.4.5.2.1功能概述:该软件为用户提供一个在windows系统上运行的简单计算器,能进行简单的加、减、乘、除四则运算和一些常用特殊运算,包括余弦运算、正弦运算、正切运算、绝对值、平方根运算、以e为底的指数运算、以10为底的对数运算。
2.2【总体设计】2.2.1系统模块机构框图2.2.3系统流程图2.2.42.3实现各2.3.1算类型的数字代码,并进入相应的功能执行程序,显示相应界面。
(2)数学计算模块中,根据用户选择的运算类型和运算符号,自动调用相应的函数,运行相关程序,进行计算,并显示结果。
(3)退出程序模块。
根据用户的需要,选择是否退出程序。
2.3.2系统头文件#include<stdio.h>/*I/Q函数*/#include<math.h>/*数学函数的定义*/#include<conio.h>/*屏幕操作函数*/#include<stdlib.h>/*库函数*/2.3.3函数声明(1)主函数main()处理:{printf("简单计算器\n");printf("******************************\n");printf("请输入要进行的运算\n");printf("------------------------------\n");printf("1四则运算\n");printf("2特殊运算\n");printf("3退出程序\n");h=getche();switch(h)/*判断用户想要进行的操作*/{}(2)自定义函数size()功能:进行简单的加、减、乘、除四则运算输入:用户输入要计算的数字和运算符号(+、-、*、/)处理:根据用户输入的运算符号,跳转到相关运算函数,并调用输出:运算结果和是否需要继续运算(y/n)程序清单(b)intsize()/*定义四则(size)运算函数*/{intn,m;intc;{c=m+n;printf("\n\n\t结果是%d\n",c);printf("\n");break;case'-':/*减法运算*/c=m-n;printf("\n\n\t结果是%d\n",c);printf("\n");break;case'*':/*乘法运算*/l=getche();/*得到输入的值*/printf("\n");if(l=='y')/*如果得到的是y,则重复运算步骤,达到无限运算的作用*/ {printf("\n请输入下一个要计算的数并按Enter结束:");scanf("%d",&n);printf("\n请选择运算符号[\t+\t-\t*\t/\t]:");l=getche();switch(l){printf("\n");break;case'/':/*除法运算*/c=c/n;printf("\n\n\t结果是%d\n",c);printf("\n");break;}}else}}(33输出:运算结果和是否需要继续运算(y/n)程序清单(c)doubleteshu()/*定义(teshu)特殊运算函数*/{doubley;intn,m;charp;printf("---------请选择特殊运算类型---------");printf("1余弦2正弦3正切4绝对值\n");printf("5平方根6以e为底的指数7以10为底的对数\n");docase'2':y=sin(m);/*正弦函数*/printf("\n\n\t结果是:%f\n",y);printf("\n");break;case'3':y=tan(m);/*正切函数*/printf("\n\n\t结果是:%f\n",y);printf("\n");break;printf("\n");break;case'7':y=log10(m);/*底数为10的对数函数*/ printf("\n\n\t结果是:%f\n",y);printf("\n");break;}printf("\n是否继续?y/n");p=getche();}2.4系统主界面其他功能截图等……2.5【设计总结】本报告对简单计算器系统的分析、设计、实现的完整过程进行了介绍。
计算器c语言报告
题目一:计算器1.实验目的和意义:利用c语言编写简易计算器,使我们更加熟练的掌握c语言及软件开发的基本步骤。
该课题设计对学生来说 是对这一学期有关c语言学习的一个评估 是将c语言应用于生活中 提高学生的动手能力。
该课题有利于让学生将课本上学习的零散的知识融会贯通、综合运用、强化知识体2.实验内容:了解用户需求,小组讨论算法,编写程序,调试程序,漏洞修复及报告设计3.小组成员分工:小组讨论算法:全体成员编写程序:樊义,高杰林调试程序:曹仲生漏洞修复及报告设计:陈伟杰4.设计要点:字符串内提取数字,加减乘除优先级,能够识别简单的错误算式5.源程序://不包含括号,纠错能力不够,#include "stdio.h"double z(char c[100],int *i){int w=0,d=0;double s=0;while(c[*i]>='0'&&c[*i]<='9') {w++;*i=*i+1;}if(c[*i]=='.'){*i=*i+1;while(c[*i]>='0'&&c[*i]<='9'){w++;d++;*i=*i+1;}}while(w>0){int t=1;for(int tem=w;tem>1;tem--)t=t*10;if(w>d&&d>0)s=s+t*(c[*i-w-1]-'0');elses=s+t*(c[*i-w]-'0');w--;}//printf("整数型num=%3.5f\t",s);if(d>0)for(int temp=0;temp<d;temp++){s=s/10.0;printf("小数型num=%3.5f\t",s);} //printf("函数内%d\t",*i);//printf("小数型num=%3.5f\t",s);return s;}void main(){start:char c[100],a[100];double s[100],num;int i=0,j=0,k=0;printf("输入需要运算的式子(仅加减乘除,且不包含括号,负数,不需输入等号):");reput: scanf("%s",c);i=0,j=0,k=0;int *p=&i;done: switch(c[i]){case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':{num=z(c,p);goto done;}case '*':{i++;num=num*z(c,p);goto done;}case '/':{i++;num=num/z(c,p);goto done;}case'+':{s[j]=num;a[k]=c[i];j++;i++,k++;if(c[i]>='0'&&c[i]<='9')goto done;else {printf("输入错误!请重输:");num=0;goto reput;}} case'-':{s[j]=num;a[k]=c[i];j++;i++,k++;if(c[i]>='0'&&c[i]<='9')goto done;else {printf("输入错误!请重输:");num=0;goto reput;}} case '\0':if(i!=0){s[j]=num;a[k]=c[i];break;}else printf("输入错误!请重输:");num=0;goto reput;default:printf("输入错误!请重输:");num=0;goto reput;}//for(int n=0;n<j;n++)// printf("%f%c",s[n],a[n]);//printf("%f\n",s[j]);if(a[k]=='\0'){j=0;k=0;num=s[0];//printf("已执行!");add: switch(a[k]){case '+':{num=num+s[++j];k++;goto add;}case '-':{num=num-s[++j];k++;goto add;}default:break;}}printf("式子的结果为:%f\n",num);printf("是否继续计算<y/n>.......");char tmp;scanf("%s",&tmp);if(tmp=='y')goto start;}6.小结:。
C语言毕业课程设计报告-计算器
C语言课程设计报告——计算器题目:设计一个计算器的程序,功能上尽量模仿windows内的计算器目录一、需求分析 (1)二、设计思路 (1)三、详细设计 (2)1、主要函数 (2)2、函数的主要调用关系图 (3)四、调试分析及编程心得体会 (3)五、用户手册 (3)六、测试结果 (3)七、源程序代码 (4)1、 cal.c 主控文件 (4)2、mouse.h 鼠标程序头文件 (5)一、需求分析1、演示程序中,对数据进行四则运算。
2、由于人们长期在window下工作,程序最好要键盘和鼠标都可以用。
界面要适应人们的习惯。
3、程序执行的命令包括:1)、乘法;2)、除法3)、加法4)、减法5)、自然对数6)、结束。
4、测试数据:(以加法为例)(1)、‘0’+‘0’应输出“0”。
(2)、‘80’-‘30’应输出“50.”。
(3)、’2’* ‘35’应输出“0”.(4)、’2’/ ‘1’应输出“2.”.(5)’1’‘exp’;应输出“2.”。
二、设计思路我们首先要考虑的是如何记录用户的输入信号,识别信号,按照信号的处理要求的不同进行不同的操作,因此我们可以考虑用两个字符串不停地来记录数据,但检测到用户按等号的时候,再转换成数字来处理,结合到鼠标的应用,从鼠标左键的输入信号和键盘有着同样的。
再用显示界面函数来显示计算器的外观。
本程序包含两个模块:1)主程序模块:void main() //cal.c{各种宏定义;欢迎界面;图像的初始化;do{接受键盘和鼠标输入的命令;处理命令;}while(“命令”=“结束”)}2)鼠标调用的界面模块//mouse.h各模块之间的调用关系如下:三、详细设计1、主要函数(1)、主控模块main.cvoid initialmouse(void); /*初始化鼠标函数*/double char_to_float(char *p); /*字符转换成浮点数*/void welcome(); /*欢迎界面*/(2)、鼠标头文件mouse.cvoid mouse(); //接受鼠标的按键信息int rmouse(void) //初始化鼠标图像图标,并且返回是否成功的信息showmouse() //利用不断复制和粘贴图像的方法来动态显示鼠标光标hidemouse() //关闭光标getmousecoods() //得到鼠标当前的信息void movemouse(int x,int y); //确定鼠标的位置Area(int x0,int y0,int x1,int y1) //设置鼠标移动的位置范围guangbiao(int x,int y) //画出光标2、函数的主要调用关系图四、调试分析及编程心得体会1、刚开始的时候不习惯于结构话编程,没有严格按单元模块结构编写不善于构建子函数来简化和理清楚编程思路,可读性几乎为零!!2、刚开始时在鼠标功能的区域选择的宏定义中花了较大功夫,程序容错性较差。
计算器C程序设计报告
计算器C程序设计报告一. 设计要求运用C语言所具有的函数,模仿画出计算器的界面,并实现计算器的基本功能:浮点数加、减、乘、除、乘方和求模运算。
(1)收集资料,全面分析课题,分析问题,形成总体编程思路。
(2)深入分析各个小问题,编写各部分程序模块并进行具体介绍。
(如初始化函数、主窗口函数、计算器函数等等。
)(3)上机调试,修改出现的错误,确保程序能正确运行。
二. 设计的作用、目的(1)通过课程设计全面掌握《C语言程序设计》关键知识点,掌握C语言中数组、指针、结构体、各种函数等方面的基本知识。
(2)通过课程设计了解并掌握C语言程序设计的方法,熟悉C程序设计的开发环境及C 程序的调试过程。
(3)培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研有关问题,学会自己分析、解决问题的方法。
(4)通过自己动手,培养、提高对编程的兴趣,为将来从事相关工作打好基础。
三.课题分析要实现计算器功能,先要输出计算器的样式,再是通过按键的方式实现数值的运算,故程序大致可分两部分实现,一部分是显示计算器,另一部分是实现计算功能。
Turbo C提供了PC系统环境下扩充的屏幕和图形支持系统,利用系统提供的字符屏幕处理函数和图形系统的有关信息以及函数的实现,这样就可以显示计算器了。
计算功能主要解决的是接收按键信息的处理和进行识别,如果按键是数字符号,要将其转变为操作数,如果是运算操作符,则进行相应的处理。
四.设计的具体实现1.系统组成模块结构及功能(1)Main主函数设置了程序的流程,首先初始化图形系统,然后调用计算器computer()函数进行计算,当从计算器程序返回时,关闭图形系统,程序结束。
(2)Initialize()初始化函数Turbo C通常的工作方式是字符文本模式,要显示图形,调用图形函数,则必须进入图形工作方式,应首先调用函数initgraph(&GraphDriver,&GraphMode,)初始化图形系统,并装入相应的图形驱动器。
c计算器实验报告
c计算器实验报告
《C计算器实验报告》
摘要:
本实验旨在通过使用C语言编写一个简单的计算器程序,以加深对C语言基本语法和数据类型的理解。
实验结果表明,通过合理的程序设计和编码,可以实现一个功能完善的计算器程序,为进一步学习和应用C语言打下良好的基础。
1. 实验目的
通过设计和编写一个简单的计算器程序,加深对C语言基本语法和数据类型的理解,提高编程能力和解决问题的能力。
2. 实验内容
(1)了解计算器的基本功能和运算规则;
(2)设计计算器程序的功能模块;
(3)使用C语言编写计算器程序;
(4)测试和调试计算器程序;
(5)分析程序运行结果。
3. 实验步骤
(1)确定计算器程序的基本功能,包括加、减、乘、除等运算;
(2)设计程序的基本结构,包括输入模块、运算模块和输出模块;
(3)使用C语言编写程序代码,包括变量定义、输入输出语句和运算逻辑;(4)测试程序,输入不同的数据进行计算,观察程序的运行结果;
(5)根据测试结果,对程序进行调试和优化。
4. 实验结果
通过实验,成功设计和编写了一个简单的计算器程序。
程序能够正确地进行加、减、乘、除等运算,并能够处理输入错误的情况,保证程序的稳定性和健壮性。
5. 实验总结
通过本次实验,深入理解了C语言的基本语法和数据类型,掌握了程序设计和
编码的基本技能。
同时,也体会到了程序设计的重要性和编程过程中的挑战与
乐趣。
希望通过不断的实践和学习,能够进一步提高编程能力,为今后的学习
和工作打下坚实的基础。
简单计算器C语言课程设计报告书
C 语言课程设计报告
系:
级:
号:
名:
院 班 学 姓
、课程设计目的
、课程设计的基本过程
课程设计的基本过程包括 5 个步骤,即功能需求,总体
设计,详细设计,程序测试,结论。
每个步骤都有其特定的 任务。
2.1 【功能需求】
功能概述:该软件为用户提供一个在 windows 系统上
运 行的简单计算器,能进行简单的加、减、乘、除四则运算和
些常用特殊运算,包括余弦运算、正弦运算、正切运算、 绝对值、平方根运算、以 e 为底的指数运算、以 10 为底的 对数运算。
2.2 【总体设计】
1. 巩固和加深 C 语言课程的基本知识的理解和掌握
2. 掌握 C 语言编程和程序调试的基本技能
3. 利用 C 语言进行基本的软件设计
4. 掌握书写程序设计说明文档的能力
5. 提高运用 C 语言解决实际问题的能力。
c 计算器实验报告
c 计算器实验报告c 计算器实验报告一、引言计算器是一种广泛应用于各个领域的工具,它能够进行各种数学运算,简化了人们的计算工作。
在本次实验中,我们将使用C语言编写一个简单的计算器程序,通过实践来加深对C语言的理解,并且掌握计算器的基本原理和实现方法。
二、实验目的1. 掌握C语言的基本语法和编程技巧;2. 理解计算器的基本原理和实现方法;3. 实现基本的四则运算功能;4. 实现一些常用的数学函数。
三、实验步骤1. 设计计算器界面在这一步骤中,我们需要设计一个简洁明了的计算器界面,包括数字键、运算符键和等号键等。
我们可以使用C语言的图形库或者控制台窗口来实现界面的设计。
2. 实现基本的四则运算功能在这一步骤中,我们需要编写C语言代码,实现计算器的基本四则运算功能。
我们可以使用C语言提供的算术运算符来进行加减乘除的计算,并且通过用户输入来获取操作数和运算符。
3. 实现常用的数学函数在这一步骤中,我们可以使用C语言提供的数学库函数来实现一些常用的数学函数,比如求平方根、求幂等。
通过调用这些函数,我们可以使计算器具备更多的功能。
4. 进行测试和调试在这一步骤中,我们需要对编写的计算器程序进行测试和调试,确保其能够正常运行,并且能够正确地进行各种运算和计算。
四、实验结果经过测试和调试,我们的计算器程序能够正常运行,并且能够正确地进行各种运算和计算。
它具备基本的四则运算功能,并且支持一些常用的数学函数。
我们可以通过输入数字和运算符来进行计算,并且可以得到正确的结果。
五、实验总结通过这次实验,我们深入理解了C语言的基本语法和编程技巧,并且掌握了计算器的基本原理和实现方法。
我们通过编写代码实现了一个简单的计算器程序,并且通过测试和调试确保其能够正常运行。
这次实验不仅加深了我们对C语言的理解,还提高了我们的编程能力和问题解决能力。
六、实验感想通过这次实验,我对C语言的学习有了更深入的了解。
在编写计算器程序的过程中,我不仅学会了如何使用C语言的基本语法和编程技巧,还提高了自己的逻辑思维能力和问题解决能力。
vc计算器实验报告
VC计算器实验报告1. 引言计算器是我们日常生活中经常使用的工具之一。
它可以帮助我们进行简单的数学运算,如加减乘除,以及更复杂的科学计算。
然而,传统的计算器通常功能有限,无法满足我们日益增长的计算需求。
为了解决这个问题,我们设计并实现了一款名为VC计算器的应用程序。
本文将详细介绍VC计算器的设计思路、功能特点以及实现过程。
2. 设计思路VC计算器的设计思路基于“step by step thinking”的理念,即通过逐步思考和分解问题来实现复杂的功能。
我们希望用户能够通过简单的步骤,逐渐构建出复杂的计算式,并获得准确的计算结果。
3. 功能特点3.1 基本计算功能VC计算器支持基本的四则运算,包括加法、减法、乘法和除法。
用户可以通过逐步输入数字和运算符,构建出复杂的计算式,并得到准确的计算结果。
3.2 科学计算功能除了基本的四则运算,VC计算器还提供了一些常用的科学计算功能,如三角函数、对数函数、指数函数等。
用户可以通过简单的步骤,构建出复杂的科学计算式,并得到准确的计算结果。
3.3 变量和函数支持为了进一步增强计算器的功能,我们在VC计算器中添加了变量和函数的支持。
用户可以定义和使用变量,以及定义和调用函数。
这样,用户可以根据自己的需求,自定义复杂的计算式,并得到准确的计算结果。
4. 实现过程4.1 界面设计我们通过使用Markdown文本格式来展示VC计算器的界面设计。
下面是一个示例界面:==========================================VC计算器==========================================[1] 2 + 3 = 5[2] sin(45) = 0.707[3] x = 10[4] y = 5[5] x + y = 15[6] f(x) = 2x + 1[7] f(5) = 114.2 代码实现VC计算器的代码实现主要分为以下几个步骤:1.解析用户输入,获取操作符和操作数。
c语言程序设计课程计算器设计报告
课程设计实验报告题目 C/C++语言程序设计所在院系信息学院专业计算机科学与技术班级 12级计科班学生指导教师2014年9月24 日程序设计流程图:源代码:#include <stdio.h>#include<math.h> #include <stdlib.h>void fun1(){printf("\t\t\t*****************************\n");printf("\t\t\t$ 欢迎使用计算器 $\n");printf("\t\t\t$ $\n");printf("\t\t\t$ 1.加法 $\n");printf("\t\t\t$ 2.减法 $\n");printf("\t\t\t$ 3.乘法 $\n");printf("\t\t\t$ 4.除法 $\n");printf("\t\t\t$ 5.乘方 $\n");printf("\t\t\t$ 6.开方 $\n");printf("\t\t\t$ 7.八进制转换 $\n");printf("\t\t\t$ 8.十六进制转换 $\n");printf("\t\t\t$ 9.退出 $\n");printf("\t\t\t$ $\n");printf("\t\t\t*****************************\n");}void fun2(float x,float y,int c){float z;int n,i;switch(c){case 1: z=x+y;printf("结果:%g+%g=%g\n",x,y,z);break; case 2: z=x-y;printf("结果:%g-%g=%g\n",x,y,z);break; case 3: z=x*y;printf("结果:%g*%g=%g\n",x,y,z);break; case 4: if(y==0)printf("错误!");else{z=x/y;printf("结果:%g/%g=%g\n",x,y,z);}break; case 5: n=x;for(i=1;i<y;i++){x=x*n;}printf("结果:%g\n",x);break;default:printf("请重新输入!");}}void fun3(float x,int c){float z;switch(c){case 6:if(x<0)printf("错误!");else{z=sqrt(x);printf("结果:%g\n",z);}break;default:printf("请重新输入!");}}void convert(int m,int c){char s[128];switch(c){case 7:printf("结果:%o\n",m);break;case 8:printf("结果:%x\n",m);break;default:printf("请重新输入!");}}void main(){for(;;){float x,y,z;int c,m;char h;fun1();printf("请选择运算:\n");printf("1\n2\n3\n4\n5\n6\n7\n8\n9\n"); printf("请输入运算方式前面的数字:\n");scanf("%d",&c);if(c==1||c==2||c==3||c==4||c==5){printf("输入两个数:");scanf("%f%f",&x,&y);fun2(x,y,c);}if(c==6){printf("输入一个数:");scanf("%f",&x);if(x<0)printf("错误!");elsefun3(x,c);}if(c==7||c==8){printf("输入一个数:");scanf("%d",&m);convert(m,c);}if(c==9){printf("<<<<<<<<<谢谢使用!>>>>>>>>>\n");} if(c>='a' && c<='z')printf("没有这个选择!\n");if(c>='A' && c<='Z')printf("没有这个选择!\n");}}。
c计算器实验报告
c计算器实验报告C计算器实验报告引言:计算器是我们日常生活中常见的工具之一。
无论是在学习、工作还是生活中,我们都会频繁地使用计算器来进行各种数学运算。
而随着科技的不断发展,计算器也在不断地演化和改进。
本实验旨在通过对C计算器的研究和实验,深入了解计算器的原理和功能,并对其进行性能测试和评估。
一、背景介绍计算器是一种用于进行数学运算的设备或工具。
它可以进行基本的四则运算,如加减乘除,以及更复杂的科学运算,如三角函数、指数和对数等。
计算器的发展历史可以追溯到早期的机械计算器,如阿贝尔计算器和帕斯卡计算器。
而现代计算器则采用电子技术,通过电子元件和芯片来实现计算功能。
二、C计算器的原理和功能C计算器是一种基于C语言开发的计算器软件。
它通过编写程序来实现各种数学运算和功能。
C语言是一种通用的高级编程语言,具有强大的计算能力和灵活的语法结构。
C计算器利用C语言的特性,可以实现复杂的数学运算和逻辑判断。
C计算器具有以下主要功能:1.基本运算:C计算器可以进行加减乘除等基本的四则运算。
用户只需输入相应的表达式,C计算器会自动计算并给出结果。
2.科学运算:C计算器支持各种科学运算,如三角函数、指数和对数等。
用户可以通过特定的函数调用来实现这些功能。
3.变量和常量:C计算器可以定义和使用变量和常量。
用户可以将某个数值赋给一个变量,并在后续的计算中使用这个变量。
4.条件判断:C计算器支持条件判断语句,用户可以根据不同的条件执行不同的操作。
这使得C计算器具有一定的逻辑判断能力。
5.循环结构:C计算器可以实现循环结构,用户可以通过循环语句重复执行某个操作,从而简化计算过程。
三、C计算器的性能测试和评估为了评估C计算器的性能,我们进行了一系列的测试。
首先,我们测试了C计算器进行基本运算的速度。
通过输入大量的基本运算表达式,我们测量了C计算器的响应时间和计算速度。
结果显示,C计算器的运算速度非常快,几乎可以瞬间完成复杂的运算。
VC 课程设计___简单计算器的设计 2范文
VC++课程设计报告简单科学计算器设计姓名:简单科学计算器设计学号:学院:电气工程学院班级:日期:2009-12-27目录一、设计任务 (1)1、选题意义 (1)2、设计目标 (1)二、程序设计与实现 (1)1、程序结构 (1)2、设计步骤 (3)3、详细设计 (4)大连理工大学C/C++语言程序设计报告(1)、计算器界面 (4)(2)、主要代码 (4)(3)、函数功能说明 (16)三、设计难点与解决方法 (17)四、设计效果与不足之处 (18)1、程序效果图 (18)2、不足之处 (18)五、学习体会 (18)- 2 -一、设计任务1.选题意义此题选择意义在于引导学生学会设计简单的科学计算器,进一步掌握Visual C++应用程序。
统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C++,并在此环境下设计并实现一个简单计算器系统。
该计算器应能实现如下功能:1)、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方等简单计算2)、科学计算函数,包括正弦、余弦、正切、余切、开方、对数、指数等函数运算3)、具备历史计算的记忆功能。
2.设计目标使计算器含有以下功能:(1)、基本运算功能:可以进行加、减、乘、除等基本运算。
(2)、数制转换功能:可以一次完成二进制转十进制、十进制转二进制、八进制转二进制等运算。
(3)、三角函数运算功能:可以一次完成三角函数之间的计算,求正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)等函数的值。
(4)、对数、指数运算功能:可以一次求的对数函数(log、ln)、指数函数(exp)等函数的运算。
(5)、删除功能:可以在输入错误时删除已输入的数值。
简单科学计算器设计(6)、归零功能:可以在计算完成后清空编辑框中的已有数值。
二、程序设计与实现1.程序结构本计算器首先是通过在计算器的界面上按下相应的按钮,来进行基本的加,减,乘,除等基本运算,计算器还能够进行平方运算,求平方根运算,乘方运算,三角函数运算(包括正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)),对数函数(ln、log),指数函数(exp),幂函数(x~)和进制转换(包括二进制转十进制、十进制转二进制和八进制转二进制)等运算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++课程设计报告( 2009 -- 2010 年度第2学期)计算器的设计专业计算机科学与技术(软件开发)学生姓名班级学号指导教师王榕完成日期2010年6月21日目录1概述 (1)1.1 课程设计目的 (1)1.2 课程设计内容 (1)2系统需求分析 (1)2.1 系统目标 (1)2.2 主体功能 (1)2.3 开发环境 (1)3系统概要设计 (2)3.1 系统流程图 (2)3.2 系统功能划分 (2)4系统详细设计 (3)4.1 设计步骤 (3)4.2 界面设计 (5)5测试 (7)5.1 测试方案 (7)5.2 测试结果 (7)6小结 (8)参考文献 (10)附录 (11)附录1源程序清单 (11)计算器的设计1 概述1.1 课程设计目的1、巩固并加深学生对C++语言程序设计知识的理解;2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用VC++ 6.0集成开发环境;4、提高运用C++语言解决实际问题的能力;5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS系统;6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。
1.2 课程设计内容课题名称:计算器的实现说明:实现一个计算器。
要求:1)用“计算器”的标准视图执行简单的计算。
2)用其科学型视图执行高级的科学计算。
2 系统需求分析2.1 系统目标我们在学习生活中,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。
要计算功能有以下几个方面:加法,减法,乘法,除法,求幂,求模,求平方根,求Sin,求Cos。
2.2 主体功能1、十进制数的加、减、乘、除、乘方、取模等简单计算。
2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算。
3、以角度、弧度两种方式实现上述部分函数。
2.3 开发环境W indows操作系统,VC++ 6.0, OFFICE WORD3 系统概要设计3.1 系统流程图图3-1 系统流程图3.2 系统功能划分表3-1 系统功能表1) 假设执行操作“+”,先输入一个数,再输入“+”,再输入另一个数,最序号 文件名 主要功能 备注 1 + 加法求和 两个操作数 2 - 减法求差 两个操作数 3 * 乘法求积 两个操作数 4 / 除法求商 两个操作数 5 % 求模 两个操作数 6 ^ 求x 的y 次幂 两个操作数 7 S 求平方根 一个操作数 8 Sin 求正弦 一个操作数 9 Cos 求余弦 一个操作数 10 ln 求对数 一个操作数 11 n! 求阶乘 一个操作数12 = 等于 13C寄存器清零开始输入第一个操作数加法 减法 乘法 除法 求幂 求模开平方 求正弦 求余弦 求对数输入第二个操作数显示结果寄存器清零结束后输入“+”。
整个功能“+”就执行完毕。
2)执行操作“Sin”,先输入一个数,在输入“Sin”,整个功能“Sin”就执行完毕。
3)执行操作“n!”,先输入一个数,再输入“n!’,整个功能“n!”执行完毕。
4系统详细设计4.1 设计步骤打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名yeyahui及其所在位置,点击确定,如图4-1所示。
图4-1 新建MFC AppWizard[exe]工程将弹出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的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。
在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图4-4所示,在该对话框中输入ID属性。
图4-4 Edit属性对话框2)在图4-2中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。
在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图4-5所示,在该对话框中输入控件的ID值和标题属性。
图4-5 Push Button属性按照上面的操作过程编辑其他按钮和编辑框等对象的属性。
表4-1 各按钮和编辑框等对象的属性对象ID 标题或说明编辑框IDC_xianshi 结果显示按钮IDC_BUTTON0 0按钮IDC_BUTTON1 1按钮IDC_BUTTON2 2按钮IDC_BUTTON3 3按钮IDC_BUTTON4 4按钮IDC_BUTTON5 5按钮IDC_BUTTON6 6按钮IDC_BUTTON7 7按钮IDC_BUTTON8 8按钮IDC_BUTTON9 9按钮IDC_change +/-按钮IDC_point .按钮IDC_add +按钮IDC_difference -按钮IDC_multiply *按钮IDC_devide /按钮IDC_sqrt sqrt按钮IDC_daoshu 1/x按钮IDC_jiecheng n!按钮IDC_ln ln按钮IDC_sin sin按钮IDC_cos cos按钮IDC_pow x^y按钮IDC_Onequal =完成后界面如图4-6所示。
图4-6 设计界面加入标准型和科学型按键:图4-7 加入标准型和科学型按键界面标准型:图4-8标准型界面科学型:图4-9科学型界面5 测试5.1 测试方案先用标准型进行简单的四则运算:+ - * /,测试完成后。
再用科学型进行稍复杂的运算: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 小结通过两个星期的折腾,总算把课程设计给完成了,这是一个坚苦而又漫长的过程。
看着劳动成果,很欣慰!刚开始,可以说是没有头绪,于是就去图书馆找资料,找到了一些关于程序方面的,可是这点小进展远远不够,这只是一个小小的开始。
下一步是上网查,找到了些与我题目相似的,那时我很高兴,可是那还不是我要的,于是又上网查到了些有关的函数等等,终于在我的努力下,完成了这个程序。
虽然对着电脑做程序,有点累有点热,可是当看到劳动成果时,真是别有一番滋味在心头啊!世上无难事,只怕有心人,的确如此。
做完这个课程设计,我的自信一下子提高了,我也会写程序了;尽管对于有些人这种程序会很简单,可对我说,已经很不容易了。
这次体验为以后的学习计算机的我增强了信心。
享受劳动成果的滋味实在很美妙啊!参考文献[1]谭浩强. C程序设计(第三版)(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#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DA TA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DA TA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)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_DA TA_INIT(CAboutDlg)//}}AFX_DA TA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DA TA_MAP(CAboutDlg)//}}AFX_DA TA_MAP}BEGIN_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_DA TA_INIT(CCalculatorDlg)m_result = _T("");m_isDegree = -1;m_sentific = -1;//}}AFX_DA TA_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=0.1;m_bCoff=0;m_errorState = ErrNone;m_bOperandA vail=FALSE;m_operator=OpNone;}void CCalculatorDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DA TA_MAP(CCalculatorDlg)DDX_Text(pDX, IDC_DISPLAY, m_result);DDX_Radio(pDX, IDC_DEGREE, m_isDegree);DDX_Radio(pDX, IDC_SENTIFIC, m_sentific);//}}AFX_DA TA_MAP}BEGIN_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_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_FACTORIAL, 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(IDC_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_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARA TOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework 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->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 control}void CCalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::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 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(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{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::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_bOperandA vail)m_operand = 0;if(!m_bCoff)m_operand=m_operand*10+(nID-IDC_0);else{m_operand=m_operand+(nID-IDC_0)*m_coff;m_coff*=0.1;}m_bOperandA vail=TRUE;UpdateDisplay();}void CCalculatorDlg::Calculate(){if (m_errorState != ErrNone)return;if (m_bOperandA vail){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 == 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_bOperandA vail = FALSE;m_bCoff=0;m_coff=0.1;UpdateDisplay();}void CCalculatorDlg::UpdateDisplay(){if (GetSafeHwnd() == NULL)return;if (m_errorState != ErrNone)m_result="除数不能为零";else{float lV al = (m_bOperandA vail) ? m_operand : m_accum;m_result.Format(_T("%f"), lV al);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 szButton){switch (szButton[0]){case 'c':case 'C':OnClear();break;case '/':OnDivid();break;case '+':OnAdd();break;case '-':OnMinus();break;case '*':OnMultiply();break;case '=':OnEqual();break;default:if (szButton[0] >= '0' && szButton[0] <= '9'){if (m_errorState != ErrNone)return FALSE;if (!m_bOperandA vail)m_operand = 0;m_operand=m_operand*10+szButton[0] - '0';m_bOperandA vail=TRUE;UpdateDisplay();}elsereturn FALSE;break;}return TRUE;}void CCalculatorDlg::OnAdd(){// TODO: Add your control notification handler code here Calculate();m_operator = OpAdd;}void CCalculatorDlg::OnMinus(){// TODO: Add your control notification handler code here Calculate();m_operator = OpSubtract;}void CCalculatorDlg::OnDivid(){// TODO: Add your control notification handler code here Calculate();m_operator = OpDivide;}void CCalculatorDlg::OnMultiply(){// TODO: Add your control notification handler code here Calculate();m_operator = OpMultiply;}void CCalculatorDlg::OnEqual(){// TODO: Add your control notification handler code here Calculate();m_operator = OpNone;}void CCalculatorDlg::OnSign()// TODO: Add your control notification handler code herem_operand*=-1;UpdateDisplay();}void CCalculatorDlg::OnSqrt(){// TODO: Add your control notification handler code herem_func=FuncSqrt;Run_Func();}void CCalculatorDlg::OnReciprocal(){// TODO: Add your control notification handler code herem_func=FuncRec;Run_Func();}void CCalculatorDlg::OnPoint(){// TODO: Add your 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_bOperandA vail = FALSE;m_errorState = ErrNone;m_coff=0.1;UpdateDisplay();}BOOL CCalculatorDlg::PreTranslateMessage(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 control notification handler code herem_func=FuncLn;Run_Func();}void CCalculatorDlg::OnFactorial(){// TODO: Add your control notification handler code herem_func=FuncN;Run_Func();void CCalculatorDlg::OnExp(){// TODO: Add your control notification handler code here m_func=FuncExp;Run_Func();}void CCalculatorDlg::OnSentific(){// TODO: Add your control notification handler code here m_bIsExpand=1;m_sentific=0;ExpandToSentific();}void CCalculatorDlg::OnSin(){// TODO: Add your control notification handler code here m_func=FuncSin;Run_Func();}void CCalculatorDlg::OnSquar(){// TODO: Add your control notification handler code here m_func=FuncSqre;Run_Func();}void CCalculatorDlg::OnTan(){// TODO: Add your control notification handler code here m_func=FuncTan;Run_Func();}void CCalculatorDlg::OnStandard(){// TODO: Add your control notification handler code here m_bIsExpand=0;m_sentific=1;ExpandToSentific();}void CCalculatorDlg::Run_Func(){if (m_errorState != ErrNone)return;if (m_bOperandA vail){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_operand);if(m_func==FuncSqrt)m_operand=sqrt(m_operand);if(m_func==FuncSqre)m_operand=pow(10,m_operand);if(m_func==FuncSin)m_operand=sin(m_operand*DtoR);if(m_func==FuncCos)m_operand=cos(m_operand*DtoR);if(m_func==FuncTan)m_operand=tan(m_operand*DtoR);if(m_func==FuncRec)m_operand=1/m_operand;if(m_func=FuncN){int i;for(i=m_operand-1;i>=1;i--)m_operand*=i;}}UpdateDisplay();// m_func=FuncNone;}void CCalculatorDlg::OnDegree(){// TODO: Add your control notification handler code herem_isDegree=0;DtoR=(2*PI)/360;UpdateData(FALSE);}void CCalculatorDlg::OnRad(){// TODO: Add your control notification handler code herem_isDegree=1;DtoR=1;UpdateData(TRUE);}void CCalculatorDlg::OnCos(){// TODO: Add your control notification handler code herem_func=FuncCos;Run_Func();}void CCalculatorDlg::ExpandToSentific(){if(m_bIsExpand){SetWindowPos(NULL,0,0,rcSentific.Width(),rcSentific.Height(), SWP_NOMOVE|SWP_NOZORDER);SetVisibleCtrl();}else{SetWindowPos(NULL,0,0,rcStandard.Width(),rcSentific.Height(), SWP_NOMOVE|SWP_NOZORDER);SetVisibleCtrl();}UpdateData(FALSE);}void CCalculatorDlg::SetVisibleCtrl(){CWnd* pCtrl=GetWindow(GW_CHILD);CRect rcTest;CRect rcControl;19CRect rcShow;GetWindowRect(rcShow);while(pCtrl!=NULL){pCtrl->GetWindowRect(rcControl);if(rcTest.IntersectRect(rcShow,rcControl))pCtrl->EnableWindow(TRUE);elsepCtrl->EnableWindow(FALSE);pCtrl=pCtrl->GetWindow(GW_HWNDNEXT);}}20。