软件工程HW1-四则运算软件

题目描述

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

项目链接

我的项目

项目运行截图

1110276-20170305222447985-1444847145.png

个人软件过程

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

1):需求分析

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

2):功能设计

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

3):设计实现

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

4):代码说明

 /**
       函数:生成一个运算式。
       具体介绍:整数=整数/1。
                 真分数=分子/分母。
                 一个数看成是两部分组成,分子和分母。
     */
     public static String[] CreateFormulaRandom() {  
        String[] formula=new String[4];
        int[] temp= new int[6];
        Random random = new Random();
        for(int j=0;j<=2;j+=2){
            int flag = random.nextInt(2);//flag为1,随机生成一个整数;flag为0,随机生成一个真分数
            if (flag == 1) 
            {
                temp[j]=CreateIntRandom(100);
                temp[j+1]=1;
                formula[j]=temp[j]+"";
            } else {
                 temp[j+1]=CreateIntRandom(100); //分母
                 temp[j]=CreateIntRandom(temp[j+1]);//分子 注:先生成分母,控制分子小于分母
                 formula[j]=temp[j]+"/"+temp[j+1];
            }
        }
        formula[1]=CreateOperator(); //随机生成运算符
        switch (formula[1]) {  //计算结果也是用分子和分母表示,分子存放在temp[4],分母存放在temp[5]
        case "+":
            temp[4]=temp[0]*temp[3]+temp[1]*temp[2];
            temp[5]=temp[1]*temp[3];
            break;
        case "-":
            temp[4]=temp[0]*temp[3]-temp[1]*temp[2];
            temp[5]=temp[1]*temp[3];
            break;
        case "*":
            temp[4]=temp[0]*temp[2];
            temp[5]=temp[1]*temp[3];
            break;
        case "/":
            temp[4]=temp[0]*temp[3];
            temp[5]=temp[1]*temp[2];
            break;
        }
        int mdivisor=gcd(temp[4],temp[5]);//使用辗转相除法化求得最大公约数
        temp[4]=temp[4]/mdivisor;
        temp[5]=temp[5]/mdivisor;
        if(temp[5]!=1)//如果temp[5]分母不是1,最后结果是分式表示。temp[5]分母是1,最后结果用整数表示。
            formula[3]=temp[4]+"/"+temp[5];
        else
            formula[3]=temp[4]+"";
        return formula;
    }
     <!-- 1:将用户输入的题目数参数传到服务器生成“运算式数组”返回(数组包括了题目的代码) -->
     <!-- 2:将jsp返回的正确答案数组转成js数组 -->
     <!-- 3:用户输入答案后,前端的js处理用户输入的对与错 -->
     <table>
                <%
                    for (int i = 0; i < number; i++) {
                %>
                <tr>
                    <td><%=formulas[i][0]%></td><!-- 第一个运算式-->
                    <td><%=formulas[i][1]%></td><!-- 运算符-->
                    <td><%=formulas[i][2]%></td><!-- 第二个运算式-->
                    <td>=</td>
                    <td><input type="text" id=<%="re" + i%>></td><!-- 用户答题输入框-->
                    <td id=<%="tick" + i%>></td><!-- js处理用户输入后,给出对或错-->
                </tr>
                <%
                    }
                %>
                <tr>
                    <td>
                        <button id="pacman2" type="button" onclick="check()">交</button>                                                    <!-- 将用户输入提交给js处理-->
                    </td>
                </tr>
            </table>
       //服务器端生成运算式(包括标准答案)
        request.setCharacterEncoding("UTF-8");
    int number = Integer.parseInt(request.getParameter("number"));
    String[][] formulas =new String[number][4];
    for (int i = 0; i < number; i++) {
         formulas[i] = ArithmeticFunc.CreateFormulaRandom();

    }
     <!-- 此处代码:将java数组转化成js数组-->
     <%
        for(int i=0;i<number;i++){
        %>
            jsresultArr[<%=i%>]='<%=formulas[i][3]%>';//注意单引号
        <%}                                               //(formulas[i][3]存储的内容类似:12/13)
        %>                                                //如果没有单引号的话,jsresultArr[<%=i%>]存储
                                                                  //的是12/13计算后的结果
                                                                  //这个bug调试了long long time ,差点放弃!
             

整体代码思路:

   1:后端服务器返回运算式(包括运算式的答案)。

   2:前端js处理用户输入并给出对错。

总结:

   1:注意程序模块化。算法类的编程比赛,代码量少,讲求代码的运行效率。之前都是参加这类的比赛,转化成软件
      工程的方法很难适应。因为每次模块化,都觉的效率低好多。

   2:语法的基础知识要打牢。调试java数组转化成js数组,使用单引号和不使用单引号的功能不一样,调试很久很久。
   
   3:知识要回顾。上学期才学的web编程,一个多月不用都生疏了,还好当初上课把重要的知识点都写成了一张张的便
      利贴,这次帮助了不少。
   
   4:实践很重要。看了半本的《构建之法》,软件的构建是很优美的事情,读着觉得很好,实施起来还是蛮难的。

   ps:写博客还蛮好的,可以把自己学的东西记录下来。毕竟好记性不如烂笔头。好后悔刷过的那么多的算法题都没留
      下来。

PSP(Personal Software Process)表格

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

转载于:https://www.cnblogs.com/Smile-BCZ/p/6501957.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值