摘要:該文首先簡要介紹高校選修課的選課流程,提出適應該流程的選課系統(tǒng)實施方案,并詳細描述方案中各環(huán)節(jié)的實施角色、過程和其他要點;其次列出了選課系統(tǒng)的關鍵表以及核心代碼。該選課系統(tǒng)已經成功實施3年,流程清晰,功能穩(wěn)定。
關鍵詞:網(wǎng)上選課,選課系統(tǒng),教務管理,ASP.NET
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2009)36-10148-03
1 研究現(xiàn)狀及存在問題分析
近年來,隨著當前高等院校辦學規(guī)模的不斷擴大,直接伴隨而來的是高校教師和學生的數(shù)目不斷增加,傳統(tǒng)的手工選課處理方式已不能適應新形勢下的教學管理模式,越來越多的高校都在積極探索研究適應新的教學管理模式的網(wǎng)上選課系統(tǒng)。在目前這種大環(huán)境下,一些比較知名軟件企業(yè)也抓住這個機遇,開發(fā)了許多相應的軟件。盡管軟件通用性比較強,但還是存在或多或少的問題,比如某些功能上不能滿足高校的特殊要求、軟件后期維護及以后的二次開發(fā)比較困難等?;谏鲜鲈颍诠P者在江蘇農林職業(yè)技術學院教務處的實際工作經驗,自主研發(fā)了教務管理的網(wǎng)上選課系統(tǒng)。
2 網(wǎng)上選課需求分析
1)初始化相關數(shù)據(jù)
該環(huán)節(jié)的執(zhí)行角色是教務處負責選課的管理員。設置當前選課學期、允許申報開課的教師名單、允許選課的學生名單;設置教師申報的時間段;設置學生選課的正選、退補選時間段;增設新的課程代碼;打開教師網(wǎng)上申報開關。
2)教師網(wǎng)上申報開課
在規(guī)定的時間內,教師登錄選課申報系統(tǒng)完成申報課程信息錄入,主要信息有課程的簡要介紹、考核方式、學分、個人信息以及上課時間和教室要求。
3)教務處審核申報課程
教務處根據(jù)學校公選課開課要求,篩選教師申報的課程,同時計算通過審核課程的可選人次數(shù),確保學生都有課可選。
4)關閉教師申報通道
該環(huán)節(jié)的執(zhí)行角色是教務處負責選課的管理員。管理員設置系統(tǒng)關閉時間,系統(tǒng)將自動關閉教師申請通道,此時,教師將無法在網(wǎng)上申報開課,已經通過審核的開課教師亦不可修改個人或課程信息。
5)管理員處理開課數(shù)據(jù)
該環(huán)節(jié)的執(zhí)行角色是教務處負責選課的管理員。此時,開課教師和開課課程已經確認完畢,但是尚未安排上課時間和教室以及設置每門課程的限選信息。管理員將根據(jù)教師申請時的信息以及本校的實際情況綜合解決上述問題。
6)開放網(wǎng)上選課
該環(huán)節(jié)的執(zhí)行角色是教務處負責選課的管理員。管理員在確認教師上課時間和教室無沖突之后,打開網(wǎng)上選課開關。
7)學生在網(wǎng)上選課
在規(guī)定的時間內,學生登錄選課系統(tǒng)進行選課。選課過程中能夠查詢待選課程的簡要介紹、考核方式、學分以及授課教師信息等,選課結束后可以瀏覽個人所選課程及歷史所選課程。選課時,判斷學生是否已經完成了網(wǎng)上評教,如果未完成評教,系統(tǒng)提示先完成評價后方能選課。
8)關閉選課通道
該環(huán)節(jié)的執(zhí)行角色是教務處負責選課的管理員。管理員設置系統(tǒng)關閉時間,系統(tǒng)將自動關閉選課通道。
9)處理選課結果
該環(huán)節(jié)的執(zhí)行角色是教務處負責選課的管理員。公布退學和補選的學生名單,退學和補選的學生將進行退\\補選階段。
10)選課結束
該環(huán)節(jié)的執(zhí)行角色是教務處負責選課的管理員。選課結束后,管理員將公布開課課程信息和選課成功的學生名單和信息。關閉選課功能。
3 系統(tǒng)設計
1)系統(tǒng)軟件環(huán)境
操作系統(tǒng):Windows Server 2003 / Windows Server 2008
應用服務器:IIS 6 / IIS 7、DotNet FrameWork 2.0 / DotNet FrameWork 3.5
數(shù)據(jù)庫服務器:SQL SERVER 2000/2005/2008。
2) 開發(fā)環(huán)境及方法
使用Visual Studio 2008,選擇ASP.NET、C# 進行開發(fā)。采用B/S加C/S架構。學生選課平臺及教師申報平臺使用B/S開發(fā),管理員模塊使用C/S開放。
3)數(shù)據(jù)庫設計(表1~表4為部分重要表)。
4 系統(tǒng)開發(fā)
1)學生登錄代碼
string pwd = TextBox_密碼.Text.Trim();//獲取學生輸入的密碼
if (pwd == TextBox3.Text.Trim() || pwd == \"123456\" || pwd == \"1234567\" || pwd == \"12345678\" || pwd == \"123456789\" || pwd == \"123123\")//判斷是否為簡單密碼
{Response.Redirect(\"easypwd.htm\");//如果是簡單密碼就轉到指定的頁面讓學生修改密碼
}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_學號.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('學號或者密碼錯誤!');\");
}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\");//登錄成功,跳轉到學生選課頁面
}}
2)學生登錄成功后選課列表展示代碼
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)學生選課代碼
if (Literal_學號.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('該課程已達到人數(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 結束語
江蘇農林職業(yè)技術學院是我國國家示范性高職院建設單位、全國職業(yè)教育先進單位, 其教務管理水平在高職類院校中是領先的。該系統(tǒng)方案已經實現(xiàn)并已于3年前正式投入使用,期間進行了一定的完善工作,系統(tǒng)目前運行穩(wěn)定,性能良好,有效地支撐了一個在校生達13000 多人的高職院校的選課工作。
參考文獻:
[1] Simon Robinson,Christian Nagel. C#高級編程[M].3版.北京:清華大學出版社,2006.
[2] 姜峰.高校選課系統(tǒng)的設計與實現(xiàn)[J].農業(yè)網(wǎng)絡信息,2009(4).
[3] 劉小華,黃煒.高職示范校選課系統(tǒng)實施方案設計[J].現(xiàn)代計算機,2007.