摘要:本文介紹設(shè)計一組ASP程序與一個考勤點(diǎn)名程序,在計算機(jī)教室中實(shí)現(xiàn)了一個微型網(wǎng)站,提供了上課考勤、作業(yè)布置、作業(yè)上傳與下載、課件演示與下載、考勤管理與查詢、作業(yè)管理與查詢等功能,有效地提高了計算機(jī)教室中課堂教學(xué)的管理效率。
關(guān)鍵詞:ASP;作業(yè)文件上傳與下載;計算機(jī)教室微型網(wǎng)站
中圖分類號:G64 文獻(xiàn)標(biāo)識碼:B
文章編號:1672-5913(2007)09-0052-03
1 引言
在計算機(jī)教室進(jìn)行教學(xué)過程中,為了訓(xùn)練學(xué)生的動手能力,很多作業(yè)練習(xí)都是在計算機(jī)上直接完成。計算機(jī)教室中的教學(xué)與傳統(tǒng)的教室里的教學(xué)有很大區(qū)別,怎么樣充分利用現(xiàn)代的教學(xué)資源在計算機(jī)教室組織好教學(xué)是教師們關(guān)心的問題。為了教學(xué)的需要,本文介紹設(shè)計一組ASP程序與一個考勤點(diǎn)名程序,在計算機(jī)教室中實(shí)現(xiàn)了一個微型網(wǎng)站,提供了上課考勤、作業(yè)布置、作業(yè)上傳與下載、課件下載、歷次考勤與作業(yè)查詢等功能。只要在教師機(jī)Windows中安裝IIS系統(tǒng),把程序放在一個文件夾中就可以工作,程序簡單實(shí)用,方便了計算機(jī)教室中的教學(xué)的學(xué)習(xí)與管理。
2 程序功能
首先把程序所在的文件夾設(shè)置為Web共享,學(xué)生啟動瀏覽器瀏覽教師計算機(jī)的index.asp文件就可以進(jìn)入程序。點(diǎn)擊“課程教學(xué)”學(xué)生可查看本次課程的教學(xué)內(nèi)容;點(diǎn)擊“課程作業(yè)”可查看本次課程的作業(yè);點(diǎn)擊“作業(yè)提交”學(xué)生可把自己做好的作業(yè)上傳到教師計算機(jī);點(diǎn)擊“作業(yè)查詢”學(xué)生可查到自己歷次提交的作業(yè)與教師對各次作業(yè)的評價,并可以下載歷次的作業(yè);點(diǎn)擊“出勤查詢”學(xué)生可查看到自己歷次課的出勤情況;點(diǎn)擊“學(xué)生名單”可查詢學(xué)生班級、姓名與學(xué)號;點(diǎn)擊“修改密碼”學(xué)生可修改自己的密碼。
3 程序設(shè)計
3.1 數(shù)據(jù)庫設(shè)計
系統(tǒng)數(shù)據(jù)庫可采用Access數(shù)據(jù)庫,也可以采用SQL Server數(shù)據(jù)庫,主要表格有:
* Students:學(xué)生表,sno,sname,spass分別記錄學(xué)生的學(xué)號、姓名、班級及登錄密碼等信息;
* Courses:課程表,course記錄教師所講授的課程;
* CourseTaught:課程教學(xué)表,DTC,teacher,sclass,course分別記錄在某個時間,某教師為某個班級講授的課程;
* Checkin: 學(xué)生考勤表、DTC,sno,teacher,status分別記錄在某個時間,某學(xué)生上某教師的課的出勤情況;
* Handin:學(xué)生作業(yè)提交表,dt,sno,file,comment分別表示在某個時間,學(xué)生提交的作業(yè)文件與教師對該作業(yè)的評價,ID是序列號。
各個表之間的關(guān)系如圖1所示。
3.2 點(diǎn)名程序設(shè)計
由于上課點(diǎn)名程序僅由教師在教師計算機(jī)中使用,所以可用C++設(shè)計成為獨(dú)立的執(zhí)行程序,如圖2所示。該程序通過ADO技術(shù)訪問數(shù)據(jù)庫,實(shí)現(xiàn)點(diǎn)名功能與出勤統(tǒng)計功能。教師選擇上課時間、班級及課程,就可以點(diǎn)名。
3.3 ASP程序設(shè)計
ASP程序組中最重要的是學(xué)生作業(yè)文件的提交與文件下載的功能設(shè)計。提交文件采用ENCTYPE 屬性值為MULTIPART/FORM-DATA的表單,形式如下:
<form name="frm" action="jzyresp.asp" method="post"
ENCTYPE="MULTIPART/FORM-DATA">
<table>
<tr><td>學(xué)號</td><td><input type="text" name="sno" maxlength=16></td></tr>
<tr><td>姓名</td><td><input type="text" name="sname" maxlength=8></td></tr>
<tr><td>密碼</td><td><input type="password" name="spass" maxlength=16></td></tr>
<tr><td>文件</td><td><input type="file" name="file"></td></tr>
</table><p>
<input type="reset" value="重置">
<input type="button" value="提交" onclick="on_submit()">
</form>
其中on_submit()為JavaScript編寫的數(shù)據(jù)檢查程序,為了避免教師計算機(jī)服務(wù)器過于繁忙,可以限制學(xué)生提交文件的大小。在服務(wù)器端限制的方法是如接收到的數(shù)據(jù)大于指定的值,則放棄存盤。如在客戶端限制提交文件的大小,則可以在on_submit()函數(shù)中編寫一段JavaScript程序,應(yīng)用FileSystemObject對象獲取文件的字節(jié)數(shù),當(dāng)文件過大時就拒絕提交[1]。為了減輕服務(wù)器的負(fù)擔(dān),本文采用客戶端限制文件大小的方法,程序如下:
<script language="JavaScript">
function on_submit()
{
var fn=document.frm.file.value;
//上傳文件名稱
if(fn=="") return;
var fso=newActiveXObject("Scripting.FileSystemObject");
//建立FileSystemObject對象
var fobj=fso.GetFile(fn);//獲取文件對象
if(fobj.Size>409600) alert("上傳文件不能超過400KB");
else document.frm.submit(); //提交表單
}
</script>
提交后服務(wù)器端的原始二進(jìn)制數(shù)據(jù)可以在jzyresp.asp文件中用response.binaryread方法讀出,經(jīng)過分析,讀出的數(shù)據(jù)格式為[2] :
-----------------------------7d739932f03ce
Content-Disposition: form-data; name=\"file\"; filename=\"D:\\class\\作業(yè)2-1.doc\"
Content-Type: text/html
[文件數(shù)據(jù)]
---------------------------7d739932f03ce--
由此可見,原始數(shù)據(jù)分為多個數(shù)據(jù)段,各個數(shù)據(jù)段之間用回車換行分隔。第一行數(shù)據(jù)是分隔符號,第二行數(shù)據(jù)中包含了文件名稱,第三行是數(shù)據(jù)類型,第四行是空行,第五行開始一直到下一個分隔符號之前的為上傳文件的實(shí)際數(shù)據(jù)。注意分隔符的哪個十六進(jìn)制數(shù)字每次是不同的。編寫下列一段程序便可以分解出上傳文件數(shù)據(jù):
<%
dim formsize,formdata,bncrlf,divider,datastart,dataend,filedata
formsize=request.totalbytes '提交數(shù)據(jù)的總字節(jié)數(shù)
formdata=request.binaryread(formsize) '獲取原始二進(jìn)制數(shù)據(jù)
bncrlf=chrB(13) chrB(10)'回車換行
divider=leftB(formdata,instrb(formdata,bncrlf)-1)'獲取分隔符
datastart=instrb(formdata,bncrlf bncrlf)+4 '數(shù)據(jù)開始位置
dataend=instrb(datastart+1,formdata,divider)-datastart-2'數(shù)據(jù)結(jié)實(shí)位置
filedata=midb(formdata,datastart,dataend)'分離出文件數(shù)據(jù)
%>
考慮到學(xué)生提交的作業(yè)文件數(shù)據(jù)量較大,因此程序在數(shù)據(jù)庫中僅記錄作業(yè)提交的基本信息,程序另外按班級、提交日期、學(xué)號與姓名自動建立磁盤目錄,把提交的文件保存到對應(yīng)目錄中,效果如圖3所示。
為了方便教學(xué),學(xué)生可以下載教師的教案及自己歷次提交的作業(yè)文件。下載的程序比較簡單,可利用ASP的Stream對象讀取文件,調(diào)用response.binarywrite就可把文件寫到客戶端下載,主要程序如下:
<%
dim obj,v,p,fn
fn=trim(request.QueryString(\"fileName\"))'獲取要下載的文件名稱
if fn=\"\" then response.end
set obj=server.createObject(\"ADODB.Stream\")
obj.type=1?二進(jìn)制數(shù)據(jù)
obj.open
obj.LoadFromFile(fn)'讀取文件數(shù)據(jù)
v=obj.read
obj.close
p=len(fn)
do while p>=1 and mid(fn,p,1)<>\"\\\"
p=p-1
loop
fn=mid(fn,p+1,len(fn)) '分離出文件名稱
'輸出下載文件名稱
response.addHeader \"Content-disposition\",\"attachment;filename=\"+fn
response.clear
response.binarywrite v ?'輸出下載文件數(shù)據(jù)
response.flush
response.end
set obj=nothing
%>
4 結(jié)束語
為了教學(xué)的需要,本文介紹一組ASP程序與一個考勤點(diǎn)名程序的設(shè)計與應(yīng)用,在計算機(jī)教室中實(shí)現(xiàn)了一個微型網(wǎng)站,提供了上課考勤、作業(yè)布置、作業(yè)上傳與下載、課件下載、考勤查詢、作業(yè)查詢等功能。程序簡單實(shí)用,只要在教師機(jī)Windows中安裝IIS系統(tǒng),把程序放在一個文件夾中就可以,極大地方便了計算機(jī)教室中的教學(xué)與管理。經(jīng)過實(shí)踐應(yīng)用,效果良好。
參考文獻(xiàn):
[1] 陳會安.JavaScript網(wǎng)頁制作徹底研究[M].北京:人民郵電出版社,2002.
[2] 衛(wèi)振林.ASP程序設(shè)計與應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2004.
收稿日期:2007-04-04
作者簡介:黃銳軍(1964.12-),男,漢族,廣東人,副教授,研究方向?yàn)檐浖夹g(shù)。