项目成员:张金生     张政

需求概要

1.运算数均为正整数

2.包含的运算符有+,-,*,/

3.除法运算结果为整除运算

4.批量生成题目并判题

核心功能分析

1.题目生成——java后端

  题目生成主要需要对操作数和符号进行生成,操作数由用户选择出题难度,程序划分出不同的难度来使用题目生成器达到对指定难度的题目进行生成。对于题目难度的控制,我们需要知道操作数的范围,需要使用到的符号列表以及括号的引入(括号引入待完善),根据这些参数就可以生成整数运算的不同难度的题目了。生成题目的结果因为包含数字和字符,所以可以使用String来返回。

  主体题目生成函数采取规定范围操作数和选取的符号分别随机生成,最后拼接的方式。其中除法运算相对特殊,为保证结果可以整除,可以使用随机的小因子乘以除数并重新赋值给被除数。除零错误可以在生成随机数时加偏移来避免。

  符号支持列表设计时可以使用枚举类型,这样用户可以选择生成难度的时候可以选择需要的符号,例如一年级只生成加减运算的题目。支持的符号操作可以这样定义

public enum SupportedOperation { ADD, MINUS, MULTIPLY, DIVIDE/*, SQUARE, CUBE, RADICAL*/, ALL; }

  其中被注释掉的运算符可以版本升级时选择性支持

  题目生成的核心函数的函数头可以这样定义:

public String generateQuestion(int numOfOperand, int rangeMin, int rangMax, boolean isInt,SupportedOperation[] operation, boolean bracket);

其中的参数分别代表:操作数数量,范围最小值,范围最大值,是否仅作整数运算并且结果为整数,需要支持的运算符列表,题目是否包含括号

2.对用户提交的答案进行评定——javascript前端

  用户提交的答案评定可使用js进行结果计算并给出,将题目获取后,调用eval函数对获取到的题目表达式计算的结果和用户输入值进行对比,再写入到结果栏,完成评分操作。

部分功能实现

题目生成

     public String generateQuestion(int numOfOperand, int rangeMin, int rangMax, boolean isInt,
SupportedOperation[] operation, boolean bracket) {
String question = "";
int[] ioperands = null;
double[] doperands = null;
SupportedOperation[] so = null;
if (numOfOperand < 2) {
System.out.println("操作数数量至少为2");
return "";
}
if (rangMax > 500) {
System.out.println("操作数数最大值不能超过500");
return "";
}
if (isInt) {
ioperands = new int[numOfOperand];
for (int i = 0; i < numOfOperand; i++) {
ioperands[i] = (int) (Math.random() * rangMax / 2 +1); }
question += ioperands[0];
//int sub = ioperands[0];
so = new SupportedOperation[numOfOperand-1];
for(int i = 0;i < operation.length;i++){
if(operation[i] == SupportedOperation.ALL){
operation = new SupportedOperation[4];
operation[0] = SupportedOperation.ADD;
operation[1] = SupportedOperation.MINUS;
operation[2] = SupportedOperation.MULTIPLY;
operation[3] = SupportedOperation.DIVIDE; }
}
int value = 0;
for(int j = 0;j<numOfOperand-1;j++){ so[j] = operation[(int)(Math.random()*operation.length)];
switch(so[j]){
case ADD:question = ioperands[j+1]+"+"+question;break;
case MINUS:question = ioperands[j+1]+"-"+question;break;
case MULTIPLY:question = ioperands[j+1]+"*"+question;break;
case DIVIDE:{
if(value < 1){
ioperands[j+1] = ioperands[j+1]*ioperands[j];
question =ioperands[j+1]+"/"+question; value++;
}
else{
j--;
}
}break;
default:System.out.println("sb");break;
}
}
System.out.println(question);
ScriptEngine se = new ScriptEngineManager().getEngineByName("JavaScript"); try {
Integer d = (Integer) se.eval(question);
System.out.println(d);
} catch (ScriptException e) {
e.printStackTrace();
} } else {
doperands = new double[numOfOperand];
for (int i = 0; i < numOfOperand; i++) {
doperands[i] = Math.random() * rangMax / 2;
}
} return question; }

答案评定

 <script type="text/javascript">
function compute() { for (var i = 1; i <= 20; i++) {
var a = "" + eval(document.getElementById("q" + i).innerHTML);
var auser = document.getElementById("a" + i).value;
if (a == auser) {
document.getElementById("r" + i).innerHTML = "正确";
} else {
document.getElementById("r" + i).innerHTML = "错误";
}
} }
</script>

题目难度设计

     public String generateSimpleQuestion() {
SupportedOperation[] operation = { SupportedOperation.ADD, SupportedOperation.MINUS };
return generateQuestion(2, 0, 20, true, operation, false);
} public String generateCommonQuestion() {
SupportedOperation[] operation = { SupportedOperation.ADD, SupportedOperation.MINUS,
SupportedOperation.MULTIPLY, SupportedOperation.DIVIDE };
return generateQuestion(3, 0, 30, true, operation, false);
} public String generateMediumQuestion() {
SupportedOperation[] operation = { SupportedOperation.ADD, SupportedOperation.MINUS,
SupportedOperation.MULTIPLY, SupportedOperation.DIVIDE };
return generateQuestion(4, 0, 50, true, operation, true);
} public String generateComplexQuestion() {
SupportedOperation[] operation = { SupportedOperation.ALL };
return generateQuestion(6, 0, 50, true, operation, true);
}

程序运行结果

以简单题目生成20道为例的运行结果:

以中等难度的题目生成20道为例的运行结果:

可进行的拓展

