胡云峰
摘 要:在小學(xué)低年級數(shù)學(xué)教學(xué)中,口算的練習(xí)是一個很重要的組成部分,加大練習(xí)量,是提高學(xué)生口算能力的最有效途徑。文章論述了一種通過計(jì)算機(jī)程序自動生成口算練習(xí)題的實(shí)現(xiàn)方式。
關(guān)鍵詞:程序設(shè)計(jì);HashSet;MIME協(xié)議
0引言
小學(xué)低年級的數(shù)學(xué)教學(xué),注重學(xué)生計(jì)算能力的培養(yǎng),而口算能力的訓(xùn)練,是其中一個重要組成部門。然而,巨大的習(xí)題需求量,加重了任課教師或者家長的出題負(fù)擔(dān),因此,一種由計(jì)算機(jī)自動生成練習(xí)題,并可直接打印的系統(tǒng),就顯得很有必要。
1.系統(tǒng)分析與設(shè)計(jì)
1.1 題型分析
小學(xué)一二年級數(shù)學(xué)教學(xué),主要培養(yǎng)學(xué)生10以內(nèi)加減運(yùn)算、100以內(nèi)的加減運(yùn)算以及乘法口訣表的使用能力,在題型上,有單加減、單乘、連加連減、混加混減、加減乘混合等,一般每套練習(xí)題包含50道題目。
1.2 需求分析
根據(jù)題型及實(shí)際需要,系統(tǒng)向用戶提供題型選擇、生成題量設(shè)定、排版打印等功能。其中,題型選擇功能實(shí)現(xiàn)用戶選擇題型,系統(tǒng)根據(jù)選擇生成相對應(yīng)的題目;題量設(shè)定功能向用戶提供自主設(shè)定生成練習(xí)題數(shù)量的功能;排版打印功能實(shí)現(xiàn)將系統(tǒng)生成的練習(xí)題按照一定格式,自動生成WORD文檔,并可直接打印的功能。
1.3 開發(fā)技術(shù)選擇
考慮到用戶的非專業(yè)性,系統(tǒng)要求簡單易用、即點(diǎn)即用,因此,使用不用安裝客戶端的B/S模式及不使用數(shù)據(jù)庫的技術(shù)手段就顯得比較合適。本系統(tǒng)最終選擇采用JSP+JavaBean模式[1]開發(fā),成品放于WEB服務(wù)器上,使用戶打開瀏覽器訪問服務(wù)網(wǎng)址即可使用。
2.系統(tǒng)實(shí)現(xiàn)
2.1 練習(xí)題自動生成功能的實(shí)現(xiàn)
系統(tǒng)使用JSP+JavaBean的技術(shù)手段開發(fā),邏輯實(shí)現(xiàn)部分,使用JavaBean實(shí)現(xiàn)。以10以內(nèi)的加減法、100以內(nèi)的加減法及乘法口訣練習(xí)題的生成為例,利用數(shù)組存放所生成的練習(xí)題,實(shí)現(xiàn)代碼如下:
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; }} //練習(xí)題只由數(shù)字0—9構(gòu)成,生成裝有0—9共10個數(shù)字的數(shù)組
public static ArrayList withinTen() { //10以內(nèi)的加減練習(xí)題生成
for(int i=0;i<10;i++) {
for(int j=0;j<10;j++) {
myList.add(i + " + " + j + " = "); //生成加法練習(xí)題
if(i>=j) myList.add(i + " - " + j + " = ");}} //減法練習(xí)題,控制被減數(shù)必須大于減數(shù),避免出現(xiàn)負(fù)數(shù)
return myList; }
public static ArrayList withinHundred() { //100以內(nèi)的加減練習(xí)題生成
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 + " = "); }} //減法練習(xí)題,控制被減數(shù)必須大于減數(shù),避免出現(xiàn)負(fù)數(shù)
return myList; }
public static ArrayList multiplication() { //乘法口訣練習(xí)題生成
for(int i=1;i<10;i++) {
for(int j=1;j<=i;j++) {
myList.add(j + " × " + i + " = ");}}
return myList; }}
2.2 隨機(jī)選取50道練習(xí)題功能的實(shí)現(xiàn)
學(xué)生進(jìn)行練習(xí)時,綜合考慮低年級學(xué)生注意力及能力的特點(diǎn),結(jié)合考核要求,一般每套練習(xí)題包含50道題目。實(shí)現(xiàn)從生成的所有題目數(shù)組中隨機(jī)地、不重復(fù)地抽取其中50道組成1套練習(xí)題,系統(tǒng)采用了HashSet對象及其只能存放不同的值的特性來實(shí)現(xiàn)。主要實(shí)現(xiàn)代碼如下:
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++) {
// 調(diào)用Math.random()方法
int num = (int) (Math.random() * (max - min)) + min;
set.add(num); } // 利用HashSet的不能存放相同內(nèi)容的特性,將不同的數(shù)存入HashSet中
int setSize = set.size(); // 如果存入的數(shù)小于指定生成的個數(shù),則調(diào)用遞歸再生成剩余個數(shù)的隨機(jī)數(shù),如此循環(huán),直到達(dá)到指定大小
if (setSize < n) {
randomSet(min, max, n - setSize, set);}} // 遞歸
public int[] getArrayListSubscript(){ //返回隨機(jī)50道題的數(shù)組
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文檔功能的實(shí)現(xiàn)
在Java Web程序開發(fā)中,MIME 協(xié)議指示 MIME 用戶代理如何顯示附加的文件[2]。我們可以修改MIME協(xié)議的擴(kuò)展Content-Disposition為attachment,當(dāng) Internet Explorer接收到請求后,它會激活文件下載對話框,以實(shí)現(xiàn)下載功能。
程序中,利用表格布局,將隨機(jī)生成的50道題進(jìn)行排版,對應(yīng)WORD文檔的一頁,顯示結(jié)果時設(shè)置MIME協(xié)議的擴(kuò)展Content-Disposition為attachment,達(dá)到下載附件的效果。關(guān)鍵實(shí)現(xiàn)代碼如下:
response.setHeader("Content-disposition","attachment;filename=" + java.net.URLEncoder.encode(xm, "UTF-8") + ".doc"); //設(shè)置協(xié)議頭為attachment,文件名稱設(shè)置為Request對象獲取到的表單提交的值,文件類型為DOC
2.4系統(tǒng)運(yùn)行效果
參考文獻(xiàn):
[1]賈志成,王云. JSP程序設(shè)計(jì)慕課版[M]. 北京:人民郵電出版社,2016:16.
[2]曾是土木人. header中Content-Disposition的作用[EB/OL]. http://www.cnblogs.com/hongfei/archive/2012/06/12/2546758.html,2017.12.18