




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上目 錄一、需求分析1.問題描述2.基本要求二、概要設(shè)計(jì)1. 程序流程圖2. 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)三、詳細(xì)設(shè)計(jì)1.程序設(shè)計(jì)思想2.軟件模塊結(jié)構(gòu)圖3.源程序四、調(diào)試分析 1.測試數(shù)據(jù)2.時(shí)間復(fù)雜度分析3.上機(jī)遇到的問題及解決方案4.算法的改進(jìn)設(shè)想五、用戶使用手冊(cè)六、心得體會(huì)一、需求分析1.問題描述該題目采用我國鐵路運(yùn)輸網(wǎng)的數(shù)據(jù)進(jìn)行編程和運(yùn)行驗(yàn)證。詳細(xì)可在網(wǎng)上搜索全國鐵路局管轄線路示意圖,只要全國的主干線就可以了。鐵路運(yùn)輸網(wǎng)絡(luò)中由鐵路線和火車站的兩個(gè)主要概念,譬如:1號(hào)鐵路線表示京廣線,2號(hào)鐵路線表示京滬線等。鐵路線對(duì)象包括鐵路線編號(hào),鐵路線名稱,起始站編號(hào),終點(diǎn)站編號(hào),該鐵路線長
2、度,通行標(biāo)志(00B客貨運(yùn)禁行,01B貨運(yùn)通行專線,10B客運(yùn)通行專線,11B客貨運(yùn)通行)。火車站對(duì)象包括所屬鐵路線編號(hào),車站代碼,車站名,車站簡稱,離該鐵路線起點(diǎn)站路程及終點(diǎn)站路程。2.基本要求(1)查詢某站所屬的鐵路線(2)要求具備新增鐵路線的管理功能(3)要求具備新增車站的管理功能(4)針對(duì)客運(yùn),貨運(yùn)情況能計(jì)算任何一個(gè)起始車站到任何一個(gè)終點(diǎn)站之間的最短路徑。并且要求能夠顯示出該最短路徑的各個(gè)火車站的經(jīng)由順序二、概要設(shè)計(jì)1. 程序流程圖(我負(fù)責(zé)的為除弗洛伊德算法外的設(shè)計(jì))結(jié)束switch(menu)main開 始readviews();readways();readlines();menu
3、=1menu=2menu=5menu=3menu=4addview();addline();addway();輸出謝謝使用.再見.謝夢芳 李婷婷search();short_path();floyed();在這里簡單介紹弗洛伊德算法的核心思想:從圖的帶權(quán)鄰接矩陣開始,假設(shè)從Vi到Vj有弧,則從Vi到Vj存在一條長度為arcsi j的路徑,該路徑不一定是最小路徑,尚需進(jìn)行n次試探。首先考慮路徑(Vi,V0,Vj)是否存在。如果存在,則比較(Vi,Vj)和(Vi,V0,Vj)的路徑長度取長度較短者為從Vi到Vj的中間頂點(diǎn)的序號(hào)不大于0的最短路徑。假如在路徑上再增加一個(gè)頂點(diǎn)V1,如果(Vi,.,V1
4、)和(V1,.,Vj)分別是當(dāng)前找到的中間頂點(diǎn)的序號(hào)不大于0的最短路徑,那么(Vi,V1,,Vj)就有可能是從Vi到Vj的中間頂點(diǎn)的序號(hào)不大于1的最短路徑。將它和已經(jīng)得到的Vi到Vj的中間頂點(diǎn)的序號(hào)不大于0的最短路徑相比較,從中選出中間頂點(diǎn)的序號(hào)不大于1的最短路徑之后,再增加一個(gè)V2繼續(xù)試探,以此類推,經(jīng)過n次比較后,即可求出從Vi到Vj的最短路徑。2.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)存儲(chǔ)結(jié)構(gòu):本程序部分函數(shù)采用的是文件進(jìn)行數(shù)據(jù)的存儲(chǔ),所以采用的是順序存儲(chǔ)結(jié)構(gòu),如要添加數(shù)據(jù),直接在文件里面進(jìn)行操作就行了。弗洛伊德算法中采用的存儲(chǔ)結(jié)構(gòu)是圖的鄰接矩陣。A.如下為抽象數(shù)據(jù)類型定義的模板以及抽象數(shù)據(jù)類型線性表的定義:AD
5、T List數(shù)據(jù)對(duì)象:D=ai| ai ElemSet,i=1,2,3,n,n0數(shù)據(jù)關(guān)系:R1=<ai-1,ai>| ai-1,ai D,i=1,2,3,n基本操作:void readviews()初始條件:views.txt已經(jīng)存在。操作結(jié)果:將 views.txt里面的數(shù)據(jù)一次存入數(shù)組viewsSIZE_view里,并將數(shù)組里面的存儲(chǔ)數(shù)據(jù)的個(gè)數(shù)賦值給全局變量view_count; void readways()初始條件:ways.txt已經(jīng)存在。操作結(jié)果:將 ways.txt里面的數(shù)據(jù)一次存入數(shù)組waysSIZE_way里,并將數(shù)組里面的存儲(chǔ)數(shù)據(jù)的個(gè)數(shù)賦值給全局變量way_co
6、unt;void readlines()初始條件:lines.txt已經(jīng)存在。操作結(jié)果:將 lines.txt里面的數(shù)據(jù)一次存入數(shù)組linesSIZE_line里,并將數(shù)組里面的存儲(chǔ)數(shù)據(jù)的個(gè)數(shù)賦值給全局變量line_count;void search();初始條件:viewsSIZE_view存在,且里面放有相關(guān)信息。操作結(jié)果:根據(jù)用戶輸入的車站名查找該車站的相關(guān)信息并輸出;void addview() 初始條件:views.txt已經(jīng)存在。操作結(jié)果:將 views.txt里面的數(shù)據(jù)一次存入數(shù)組viewsSIZE_view里,并將數(shù)組里面的存儲(chǔ)數(shù)據(jù)的個(gè)數(shù)賦值給全局變量view_count;vo
7、id addway()初始條件:ways.txt已經(jīng)存在。操作結(jié)果:將 ways.txt里面的數(shù)據(jù)一次存入數(shù)組waysSIZE_way里,并將數(shù)組里面的存儲(chǔ)數(shù)據(jù)的個(gè)數(shù)賦值給全局變量way_count;void addline()初始條件:lines.txt已經(jīng)存在。操作結(jié)果:將 lines.txt里面的數(shù)據(jù)一次存入數(shù)組linesSIZE_line里,并將數(shù)組里面的存儲(chǔ)數(shù)據(jù)的個(gè)數(shù)賦值給全局變量line_count;void floyed()初始條件: viewsSIZE_view、waysSIZE_way、linesSIZE_line已經(jīng)存在并且存有相關(guān)信息。操作結(jié)果:把每個(gè)車站到各個(gè)車站的最短
8、經(jīng)由路徑及此路徑的距離存儲(chǔ)在path_info、path_listSIZE_viewSIZE_view數(shù)組里;void shortest_path()初始條件:path_info、path_listSIZE_viewSIZE_view存儲(chǔ)相關(guān)的數(shù)據(jù);操作結(jié)果:輸出輸入的兩個(gè)站的最短距離及經(jīng)過的所有站;void addadta(int menu)初始條件:views.txt、ways.txt、lines.txt已經(jīng)存在。操作結(jié)果:如果menu=1,則添加車站數(shù)據(jù),如果menu=2,則添加路線數(shù)據(jù);B.弗洛伊德算法中,數(shù)據(jù)結(jié)構(gòu)所用到的思想為圖的思想,所以數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)主要的目的為便于圖的操作的設(shè)計(jì)
9、。因此我們用了下面這些數(shù)據(jù)定義。struct view_info /*城市信息結(jié)構(gòu)*/int id;char name20;int code;char shortname20;char LName100;/經(jīng)過此站的鐵路線名稱viewsSIZE_view;struct line_info/鐵路線信息結(jié)構(gòu)int Lid;char LName20;int start_id; /始發(fā)站int end_id; /終點(diǎn)站int dist; /鐵路線長char sign5; /通行標(biāo)志linesSIZE_line;struct way_info /鐵路度的信息結(jié)構(gòu)int station1;int stat
10、ion2;int dist;waysSIZE_way;struct path_info /用于最短路徑的查詢int count;int pathSIZE_view;三、詳細(xì)設(shè)計(jì)1.程序設(shè)計(jì)思想設(shè)計(jì)思路:核心問題:求最短路徑(弗洛伊德算法)數(shù)據(jù)模型(邏輯結(jié)構(gòu)):帶權(quán)有向圖輸入輸出:初始數(shù)據(jù)是從views.txt、lines.txt、way.txt三個(gè)文件中讀入,在讀入數(shù)據(jù)后,用戶可以根據(jù)選項(xiàng)選擇相應(yīng)的功能,不同的功能有不同的數(shù)據(jù)輸入/輸出,比如:查詢的功能是要求輸入要查詢的站的名稱,然后輸出是該站的相關(guān)信息;查詢最短路徑的功能則是輸入起點(diǎn)站、終點(diǎn)站的名稱,輸出則是該段路線距離和經(jīng)由站等。程序的輸
11、入:(1)鐵路線信息的輸入:依次輸入“鐵路線代碼,鐵路線名稱,起始站代碼, 終點(diǎn)站代碼,該鐵路線長度、通行標(biāo)志” ,并且中間以空格隔開。(2)火車站信息的輸入:依次輸入“車站代碼,車站名,車站編號(hào)、車站簡稱,所屬鐵路線編號(hào)” ,并且中間以空格隔開。 程序的輸出格式: (1)當(dāng)顯示鐵路線或者火車站的信息時(shí),與輸入時(shí)的格式完全一致 ; (2)輸出最短路徑的長度,以及最短路徑的經(jīng)由順序;按照程序功能要求,設(shè)計(jì)了一下各個(gè)功能模塊:(1)、文件讀取模塊文件讀取模塊包括讀取車站信息模塊readviews、路段權(quán)值信息讀取模塊readlines、鐵路線信息讀取模塊readlines。這些模塊的主要功能為從文
12、件中讀取所需的信息。(2)、添加信息模塊adddata添加信息模塊又包括以下子功能模塊:A、添加站點(diǎn)信息模塊addview。B、添加路段權(quán)值模塊addway。C、添加鐵路線信息模塊addline。(3)查詢模塊根據(jù)用戶需求,查詢站點(diǎn)信息(4)最短路徑查詢模塊該模塊為本軟件設(shè)計(jì)的核心部分。根據(jù)該模塊可以很方便的找出兩個(gè)城市的最短路徑。該最短路徑的算法為常用的弗洛伊德算法。(5)操作菜單模塊該模塊主要用于與用戶的交互,一個(gè)界面友好的菜單可以提高軟件的人機(jī)交互體驗(yàn)。2. 軟件模塊結(jié)構(gòu)圖 voidaddline()voidaddway()voidaddview()voidfloyed()void ma
13、in()voidsearch() voidshort_path() voidadddata(int mune) void readlines() void readways() void readviews() (1)主程序模塊,其中主函數(shù)為: void main() 新增火車站;新增鐵路線;查詢火車站的信息;針對(duì)客運(yùn)、貨運(yùn)情況,求兩站之間的最短路徑及其經(jīng)由順尋;退出界面 (2) 文件模塊為:void readways(); void readviews(); void readlines()(3)圖模塊為:Void short_path();void floyed()(4)查詢函數(shù)和添加函數(shù)
14、void search();void adddata(in menu); void addway(); void addline();void addview()函數(shù)的調(diào)用:進(jìn)入主函數(shù),調(diào)用文件模塊各函數(shù)以讀取數(shù)據(jù);選擇1或2,則調(diào)用void adddata(in menu),其中若選擇1,則調(diào)用void addview()函數(shù),若選擇2,則調(diào)用void addline()和void addway()函數(shù);選擇3,調(diào)用void search()函數(shù)進(jìn)行查詢;選擇4,調(diào)用void short_path()和void floyed()函數(shù)以得到最短路徑。3.源程序(見附錄)四、調(diào)試分析1.測試數(shù)據(jù)
15、數(shù)據(jù)讀取如下:操作界面如下:功能測試截圖:輸入1,增加車站信息如下:輸入2,增加鐵路線信息如下:輸入3,查詢車站信息如下:輸入4,查詢最短路徑如下:輸入5,退出界面如下;2.時(shí)間復(fù)雜度分析程序中圖的存儲(chǔ)結(jié)構(gòu)為帶權(quán)鄰接矩陣, 其中對(duì)鄰接矩陣的初始化的時(shí)間復(fù)雜度為O(n*n); 在求最短路徑的時(shí)候,用的是弗洛伊德算法,時(shí)間復(fù)雜度主要在于求每一站到任意站的最短路徑由是的for循環(huán),那有三個(gè)for循環(huán),所以時(shí)間復(fù)雜度為O(n3)。3.上機(jī)過程中出現(xiàn)的問題及其解決方案(1)剛剛看到題目要求的時(shí)候就想到了弗洛伊德算法,但是不知道如何去做,在網(wǎng)站搜索到類似代碼,經(jīng)過修改后,最終得出了源程序。(2)源程序可以
16、運(yùn)行的時(shí)候,忘記添加相關(guān)文本文件,所以運(yùn)行文件的時(shí)候會(huì)提示文件打開失敗,無法進(jìn)行接下來的功能使用,這時(shí)候才想起來要自行添加相關(guān)的文本文檔,接著問題就解決了。(3)在way.text文本文檔中添加各站權(quán)值的時(shí)候,一開始不知道如何添加,經(jīng)過思考和查詢課本后,明白了添加權(quán)值時(shí)是以各站編碼代表各站,由于是有向圖,所以需要添加兩站往返權(quán)值。(4)在輸入信息時(shí),由于是輸入漢字,系統(tǒng)不穩(wěn)定,容易出現(xiàn)刷屏,這個(gè)問題,我是向?qū)W長尋求幫助并得以解決的。4.算法的改進(jìn)設(shè)想1.程序界面不夠美觀,需要改進(jìn),作為人機(jī)交互的界面,應(yīng)盡量美觀舒適,提高人機(jī)交互體驗(yàn)。2.鐵路交通網(wǎng)的管理還有很多方面,例如刪除某些鐵路線或火車站
17、五、用戶使用手冊(cè)首先運(yùn)行可執(zhí)行文件,執(zhí)行文件為:test.exe。根據(jù)需要選擇相應(yīng)的數(shù)字代碼:【1】 選擇1,增加車站信息。首先輸入新車站的id,輸入為數(shù)字(必須大于所給提示信息),其次輸入新車站名稱,輸入為文字,接著輸入新車站的編號(hào),輸入為數(shù)字(必須大于所給信息),然后輸入新車站的簡稱,輸入為英文字母(一般為新車站拼音首字母),接著輸入新車站經(jīng)過的路線,輸入為文字。最后選擇是否繼續(xù),輸入為n(不)或y(是)。【2】 選擇2,增加鐵路線信息。首先輸入新鐵路線信息的Lid,輸入為數(shù)字(必須大于所給提示信息),其次輸入新鐵路線名稱,輸入為文字,接著分別輸入新鐵路線的起始站id和終點(diǎn)站id,輸入為數(shù)
18、字,然后輸入距離,輸入為數(shù)字,通行標(biāo)志:00B客貨運(yùn)禁行,01B貨運(yùn)通行專線,10B客運(yùn)通行專線,11B客貨運(yùn)通行,接著輸入權(quán)值信息,前一站和后一站的編碼,輸入為數(shù)字,兩站的距離,輸入為數(shù)字。最后選擇是否繼續(xù),輸入為n(不)或y(是)。【3】 選擇3,查詢車站信息。輸入需要查詢的車站名稱,輸入為文字。最后選擇是否繼續(xù),輸入為n(不)或y(是)。【4】 選擇4,查詢最短路徑。分別輸入需要查詢最短路徑的起始站和終點(diǎn)站的名稱。最后選擇是否繼續(xù),輸入為n(不)或y(是)。【5】選擇5,退出程序。六、心得體會(huì)本次課程設(shè)計(jì)我們做的是全國鐵路網(wǎng)最經(jīng)經(jīng)由問題,功能都實(shí)現(xiàn)了,運(yùn)行順暢。對(duì)于這次的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)我覺
19、得我們還是挺成功的。以下是我在這次數(shù)據(jù)結(jié)構(gòu)中的體會(huì)。我覺得相比大一做的C語言程序設(shè)計(jì)而言,這次的程序難了很多,但同時(shí)教會(huì)了我更多的知識(shí),最重要的就是讓我明白了數(shù)據(jù)結(jié)構(gòu)這門課程的使用價(jià)值。以前,在課堂上老師一遍遍的講到數(shù)據(jù)結(jié)構(gòu)和編程語言的關(guān)系,自從完成了課程設(shè)計(jì)以后我突然恍然大悟,明白了數(shù)據(jù)結(jié)構(gòu)和C語言等編程語言的關(guān)系。簡單的說,它就是一個(gè)程序所采用的邏輯結(jié)構(gòu)(有集合,線性表,樹和圖等)和存儲(chǔ)結(jié)構(gòu)(順序和鏈表)。只有確定了這些,再加上算法才能寫出一個(gè)程序。 在寫本次程序時(shí),遇到了不少的問題。主要還是對(duì)編程語言的不熟悉,雖然總體思路可以明確,但是真的寫起來卻漏洞百出。因此,我們上網(wǎng)搜索相關(guān)資料,找
20、到了類似的源程序,參考源程序之后,我們進(jìn)行了一系列的改錯(cuò)和完善。遇到不明白的部分,馬上詢問學(xué)長或者優(yōu)秀的同學(xué),讓他們?yōu)槲覀冎更c(diǎn)迷津。最終把他們都解決了。雖然這次花的時(shí)間比較多,但是收獲也是很大啊。最重要的收獲就是:當(dāng)遇到問題時(shí),要很高興的面對(duì)它。相信自己一定能解決這個(gè)問題。接下來,要沉住氣,不斷地嘗試,不斷地調(diào)試,最終會(huì)把問題給解決的。我認(rèn)為編程遇到問題是一件很高興的事情。只有遇到問題,才能有問題解決。解決問題也是一件很開心的事情。 通過本次課程設(shè)計(jì),增強(qiáng)了我的調(diào)試程序的能力,以及分析程序,分析算法的能力。鞏固了我數(shù)據(jù)結(jié)構(gòu)的知識(shí),對(duì)與去年學(xué)習(xí)的一門學(xué)科的溫習(xí),讓我更了解了弗洛伊德算法,熟練掌握
21、了函數(shù)的定義,函數(shù)的調(diào)用等編程能力。我相信只有自己的能力不斷地提高,才能編寫出高質(zhì)量的程序來。 課程設(shè)計(jì)期間,不得不提的是合作。因?yàn)楹献魑覀儾拍苡挚煊趾玫耐瓿扇蝿?wù)。當(dāng)今社會(huì),需要一個(gè)會(huì)思考會(huì)設(shè)計(jì)的人,但是更需要的是一個(gè)懂合作,會(huì)合作的搭檔。只有兩個(gè)人默契配合,合理分工才能順利的完成任務(wù)。我很開心能和我的搭檔一組,我們分工合作,在整個(gè)課程設(shè)計(jì)中遇到問題一起商量,一起解決,讓我感受到了合作的快樂。 最后我想說,數(shù)據(jù)結(jié)構(gòu)是一門很復(fù)雜的學(xué)科,難懂。但是只要你利用學(xué)習(xí)到的理論知識(shí)去實(shí)踐,結(jié)合實(shí)踐去分析和理解它,最終你會(huì)發(fā)現(xiàn)它也不過如此。 在實(shí)踐的過程中互相幫助很重要,它能讓你在困境中體會(huì)到快樂,在苦澀的
22、學(xué)習(xí)中體會(huì)友情帶來的快樂!附錄:#include <fstream>#include <iostream>#include <string>#include <cstdio>#include <iomanip>#include <cstdlib>#define SIZE_view 50#define SIZE_line 100#define SIZE_way 300#define MAXNODE 30 /定義最多節(jié)點(diǎn)數(shù)#define MAXCOST 10000using namespace std;struct view_
23、info /*城市信息結(jié)構(gòu)*/int id;char name20;int code;char shortname20;char LName100;/經(jīng)過此站的鐵路線名稱viewsSIZE_view;struct line_info/鐵路線信息結(jié)構(gòu)int Lid;char LName20;int start_id; /始發(fā)站int end_id; /終點(diǎn)站int dist; /鐵路線長char sign5; /通行標(biāo)志linesSIZE_line;struct way_info /鐵路度的信息結(jié)構(gòu)int station1;int station2;int dist;waysSIZE_way;s
24、truct path_info /用于最短路徑的查詢int count;int pathSIZE_view;int view_count,line_count,way_count; /用來存儲(chǔ)文件中有多少條記錄int dist_listSIZE_viewSIZE_view; /定義一個(gè)數(shù)組struct path_info path_listSIZE_viewSIZE_view; /定義一個(gè)path_info結(jié)構(gòu)體變量.void readviews();void readways();void readlines();void search();void addview();void addwa
25、y();void addline();void shortest_path();void floyed();void adddata(int menu);void main()readviews(); cout<<endl<<endl;readlines(); cout<<endl<<endl;readways();while(1)int menu;cout<<endl<<endl;cout<<" 全國鐵路運(yùn)輸網(wǎng)經(jīng)由系統(tǒng)"<<endl;cout<<"*&qu
26、ot;<<endl;cout<<" 1、增加車站信息"<<endl;cout<<" 2、增加鐵路線信息"<<endl;cout<<" 3、查詢車站信息"<<endl;cout<<" 4、查詢最短路徑"<<endl;cout<<" 5、退出界面"<<endl;cout<<"*"<<endl; cout<<&quo
27、t;請(qǐng)選擇你要的操作代碼.1-5):"<<endl;cin>>menu;while(menu<1|menu>5)/cout<<"error!please enter again:"cout<<"錯(cuò)誤!請(qǐng)?jiān)俅屋斎?" cin>>menu;switch(menu)case 1:case 2:adddata(menu);break;case 3:while(1)search();/cout<<"do you want to continue?(y/n)&qu
28、ot;<<endl;cout<<endl<<"你是否要繼續(xù)?(y/n)"<<endl;char con;cin>>con;if(con='y');elsebreak;break;case 4:while(1)shortest_path();/cout<<"do you want to continue?(y/n)"<<endl;cout<<endl<<"你是否要繼續(xù)?(y/n)"<<endl;char
29、 con;cin>>con;if(con='y');/* addline();*/elsebreak;break;case 5:cout<<"謝謝使用.再會(huì)."<<endl;getchar();getchar();exit(1);break;void readviews()int i;ifstream infile("views.txt",ios:in); /打開文件/把文件中的個(gè)數(shù)付給view_count/* infile>>view_count; */if(!infile) /打開文件失
30、敗/cerr<<"can't open views.txt!"<<endl;cerr<<"不能打開 views.txt!"<<endl;exit(1);/infile>>view_count;/先讀入文件個(gè)數(shù)for(i=0;i+)infile>>viewsi.id>>>>viewsi.code>>viewsi.shortname>>viewsi.LName;if(i!=0&&viewsi.i
31、d=0)break;view_count=i;/view_count=i;/給出源文件中車站的個(gè)數(shù)infile.close();/下面是測試用的代碼cout<<setiosflags(ios:left);cout<<"城市信息結(jié)構(gòu)"<<endl<<endl;/cout<<setw(8)<<"id"<<setw(9)<<"name"<<setw(8)<<"code"<<setw(12)&
32、lt;<"shortname"<<setw(10)<<"LName"<<endl;cout<<setw(8)<<"序號(hào)"<<setw(9)<<"名稱"<<setw(8)<<"code"<<setw(12)<<"簡稱"<<setw(10)<<"經(jīng)過此站的鐵路線名稱"<<endl;for(
33、i=0;i<view_count;i+)cout<<setw(8)<<viewsi.id<<setw(9)<<<<setw(8)<<viewsi.code<<setw(12);cout<<viewsi.shortname<<viewsi.LName<<endl;cout<<resetiosflags(ios:left);void readways()/讀文件ways.txtint i;ifstream infile("ways
34、.txt",ios:in);/打開文件/* infile>>way_count;*/ /把文件中的記錄付給way_countif(!infile) /打開文件失敗/cerr<<"can't open ways.txt!"<<endl;cerr<<"不能打開 ways.txt!"<<endl;exit(1);for(i=0;i+)infile>>waysi.station1>>waysi.station2>>waysi.dist;if(i!=0
35、&&waysi.station1=0)break;way_count=i;infile.close();/測試用.輸入路段的信息/ cout<<setiosflags(ios:left);/ cout<<setw(12)<<"station1"<<setw(12)<<"station2"<<"dist"<<endl;/ for(i=0;i<way_count;i+)/ / cout<<setw(12)<<w
36、aysi.station1<<setw(12)<<waysi.station2;/ cout<<waysi.dist<<endl;/ / cout<<resetiosflags(ios:left);void readlines()/讀文件lines.txtint i;ifstream infile("lines.txt",ios:in);/打開文件/把文件中的記錄付給line_countif(!infile) /打開文件失敗cerr<<"can't open lines.txt!&qu
37、ot;<<endl;exit(1);/* infile>>line_count; */for(i=0;i+)infile>>linesi.Lid>>linesi.LName>>linesi.start_id;infile>>linesi.end_id>>linesi.dist>>linesi.sign;if(i!=0&&linesi.Lid=0)break;line_count=i;infile.close();/下面的代碼為測試時(shí)用的cout<<"鐵路線信息結(jié)
38、構(gòu)"<<endl<<endl;cout<<setiosflags(ios:left);/ cout<<setw(8)<<"Lid"<<setw(12)<<"LName"<<setw(10)<<"start_id"/ cout<<setw(10)<<"end_id"<<setw(8)<<"dist"<<"sign
39、"<<endl;cout<<setw(8)<<"序號(hào)"<<setw(12)<<"路線名稱"<<setw(15)<<"始發(fā)站的id"cout<<setw(15)<<"終點(diǎn)站的id"<<setw(15)<<"路線長度"<<"通行標(biāo)志"<<endl;for(i=0;i<line_count;i+)/ cout&l
40、t;<setw(8)<<linesi.Lid<<setw(12)<<linesi.LName<<setw(10)<<linesi.start_id;/ cout<<setw(10)<<linesi.end_id<<setw(8)<<linesi.dist<<linesi.sign<<endl;cout<<setw(8)<<linesi.Lid<<setw(12)<<linesi.LName<<set
41、w(15)<<linesi.start_id;cout<<setw(15)<<linesi.end_id<<setw(15)<<linesi.dist<<linesi.sign<<endl;cout<<resetiosflags(ios:left);/這里輸出文本中的信息void search() /cout<<"Please enter the station name:"cout<<"請(qǐng)輸入要查詢站的名稱:"char sta_nam
42、e20;cin>>sta_name; cout<<endl; ifstream infile("views.txt",ios:in); / /* infile>>view_count;*/ if(!infile) cerr<<"can't open views.txt!"<<endl; exit(1); int i,mark; for(i=0;i<view_count;i+)infile>>viewsi.id>>>>view
43、si.code>>viewsi.shortname>>viewsi.LName;infile.close();for(i=0;i<view_count;i+)if(strcmp(sta_name,)=0)/cout<<"the station informations is:n"<<endl;cout<<"站點(diǎn)信息:n"cout<<"*"<<endl;cout<<setiosflags(ios:left);cou
44、t<<setw(8)<<"序號(hào)"<<setw(9)<<"名稱"<<setw(8)<<"code"<<setw(12)<<"簡稱"<<setw(10)<<"經(jīng)過此站的鐵路線名稱"<<endl;/cout<<setw(8)<<"id"<<setw(9)<<"name"<<
45、setw(8)<<"code"<<setw(12)<<"shortname"<<setw(10)<<"LName"<<endl;cout<<setw(8)<<viewsi.id<<setw(9)<<<<setw(8)<<viewsi.code<<setw(12);cout<<viewsi.shortname<<viewsi.LName&
46、lt;<endl;cout<<resetiosflags(ios:left);cout<<"*"<<endl;break;mark=i;if(mark=view_count-1) /cout<<"sorry, the station is not in here!"<<endl;cout<<"對(duì)不起, 你輸入的站點(diǎn)不存在!"<<endl;void addview()cout<<"請(qǐng)輸入新的車站信息:"<<
47、;endl;/cout<<"Please enter the new view's informations:"<<endl; /輸入新的車站信息/cout<<"id(id>"<<viewsview_count-1.id<<"):"cout<<"序號(hào)(id>"<<viewsview_count-1.id<<"):"cin>>viewsview_count.id;whil
48、e(1)if(viewsview_count.id<viewsview_count-1.id)cout<<"你輸入的數(shù)據(jù)不合法.請(qǐng)重新輸入:"cin>>viewsview_count.id;elsebreak;/cout<<"name:"cout<<"名稱:"cin>>viewsview_;cout<<"code(code>"<<viewsview_count-1.code<<"
49、):"cin>>viewsview_count.code;while(1)if(viewsview_count.code<viewsview_count-1.code)cout<<"你輸入的數(shù)據(jù)不合法.請(qǐng)重新輸入:"cin>>viewsview_count.id;elsebreak;/cout<<"shortname:"cout<<"簡稱:"cin>>viewsview_count.shortname;/cout<<"LNam
50、e:"cout<<"經(jīng)過此站的鐵路線名稱:"cin>>viewsview_count.LName;cout<<endl;ofstream outfile("views.txt",ios:app); /打開views 文件.并寫入數(shù)據(jù)/* outfile<<view_count<<endl;*/if(!outfile)cerr<<"can't open views.txt!"exit(1);outfile<<endl<<vi
51、ewsview_count.id<<" "<<viewsview_<<" "outfile<<viewsview_count.code<<" "<<viewsview_count.shortname;outfile<<" "<<viewsview_count.LName<<endl;/在文件末尾添加view_count+;outfile.close(); /關(guān)閉文件/cout<<
52、;"Successfully!the new station is added"<<endl;cout<<"成功添加新的站點(diǎn)!"<<endl;cout<<"新的站點(diǎn)是:"<<view_count<<endl;void addway()cout<<"Please enter the new way's informations:"<<endl; /輸入新的車站信息/cout<<"station
53、1:"cout<<"站1的code:"cin>>waysway_count.station1; /station1 的id/cout<<"station2:"cout<<"站2的code:"cin>>waysway_count.station2; /station2 的id/cout<<"dist:"cout<<"距離:"cin>>waysway_count.dist; /路段的長度ofst
54、ream outfile("ways.txt",ios:app); /打開ways.txt 文件.并寫入數(shù)據(jù)/* outfile<<way_count<<endl;*/if(!outfile)cerr<<"can't open ways.txt!"exit(1);outfile<<endl<<waysway_count.station1<<" "<<waysway_count.station2<<" "outfi
55、le<<waysway_count.dist<<" "<<waysway_count.station2<<" "<<waysway_count.station1;outfile<<" "<<waysway_count.dist;/在文件末尾添加way_count+;outfile.close(); /關(guān)閉文件cout<<"Successfully!the new way is added"<<endl;cou
56、t<<"new station number is :"<<way_count<<endl;void addline()/cout<<"Please enter the new line's informations:"<<endl; /輸入新鐵路信息cout<<"請(qǐng)輸入新鐵路信息:"<<endl; /輸入新鐵路信息cout<<"序號(hào)(Lid>"<<linesline_count-1.Lid&l
57、t;<"):"cin>>linesline_count.Lid;while(1)if(linesline_count.Lid<linesline_count-1.Lid)cout<<"你輸入的數(shù)據(jù)不合法.請(qǐng)重新輸入:"cin>>linesline_count.Lid;elsebreak;/cout<<"LName:"cout<<"名稱:"cin>>linesline_count.LName;/cout<<"st
58、art_id:"cout<<"始發(fā)站id:"cin>>linesline_count.start_id;/cout<<"end_id:"cout<<"終點(diǎn)站id:"cin>>linesline_count.end_id;/cout<<"dist:"cout<<"距離:"cin>>linesline_count.dist;/cout<<"sign:"cout&l
59、t;<"通行標(biāo)志:"cin>>linesline_count.sign;ofstream outfile("lines.txt",ios:app); /* outfile<<line_count+1<<endl;*/if(!outfile)cerr<<"can't open lines.txt!"exit(1);outfile<<endl<<linesline_count.Lid<<" "<<linesli
60、ne_count.LName<<" "<<linesline_count.start_id;outfile<<" "<<linesline_count.end_id<<" "<<linesline_count.dist<<" "outfile<<linesline_count.sign;line_count+;outfile.close(); / cout<<"Successfully!the ne
61、w line is added"<<endl;/ cout<<"new station number is :"<<line_count<<endl;cout<<"成功添加新的線路"<<endl;cout<<"新建線路的序號(hào) :"<<line_count<<endl;void floyed() /弗洛伊德算法int i,j,k,m;/包含著count 和path用來存儲(chǔ)經(jīng)過的路徑/ for(i=0;i<=view
62、_count;i+)/ for(j=0;j<=view_count;j+)/ dist_listij=MAXCOST;/先對(duì)任意兩點(diǎn)的距離初始值為無窮for(int t=0;t<=way_count;t+)i=wayst.station1;j=wayst.station2;dist_listij=wayst.dist;/把文件中的數(shù)據(jù)付給dist_listij=wayst.dist;形式for(i=0;i<=view_count;i+)for(j=0;j<=view_count;j+)if(i=j) /車站到本車站的距離賦值為零dist_listij=0;continue;dist_listij=-1; /先設(shè)置任意兩點(diǎn)之間的距離為-1.表示這兩點(diǎn)不通path_listij.count=0; /
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 切管器及類似手工工具企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報(bào)告
- 直條鋼絲企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報(bào)告
- 夯土器企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告-20250401-223508
- 新能源汽車功率器件應(yīng)用企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報(bào)告
- 礦山成品金企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報(bào)告
- 高效備考2025年公共衛(wèi)生執(zhí)業(yè)醫(yī)師考試試題及答案
- 陜西特崗小學(xué)試題及答案
- 中國凈水絮凝劑行業(yè)經(jīng)營效益分析及行情走勢預(yù)測研究報(bào)告
- 2025至2030中國防火蜂鳴器市場銷售規(guī)模分析與發(fā)展前景創(chuàng)新監(jiān)測報(bào)告
- 2025至2030中國鉛晶電池市場前景監(jiān)測與發(fā)展?jié)摿ρ芯繄?bào)告
- 中醫(yī)體質(zhì)辨識(shí)標(biāo)準(zhǔn)(評(píng)分表)
- 2024年國家糧食和物資儲(chǔ)備局直屬事業(yè)單位招聘筆試參考題庫附帶答案詳解
- 2023年中核集團(tuán)中核華興校招考試真題及答案
- 醫(yī)療器械臨床試驗(yàn)三方協(xié)議模板
- 低空經(jīng)濟(jì)產(chǎn)業(yè)園建設(shè)項(xiàng)目經(jīng)濟(jì)效益和社會(huì)效益分析
- JCT 2777-2023 公路工程用泡沫混凝土 (正式版)
- 生產(chǎn)性服務(wù)業(yè)行業(yè)特征
- 索道操作培訓(xùn)課件教學(xué)
- 鋼材抗拉強(qiáng)度不確定度
- 學(xué)習(xí)正確的床上用品清潔與消毒流程
- 2024年中國郵政集團(tuán)公司招聘筆試參考題庫含答案解析
評(píng)論
0/150
提交評(píng)論