趙 冬,高 亮
(中原工學(xué)院,鄭州450007)
基于ASP.NET的軟件學(xué)院實踐環(huán)節(jié)課題申報系統(tǒng)的設(shè)計與實現(xiàn)
趙 冬,高 亮
(中原工學(xué)院,鄭州450007)
從軟件學(xué)院實踐環(huán)節(jié)課題申報工作的實際需求出發(fā),以實現(xiàn)軟件學(xué)院實踐環(huán)節(jié)課題申報工作的自動化、信息化管理為目標,討論了系統(tǒng)軟件架構(gòu)、功能模塊及涉及到的關(guān)鍵技術(shù).系統(tǒng)采用微軟ASP.NET、AJAX技術(shù)及C#語言,可實現(xiàn)從教師開設(shè)課題,管理員審核課題,到學(xué)生申報課題,教師批準學(xué)生申報全過程的自動化管理,提高了實踐環(huán)節(jié)課題申報工作的效率.
課題申報;實踐環(huán)節(jié);三層架構(gòu)
目前,我國已有越來越多的高校開設(shè)了軟件學(xué)院,這些軟件學(xué)院多以培養(yǎng)應(yīng)用型軟件工程人才為目標.在學(xué)生的培養(yǎng)過程中,實踐環(huán)節(jié)占了教學(xué)過程的較大比重,基本上每個學(xué)期末,都會安排一個為期1~3周的集中實踐課程.課程實踐中,教師要帶領(lǐng)學(xué)生,以組或個人為單位,開發(fā)具有一定規(guī)模的軟件.這類實踐課程的管理過程一般是:①在實踐課程開始前若干周,由各位教師發(fā)布自己的題目及每個題目需要多少組、每組多少人;②題目經(jīng)過相關(guān)管理人員審批合格后,即公布給學(xué)生;③學(xué)生自由結(jié)合成組,選擇教師及題目;④教師確認自己所帶的組,并將最終的選報結(jié)果公布給學(xué)生.
目前,很多高校的這一選報過程仍采用手工或半自動化方式來完成,不僅工作效率較低,而且結(jié)果不準確,每次都會發(fā)生學(xué)生漏報或教師統(tǒng)計錯誤等情況,給后續(xù)的統(tǒng)計教師工作量及提交學(xué)生成績等工作造成不便.本課題申報系統(tǒng)能夠完成課題申報審批的全自動化處理,不僅減少了相關(guān)人員的工作壓力、提高了工作效率,而且提高了課題申報過程的規(guī)范性和準確性.
本系統(tǒng)采用了三層架構(gòu)模式.所謂三層架構(gòu),是將整個系統(tǒng)劃分為三層,自下而上分別是數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層和表示層[1].如圖1所示.三層架構(gòu)模式層與層相對獨立,各層分別負責(zé)完成一類工作.該模式具有分散關(guān)注、松散耦合、邏輯復(fù)用等優(yōu)勢[2].
圖1 軟件架構(gòu)示意圖
本系統(tǒng)功能模塊包括教師功能模塊、管理員功能模塊、學(xué)生功能模塊及通用功能模塊.系統(tǒng)體系結(jié)構(gòu)如圖2所示.
圖2 實踐課題申報系統(tǒng)體系結(jié)構(gòu)圖
教師功能模塊包括:
(1)個人題庫管理.教師可以維護自己的題庫,進行新增、修改及刪除題目等操作.每個學(xué)期申報題目時可以直接從題庫中選取或稍加修改,無需重復(fù)錄入.個人題庫中的題目只有教師本人可以維護.
(2)課題申請.教師在個人題庫或公共題庫列表中選擇合適的題目,只要選擇正確的學(xué)期、實踐環(huán)節(jié)類型、專業(yè)、組數(shù)、每組人數(shù)等信息,即可提交申請.
(3)學(xué)生選報處理.教師與學(xué)生之間是雙向選擇的關(guān)系,學(xué)生在選報教師的某個課題后,教師要對其進行確認,同時也有權(quán)拒絕其加入課題組.經(jīng)過確認的學(xué)生,不能再自行退組.學(xué)生如要更換教師或題目,必須由本人提出申請,由教師將學(xué)生除名后才能再選擇其他教師的題目.
(4)學(xué)生成果管理.課題結(jié)束時,學(xué)生必須上傳自己的代碼及文檔.教師可通過此模塊查看并下載自己所帶學(xué)生上傳的成果.
管理員功能模塊包括:
(1)公共題庫管理.管理員可以維護公共題庫,公共題庫中的題目可以供所有教師使用.
(2)課題審批.教師提交課題申請之后,需要經(jīng)過管理員審批,學(xué)生才能選題.如審批沒通過,管理員可將沒通過的原因反饋給教師.
(3)基礎(chǔ)信息管理.管理員還需管理系統(tǒng)運行所需的基礎(chǔ)信息,如學(xué)生信息、教師信息、專業(yè)信息、班級信息、課題允許選報時間設(shè)置等.
學(xué)生功能模塊包括:
(1)課題選報.學(xué)生登錄后可看到與自己本專業(yè)、本次實踐環(huán)節(jié)相關(guān)的所有題目,可查看每一個題目的詳細信息及目前的選報情況,如課題組是否已經(jīng)報滿、各組組員是否已經(jīng)報滿等情況.學(xué)生選好課題后,可自行在該課題下創(chuàng)建項目組(在該課題項目組數(shù)未滿的情況下)并設(shè)置組密碼,也可直接加入其他組(該組的組員未滿,且要求輸入組密碼).學(xué)生在創(chuàng)建或加入某組后,在教師未確認之前,仍可自行退組并選擇其他組或課題.教師確認后,學(xué)生會收到一條確認成功的站內(nèi)短信,且不能再退組.如果教師將學(xué)生除名,被除名的學(xué)生會收到一條站內(nèi)短信,則該生處于未加入任何組的狀態(tài),可繼續(xù)選擇其他教師的題目.
(2)成果提交.在實踐環(huán)節(jié)結(jié)束時,學(xué)生可以通過該模塊提交自己的代碼及文檔等成果性資料,作為教師評分的依據(jù).
通用功能模塊包括:
(1)登錄.本系統(tǒng)所有用戶必須經(jīng)過登錄驗證身份后才可使用.如果是學(xué)生登錄,需要以學(xué)生所在班級為依據(jù),結(jié)合當前日期計算本學(xué)期該生應(yīng)該參加哪個實踐環(huán)節(jié),以及目前是否已經(jīng)開放了該實踐環(huán)節(jié)的選題功能.系統(tǒng)會根據(jù)計算結(jié)果決定是否顯示課題列表以及顯示哪些題目.
(2)公告.管理員有權(quán)發(fā)布公告,教師及學(xué)生只有瀏覽公告的權(quán)限.
(3)站內(nèi)短信.管理員可向任何人發(fā)送站內(nèi)短信,教師可向自己所帶學(xué)生及管理員發(fā)送站內(nèi)短信;學(xué)生可向自己的指導(dǎo)教師及管理員發(fā)送站內(nèi)短信.系統(tǒng)支持群發(fā)功能.
(4)BBS.任何登錄用戶均可使用BBS進行交流.管理員具有論壇管理權(quán)限,包括刪除帖子、刪除回復(fù)、封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)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù).AJAX最大的特點是實現(xiàn)了客戶端與服務(wù)器端之間異步的數(shù)據(jù)交換[3].目前在 ASP.NET2.0下,可以有多種方式實現(xiàn)AJAX.本系統(tǒng)是采用Client CallBack方式實現(xiàn)的.
本系統(tǒng)幾乎所有涉及到數(shù)據(jù)列表刷新的頁面都采用了AJAX技術(shù),下面以班級信息的添加操作為例,說明采用Client CallBack方式實現(xiàn)AJAX的方法:
第一步,使需要完成AJAX效果的頁面實現(xiàn)ICallback Event Handler:
public partial class Classes Manage :System.Web.UI.Page,System.Web.UI.ICallback Event Handler
既然需要實現(xiàn)ICallback Event Handler接口,就要實現(xiàn)接口中定義的2個方法:GetCallback Result和RaiseCallback Event.第一個方法用來返回回調(diào)事件的結(jié)果,第二個方法用來處理回調(diào)事件.
班級管理頁面中,這2個方法的核心實現(xiàn)如下:
public string Get Callback Result()
{
return builder.ToString();//builder 為Classes Manage類的成員變量
}
public void RaiseCallback Event(string event Argument)
{
//Begin實現(xiàn)班級信息的添加,重新綁定數(shù)據(jù)顯示列表
BLL.classes bc = new Maticsoft.BLL.classes();//創(chuàng)建班級的業(yè)務(wù)邏輯層對象
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);//調(diào)用業(yè)務(wù)邏輯層添加班級信息的方法,完成添加操作
Grid View1.DataSource = bc.Get All List().Tables\[0\].Default View ;
Grid View1.DataBind();
//End
//以下代碼將Grid View?轉(zhuǎn)換成 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文件中注冊回調(diào)方法.
(1)在<Head>標簽內(nèi)添加以下Javascript代碼:
function ReceiveServer Data(arg,context)
{
document.get ElementById ("msg_display").inner HTML=arg;//將服務(wù)器傳回的Grid View的HTML碼顯示在名為“msg_display”的DIV標簽內(nèi).
}
function Call TheServer(arg,context)
{
<% =ClientScript.GetCallback Event Reference(this,"arg","ReceiveServer Data","context")%>//注冊回調(diào)方法
}
(2)處理添加按鈕的onclick客戶端事件處理函數(shù)為:Call TheServer.
<input type="button"value="添加"onclick="Call TheServer(')"id="Button1"/>
在Call TheServer函數(shù)中對回調(diào)函數(shù)注冊后,當用戶點擊“添加”按鈕時,服務(wù)器端就會執(zhí)行Raise-Callback Event方法,即處理數(shù)據(jù)的插入操作,重新綁定Grid View的數(shù)據(jù)源,以及將Grid View轉(zhuǎn)換成新的HTML碼,最后以GetCallback Result返回給客戶端,而客戶端就會以ReceiveServer Data函數(shù)接收這個HTML碼,將其放到合適的位置中.在整個處理過程中,Grid View的更新是無刷新的.
所謂服務(wù)器推送技術(shù),就是當客戶端提出一個請求后,即和服務(wù)器建立一個永久的連接,而后服務(wù)器會根據(jù)客戶端的請求主動把數(shù)據(jù)推給客戶端,這個推的過程是不間斷的.由服務(wù)器推向客戶端的數(shù)據(jù)在客戶機的瀏覽器上會不斷呈現(xiàn)出新的內(nèi)容[4].
在本系統(tǒng)中,有2個功能在實現(xiàn)時用到了服務(wù)器推送技術(shù):其一是站內(nèi)短信的即時提醒功能,本功能做到了當站內(nèi)在線的用戶給他人發(fā)送短信時,接收方可以實時獲得新短消息的閃爍圖片通知;其二是學(xué)生進行課題選報時所使用的課題列表頁面,該頁面要時刻根據(jù)所有同學(xué)的選報情況控制每個在線學(xué)生的課題列表中每個課題所在行的“創(chuàng)建課題組”和“加入課題組”按鈕的可用狀況,以避免在學(xué)生從進入課題列表頁面到確定選報哪個題目并進行操作這段時間內(nèi),因其他同學(xué)已經(jīng)報滿了該題目而浪費學(xué)生的選題時間.
下面以站內(nèi)短信即時提醒功能為例,說明服務(wù)器推送技術(shù)在本系統(tǒng)中的具體實現(xiàn).本系統(tǒng)站內(nèi)短信新消息的提醒是采用在母版頁上顯示閃爍的GIF圖標來提醒用戶的.母版頁的核心代碼如下:
在<head>標簽中添加以下javascript:
<script type="text/javascript">
function SetContent()
{
window.document.get ElementById("div New Message").inner HTML="<a href='list My-New Message.a(chǎn)spx'><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.a(chǎn)ppendChild(iDiv);//將創(chuàng)建的div添加到htmlfile
ifr1.parent Window.SetContent=SetContent;//注冊方法
iDiv.inner HTML = "<iframe src='message.a(chǎn)spx'></iframe>";//在上面創(chuàng)建的div里添加iframe
ifr1.close();//關(guān)閉htmlfile對象
setInterval(function(){},10000);//循環(huán)執(zhí)行,因htmlfile對象存在超時的問題
}
init();執(zhí)行init函數(shù)
</script>
在init函數(shù)中提到的message.a(chǎn)spx就是要和服務(wù)器保持長連接的頁面,其后臺C#代碼如下 :
Application[Session["username"].ToString()]= Response;//Session["username"]會在用戶登錄時產(chǎn)生,存儲用戶名,該行代碼的目的是保存每一個登錄用戶及其長連接頁面的Response對象.
System.Threading.Thread.Sleep (System.Threading.Timeout.Infinite);//使該頁面永不完成,以實現(xiàn)長連接
發(fā)送站內(nèi)消息的發(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);
}
總體來說,服務(wù)器推送功能由3個重要的環(huán)節(jié)來實現(xiàn):
(1)構(gòu)造長連接頁面,時刻保持與服務(wù)器的連接,隨時接受服務(wù)器“推”來的數(shù)據(jù);
(2)保管每一個長連接,推送時才能有目的地進行;
(3)需要htmlfile對象來避免下載進度條持續(xù)下載的缺陷.
本系統(tǒng)能夠完成軟件學(xué)院實踐環(huán)節(jié)課題申報全業(yè)務(wù)過程的自動化管理,大大提高了工作效率,有效保證了數(shù)據(jù)的及時性和準確性.本系統(tǒng)自2006年開始投入試運行,4年間經(jīng)過了3個版本的升級與完善,目前運行穩(wěn)定,業(yè)務(wù)邏輯嚴謹,計算準確.
[1]李園,陳世平.MVC設(shè)計模式在ASP.NET平臺中的應(yīng)用[J].計算機工程與設(shè)計,2009(30):3180-3184.
[2]甄鐳 .NET與設(shè)計模式[M].北京:電子工業(yè)出版社,2005.
[3]修桂華,李紅光.AJAX技術(shù)在 ASP.NET開發(fā)中的應(yīng)用[J].科技資訊,2009(33):7-8.
[4]Jason Bell,Mike Clark.ASP.NET程序員參考手冊[M].北京:清華大學(xué)出版社,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-),女,河南鄭州人,講師,碩士.