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