软件工程HW1-四则运算软件
题目描述
程序自动生成小学四则运算题目,用户输入每道题的答案之后,将答错的题目标出并计算此次答题的正确率。
项目链接
项目运行截图

个人软件过程
此次开发的四个步骤: 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.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-四则运算软件的更多相关文章
- 现代软件工程HW1:词频统计
作业详细要求:http://www.cnblogs.com/denghp83/p/8627840.html 基本功能 1. 统计文件的字符数(只需要统计Ascii码,汉字不用考虑,换行符不用考虑,'\ ...
- 结对编程——四则运算器(UI第十组)
博客目录: 一.问题描述 二.设计思路 三.UI开发过程 四.对接过程 ...
- 小学四则运算结对项目报告【GUI】
写在前面 这次的结对项目我做了很长时间,感触也很多.在这次项目中我使用了Java GUI作为和用户的交互方式,但是在上Java课的时候我对GUI和事件驱动这里并没有学的多好,可能是当时对编程还没有什么 ...
- 作业6 分析项目的NABCD和项目的产品Backlog
项目scrum:邵家文 NABCD模型分析 N(Need 需求)根据采访用户下面可以得出用户的基本需求:1.小孩说:我想要做适合自己能力的四则运算2.小孩说:我想这个四则运算软件里面的题目越做越提高自 ...
- 第三周结对项目--小学生四则运算CAI软件汇报及总结(UI/web)
前言: 这周是和我队友苏卫喜一起结对开发,我主要是写项目文档需求分析,她是通过我的需求文档来进行做思维导图,之后我们通过思维导图一起讨论用户界面设计. 以下就是我的需求分析1.0版本 1. 软件名 ...
- sprint初步计划(第一天)
一.现状 小组成员初步了解四则运算程序编写大概内容,进行简单的讨论.只知道大概的流程,实际还没做出.现在明确目标是把我们写Java的四则运算变成一个手机APP,关于手机ap,我们还不是很了解,所以需要 ...
- 结对作业-四则运算GUI
目录: 一.项目地址二.PSP三.接口设计四.计算模块接口的设计与实现过程五.计算模块接口部分的性能改进六.计算模块部分单元测试展示七.计算模块部分异常处理说明八.界面模块的详细设计过程九.界面模块与 ...
- Beta博客总结
描述项目预期计划和现实进展 冲刺 时间 预期任务以及预估时间 现实完成情况以及实际用时 冲刺1 12.4 修改等级答题界面:30,修改获取用户信息接口:30 修改等级答题界面:60,修改获取用户信息接 ...
- 四则运算结对编程(GUI)
四则运算GUI coding地址:https://git.dev.tencent.com/qyj814/GUI.git 结对伙伴:李梦宇 一.题目要求 定制出题要求.每次出题时用户都可以在界面上定制如 ...
随机推荐
- MySQL-InnoDB引擎
InnoDB存储引擎支持事务,其设计目标主要面向在线事务(OLTP)应用,其特点是: 行锁设计,支持外键,并支持类似于Oracle的非锁定读,即默认读取操作不会产生锁,从MySQL5.5.8 开始,I ...
- 总结jq的一些特效
Jquery代码总结 1.轮播图: <script src="jquery-1.8.3.min.js"></script><script> ...
- Android 开发中常见的注意点
这里总结了Android开发中常用的注意点.只有总结,没有展开举例讲解,展开的话,一个点都可以写一篇文章了..... 这类问题都一定不要犯. 重要的事情说三遍!!! 说三遍!!! 遍!!! 资源 不允 ...
- 纯CSS实现垂直居中的7种方法
今天申请博客通过了,给大家讲讲我所看到过的纯css实现垂直居中的各种方法.为什么要把它作为第一篇文章呢?因为这是我刚开始接触前端学到的对我最有用的知识,希望大家也可以从中获益! 在CSS中实现水平居中 ...
- .Net Reactor 5脱壳教程
今天别人发来一个.Net的DLL让我脱壳,第一步自然是先扔进de4dot 我这个de4dot 是集成了 Ivancito0z / TheProxy / PC-RET 4.9mod / wuhenso ...
- statement和preparedstatement的区别
在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象.无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和 ...
- BYS推荐MS前端PhoneCall面试问题整理-1
1. SQL: 查出产品对应的销售数量,会用到2个表之间的连接: select Products.ProductName, Sales.SalesAmount from Product left ou ...
- datagrid实现行的上移和下移(转)
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- 【Linux Shell】uname命令行
常用命令uname -v # uname -i #uname -a dream361@master:~$ uname -n #主机名称 master dream361@master:~$ uname ...
- collection 模块
关于一些 特殊数据类型的模块 namedtuple顾名思义,一个带有名字的元祖,他也是跟对象有关的一个 from collections import namedtuple phone = named ...