基于C#语言的计算器的设计与实现

Nuisance

发布日期: 2018-10-15 10:30:58 浏览量: 698
评分:
star star star star star star star star_border star_border star_border
*转载请注明来自write-bug.com

一 需求分析

利用c#语言实现一个计算器程序,包括普通计算器模式、科学计算器模式;实现实数(包括正数、负数、0)的加、减、乘、除、平方等基本远算,并实现非负数的开方运算。

二 程序设计与实现

首先设计主窗体,包括两个TextBox用来显示数据,使用数据绑定实现,在Model中实现INotifyPropertyChanged接口,以起到数据更改通知的功能。一个Button和Panel作为菜单来切换计算器模式。最后一个Panel用来显示不同模式的计算器输入面板;

其次是标准计算器输入面板。包括常用的数字和运算符以及Delete,CE和清除按钮。科学计算模式也只是多了几个运算符而已。在后置代码中获取被单击的按钮的名称,调用Model中的Print方法在TextBox中显示数据。

Model中声明两个字符串变量作为两个TextBox中的数据,还包括Print方法,一方面得到按钮的名称,另一方面调用此程序中最重要的逻辑处理方法PrintText方法。传进去两个值,即当前TextBox中显示的数据,输出两个值作为TextBox在一系列处理之后应显示的数据。

PrintAndExpression类主要负责处理TextBox的显示和生成算术表达式。GetValue方法根据名字返回应显示的字符串。IsOpreation方法判断字符串是数字,一元操作符还是二元操作符及其他符号。PrintText处理显示格式。大致为当输入数字的时候在textBox1中,每按下一个操作符即将textBox1中的数字连接上操作符显示在textBox2中,同时处理简单的一元运算符的运算,生成表达式。最终将表达式传递给AnalyExpressions。将解析表达式运算之后的结果返回。

AnalyExpressions解析表达式,利用堆栈来实现,将中缀表达式分解之后保存在字符串数组中,即所谓的“后缀表达式”。大致规则为:

  • 将中缀表达式翻译成后缀表达式

  • 输入中缀表达式: A+B*(C+D)-E/F

  • 中缀表达式翻译成后缀表达式的方法如下:

    • 从左向右依次取得数据ch

    • 如果ch是操作数,直接输出

    • 如果ch是运算符(含左右括号),则:

      • 如果ch = “(“,放入堆栈

      • 如果ch = “)”,依次输出堆栈中的运算符, 直到遇到”(“为止

      • 如果ch不是”)”或者”(“,那么就和堆栈顶点位置的运算符top做优先级比较

        • 如果ch优先级比top高,那么 将ch放入堆栈

        • 如果ch优先级低于或者等于 top,那么输出top,然后将ch放入堆栈

      • 如果表达式已经读取完成,而堆栈中还有运算符时,依次由顶端输出

三 程序目录结构

程序目录结构如下图所示:

Data文件夹

  • Model.cs为程序执行所操作的数据

Method文件夹

  • PrintAndExpression.cs为事件处理程序所调用的方法,主要用于处理显示数据
  • AnalyExpression.cs用于将算术表达式解析为“后缀表。达式数组”并计算返回计算结果

View文件

  • NormCalculator.cs为用户控件显示标准计算器视图
  • ScienceCalculator.cs用户控件显示科学计算器视图

MainForm.cs为程序主窗体

Program.cs为程序入口

四 测试运行

如下图所示:

上传的附件 cloud_download 基于C#语言的计算器的设计与实现.7z ( 205.37kb, 61次下载 )
error_outline 下载需要9点积分

发送私信

如果我想抱你,你会伸手还是后退

21
文章数
14
评论数
最近文章
eject