1.拓展操作数到浮点数

2.括号引入

3.更加丰富的运算符引入

结对编程感受

结对编程可以了解队友的编程习惯和解决问题的思路,学习对方的解决问题方式,而且当一个人遇到瓶颈的时候,另一个人可能会提前想出思路,多种解决方式的时候可以择优选择。这种工作模式有点像cpu的双核处理器,两个线程同时工作,一定程度上可以快速的开发项目,并减少代码合并带来的麻烦。这个工作模式以前也是尝试过的,尤其是主要作为指导在旁边跟进时效率不一定会很高,思维的协调不一定比直接看结果来的快,不过对于学习阶段很是受用。

项目源码地址:https://coding.net/u/jx8zjs/p/paperOne/git

git@git.coding.net:jx8zjs/paperOne.git

paperOne基于java web的简易四则运算出题网站的更多相关文章

  1. 结对编程——paperOne基于java web的简易四则运算出题网站

    项目成员:张金生     张政 需求分析: 1.要进行四则运算: 2.运算题目随机: 3.进行对错判断: 4.整数运算. 程序概要: 1.用JSP实现: 2.用户可选择题目数量: 3.答题页用表格列出 ...

  2. 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写

    基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...

  3. 基于 Java Web 的毕业设计选题管理平台--选题报告与需求规格说明书

    一.选题报告 目录 团队名称 团队成员 项目名称 项目描述 创新与收益 用户场景分析 真实用户调研 未来市场与竞争 项目导图 比例权重 总结 1.团队名称--指南者团队 2.团队成员 孔潭活:2015 ...

  4. 【Java Web】简易商品信息管理系统——首个Web项目

    正文之前 在学习了一段时间的Java Web的内容之后,当然需要有个项目来练练手,我相信大多数人的首选项目都是信息管理系统吧,所以我选择了商品信息管理系统 目前项目源码已全部上传至GitHub,欢迎大 ...

  5. 【原创】三分钟教你学会MVC框架——基于java web开发(2)

    没想到我的上一篇博客有这么多人看,还有几位看完之后给我留言加油,不胜感激,备受鼓励,啥都别说了,继续系列文章之第二篇.(如果没看过我第一篇博客的朋友,可以到我的主页上先浏览完再看这篇文章,以免上下文对 ...

  6. 结对编程——paperOne基于java的四则运算 功能改进

    项目成员:张金生     张政 由于新的需求,原本使用JSP的实现方式目前改为Java实现,即去除了B/S端. 需求分析: 1.四则运算要满足整数运算.分数运算两种: 2.运算题目随机,并且可以打印题 ...

  7. 【原创】三分钟教你学会MVC框架——基于java web开发(1)

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法. ...

  8. 基于JAVA WEB的医药管理系统

    学习上可以模仿,但是不可以抄袭! 附加百度链接:http://wenku.baidu.com/link?url=_r44vGCi8pcm6o44YCvkcHGoT_XhB8jURnweao2YVo1j ...

  9. 基于 Java Web 的毕业设计选题管理平台--测试报告与用户手册

    一.测试报告 1.兼容性测试 功能 描述 效果 Chrome浏览器 FireFox浏览器 IE浏览器 war 端浏览器 管理员登录 管理员用户登录功能 弹出“登录成功”对话框,进入到毕业设计选题管理平 ...

随机推荐

  1. Silverlight 图表控件 Visifire 常用属性

    主要介绍 Visifire 常用属性的设置,用来生成不同样式的图例 设置Chart的属 //设置title的值 // 创建一个标题的对象 Title title = new Title(); // 设 ...

  2. windows7 64位机上安装配置CUDA7.5(或8.0)+cudnn5.0操作步骤

    按照官网文档 http://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#axzz4TpI4c8v ...

  3. 20-[JavaScript]-BOM

    1.jsBom简介 jsBom = javascript browser object modelBOM指的是浏览器对象模型 Browser Object Model,它的核心就是浏览器. 2.Bom ...

  4. 【BZOJ3555】企鹅QQ

    蛤希. 用map会T. 只需要枚举删掉哪个字符,然后算出每个的hash值,sort一遍就行了. 用map会T!!! // It is made by XZZ #include<cstdio> ...

  5. P2939 [USACO09FEB]改造路Revamping Trails

    P2939 [USACO09FEB]改造路Revamping Trails 同bzoj2763.不过dbzoj太慢了,bzoj又交不了. 裸的分层图最短路. f[i][j]表示免费走了j条路到达i的最 ...

  6. java 迭代器只遍历了一次的解决方案

    /** * 注意:因为迭代器只能遍历一次 所以每次用完都要重新填充一次 否则会出现只替换了一次检查配置项的情况 * templateJsonIterator = templateJsonObject. ...

  7. JAVA StringUtils需要导入的包

    <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang --> <dependency> <g ...

  8. 利用Xilinx HLS实现LDPC译码器

    1. 概述 采用Xilinx HLS快速实现的部分并行,全流水的LDPC译码器. 环境:Vivado HLS 2018.2 码字:IEEE 802.16e 2/3A 算法:Min-Sum Algori ...

  9. How to access business objects with their related ObjectSpaces (Multi-Database Environment)

    https://www.devexpress.com/Support/Center/Question/Details/T565897/how-to-access-business-objects-wi ...

  10. 从零搭建HBase集群

    本文从零开始搭建大数据集群,涉及Linux集群安装搭建,Hadoop集群搭建,HBase集群搭建,Java接口封装,对接Java的C#类库封装 Linux集群搭建与配置 Hadoop集群搭建与配置 H ...