本次程序實現了一個小學生算術題出題系統。主要實現瞭如下三個功能:前端
出題、判斷答案對錯、計算。算法
出題階段,用戶能夠指定出題的要求,如運算中是否出現負數、括號、乘除等。函數
本程序由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
兩個異常,使用了運行時的堆棧異常和除零異常,實現了全部狀況的異常處理。前端只須要判斷異常類型,便可知道用戶是否輸入合法或程序是否正確執行。
實現中特別注意的地方:因爲對於算式輸入的定義不一樣,有些算式存在空格,有些不存在空格。本程序在實現時作成兩種狀況均可以處理。算法上,程序實際處理的是不包含空格的狀況,對於含有空格的,所有替換成空串後進行處理。
容易出現的問題:
雖然接口的定義能夠處理大多數狀況的出現,可是仍是存在一些問題。
本程序計算模塊對於輸入算式的要求中有:全部負數必須用小括號括起來,可是銜接的用戶界面並無對這個要求做出檢查,致使本應合法的算式被斷定成非法。
改進方法:使用中間層,若是用戶輸入不知足核心模塊要求,根據實際狀況給前端反饋錯誤或處理成能夠知足要求的輸入格式。