軟件工程課程設(shè)計(jì)--高校課表編排子系統(tǒng)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  題 目: 高校課表編排子系統(tǒng) </p><p>  學(xué) 院 信息工程學(xué)院 </p><p>  專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  指 導(dǎo) 教 師 </p><p>  2014年1 月

2、 3 日</p><p><b>  摘要</b></p><p>  教學(xué)工作是高校的中心工作,而課表是高校日常教學(xué)活動(dòng)運(yùn)行的指揮調(diào)度表,是高校能否進(jìn)行正常教學(xué)的關(guān)鍵,因此科學(xué)的,合理的課表在高校的重要性毋庸置疑。高校教務(wù)管理是一向復(fù)雜而繁重的工作,課表編排作為其中腰組成部分是長期困擾學(xué)校教務(wù)管理工作的大問題,計(jì)算機(jī)排課無疑是必然優(yōu)勢。課表編排是一個(gè)涉及多因素約束的

3、,多目標(biāo)的,結(jié)構(gòu)復(fù)雜的典型的組合優(yōu)化問題,并且已經(jīng)被證明為一個(gè)NP完全類,是典型的組合優(yōu)化的問題,其問題求解的時(shí)間復(fù)雜度呈指數(shù)函數(shù)增長。每個(gè)學(xué)校在排課表時(shí)考慮的因素千差萬別,各種約束條件也不盡相同,但是它所涉及的主要實(shí)體卻具有相對(duì)穩(wěn)定性。</p><p>  關(guān)鍵字:NP完全類; 約束滿足;課表編排;課程設(shè)置;</p><p><b>  目錄</b></p&g

4、t;<p><b>  目錄4</b></p><p>  第一章 需求分析說明5</p><p><b>  1.1編寫目的5</b></p><p><b>  1.2問題定義5</b></p><p>  1.3可行性分析5</p>

5、<p><b>  1.4任務(wù)描述5</b></p><p><b>  1.5目標(biāo)5</b></p><p><b>  1.6運(yùn)行環(huán)境6</b></p><p><b>  1.7功能需求6</b></p><p>  1.7.1功能

6、描述6</p><p>  1.7.2排課約束6</p><p>  1.7.3操作規(guī)程7</p><p>  第二章 概要設(shè)計(jì)說明8</p><p>  2.1數(shù)據(jù)描述與數(shù)據(jù)庫設(shè)計(jì)8</p><p><b>  2.2數(shù)據(jù)表8</b></p><p>  2.

7、2.1E-R圖9</p><p>  2.2.2數(shù)據(jù)流圖部分9</p><p>  2.3運(yùn)行需求10</p><p>  2.3.1硬件10</p><p>  2.3.2軟件10</p><p>  第三章 詳細(xì)設(shè)計(jì)說明11</p><p>  3.1模塊的具體算法11<

8、/p><p>  3.1.1登陸模塊11</p><p>  3.1.2管理員模塊11</p><p>  數(shù)據(jù)庫中各表的物理結(jié)構(gòu)15</p><p>  第四章 編碼+測試17</p><p>  4.1登錄模塊17</p><p>  4.1.1 管理員模塊18</p>

9、<p>  4.1.2教師模塊20</p><p>  4.2測試方案設(shè)計(jì)21</p><p>  測試結(jié)果分析:22</p><p>  第五章 用戶使用說明書23</p><p>  第六章 實(shí)驗(yàn)總結(jié)26</p><p>  第七章 參考文獻(xiàn)28</p><p>  

10、第一章 需求分析說明</p><p><b>  1.1編寫目的</b></p><p>  供設(shè)計(jì)人員、開發(fā)人員參考。</p><p>  為明確軟件需求、安排項(xiàng)目規(guī)劃進(jìn)度、組織軟件開發(fā)與測試,撰寫本文檔。</p><p><b>  1.2問題定義</b></p><p>

11、;  隨著社會(huì)的發(fā)展,我們?cè)絹碓浇咏詣?dòng)化的時(shí)代。隨著高校學(xué)生的日益增多、學(xué)校制度的日趨完善,我們的排課也不需要人工操作了,慢慢的交給系統(tǒng)自動(dòng)完成。為了給操作人員提供更簡便的操作,排課系統(tǒng)必須不斷完善以滿足需求。根據(jù)工作人員的實(shí)際需要,高校課表排課系統(tǒng)主要應(yīng)包括以下幾個(gè)方面:</p><p>  任課教師只具有查詢個(gè)人課程信息和教室信息以及修改密碼的功能。</p><p>  管理員除了具

