一. 功能

1)基本功能:实现“普通运算”功能,支持连续运算,如连续输入“2+3×5”后点击“等号”按钮进行运算其结果为25.

2)附加功能:

A,支持“科学运算”功能,即输入表达式时遵循运算符号的优先原则,连续输入“2+3×5”后点击“等号”按钮进行运算其结果为17;

B,支持数字键盘(小键盘)输入功能(焦点不在文本框内时也支持键盘输入);

二. 设计思路

在项目中设计一个计算类,其中包含“普通计算”和“科学计算”功能,即输入数学运算表达式字符串,返回计算结果。直接在项目中调用该类,输出计算结果。

public partial class Form1 : Form{string str = string.Empty;string sumStr;char[] _operator = { '+', '-', '*', '/', '%' };string[] strArray;char[] opArray;Regex r = new Regex(@"[0-9]");public Form1(){InitializeComponent();}private void Press_Button_Click(object sender, EventArgs e){if (textBox2.Text.Contains('=')){textBox2.Text = "";if (r.IsMatch((string)((Button)sender).Tag))//判D断?是?否?接ó着?计?算?{str = "";}}if (!str.Contains('.')){str += (string)((Button)sender).Tag;textBox1.Text = str;}else{if ((string)((Button)sender).Tag != "."){str += (string)((Button)sender).Tag;textBox1.Text = str;}}}private void Clear_Button_Click(object sender, EventArgs e){textBox1.Text = textBox2.Text = "";str = "";textBox1.Text = 0.ToString();}private void Delete_Button_Click(object sender, EventArgs e){if (str.Length > 0){str = str.Substring(0, str.Length - 1);if (str.Length == 0){textBox1.Text = "0";}elsetextBox1.Text = str;}}private static string MyOperate(string strA, string strB, char _operator){double numA = Convert.ToDouble(strA);double a, b, numB;double result = 0;if (strB.Contains('^')){a = Convert.ToDouble(strB.Split('^')[0]);b = Convert.ToDouble(strB.Split('^')[1]);numB = Math.Pow(a, b);}else if (strB.Contains('√ì')){numB = Math.Sqrt(Convert.ToDouble(strB.Substring(1)));}else{numB = Convert.ToDouble(strB);}switch (_operator){case '+': result = numA + numB; break;case '-': result = numA - numB; break;case '*': result = numA * numB; break;case '/':{if (numB == 0){return "除y数簓不?能ü为a零?!?";}result = numA / numB;break;}case '%':{if (numA.ToString().Contains('.') == true || numB.ToString().Contains('.')){return "不?能ü对?浮?点?数簓求ó余?!?";}result = numA % numB;break;}}return result.ToString();}private void Equal_Button_Click(object sender, EventArgs e){if (radioButton1.Checked){sumStr = MyNormalCalculating(str);}else{sumStr = MyScienceCalculating(str);}if (strArray.Length == 1){textBox1.Text = sumStr;}else{str += '=';textBox2.Text = str;textBox1.Text = sumStr;}str = sumStr;}private string MyScienceCalculating(string s){strArray = str.Split(_operator);opArray = new char[strArray.Length - 1];int index = -1;int numLength = 0;int opLength = 0;for (int i = 0; i < strArray.Length - 1; i++){index += (strArray[i].Length + 1);opArray[i] = str[index];}opLength = opArray.Length;numLength = strArray.Length;for (int i = 0; i < opLength; i++){if (opArray[i] == '*' || opArray[i] == '/'){strArray[i] = MyOperate(strArray[i], strArray[i + 1], opArray[i]);for (int k = i + 1; k < numLength - 1; k++){strArray[k] = strArray[k + 1];}numLength--;for (int k = i; k < opLength - 1; k++){opArray[k] = opArray[k + 1];}opLength--;}}for (int i = 0; i < opLength; i++){strArray[i + 1] = MyOperate(strArray[i], strArray[i + 1], opArray[i]);}return strArray[numLength - 1];}private string MyNormalCalculating(string s){strArray = str.Split(_operator);string sum = "0";char op;int index = -1;for (int i = 0; i < strArray.Length; i++){if (i == 0){sum = MyOperate(sum, strArray[i], '+');}else{index += (strArray[i - 1].Length + 1);op = s[index];sum = MyOperate(sum, strArray[i], op);}}return sum;}private void Form1_KeyPress(object sender, KeyPressEventArgs e){switch (e.KeyChar){case '0': Press_Button_Click(button16, null); break;case '1': Press_Button_Click(button5, null); break;case '2': Press_Button_Click(button6, null); break;case '3': Press_Button_Click(button7, null); break;case '4': Press_Button_Click(button9, null); break;case '5': Press_Button_Click(button10, null); break;case '6': Press_Button_Click(button11, null); break;case '7': Press_Button_Click(button13, null); break;case '8': Press_Button_Click(button14, null); break;case '9': Press_Button_Click(button15, null); break;case '.': Press_Button_Click(button12, null); break;case '+': Press_Button_Click(button17, null); break;case '-': Press_Button_Click(button8, null); break;case '*': Press_Button_Click(button4, null); break;case '/': Press_Button_Click(button3, null); break;case '^': Press_Button_Click(button23, null); break;case '√ì': Press_Button_Click(button22, null); break;case (char)Keys.Enter:case '=': Equal_Button_Click(Equal_Button, null); break;case (char)Keys.Back: Delete_Button_Click(Delete_Button, null); break;}}private void radioButton1_CheckedChanged(object sender, EventArgs e){str = string.Empty;textBox1.Text = "0";textBox2.Text = "";}}

C#普通计算器与科学计算器相关推荐

