使用JAVA編程語言,採用結對編程方式實現四則運算出題小程序,軟件基本功能要求以下:java
個人隊友:git
李玉瑩同窗的園子github
Github項目地址:express
需求分析:小程序
功能設計:dom
設計實現:編程語言
類圖:
函數
測試運行:學習
核心代碼:
隨機產生num個真分數運算式,計算結果,使得結果非負,並存入題庫文件
/** * 生成具備真分數運算式數的非負運算式 * @param num */ public void generateExpressionC(int num){ char[] operator=new char[]{'+','-'}; ArrayList<String> expression=new ArrayList<String>(); for(int i=0;i<num;i++){ int n=random.nextInt(3)+2; //3-5個運算符 ProperFraction[] proList=new ProperFraction[n+1]; for(int j=0;j<=n;j++){ proList[j]=new ProperFraction(); } char[] symbol=new char[n]; String ex=new String(); for(int j=0;j<n;j++){ char sm=operator[random.nextInt(2)]; ex+=proList[j].toString()+sm; proList[0]=proper.calProperFraction(proList[j], proList[j+1],sm); } ex+=proList[n]+"="+proList[0].toString(); if(proList[0].getNuma()/proList[0].getNumb()<0){ i--; } else{ expression.add(ex); } } doFile.WriteToFile("ArithmeticExpression.txt",expression); }
讀取文件最後N行
public ArrayList<String> readLastNLine(String path, long numRead) { File file=new File(path); ArrayList<String> result = new ArrayList<String>(); long count = 0; if (!file.exists() || file.isDirectory() || !file.canRead()){ return null; } RandomAccessFile fileRead = null; try{ fileRead = new RandomAccessFile(file, "r"); long length = fileRead.length(); if (length == 0L){ return result; } else{ long pos = length - 1; while (pos > 0){ pos--; fileRead.seek(pos); if (fileRead.readByte() == '\n'){ String line = fileRead.readLine(); result.add(line); count++; if (count == numRead){ break; } } } if (pos == 0){ fileRead.seek(0); result.add(fileRead.readLine()); } } } catch (IOException e){ e.printStackTrace(); } finally{ if (fileRead != null){ try{ fileRead.close(); } catch (Exception e){ } } } return result; }
經過標準答案和測試結果,計算正確的題數
/** * 經過標準答案和測試結果,計算正確的題數 * @param resHm * @param ansHm * @return */ private static int critical(HashMap<Integer, String> resHm,HashMap<Integer, String> ansHm){ int count=0; for(Map.Entry<Integer, String> resentry:resHm.entrySet()){ String resvalue = resentry.getValue() == null?"":resentry.getValue(); String ansvalue = ansHm.get(resentry.getKey())==null?"":ansHm.get(resentry.getKey()); if(resvalue.equals(ansvalue)){ count++; } } return count; }
總結:
本程序的主要難點在於生成不一樣類型的運算式用以知足用戶需求,基本上是實驗二的拓展部分,即對於真分數四則運算的設計實現
PSP:
PSP | 任務內容 | 計劃完成須要的時間(min) | 實際完成須要的時間(min) |
---|---|---|---|
計劃 | 50 | 50 | |
Estimate | 需求分析,函數實現 | 50 | 50 |
開發 | 100 | 100 | |
Analysis | 需求分析 | 5 | 10 |
Design Spec | 設計 | 30 | 30 |
Design Review | 設計複審 | 30 | 30 |
Design | 具體設計 | 30 | 30 |
Coding | 具體編碼 | 30 | 30 |
Code Review | 代碼複審,查找語法錯誤 | 2 | 2 |
Test | 測試 | 5 | 5 |
報告 | 30 | 30 | |
Test Report | 經測試,程序符合實驗要求,但嚴重脫離實際應用 | 20 | 20 |
Size Measurement | 主要工做量應該在GUI編程這塊 | 20 | 20 |
Postmortem | 此程序,確確實實的花了很多時間在Swing編程這塊,也是因爲第二個程序完成的太過倉促,在計算,生成,擴展功能這塊徹底重寫了以前的。對於java的GUI界面編程到此爲止吧,之後不會改進這個沒有多大用處的程序 | 20 | 20 |
對合做者的評價:
團隊協做的重要性
最後,重要的事情,愉快的經歷記錄以下