12、有查詢功能之外,還有設(shè)定排課約束,完成排課的功能。</p><p><b>  1.3可行性分析</b></p><p>  排課管理系統(tǒng)是一個(gè)教育單位不可缺少的部分,它的內(nèi)容對(duì)于學(xué)校的決策者和管理者來說都至關(guān)重要,所以排課管理系統(tǒng)應(yīng)該能夠?yàn)橛脩籼峁┏渥愕男畔⒑涂旖莸牟樵兪侄巍?lt;/p><p>  對(duì)于一個(gè)課表編排子系統(tǒng)來說,基礎(chǔ)表的設(shè)置是很重

13、要的基礎(chǔ)性問題。而基礎(chǔ)表的設(shè)置僅僅是一個(gè)數(shù)量級(jí)問題,查詢的時(shí)間復(fù)雜度是一個(gè)線性復(fù)雜度O(n)或平方復(fù)雜度O(n2)。</p><p>  在此基礎(chǔ)上,較為困難的部分是排課。由于排課問題已被證明為NP問題,找到最優(yōu)解的時(shí)間復(fù)雜度為指數(shù)級(jí),故采用優(yōu)化的方式是必需的。對(duì)排課來說,各個(gè)學(xué)校都有著不太相同的排列方法,有每天的課節(jié)數(shù),允許課程連排數(shù),時(shí)間段等等,而這些方法轉(zhuǎn)換為計(jì)算機(jī)語言時(shí),往往會(huì)因?yàn)楦黝愊拗贫斐伤姥h(huán)或者

14、程序速度緩慢,因?yàn)榕耪n系統(tǒng)要適應(yīng)大部分學(xué)校使用,所以這里提供的一些要求是需要滿足大部分人的。</p><p>  經(jīng)過詳細(xì)的分析與計(jì)算之后,小組成員一致認(rèn)為,在一定程度的隨機(jī)化算法(退火、貪心變形算法、類貪心算法)下,排課的時(shí)間復(fù)雜度可以減小到多項(xiàng)式級(jí)別,達(dá)到O(n3)甚至更低。故該系統(tǒng)是可行的。</p><p><b>  1.4任務(wù)描述</b></p>

15、<p><b>  1.5目標(biāo)</b></p><p>  隨著時(shí)代的發(fā)展,高校擴(kuò)招的趨勢正在加大。與此同時(shí),高校教務(wù)管理是一項(xiàng)復(fù)雜繁重的工作。課表編排是一項(xiàng)繁重的工程,計(jì)算機(jī)排課已經(jīng)成為必然趨勢。</p><p>  軟件的目的是設(shè)計(jì)出一套易于使用與維護(hù)的排課子系統(tǒng),能夠完成課程管理、課程編排、教師、學(xué)生、課程基本信息維護(hù)等功能。軟件需要較大的通用性,

16、能夠適應(yīng)多學(xué)年的排課,以及一個(gè)專業(yè)多個(gè)學(xué)期的排課。同時(shí),能夠?qū)τ诟鞣N信息進(jìn)行查詢。</p><p><b>  1.6運(yùn)行環(huán)境</b></p><p>  操作系統(tǒng): Microsoft Windows 7 Ultimate / Microsoft Windows XP Professiona</p><p>  支持環(huán)境:.NET Frame

17、work 4.0</p><p>  數(shù)據(jù)庫: Microsoft SQL Server 2005</p><p><b>  1.7功能需求</b></p><p><b>  1.7.1功能描述</b></p><p>  作為一個(gè)課表編排子系統(tǒng),應(yīng)當(dāng)在完成排課任務(wù)之外,進(jìn)行一部分相應(yīng)的查詢與管

18、理功能。經(jīng)過小組成員分析,列出主要功能如下。</p><p>  機(jī)構(gòu)設(shè)置: 建立系、系內(nèi)部門、專業(yè)、班級(jí)等信息。</p><p>  課程信息:建立全校開設(shè)的課程并錄入相關(guān)信息。</p><p>  教師信息:建立教師的基本信息。</p><p>  教室信息:建立可用教室的信息、類型等。包括教學(xué)樓、教室。</p><p

