軟件工程課程設計--地鐵出行幫助軟件_第1頁
已閱讀1頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  軟件工程課程設計個人報告</p><p>  課程設計題目:《地鐵出行幫助軟件》</p><p><b>  目錄</b></p><p>  一、 課程設計概述1</p><p><b>  1. 目的1</b></p><p><b>

2、  2. 任務1</b></p><p><b>  3. 開發(fā)環(huán)境1</b></p><p><b>  4. 參考資料1</b></p><p>  二、 項目需求分析2</p><p>  三、 項目設計的基本原理和采用的主要方法與技術2</p><p

3、>  四、 本人實現項目的過程與步驟2</p><p>  1. 程序流程的設計3</p><p>  1.1流程圖的設計:3</p><p>  1.2程序系統(tǒng)的結構:4</p><p><b>  1.3時序建模5</b></p><p>  2. 數據庫的設計和錄入6<

4、;/p><p>  2.1完成數據庫的設計:6</p><p>  2.2完成數據庫的錄入:8</p><p><b>  3. 算法設計8</b></p><p>  4. 圖形界面設計9</p><p>  4.1圖形界面初期架構設計:9</p><p>  4.

5、2圖形界面的最終架構以及結果輸出:9</p><p><b>  5. 程序開發(fā)9</b></p><p><b>  5.1IDE9</b></p><p>  5.2核心算法設計10</p><p>  5.3程序開發(fā)完成11</p><p>  五、 個人遇到

6、的困難與獲得的主要成就12</p><p>  1. 開發(fā)環(huán)境的選擇12</p><p>  2.數據庫的設計12</p><p>  3.程序數據結構的設計:13</p><p>  4.程序核心算法的選擇:13</p><p>  5. 程序核心算法的設計:14</p><p>

7、  6.圖形界面開發(fā)的設計:17</p><p>  六、 測試與運行記錄19</p><p>  七、 課程設計完成結果分析與個人小結20</p><p><b>  八、 附錄21</b></p><p>  1. 軟件配置:21</p><p>  2. 個人完成的程序模塊:21

8、</p><p>  3. 文檔清單:21</p><p><b>  課程設計概述</b></p><p><b>  目的</b></p><p>  本軟件產品是一項獨立的軟件,而且全部內容自含。開發(fā)的意圖是為了開發(fā)一款地鐵出行幫助軟件;應用目標是能夠文字給出地鐵出行建議并且圖形表示;作用范

9、圍是所有地鐵出行的北京居民。</p><p><b>  任務</b></p><p>  輸入:輸入形式:下拉菜單選擇;輸入內容:出發(fā)線路,終點線路,出發(fā)站、目的站。</p><p>  輸出:輸出形式:對話框和圖形界面;輸出內容:地鐵出行建議和建議路線圖。</p><p>  用戶可以選擇“最快”、“最方便”和“最優(yōu)

10、”的地鐵出行方案,當選擇不同的出行方案時,會從數據庫中讀取對應不同的換乘時間以及停車時間。</p><p>  程序會根據用戶查詢的時間調用系統(tǒng)時間,判斷當前是否是高峰時間,當前是高峰時間時,會從數據庫中讀取對應不同的高峰換乘時間以及高峰停車時間。</p><p><b>  開發(fā)環(huán)境</b></p><p>  SQL Server 12、N

11、etBeans IDE 7.2</p><p><b>  參考資料</b></p><p>  《軟件工程課程設計指導書》</p><p>  《地鐵出行幫助軟件需求分析書》</p><p>  《地鐵出行幫助軟件概要設計說明書》</p><p><b>  項目需求分析</b&

12、gt;</p><p>  輸入 處理 輸出</p><p>  項目設計的基本原理和采用的主要方法與技術</p><p>  基本原理:堆優(yōu)化的Dijkstra算法</p><p>  主要方法與技術:SQL語句創(chuàng)建表與錄入數據、JAVA語言訪問數據庫、JAVA SWT</p

13、><p><b>  圖形界面編程技術</b></p><p>  本人實現項目的過程與步驟</p><p>  個人在小組中擔任組長一職,每周負責給組員們分配各自的任務,讓大家在10周的時間內有條不紊的完成軟件工程課程設計的程序編寫以及各類報告;在程序設計方面,我也負責完成了盡可能多的部分,從數據庫、程序算法的設計,到程序算法、圖形界面的編寫。&

14、lt;/p><p><b>  程序流程的設計</b></p><p>  1.1流程圖的設計:</p><p>  1.2程序系統(tǒng)的結構:</p><p>  表現層(UI):通俗講就是展現給用戶的界面,即用戶在使用一個系統(tǒng)的時候用戶的所見所得。在此系統(tǒng)中,表現層即為用戶所見的軟件界面,用戶通過軟件來獲取服務。</p

