您好,欢迎访问三七文档
计算器1第1章绪论1.1软件结构介绍本软件是一个在visualstudio2010简体中文旗舰版设计中图形界面的简单的基于C#的计算器。使用人员能快捷简单地进行操作。即时准确的获得需要的计算结果,为了尽量的降低使用难度和节约使用者学习使用本软件的时间,在本软件中加入了必要的帮助说明。在本文中,约定【OFF】表示的是本软件中的退出按钮,【1】代表的是本软件中的“1按钮”而不是数值1。本软件主要由3个WindowsForm组成,分别是FrmIndex,FrmCalculator和FrmSpeial。下面详细介绍三个Form的相关情况。1.1.1关于FrmIndexFrmIndex的主要包括了一个菜单控件。一级菜单包括了【菜单】和【关于】。【菜单】中包含了【科学计算器】,【特色功能】,【退出】。【科学计算器】可以打开FrmCalculator。【特色功能】可以打开FrmSpeial。【退出】可以释放本软件运行时使用的系统资源并关闭软件。【关于】中包含了【关于软件】和【鸣谢】。【关于软件】会弹出一个MessageBox,简单介绍了这个软件的相关内容。【鸣谢】会弹出一个MessageBox,对本软件在设计过程中给过我帮助的人表示感谢。1.1.2关于FrmCalculatorFrmCalculator是本软件的主体内容,模拟了Windows系统中自带的计算器的部分功能。而界面则模仿常见的带双行显示器的科学计算器界面。算式和输入的数字分行显示,上行显示算式,而下行显示正在输入的数字或者是最后的计算结果。界面如下图1.1所示:计算器2图1.1科学计算器运行图界面中各个控件简介如下:【txtInput】:即两个TextBox控件中上面的一个,用来显示算式。为方便叙述,下文再次提及这个控件时,用算式框来代替;【numInput】:即两个TextBox控件中下面的一个,用来显示当前输入的数字,下文中提及这个控件时,用数字框代替;【CA】:用来同时清空算式框和数字框的内容。【CE】:用来清空数字框中的内容;【←】:用来逐个清空数字框中的内容;【OFF】:关闭软件,并释放软件运行时使用的系统资源;【sin】【cos】【tan】:输入三角函数;【1/X】:求倒数;【x2】,【X3】,【X^Y】:求X的平方,X的立方,X的Y次方;【√】:求平方根;【%】:百分号;计算器3【π】【e】:输入π,e;【(】【)】:输入左右括号;【+】【-】【×】【÷】:输入加减乘除号;【0-9】,【.】【±】:输入0-9,小数点,正负号;【=】:输入等于号,并开始计算算式,并将结果返回到数字框内。1.1.3关于FrmSpeical顾名思义,FrmSpeical实现的是区别于Windows自带计算器的功能。FrmSpeical分两个选项卡,【Page1】和【Page2】。【Page1】界面如下图1.2所示:图1.2FrmSpecial-Page1运行图【Page1】的Text属性设置为“最大公约数与最小公倍数”,实现求两个数的最大公约数和最小公倍数的功能。【Page1】中有两个TextBox控件,分别用来显示两个数字。两个TextBox右边的红色【←】按键用来逐个删除对应的TextBox控件中的内容。而中间的【↑】用来控制输入点在两个TextBox间切换。当它显示为【↑】时,输入点在上面的TextBox中,点击之后它会显示为【↓】,此时输入点被切换到下面的TextBox中。反之亦然。在输入两个整数之后,点击计算器4【OK】,软件会求出两个数的最大公约数和最小公倍数并将结果返回到【Page1】中的两个label控件中以显示结果。【Page2】的界面如下图1.3所示:图1.3FrmSpecial-Page2运行图【Page2】的Text属性设置为“质数判断”,实现判断一个整数是否为质数的功能。【Page2】只有一个TextBox控件,用来显示输入的数字。在数字输入完成后,点击【OK】,软件将开始验证该数字是否为一个质数,并将结果返回到label控件中显示。计算器51.2功能结构1.3算法与类的设计本软件中包含了一个算法类Algorithm,主要用来实现逆波兰算法以支持FrmCalculator实现科学计算器的功能。。而FrmSpecial中用到的求两个数的最大公约数,最小公倍数和验证一个数是否为质数的方法并没有包含到这个类中。所以我们分开来叙述。1.3.1Algorithm算法简述这个类包含的变量有string类型的Stack两个,IntStack和OpStack。IntStack用来存储数字,OpStack用来存储操作符。这个类包含的方法即各个方法的参数类型,作用如下表1.1所示:表1.1Algorithm中的主要算法publicboolIsNumber(stringch)用来判断当前的string类型变量ch是不是数字。(如何判断一个字符是否为数字的问题,在诸多现成的Windows自带的计算器模拟软件中采用的识别数字的方式有两种。一种是ASCII码来判断,另一种用正则表达式来判断。这里用正则表达式方式。)计算器科学计算器特色功能算式输入求取最大公约数和最小公倍数判断一个整数是否是质数逆波兰算法的实现及结果的计算数字的输入操作符的输入常见函数的输入计算器6publicstringdelZero(stringnumTxt)用来在数字框输入的数字是如1.20或者1.200之类的数字时,清除掉结尾的0。publicstringdelDot(stringnumTxt)用来在数字框输入的数字是如1.0或者1.00之类的数字时,清除掉结尾的0后,数字框内的数字变成“1.”,这显然是非法的,这个方法用来清除掉最后的小数点。publicstaticintpriority(StringMyop)用来对软件支持的各个运算符的优先级进行定义。这里用一个int值来计量优先级方便后面对两个操作符之间优先级进行比较,越先运算的操作符int值越大。privateintCompareOperate(stringch,stringstackCh)用来比较两个操作符ch和stackCh的优先级,并返回一个int值来表示比较的结果。如果ch和stackCh的优先级相同返回0,ch的优先级比stackCh低时返回-1。如果ch的优先级比stackCh高时返回1。其他情况返回-2。publicstaticstringgetResult(StringMyop,Stringa,Stingb)对a和b进行计算,并返回结果给GetExpression(stringInputString)。publicstringGetExpression(stringInputString)调用getResult并将最后运行结果显示到数字框中1.3.2FrmSpecial中的两个关键的方法FrmSpecial中求取两个数的最大公约数和最小公倍数的方法commonDivisorAndMultiple()和验证一个整数是否为质数的方法IsPrime()是这个部分最核心的内容。privatevoidcommonDivisorAndMultiple()通过先将Page1中两个数字框中的数字转化成为int类型变量,然后采用谭浩强的《C语言程序设计》中求两个数的最大公约数和最小公倍数的内容稍作修改之后得来。最后将结果中最大公约数部分显示在Page2中的label控件Page1LabelResultShow1中,而最小公倍数部分显示在Page1的label控件Page1LabelResultShow1中。IsPrime()依据质数的定义,如果有一个非零的并且并这个数本身小的数能整除,这个数这个数不是质数来编写。如果,输入在数字框中的数字是一个负数时,先把求它的绝对值,然后验证它的绝对值是不是质数。如果是,那么这个数是质数,如果不是,那么这个数也不是质数。然后将结果显示在Page2的label控件Page2LabelResultShow中。计算器7第2章需求分析2.1需求分析本软件以模仿Windows系统中自带的计算器为主,能支持带括号的十进制加减乘除运算,能支持三角函数,求阶乘,支持求倒数,求X的Y次方,开根号,求平方,立方。支持百分号,能输入π和e。另外加入了去两个数的最大公约数和最小公倍数,以及判断一个数是否为质数的功能。故应有两个模块:计算器模块和特殊功能模块。特色功能模块的两个功能在谭浩强的《C语言程序设计》中已经有了现成的算法和程序,“重新发明车轮”是没有什么意义的,故不作太多论述。只对计算器模块做分析。计算器模块应该有能响应处理算式输入的模块和算式转换和计算模块。2.2算式输入模块这个模块主要包括数字输入,加减乘除等操作符的输入,三角函数输入,常见函数输入和括号的输入。并能最大限度的保证算式的合法性。2.3算式转换和计算模块这个模块能实现逆波兰式把输入的中缀式转化成为后缀式,计算结果然后返回结果。计算器8第3章系统设计这个软件的主体部分,科学计算器,要解决的问题主要是两个,第一是如何尽量避免输入非法的算式,第二是整个设计的关键怎么样实现逆波兰算法得到正确的结果。这一章节就来叙述整两个问题。要叙述这两个问题,必须先对FrmCalculator有一个更深的了解。3.1FrmCalculator中的变量FrmCalculator中包含了4个全局变量,bool型的IsMark,IsRight,string型的RealStr和int型的left。这里IsMark用来判断是否准许输入数字,如果真则准许,假则不准许。初值为真,即true。而IsRight用来判断最后一个算式框中最后一个字符是不是右括号,因为诸如“)1”这种类型的算式是非法的。所以当IsRight是真时,不准许输入数字。而RealStr用来在最后按下【=】之后,存储算式框里面的字符串,并作为参数传递给算法类Algotithm中的方法GetExpression(stringInputString)。left用来记录左括号的个数,因为一个算式中,左括号的个数和右括号的个数必须要保持一致否则这个算式是非法的。3.2FrmCalculator中的主要方法FrmCalculator包含的主要方法及其参数,作用等如下表3.1:表3.1FrmCalculator包含的主要方法及其参数方法名(包含了参数,返回值类型)作用privatevoidPressNumBtn(stringNumTxt)处理数字按键privatevoidBtnCE_Click(objectsender,EventArgse)将数字框清零privatevoidbtnOff_Click(objectsender,EventArgse)退出并释放软件运行使用的资源privatevoidPressMarkBtn(stringMarkTxt)三角函数按键处理privatevoidbtnDaoshu_Click(objectsender,EventArgse)求倒数privatevoidbtnPer_Click(objectsender,EventArgse)百分号privatevoidPressOpBtn(stringOpTxt)对加减乘除等运算符进行处理privatevoidnumInput_TextChanged(objectsenderEventArgse)防止输入的数字含有空格privatevoidbtnLeft_Click(objectsender,EventArgse)输入(privatevoidbtnRight_Click(objectsender,EventArgse)输入)privatevoidbtnEqual_Click(objectsender,EventArgse)输入“=”,并计算返回结果privatevoidBtnCA_Click(objectsender,EventArgse)同时归零数字框和算式框privatevoidBtnNumDel_Click(objectsender,EventArgse)用于
本文标题:C#计算器
链接地址:https://www.777doc.com/doc-4550539 .html