19、>  教學(xué)任務(wù):錄入教學(xué)任務(wù),包括生成上課班級(jí)。</p><p>  課表編排:建立排課約束、預(yù)排課、自動(dòng)排課、手動(dòng)調(diào)整課表、沖突檢測恢復(fù)。</p><p>  上述功能不僅應(yīng)包括新增,還應(yīng)包括查詢與維護(hù)。</p><p><b>  1.7.2排課約束</b></p><p><b>  基本約束<

20、;/b></p><p>  同一時(shí)間一個(gè)教室不能夠上兩門課。</p><p>  同一時(shí)間一個(gè)教師不能上兩門課。</p><p>  同一時(shí)間一個(gè)班級(jí)不能上兩門課。</p><p><b>  優(yōu)先順序</b></p><p>  經(jīng)小組討論分析,考慮優(yōu)先順序問題,將優(yōu)先順序分類,再按照優(yōu)

21、先順序設(shè)計(jì)算法排課。</p><p><b>  1.7.3操作規(guī)程</b></p><p>  對(duì)于新建立的數(shù)據(jù)庫,需要設(shè)定各基本信息。包括院系、職稱、職位、課程類別、教室類別等。</p><p>  設(shè)立基本信息后,建立教學(xué)資源信息。包括教師、教室、樓房等。</p><p>  建立學(xué)籍信息,包括學(xué)生、班級(jí)。<

22、/p><p>  建立教學(xué)計(jì)劃,決定每個(gè)專業(yè)在學(xué)期間的課程。</p><p>  安排教學(xué)任務(wù)。根據(jù)教學(xué)計(jì)劃排定本學(xué)年學(xué)期的教學(xué)任務(wù),包括對(duì)該學(xué)期每個(gè)專業(yè)的每一門課程指定上課班級(jí)和上課老師,生成教學(xué)任務(wù)。</p><p>  排課。包括預(yù)排課、自動(dòng)生成上課記錄、手動(dòng)調(diào)整、沖突分析檢測步驟。此步需要經(jīng)過反復(fù)執(zhí)行。</p><p><b>

23、  STD圖如下。</b></p><p>  第二章 概要設(shè)計(jì)說明</p><p>  2.1數(shù)據(jù)描述與數(shù)據(jù)庫設(shè)計(jì)</p><p><b>  2.2數(shù)據(jù)表</b></p><p>  登錄表(用戶名,密碼,身份)</p><p>  教師信息表(工號(hào),姓名,性別,出身年月,職稱,聯(lián)

24、系電話)</p><p>  課程信息表(課程號(hào),課程名,是否選修課,課時(shí),學(xué)分,考試形式,是否安排,開始周次)</p><p>  教室信息表(教室號(hào),容量,是否多媒體)</p><p>  班級(jí)課程表(班級(jí)號(hào),課程號(hào),任務(wù)號(hào))</p><p>  教師任務(wù)書(任務(wù)號(hào),工號(hào),課程號(hào),所教專業(yè),周數(shù),人數(shù),要求,是否多媒體)</p>

25、;<p>  選課表(教室號(hào),星期,時(shí)間段,任務(wù)號(hào),占用情況)</p><p>  其中,加下劃線的為關(guān)鍵碼。</p><p><b>  2.2.1E-R圖</b></p><p>  2.2.2數(shù)據(jù)流圖部分</p><p><b>  數(shù)據(jù)流圖說明:</b></p>

26、<p>  系統(tǒng)的流程為:管理員和教師通過登錄表進(jìn)入該系統(tǒng),管理員查詢、設(shè)置排課約束以及排課等職能,排課使選課表、課程信息表數(shù)據(jù)發(fā)生變化。根據(jù)分析,可得系統(tǒng)頂層數(shù)據(jù)流圖。將頂層數(shù)據(jù)流圖進(jìn)行分解,可知教師登錄后有查詢課程安排、修改密碼的功能,這樣得出了系統(tǒng)的數(shù)據(jù)流圖。</p><p><b>  數(shù)據(jù)流圖:</b></p><p><b>  2.3

