胡云峰
摘 要:在小学低年级数学教学中,口算的练习是一个很重要的组成部分,加大练习量,是提高学生口算能力的最有效途径。文章论述了一种通过计算机程序自动生成口算练习题的实现方式。
关键词:程序设计;HashSet;MIME協议
0引言
小学低年级的数学教学,注重学生计算能力的培养,而口算能力的训练,是其中一个重要组成部门。然而,巨大的习题需求量,加重了任课教师或者家长的出题负担,因此,一种由计算机自动生成练习题,并可直接打印的系统,就显得很有必要。
1.系统分析与设计
1.1 题型分析
小学一二年级数学教学,主要培养学生10以内加减运算、100以内的加减运算以及乘法口诀表的使用能力,在题型上,有单加减、单乘、连加连减、混加混减、加减乘混合等,一般每套练习题包含50道题目。
1.2 需求分析
根据题型及实际需要,系统向用户提供题型选择、生成题量设定、排版打印等功能。其中,题型选择功能实现用户选择题型,系统根据选择生成相对应的题目;题量设定功能向用户提供自主设定生成练习题数量的功能;排版打印功能实现将系统生成的练习题按照一定格式,自动生成WORD文档,并可直接打印的功能。
1.3 开发技术选择
考虑到用户的非专业性,系统要求简单易用、即点即用,因此,使用不用安装客户端的B/S模式及不使用数据库的技术手段就显得比较合适。本系统最终选择采用JSP+JavaBean模式[1]开发,成品放于WEB服务器上,使用户打开浏览器访问服务网址即可使用。
2.系统实现
2.1 练习题自动生成功能的实现
系统使用JSP+JavaBean的技术手段开发,逻辑实现部分,使用JavaBean实现。以10以内的加减法、100以内的加减法及乘法口诀练习题的生成为例,利用数组存放所生成的练习题,实现代码如下:
package com.hyf;
import java.util.*;
public class MyTools {
static int array[]=new int[10];
static ArrayList myList=new ArrayList();
public MyTools() {
for(int i=0;i<10;i++) {
array[i]=i; }} //练习题只由数字0—9构成,生成装有0—9共10个数字的数组
public static ArrayList withinTen() { //10以内的加减练习题生成
for(int i=0;i<10;i++) {
for(int j=0;j<10;j++) {
myList.add(i + " + " + j + " = "); //生成加法练习题
if(i>=j) myList.add(i + " - " + j + " = ");}} //减法练习题,控制被减数必须大于减数,避免出现负数
return myList; }
public static ArrayList withinHundred() { //100以内的加减练习题生成
for(int i=10;i<100;i++) {
for(int j=10;j<100;j++) {
if(i+j<=100) myList.add(i + " + " + j + " = ");
if(i>=j) myList.add(i + " - " + j + " = "); }} //减法练习题,控制被减数必须大于减数,避免出现负数
return myList; }
public static ArrayList multiplication() { //乘法口诀练习题生成
for(int i=1;i<10;i++) {
for(int j=1;j<=i;j++) {
myList.add(j + " × " + i + " = ");}}
return myList; }}
2.2 随机选取50道练习题功能的实现
学生进行练习时,综合考虑低年级学生注意力及能力的特点,结合考核要求,一般每套练习题包含50道题目。实现从生成的所有题目数组中随机地、不重复地抽取其中50道组成1套练习题,系统采用了HashSet对象及其只能存放不同的值的特性来实现。主要实现代码如下:
public void randomSet(int min, int max, int n, HashSet
if (n > (max - min + 1) || max < min) {
return; }
for (int i = 0; i < n; i++) {
// 调用Math.random()方法
int num = (int) (Math.random() * (max - min)) + min;
set.add(num); } // 利用HashSet的不能存放相同内容的特性,将不同的数存入HashSet中
int setSize = set.size(); // 如果存入的数小于指定生成的个数,则调用递归再生成剩余个数的随机数,如此循环,直到达到指定大小
if (setSize < n) {
randomSet(min, max, n - setSize, set);}} // 遞归
public int[] getArrayListSubscript(){ //返回随机50道题的数组
int subscript[]=new int[50];
int i=0;
HashSet
randomSet(0,100,50,hs);
for(Integer s:hs){
subscript[i]=s;
i++;}
return subscript;}
2.3 生成WORD文档功能的实现
在Java Web程序开发中,MIME 协议指示 MIME 用户代理如何显示附加的文件[2]。我们可以修改MIME协议的扩展Content-Disposition为attachment,当 Internet Explorer接收到请求后,它会激活文件下载对话框,以实现下载功能。
程序中,利用表格布局,将随机生成的50道题进行排版,对应WORD文档的一页,显示结果时设置MIME协议的扩展Content-Disposition为attachment,达到下载附件的效果。关键实现代码如下:
response.setHeader("Content-disposition","attachment;filename=" + java.net.URLEncoder.encode(xm, "UTF-8") + ".doc"); //设置协议头为attachment,文件名称设置为Request对象获取到的表单提交的值,文件类型为DOC
2.4系统运行效果
参考文献:
[1]贾志成,王云. JSP程序设计慕课版[M]. 北京:人民邮电出版社,2016:16.
[2]曾是土木人. header中Content-Disposition的作用[EB/OL]. http://www.cnblogs.com/hongfei/archive/2012/06/12/2546758.html,2017.12.18