趙 冬,高 亮
(中原工學院,鄭州450007)
基于ASP.NET的軟件學院實踐環(huán)節(jié)課題申報系統(tǒng)的設計與實現
趙 冬,高 亮
(中原工學院,鄭州450007)
從軟件學院實踐環(huán)節(jié)課題申報工作的實際需求出發(fā),以實現軟件學院實踐環(huán)節(jié)課題申報工作的自動化、信息化管理為目標,討論了系統(tǒng)軟件架構、功能模塊及涉及到的關鍵技術.系統(tǒng)采用微軟ASP.NET、AJAX技術及C#語言,可實現從教師開設課題,管理員審核課題,到學生申報課題,教師批準學生申報全過程的自動化管理,提高了實踐環(huán)節(jié)課題申報工作的效率.
課題申報;實踐環(huán)節(jié);三層架構
目前,我國已有越來越多的高校開設了軟件學院,這些軟件學院多以培養(yǎng)應用型軟件工程人才為目標.在學生的培養(yǎng)過程中,實踐環(huán)節(jié)占了教學過程的較大比重,基本上每個學期末,都會安排一個為期1~3周的集中實踐課程.課程實踐中,教師要帶領學生,以組或個人為單位,開發(fā)具有一定規(guī)模的軟件.這類實踐課程的管理過程一般是:①在實踐課程開始前若干周,由各位教師發(fā)布自己的題目及每個題目需要多少組、每組多少人;②題目經過相關管理人員審批合格后,即公布給學生;③學生自由結合成組,選擇教師及題目;④教師確認自己所帶的組,并將最終的選報結果公布給學生.
目前,很多高校的這一選報過程仍采用手工或半自動化方式來完成,不僅工作效率較低,而且結果不準確,每次都會發(fā)生學生漏報或教師統(tǒng)計錯誤等情況,給后續(xù)的統(tǒng)計教師工作量及提交學生成績等工作造成不便.本課題申報系統(tǒng)能夠完成課題申報審批的全自動化處理,不僅減少了相關人員的工作壓力、提高了工作效率,而且提高了課題申報過程的規(guī)范性和準確性.
本系統(tǒng)采用了三層架構模式.所謂三層架構,是將整個系統(tǒng)劃分為三層,自下而上分別是數據訪問層、業(yè)務邏輯層和表示層[1].如圖1所示.三層架構模式層與層相對獨立,各層分別負責完成一類工作.該模式具有分散關注、松散耦合、邏輯復用等優(yōu)勢[2].
圖1 軟件架構示意圖
本系統(tǒng)功能模塊包括教師功能模塊、管理員功能模塊、學生功能模塊及通用功能模塊.系統(tǒng)體系結構如圖2所示.
圖2 實踐課題申報系統(tǒng)體系結構圖
教師功能模塊包括:
(1)個人題庫管理.教師可以維護自己的題庫,進行新增、修改及刪除題目等操作.每個學期申報題目時可以直接從題庫中選取或稍加修改,無需重復錄入.個人題庫中的題目只有教師本人可以維護.
(2)課題申請.教師在個人題庫或公共題庫列表中選擇合適的題目,只要選擇正確的學期、實踐環(huán)節(jié)類型、專業(yè)、組數、每組人數等信息,即可提交申請.
(3)學生選報處理.教師與學生之間是雙向選擇的關系,學生在選報教師的某個課題后,教師要對其進行確認,同時也有權拒絕其加入課題組.經過確認的學生,不能再自行退組.學生如要更換教師或題目,必須由本人提出申請,由教師將學生除名后才能再選擇其他教師的題目.
(4)學生成果管理.課題結束時,學生必須上傳自己的代碼及文檔.教師可通過此模塊查看并下載自己所帶學生上傳的成果.
管理員功能模塊包括:
(1)公共題庫管理.管理員可以維護公共題庫,公共題庫中的題目可以供所有教師使用.
(2)課題審批.教師提交課題申請之后,需要經過管理員審批,學生才能選題.如審批沒通過,管理員可將沒通過的原因反饋給教師.
(3)基礎信息管理.管理員還需管理系統(tǒng)運行所需的基礎信息,如學生信息、教師信息、專業(yè)信息、班級信息、課題允許選報時間設置等.
學生功能模塊包括:
(1)課題選報.學生登錄后可看到與自己本專業(yè)、本次實踐環(huán)節(jié)相關的所有題目,可查看每一個題目的詳細信息及目前的選報情況,如課題組是否已經報滿、各組組員是否已經報滿等情況.學生選好課題后,可自行在該課題下創(chuàng)建項目組(在該課題項目組數未滿的情況下)并設置組密碼,也可直接加入其他組(該組的組員未滿,且要求輸入組密碼).學生在創(chuàng)建或加入某組后,在教師未確認之前,仍可自行退組并選擇其他組或課題.教師確認后,學生會收到一條確認成功的站內短信,且不能再退組.如果教師將學生除名,被除名的學生會收到一條站內短信,則該生處于未加入任何組的狀態(tài),可繼續(xù)選擇其他教師的題目.
(2)成果提交.在實踐環(huán)節(jié)結束時,學生可以通過該模塊提交自己的代碼及文檔等成果性資料,作為教師評分的依據.
通用功能模塊包括:
(1)登錄.本系統(tǒng)所有用戶必須經過登錄驗證身份后才可使用.如果是學生登錄,需要以學生所在班級為依據,結合當前日期計算本學期該生應該參加哪個實踐環(huán)節(jié),以及目前是否已經開放了該實踐環(huán)節(jié)的選題功能.系統(tǒng)會根據計算結果決定是否顯示課題列表以及顯示哪些題目.
(2)公告.管理員有權發(fā)布公告,教師及學生只有瀏覽公告的權限.
(3)站內短信.管理員可向任何人發(fā)送站內短信,教師可向自己所帶學生及管理員發(fā)送站內短信;學生可向自己的指導教師及管理員發(fā)送站內短信.系統(tǒng)支持群發(fā)功能.
(4)BBS.任何登錄用戶均可使用BBS進行交流.管理員具有論壇管理權限,包括刪除帖子、刪除回復、封ID等.
本系統(tǒng)采用了SQL Server2000作為DBMS.系統(tǒng)E-R圖如圖3所示.
圖3 實踐課題申報系統(tǒng)E-R圖
AJAX(Asynchronous JavaScript and XML)即異步JavaScript和XML,是一種創(chuàng)建交互式網頁應用的網頁開發(fā)技術.AJAX最大的特點是實現了客戶端與服務器端之間異步的數據交換[3].目前在 ASP.NET2.0下,可以有多種方式實現AJAX.本系統(tǒng)是采用Client CallBack方式實現的.
本系統(tǒng)幾乎所有涉及到數據列表刷新的頁面都采用了AJAX技術,下面以班級信息的添加操作為例,說明采用Client CallBack方式實現AJAX的方法:
第一步,使需要完成AJAX效果的頁面實現ICallback Event Handler:
public partial class Classes Manage :System.Web.UI.Page,System.Web.UI.ICallback Event Handler
既然需要實現ICallback Event Handler接口,就要實現接口中定義的2個方法:GetCallback Result和RaiseCallback Event.第一個方法用來返回回調事件的結果,第二個方法用來處理回調事件.
班級管理頁面中,這2個方法的核心實現如下:
public string Get Callback Result()
{
return builder.ToString();//builder 為Classes Manage類的成員變量
}
public void RaiseCallback Event(string event Argument)
{
//Begin實現班級信息的添加,重新綁定數據顯示列表
BLL.classes bc = new Maticsoft.BLL.classes();//創(chuàng)建班級的業(yè)務邏輯層對象
Model.classes mc=new Maticsoft.Model.classes();//創(chuàng)建班級實體
mc.classid= GetId();
mc.classname = Request.Form\["txt-ClassName"\].ToString();
mc.proid=ddlPro.Selected Value;
bc.Add(mc);//調用業(yè)務邏輯層添加班級信息的方法,完成添加操作
Grid View1.DataSource = bc.Get All List().Tables\[0\].Default View ;
Grid View1.DataBind();
//End
//以下代碼將Grid View?轉換成 HTML流,存到builder中,在GetCallBack Result時傳回客戶端
System.IO.String Writer sw = new System.IO.StringWriter();
Html Text Writer htw=new Html Text-Writer(sw);
Grid View1.RenderControl(htw);
builder.Append(sw.ToString());
}
第二步,需要在aspx文件中注冊回調方法.
(1)在<Head>標簽內添加以下Javascript代碼:
function ReceiveServer Data(arg,context)
{
document.get ElementById ("msg_display").inner HTML=arg;//將服務器傳回的Grid View的HTML碼顯示在名為“msg_display”的DIV標簽內.
}
function Call TheServer(arg,context)
{
<% =ClientScript.GetCallback Event Reference(this,"arg","ReceiveServer Data","context")%>//注冊回調方法
}
(2)處理添加按鈕的onclick客戶端事件處理函數為:Call TheServer.
<input type="button"value="添加"onclick="Call TheServer(')"id="Button1"/>
在Call TheServer函數中對回調函數注冊后,當用戶點擊“添加”按鈕時,服務器端就會執(zhí)行Raise-Callback Event方法,即處理數據的插入操作,重新綁定Grid View的數據源,以及將Grid View轉換成新的HTML碼,最后以GetCallback Result返回給客戶端,而客戶端就會以ReceiveServer Data函數接收這個HTML碼,將其放到合適的位置中.在整個處理過程中,Grid View的更新是無刷新的.
所謂服務器推送技術,就是當客戶端提出一個請求后,即和服務器建立一個永久的連接,而后服務器會根據客戶端的請求主動把數據推給客戶端,這個推的過程是不間斷的.由服務器推向客戶端的數據在客戶機的瀏覽器上會不斷呈現出新的內容[4].
在本系統(tǒng)中,有2個功能在實現時用到了服務器推送技術:其一是站內短信的即時提醒功能,本功能做到了當站內在線的用戶給他人發(fā)送短信時,接收方可以實時獲得新短消息的閃爍圖片通知;其二是學生進行課題選報時所使用的課題列表頁面,該頁面要時刻根據所有同學的選報情況控制每個在線學生的課題列表中每個課題所在行的“創(chuàng)建課題組”和“加入課題組”按鈕的可用狀況,以避免在學生從進入課題列表頁面到確定選報哪個題目并進行操作這段時間內,因其他同學已經報滿了該題目而浪費學生的選題時間.
下面以站內短信即時提醒功能為例,說明服務器推送技術在本系統(tǒng)中的具體實現.本系統(tǒng)站內短信新消息的提醒是采用在母版頁上顯示閃爍的GIF圖標來提醒用戶的.母版頁的核心代碼如下:
在<head>標簽中添加以下javascript:
<script type="text/javascript">
function SetContent()
{
window.document.get ElementById("div New Message").inner HTML="<a href='list My-New Message.aspx'><img width=30 height=20 src='imgs/message.gif'/></a>";
//在<body>中需要有一個名為div New Message的標簽,該標簽就是用來顯示新消息提醒圖標的
}
function init(){
var ifr1= new ActiveXObject("htmlfile");//創(chuàng)建htmlfile對象
ifr1.open();//打開該對象
var iDiv=ifr1.createElement("div");//在該htmlfile對象中創(chuàng)建一個div標簽
ifr1.appendChild(iDiv);//將創(chuàng)建的div添加到htmlfile
ifr1.parent Window.SetContent=SetContent;//注冊方法
iDiv.inner HTML = "<iframe src='message.aspx'></iframe>";//在上面創(chuàng)建的div里添加iframe
ifr1.close();//關閉htmlfile對象
setInterval(function(){},10000);//循環(huán)執(zhí)行,因htmlfile對象存在超時的問題
}
init();執(zhí)行init函數
</script>
在init函數中提到的message.aspx就是要和服務器保持長連接的頁面,其后臺C#代碼如下 :
Application[Session["username"].ToString()]= Response;//Session["username"]會在用戶登錄時產生,存儲用戶名,該行代碼的目的是保存每一個登錄用戶及其長連接頁面的Response對象.
System.Threading.Thread.Sleep (System.Threading.Timeout.Infinite);//使該頁面永不完成,以實現長連接
發(fā)送站內消息的發(fā)送按鈕事件代碼如下:
for (int i = 0;i < Application.All Keys.Length;i++)//遍歷各在線用戶的Response對象
{
string name= Application.All Keys[i];//獲得Application的鍵,即用戶名
Http Response Response=Application[name]as Http Response;//獲得該用戶的Response
if(Response?。?null && Response.IsClientConnected)
for (int j= 0;j< cbl User List.Items.Count;j++)//遍歷短信的目標用戶列表if (cbl User List.Items [j].Selected&&cbl User List.Items[j].Value==name)
{//如果當前Response所屬用戶是短信接受人,則執(zhí)行推送
Response.Write("<script>parent.SetContent()</script>");
Response.Flush();
}
e
lse
Application.Remove(name);
}
總體來說,服務器推送功能由3個重要的環(huán)節(jié)來實現:
(1)構造長連接頁面,時刻保持與服務器的連接,隨時接受服務器“推”來的數據;
(2)保管每一個長連接,推送時才能有目的地進行;
(3)需要htmlfile對象來避免下載進度條持續(xù)下載的缺陷.
本系統(tǒng)能夠完成軟件學院實踐環(huán)節(jié)課題申報全業(yè)務過程的自動化管理,大大提高了工作效率,有效保證了數據的及時性和準確性.本系統(tǒng)自2006年開始投入試運行,4年間經過了3個版本的升級與完善,目前運行穩(wěn)定,業(yè)務邏輯嚴謹,計算準確.
[1]李園,陳世平.MVC設計模式在ASP.NET平臺中的應用[J].計算機工程與設計,2009(30):3180-3184.
[2]甄鐳 .NET與設計模式[M].北京:電子工業(yè)出版社,2005.
[3]修桂華,李紅光.AJAX技術在 ASP.NET開發(fā)中的應用[J].科技資訊,2009(33):7-8.
[4]Jason Bell,Mike Clark.ASP.NET程序員參考手冊[M].北京:清華大學出版社,2002.
Designing and Realizing of ASP.NET Based Project Declaring System for Practicing Courses of Software College
ZHAO Dong,GAO Liang
(Zhongyuan University of Technology,Zhengzhou 450007,China)
This article discusses the framework,function modules and the key thchniques of project declaring system for practicing courses,which was designed from the real working flow of software college and aimed at robotization and informationization of project declaring.The system was designed and realized by ASP.NET,AJAX and C#.NET,which can automaticly process teacher’s opening project,manager’s auditing project,students’declaring project and teacher’s arrpoving students,which can improve the working efficiency of project declaring.
project declaring;practicing courses;3-tier application
TP315
A
10.3969/j.issn.1671-6906.2011.02.018
1671-6906(2011)02-0066-05
2011-02-27
趙 冬(1976-),女,河南鄭州人,講師,碩士.