考試系統案例之 -- 隨機生成考題

xiaohuihui發表於2019-12-05

問題背景

應用 IT 技術建成題庫,並基於題庫隨機抽取試題組卷,現在已經是實現考試規範化和科學化的重要手段了。實際應用中,隨機抽題也能避免多人串題等作弊行為,有效督促考生主動學習,真正達到考試的原本目的。

目前,隨機抽題考試主要用在線上考試,而且是隨抽隨考。比如常見的駕照考試,理論考試都是上機從題庫中隨機抽題考試,彰顯了考試的公平、公正、公開。再如,企事業單位內部階段性或針對某些重要檔案的考試考核,也經常會用到隨機抽題考試。

問題分析

針對“隨機生成一套線上考試試題”這個問題,有兩個核心需求:

要能考,也就是能讓考生填答案,體現可填報可提交的功能(又不能靠意念提交入庫,哈哈);
要能隨機抽,不同人不同考題;同時也要能按要求隨機抽,不能一套題只有判斷、一套只有選擇,必須難易均衡,不能讓考生碰運氣。
另外,對於客觀題,其實還應該有能自動評分的功能。

那麼,這些需求怎麼還和報表工具發生關係了呢?這是因為:

1、線上考試的試題,其實就是可填報的報表,俗稱填報表;

2、隨機按需抽題,能不能抽出來就看你報表資料集的處理能力了。

解決方案

對多數報表工具來說,支援填報不是問題,關鍵的是實現隨機抽題的能力如何。很多工具或許能搞,但基本也都很麻煩,幾乎清一色需要自定義類。

那麼潤乾報表呢?

當然可以輕鬆搞定!

下面,我們就以一套由單選、多選、判斷題組成的試卷為例看看潤乾報表是如何輕鬆解決的:

要求:從題庫中隨機抽取 7 道單選、7 道多選、6 道判斷題,每題後提供由考生錄入答案的入口。效果如下(橙色底色的格子用於錄入答案)

題庫結構如下

包括所屬考試類別、考題上傳人、考試時間、考題型別、題目、分值、選項等等。

具體做法:

設計表樣
這裡我們選取行式填報表,按考題型別依次呈現。

根據行式填報表規則,將第 5/6 行所有單元格設定為數值格。
將 A5:H6 多有單元格設定不可編輯(僅 I 列允許編輯以便錄入答案)避免改題

設定資料處理(來源)
重點!!!涉及到隨機抽題,所以我們採用集算器指令碼。如果不用,那就像前面說的會很麻煩,需要藉助複雜的自定義或儲存過程各種臨時表實現。集算器指令碼實現就簡單很多,如下圖所示:

其中:

B1:根據考試題目,查詢出所有的(從模擬角度出發,不考慮海量題庫,假設可以全部讀入記憶體)考題;

C1:單獨查下考題和時間;

A3:過濾出所有的判斷題;

B3:過濾出所有的單選題;

C3:過濾出所有的多選題;

A4:獲取考題型別的總題數,用於確定抽取考題的位置。比如判斷類總題數是 100,要求抽取 7 題,我們在 1-100 內隨機產生 7 個隨機數,對應到 100 條記錄按位置取出即可,其他型別以此類推。

A5-C7:隨機獲取 7 個數值(即考題記錄位置)存放在 B4 序列;

A8:判斷只抽 6 題,所以我們從 B4 去掉一個位置;

A9:按位置分別抽取判斷、單選及多選題記錄,並賦值給 exam_from 物件(即隨機抽取的所有考題);

定義單元格表示式 (欄位名稱)
B3:tit.EXAM_TIME

E3:tit.EXAM_NAME

A5:exam_from.EXAM_TYPE

B5:EXAM_CONTENT

C5:EXAM_SCORE

D5:EXAM_A

E5:EXAM_B

F5:EXAM_C

G5:EXAM_D

H5:EXAM_E

I5:可不設定,按照“答案”為欄位名採集資料

設定資料處理(回填考生提交的答案)

其中:

B1:給採集的 tit[平 1] 物件增加考試人資料;

A2:tit 物件和採集的答案 exam 物件做關聯;

B2:new 出包含考題資訊、答案及考試人的資料物件;

C2:為提交物件增加是否已答卷和是否已評卷的狀態;

D2:執行提交,將採集答案資訊提交到答題庫表存放;

預覽效果
當考試人為 monkey1,考試為“產品測試 2”的 url:

考題內容如下:

切換其他考試人,考試人為 monkey2,考試題同樣為“產品測試 2”的 url:

考試內容已經與前面的考試人不同。

錄入答案並提交後,表示整個過程考試完成。

實際的線上考試需要搭建完整的考試系統,其中還包括使用者登入、根據許可權檢視考試列表、檢視考試成績、考過的不允許立即再考、考試提醒、超時自動提交、試卷評閱等等功能和流程。填報表可以嵌入在涉及到資料採集的任何環節,只需要根據需求選擇合適的嵌入位置,其他的就是細節的做法問題了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2667153/,如需轉載,請註明出處,否則將追究法律責任。

相關文章