15、><p>  業(yè)務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據的業(yè)務邏輯處理。</p><p>  數據訪問層(DAL):該層所做事務直接操作數據庫,針對數據的增添、刪除、修改、查找等。</p><p><b>  數據訪問層</b></p><p><b>  業(yè)務邏輯層</b&g

16、t;</p><p><b>  表現層</b></p><p><b>  1.3時序建模</b></p><p><b>  用戶</b></p><p><b>  數據庫的設計和錄入</b></p><p>  2.1完成數

17、據庫的設計:</p><p>  2.1.1換乘表transfer_station</p><p>  2.1.2線路表line_one-line_nine</p><p>  2.2完成數據庫的錄入:</p><p><b>  算法設計</b></p><p>  學習了圖的概念,包括點、弧、

18、有向圖、無向圖等等;學習了圖的存儲結構,包括鄰接矩陣(數組表示法)、鄰接表、十字鏈表(有向圖)、鄰接多重表(無向圖);還學習了圖的遍歷,包括深度優(yōu)先搜索和廣度優(yōu)先搜索。最后決定使用鄰接多重表(無向圖)的數據結構。</p><p>  學習了《數據結構與算法》教材上的最短路徑(包括單源最短路徑Dijkstra算法、每對頂點之間的最短路徑Floyd算法),其中Dijkstra算法用于求解固定起點到圖上任意點的最短路徑

19、;Floyd算法用于求解圖上任意兩點之間的最短路徑。很明顯,我們的軟件中,是求解固定起點到固定終點的最短路徑,無論用Dijkstra算法還是Floyd算法,復雜度都太高了。</p><p>  在核心算法設計的選擇上仍然存在問題,Dijkstra算法和Floyd算法,用在我們的程序中復雜度都太高了,需要在其基礎上進行改良優(yōu)化。最后我們決定使用堆優(yōu)化的Dijkstra算法,Dijkstra算法每次選取一個點都需要進

20、行比較,得到所有路徑中最短的一條路徑,使用堆比較算法,每次只選出堆頂這個最小的元素,這樣計算的復雜度會降低很多,Dijkstra算法的時間復雜度是O(n3),堆優(yōu)化Dijkstra算法的時間復雜度是O(nlogn)。</p><p><b>  圖形界面設計</b></p><p>  4.1圖形界面初期架構設計:</p><p>  4.2圖

21、形界面的最終架構以及結果輸出:</p><p><b>  程序開發(fā)</b></p><p><b>  5.1IDE</b></p><p>  我安裝了MyEclipse,由于之前沒有接觸過這款編程軟件,學習了MyEclipse的一些相關操作,以及軟件的調試。</p><p><b>

22、  5.2核心算法設計</b></p><p>  完成了核心算法的模擬,能夠用控制臺正確輸出模擬數據的最短路徑。</p><p><b>  5.3程序開發(fā)完成</b></p><p>  花費了兩周多的時間,按照之前的需求與設計,進行了程序部分的編寫,完成程序的所有部分,實現了所有預期的功能,不過還存在一些問題有待測試。<

23、/p><p>  個人遇到的困難與獲得的主要成就</p><p><b>  開發(fā)環(huán)境的選擇</b></p><p>  困難:初期,我們一致決定IDE使用MyEclipse。然而,在開發(fā)進入中后期的時候,出現了一個我們難以解決的問題,就是數據庫與IDE的連接。我們花費了幾個小時來解決數據庫的連接問題,最后在Netbeans上調試成功了。最終我們還

24、是使用了Netbeans作為程序開發(fā)環(huán)境。</p><p>  主要成果:雖然沒有成功的解決數據庫與MyEclipse的連接問題,不過通過更改IDE也未嘗不是解決問題的一種方法。我們由此學習到,IDE的選擇對于程序的開發(fā)也是尤為重要的。</p><p><b>  2.數據庫的設計</b></p><p>  我們率先將地鐵出行幫助軟件的主體分

25、為了數據庫、程序算法以及圖形界面,于是便順理成章的將工作重心放在了數據庫</p><p>  困難:我們按照指導書上的要求粗略的設計了數據庫的屬性以及元組,不過在之后的算法開發(fā)過程中,我們發(fā)現數據庫的設計在之后的算法中并不是非常適用,后來還進行了非常多的修改。</p><p>  主要成果:由此我們吸取了教訓:在程序開發(fā)的過程中,不應該急于數據庫的設計與開發(fā)。相反,先著手于程序的開發(fā),根據

