标签:
基本功能:
1.一个带有用户界面的四则运算程序
2.用户可以自己输入数据
3.支持负数运算
4.中间结果同样符合用户参数要求
界面效果:
1.主界面
2.参数设置界面
原理分析:
程序的大致流程为:用户进入主界面,点集“生成题目”,跳转到参数设置界面,用户设置完成后点击确定,主窗口从子窗口对象中提取各个参数生成算式,用户点击“打印题目”后将算式在listbox控件中输出。
为了方便起见,将生成算式的功能独自封装为一个类,在读取参数后直接调用这个类所实例化的对象的不同方法来生成算式。
生成算式的类主要包括三个方面的功能,即:算式求解、算式判重、生成算式。
(1)算式求解,参数为一个字符串表示具体算式,利用栈对其求解得出结果。
(2)算式判重,直接比较两个字符串是否相等。
(3)算式生成,为了保证中间结果满足整除或不为负数的要求,先用字母表示操作数, 随机生成运算符,此时得到一个抽象算式,对此算式计算其后缀表达式,以确定其 运算顺序,之后一次生成操作数即可,此处依然借助了栈进行实现。
代码:
“生成题目”按钮的Click时间核心代码如下:
当form窗体关闭后提取参数。之后调用算式类Equation类的对象,生成算式。
Equation类的类图如下
其中前8个方法为生成不同情况算式所对应的方法,build_suf为构造后缀表达式的方法,其调用如下所示:
e_cmp为比较两个算式是否重复,参数为两个字符串。
Solve方法为表达式求解方法。
属性的定义及含义如下所示:
MyStack为自己定义的栈类,对象sop存储操作符,snum存储操作数。
构造抽象算式的代码以其中一个方法为例,如下所示:
对于求解抽象算式中的未知数,选判断提取出来的两个操作数的情况,即两个都是数字、一个是数字一个是未知数、两个都是未知数。用int类的tryparse方法进行判断即可,得到两个bool类型变量,分别对四中情况处理即可。
后缀表达式的转换,算式求解和对后缀表达书求解未知数这三个部分的原理大致相同,都是利用栈来存储操作数和操作符,对于每一种操作符根据优先级进行取数运算即可。详细的不再赘述。
标签:
原文地址:http://www.cnblogs.com/jin-test/p/5351058.html