题目描述

程序自动生成小学四则运算题目,用户输入每道题的答案之后,将答错的题目标出并计算此次答题的正确率。

项目链接

我的项目

项目运行截图

个人软件过程

此次开发的四个步骤: 1):需求分析 2):需求与功能的对应 3):设计实现 4):测试运行

1):需求分析

  1. -能够生成运算题目
  2. -能够选择生成题目的个数
  3. -运算符:+,-,*,/。
  4. -能够自动统计答题率

2):功能设计

  1. -支持整数运算。
  2. -支持真分数运算。
  3. -能够处理用户输入,并判断对错,打分统计正确率。
  4. -用户输入生成题目的个数。

3):设计实现

  1. -随机生成整数和真分数
  2. -整数随机生成的范围在[0,100]
  3. -真分数由随机生成两个整数构成

4):代码说明

  1. /**
  2. 函数:生成一个运算式。
  3. 具体介绍:整数=整数/1。
  4. 真分数=分子/分母。
  5. 一个数看成是两部分组成,分子和分母。
  6. */
  7. public static String[] CreateFormulaRandom() {
  8. String[] formula=new String[4];
  9. int[] temp= new int[6];
  10. Random random = new Random();
  11. for(int j=0;j<=2;j+=2){
  12. int flag = random.nextInt(2);//flag为1,随机生成一个整数;flag为0,随机生成一个真分数
  13. if (flag == 1)
  14. {
  15. temp[j]=CreateIntRandom(100);
  16. temp[j+1]=1;
  17. formula[j]=temp[j]+"";
  18. } else {
  19. temp[j+1]=CreateIntRandom(100); //分母
  20. temp[j]=CreateIntRandom(temp[j+1]);//分子 注:先生成分母,控制分子小于分母
  21. formula[j]=temp[j]+"/"+temp[j+1];
  22. }
  23. }
  24. formula[1]=CreateOperator(); //随机生成运算符
  25. switch (formula[1]) { //计算结果也是用分子和分母表示,分子存放在temp[4],分母存放在temp[5]
  26. case "+":
  27. temp[4]=temp[0]*temp[3]+temp[1]*temp[2];
  28. temp[5]=temp[1]*temp[3];
  29. break;
  30. case "-":
  31. temp[4]=temp[0]*temp[3]-temp[1]*temp[2];
  32. temp[5]=temp[1]*temp[3];
  33. break;
  34. case "*":
  35. temp[4]=temp[0]*temp[2];
  36. temp[5]=temp[1]*temp[3];
  37. break;
  38. case "/":
  39. temp[4]=temp[0]*temp[3];
  40. temp[5]=temp[1]*temp[2];
  41. break;
  42. }
  43. int mdivisor=gcd(temp[4],temp[5]);//使用辗转相除法化求得最大公约数
  44. temp[4]=temp[4]/mdivisor;
  45. temp[5]=temp[5]/mdivisor;
  46. if(temp[5]!=1)//如果temp[5]分母不是1,最后结果是分式表示。temp[5]分母是1,最后结果用整数表示。
  47. formula[3]=temp[4]+"/"+temp[5];
  48. else
  49. formula[3]=temp[4]+"";
  50. return formula;
  51. }
  1. <!-- 1:将用户输入的题目数参数传到服务器生成“运算式数组”返回(数组包括了题目的代码) -->
  2. <!-- 2:将jsp返回的正确答案数组转成js数组 -->
  3. <!-- 3:用户输入答案后,前端的js处理用户输入的对与错 -->
  4. <table>
  5. <%
  6. for (int i = 0; i < number; i++) {
  7. %>
  8. <tr>
  9. <td><%=formulas[i][0]%></td><!-- 第一个运算式-->
  10. <td><%=formulas[i][1]%></td><!-- 运算符-->
  11. <td><%=formulas[i][2]%></td><!-- 第二个运算式-->
  12. <td>=</td>
  13. <td><input type="text" id=<%="re" + i%>></td><!-- 用户答题输入框-->
  14. <td id=<%="tick" + i%>></td><!-- js处理用户输入后,给出对或错-->
  15. </tr>
  16. <%
  17. }
  18. %>
  19. <tr>
  20. <td>
  21. <button id="pacman2" type="button" onclick="check()"></button> <!-- 将用户输入提交给js处理-->
  22. </td>
  23. </tr>
  24. </table>
  1. //服务器端生成运算式(包括标准答案)
  2. request.setCharacterEncoding("UTF-8");
  3. int number = Integer.parseInt(request.getParameter("number"));
  4. String[][] formulas =new String[number][4];
  5. for (int i = 0; i < number; i++) {
  6. formulas[i] = ArithmeticFunc.CreateFormulaRandom();
  7. }
  1. <!-- 此处代码:将java数组转化成js数组-->
  2. <%
  3. for(int i=0;i<number;i++){
  4. %>
  5. jsresultArr[<%=i%>]='<%=formulas[i][3]%>';//注意单引号
  6. <%} //(formulas[i][3]存储的内容类似:12/13)
  7. %> //如果没有单引号的话,jsresultArr[<%=i%>]存储
  8. //的是12/13计算后的结果
  9. //这个bug调试了long long time ,差点放弃!