26、程序的需求對數據庫進行相應的更改,可以省去不少的功夫,事半功倍。</p><p>  3.程序數據結構的設計:</p><p>  在對圖的相關數據結構進行學習后,學習了圖的概念,包括點、弧、有向圖、無向圖等等;學習了圖的存儲結構,包括①鄰接矩陣(數組表示法)、②鄰接表、③十字鏈表(有向圖)、④鄰接多重表(無向圖);還學習了圖的遍歷,包括深度優(yōu)先搜索和廣度優(yōu)先搜索。初期決定使用鄰接多重表(

27、無向圖)的數據結構。</p><p>  困難:在決定使用鄰接多重表作為我們的數據結構之后,我們發(fā)現這個數據結構的結構顯得過于復雜,超出了該軟件的使用范疇;并且,鄰接多重表的實現也比較復雜,之后的使用我們可能也難以駕馭,最后還是決定使用較為簡單的鄰接表作為我們圖的數據結構。</p><p>  主要成果:鄰接表的數據結構相比鄰接多重表的實現來的簡單得多,簡化了不少程序開發(fā)的工作,加快了不少

28、進度。讓我們學習到在數據結構的選取環(huán)節(jié)上需要慎重的選擇,不要好高騖遠選擇實現比較復雜的數據結構,可能并不適合這個程序開發(fā)。</p><p>  4.程序核心算法的選擇:</p><p>  學習了《數據結構與算法》教材上的最短路徑(包括單源最短路徑Dijkstra算法、每對頂點之間的最短路徑Floyd算法),其中Dijkstra算法用于求解固定起點到圖上任意點的最短路徑;Floyd算法用于

29、求解圖上任意兩點之間的最短路徑。很明顯,我們的軟件中,是求解固定起點到固定終點的最短路徑,無論用Dijkstra算法還是Floyd算法,復雜度都太高了。</p><p>  困難:在經過多番查找資料和討論之后,我們選擇使用堆優(yōu)化的Dijkstra算法。在Dijkstra算法基礎上進行改良優(yōu)化,Dijkstra算法每次選取一個點都需要進行比較,選出所有路徑中最短的一條路徑,使用堆比較算法,每次只需選出堆頂這個最小的

30、元素,這樣計算的復雜度就會大大的降低。</p><p>  主要成果:Dijkstra算法的時間復雜度是O(n3),而堆優(yōu)化Dijkstra算法的時間復雜度是O((m+n)logn)。</p><p>  堆優(yōu)化的Dijkstra算法實現:</p><p>  1. 將與源點相連的點加入堆,并調整堆。</p><p>  2. 選出堆頂元素u

31、(即代價最小的元素),從堆中刪除,并對堆進行調整。</p><p>  3. 處理與u相鄰的,未被訪問過的,滿足三角不等式的頂點</p><p>  1):若該點在堆里,更新距離,并調整該元素在堆中的位置。</p><p>  2):若該點不在堆里,加入堆,更新堆。</p><p>  4. 若取到的u為終點,結束算法;否則重復步驟2、3。&

32、lt;/p><p>  程序核心算法的設計:</p><p>  5.1我們先自己對點結點、邊結點、圖的數據結構的內容進行了假設錄入,補出了圖的簡單的臨時數據,為了能夠先在控制臺測試算法的正確性。</p><p>  困難:對于圖的數據結構的構造中,需要對圖中所有點結點和邊結點進行構造,但是點結點和邊結點有指向下一個結點的指針引用,因此不能一次性對數據結構中所有數據進行

33、構造。</p><p>  主要成果:需要先對引用以外的數據類型進行構造,然后再對引用賦值,表示出圖的完整數據結構。這在我們之后的構造函數設計中同樣有用。</p><p>  5.2完成了核心算法的模擬,能夠用控制臺正確輸出模擬數據的最短路徑,最后確定問題是在MinHeap()類的swap()方法中,由于JAVA中對象之間的賦值就是引用的賦值,因此進行值的修改時會出現錯誤,最后去掉了swa

34、p方法,直接在Remove()方法中給出了對換堆元素的實現。</p><p>  困難:計算出的最短路徑出現問題,擴展結點出現錯誤,問題初步推斷出現在最小堆的部分。</p><p>  主要成果:最后確定問題是在MinHeap()類的swap()方法中,由于JAVA中對象之間的賦值就是引用的賦值,因此進行值的修改時會出現錯誤,最后去掉了swap方法,直接在Remove()方法中給出了對換堆