27、運(yùn)行需求</b></p><p><b>  2.3.1硬件 </b></p><p><b>  x86架構(gòu)CPU</b></p><p><b>  512MB以上內(nèi)存</b></p><p><b>  1.7KB硬盤空間</b><

28、/p><p><b>  2.3.2軟件</b></p><p>  操作系統(tǒng):Microsoft Windows 7 Ultimate / Microsoft Windows XP Professional</p><p>  數(shù)據(jù)庫系統(tǒng):Microsoft SQL Server 2005</p><p>  運(yùn)行時(shí)環(huán)境:

29、.NET Framework 4.0</p><p>  第三章 詳細(xì)設(shè)計(jì)說明</p><p>  3.1模塊的具體算法</p><p><b>  3.1.1登陸模塊</b></p><p>  該模塊涉及到2個(gè)登錄身份:教師,管理員</p><p>  教師和管理員,需要用用戶名和密碼和身份進(jìn)

30、行驗(yàn)證才能登錄。</p><p>  登錄要有自己的身份識(shí)別,是教師還是管理員,可以先判斷出用戶是以什么身份登錄的。若未選擇身份就進(jìn)行查詢,則提示出錯(cuò)。</p><p><b>  程序流程圖如下:</b></p><p>  3.1.2管理員模塊</p><p>  管理員添加排課約束條件,進(jìn)行排課;其中休息日時(shí)間不能

31、和選修課時(shí)間沖突,同時(shí)兩節(jié)選修課的時(shí)間同樣也不能發(fā)生沖突。</p><p><b>  程序流程圖如下:</b></p><p>  給所有課程分開始周數(shù)</p><p><b>  選修課排課</b></p><p><b>  其他課程排課</b></p>&

32、lt;p><b>  ④排除矛盾的函數(shù)</b></p><p>  數(shù)據(jù)庫中各表的物理結(jié)構(gòu)</p><p><b> ?。?)登錄表</b></p><p><b> ?。?)教師信息表</b></p><p><b>  (3)教室信息表</b>&

33、lt;/p><p><b> ?。?)課程信息表</b></p><p><b>  班級(jí)課程表</b></p><p><b>  教師任務(wù)書</b></p><p><b>  選課表</b></p><p><b>  

34、第四章 編碼+測試</b></p><p><b>  4.1登錄模塊</b></p><p>  if (comboBox1.Text == "管理員")</p><p><b>  {</b></p><p>  string sql = "select

35、 密碼 from 登錄表 where 用戶名='" + name + "' and 身份='管理員'";</p><p>  SqlCommand cmd = new SqlCommand(sql, conn);</p><p>  SqlDataReader reader = cmd.ExecuteReader();</

36、p><p>  if (reader.Read())</p><p><b>  {</b></p><p>  if (reader["密碼"].ToString().Trim()==textBox2.Text)</p><p><b>  {</b></p><

37、;p>  Form2 f2 = new Form2();</p><p>  f2.GetName(name, "管理員");</p><p>  this.Hide();</p><p>  f2.Show();</p><p><b>  }</b></p><p>

38、<b>  else</b></p><p><b>  {</b></p><p>  MessageBox.Show("用戶名錯(cuò)誤或密碼錯(cuò)誤,請(qǐng)核對(duì)!");</p><p><b>  }</b></p><p><b>  }</b&g

39、t;</p><p><b>  else</b></p><p><b>  {</b></p><p>  MessageBox.Show("用戶名錯(cuò)誤,請(qǐng)核對(duì)!");</p><p><b>  }</b></p><p>&l

40、t;b>  }</b></p><p>  if (comboBox1.Text == "教師")</p><p><b>  {</b></p><p>  string sql = "select 密碼 from 登錄表 where 用戶名='" + name + "

41、;' and 身份='教師'";</p><p>  SqlCommand cmd = new SqlCommand(sql, conn);</p><p>  SqlDataReader reader = cmd.ExecuteReader();</p><p>  if (reader.Read())</p>&l

42、t;p><b>  {</b></p><p>  if (reader["密碼"].ToString().Trim() == textBox2.Text)</p><p><b>  {</b></p><p>  Form2 f2 = new Form2();</p><p

43、>  f2.GetName(name, "教師");</p><p>  this.Hide();</p><p>  f2.Show();</p><p><b>  }</b></p><p><b>  else</b></p><p><

44、;b>  {</b></p><p>  MessageBox.Show("用戶名錯(cuò)誤或密碼錯(cuò)誤,請(qǐng)核對(duì)!");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b>&

45、lt;/p><p><b>  {</b></p><p>  MessageBox.Show("用戶名錯(cuò)誤,請(qǐng)核對(duì)!");</p><p><b>  }</b></p><p><b>  }</b></p><p>  4.1.1

46、管理員模塊</p><p>  ////////////////////////////////排課</p><p>  void MatchStartWeek() //給任務(wù)課程分前8和后8:根據(jù)周數(shù)和要求</p><p><b>  {</b></p><p>  stri

47、ng commString = "";</p><p>  SqlCommand cmd = new SqlCommand(commString, conn); //</p><p>  cmd.CommandText = "select 課程號(hào),周數(shù),要求 from 教師任務(wù)書";</p><p>  Sql

48、DataReader reader = cmd.ExecuteReader(); //</p><p>  if (reader.Read())</p><p><b>  {</b></p><p>  reader.Close(); //可以不使用reader,直接ds.Tables[0].

49、Rows.Count!=0就可以了</p><p>  SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, conn);</p><p>  DataSet ds = new DataSet();</p><p>  da.Fill(ds, "mytable");</p>

50、<p>  //for (int i = 0; i < ds.Tables[0].Rows.Count; i++) //</p><p>  int i = 0;</p><p>  foreach(DataRow Row in ds.Tables[0].Rows)</p><p><b>  {</b>

51、</p><p>  cource_num = Row["課程號(hào)"].ToString().Trim(); //</p><p>  week_num = Convert.ToInt32(Row["周數(shù)"].ToString().Trim());</p><p>  if (Row["要求"].To

52、String().Trim() == "")</p><p><b>  {</b></p><p>  require = 0;</p><p><b>  }</b></p><p><b>  else</b></p><p>