整体代码思路:

  1. 1:后端服务器返回运算式(包括运算式的答案)。
  2. 2:前端js处理用户输入并给出对错。

总结:

  1. 1:注意程序模块化。算法类的编程比赛,代码量少,讲求代码的运行效率。之前都是参加这类的比赛,转化成软件
  2. 工程的方法很难适应。因为每次模块化,都觉的效率低好多。
  3. 2:语法的基础知识要打牢。调试java数组转化成js数组,使用单引号和不使用单引号的功能不一样,调试很久很久。
  4. 3:知识要回顾。上学期才学的web编程,一个多月不用都生疏了,还好当初上课把重要的知识点都写成了一张张的便
  5. 利贴,这次帮助了不少。
  6. 4:实践很重要。看了半本的《构建之法》,软件的构建是很优美的事情,读着觉得很好,实施起来还是蛮难的。
  7. ps:写博客还蛮好的,可以把自己学的东西记录下来。毕竟好记性不如烂笔头。好后悔刷过的那么多的算法题都没留
  8. 下来。

PSP(Personal Software Process)表格

PSP2.1 Personal Software Process Stages Time (%) Senior Student Time (%)
Planning 计划 8 15
· Estimate 估计这个任务需要多少时间 8 15
Development 开发 5 10
· Analysis 需求分析 (包括学习新技术) 1 1
· Design Spec 生成设计文档 1 1
· Design Review 设计复审 0 0
· Coding Standard 代码规范 3 3
· Design 具体设计 3 3
· Coding 具体编码 6 6
· Code Review 代码复审 1 1
· Test 测试(自我测试,修改代码,提交修改) 3 3
Reporting 报告 0 0
·Test Report 测试报告 0 0
· Size Measurement 计算工作量 1 1
·Postmortem & Process Improvement Plan 并提出过程改进计划 0 0

