摘要:綜合分析了應用XML技術和ASP技術,開發畢業設計選題平臺的思路和方法。介紹了XML文件結構化數據存儲的特點,利用ASP技術操作XML文件的方法,并指出了開發技術上的重點和難點。
關鍵詞:XML;ASP;畢業設計選題平臺
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)33-1396-03
Development of Platform for Graduation Project Choosing on XML and ASP Technology
XIAO Ke-xi
(Department of Educational Techonology, Tianjin Foreign Studies University, Tianjin 300204, China)
Abstract: The paper analyses the method and idea of how to develop a platform for graduation project choosing by the technology of XML and ASP.It introduces the characteristics of storing of structured data of XML file and the method of operating XML file by the ASP technology. It also points out the keystones and difficulties in developing process.
Key words: XML; ASP; platform for graduation project choosing
1 引言
每年一度的畢業設計選題工作對于高校中一些大的院系來說,有教師多、學生多、選題多的特點。因此,這些大院系所使用的選題平臺常使用數據庫作為數據管理的工具。而一些小的院系,每年畢業生的人數可能就在一百人左右,無論是在學生人數還是選題數目上,數量都不大。若像大院系那樣使用數據庫來管理這樣少量的數據,不僅前期投入和后期維護的成本較高,而且對于數據庫來說也是大材小用。XML文件是一個純文本文件,能以樹狀結構來存取結構化數據,相當于一個層次型的數據庫。因此利用它來進行小數據量的數據存儲,有投入少,維護方便,訪問速度快的特點。
2 相關技術簡介
2.1 XML(Extensible Markup Language)技術
XML是SGML(標準通用標記語言)的一個子集,其創建者旨在向信息管理人員提供更大的靈活性。[1]XML允許用戶自行定義標記,擴展性很強。根據這些自定義的標記,可以很容易的看出數據所表示的含義。這一點不同于HTML。HTML的標記是事先定義好的,用戶不能隨意修改。同時,在HTML中,除了數據外還包含了對于顯示樣式的定義。而在XML中,數據本身和顯示代碼是分開的,這樣對數據的操作就十分方便。XML還有與平臺無關性的特點,這得益于它的標準是開放的。
2.2 ASP(Acrive Server Pages)技術
ASP是微軟推出的一種動態服務器網頁技術。ASP文件在服務器端運行,它是由普通的HTML文件中嵌入VBScript或JavaScript腳本語言所構成。當客戶端向服務器端的ASP文件提出請求后,服務器端會把該文件解釋成標準的HTML文件,并發送給客戶端,因此客戶端可以不受瀏覽器類型的限制。[2]
3 系統設計
3.1 系統總體設計
本平臺采用B/S結構,學生信息和選題信息分別存放于XML文件當中。通過ASP技術編寫動態網頁去操作XML文件,實現選題信息的及時更新。
本系統的用戶分為兩類:管理員和學生。管理員能對學生信息和選題信息進行維護,同時能及時看到所有學生的選題結果。學生能夠瀏覽選題的詳細信息和進行題目的選擇。主要功能如圖1所示。
用戶登錄模塊 用戶登錄系統前,通過單選按鈕選擇自己的用戶身份(管理員或學生)。輸入正確的用戶名和密碼后,就可登入不同的界面。管理員信息和學生信息分別保存在兩個不同的XML文件當中。
管理選題模塊 所有選題及其詳細信息都被存入一個單獨的XML文件當中。管理員通過此模塊可進行選題的添加、修改和查詢等操作。
管理學生模塊 所有學生信息也在同一個XML文件當中。管理員可以通過此模塊對學生信息進行添加、修改和查詢操作。
瀏覽選題模塊 學生登錄系統后,首先就是進行選題的瀏覽,包括題目名稱、題目要求、指導教師、所需人數等。
選擇題目模塊 在每個題目的旁邊都有一個選擇按鈕。在本系統中,要求每個學生只能選一個題目。因此若該名學生沒有選過題目,則可以進行選擇。否則會給出提示信息,不能再進行選擇。還有一個設計要點是,每個題目都有最大的人數限制,若選擇此題的人數達到了最大數,則此選擇按鈕應設置為不可用。
查看結果模塊 管理員與學生用戶都有查看結果模塊,但其功能有所不同。管理員能看到所有學生的及時選題情況,比如某學生選擇的具體題目,哪些學生沒有選題等。而學生僅能看到自己選題結果的詳細信息。
3.2 XML文件設計

