201571030310/201571030329《小学四则运算训练软件》结对项目报告
一.項目源碼。
Github地址:https://github.com/loadrove/SoftWareTest
二.項目報告。
1.需求分析:
?(1)由計算機從題庫文件中隨機選擇20道加減乘除混合算式,用戶輸入算式答案,程序檢查答案是否正確,每道題正確計5分,錯誤不計分,20道題測試結束后給出測試總分;
?(2)題庫文件可采用實驗二的方式自動生成,也可以手工編輯生成,文本格式如下:
? ? ?
? ??(3)程序為用戶提供三種進階四則運算練習功能選擇:百以內整數算式(必做)、帶括號算式、真分數算式練習;
? (4)程序允許用戶進行多輪測試,提供用戶多輪測試分數柱狀圖,示例如下:
?
? ? ?(5)程序記錄用戶答題結果,當程序退出再啟動的時候,可為用戶顯示最后一次測試的結果,并詢問用戶可否進行新一輪的測試;
? (6)測試有計時功能,測試時動態顯示用戶開始答題后的消耗時間。
? (7)程序人機交互界面是GUI界面(WEB頁面、APP頁面都可),界面支持中文簡體。
2.軟件設計:
? (1)設計流程圖: ?
? ? ? ? ? ? ? ?? ?? ?
?(2)設計類圖
? ? ? ? ? ? ? ? ?
? 1> ReadFile類是讀取所有文件,將生成的算式全部讀出來,以棧的形式放入數組內;
? 2> Fraction類是關于分數的計算,分為真分數和假分數;
? 3> Calculate類是百內整數的加減乘除運算;
? 4> Textview就是顯示最終運算結果,以及顯示分數,計時等功能。
?
(3)核心代碼:
? 1>讀取生成的文件:
? ? ?? ? ? ? ? ??
2>分數的運算:
public int getNumerator() { return c; } public int getDinominator() { return d; } public void selfTrim() { int maxCommon=commonDivisor(c,d); //求出兩個數的最大公約數。 c=c/maxCommon; //分式為最簡。 d=d/maxCommon; //整理正負號。 if((c>0&&d<0)||(c<0&&d<0)) { c=-c; d=-d; } } public String toString() //重寫tostring(). { if(c==0||d==1) //分母為1 直接輸出分子. { return Integer.toString(c); } return Integer.toString(c)+"/"+Integer.toString(d); //輸出c/d. } //----- plus public Fraction minus(Fraction f2) { int newNumerator=c*f2.getDinominator()-d*f2.getNumerator(); int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator); return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon); } //---- minus public Fraction plus(Fraction f2) { int newNumerator=c*f2.getDinominator()+d*f2.getNumerator(); int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator); return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon); } //----- mutiply public Fraction multiply(Fraction f2) //兩個分數相乘。 { int newNumerator=c*f2.getNumerator(); int newDinominator=d*f2.getDinominator(); int maxCommon=commonDivisor(newNumerator,newDinominator); return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon); } //----- divide public Fraction divide(Fraction f2) { if(f2.getNumerator()==0) { System.out.println("0不能做除數!"); System.exit(0); } Fraction result=new Fraction(c,d);return result.multiply(new Fraction(f2.getDinominator(),f2.getNumerator()));} //計算2個數的最大公約數。按絕對值計算。?
?
?
3>整數的計算:
private static Stack<String> count(Stack<String> result,boolean isF,int i) {if(!isF) {switch(i) {case 1:String str1=Integer.parseInt(result.pop())+Integer.parseInt(result.pop())+"";result.push(str1);break;case 2:String str2=-Integer.parseInt(result.pop())+Integer.parseInt(result.pop())+"";result.push(str2);break;case 3:String str3=Integer.parseInt(result.pop())*Integer.parseInt(result.pop())+"";result.push(str3);break;case 4:int x=Integer.parseInt(result.pop());String str4=Integer.parseInt(result.pop())/x+"";result.push(str4);break;}}else {switch(i) {case 1:if(fraction!=null) {int x1=Integer.parseInt(result.pop());int x2=Integer.parseInt(result.pop());Fraction f1=new Fraction(x2,x1);fraction=fraction.plus(f1);}else {int x1=Integer.parseInt(result.pop());int x2=Integer.parseInt(result.pop());Fraction f1=new Fraction(x2,x1);int y1=Integer.parseInt(result.pop());int y2=Integer.parseInt(result.pop());Fraction f2=new Fraction(y2,y1);fraction=f1.plus(f2);}break;case 2:if(fraction!=null) {int x1=Integer.parseInt(result.pop());int x2=Integer.parseInt(result.pop());Fraction f1=new Fraction(x2,x1);fraction=fraction.minus(f1);}else {int x1=Integer.parseInt(result.pop());int x2=Integer.parseInt(result.pop());Fraction f1=new Fraction(x2,x1);int y1=Integer.parseInt(result.pop());int y2=Integer.parseInt(result.pop());Fraction f2=new Fraction(y2,y1);}break;case 3:if(fraction!=null) {int x1=Integer.parseInt(result.pop());int x2=Integer.parseInt(result.pop());Fraction f1=new Fraction(x2,x1);fraction=fraction.multiply(f1);}else {int x1=Integer.parseInt(result.pop());int x2=Integer.parseInt(result.pop());Fraction f1=new Fraction(x2,x1);int y1=Integer.parseInt(result.pop());int y2=Integer.parseInt(result.pop());Fraction f2=new Fraction(y2,y1);fraction=f1.multiply(f2);}break;case 4:if(fraction!=null) {int x1=Integer.parseInt(result.pop());int x2=Integer.parseInt(result.pop());Fraction f1=new Fraction(x2,x1);fraction=fraction.divide(f1);}else {int x1=Integer.parseInt(result.pop());int x2=Integer.parseInt(result.pop());Fraction f1=new Fraction(x2,x1);int y1=Integer.parseInt(result.pop());int y2=Integer.parseInt(result.pop());Fraction f2=new Fraction(y2,y1);fraction=f2.divide(f1);}break;}}return result;}private static Stack<String> toNumberStack(Stack<String> s){Stack<String>numbers=new Stack<String>();for(int i=0;i<s.size();i++) {if(!s.get(i).equals("+")&&!s.get(i).equals("-")&&!s.get(i).equals("*")&&!s.get(i).equals("/")&&!s.get(i).equals("÷")) {System.out.print(s.get(i)+",");numbers.push(s.get(i));}}return numbers;}?(4)運行結果:? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ?? ? ??? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?測試結果統計:
? ?(5)本次設計的PSP:
| PSP2.1 | 任務內容 | 計劃共完成需要的時間(天) | 實際完成需要的時間(天) |
| Planning | 計劃 | 9 | 14 |
| Estimate | 估計這個任務需要多少時間,并規劃大致工作步驟 | 0.5 | 1.5 |
| Development | 開發 | 9 | 10.5 |
| Analysis | ?需求分析 (包括學習新技術) | 1 | 0.5 |
| ?Design Spec | 生成設計文檔 | 0.5 | 0.5 |
| Design Review | 設計復審?(和同事審核設計文檔) | 0.5 | 0.5 |
| Coding Standard | ?代碼規范?(為目前的開發制定合適的規范) | 0.5 | 0.5 |
| ?Design | ? 具體設計 | 1 | 1 |
| Coding | 具體編碼 | 4 | 6 |
| Code Review | 代碼復審 | 1 | 1 |
| ?Test | 測試(自我測試,修改代碼,提交修改) | 0.5 | 0.5 |
| Reporting | 報告 | 1.5 | 1.25 |
| Test Report | ·? 測試報告 | 0.5 | 0.5 |
| Size Measurement | ? 計算工作量 | 0.5 | 0.25 |
| Postmortem & Process Improvement Plan | ·? 事后總結?,并提出過程改進計劃 | 0.5 | 0.5 |
(6)請使用漢堡評價法給你的小伙伴一些點評。
?
??
? ? ?和我合作的小伙伴是一個思維能力很強的人,并且也很有想法,他的編程能力很強。在項目規劃設計前期,我原本的計劃是用Java設計一個面向對象的用戶界面,他提出了他的想法,他想用上學期所學的安卓開發技術來做一個APP用戶界面,我們通過討論,覺得他的方法可行,并且比用Eclipse中開發設計要簡單許多,通過使用他的策略,使得項目開發節省了很多時間。和他合作開發這個小項目的過程中,我提高了很多,改變了我的一些原來的軟件設計思路。兩個人通過努力,基本上實現了老師的項目要求,合作的也很愉快,期待能在以后的項目開發中繼續能和他合作。
(7)結對編程真的能夠帶來1+1>2的效果嗎?通過這次結對編程,請談談你的感受和體會。
? ? ? 結對編程真的能夠帶來1+1>2的效果,這是值得肯定的。在本次實驗項目開發中,我倆分工合作,我主要負責題目的運算和分數統計,和我的伙伴他主要開發設計用戶界面,以及計時器等;我們兩個人合作完成項目,能夠互相發現編程中存在的問題與不足,共同思考遇到的難題,兩個人的思考能夠把問題考慮的更加全面,也能讓算法更優,這些都是一個人無法做到的。我也在此次開發編程中發現自己的代碼比較亂,條理不是很清晰,這些是我的不足,我應該要向伙伴多學習和請教,使得我的代碼更加完美,讓自己的能力得到提高。我也確確實實感受到了團隊合作的力量有很大的潛力。
?
?
?
?
轉載于:https://www.cnblogs.com/yhy618/p/8690059.html
總結
以上是生活随笔為你收集整理的201571030310/201571030329《小学四则运算训练软件》结对项目报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [20180403]访问dba_auto
- 下一篇: 详解代理自动配置 PAC