53、<b>  {</b></p><p>  require = Convert.ToInt32(Row["要求"].ToString().Trim());</p><p><b>  }</b></p><p>  if (require != 0)</p><p><b&

54、gt;  {</b></p><p>  cmd.CommandText = "update 課程信息表 set 開始周次 = " + require + " where 課程號(hào) = '" + cource_num + "'";</p><p>  cmd.ExecuteNonQuery();</

55、p><p><b>  }</b></p><p>  else if (week_num == 16)</p><p><b>  {</b></p><p>  cmd.CommandText = "update 課程信息表 set 開始周次 = 1 where 課程號(hào) = '&q

56、uot; + cource_num + "'";</p><p>  cmd.ExecuteNonQuery();</p><p><b>  }</b></p><p>  else if (week_num == 8)</p><p><b>  {</b></

57、p><p>  if (i / 2 == 0)</p><p><b>  {</b></p><p>  cmd.CommandText = "update 課程信息表 set 開始周次 = 1 where 課程號(hào) = '" + cource_num + "'";</p>&l

58、t;p>  cmd.ExecuteNonQuery();</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cmd.CommandText = "update 課程信

59、息表 set 開始周次 = 9 where 課程號(hào) = '" + cource_num + "'";</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><

60、;p><b>  {</b></p><p>  cmd.CommandText = "update 課程信息表 set 開始周次 = 1 where 課程號(hào) = '" + cource_num + "'";</p><p>  cmd.ExecuteNonQuery();</p><p

61、><b>  }</b></p><p><b>  i++;</b></p><p><b>  }</b></p><p>  //MessageBox.Show("開始周數(shù)已分配!");</p><p><b>  }</b>

62、;</p><p><b>  else</b></p><p><b>  {</b></p><p>  MessageBox.Show("教師任務(wù)書為空!");</p><p><b>  }</b></p><p><b

63、>  }</b></p><p>  //約定無課時(shí)間安排、選修課時(shí)間安排,用變量接受,每次排課時(shí)間上排除掉</p><p>  /////////////////////////////////////////排課結(jié)束</p><p><b>  4.1.2教師模塊</b></p><p>  pri

64、vate void button5_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p>  SqlConnect();</p><p>  string sql1 = "";//;</p><p>  SqlCommand cmd

