鄭天宇+張玉軍+楊陽(yáng)+孫一笑
摘要:畢業(yè)設(shè)計(jì)雙選系統(tǒng)在高校辦公室管理中是個(gè)重要的環(huán)節(jié),其中教師和學(xué)生的分配問(wèn)題更為重要。該文在功能上實(shí)現(xiàn)了教師和學(xué)生的相互選擇和分配問(wèn)題,使得高校辦公更加簡(jiǎn)潔化、網(wǎng)絡(luò)化。
關(guān)鍵詞:畢業(yè)設(shè)計(jì)系統(tǒng);功能;ASP.Net;C#
中圖分類(lèi)號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)01-0115-02
在畢業(yè)設(shè)計(jì)雙選系統(tǒng)中,學(xué)生希望選擇到自己心儀的指導(dǎo)教師,教師希望自己的學(xué)生能夠勝任畢業(yè)設(shè)計(jì)的任務(wù)要求,系主任希望統(tǒng)計(jì)方便、分組便捷,管理員希望每個(gè)學(xué)生都能分配到教師的隊(duì)伍中,滿足這一系列的要求畢業(yè)設(shè)計(jì)雙選系統(tǒng)才算初步達(dá)到要求。本文主要分析并實(shí)現(xiàn)了在開(kāi)發(fā)中比較復(fù)雜并重要的功能模塊,方便計(jì)算機(jī)專(zhuān)業(yè)的初學(xué)者能快速找到畢業(yè)設(shè)計(jì)雙選系統(tǒng)開(kāi)發(fā)的基本思路與方法。
1 功能需求和分析
1.1 功能需求
本文中的畢業(yè)設(shè)計(jì)雙選系統(tǒng)目的是方便于學(xué)生與教師在畢業(yè)設(shè)計(jì)過(guò)程中的雙向選擇,減少人為統(tǒng)計(jì)過(guò)程的復(fù)雜繁瑣,應(yīng)用于高校辦公室的一個(gè)應(yīng)用型的管理系統(tǒng)。系統(tǒng)應(yīng)能實(shí)現(xiàn)不同用戶(學(xué)生、教師、系主任、管理員)訪問(wèn)并操作不同的功能模塊。學(xué)生:學(xué)生選擇教師、修改個(gè)人信息、訪問(wèn)系統(tǒng)公告等。教師:教師選擇學(xué)生、修改個(gè)人信息、訪問(wèn)系統(tǒng)公告、導(dǎo)出選擇結(jié)果表等。系主任:自動(dòng)分配剩余學(xué)生、教師分組、查看最終選擇結(jié)果等。管理員:更新系統(tǒng)公告、對(duì)數(shù)據(jù)進(jìn)行增刪改差、分配用戶權(quán)限等。
1.2 功能分析
基于asp.net技術(shù)的畢業(yè)設(shè)計(jì)管理系統(tǒng)在全國(guó)各大高校的信息管理系統(tǒng)中已經(jīng)廣泛使用,在功能分析上我們只對(duì)部分比較復(fù)雜的功能進(jìn)行具體分析。
1) 雙選功能
雙選功能包括學(xué)生選擇教師和教師選擇學(xué)生,在學(xué)生選擇教師中本系統(tǒng)采用的是下拉框的級(jí)聯(lián),使系統(tǒng)控制學(xué)生先選擇第一志愿再選擇第二志愿,其中第一志愿被選擇的教師不會(huì)在第二志愿的下拉框中再次出現(xiàn)避免重復(fù)選擇。
2) 自動(dòng)分配剩余學(xué)生功能
在進(jìn)行完所有人員的選擇后會(huì)剩余一部分沒(méi)有選擇成功的學(xué)生和隊(duì)伍未滿的指導(dǎo)教師,所以在系主任的功能模塊上添加了一個(gè)可以自動(dòng)分配剩余學(xué)生的按鈕,可以將沒(méi)有選擇成功的學(xué)生隨機(jī)分配到隊(duì)伍未滿的教師隊(duì)伍中,節(jié)省時(shí)間而且公平公正。
2 具體實(shí)現(xiàn)
2.1 學(xué)生選擇教師功能
除了上文介紹的基本思路外在下拉框的級(jí)聯(lián)中需要注意的一點(diǎn)是需要在選擇第一志愿后才能進(jìn)行第二志愿下拉框的數(shù)據(jù)綁定,具體實(shí)現(xiàn)代碼如下
protected void Volunteer1_SelectedIndexChanged(object sender, EventArgs e)
{DataBase db = new DataBase();string sql = "select tno,tname from teacher_information where tname!='"+ Volunteer1.SelectedValue + "'";DataSet ds = db.GetDataSet(sql);Volunteer2.DataSource = ds;Volunteer2.DataTextField = "tname";Volunteer2.DataValueField = "tno";Volunteer2.DataBind();Volunteer2.Items.Insert(0, new ListItem("=請(qǐng)先選擇第一志愿=", "0"));}
其中DataBase是一個(gè)數(shù)據(jù)庫(kù)操作類(lèi)可以直接獲得DataSet,前臺(tái)的樣式如圖1
2.2 教師選擇學(xué)生功能
在此功能模塊中第一志愿和第二志愿的選擇分兩個(gè)部分,教師必須先選擇第一志愿里的學(xué)生,如果教師可選的人數(shù)大于第一志愿可選的人數(shù)第二志愿選擇的按鈕才會(huì)開(kāi)啟,具體代碼實(shí)現(xiàn)如下
string sql ="select students_information.sno,class,name from choose_result,students_information where choose_result.sno=students_information.sno and tno='" + username + "'and zhiyuanNum=1";
DataSet ds = db.GetDataSet(sql);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
string sqll ="select students_information.sno,class,name from choose_result,students_information where choose_result.sno=students_information.sno and tno='" +
username + "'and zhiyuanNum=2";
DataSet dss = db.GetDataSet(sqll);
GridView2.DataSource = dss.Tables[0];
GridView2.DataBind();
int num = db.GetChooseNum(username);
choose_num.Text = Convert.ToString(num);
if (num == 0)
{btn_First.Enabled = false;btn_Second.Enabled = false;}endprint
else if( GridView1.Rows.Count > num )
btn_Second.Enabled = false;
前臺(tái)的樣式如圖2
2.3 剩余學(xué)生自動(dòng)分配功能
在此功能模塊中將已分配的學(xué)生和所有的學(xué)生取差集后用隨機(jī)數(shù)的方式將下標(biāo)進(jìn)行打亂再分配到不同的教師組別中,實(shí)現(xiàn)代碼如下
protected void distribute_Click(object sender, EventArgs e)
{DialogResult dr = MessageBox.Show("是否自動(dòng)分配剩余學(xué)生","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button2,MessageBoxOptions.DefaultDesktopOnly);
if (dr == DialogResult.OK)
{string different_set ="select students_information.sno,class,name from students_information where students_information.sno not in(select finally.sno from finally)";string sql = "select choose_num,tno from teacher_information";
DataBase db = new DataBase(); DataSet ds_different = db.GetDataSet(different_set);
DataSet ds_sql = db.GetDataSet(sql); List
for (int i = 0; i < ds_sql.Tables[0].Rows.Count; i++)
{int k = Convert.ToInt32(ds_sql.Tables[0].Rows[i]["choose_num"]);
for (int j = 0; j < ds_different.Tables[0].Rows.Count; j++)
{Random r = new Random();int num = r.Next(0, ds_different.Tables[0].Rows.Count);//隨機(jī)下標(biāo)if (k != 0 && !list.Contains(num))
{list.Add(num);//保證不重復(fù)
string Sno = ds_different.Tables[0].Rows[num]["sno"].ToString();
string Class = ds_different.Tables[0].Rows[num]["class"].ToString();
string Name = ds_different.Tables[0].Rows[num]["name"].ToString();
string tno = ds_sql.Tables[0].Rows[i]["tno"].ToString();
string insert_sql = "insert into finally values('" + tno + "','" + Sno + "','" + Class + "','" +Name + "' )";db.InsertOrUpdate(insert_sql);k—;
ds_sql.Tables[0].Rows[i]["choose_num"] = Convert.ChangeType(k, TypeCode.Object);
string update = "update teacher_information set choose_num ='"+ k +"'where tno='"+ tno +"'";db.InsertOrUpdate(update); ds_different.Tables[0].Rows[num].Delete();}
else if( k == 0 ){break;}else{j—;}}}MessageBox.Show("分配成功!");}else{MessageBox.Show("取消自動(dòng)分配!");}}
3 結(jié)束語(yǔ)
本文中具體介紹的功能模塊具有較強(qiáng)的應(yīng)用與實(shí)用性,能夠適應(yīng)畢業(yè)設(shè)計(jì)雙選過(guò)程中的大部分的現(xiàn)實(shí)需求。在VS2010平臺(tái)上進(jìn)行畢業(yè)設(shè)計(jì)雙選系統(tǒng)的開(kāi)發(fā)相對(duì)其他平臺(tái)比較便捷,有效及時(shí)地解決了一些問(wèn)題,給很多計(jì)算機(jī)專(zhuān)業(yè)的初學(xué)者提供了一個(gè)比較明確的開(kāi)發(fā)思路,減少在開(kāi)發(fā)中遇到的難題。
參考文獻(xiàn):
[1] 薩師煊.數(shù)據(jù)庫(kù)系統(tǒng)概論[M].5版.北京:高等教育出版社,2014.
[2] 吳善才.ASP.NET4.0項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)密碼[M].北京:清華大學(xué)出版社,2016.
[3] 錢(qián)冬云.Visual C#.NET數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)[M].杭州:浙江大學(xué)出版社,2010.