paperOne基于java web的简易四则运算出题网站
需求概要
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的简易四则运算出题网站的更多相关文章
- 结对编程——paperOne基于java web的简易四则运算出题网站
项目成员:张金生 张政 需求分析: 1.要进行四则运算: 2.运算题目随机: 3.进行对错判断: 4.整数运算. 程序概要: 1.用JSP实现: 2.用户可选择题目数量: 3.答题页用表格列出 ...
- 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写
基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...
- 基于 Java Web 的毕业设计选题管理平台--选题报告与需求规格说明书
一.选题报告 目录 团队名称 团队成员 项目名称 项目描述 创新与收益 用户场景分析 真实用户调研 未来市场与竞争 项目导图 比例权重 总结 1.团队名称--指南者团队 2.团队成员 孔潭活:2015 ...
- 【Java Web】简易商品信息管理系统——首个Web项目
正文之前 在学习了一段时间的Java Web的内容之后,当然需要有个项目来练练手,我相信大多数人的首选项目都是信息管理系统吧,所以我选择了商品信息管理系统 目前项目源码已全部上传至GitHub,欢迎大 ...
- 【原创】三分钟教你学会MVC框架——基于java web开发(2)
没想到我的上一篇博客有这么多人看,还有几位看完之后给我留言加油,不胜感激,备受鼓励,啥都别说了,继续系列文章之第二篇.(如果没看过我第一篇博客的朋友,可以到我的主页上先浏览完再看这篇文章,以免上下文对 ...
- 结对编程——paperOne基于java的四则运算 功能改进
项目成员:张金生 张政 由于新的需求,原本使用JSP的实现方式目前改为Java实现,即去除了B/S端. 需求分析: 1.四则运算要满足整数运算.分数运算两种: 2.运算题目随机,并且可以打印题 ...
- 【原创】三分钟教你学会MVC框架——基于java web开发(1)
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法. ...
- 基于JAVA WEB的医药管理系统
学习上可以模仿,但是不可以抄袭! 附加百度链接:http://wenku.baidu.com/link?url=_r44vGCi8pcm6o44YCvkcHGoT_XhB8jURnweao2YVo1j ...
- 基于 Java Web 的毕业设计选题管理平台--测试报告与用户手册
一.测试报告 1.兼容性测试 功能 描述 效果 Chrome浏览器 FireFox浏览器 IE浏览器 war 端浏览器 管理员登录 管理员用户登录功能 弹出“登录成功”对话框,进入到毕业设计选题管理平 ...
随机推荐
- Asp调用存储过程,command.CreateParameter 参数值的类型说明
Asp调用存储过程,command.CreateParameter 参数值的类型说明 Asp调用各种存储过程,包括带参数,无参数,输入输出参数,带返回值等. 1,调用没有参数的存储过程 <% s ...
- 马尔可夫毯(Markov blanket)
马尔可夫毯(Markov blanket) 马尔科夫毯,是满足如下特性的一个最小特征子集:一个特征在其马尔科夫毯条件下,与特征域中所有其他特征条件独立.设特征T的马尔科夫毯为MB(T),则上述可表示为 ...
- c#使用 HtmlAgilityPack来进行抓取和解析来获得table表格信息
项目上要用到抓取网页,最后选用了HtmlAgilityPack来进行. 官网地址:https://html-agility-pack.net/,可以看一下 基础的: // From File var ...
- java日志框架log4j详细配置及与slf4j使用教程
一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” 1 2 3 4 5 <dependen ...
- [webapp]ios safari 正确使用js跳转
在safari上,以往屡试不爽的location.href = url; 变得不好用了.使用该方法跳转到新的网页,无法使用后退按钮回到上个页面.想想也是,直接修改值得方式跳转总是怪怪的,但是从刚学网页 ...
- Macaca上手体验
在研究了一段时间Appium后,尝试对另一个框架做实验——Macaca,阿里的开源测试框架,该框架不只适合移动端,同样适用于web端,可谓是方便的很啊~ 同时支持js.java.python.封装好的 ...
- SQL语句汇总(一)——数据库与表的操作以及创建约束
首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉. 前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句.SQL语句虽不能说很多,但稍有时间不写就容易 ...
- [Lua] 迭代器 闭合函数 与 泛型for
首先看看一下闭合函数(closure),见如下代码: function newCounter() local i = 0 -- 非局部变量(non-local variable) return fun ...
- python3安装与环境配置和pip的基本使用
本文环境 系统: Windows10 Python版本: 3.6 安装 python安装包下载 可以选择安装版和解压版 安装版一键安装, 安装过程注意选择安装位置, xx To Path选项(勾选), ...
- Python中remove,pop,del的区别
先上题:写出最终打印的结果 a = [1, 2, 3, 4] for x in a: a.remove(x) print(a) print("=" * 20) b = [1, 2, ...