65、1 = new SqlCommand(sql1, conn);</p><p>  cmd1.CommandText = "select * from 選課表";</p><p>  SqlDataReader reader11 = cmd1.ExecuteReader();</p><p>  if (reader11.Read())</

66、p><p><b>  {</b></p><p>  if (radioButton1.Checked == true)</p><p><b>  {</b></p><p>  SqlConnect();</p><p>  string num = textBox1.Te

67、xt;</p><p>  string sql = "";//;</p><p>  SqlCommand cmd = new SqlCommand(sql, conn);</p><p>  if (id == "教師")</p><p><b>  {</b></p&g

68、t;<p>  cmd.CommandText = "select * from 教師信息表 where 工號(hào) = '" + num + "'"; //只有一條</p><p>  SqlDataReader reader = cmd.ExecuteReader();</p><p>  if (reader.Re

69、ad())</p><p><b>  {</b></p><p>  name_N = reader["姓名"].ToString().Trim();</p><p><b>  }</b></p><p><b>  else</b></p>

70、<p><b>  {</b></p><p><b>  }</b></p><p>  reader.Close();</p><p><b>  }</b></p><p><b>  else</b></p><p

71、><b>  {</b></p><p>  cmd.CommandText = "select * from 教師信息表 where 工號(hào) = '" + num + "'"; //只有一條</p><p>  SqlDataReader reader = cmd.ExecuteReader();&l

72、t;/p><p>  if (reader.Read())</p><p><b>  {</b></p><p>  name_N = reader["姓名"].ToString().Trim();</p><p><b>  }</b></p><p>&

73、lt;b>  else</b></p><p><b>  {</b></p><p>  MessageBox.Show("該職工號(hào)不存在,請(qǐng)核對(duì)!");</p><p><b>  }</b></p><p>  reader.Close();</p&

74、gt;<p><b>  }</b></p><p>  SqlDataAdapter adapter = new SqlDataAdapter("select * from 教師任務(wù)書 where 工號(hào)='" + num + "'", conn);//確定這位老師所有任務(wù)號(hào)</p><p>  D

75、ataSet ds = new DataSet();</p><p>  adapter.Fill(ds, "mytable");</p><p>  if (ds.Tables[0].Rows.Count != 0)</p><p><b>  {</b></p><p>  for (int i

76、= 0; i < ds.Tables[0].Rows.Count; i++)//對(duì)一個(gè)任務(wù)號(hào) 進(jìn)行 一系列查詢</p><p><b>  {</b></p><p><b>  //課程信息查詢</b></p><p>  cource_num = ds.Tables[0].Rows[i]["課程號(hào)&

77、quot;].ToString().Trim();</p><p>  week_num = Convert.ToInt32(ds.Tables[0].Rows[i]["周數(shù)"].ToString().Trim());</p><p>  string pross = ds.Tables[0].Rows[i]["所教專業(yè)"].ToString().T

78、rim();</p><p>  cmd.CommandText = "select * from 課程信息表 where 課程號(hào)='" + cource_num + "'";</p><p>  SqlDataReader reader1 = cmd.ExecuteReader();</p><p>  if

79、 (reader1.Read())</p><p><b>  {</b></p><p>  course_name = reader1["課程名"].ToString().Trim();</p><p>  teststyle = reader1["考試形式"].ToString().Trim();&

80、lt;/p><p>  score = reader1["學(xué)分"].ToString().Trim();</p><p>  totalhour = reader1["課時(shí)"].ToString().Trim();</p><p>  startweek = reader1["開始周次"].ToString()

81、.Trim();</p><p>  int startweeks = Convert.ToInt32(startweek.ToString().Trim());</p><p>  int endweeks = startweeks + week_num - 1;</p><p>  string endweek = endweeks.ToString().Tri

82、m();</p><p>  weeks = "" + startweek + "-" + endweek + "";</p><p><b>  }</b></p><p><b>  else</b></p><p><b>

83、  {</b></p><p><b>  }</b></p><p>  reader1.Close();</p><p>  //該老師 該任務(wù)號(hào) 該課程的排課時(shí)間 地點(diǎn)</p><p><b>  4.2測試方案設(shè)計(jì)</b></p><p>  測試方式:黑