35、元素的實現,正確輸出模擬數據的最短路徑。</p><p>  加入數據庫數據之后的出行方案文本顯示:</p><p>  6.圖形界面開發(fā)的設計:</p><p>  困難:我們組中沒有用JAVA圖形界面編程的經歷,因此從頭開始學習了圖形界面。一開始提出了界面的大致構想,用html繪制了出來:</p><p>  不過在后面的開發(fā)過程中,發(fā)現

36、實現這樣的圖形界面,需要較為復雜的框架結構設計,用JAVA SWT繪制完成是較為困難的。</p><p>  主要成果:在經過多番的學習之后,最終完成了較為友好的圖形界面,首先將圖形界面用BorderLayout分為了三個部分;左下角的部分比較復雜,希望實現輸入和輸出的功能,于是又用GridLayout將其分成了2個部分;最后再用GridLayout窗格布局將各種組件插入了圖形界面中,完成了圖形界面的布局。<

37、;/p><p>  另外我們還對圖片進行了許多美工的處理,修改了界面左上角的圖標以及標題,使得最后的圖形界面比較接近我們理想的狀態(tài)。</p><p><b>  測試與運行記錄</b></p><p>  課程設計完成結果分析與個人小結</p><p>  為期十周的軟件工程課程設計終于接近了尾聲,我們的工作也都進入了收尾的

38、工作。</p><p>  就程序開發(fā)的過程而言,我認為我們小組的效益和分工是非常不錯的。我們每周都會例行會議,作為組長,我每周都會針對每一位組員的能力以及長處進行工作的分配。我們的程序條理較為清晰,大致分為數據庫部分、程序算法部分以及圖形界面部分,每人都有自己負責的部分,每周的報告大家也都認真的完成,每周的工作都在有條不紊、循序漸進的進行著。</p><p>  當然,我們在開發(fā)過程中也

39、遇到了不少的問題,數據庫與IDE的連接問題、算法的輸出錯誤以及圖形界面輸出路線無法調節(jié)粗細等等,不過經過大家的努力,這些問題也都一一解決了。</p><p>  就結果而言,我們的程序的完成度是比較高的,至少是比我們預期的效果要好很多。首先,非常好的實現了指導書上要求的所有功能,用戶可以選擇起始站點和終點站點,可以選擇較快捷、少換乘、最優(yōu)三種乘車方案,同時程序會根據系統(tǒng)時間來判斷當前是否是高峰時間,程序也會因此從

40、數據庫中調取不同的數據進行計算,之后程序會根據算法計算出最短路徑,通過文本輸出出行建議路線,同時還會在地鐵圖上高亮顯示出建議的路線,這些都會顯示在圖形界面上。其次,我們在算法的選擇與設計上下了一些功夫,我們最后使用的是堆優(yōu)化的Dijistra算法,普通Dijkstra算法的時間復雜度是O(n3),而堆優(yōu)化Dijkstra算法的時間復雜度是O(nlogn),大大的降低了算法的時間復雜度,加快了程序執(zhí)行的速度。最后,我們在圖形界面布局方面也

41、下了一些功夫,使得圖形界面比較友好,指導書要求使用文本框進行輸入和輸出,而我們將這些部分都融入了圖形界面當中,使軟件更加一體化,其中插入的圖片資源我們也都進行了處理,提升了界面的友好性和美觀性。</p><p>  就我個人而言,我在這次的軟工課設中受益匪淺,作為組長,程序開發(fā)的每一個部分我?guī)缀醵加薪浭?,主要完成了程序的核心算法以及圖形界面的設計。這是我第一次使用JAVA語言進行較大程序的編程,可以說對我編程能力

42、的提升是非常巨大的,尤其是SWT界面編程方面。幾周以來,寫了許多的報告,也讓我更加了解了開發(fā)一個大型程序時,應該從哪里入手,如何規(guī)劃。</p><p><b>  附錄</b></p><p><b>  軟件配置:</b></p><p>  SQL Server 12、NetBeans IDE 7.2</p>

43、;<p>  個人完成的程序模塊:</p><p>  數據庫與程序接口部分代碼設計、程序數據結構代碼設計、程序核心算法代碼設計、程序圖形界面代碼設計。</p><p><b>  文檔清單:</b></p><p><b>  項目開發(fā)計劃</b></p><p>  系統(tǒng)分析與設計

44、文檔:</p><p><b>  軟件需求說明書</b></p><p><b>  概要設計說明書</b></p><p><b>  詳細設計說明書</b></p><p><b>  測試分析報告</b></p><p>&

溫馨提示

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

評論

0/150

提交評論