小组成员:
王森 13070018
李经纬 13070019
我们基本上是在一起编程的,遇到问题可以一起讨论,比自己做思路更加开阔一些。我们在上次作业的基础上,修改了结构上的问题,模块化不清楚,都写在了一个类里。
这次我们将它模块化,更利于以后的拓展与修改。
已完成内容:
王森:
- 以原来程序作为基础进行改进,功能分离,增强封装性
在原来的程序中,Calculator类内部进行了所有的工作,输入、计算、打印等等,在新的程序中,使用Calc类替换该类,只保留计算部分。Calc主要有两个共有函数作为接口,一个是setExp(String exp),一个是getResult(Fraction &result),第一个是给这个模块传入要计算的表达式,第二个是得到计算结果。
新的核心模块Calc增加的成员变量和方法如下:
1 class Calc 2 { 3 private: 4 string exp; 5 int max_opNum, min_numVal, max_numVal; 6 public: 7 void setExp(string exp); 8 void Setting(int max_opNum, int min_numVal, int max_numVal); 9 int getResult(Fraction &result); 10 }
李经纬:
- 定义异常
在核心模块中找到各种可能出现错误的地方,返回不同的整形值。将计算结果通过函数参数的位置进行返回。
异常数字所对应的描述为:
-1 除数为0
-2 算式格式错误
-3 运算符数量超限
-4 数值范围超限
-5 未知字符
- 编写测试模块
测试模块的功能是来测试核心模块的,在本题中就是测试一个输入式子和参数获得结果和捕获异常。
测试模块主要代码:
1 Test::Test() 2 { 3 while (true) 4 { 5 cout << "请输入表达式:" << endl; 6 //cin >> exp; 7 char getExp[128]; 8 cin.getline(getExp, 128); 9 exp.assign(getExp); 10 11 Calc c; 12 c.setExp(exp); 13 c.Setting(2, -1000, 1000); 14 Fraction result; 15 int e; 16 if (!(e = c.getResult(result))) 17 { 18 cout << result << endl; 19 } 20 else 21 { 22 cout << "捕获异常,异常码为:" << e << endl; 23 } 24 } 25 }
测试异常如下: