V 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总结与体会计算器虽然是我们生活中常见的一样工具,但不知道实现这样一个工具,说实话不是很简单,对于我这个学习一般的人来说,很难计算器虽小,但包含了一些简单却又重要的功能,包括加减乘除,次方,括号等一些基本功能,它方便了大众的日常生活中遇到的计算问题;完成这个任务,说实话很艰难,但挺了过来,坚持了过来,所谓凡事贵在坚持,所以要学会坚持,坚持就是胜利;一个人的力量是有限的,学会与人合作,积极请教他人谦虚学习是必要的,它只会让你更加的进步,会更好;所以这个任务让我学到了很多,坚持,努力,合作,进取,积极向上,天下无难事,只要肯用心。
一个简单的计算器VC课程设计
《可视化程序设计》课程设计报告模拟计算器姓名:班级:学号:指导教师:成绩:完成时间:2009年12月30日完成地点:软件实验室(9)一、设计题目(问题)描述和要求题目:模仿windows计算器描述:使用Microsoft Visual Studio .NET 2005完成一个功能与windows 自带的计算器功能相似的小程序。
要求完成以下功能:①能够完成加、减、乘、除、开平方、取倒数、百分数运算;②能够使用“BackSpace”、“C”、“.”、“+/-”、“CE”的功能。
二、系统分析与概要设计根据题目描述和要求,系统要求能够制作出来一个与Windows自带计算器功能相似的小软件。
我们需要使用基于对话框的MFC应用程序来完成此任务,所建项目名为:计算器。
本项目中不需要添加心得类,只需要使用系统自动生成的CAboutDlg,C计算器App,C计算器Dlg三个类即可。
其中主要实现该项目功能的类为:C计算器Dlg类。
概要设计:(1)我们先要对对话框的可视部分进行编辑,向上面添加一个“EditControl”控件和23个“Button”控件。
其中“EditControl”控件用来显示数据及运算结果,“Button”控件用来实现各种操作功能。
(2)我们需要为“EditControl”控件添加一个变量“n”,用来接收及显示数据;为23个“Button”控件分别添加“事件处理程序”,来实现具体功能。
(3)在声明模块(计算器Dlg.h) 中我们需要声明七个变量:n,n_2,setxiaoshu,xiaoshui,setnew,operate,innum。
26个成员函数:1-23是控件功能函数“afx_msg voidOnBnClickedButton1()”…,其余三个函数是另行添加的功能函数:void setempty(void)(置空中间变量),void inum(int i)(处理字符输入),void operation(char ope)(执行选定运算)。
c简单计算器课程设计
c 简单计算器课程设计一、课程目标知识目标:1. 让学生掌握简单计算器的基本操作,包括开机、关机、清除屏幕、输入数字和运算符号。
2. 使学生理解加、减、乘、除四则运算的基本概念,并能够在简单计算器上进行正确的运算操作。
3. 帮助学生识别计算器上各个按键的功能,了解其对应的数学意义。
技能目标:1. 培养学生运用简单计算器解决实际问题的能力,如购物找零、计算面积等。
2. 提高学生进行四则运算的速度和准确性,提高计算效率。
3. 引导学生掌握计算器使用技巧,如连续计算、顺序计算等。
情感态度价值观目标:1. 培养学生对计算器的正确态度,认识到计算器是学习数学的工具,而非替代品。
2. 激发学生学习数学的兴趣,让学生在轻松愉快的氛围中体验数学计算的乐趣。
3. 培养学生的合作意识,使学生在小组讨论和互助学习中提高沟通能力,培养团队精神。
本课程针对小学三年级学生设计,结合学生年龄特点,注重激发兴趣和培养动手操作能力。
课程内容紧密联系教材,将目标分解为具体的学习成果,便于后续教学设计和评估。
通过本课程的学习,学生将能够熟练运用简单计算器,提高数学计算能力,培养良好的学习习惯和团队协作能力。
二、教学内容1. 计算器的基本结构:引导学生认识计算器的外观、各部分名称及其功能。
- 教材章节:第三章第1节《认识计算器》- 内容列举:计算器按键布局、显示屏、开机与关机、清除键等。
2. 四则运算操作:讲解加、减、乘、除四则运算在计算器上的操作方法。
- 教材章节:第三章第2节《计算器的四则运算》- 内容列举:按键输入、运算顺序、连续运算、计算结果读取等。
3. 计算器使用技巧:教授计算器的高级使用技巧,提高计算效率。
- 教材章节:第三章第3节《计算器使用技巧》- 内容列举:百分比计算、乘方运算、记忆功能等。
4. 实践应用:结合实际生活场景,让学生运用计算器解决实际问题。
- 教材章节:第三章第4节《计算器在实际生活中的应用》- 内容列举:购物找零、计算面积、体积、速度等。
C课程设计(计算器)[转载]
04
C语言函数
函数的定义和声明
函数定义:函数是完成特定任务的独立代码块,可以重复使用 函数声明:在函数定义之前,需要先声明函数,以便编译器知道函数的存在 函数参数:函数可以接受参数,参数可以是变量、常量或其他表达式 函数返回值:函数可以返回一个值,返回值可以是任何类型的数据
2010年代,全球科学家共 同研发了第一台量子计算
机
计算器的应用场景
家庭日常计算:如购物、做饭等 学校教育:如数学、物理等学科的教学和练习 商业计算:如财务、会计等业务的计算和统计 科研计算:如科学研究、工程计算等数据的处理和分析
02
C语言基础
C语言概述
C语言是一种高级 编程语言,广泛应 用于系统编程、嵌 入式系统、驱动程 序等领域。
01
计算器概述
计算器的基本功能
加减乘除运算 平方、开方、求余等高级运算 存储和读取数据
计算器模式切换(如科学计算器、工 程计算器等)
单位转换(如长度、重量、温度等)
计算器设置(如时间、日期、闹钟等)
计算器的发展历程
1820年,英国数学家查尔 斯·巴比奇发明了第一台差
分机
1960年代,日本科学家发 明了第一台便携式电子计
执行流程:函 数被调用后, 会按照函数体 中的代码顺序
执行
返回值:函数 执行完成后,
可以通过 return语句返
回一个值
结束调用:函 数执行完成后, 会返回到调用 函数的位置, 继续执行后面
的代码
05
计算器功能实现
输入输出处理
输入:键盘输入,支持数字、运算符号等 输出:显示屏显示计算结果 处理:计算器内部进行计算,包括加减乘除等基本运算 错误处理:输入错误时,给出提示信息,如“输入错误,请重新输入”
c语言课程设计报告++计算器的实现(内含完整报告-流程图-截屏-总结等)
目录1 前言 (2)2 需求分析 (2)2.1要求 (2)2.2任务 (2)2.3运行环境 (2)2.4开发工具 (2)3 概要设计 (2)3.1系统流程图 (3)3.2查询函数流程图 (4)4 详细设计 (6)4.1分析和设计 (6)4.2具体代码实现 (6)4.3程序运行结果 (14)5 课程设计总结 (14)参考文献 (15)致谢 (15)1 前言编写一个程序来实现算术计算器。
通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、*、等运算符号),然后将其信息存入文件中。
输入一个算术计算式,就在屏幕上显示结果。
2 需求分析2.1要求(1)用C语言实现程序设计;(2)利用结构体、共用体进行相关信息处理;(3)画出查询模块的流程图;(4)系统的各个功能模块要求用函数的形式实现;(5)界面友好(良好的人机互交),程序要有注释。
2.2任务(1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中;(2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果;(3)画出部分模块的流程图;(4)编写代码;(5)程序分析与调试。
2.3运行环境(1)WINDOWS2000/XP系统(2)TurboC2.0编译环境2.4开发工具C语言3 概要设计3.1系统流程图如图3.1所示。
w图3.1 系统流程图3.2查询函数流程图(1)边界画线函数流程图(2)图标按钮设置函数流程图4 详细设计4.1分析和设计(1)在程序的开头部分定义了结构体类型,用来存放按钮信息,使数据能够从键盘上输入。
用输入函数input()来输入按键放在button[]数组中。
再定义结构体栈:struct_stack() 用于数据的输入和存放。
(2)进而定义了表格窗口函数,窗口画线函数draw_win() 和边界线函数draw_border(),定义out_text_win()输出文本窗口,定义window_xy(32,3); 计算结果窗口。
vc计算器课程设计
描写童年趣事作文600字高二描写童年趣事作文600字高二6篇童年是七色的,是热忱的、可爱的、好玩的,布满笑声的。
共享一下你的童年趣事吧。
下面是我为大家收集的描写童年趣事作文600字高二例文,期望你宠爱。
描写童年趣事作文600字高二(篇1)一进教室,映入眼帘的就是讲台上的那几个易拉罐和几根“专业”的钓鱼竿。
我一下子就呆住了,心里不禁猜想起老师葫芦里卖的是什么药?“莫非是去钓鱼,不对,要易拉罐干什么?莫非里面装的是鱼食?不对,不对”“下面我们来玩一个叫‘钓旱鱼’的玩耍吧!”老师的一句话打断了我的猜想,也点破了我的困惑。
首先,江老师将我们分成四个大组,每个大组有六名“钓鱼者”。
老师为了让我们生疏玩耍规章,便让我们先进行练习。
在练习的过程中,我渐渐把握了要领,能在十五秒之内钓起一条“旱鱼”了。
在为自己的成绩窃喜时,我才发觉真是“人外有人,天外有天”啊!———有些同学格外娴熟,不出十秒就能钓起一条“旱鱼”,这使我不由得站在一旁观看起其他人的动作。
不一会儿,练习结束,老师让各组前来抽签。
令我欣喜的是:我们组竟幸运的抽到了第5号,这样我们就有机会进行训练了。
这时,老师让每组选出2名队员来参赛。
然而,在参赛问题上,大家竟不约而同的推选了我和刘宇欣,这是我颇感意外的。
竞赛最终开头了。
首先上场的是闵耀东和王涵,他们或许是由于第一个上场产生了恐惊心理,或许是由于不太娴熟,所以显得有些力不从心,连续2次都使“鱼儿”顺当脱钩,最终才钓起了2次。
我和队友们马上对他们报以了“鼓舞”的掌声。
最精彩的也是最使人感到意外的,是第四个上场的李亦桐和方菁如一组。
她们一开头上场的表现是顺风顺水,一连钓起了2个,但到中间的时候,不知是谁顺手将竿一抖,两根鱼竿就像热恋情人一般纠缠在一起了,害得同学们费了九牛二虎之力才将难分难舍的它们分开。
“哈!哈!哈!”的笑声始终萦绕在我的耳畔,它不仅使我的童年丰富多彩,更使它意义非凡。
描写童年趣事作文600字高二(篇2)每个人的童年生活都是丰富多彩的,布满了无穷的乐趣。
c课程设计简易计算器
c 课程设计简易计算器一、课程目标知识目标:1. 让学生掌握简易计算器的基本功能与操作,包括加、减、乘、除等四则运算。
2. 使学生理解计算器的工作原理,了解显示屏、键盘等组成部分及其作用。
3. 帮助学生掌握计算器的使用规范,如开关机、输入输出等基本操作。
技能目标:1. 培养学生运用计算器解决实际问题的能力,提高计算速度和准确性。
2. 培养学生通过观察、尝试、探索等方法,自主发现计算器操作技巧和功能特点。
3. 培养学生合作交流的能力,学会在小组讨论中分享观点,共同解决问题。
情感态度价值观目标:1. 激发学生对计算器的学习兴趣,培养良好的学习习惯和探究精神。
2. 培养学生尊重科学、严谨求实的态度,树立正确的价值观。
3. 培养学生团队协作意识,增强合作解决问题的能力。
本课程针对小学四年级学生,结合教材内容,以实用性为导向,注重培养学生的动手操作能力和实际问题解决能力。
课程目标明确,易于衡量,为后续教学设计和评估提供依据。
在教学过程中,教师应关注学生个体差异,因材施教,确保每位学生都能在课程中收获知识和技能。
二、教学内容本章节教学内容主要包括以下几部分:1. 计算器的基本结构:介绍计算器的显示屏、键盘、电池等组成部分及其功能。
2. 四则运算操作:详细讲解加、减、乘、除四则运算在计算器上的操作步骤。
3. 计算器操作规范:教授计算器的开关机、清屏、输入输出等基本操作规范。
4. 实际问题解决:结合教材实例,引导学生运用计算器解决生活中的实际问题。
5. 操作技巧与功能探索:指导学生探索计算器的其他功能,如百分比、乘方等,并分享操作技巧。
教学内容安排如下:第一课时:计算器的基本结构及操作规范介绍。
第二课时:四则运算操作教学,以教材为例题进行讲解和实操。
第三课时:实际问题解决,分组讨论并运用计算器解决生活中的数学问题。
第四课时:操作技巧与功能探索,学生自主探究计算器其他功能并分享。
教学内容与教材紧密关联,确保科学性和系统性。
VC++MFC计算器课程设计
Windows程序设计作业报告设计题目:MFC计算器系别:信息与自动化工程专业:电子与通信工程姓名:高小雨学号:2013704011一、设计目的及要求1.1设计目的能够熟练掌握MFC中的各个控件,消息的处理与添加,能够独立完成一些简单的算法,并且能够具体实现一些功能,真正可以利用功能比较强大的MFC 编译出较好的程序代码。
本设计完成的是一个具有比较齐全运算功能的计算器。
1.2设计要求利用Microsoft Visual C++的MFC制作一个多功能计算器,要求:(1)能够实现最基本的加、减、乘、除四则基本运算;(2)添加了计算类型,分别是弧度制、度数制;(3)界面有正负、清空、等于方便用户计算使用;(4)重点是此计算器具有倒数、多次方、开方、三角函数、反三角函数、指数、阶乘等高级运算。
1.3软件、硬件环境本程序采用Microsoft Visual C++6.0的英文版本进行编译。
VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C++规范,但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。
二、课程设计步骤2.1 Windows消息处理机制的理解首先编写程序需要对Windows程序的消息处理机制有个比较清晰的了解。
Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。
2.2界面的设计仿照Windows附件里面的计算器,在Dialog视图中画好界面,主要使用的菜单中的相关控件,并合理布置各个按钮的位置,使界面更加整洁。
在各个控件的属性里依次定义好名称,之后屏幕显示的就是如图一样的可视计算器界面:三、课程设计内容3.1 概要设计依次将各个功能按钮设置相关的ID和控件类,一下为各类按键的一个举例,以下为数字0的属性设置,及其ID和标题名称,其余数字键属性设置与其相似。
VC课程设计-简单计算器系统
一、设计任务与要求 (2)1.设计任务 (2)2.实验要求 (2)二、需求分析 (2)1.功能需求 (2)2.运行需求 (3)三、系统设计 (3)1.总体方案设计 (3)2.详细设计 (4)四、运行结果和测试 (8)1.运行界面及其效果图 (8)2.对在编程与调试中的问题·························································错误!未定义书签。
五、课程设计总结与体会 (9)1.软件设计方案评价 (9)一、设计任务与要求1.设计任务系统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C++,并在此环境下设计并实现一个简单计算器系统,该计算器应能实现如下功能:1)、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算2)、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算3)、以角度、弧度两种方式实现上述部分函数4)、具备历史计算的记忆功能5)、对不正确的表达式能指出其错误原因2.实现要求1)、能独立搭建可视化程序编程环境,掌握Visual C++6的安装、运行和使用。
2)、总体要求:用面向对象编程的思想与方法,实现一个简单计算器的分析与设计阶段的开发工作,开发工具使用Visual C++6。
c课程设计 计算器
#include "stdio.h" /* 标准输入输出库*/#include "string.h" /* 字符串操作函数库*/#include "math.h" /* 数学函数库*/#include "stdlib.h" /* 标准函数库*/#include "graphics.h" /* 图形函数库*/#include "bios.h" /* 基本输入输出系统函数库*/#include "dos.h" /* dos函数库*/#define NUM0 0x5230 /* 小键盘区上数字键0 */ #define NUM1 0x4f31 /* 小键盘区上数字键1 */ #define NUM2 0x5032 /* 小键盘区上数字键2 */ #define NUM3 0x5133 /* 小键盘区上数字键3 */ #define NUM4 0x4b34 /* 小键盘区上数字键4 */ #define NUM5 0x4c35 /* 小键盘区上数字键5 */ #define NUM6 0x4d36 /* 小键盘区上数字键6 */ #define NUM7 0x4737 /* 小键盘区上数字键7 */ #define NUM8 0x4838 /* 小键盘区上数字键8 */ #define NUM9 0x4939 /* 小键盘区上数字键9 */ #define NUMPNT 0x532e /* 小键盘区上. 键*/ #define NUMADD 0x4e2b /* 小键盘区上+ 键*/ #define NUMSUB 0x4a2d /* 小键盘区上- 键*/ #define NUMMUL 0x372a /* 小键盘区上* 键*/ #define NUMDIV 0x352f /* 小键盘区上/ 键*/ #define NUMEQU 0x1c0d /* 小键盘区上= 键*/#define KEY0 0xb30 /* 主键盘区上数字键0 */ #define KEY1 0x231 /* 主键盘区上数字键1 */ #define KEY2 0x332 /* 主键盘区上数字键2 */ #define KEY3 0x433 /* 主键盘区上数字键3 */ #define KEY4 0x534 /* 主键盘区上数字键4 */ #define KEY5 0x635 /* 主键盘区上数字键5 */ #define KEY6 0x736 /* 主键盘区上数字键6 */ #define KEY7 0x837 /* 主键盘区上数字键7 */ #define KEY8 0x938 /* 主键盘区上数字键8 */ #define KEY9 0xa39 /* 主键盘区上数字键9 */ #define KEYPNT 0x342e /* 主键盘区上. 键*/ #define KEYSUB 0xc2d /* 主键盘区上- 键*/ #define KEYMUL 0x92a /* 主键盘区上* 键*/ #define KEYEQU 0xd3d /* 主键盘区上= 键*/#define SQR 0x340 /* @ 键,求平方根*/#define KEYR 0x1372 /* r 键,取倒数*/#define PERCENT 0x625 /* % 键,求百分数*/#define DEL 0x5300 /* DEL 键*/#define ESC 0x11b /* ESC 键*/#define BACKSPACE 0xe08 /* 退格键*/#define F9 0x4300 /* F9 键,正负数变换*/#define CTRL_L 0x260c /* Ctrl 键+L键,清除记忆器中的数值*/#define CTRL_R 0x1312 /* Ctrl 键+R键,读取记忆器中的数值*/#define CTRL_M 0x320d /* Ctrl 键+M键,将当前数值写入记忆器中*/#define CTRL_P 0x1910 /* Ctrl 键+P键,将当前数值和记忆器中保存的数值相加*/ #define ALT_X 0x2d00 /* Alt 键+X键*/#define TRUE 1 /* 为十进制1表示为真true */#define FALSE 0 /* 为十进制0表示为假false *//*计算器界面结构体*/struct Block{ int left,top,width,height; /* 左上坐标,宽,高*/char caption[50]; /* 标题*/int fontcolor,fontsize,status; /* 字体颜色,字体大小,状态*/ };void Form(struct Block form); /* 构造和显示主窗口*/void TextBox(struct Block txtbox); /* 构造和显示文本输入框*/void Label(struct Block label); /* 构造和显示标签,若记忆功能开启,标签标记为:M*/void CommandButton(struct Block cmdbutton); /*显示cmdbutton[i]命令按钮*/void CommandButton_KeyboardDown(int i); /*定义按下编号为i的键所进行的操作,如按钮的状态的改变*/void CommandButton_KeyboardUp(int i); /*定义松开编号为i的按键所进行的操作,如按钮的状态*/void InitApp(); /*初始化程序*/void Showme(); /*显示计算器界面*/void Load(); /*初始化默认值*/void CommandButton_Click(int key); /*按键盘时所做的操作*/void DoubleRun(); /*四则运算:加减乘除*/void SingleRun(int operatoror); /*单运算*/void Resetbuf(); /*重置缓冲区*/void StoreSet(int key); /*定义记忆存储操作*/void Unload(); /*退出系统时的一些恢复操作*/struct Block frmmain,txtscreen,lblstore,cmdbutton[28]; /*定义主窗口,文本输入框,记忆标签,28[0-27]个按钮*/int clickflag; /*clickflag:按键标志,*/int top,pointflag,digitkeyhit; /*top:保存缓冲区中的当前位数,pointflag:小数点标记,digitkeyhit:数字键按键标记*/int operatoror,runflag,ctnflag; /*operatoror:操作符,runflag:运算标记,ctnflag:运算符标记*/ int errorflag; /*错误标记*/double num1,num2,store; /*num1:操作数1,num2:操作数2,store:记忆变量*/char strbuf[33]; /*字符缓冲区,用于保存一个操作数*/void main(){int key; /*保存此计算器上定义的按键编号*/InitApp();/*初始化程序,进入图形模式*/Showme(); /*显示计算器窗口*/Load(); /*初始化默认值*/while(1){if(bioskey(1)==0) continue; /*直到有键按下时,才返回非0值,否则返回0值*/key=bioskey(0); /*返回上条语句的按键值*/switch(key) /*捕获相应的键盘按键并匹配到计算器按键上*/{ case NUM0:case KEY0: key=10;break;case NUM1:case KEY1: key=1;break;case NUM2:case KEY2: key=2;break;case NUM3:case KEY3: key=3;break;case NUM4:case KEY4: key=4;break;case NUM5:case KEY5: key=5;break;case NUM6:case KEY6: key=6;break;case NUM7:case KEY7: key=7;break;case NUM8:case KEY8: key=8;break;case NUM9:case KEY9: key=9;break;case F9: key=11;break;case NUMPNT:case KEYPNT: key=12;break;case NUMADD: key=13;break;case NUMSUB:case KEYSUB: key=14;break;case NUMMUL:case KEYMUL: key=15;break;case NUMDIV: key=16;break;case SQR: key=17;break;case PERCENT: key=18;break;case KEYR: key=19;break;case NUMEQU:case KEYEQU: key=20;break;case CTRL_L: key=21;break;case CTRL_R: key=22;break;case CTRL_M: key=23;break;case CTRL_P: key=24;break;case BACKSPACE: key=25;break;case DEL: key=26;break;case ESC: key=27;break;case ALT_X: key=0; break;default: key=-1;break;}if(key<0) continue; /*若对应的按键返回负数,则返回到while(1)处执行*/CommandButton_KeyboardDown(key);/*为了在计算器上显示按键效果,在此函数中改变一些按钮的状态值*/CommandButton_Click(key); /*根据key的值,进行相关操作*/delay(300000); /*为了突出按键效果,此处延时300000毫秒*/CommandButton_KeyboardUp(key); /*在处理完此按键后,要恢复按钮的状态值*/}}void InitApp() /*初始化程序*/{int driver=DETECT,mode; /* 显示设备驱动为自动检测显示器模式*/initgraph(&driver,&mode,""); /* 初始化图形显示系统*/if(driver!=VGA&&driver!=EGA) /* 如果不能初始化*/{ printf("\n\nERROR!Can't initialize the graphics system!"); /* 显示错误信息"不能初始化图形系统" */closegraph(); /* 关闭图形接口*/exit(0); /* 直接退出系统*/}setbkcolor(9); /* 设置背景颜色为青色*//*主窗口的属性设置*/frmmain.left=200; frmmain.top=100; frmmain.width=230; frmmain.height=235; frmmain.fontcolor=BLACK; frmmain.fontsize=1; strcpy(frmmain.caption," << Calculator >>");frmmain.status=1;/*文本框的属性设置*/txtscreen.left=10;txtscreen.top=25;txtscreen.width=210;txtscreen.height=30;txtscreen.fontcolor=B LACK;txtscreen.fontsize=1;strcpy(txtscreen.caption,"0."); txtscreen.status=1;/*标签的属性设置*/lblstore.left=190; lblstore.top=62; lblstore.width=30; lblstore.height=25; lblstore.fontcolor=YELLOW; lblstore.fontsize=1;strcpy(lblstore.caption,""); lblstore.status=1;/*命令按钮的属性设置*/cmdbutton[1].left=50-35;cmdbutton[1].top=165;cmdbutton[1].width=30;cmdbutton[1].height=25; cmdbutton[1].fontcolor=BLUE;cmdbutton[1].fontsize=1;strcpy(cmdbutton[1].caption,"1");cmdbu tton[1].status=1;cmdbutton[2].left=85-35;cmdbutton[2].top=165;cmdbutton[2].width=30;cmdbutton[2].height=25; cmdbutton[2].fontcolor=BLUE;cmdbutton[2].fontsize=1;strcpy(cmdbutton[2].caption,"2");cmdbu tton[2].status=1;cmdbutton[3].left=120-35;cmdbutton[3].top=165;cmdbutton[3].width=30;cmdbutton[3].height=2 5;cmdbutton[3].fontcolor=BLUE;cmdbutton[3].fontsize=1;strcpy(cmdbutton[3].caption,"3");cmd button[3].status=1;cmdbutton[4].left=50-35;cmdbutton[4].top=130;cmdbutton[4].width=30;cmdbutton[4].height=25; cmdbutton[4].fontcolor=BLUE;cmdbutton[4].fontsize=1;strcpy(cmdbutton[4].caption,"4");cmdbu tton[4].status=1;cmdbutton[5].left=85-35;cmdbutton[5].top=130;cmdbutton[5].width=30;cmdbutton[5].height=25; cmdbutton[5].fontcolor=BLUE;cmdbutton[5].fontsize=1;strcpy(cmdbutton[5].caption,"5");cmdbu tton[5].status=1;cmdbutton[6].left=120-35;cmdbutton[6].top=130;cmdbutton[6].width=30;cmdbutton[6].height=2 5;cmdbutton[6].fontcolor=BLUE;cmdbutton[6].fontsize=1;strcpy(cmdbutton[6].caption,"6");cmd button[6].status=1;cmdbutton[7].left=50-35;cmdbutton[7].top=95;cmdbutton[7].width=30;cmdbutton[7].height=25;c mdbutton[7].fontcolor=BLUE;cmdbutton[7].fontsize=1;strcpy(cmdbutton[7].caption,"7");cmdbutt on[7].status=1;cmdbutton[8].left=85-35;cmdbutton[8].top=95;cmdbutton[8].width=30;cmdbutton[8].height=25;c mdbutton[8].fontcolor=BLUE;cmdbutton[8].fontsize=1;strcpy(cmdbutton[8].caption,"8");cmdbutt on[8].status=1;cmdbutton[9].left=120-35;cmdbutton[9].top=95;cmdbutton[9].width=30;cmdbutton[9].height=25; cmdbutton[9].fontcolor=BLUE;cmdbutton[9].fontsize=1;strcpy(cmdbutton[9].caption,"9");cmdbu tton[9].status=1;cmdbutton[10].left=50-35;cmdbutton[10].top=200;cmdbutton[10].width=30;cmdbutton[10].height =25;cmdbutton[10].fontcolor=BLUE;cmdbutton[10].fontsize=1;strcpy(cmdbutton[10].caption,"0" );cmdbutton[10].status=1;cmdbutton[11].left=85-35;cmdbutton[11].top=200;cmdbutton[11].width=30;cmdbutton[11].height =25;cmdbutton[11].fontcolor=BLUE;cmdbutton[11].fontsize=1;strcpy(cmdbutton[11].caption,"+/-");cmdbutton[11].status=1;cmdbutton[12].left=120-35;cmdbutton[12].top=200;cmdbutton[12].width=30;cmdbutton[12].heig ht=25;cmdbutton[12].fontcolor=BLUE;cmdbutton[12].fontsize=1;strcpy(cmdbutton[12].caption,". ");cmdbutton[12].status=1;cmdbutton[13].left=155-35;cmdbutton[13].top=95;cmdbutton[13].width=30;cmdbutton[13].height =25;cmdbutton[13].fontcolor=RED;cmdbutton[13].fontsize=1;strcpy(cmdbutton[13].caption,"+"); cmdbutton[13].status=1;cmdbutton[14].left=155-35;cmdbutton[14].top=130;cmdbutton[14].width=30;cmdbutton[14].heig ht=25;cmdbutton[14].fontcolor=RED;cmdbutton[14].fontsize=1;strcpy(cmdbutton[14].caption,"-" );cmdbutton[14].status=1;cmdbutton[15].left=155-35;cmdbutton[15].top=165;cmdbutton[15].width=30;cmdbutton[15].heig ht=25;cmdbutton[15].fontcolor=RED;cmdbutton[15].fontsize=1;strcpy(cmdbutton[15].caption,"*" );cmdbutton[15].status=1;cmdbutton[16].left=155-35;cmdbutton[16].top=200;cmdbutton[16].width=30;cmdbutton[16].heig ht=25;cmdbutton[16].fontcolor=RED;cmdbutton[16].fontsize=1;strcpy(cmdbutton[16].caption,"/" );cmdbutton[16].status=1;cmdbutton[17].left=190-35;cmdbutton[17].top=95;cmdbutton[17].width=30;cmdbutton[17].height =25;cmdbutton[17].fontcolor=BLUE;cmdbutton[17].fontsize=1;strcpy(cmdbutton[17].caption,"sq r");cmdbutton[17].status=1;cmdbutton[18].left=190-35;cmdbutton[18].top=130;cmdbutton[18].width=30;cmdbutton[18].heig ht=25;cmdbutton[18].fontcolor=BLUE;cmdbutton[18].fontsize=1;strcpy(cmdbutton[18].caption," %");cmdbutton[18].status=1;cmdbutton[19].left=190-35;cmdbutton[19].top=165;cmdbutton[19].width=30;cmdbutton[19].heig ht=25;cmdbutton[19].fontcolor=BLUE;cmdbutton[19].fontsize=1;strcpy(cmdbutton[19].caption," 1/x");cmdbutton[19].status=1;cmdbutton[20].left=190-35;cmdbutton[20].top=200;cmdbutton[20].width=30;cmdbutton[20].heig ht=25;cmdbutton[20].fontcolor=RED;cmdbutton[20].fontsize=1;strcpy(cmdbutton[20].caption,"= ");cmdbutton[20].status=1;cmdbutton[21].left=190;cmdbutton[21].top=95;cmdbutton[21].width=30;cmdbutton[21].height=2 5;cmdbutton[21].fontcolor=RED;cmdbutton[21].fontsize=1;strcpy(cmdbutton[21].caption,"MC"); cmdbutton[21].status=1;cmdbutton[22].left=190;cmdbutton[22].top=130;cmdbutton[22].width=30;cmdbutton[22].height= 25;cmdbutton[22].fontcolor=RED;cmdbutton[22].fontsize=1;strcpy(cmdbutton[22].caption,"MR") ;cmdbutton[22].status=1;cmdbutton[23].left=190;cmdbutton[23].top=165;cmdbutton[23].width=30;cmdbutton[23].height= 25;cmdbutton[23].fontcolor=RED;cmdbutton[23].fontsize=1;strcpy(cmdbutton[23].caption,"MS") ;cmdbutton[23].status=1;cmdbutton[24].left=190;cmdbutton[24].top=200;cmdbutton[24].width=30;cmdbutton[24].height= 25;cmdbutton[24].fontcolor=RED;cmdbutton[24].fontsize=1;strcpy(cmdbutton[24].caption,"M+") ;cmdbutton[24].status=1;cmdbutton[25].left=50-35;cmdbutton[25].top=60;cmdbutton[25].width=53;cmdbutton[25].height =25;cmdbutton[25].fontcolor=RED;cmdbutton[25].fontsize=1;strcpy(cmdbutton[25].caption,"<-") ;cmdbutton[25].status=1;cmdbutton[26].left=108-35;cmdbutton[26].top=60;cmdbutton[26].width=53;cmdbutton[26].height =25;cmdbutton[26].fontcolor=RED;cmdbutton[26].fontsize=1;strcpy(cmdbutton[26].caption,"Del ");cmdbutton[26].status=1;cmdbutton[27].left=166-35;cmdbutton[27].top=60;cmdbutton[27].width=53;cmdbutton[27].height =25;cmdbutton[27].fontcolor=RED;cmdbutton[27].fontsize=1;strcpy(cmdbutton[27].caption,"Esc ");cmdbutton[27].status=1;/* 设置计算器界面*/}void Showme() /*显示计算器界面*/{ int i;Form(frmmain); /*显示主窗口,frmmain为主窗口的结构变量名*/TextBox(txtscreen); /*显示文本框*/Label(lblstore); /*显示记忆器的状态标签*/for(i=1;i<28;i++) /*显示27个按钮在计算器主窗口中*/CommandButton(cmdbutton[i]);}void Load() /*初始化默认值*/{ num1=num2=0;Resetbuf();ctnflag=FALSE;operatoror=0;runflag=FALSE;errorflag=FALSE;store=0;clickflag=FALSE;strcpy(txtscreen.caption,"0.");TextBox(txtscreen);/*文本框中初始显示为0.的字符*/strcpy(lblstore.caption,"");Label(lblstore);}void Unload() /*退出系统*/{cleardevice(); /*清除图形屏幕*/closegraph(); /*关闭图形系统*/exit(0);}void Resetbuf(){ strbuf[0]=' ';strbuf[1]=0;top=1;digitkeyhit=FALSE;pointflag=FALSE;}void Form(struct Block form) /* 构造和显示主窗口*/{ int x1=form.left; /*窗口左上角的横坐标值*/int y1=form.top; /*窗口左上角的纵坐标值*/int x2=form.width+x1-1;/*窗口右下角的横坐标值*/int y2=form.height+y1-1; /*窗口右下角的纵坐标值*/setfillstyle(SOLID_FILL,LIGHTGRAY); /*设置填充模式和颜色*/bar(x1+1,y1+1,x2-1,y2-1); /*画一个淡灰色的填充窗口,作为主窗口,但此函数不画出边框*/setcolor(WHITE); /*设置当前画线颜色*/line(x1,y1,x2,y1);line(x1,y1,x1,y2); /*用白线画边框左边和上边的线,美化主窗口*/ setcolor(DARKGRAY); /*设置填充模式和颜色*/line(x2,y1,x2,y2);line(x1,y2,x2,y2); /*用深灰色画边框右边和下边的线,美化主窗口*/ setfillstyle(SOLID_FILL,RED);bar(x1+2,y1+2,x2-2,y1+15); /*设置标题栏颜色为红色*/settextjustify(LEFT_TEXT,CENTER_TEXT); /*设置文本的对齐方式为左中对齐*/settextstyle(DEFAULT_FONT,0,form.fontsize); /*设置文本显示字体为默认字体,大小为主窗体字体大小*/setcolor(form.fontcolor);outtextxy(x1+3,y1+10,form.caption); /*用主窗体的颜色显示标题在标题栏*/if(form.status&1) /*判断窗口是否可用,未使用ALT+X键,右上角的X按钮*/ { cmdbutton[0].left=form.width-15;cmdbutton[0].top=3;cmdbutton[0].width=12;cmdbutton[0].height=12;cmdbutton[0].status=1;cmdbutton[0].caption[0]=0;CommandButton(cmdbutton[0]);x1=cmdbutton[0].left+form.left;y1=cmdbutton[0].top+form.top;x2=cmdbutton[0].width+x1-1;y2=cmdbutton[0].height+y1-1;setfillstyle(SOLID_FILL,LIGHTGRAY);bar(x1+1,y1+1,x2-1,y2-1);setcolor(DARKGRAY);line(x1+2,y1+2,x2-2,y2-2);line(x2-2,y1+2,x1+2,y2-2);}}void TextBox(struct Block txtbox) /* 设置和显示输入框*/{ /*(x1,y1),(x2,y2)为主窗口中的相对坐标*/int x1=txtbox.left+frmmain.left;int y1=txtbox.top+frmmain.top;int x2=txtbox.width+x1-1;int y2=txtbox.height+y1-1;setfillstyle(SOLID_FILL,WHITE);bar(x1+1,y1+1,x2-1,y2-1);/*因bar()不画出边框,所以接下来画这个方本框的边框线*/setcolor(LIGHTGRAY);rectangle(x1+1,y1+1,x2-1,y2-1);setcolor(DARKGRAY);line(x1,y1,x2,y1);line(x1,y1,x1,y2);setcolor(WHITE);line(x2,y1,x2,y2);line(x1,y2,x2,y2);settextjustify(RIGHT_TEXT,CENTER_TEXT); /*为图形函数设置文本的对齐方式,第一参数为水平对齐方式,第二参数为垂直对齐方式*/settextstyle(DEFAULT_FONT,0,txtbox.fontsize); /*为图形输出设置当前的文本属性:字体,方向,大小*/setcolor(txtbox.fontcolor); /*设置方本框的字体颜色*/outtextxy(x2-10,(y1+y2)/2,txtbox.caption); /*在指定位置显示txtbox.caption的字符串值*/}void Label(struct Block label) /*设置和显示计算器记忆功能的使用状态,默认为空*/ { int x1=label.left+frmmain.left;int y1=label.top+frmmain.top;int x2=label.width+x1-1;int y2=label.height+y1-1;setfillstyle(SOLID_FILL,LIGHTGRAY);bar(x1+1,y1+1,x2-1,y2-1);setcolor(DARKGRAY);line(x1,y1,x2,y1);line(x1,y1,x1,y2);setcolor(WHITE);line(x2,y1,x2,y2);line(x1,y2,x2,y2);settextjustify(CENTER_TEXT,CENTER_TEXT);settextstyle(DEFAULT_FONT,0,label.fontsize);setcolor(label.fontcolor);outtextxy((x1+x2)/2,(y1+y2)/2,label.caption);}void CommandButton(struct Block cmdbutton) /*设置和显示单个按钮*/{ /*(x1,y1),(x2,y2)为主窗口中的相对坐标*/int x1=cmdbutton.left+frmmain.left;int y1=cmdbutton.top+frmmain.top;int x2=cmdbutton.width+x1-1;int y2=cmdbutton.height+y1-1;int c1,c2;/*按钮的初始状态为1,若有键按下后,其状态变为0,处理完按键操作后,又恢复为状态1*/if(cmdbutton.status) /*根据按钮的当前状态值来,分别用不同的颜色边框来重绘此按钮*/{ c1=WHITE; /*白色*/c2=DARKGRAY; /*深灰色*/}else /*若刚有键按下*/{ c1=DARKGRAY;c2=WHITE;}setcolor(c1);line(x1,y1,x2,y1);line(x1,y1,x1,y2);setcolor(c2);line(x2,y1,x2,y2);line(x1,y2,x2,y2);settextjustify(CENTER_TEXT,CENTER_TEXT);settextstyle(DEFAULT_FONT,0,cmdbutton.fontsize);outtextxy((x1+x2)/2,(y1+y2)/2,cmdbutton.caption);}void CommandButton_KeyboardDown(int i) /*按下某键时所做的操作*/{ clickflag=TRUE; /*键盘点击标志*/cmdbutton[i].status=0;CommandButton(cmdbutton[i]); /*用与初始时不同的边框颜色色,重绘此命令按钮*/}void CommandButton_KeyboardUp(int key) /*当按键处理完后,恢复按钮状态,重绘此命令按钮*/{ clickflag=FALSE;cmdbutton[key].status=1;CommandButton(cmdbutton[key]);}void CommandButton_Click(int key) /*处理相应按键操作*/{if(errorflag==TRUE) return;switch(key){ case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9: /*1-9*/if(top<15) /*单个操作数小于15位*/{ strbuf[top++]='0'+key; /*'0'+key表示是字符1,若没有'0'+则存储的是Ascll码为key为字符*/strbuf[top]=0; /*存储的是ASCLL码为0的表示的字符Ctrl+@*/digitkeyhit=TRUE; /*表示已有数字键按下*/strcpy(txtscreen.caption,strbuf); /*在文本框中显示当前的*/}runflag=FALSE; /*运算标记为假*/if(ctnflag==FALSE) operatoror=0;break;case 10: /* 0输入*/if(top<15&&top!=1){ strbuf[top++]='0';strbuf[top]=0;strcpy(txtscreen.caption,strbuf);}digitkeyhit=TRUE;runflag=FALSE;if(ctnflag==FALSE) operatoror=0;break;case 11: /*正负互换*/if(digitkeyhit==TRUE){ strbuf[0]=strbuf[0]==' '?'-':' ';strcpy(txtscreen.caption,strbuf);}else if(runflag==TRUE) /*表示没有新的输入,就是在之前的计算结果上正负转换*/{ num1=-num2;sprintf(txtscreen.caption,"%G",num1);}else /*原数的正负互换*/{ num1=-num1;sprintf(txtscreen.caption,"%G",num1);}runflag=FALSE;if(ctnflag==FALSE) operatoror=0;break;case 12: /*输入一个小数点*/if(top==1) /*表示还没有输入数,保持0.状态*/{ strbuf[top++]='0';strbuf[top++]='.';strbuf[top]=0;strcpy(txtscreen.caption,strbuf);digitkeyhit=TRUE;runflag=FALSE;pointflag=TRUE;if(ctnflag==FALSE) operatoror=0;}else if(top<15&&pointflag==FALSE){ strbuf[top++]='.';strbuf[top]=0;strcpy(txtscreen.caption,strbuf);digitkeyhit=TRUE;runflag=FALSE;pointflag=TRUE;if(ctnflag==FALSE) operatoror=0;}break;case 13:case 14:case 15:case 16: /* 四则运算加减乘除运算符*/ if(digitkeyhit) /*若此运算符之前已经输入了一个数*/num1=atof(strbuf);if(ctnflag) /*之前的输入中,已有运算符的输入*/if(digitkeyhit==TRUE) /*如1+2+的情况*/DoubleRun(); /*先计算出1+2*/else;else /*之前的输入中,没有运算符的输入,如:1+的情况*/ if(operatoror==0)num2=num1;else;Resetbuf();operatoror=key;ctnflag=TRUE;runflag=TRUE;break;case 17:case 18:case 19: /*单运算开方,百分比,倒数*/ if(digitkeyhit)num1=atof(strbuf); /*num1保存当前操作数*/SingleRun(key);Resetbuf();ctnflag=FALSE;operatoror=0;runflag=FALSE;break;case 20: /*获取运算结果及等于操作*/if(digitkeyhit) num1=atof(strbuf);if(operatoror)DoubleRun(); /*第一个操作数,保存在num2中*/ elsenum2=num1;Resetbuf();ctnflag=FALSE;runflag=TRUE;break;case 21:case 22:case 23:case 24: /*值的保存的一些操作*/ if(digitkeyhit) num1=atof(strbuf);StoreSet(key);Resetbuf();break;case 25: /*删除数字的整数部分的最后一位数(BackSpace键)*/ if(top>1)if(strbuf[--top]=='.'){ if(strbuf[1]=='0'&&strbuf[2]=='.')strbuf[--top]=0;elsestrbuf[top]=0;pointflag=FALSE;}elsestrbuf[top]=0;operatoror=0;ctnflag=FALSE;runflag=FALSE;strcpy(txtscreen.caption,strbuf);break;case 26: /*清除当前显示的值(Del键)*/Resetbuf();num1=0;strcpy(txtscreen.caption,strbuf);TextBox(txtscreen);break;case 27: /*清除所有的值,包括存储的,已经运算了的(ESC键)*/ Resetbuf();num1=num2=0;ctnflag=FALSE;operatoror=0;runflag=FALSE;errorflag=FALSE;strcpy(txtscreen.caption,"0.");TextBox(txtscreen);break;case 0:Unload();}if(errorflag==FALSE){ if(atof(txtscreen.caption)==0)strcpy(txtscreen.caption,"0");if(strchr(txtscreen.caption,'.')==NULL)strcat(txtscreen.caption,".");}TextBox(txtscreen); /*显示txtscreen结构变量的值*/ }void DoubleRun() /*四则运算*/{ switch(operatoror){ case 13: num2+=num1;break; /*加*/case 14: num2-=num1;break; /*减*/case 15: num2*=num1;break; /*乘*/case 16: if(num1==0) /*除*/errorflag=TRUE;elsenum2/=num1;break;}if(errorflag)strcpy(txtscreen.caption,"Can't divide by zero!");elsesprintf(txtscreen.caption,"%G",num2);}void SingleRun(int key) /*单运算*/{ switch(key){ case 17: /*求开方*/if(num1<0)errorflag=TRUE;elsenum1=sqrt(num1);break;case 18: /*求百分比*/num1/=100;break;case 19: /*求倒数*/if(num1==0)errorflag=TRUE;elsenum1=1/num1;}if(errorflag==TRUE)if(num1<0)strcpy(txtscreen.caption,"Can't blower than zero!");elsestrcpy(txtscreen.caption,"Can't equal to zero!");elsesprintf(txtscreen.caption,"%G",num1);}void StoreSet(int key) /*记忆存储操作*/{ switch(key){ case 21: /*保存清除*/store=0;lblstore.caption[0]=0;break;case 22: /*取出保存的值*/num1=store;sprintf(txtscreen.caption,"%G",store);runflag=FALSE;if(ctnflag==FALSE) operatoror=0;break;case 23: /*保存当前数字*/store=num1;strcpy(lblstore.caption,"M");break;case 24: /*保存值与当前数字相加*/store+=num1;strcpy(lblstore.caption,"M");break;}Label(lblstore);}。
vc课程设计计算器
vc 课程设计计算器一、教学目标本课程旨在让学生掌握计算器的基本使用方法,理解计算器在数学和科学计算中的应用,培养学生的逻辑思维能力和解决问题的能力。
具体目标如下:知识目标:使学生了解计算器的各种功能及其应用场景,掌握计算器的基本操作方法。
技能目标:能够运用计算器进行简单的数学计算、科学计算和数据处理,提高计算准确性和效率。
情感态度价值观目标:培养学生对科学技术的兴趣和好奇心,激发学生探索未知、创新思维的精神。
二、教学内容本课程的教学内容主要包括以下几个部分:1.计算器的基本结构:介绍计算器的各种按键功能及其对应的操作。
2.计算器的使用方法:讲解如何使用计算器进行数学计算、科学计算和数据处理。
3.计算器在实际应用中的案例分析:通过实际案例,使学生了解计算器在日常生活和学习中的重要作用。
4.计算器的维护与保养:教授学生如何正确使用和维护计算器,延长其使用寿命。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式:1.讲授法:教师讲解计算器的基本原理、功能及使用方法。
2.讨论法:分组讨论计算器在实际应用中遇到的问题,培养学生解决问题的能力。
3.案例分析法:分析实际案例,使学生了解计算器在生活和学习中的重要作用。
4.实验法:让学生亲自动手操作计算器,进行实际计算,巩固所学知识。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用内容丰富、适合学生年龄特点的计算器教材。
2.参考书:提供相关的计算器使用手册和资料,供学生课后自学。
3.多媒体资料:制作课件、教学视频等,以生动形象的方式展示计算器的使用方法。
4.实验设备:为学生提供足够的计算器,以便进行实际操作和实验。
五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和兴趣。
2.作业:布置适量的课后作业,检查学生对课堂所学知识的掌握程度。
C语言计算器的编写课程设计
C计算器课程设计学院:信息学院专业:通信工程班级:24041001学号:23姓名:王卫玲目录第1章课程设计内容及要求............... .51.1内容. . . . . . . . . . . . . . . . . . . . . .. . . . . . . .51.2要求. . . . . . . . . . . . . . . . . . . . . .. . . . . . . .5第2章系统设计流程图. . . . . . . . . . . . . . . . .62.1系统流程图. . . . . . . . . . . . . . . . . . . . . . . .62.2主要功能表. . . . . . . . . . . . . . . . . . . . . . . .7第3章系统测试. . . . . . . . . . . . . . . . . . . . . . . .83.1系统测试. . . . . . . . . . . . . . . . . . . . . . . . . .83.2调试. . . . . . . . . . . . . . . . . . . . . .. . . . . . . .9第4章使用. . . . . . . . . . . . . . . . . .. . . . . . . . .114.1运行程序进入计算器界面. . . . . . . . . (11)第5章课程设计心得. . . . . . . . . . . . . . . . (12)第1章课程设计内容及要求1.1 内容编写C语言程序,设计一个简单计算器1.2 要求运用相关知识,查阅相关资料,编写一个简单的计算器。
第2章系统设计流程图2.1系统流程图2.1 系统流程图2.2主要功能表2.2 主要功能表第3章系统测试程序的调试是指对程序的差错和排错,为了便于差错、阅读,在设计该程序的过程中我们采用了结构化程序方法编辑,添加了尽可能多的注释,这就为接下来的调试过程带来了很多方便。
C++课程设计(计算器)报告
课程设计报告Visual C++ 课程设计题目:计算器题目:计算器1.程序功能简介实现计算器功能。
用户根据程序提示,输入数字,选择要进行的运算,可以进行加,减,乘,除,开方、温度单位的换算。
2.课程设计要求(1)完善计算器程序,改写成可对实数操作。
(2)完善程序,改为多个操作数基本四则运算,遇到0为止(3)增加函数、完成四则混合运算,注意算法要考虑优先级,对应增加主菜单选项。
(4)添加语句,使四则运算具有测试功能,即计算器出题目,并要求用户计算,同时计算机判断用户对错并打分,要求十题为一个单元,加减运算时最高为两位数运算,乘除法为两位数乘一位数,除法是两位数或三位数除以一位数,且没有余数。
3.设计思路将原函数的int型数据改为float型数据。
仿照类设计四则混合运算的程序,四则混合运算的分函数主要有double eval_exp(char *exp);//运算四则运算表达式的主函数,返回结果、void oopcalc::sizeyunsuan();//四则运算调用的主函数、double oopcalc::eval_exp(char *exp)//计算表达式函数并返回结果、get_token();//取表达式函数等。
利用类的结构编写一个void test()//测试函数,并给出选项选择测试的内容。
并参考资料改写随机数生成器源代码,使之符合类的结构能够被调用,添加有关头文件。
4.程序结构图5.添加的主要函数代码添加四则运算主要代码oopcalc::parser(){exp_ptr = NULL;}// 将exp_prt赋值为空指针double oopcalc::eval_exp(char *exp)//计算表达式函数并返回结果{double result;exp_ptr = exp;//将指针指向表达式get_token();//取表达式函数if(!*token)//取得链表为空时,显示错误警告,并返回0值{serror(2);return 0.0;}eval_exp2(result);if(*token) serror(0);return result;}void oopcalc::eval_exp2(double &result)//识别加减符号{register char op;double temp;eval_exp3(result);while((op = *token) == '+' || op == '-')//判断指针指向的符号{get_token();eval_exp3(temp);switch(op) //通过switch语句实现判断{case '-':result = result - temp;break;case '+':result = result + temp;break;}}}void oopcalc::eval_exp3(double &result)//识别乘除号与百分号,方法同加减号{register char op;double temp;eval_exp4(result);while((op = *token) == '*' || op == '/' || op == '%'){get_token();eval_exp4(temp);switch(op) {case '*':result = result * temp;break;case '/':result = result / temp;break;case '%':result = (int) result % (int) temp;break;}}}void oopcalc::eval_exp4(double &result){double temp, ex;register int t;eval_exp5(result);if(*token== '^'){get_token();eval_exp4(temp);ex = result;if(temp==0.0){result = 1.0;return;}for(t=(int)temp-1; t>0; --t) result = result * (double)ex;}}void oopcalc::eval_exp5(double &result){register char op;op = 0;if((tok_type == DELIMITER) && *token=='+' || *token == '-') {op = *token;get_token();}eval_exp6(result);if(op=='-') result = -result;}void oopcalc::eval_exp6(double &result){if((*token == '(')){get_token();eval_exp2(result);if(*token != ')')serror(1);get_token();}else atom(result);}void oopcalc::atom(double &result){switch(tok_type){case NUMBER:result = atof(token);get_token();return;default:serror(0);}}void oopcalc::serror(int error)//输入空时显示输入错误{static char *e[]= //将一组字符串赋值给指针{"Syntax Error","Unbalanced Parentheses","目前没有表达式"};cout << e[error] << endl;//输出字符串}void oopcalc::get_token()//{register char *temp;tok_type = 0;temp = token;*temp = '\0';if(!*exp_ptr) return;while(isspace(*exp_ptr)) ++exp_ptr;if(strchr("+-*/%^=()", *exp_ptr)){tok_type = DELIMITER;*temp++ = *exp_ptr++;}else if(isalpha(*exp_ptr)){while(!isdelim(*exp_ptr)) *temp++ = *exp_ptr++;tok_type = V ARIABLE;}else if(isdigit(*exp_ptr)){while(!isdelim(*exp_ptr)) *temp++ = *exp_ptr++;tok_type = NUMBER;}*temp = '\0';}int oopcalc::isdelim(char c){if(strchr(" +-/*%^=()", c) || c==9 || c=='\r' || c==0)return 1;return 0;}void oopcalc::sizeyunsuan()//——————————————————————————————四则运算{char expstr[80];cout << "输入0使计算终止。
(完整word版)VC++简单科学计算器设计
简单科学计算器设计VC++课程设计报告简单科学计算器设计一、设计任务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~)和进制转换(包括二进制转十进制、十进制转二进制和八进制转二进制)等运算。
以下是本计算器的运算流程图:2. 设计步骤:(1) 创建一个基于对话框的应用程序。
(2) 利用资源编辑器编辑对话框资源,及设计计算器界面并修改对话框各按钮的ID 属性和Caption 属性。
(完整版)C++毕业课程设计(计算器)
目录摘要 (2)1 引言 (2)1.1 课题背景 (2)1.2课程设计目的 (2)2 开发工具的介绍 (3)2.1关于Visual C++ (3)2.2可行性分析 (4)2.3需求分析 (4)3 功能说明 (4)4 系统的实现 (5)4.1窗体设计 (5)4.2编辑资源 (6)4.3实现高级按钮控件类 (8)4.4实现高级编辑控件类 (12)4.5对话框界面设计 (15)4.6数值计算功能的实现 (20)5 程序结果的演示 (21)5.1测试的研究与选择 (21)5.2测试环境 (21)5.3实例测试结果 (22)结束语 (23)参考文献 (23)用VC++制作多功能计算器摘要本课程设计将实现一个简单计算器。
其类似于Windows附件中自带的计算器。
这个计算器不仅实现了简单的四则运算功能,还实现了高级的科学计算功能,而且具有简洁大方的图文外观。
它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
在课程设计中,系统开发平台为Windows 2000XP,程序设计设计语言采用Visual C++,在程序设计中,采用了结构化与面向对象两种解决问题的方法。
关键词程序设计;计算器;MFC;按钮控件1 引言本课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量,该程序即可以在简单计算器键面下进行简单运算,也可以在科学计算器键面下进行高级的科学计算。
并且可以分别计算弧度、角度的三角函数的计算等较为复杂的运算。
1.1 课题背景计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。
要实现计算功能,可以用VC++的知识编写程序来解决此问题。
该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。
该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。
VC程序设计说明书---计算器
目录目录 (I)摘要 (II)1 设计目的 (1)2 设计要求 (2)3 设计内容 (3)3.1 系统分析 (3)3.2项目创建 (3)3.3界面设计 (5)3.4 代码实现 (7)3.5 方案分析总结 (16)总结与致谢 (19)参考文献 (20)附件 (21)摘要GPA英语全称是grade point average,意思就是平均分。
GPA的精确度往往达到小数点后1到2位,如:3.0,3.45。
GPA的标准计算方法是将大学成绩的加权平均数乘以4,再除以100,得出平均分。
美国的GPA满分是4分,即A=4,B=3,C=2, D=1。
一般来讲,百分制中的90分以上可视为4分,80分以上为3分,70分以上为2分,60分以上为1分,五分制中的5分为4分,4分为3分,3分为2分,2分为1分。
这次课程设计完成了一个简单的GPA计算器。
本次设计系统具有良好的界面,必要的交互信息和较好的健壮性,使我们能快捷简单地进行操作,即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
关键词:GPA;VC++6.0;MFC;控件;1 设计目的《VC程序设计++》是一门实践性、应用性很强的科目。
实践教学环节是必不可少的一个重要环节。
VC程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握VC程序设计的基本技能和面向对象的概念和方法;了解菜单、视图/文档、数据库等编程技术。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
简单计算器c++课程设计
简单计算器1 基本功能描述简单计算器包括双目运算符和单目运算符。
双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦、阶乘、对数、开方、倒数等运算。
可对输入任意操作数包含小数和整数及正数和负数进行以上的所有运算并能连续运算。
出现错误会给出提示,同时包含清除、退格、退出功能以及有与所有按钮相对应的菜单项。
2 设计思路如图1,是输入数据子函数的流程图。
打开计算器程序,输入数据,判断此次输入之前是否有数字输入,如果有,则在之前输入的数字字符后加上现有的数字字符;如果没有,则直接使编辑框显示所输入的数字字符。
判断是否继续键入数字,如果是,则继续进行前面的判断,如果否,则用UpdateData(FALSE)刷新显示。
如图2,是整个计算器的流程图。
对于输入的算式,判断运算符是双目运算符还是单目运算符。
如果是双目运算符,则把操作数存入数组a[z+2]中,把运算符存入b[z+1]中;如果是单目运算符,则把字符串转化为可计算的数字,再进行计算。
下面判断运算符是否合法,如果合法,则将结果存入a[0],不合法,则弹出对话框,提示错误。
结束程序。
图2 简单计算器总流程图3 软件设计3.1设计步骤打开Microsoft Visual C++6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名及其存储路径,点击确定,如图3所示。
图3 新建MFC AppWizard[exe]工程将弹出MFC AppWizard-step1对话框,选择基本对话框,点击完成,如图4所示。
图4 基本对话框这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图5所示。
图5 新建的对话框3.2界面设计1、创建控件在图5所示的Resoure View选项卡中打开Dialog资源组,双击IDD_LUXIAOYING_DIALOG,在右边的窗口中显示出待编辑的对话框。
开始摆放控件,包括编辑框和按钮的创建。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMy3Dlg dialog
CMy3Dlg::CMy3Dlg(CWnd* pParent /*=NULL*/)
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMy3Dlg::OnPaint()
ON_BN_CLICKED(IDC_BMINUS, OnBminus)
ON_BN_CLICKED(IDC_BMULTIPLY, OnBmultiply)
ON_BN_CLICKED(IDC_BDIVIDE, OnBdivide)
ON_BN_CLICKED(IDC_BCLEAR, OnBclear)
//}}AFX_MSG_MAP
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
: CDialog(CMy3Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMy3Dlg)
m_doprand1 = 0.0;
m_doprand2 = 0.0;
m_dresult = 0.0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
ASSERT(IDM_ABOUTBOX < 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 framework does this automatically
DDX_Control(pDX, IDC_EOPRAND1, m_eoprand1);
DDX_Text(pDX, IDC_EOPRAND1, m_doprand1);
DDX_Text(pDX, IDC_EOPRAND2, m_doprand2);
DDX_Text(pDX, IDC_ERESULT, m_dresult);
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
// the minimized window.
HCURSOR CMy3Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMy3Dlg::OnBplus()
{
// TODO: Add your control notification handler code here
//计算器3Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "计算器3.h"
#include "计算器3Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
UpdateData(FALSE);
}
void CMy3Dlg::OnBdivide()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_doprand2)
m_dresult=m_doprand1/m_doprand2;
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
return TRUE; // return TRUE unless you set the focus to a control
}
void CMy3Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
UpdateData(FALSE);
m_eoprand1.SetFocus();
m_eoprand1.SetSel(0,-1);
}
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMy3Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMy3Dlg)
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
UpdateData();_doprand2;
UpdateData(FALSE);
}
void CMy3Dlg::OnBminus()
{
// TODO: Add your control notification handler code here
UpdateData();
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
m_dresult=m_doprand1-m_doprand2;
UpdateData(FALSE);
}
void CMy3Dlg::OnBmultiply()
{
// TODO: Add your control notification handler code here
UpdateData();
m_dresult=m_doprand1*m_doprand2;
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);// Set big icon
SetIcon(m_hIcon, FALSE);// Set small icon
// TODO: Add extra initialization here
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////