使用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 |
对合做者的评价:
团队协做的重要性
最后,重要的事情,愉快的经历记录以下