3 關鍵技術編碼設計
系統在編碼實現中,重點要解決好隨機抽題、HTML試卷生成與評判、HTML頁面自動填充、系統完整性校驗等關鍵技術。
3.1 隨機抽題實現
“專業技術理論考試系統”數據庫內有數千道試題,而每次考試,試題數目一般在80——100道之間,組織試卷時,就需要從試題數據庫內隨機的抽取要求類型、要求數目的數據記錄。為此,作者設計了如下的隨機數產生函數,實現所要抽取記錄編號的生成。
//在randRange范圍內產生randNum個不重復的隨機數
//randRange : 隨機數生成范圍
//randNum : 要生成的隨機數個數
//randArray : 返回生成的隨機數數列
void MakeRands(int randRange,int randNum,int* randArray)
{
if(randRange < randNum) return;
int* numArray = new int[randRange];
for(int i=0;i<randRange;i++)
numArray[i] = i;
int curRange = randRange;
for(int i=0;i<randNum;i++)
{
int anum = RandomRange(0,curRange);
int tem = numArray[anum];
numArray[anum] = numArray[curRange-1];
numArray[curRange-1] = tem;
curRange = curRange-1;
}
int index = 0;
for(int i = randRange-1;i > randRange-1-randNum;i--)
{
randArray[index] = numArray[i];
index++;
}
delete []numArray;
return;
}
在產生試卷的過程中,依次讀取randArray[]數組中元素相對應的數據記錄,從而快速實現試卷試題的讀取。
3.2 HTML試卷生成
系統設計生成的HTML試卷如下所示。
專業技術理論考試(專業1)
單位:部門1 姓名:fsd 卷面總分:100 答題時長:45分鐘
一、填空題(共 40 題,每題 1 分,共 40 分)
1、重點防火單位和防火場所,應當制定 ,明確消防應急分隊,定期組織有針對性的 。
其HTML編碼如下:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>temp</title>
<style type="text/css">
<!--
.STYLE1 {font-size: 24px;
font-family: "宋體";
font-weight: bold;}
.STYLE2 {font-size: 36px;
font-family: "宋體";
font-weight: bold;}
-->
</style>
<style type="text/css">
<!--
body {
background-color: #CCFFFF;
}
-->
</style>
</head>
<body>
<p align="center" class="STYLE2">專業技術理論考試(專業1)</p>
<p align="center"><strong>單位:</strong>部門1<strong> 姓名:</strong>fsd<strong> 卷面總分:</strong>100<strong> 答題時長</strong>:45分鐘</p>
<p align="left" class="STYLE1">一、共同科目(共 40 題,每題 1 分,共 40 分)</p>
<span style='mso-tab-count:1'> <a name="Question_1_1"></span>
<strong>1、重點防火單位和防火場所,應當制定
<span style="mso-tab-count:1"><input type="text" size="8" ID="100101" /></span>
,明確消防應急分隊,定期組織有針對性的
<span style="mso-tab-count:1"><input type="text" size="8" ID="100102" /></span>。<p></p>
將從數據庫中抽出的試題按HTML編碼格式輸出到一TstringList對象,HTML試卷數據就準備好了。這里特別要注意的是每個HTML對象(試卷中要求用戶輸入的部分)要進行唯一標識,以便在評卷和表單填充時可以訪問到每個對象。這里采用唯一的ID值進行區分。ID命名的規則為:ID值=(大題序號+1)*100000 + (小題序號+1)*100 + (對象序號+1)。
|