84、盒測試,白盒測試。</p><p>  原因:由于白盒測試需要進(jìn)行某種路徑覆蓋,而無論是邏輯覆蓋還是路徑覆蓋,都由于數(shù)據(jù)量過大而無法設(shè)計(jì)測試用例。故前期只采用白盒測試(部分),后期均采用黑盒測試,且測試數(shù)據(jù)來自前期的數(shù)據(jù)。</p><p>  由于基本模塊在單元測試時(shí)全都通過,而且接口均為標(biāo)準(zhǔn)化接口,而較大的模塊只是調(diào)用該接口,故只需在接口進(jìn)行測試,即可保證數(shù)據(jù)的正確性。</p>

85、;<p><b>  測試結(jié)果:</b></p><p><b>  測試結(jié)果分析:</b></p><p>  大部分的測試都較為平穩(wěn),主要原因在于大部分的工作都由數(shù)據(jù)庫來做,而數(shù)據(jù)庫的查詢一般情況下是安全的。而由于使用了SQL Server的性能分析器后,查詢性能一般較高。</p><p>  第五章 用

86、戶使用說明書</p><p>  (1)首先將VS和數(shù)據(jù)庫相連接,然后在VS中打開項(xiàng)目,點(diǎn)擊調(diào)試程序,出現(xiàn)主界面</p><p>  (2)選擇相應(yīng)的身份,輸入用戶名和密碼進(jìn)入到系統(tǒng)中,在此以管理員為例,輸入用戶名和密碼后,進(jìn)入選擇界面</p><p>  (3)首先,進(jìn)行初步排課,選擇某個(gè)下午作為休息日,再選擇進(jìn)行排選修課的時(shí)間</p><p&

87、gt;  (4)初步排課完成后,就可以進(jìn)行相應(yīng)的查詢了,因?yàn)槭枪芾韱T登錄,可以查詢每個(gè)老師的課表和每個(gè)教室的課表</p><p>  (5)輸入對(duì)應(yīng)的教職工號(hào)和教室號(hào)可以查詢到相應(yīng)的課表信息</p><p>  由于時(shí)間緊迫,調(diào)課模塊和修改密碼模塊僅僅完成了界面,還未實(shí)現(xiàn)其功能。</p><p><b>  第六章 實(shí)驗(yàn)總結(jié)</b></p

88、><p>  實(shí)驗(yàn)前期,由于該實(shí)驗(yàn)的前期部分的過程最為困難。教務(wù)系統(tǒng)較為龐大,即使是子系統(tǒng),也很難做的很完善。由于排課需要根據(jù)教學(xué)任務(wù)進(jìn)行,而教學(xué)任務(wù)牽涉到課程、班級(jí)、教師等多種信息,而課程、班級(jí)等實(shí)體又有各自的屬性,并且彼此相連,在查詢時(shí)就會(huì)變得非常復(fù)雜。故一個(gè)良好的數(shù)據(jù)庫體系結(jié)構(gòu)設(shè)計(jì)是非常重要的。數(shù)據(jù)庫的建立中,遇到了如下的問題。外鍵的基表必須是主鍵而非主屬性。故無論是用B作基表還是用A作基表,主鍵都大于1個(gè),而

89、外鍵只有1個(gè),故列不匹配。而一對(duì)一的實(shí)現(xiàn)不符合外鍵的定義,故被數(shù)據(jù)庫否決。在咨詢了兩位老師之后,小組成員進(jìn)行了討論。大家一致認(rèn)為沒有合適的解決方案。故解決的辦法是不設(shè)此外鍵,而是采用程序控制的方式讓這兩個(gè)表建立聯(lián)系,并在開發(fā)文檔中標(biāo)明。在這一部分測試較為用心。</p><p>  編碼階段由于表比較多,排課設(shè)計(jì)的條件比較多,查看了大量的關(guān)于排課的算法,最終決定用貪心算法。當(dāng)一個(gè)問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)時(shí),我們會(huì)想到

