本次程序实现了一个小学生算术题出题系统。主要实现了如下三个功能:前端
出题、判断答案对错、计算。算法
出题阶段,用户能够指定出题的要求,如运算中是否出现负数、括号、乘除等。函数
本程序由Core、UI、Console三部分组成。Core承担了核心功能,即接收用户输入,返回用户指望的结果;UI提供了一个简单的图形界面交互;Console部分实现了命令行方式的调用。命令行
Core部分对外提供两组API:orm
1.统一的一个接口接口
public string Process(string[] args)。直接将用户参数传入到命令行,调用Process方法便可执行。返回值所有为string类型,若是是须要返回值的功能(如判断对错),则正常状况下返回结果,错误返回特定标识符标记失败;对于无需返回结果的功能(如生成),则返回成功或失败标记。特别的,对于失败状况,会抛出通过封装的相应异常,上层能够根据异常信息判断错误,并反馈给用户。ci
2.划分功能的多个接口string
public void Generate(int cnt, int maxvalue, int maxsize, bool fraction, bool muldiv, bool bracket, bool positive)it
public string Check(string pathQ, string pathA)io
public string Calc(string str, int precision)
使用这三个接口,上层调用者传入合适的参数,便可执行。三个函数根据须要有或无返回值,遇到异常状况均会抛出相应的异常供调用者分析。
对于异常:
程序中自定义了
public class FormulaNotLegalException : Exception
public class ParameterErrorException : Exception
两个异常,使用了运行时的堆栈异常和除零异常,实现了全部状况的异常处理。前端只须要判断异常类型,便可知道用户是否输入合法或程序是否正确执行。
实现中特别注意的地方:因为对于算式输入的定义不一样,有些算式存在空格,有些不存在空格。本程序在实现时作成两种状况均可以处理。算法上,程序实际处理的是不包含空格的状况,对于含有空格的,所有替换成空串后进行处理。
容易出现的问题:
虽然接口的定义能够处理大多数状况的出现,可是仍是存在一些问题。
本程序计算模块对于输入算式的要求中有:全部负数必须用小括号括起来,可是衔接的用户界面并无对这个要求做出检查,致使本应合法的算式被断定成非法。
改进方法:使用中间层,若是用户输入不知足核心模块要求,根据实际状况给前端反馈错误或处理成能够知足要求的输入格式。