家裏小朋友讀一年級了,最近天天都有一些10之內的加減法口算練習,做爲程序員爸爸,天然也是想辦法可以偷懶,讓電腦出題,給小朋友作些練習。因而,本身在業餘時間開發了一個四則運算算式生成器,名爲:CalculateIt2。項目是開源的,源碼地址是:https://github.com/daxnet/CalculateIt2。也能夠在標準的.NET Framework 4.6.1的項目中,經過nuget來引用這個類庫,nuget ID是:CalculateIt2.Engine。爲何名字後面有一個「2」呢?不是說這個項目比較二,而是以前作過一個簡單的版本,可是功能太差,就被拋棄了。如今是第二個版本。git
首先,打開Visual Studio 2015,新建一個.NET Framework 4.6.1的控制檯應用程序,在項目上點擊鼠標右鍵,選擇Manage NuGet Packages,打開包管理界面,在搜索欄中輸入CalculateIt2.Engine,此時就能夠將本類庫添加到項目中:程序員
在Program.cs中,輸入如下代碼:github
class Program { static void Main(string[] args) { var formation = "{10}+-*/|3"; var equation = new ArithmeticEquationGenerator(formation, new AvoidNegativeResultRule(), new DivisibilityEnsuranceRule()); for (var i = 0; i < 10; i++) { var calculation = equation.Generate(); Console.WriteLine($"{calculation.ToFormattedString(SpacingOption.Thin)} = {calculation.Value}"); } } }
以上代碼會產生10個10之內,包含3個計算因子的四則混合運算算式,以下:服務器
此算式生成器類庫(CalculateIt2.Engine)不只能夠根據指定的算式格式產生算式,並且還能自定義算式生成規則,並使用生成的算式產生各類不一樣的試題題型。ide
在ArithmeticEquationGenerator類的構造函數中,第一個參數指定了須要生成的算式格式,例如,在上例的格式字符串{10}+-*/|3中:函數
在ArithmeticEquationGenerator類的構造函數的第二個以後的參數中,指定了算式生成規則的類的實例。這些類都實現了CalculateIt2.Engine.Rules.IRule接口,目前在CalculateIt2.Engine類庫中提供瞭如下幾種生成規則:測試
除此以外,開發者能夠本身擴展IRule接口,定義算式生成的一些特殊規則,好比:在算式中避免出現0這個因子。orm
目前支持三種題型的試題生成:標準題,填空題和比大小。不一樣題型的試題生成器都須要繼承於CalculateIt2.Engine.Generation.QuestionGenerator{T}抽象類。目前默認提供了這三種題型的試題生成:blog
固然,開發者能夠根據須要實現更多的題型。一個for循環下來,小朋友們要哭了。繼承
此算式生成器使用了組合模式和經典Visitor模式,並結合動態Visitor模式提供了額外的功能。如下是主要類型的類圖(點擊查看大圖),具體的實現細節就很少介紹了,你們能夠參考源代碼。
我結合DocX這個開源類庫,寫了一個算術測試試卷的生成軟件(就是一個控制檯程序),它可使用CalculateIt2.Engine類庫產生10之內加減法的測試試卷,並輸出到一個Microsoft Word文檔,下面是效果:
請慎重幹相似的事情,這樣作會讓小朋友不喜歡你的。
這個類庫我本身搭建了Jenkins服務器進行持續集成和nuget包的分發,接下來打算介紹一下這方面的內容。