摘要:該文首先簡要介紹高校選修課的選課流程,提出適應(yīng)該流程的選課系統(tǒng)實施方案,并詳細(xì)描述方案中各環(huán)節(jié)的實施角色、過程和其他要點;其次列出了選課系統(tǒng)的關(guān)鍵表以及核心代碼。該選課系統(tǒng)已經(jīng)成功實施3年,流程清晰,功能穩(wěn)定。
關(guān)鍵詞:網(wǎng)上選課,選課系統(tǒng),教務(wù)管理,ASP.NET
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2009)36-10148-03
1 研究現(xiàn)狀及存在問題分析
近年來,隨著當(dāng)前高等院校辦學(xué)規(guī)模的不斷擴(kuò)大,直接伴隨而來的是高校教師和學(xué)生的數(shù)目不斷增加,傳統(tǒng)的手工選課處理方式已不能適應(yīng)新形勢下的教學(xué)管理模式,越來越多的高校都在積極探索研究適應(yīng)新的教學(xué)管理模式的網(wǎng)上選課系統(tǒng)。在目前這種大環(huán)境下,一些比較知名軟件企業(yè)也抓住這個機(jī)遇,開發(fā)了許多相應(yīng)的軟件。盡管軟件通用性比較強(qiáng),但還是存在或多或少的問題,比如某些功能上不能滿足高校的特殊要求、軟件后期維護(hù)及以后的二次開發(fā)比較困難等。基于上述原因,基于筆者在江蘇農(nóng)林職業(yè)技術(shù)學(xué)院教務(wù)處的實際工作經(jīng)驗,自主研發(fā)了教務(wù)管理的網(wǎng)上選課系統(tǒng)。
2 網(wǎng)上選課需求分析
1)初始化相關(guān)數(shù)據(jù)
該環(huán)節(jié)的執(zhí)行角色是教務(wù)處負(fù)責(zé)選課的管理員。設(shè)置當(dāng)前選課學(xué)期、允許申報開課的教師名單、允許選課的學(xué)生名單;設(shè)置教師申報的時間段;設(shè)置學(xué)生選課的正選、退補(bǔ)選時間段;增設(shè)新的課程代碼;打開教師網(wǎng)上申報開關(guān)。
2)教師網(wǎng)上申報開課
在規(guī)定的時間內(nèi),教師登錄選課申報系統(tǒng)完成申報課程信息錄入,主要信息有課程的簡要介紹、考核方式、學(xué)分、個人信息以及上課時間和教室要求。
3)教務(wù)處審核申報課程
教務(wù)處根據(jù)學(xué)校公選課開課要求,篩選教師申報的課程,同時計算通過審核課程的可選人次數(shù),確保學(xué)生都有課可選。
4)關(guān)閉教師申報通道
該環(huán)節(jié)的執(zhí)行角色是教務(wù)處負(fù)責(zé)選課的管理員。管理員設(shè)置系統(tǒng)關(guān)閉時間,系統(tǒng)將自動關(guān)閉教師申請通道,此時,教師將無法在網(wǎng)上申報開課,已經(jīng)通過審核的開課教師亦不可修改個人或課程信息。
5)管理員處理開課數(shù)據(jù)
該環(huán)節(jié)的執(zhí)行角色是教務(wù)處負(fù)責(zé)選課的管理員。此時,開課教師和開課課程已經(jīng)確認(rèn)完畢,但是尚未安排上課時間和教室以及設(shè)置每門課程的限選信息。管理員將根據(jù)教師申請時的信息以及本校的實際情況綜合解決上述問題。
6)開放網(wǎng)上選課
該環(huán)節(jié)的執(zhí)行角色是教務(wù)處負(fù)責(zé)選課的管理員。管理員在確認(rèn)教師上課時間和教室無沖突之后,打開網(wǎng)上選課開關(guān)。
7)學(xué)生在網(wǎng)上選課
在規(guī)定的時間內(nèi),學(xué)生登錄選課系統(tǒng)進(jìn)行選課。選課過程中能夠查詢待選課程的簡要介紹、考核方式、學(xué)分以及授課教師信息等,選課結(jié)束后可以瀏覽個人所選課程及歷史所選課程。選課時,判斷學(xué)生是否已經(jīng)完成了網(wǎng)上評教,如果未完成評教,系統(tǒng)提示先完成評價后方能選課。
8)關(guān)閉選課通道
該環(huán)節(jié)的執(zhí)行角色是教務(wù)處負(fù)責(zé)選課的管理員。管理員設(shè)置系統(tǒng)關(guān)閉時間,系統(tǒng)將自動關(guān)閉選課通道。
9)處理選課結(jié)果
該環(huán)節(jié)的執(zhí)行角色是教務(wù)處負(fù)責(zé)選課的管理員。公布退學(xué)和補(bǔ)選的學(xué)生名單,退學(xué)和補(bǔ)選的學(xué)生將進(jìn)行退\\補(bǔ)選階段。
10)選課結(jié)束
該環(huán)節(jié)的執(zhí)行角色是教務(wù)處負(fù)責(zé)選課的管理員。選課結(jié)束后,管理員將公布開課課程信息和選課成功的學(xué)生名單和信息。關(guān)閉選課功能。
3 系統(tǒng)設(shè)計
1)系統(tǒng)軟件環(huán)境
操作系統(tǒng):Windows Server 2003 / Windows Server 2008
應(yīng)用服務(wù)器:IIS 6 / IIS 7、DotNet FrameWork 2.0 / DotNet FrameWork 3.5
數(shù)據(jù)庫服務(wù)器:SQL SERVER 2000/2005/2008。
2) 開發(fā)環(huán)境及方法
使用Visual Studio 2008,選擇ASP.NET、C# 進(jìn)行開發(fā)。采用B/S加C/S架構(gòu)。學(xué)生選課平臺及教師申報平臺使用B/S開發(fā),管理員模塊使用C/S開放。
3)數(shù)據(jù)庫設(shè)計(表1~表4為部分重要表)。
4 系統(tǒng)開發(fā)
1)學(xué)生登錄代碼
string pwd = TextBox_密碼.Text.Trim();//獲取學(xué)生輸入的密碼
if (pwd == TextBox3.Text.Trim() || pwd == \"123456\" || pwd == \"1234567\" || pwd == \"12345678\" || pwd == \"123456789\" || pwd == \"123123\")//判斷是否為簡單密碼
{Response.Redirect(\"easypwd.htm\");//如果是簡單密碼就轉(zhuǎn)到指定的頁面讓學(xué)生修改密碼
}else
{DataSet ds = new DataSet();
string legend = System.Configuration.ConfigurationManager.AppSettings[\"jxgl_jsnx\"];
legend = David.code.DecryptString(legend);//解密SQL連接字符串
SqlConnection conn = new System.Data.SqlClient.SqlConnection(legend);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(\"select xh,bh from student where xh=@xh and kl=@kl\", conn);
da.SelectCommand.Parameters.AddWithValue(\"@xh\", TextBox_學(xué)號.Text.Trim());
da.SelectCommand.Parameters.AddWithValue(\"@kl\", TextBox_密碼.Text.Trim());
da.Fill(ds);
conn.Close();
if (ds.Tables[0].Rows.Count < 1)
{ScriptManager scriptManager = new ScriptManager();
scriptManager.RegisterClientScriptBlock(this, \"\", \"alert('學(xué)號或者密碼錯誤!');\");
}else
{Session[\"xh\"] = ds.Tables[0].Rows[0][0].ToString().Trim();
Session[\"bh\"] = ds.Tables[0].Rows[0][1].ToString().Trim();
Response.Redirect(\"/stu/index.aspx\");//登錄成功,跳轉(zhuǎn)到學(xué)生選課頁面
}}
2)學(xué)生登錄成功后選課列表展示代碼
DataTable dt = new DataTable();
string xq = System.Configuration.ConfigurationManager.AppSettings[\"xkxq\"];
string legend = System.Configuration.ConfigurationManager.AppSettings[\"jxgl_jsnx\"];
legend = David.code.DecryptString(legend);
SqlConnection conn = new System.Data.SqlClient.SqlConnection(legend);
conn.Open();
string sql = \"select kcxh,ltrim(str(kcxh))+ ':'+ rtrim(gxkbk.kcdm) + ':' + rtrim(kcmc)+ ':' + rtrim(zc)+':'+rtrim(jc1)+':'+rtrim(jc2) as id,zc,ltrim(rtrim(str(jc1)))+' - '+ltrim(rtrim(str(jc2))) as jc,jse,jsmc,kcmc,xxsm,xxrs,yx_rs from gxkbk left join kcdm on gxkbk.kcdm=kcdm.kcdm where and yxrs
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.SelectCommand.Parameters.AddWithValue(\"@xq\", xq);
da.SelectCommand.Parameters.AddWithValue(\"@bmmc\", Literal5.Text + \",\");
da.Fill(dt);
conn.Close();
GridView_選課列表.DataSource = dt;
GridView_選課列表.DataBind();
3)學(xué)生選課代碼
if (Literal_學(xué)號.Text != Session[\"xh\"].ToString())
{Session.RemoveAll();
Response.Write(\"
Response.End(); }
if (e.CommandName == \"down\")
{ int i = 0;
int max = 0;
i = Search(Session[\"xh\"].ToString());
max = Max(Session[\"xh\"].ToString());
if (i >= max)
{ ScriptManager scriptManager = new ScriptManager();
scriptManager.RegisterClientScriptBlock(this.Page, \"\", \"alert('超出限選課次!');\");
}else
{ String id = e.CommandArgument.ToString();
string[] str = id.Split(':');
DataTable dt = new DataTable();
string xq = System.Configuration.ConfigurationManager.AppSettings[\"xkxq\"];
string legend = System.Configuration.ConfigurationManager.AppSettings[\"jxgl_jsnx\"];
legend = David.code.DecryptString(legend);
SqlConnection conn = new System.Data.SqlClient.SqlConnection(legend);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(\"select xxrs,yx_rs from gxkbk where xq=@xq and kcxh=@kcxh\", conn);
da.SelectCommand.Parameters.AddWithValue(\"@kcxh\", Convert.ToInt16(str[0]));
da.SelectCommand.Parameters.AddWithValue(\"@xq\", xq);
da.Fill(dt);
if(Convert.ToInt16(dt.Rows[0][1].ToString().Trim())>=Convert.ToInt16(dt.Rows[0][0].ToString().Trim()))
{ScriptManager scriptManager = new ScriptManager();
scriptManager.RegisterClientScriptBlock(this.Page, \"\", \"alert('該課程已達(dá)到人數(shù)上限!');\");
} else
{ int k = 0;
SqlCommand comm = new SqlCommand(\"insert into xkmd(xq,xh,bh,bj,xm,kcdm,kcmc,lbdh,zc,jc1,jc2,kcxh) values (@xq,@xh,@bh,@bj,@xm,@kcdm,@kcmc,@lbdh,@zc,@jc1,@jc2,@kcxh)\", conn);
comm.Parameters.AddWithValue(\"@xq\", xq);
comm.Parameters.AddWithValue(\"@xh\", Literal1.Text);
comm.Parameters.AddWithValue(\"@xm\", Literal2.Text);
comm.Parameters.AddWithValue(\"@bh\", Literal3.Text);
comm.Parameters.AddWithValue(\"@bj\", Literal4.Text);
comm.Parameters.AddWithValue(\"@kcxh\", Convert.ToInt16(str[0]));
comm.Parameters.AddWithValue(\"@kcdm\", str[1]);
comm.Parameters.AddWithValue(\"@kcmc\", str[2]);
comm.Parameters.AddWithValue(\"@lbdh\", \"B\");
comm.Parameters.AddWithValue(\"@zc\", Convert.ToInt16(str[3]));
comm.Parameters.AddWithValue(\"@jc1\", Convert.ToInt16(str[4]));
comm.Parameters.AddWithValue(\"@jc2\", Convert.ToInt16(str[5]));
k = comm.ExecuteNonQuery();
if (k == 1)
{ comm = new SqlCommand(\"update gxkbk set yx_rs=yx_rs+1 where kcxh=@kcxh and xq=@xq\", conn);
comm.Parameters.AddWithValue(\"@kcxh\", Convert.ToInt16(str[0]));
comm.Parameters.AddWithValue(\"@xq\", xq);
i = comm.ExecuteNonQuery();
ScriptManager scriptManager = new ScriptManager();
scriptManager.RegisterClientScriptBlock(this.Page, \"\", \"alert('選課成功!');\");
} GxkList();
MyChoose();
}
conn.Close();
}
}
5 結(jié)束語
江蘇農(nóng)林職業(yè)技術(shù)學(xué)院是我國國家示范性高職院建設(shè)單位、全國職業(yè)教育先進(jìn)單位, 其教務(wù)管理水平在高職類院校中是領(lǐng)先的。該系統(tǒng)方案已經(jīng)實現(xiàn)并已于3年前正式投入使用,期間進(jìn)行了一定的完善工作,系統(tǒng)目前運行穩(wěn)定,性能良好,有效地支撐了一個在校生達(dá)13000 多人的高職院校的選課工作。
參考文獻(xiàn):
[1] Simon Robinson,Christian Nagel. C#高級編程[M].3版.北京:清華大學(xué)出版社,2006.
[2] 姜峰.高校選課系統(tǒng)的設(shè)計與實現(xiàn)[J].農(nóng)業(yè)網(wǎng)絡(luò)信息,2009(4).
[3] 劉小華,黃煒.高職示范校選課系統(tǒng)實施方案設(shè)計[J].現(xiàn)代計算機(jī),2007.