圖1 系統功能
本系統使用XML存取用戶和選題信息。一共有三個XML文件:admin.xml 存放管理員用戶信息;s_info.xml 存放學生用戶信息;t_info.xml 存放題目信息。它們的所使用的標記及其含義如表1、表2、表3所示。
3.3 系統開發的重點和難點
3.3.1 添加選題功能的實現
添加新題目是本平臺的一個基本功能,這實際上主要涉及到對XML文件的寫操作。在使用ASP技術對XML文件進行寫操作時,首先需要建立XML對象的實例。
Set myxml = Server.CreateObject(\"Microsoft.XMLDOM\")
然后將t_info.xml加載到內存,并獲取t_info.xml的根節點。
myxml.load(Server.MapPath(\"t_info.xml\"))
Set tRoot = myxml.selectSingleNode(\"tlist\")
接著判斷根節點之下是否有數據。若沒有,則將新數據的
if tRoot.childNodes.length=0 then
currNum=1
else
currNum=tRoot.childNodes.length+1
end if
最后創建子節點,并將新建節點添加到t_info.xml文件中保存。
set titleinfo=myxml.createNode(1,\"titleinfo\",\"\")
set titleid=myxml.createNode(1,\"titleid\",\"\")
set titlename=myxml.createNode(1,\"titlename\",\"\")
set content=myxml.createNode(1,\"content\",\"\")
set totalstu=myxml.createNode(1,\"totalstu\",\"\")
set hasselected=myxml.createNode(1,\"hasselected\",\"\")
titleid.text=currNum
titlename.text=trim(request.form(\"txttitle2\"))
content.text=trim(request.form(\"yaoqiu\"))
totalstu.text=trim(request(\"textfield\"))
hasselected.text=\"0\"
titleinfo.appendChild(titleid)
titleinfo.appendChild(titlename)
titleinfo.appendChild(content)
titleinfo.appendChild(totalstu)
titleinfo.appendChild(hasselected)
tRoot.appendChild(titleinfo)
myxml.Save(Server.MapPath(\"t_info.xml\"))
3.3.2 瀏覽題目功能的實現

學生在選題前要對所有題目進行瀏覽,這實際涉及到對XML文件進行讀操作的問題。應用ASP技術對XML文件進行讀操作時,首先也同樣需建立XML對象實例,并把t_info.xml文件讀入內存。
tinfoFile=Server.MapPath(\"t_info.xml\")
Set myxml = Server.CreateObject(\"Microsoft.XMLDOM\")
myxml.load(tinfoFile)
然后通過循環讀取t_info.xml中每個題目的信息,即所有子節點的信息,并通過response.write方法用表格的形式顯示出來。同時要注意,若某個題目已達到了人數的上限,則選擇按鈕是不可用的。
Set tRoot = myxml.selectSingleNode(\"tlist\")
response.write \"<table width=80%>\"
response.write \"<tr><td>題目</td><td>人數</td><td>選擇</td></tr>\"
m=1
for n=0 to tRoot.childNodes.length-1
set tNode=tRoot.childNodes.item(n)
response.write \"<tr><td>\"
response.write m\". \"
response.write \"<a href=detail.asp?id=\"trim(tNode.childNodes.item(0).text)\">\"tNode.childNodes.item(1).text\"</a>\"
response.write \"</td><td>\"
response.write tNode.childNodes.item(4).text\"/\"tNode.childNodes.item(3).text\"人\"
response.write \"</td><td>\"
if tNode.childNodes.item(4).text<tNode.childNodes.item(3).text then
response.write \"<a href=stuselect.asp?tid=\"tNode.childNodes.item(0).text\"><img src='sbutton.JPG' width='38' height='22'border='0'></a>\"
else
response.write \"人數已滿\"
end if
response.write \"</td></tr>\"
m=m+1
next
3.3.3 學生選題功能的實現
學生選題是本平臺的核心功能。在實現本功能時,既要記錄下每個學生選擇題目的信息,又要限制學生不能重復選題。這實際上同時涉及到了對XML文件的讀和寫的操作,而且要同時操作s_info.xml和t_info.xml文件。其主要代碼如下:
tid=request.QueryString(\"tid\")
Set myxml = Server.CreateObject(\"Microsoft.XMLDOM\")
myxml.load(Server.MapPath(\"t_info.xml\"))
Set tRoot = myxml.selectSingleNode(\"tlist\")
for n=0 to tRoot.childNodes.length-1
set tNode=tRoot.childNodes.item(n)
if tNode.childNodes.item(0).text=tid then exit for
next
if tNode.childNodes.item(3).text=<tNode.childNodes.item(4).text then
response.write \"此題人數達上限,不能再選擇!\"
else
Set myxml2 = Server.CreateObject(\"Microsoft.XMLDOM\")
myxml2.load(Server.MapPath(\"s_info.xml\"))
Set sRoot = myxml2.selectSingleNode(\"stulist\")
for n=0 to sRoot.childNodes.length-1
set sNode=sRoot.childNodes.item(n)
if sNode.childNodes.item(0).text=session(\"stunum\") then exit for
next
if sNode.childNodes.item(3).text=0 then
sNode.childNodes.item(3).text=tid
myxml2.Save(Server.MapPath(\"s_info.xml\"))
tNode.childNodes.item(4).text=tNode.childNodes.item(4).text+1
myxml.Save(Server.MapPath(\"t_info.xml\"))
response.write \"成功選擇!\"
else
response.write \"你已選過課題,不能再選。\"
end if
end if
3.3.4 管理員查看結果功能的實現
管理員查看并統計選題的結果,是開發本平臺的最終目的,此結果將會直接傳達給各指導老師,以備進行正式的指導工作。此功能涉及到對s_info.xml和t_info.xml文件進行讀操作,同時進行分析比較,列出題目和學生的對應關系。其主要代碼如下:
tinfoFile=Server.MapPath(\"t_info.xml\")
Set myxml = Server.CreateObject(\"Microsoft.XMLDOM\")
myxml.load(tinfoFile)
Set tRoot = myxml.selectSingleNode(\"tlist\")
response.write \"<table width=90%>\"
response.write \"<tr><td>題目</td><td>人數</td><td>學生</td></tr>\"
for n=0 to tRoot.childNodes.length-1
set tNode=tRoot.childNodes.item(n)
response.write \"<tr><td>\"
response.write tNode.childNodes.item(1).text
response.write \"</td><td>\"
response.write tNode.childNodes.item(4).text\"/\"tNode.childNodes.item(3).text\"人\"
response.write \"</td><td>\"
sinfoFile=Server.MapPath(\"s_info.xml\")
Set myxml2 = Server.CreateObject(\"Microsoft.XMLDOM\")
myxml2.load(sinfoFile)
Set sRoot = myxml2.selectSingleNode(\"stulist\")
for k=0 to sRoot.childNodes.length-1
set sNode=sRoot.childNodes.item(k)
if sNode.childNodes.item(3).text=tNode.childNodes.item(0).text then
response.write sNode.childNodes.item(1).text
end if
next
response.write \"</td></tr>\"
next
response.write \"<table>\"
4 結束語
XML是Web上表示結構化信息的一種標準文本格式。[3]XML的發展在不斷完善,其在數據交換上的優勢也越來越明顯。本畢業設計選題平臺使用XML進行小數量的數據存儲,同時使用已經非常成熟和易用的ASP技術對其進行操作,其優點在于不僅能夠較快速的進行軟件的開發,實現所要求的功能,而且維護成本也相對較低。
參考文獻:
[1] 唐澤圣. 新概念電腦教程(提高版)[M].北京:電子工業出版社,2001.
[2] 尚俊杰. 網絡程序設計基礎[M].北京:清華大學出版社,2003.
[3] Morrison M. XML揭秘——入門·應用·精通[M]. 陸新年, 陸新宇,譯. 北京:清華大學出版社,2001.