基于C/S架構(gòu)的通用計(jì)算機(jī)在線考試系統(tǒng)的實(shí)現(xiàn)
4.1 中間業(yè)務(wù)邏輯層設(shè)計(jì)
中間層服務(wù)器是系統(tǒng)設(shè)計(jì)的關(guān)鍵,在中間層上設(shè)計(jì)了大量的遠(yuǎn)程方法供客戶(hù)端調(diào)用,這種方式稱(chēng)為“瘦客戶(hù)機(jī),胖服務(wù)器”模式。使用該模式,當(dāng)客戶(hù)功能有所變動(dòng)時(shí),只需更改中間層上的方法,而不用重新分發(fā)客戶(hù)端。在Delphi7中使用DataSetProvider控件提供RPC服務(wù),對(duì)于客戶(hù)端的每一個(gè)操作,都可以通過(guò)在中間層服務(wù)器中設(shè)計(jì)相應(yīng)的方法實(shí)現(xiàn)[5]。在中間層設(shè)計(jì)的兩個(gè)主要方法如下:
(1)function ExeClientSql(const MySql: WideString): WordBool; safecall;
//執(zhí)行SQL的更新、插入、刪除等操作,返回是否成功;
(2)function GetClientData(const MySql: WideString): OleVariant; safecall;
//執(zhí)行SQL的查詢(xún)操作,返回查詢(xún)結(jié)果。
4.2 軟件系統(tǒng)的主要技術(shù)特點(diǎn)
(1)考試時(shí)由考生隨機(jī)抽題組卷,同時(shí)確保相鄰考生抽取不同的試題。實(shí)現(xiàn)該功能的存儲(chǔ)過(guò)程如下:
CREATE PROCEDURE cp_Paper_Sel
@tblDL char(20),
@MyPrior int,
@MyNext int,
@MyKM char(30)
AS
exec(′select top 1 套題編號(hào),套題名稱(chēng) from tblcrecord where 套題編號(hào) not in
(select 套題編號(hào) from ′+@tblDL+′ where IP序號(hào)=′+@MyPrior+′or IP序號(hào)=′+@MyNext+′) and 科目名稱(chēng)=‘’‘+@MyKM+’‘’and 是否抽取=′′是′′ order by newid()′)
GO
(2)IP安全技術(shù):考試系統(tǒng)中將考試IP限定在某一區(qū)域內(nèi),如192.168.36.1到192.168.36.200,可以防止在考場(chǎng)外進(jìn)行替考,同時(shí)在考試時(shí)通過(guò)“禁止未登錄考生參加考試”功能,在考生登錄之后進(jìn)一步避免了場(chǎng)外替考現(xiàn)象的發(fā)生。此外,將考生考號(hào)和考生機(jī)器IP地址進(jìn)行綁定,考生在考試過(guò)程中,只能在一臺(tái)計(jì)算機(jī)上答題,以防止考生之間相互換題等作弊行為。當(dāng)考生登錄到考試系統(tǒng)以后,將考生機(jī)器IP地址寫(xiě)入考生信息表以及登錄IP表,防止一個(gè)考號(hào)在兩臺(tái)機(jī)器上登錄。
//檢查是否同一IP登錄
with cds2 do
begin
Close ;
SQL.Clear ;
SQL.Add(′exec sp_Query_All:fldName,:tblName′);;
Params.ParamByName(′fldname′).Value :=′*′;
Params.ParamByName(′tblName′).Value:=
dm.tblDL+′ where登錄IP='''+dm.MyIP+''';
try
Open;
if recordcount>0 then
begin
sMessageDlg(′警告′,′無(wú)效的考試請(qǐng)求!′,
mtWarning ,[mbOK],0);
exit;
end ;
except
raise ;
end;
(3)考試時(shí)間限制:考生第一次取題開(kāi)始計(jì)時(shí),到規(guī)定的時(shí)間結(jié)束,考生只有在該時(shí)間內(nèi)可以取題,其他時(shí)間都不能取題,計(jì)時(shí)由服務(wù)器完成,同時(shí),若考試過(guò)程中由于意外情況導(dǎo)致考試終止時(shí),監(jiān)考老師可以通過(guò)輸入二次答題密碼的方式讓考生繼續(xù)答題,從而實(shí)現(xiàn)考生考試時(shí)間的公平性,又加強(qiáng)了試題的安全性。
(4)大量應(yīng)用存儲(chǔ)過(guò)程,保障系統(tǒng)的快速反應(yīng)和高效運(yùn)行。例如,將考生抽取的試題加入到考試數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程:
CREATE PROCEDURE cp_Paper_Add
@tblKS char(20),
@MyNo char(10),
@Mynum char(20),
@Mytbl char(10)
AS
exec(′insert into′+@tblKS+′ (學(xué)生學(xué)號(hào),套題編號(hào),試題序號(hào),試題內(nèi)容,試題答案,試題分?jǐn)?shù),是否答題,套題名稱(chēng),考試科目,試題類(lèi)型,學(xué)生分?jǐn)?shù),類(lèi)別序號(hào)) select '''+@MyNo+''','''+@Mynum+''',試題序號(hào),試題內(nèi)容,試題答案,試題分?jǐn)?shù),′′否′′,套題名稱(chēng),科目名稱(chēng),試題類(lèi)型,0,類(lèi)別序號(hào) from ′+@Mytbl+′ where 套題編號(hào)='''+@mynum+''')
GO
(5)數(shù)據(jù)加密功能。軟件系統(tǒng)中使用了關(guān)鍵數(shù)據(jù)加密和數(shù)據(jù)庫(kù)動(dòng)態(tài)加密兩種技術(shù)。對(duì)于考試系統(tǒng)中的重要數(shù)據(jù)使用關(guān)鍵數(shù)據(jù)加密技術(shù),如試題庫(kù)中的試題采用加密的方式存儲(chǔ),用戶(hù)登錄時(shí)的密碼加密后保存到數(shù)據(jù)庫(kù)中,以免被他人獲取并泄漏。而用戶(hù)每次登錄數(shù)據(jù)庫(kù)時(shí),系統(tǒng)都會(huì)自動(dòng)修改數(shù)據(jù)庫(kù)密碼并進(jìn)行加密存儲(chǔ),這樣使得數(shù)據(jù)庫(kù)密碼具有不確定性,大大增加了數(shù)據(jù)庫(kù)的安全性,實(shí)現(xiàn)數(shù)據(jù)庫(kù)動(dòng)態(tài)加密[6]。
(6)試題錄入功能獨(dú)立于主系統(tǒng)。將試題錄入功能與主系統(tǒng)分開(kāi),既保障了系統(tǒng)的安全性,又方便教師進(jìn)行試題錄入。通過(guò)設(shè)置登錄賬號(hào)和錄入科目,限制教師只能在指定時(shí)間內(nèi)根據(jù)指定的驗(yàn)證碼錄入指定科目試題,增加了題庫(kù)的安全性。
采用C/S模式多層結(jié)構(gòu)開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng),比傳統(tǒng)的C/S模式結(jié)構(gòu)有著無(wú)法比擬的優(yōu)勢(shì)。該軟件系統(tǒng)主要采用了多層結(jié)構(gòu)使得業(yè)務(wù)邏輯從客戶(hù)端分離出來(lái),在最為關(guān)鍵的中間層上,設(shè)計(jì)了大量的遠(yuǎn)程方法供客戶(hù)端調(diào)用,從而形成“瘦客戶(hù)機(jī),胖服務(wù)器”模式,不但很好地實(shí)現(xiàn)了軟件系統(tǒng)的各項(xiàng)功能,而且簡(jiǎn)化了程序設(shè)計(jì),大大減少了網(wǎng)絡(luò)流量,從而提高軟件系統(tǒng)的運(yùn)行效率、可維護(hù)性和整體性能。本文引用地址:http://www.ex-cimer.com/article/202188.htm
評(píng)論