软件工程HW1-四则运算软件的更多相关文章

  1. 现代软件工程HW1:词频统计

    作业详细要求:http://www.cnblogs.com/denghp83/p/8627840.html 基本功能 1. 统计文件的字符数(只需要统计Ascii码,汉字不用考虑,换行符不用考虑,'\ ...

  2. 结对编程——四则运算器(UI第十组)

    博客目录: 一.问题描述                   二.设计思路                   三.UI开发过程                       四.对接过程       ...

  3. 小学四则运算结对项目报告【GUI】

    写在前面 这次的结对项目我做了很长时间,感触也很多.在这次项目中我使用了Java GUI作为和用户的交互方式,但是在上Java课的时候我对GUI和事件驱动这里并没有学的多好,可能是当时对编程还没有什么 ...

  4. 作业6 分析项目的NABCD和项目的产品Backlog

    项目scrum:邵家文 NABCD模型分析 N(Need 需求)根据采访用户下面可以得出用户的基本需求:1.小孩说:我想要做适合自己能力的四则运算2.小孩说:我想这个四则运算软件里面的题目越做越提高自 ...

  5. 第三周结对项目--小学生四则运算CAI软件汇报及总结(UI/web)

    前言: 这周是和我队友苏卫喜一起结对开发,我主要是写项目文档需求分析,她是通过我的需求文档来进行做思维导图,之后我们通过思维导图一起讨论用户界面设计. 以下就是我的需求分析1.0版本 1.   软件名 ...

  6. sprint初步计划(第一天)

    一.现状 小组成员初步了解四则运算程序编写大概内容,进行简单的讨论.只知道大概的流程,实际还没做出.现在明确目标是把我们写Java的四则运算变成一个手机APP,关于手机ap,我们还不是很了解,所以需要 ...

  7. 结对作业-四则运算GUI

    目录: 一.项目地址二.PSP三.接口设计四.计算模块接口的设计与实现过程五.计算模块接口部分的性能改进六.计算模块部分单元测试展示七.计算模块部分异常处理说明八.界面模块的详细设计过程九.界面模块与 ...

  8. Beta博客总结

    描述项目预期计划和现实进展 冲刺 时间 预期任务以及预估时间 现实完成情况以及实际用时 冲刺1 12.4 修改等级答题界面:30,修改获取用户信息接口:30 修改等级答题界面:60,修改获取用户信息接 ...

  9. 四则运算结对编程(GUI)

    四则运算GUI coding地址:https://git.dev.tencent.com/qyj814/GUI.git 结对伙伴:李梦宇 一.题目要求 定制出题要求.每次出题时用户都可以在界面上定制如 ...

随机推荐

  1. Learn c for the Second day

    十六进制对应的二进制码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0       ...

  2. 【CPP】数据和C

    %f是浮点型的占位符,%f.2表示显示到小数点后两位,.2称为修饰词 变量可以在程序执行过程中变化和指定,而常量不可以. [数据类型关键字]int long short unsigned char  ...

  3. HTML 超链接 表格

    1...超链接 <a href="网址" target="_blank"> 被点击的文字</a> 如果把 target 属性设置为&qu ...

  4. 经纬度坐标数据处理——基于R

    ggmap w=read.csv("LA.Neighborhoods.csv") w=data.frame(w,density=w$Population/w$Area) u=w[, ...

  5. java 数组的冒泡排序

    冒泡排序 (1)冒泡排序算法的运作如下:(从后往前) 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最 ...

  6. Cache替换算法:LRU与LFU的区别

    LFU(Least Frequently Used)最近最少使用算法.它是基于“如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小”的思路.LRU(Least Rece ...

  7. MBProgressHUD1.0.0源码解析

    MBProgressHUD是一个显示提示窗口的三方库,常用于用户交互.后台耗时操作等的提示.通过显示一个提示框,通知用户操作或任务的执行状态:同时,利用动画效果,降低用户等待的焦虑心理,增强用户体验. ...

  8. IPv4地址分类及子网划分

    IPv4地址分为A,B,C,D,E类: A类:1.0.0.0~126.255.255.255,默认子网掩码/8,即255.0.0.0 (其中127.0.0.0~127.255.255.255为环回地址 ...

  9. VRTK实现瞬移需要添加的脚本

    进入一个新的公司,boss让实现漫游,但是新公司的Unity版本是5.6,我之前的瞬移插件不好用了,无奈之下找到一个我不熟悉的插件VRTK,但是查了很多资料也没有实现瞬移.经过自己查脚本与实验终于得到 ...

  10. RoutePrefix和Route 路由前缀

    使用应用到某个控制器中所有操作的路由前缀来批注该控制器. web api /// <summary> ////// </summary> [RoutePrefix(" ...