90、用動(dòng)態(tài)規(guī)劃法去解它,但有時(shí)會(huì)有更簡單、更有效的算法,即貪心算法。顧名思義,貪心算法總是做出在當(dāng)前看來最好的選擇。也就是說貪心算法并不是整體最優(yōu)上加以考慮,他所作出的選擇只是在某種意義上的局部最優(yōu)的選擇。雖然貪心算法不是對(duì)所有問題都能得到整體最優(yōu)解,但對(duì)范圍相當(dāng)廣的許多問題它能產(chǎn)生整體最優(yōu)解,如圖的算法中單源最短路徑問題,最小支撐樹問題等。在一些情況下,即使貪心算法不能得到整體最優(yōu)解,但其最終結(jié)果卻是最優(yōu)解的很好的近似解。在貪心算法中較為

91、有名的算法是Dijkstra算法。它作為路由算法用來尋求兩個(gè)節(jié)點(diǎn)間的最短路徑。Dijkstra算法的思想是:假若G有n個(gè)頂點(diǎn),于是我們總共需要求出n-1條最短路徑,求解的方法是:初試,寫出V0(始頂點(diǎn))到各頂點(diǎn)(終頂點(diǎn))的路徑長度,或有路徑,則令路徑的長度為邊上的權(quán)值;或無路經(jīng),則令為∞。再按長度的遞增順序生成每條最短路徑。事實(shí)上生成最短路徑的過程就是不斷地在始頂點(diǎn)V何終頂點(diǎn)W間加入中間點(diǎn)的過程,因?yàn)樵诿可闪艘粭l最短路徑</p&

92、gt;<p>  這次的課程設(shè)計(jì)讓我們對(duì)c#窗體設(shè)計(jì)、各按鈕功能、SQL 語句的運(yùn)用,以及軟件工程在軟件開發(fā)各階段的過程和實(shí)現(xiàn)有了個(gè)更深刻的認(rèn)識(shí)。也讓我們認(rèn)識(shí)到多練才能發(fā)現(xiàn)自己的不足,只有知道自己的不足才能去有目的的完善我們自身。同時(shí),我們也發(fā)現(xiàn)了團(tuán)隊(duì)合作的重要性,只有大家共同努力才能更好的完成任務(wù)。感謝老師給了我們這樣一個(gè)機(jī)會(huì),讓我們有個(gè)機(jī)會(huì)去了解真正的開發(fā)軟件,我相信這對(duì)以后的工作和學(xué)習(xí)都會(huì)有重要的影響。</p&

93、gt;<p>  但是,由于需求分析做的不是很到位,時(shí)間也相對(duì)較短,做的這個(gè)系統(tǒng)仍存在很多問題,而且一個(gè)根本性的問題是,代碼冗余比較大,運(yùn)行時(shí)間很長。由于起初寫這點(diǎn)沒注意到,當(dāng)時(shí)程序按一個(gè)思路寫下來,覺得那種思路下來實(shí)現(xiàn)也是合理的。但仔細(xì)考慮,與實(shí)際結(jié)合,做的系統(tǒng)需要改進(jìn)的還有很多。</p><p>  首先對(duì)于查詢功能,只是實(shí)現(xiàn)了教師教授課程的查詢,某個(gè)教室課程的查詢,但是對(duì)于空教室的查詢沒有實(shí)現(xiàn)

94、。</p><p>  然后就是由于排課的代碼冗余量大,所以排課時(shí)明顯程序運(yùn)行時(shí)間很長。比如對(duì)于每門課程的每個(gè)任務(wù)都要判斷每周幾節(jié)課,不管是一節(jié)、兩節(jié)、三節(jié),需要的解決矛盾的代碼都是基本上一樣,但是如果放入函數(shù)中然后每次調(diào)用又不合適,因?yàn)榇a還是有部分不一樣的。所以就出現(xiàn)了大量看起來十分相似的代碼,我們會(huì)想辦法去解決的。</p><p><b>  第七章 參考文獻(xiàn)</b&

95、gt;</p><p>  [1] 嚴(yán)蔚敏 吳偉民. 數(shù)據(jù)結(jié)構(gòu). 清華大學(xué)出版社.2007.3</p><p>  [2] 李春葆. 數(shù)據(jù)結(jié)構(gòu)教程. 清華大學(xué)出版社.2005.1</p><p>  [3] 譚浩強(qiáng). C++程序設(shè)計(jì).第三版. 清華大學(xué)出版社. 2005.2</p><p>  [4] 王珊.數(shù)據(jù)庫系統(tǒng)概論(第四版).

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論