  1. 科学计算机和普通计算器,[财经]普通计算器和科学计算器的区别是什么?手机计算器阵亡是怎么回事? - 南方财富网...

    手机计算器全线阵亡是怎么回事?原来,不少手机的计算机出现了奇妙的BUG,计算"10%+10%"时,得出的结果不是0.2,而是0.11.经网友反馈,包括OPPO.华为.苹果.小米等多 ...

  2. 普通计算器和科学计算器的实现过程另附带画图功能(C# 窗体)

    有关科学计算器的方法设计(C#) 这只是一个纯小白的自治计算器,代码可能不是十分简便,希望可以用作参考. 计算器的实现 有关科学计算器的方法设计(C#) 有关普通计算器和科学计算器的代码如下 画图功能 ...

  3. t184卡西欧计算机玩游戏,中学回忆——卡西欧 FX-82ES 科学计算器 晒物

    购买理由 这段日子要参加资格考试,没想到还需要带科学计算器. 科学计算器这种东西,自从高中后就没碰过了.现在手机应用丰富,随便下载一个APP就能实现科学计算器的功能,哪还需要购买科学计算器.可惜考试就 ...

  4. 科学计算机eq7,科学计算器HiEdu 580 Scientific Calculator

    科学计算器是一款计算器软件,支持多种运算让用户能够在多方面都能够使用到的一款计算器软件,你可以用其来计算大学当中相当多的内容,而除了是计算器之外这款软件也是一款辅助性的工具,能够为用户提供单位上面的转 ...

  5. 基于WPF的科学计算器程序

    基于WPF的科学计算器程序 1.前言 2.界面展示 2.1标准计算器界面 2.2科学计算器界面 3.功能分析 4.代码实现 4.1窗体拖动 4.2界面切换 4.3运算符优先级 4.4功能函数 5.结语 ...

  6. 科学计算机DEG进入,手机计算器全线阵亡是怎么回事?10%+10%到底等于几?附科学计算器使用指导...

    "10%+10%到底等于几?"这是近几天很多朋友使用手机计算机后提出的疑问.据网友爆料,近期大多手机计算机出现BUG,计算"10%+10%"时,结果是0.11, ...

  7. 数学计算机软件推荐,科学计算器软件有哪些?2020好用的科学计算器推荐

    不同于一般计算加减乘除的普通型计算器,科学计算器是还能计算各种数学函数.线性运算.进制转换等功能的专业计算工具,能够帮助我们快速计算出所需要的结果,那么,你知道有哪些好用的科学计算器软件吗?下面就是小 ...

  8. 科学计算机如何锁定,华为计算器怎么才能固定竖屏和调出科学计算器?取消自动旋转操作介绍...

    华为怎么调出科学计算器?华为作为中国国产新星,近几年可谓是火遍大江南北哦,现在用华为手机的用户也越来越多,计算器是我们日常生活中实时要用到的工具,华为手机内置的计算器功能强大,供平时使用完全够了,但是 ...

  9. 科学计算机怎么清除数据,互联网要点:怎么将手机中的计算器设置为科学计算器并对缓存数据进行清除...

    当下应该属于互联网时代吧今天小编分享一篇有关于怎么将手机中的计算器设置为科学计算器并对缓存数据进行清除,相信小伙伴们对这个话题应该也很关注吧,那么现在就为小伙伴们说说怎么将手机中的计算器设置为科学计算 ...

最新文章

  1. Redis缓存使用技巧和设计方案
  2. Windows7中的系统健康报告
  3. java 对字符串中的数值排序
  4. VTK:提取选择 OriginalId用法实战
  5. python怎么定义文档的行数_python删除文本中行数标签的方法
  6. Yii2 behavior运用
  7. 信息学奥赛一本通(1115:直方图)
  8. 一加9系列曝光:骁龙875旗舰芯片加持 可能存在超过四种机型
  9. 解决微信小程序开发中wxss中不能用本地图片
  10. CTO 离职、研发变动,百度外卖与饿了么组织架构融合公布
  11. docker-containerd 启动流程分析
  12. 西数硬盘MRT维修思路
  13. Day3:MVP+ButterKnife+Dagger2的使用
  14. ❤️FFmpeg❤️ MP4格式文件,将MPEG4的编码方式转为H.264
  15. linux网络测试工具
  16. 【Camera】Camera基础概念
  17. 单身女生看过来:你为什么没有男朋友的20个原因
  18. 计算机毕业实习报告范文,大学计算机专业毕业实习报告范文
  19. 国外有什么好的网站推荐?
  20. 计算个人所得税,北大青鸟S2 上机第二阶段第一题

热门文章

  1. 打印杨辉三角的9种方法与解析
  2. ‘冰封’合约背后的老牌劲敌 | 链安团队漏洞分析连载第二期 —— 拒绝服务漏洞
  3. OpenCore解决HD4600笔记本电脑hdmi输出
  4. 嗯,农民伯伯的2014就是这些
  5. 通信相关名词的英文缩写
  6. excel怎么转换成左上角带绿色小三角的文本格式
  7. 网页的一个页面中显示另一个页面
  8. 8163 android8,联发科MT8163V/A怎么样 MT8163V/A参数介绍
  9. 如何让Ai帮数据分析师干活-工作1
  10. 使用Cpolar+freekan源码 创建在线视频网站