数学口算练习自动生成程序的设计与实现

2018-03-16 13:19胡云峰
科学与财富 2018年2期
关键词:程序设计

胡云峰

摘 要:在小学低年级数学教学中,口算的练习是一个很重要的组成部分,加大练习量,是提高学生口算能力的最有效途径。文章论述了一种通过计算机程序自动生成口算练习题的实现方式。

关键词:程序设计;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 set) {

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 hs=new 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

猜你喜欢
程序设计
基于SolidWorks和VBA的电机阶梯轴建模程序设计
高职Java程序设计课程体系建设思考
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
基于LabVIEW的车载充电机控制程序设计
浅谈基于C语言的计算机软件程序设计
高职高专院校C语言程序设计教学改革探索
OBE理念下基于Greenfoot的Java程序设计课程教学改革
模块化程序设计在一体化检定平台中的应用
PLC梯形图程序设计技巧及应用