胡云峰
摘 要:在小學低年級數學教學中,口算的練習是一個很重要的組成部分,加大練習量,是提高學生口算能力的最有效途徑。文章論述了一種通過計算機程序自動生成口算練習題的實現方式。
關鍵詞:程序設計;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