My_Calculator

View project on GitHub

简述

本项目来源于矿大计算机专业程序设计综合实践。这是第一个实验项目,花了很长时间去熟悉新语言以及可视化编程。之后就是研究数据结构的栈,思考怎么实现优先级运算,在写bug和改bug中逐步完善。

项目分析

(1)基本目标

该项目目标是设计开发一个支持连续计算的计算器myCalculator,通过单击按钮,输入并完成如或4+5+6或5×8+16类似的连续计算,并将计算结果显示在输出文本框中,同时计算器也要具有后退、清空等基本功能。

(2)拓展目标

增加常见三角函数计算、求对数、开方、求倒数、进制转换等常用功能,并实现带括号的长表达式的按优先级的运算。使其从功能上类似Windows科学计算器。

拓展计算器的使用领域,开发存款或贷款计算器、个人所得税计算器等类似的软件。

实现思路

(1)主要功能的实现

首先浏览了教材上的代码,发现并不能实现优先级和带括号的运算,拓展性较差。于是参考了上学期学过的数据结构,核心思想是先将输入的算术表达式转换成后缀表达式,进行后缀表达式的求值,然后将结果显示出来。

(2)进制转换的实现

首先设计一个函数,可以将任意进制的数转换成十进制,并设参数记录要转换的数为几进制。然后将转换好的数再转换成想要的进制,这里调用系统函数。

(3)贷款计算器的实现

用一个新窗体实现这个功能,代码部分主要是计算公式,并在主窗体设置一个按钮用于打开新窗体。

代码说明

简单来说,这个计算器的功能就是对表达式求值,当然还有一些拓展的小功能。另外还有一些bug没有解决,主要是不想再花时间了。其实跟科学计算器相比还差很多东西。

  • 我只设置了一个文本框。看到有同学设置两个显示框,一个用来显示输入的信息,另一个显示结果。还有人多设置一个文本框显示历史记录,点击它还可以回到上一步。

  • 不能实现边输入边运算,只有当输入完毕,点击‘=’时才会产生结果,中缀转后缀和表达式求值都是在这个动作下完成的。由于这个原因,当输入的表达式不合法时会发生错误,其实可以利用正则表达式加以判断。

  • 进制转换只能转换整数,而且不能进行十进制以外的运算,这些也可以进一步优化。

  • 优先级设置可能不太科学,但基本满足。

  • 将函数视作运算符,用一个字符代替函数。函数较少还可以应付过来,但当数目过多时就有点局限了,故函数拓展有上限。

……