项目成员:张金生     张政

需求概要

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. mfc 类

    知识点 类的概念 类的相关术语 定义类 使用类 一.类的概念 简单的说类就是数据与函数综合体,它是用户自定义类型. 二.类的相关术语 类的实例称为对象. 类在定义中隐式地包含数据和操作函数,这种思想称 ...

  2. 26-[Boostrap]-全局css样式,组件,控件

    1.全局CSS样式 https://v3.bootcss.com/css/ <!DOCTYPE html> <html lang="zh-CN"> < ...

  3. 33 -FTP文件传输

    1.需求 2.流程图 3.自己的版本 4.老师评语 5.修改后的代码 6.修改后版本

  4. 排序算法:快速排序解析及Python实现

    关键词:分而治之.递归.计算速度.基准值 1. 什么是分而治之? 1.1 分而治之(divide and conquer)一种递归式方法 1.2 找出基线条件,这种条件必须尽可能简单 1.3 不断将问 ...

  5. 【正经向】NOIP2017烤后总结

    [正经向]NOIP2017烤后总结 Warning: 合法的评论(举例): 博主辣么juruo还来参加NOIP,不要脸 不合法的评论(举例): %%%%%博主太强了,我菜爆了 博主将删除不合法评论,& ...

  6. Linu之linux系统基础优化和基本命令

    Linux系统基础优化和基本命令 网络参数设定命令 ifconfig: 查询,设置网卡和ip等参数 ifup,ifdown: 脚本命令,更简单的方式 ip: 符合指令,直接修改上述功能 编辑网卡配置文 ...

  7. SecureCRT 用法总结

    SecureCRT 用法总结   1.下载与破解方法: Mac:https://www.jianshu.com/p/9427f12b1fdb Window:https://drive.google.c ...

  8. python 基础篇01

    一.python介绍年的圣诞节期间,吉多亿个文件的上传和下载千万张照片被分享,全部用倍年,为了打发圣诞节假期,年,第一个Python编译器诞生.它是用C语言实现的,并能够调用C语言的库文件.从一出生, ...

  9. 路由器终端常用linux命令汇总(持续更新)

    ls:显示文件名与相关属性 ls -al;ls -l;ls -a 第一列: d:表示目录,dir. -:表示文件. l:表示链接文件,linkfile. 接下来的字符三个为一组,且均为rwx这3个字母 ...

  10. 【坚持】Selenium+Python学习记录 DAY10

    2018/05/31-2018/06/1 [官方文档](https://www.jetbrains.com/help/pycharm/set-up-a-git-repository.html) 通过p ...