數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告之模擬一個(gè)全國(guó)城市間的交通咨詢程序_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告之模擬一個(gè)全國(guó)城市間的交通咨詢程序_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告之模擬一個(gè)全國(guó)城市間的交通咨詢程序_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告之模擬一個(gè)全國(guó)城市間的交通咨詢程序_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告之模擬一個(gè)全國(guó)城市間的交通咨詢程序_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

分類號(hào)編號(hào)華北水利水電學(xué)院NorthChinaInstituteofWaterConservancyandHydroelectricPower課程設(shè)計(jì)題目:全國(guó)交通資訊系統(tǒng)院系信息工程學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)姓名指導(dǎo)教師楊彬2023年6月28日目錄1.需求分析 1問(wèn)題描述 11.1基本規(guī)定 22概要設(shè)計(jì) 32.1數(shù)據(jù)結(jié)構(gòu) 32.2程序模塊 53.具體設(shè)計(jì) 63.1用到的各種函數(shù) 63.2函數(shù)調(diào)用關(guān)系圖 83.3測(cè)試與分析 84.用戶說(shuō)明書(shū) 135.總結(jié) 165.1李明月的總結(jié) 165.2劉璐璐的總結(jié) 175.3呂竹青的總結(jié) 18參考文獻(xiàn): 19附錄:程序源代碼 191.需求分析問(wèn)題描述設(shè)計(jì)、模擬一個(gè)全國(guó)城市間的交通征詢程序,為旅客提供三種最優(yōu)征詢方案:(1)時(shí)間最短;(2)費(fèi)用最??;(3)中轉(zhuǎn)次數(shù)最少。1.1基本規(guī)定1.1.1輸入輸出的形式和輸入值的范圍在程序中輸入城市名稱時(shí),需輸入10個(gè)字母以內(nèi)的字母串;輸入列車或飛機(jī)編號(hào)時(shí)需輸入一個(gè)整型數(shù)據(jù);輸入列車或飛機(jī)的費(fèi)用時(shí)需輸入一個(gè)實(shí)型數(shù)據(jù);輸入列車或飛機(jī)開(kāi)始時(shí)間和到達(dá)時(shí)間時(shí)均需輸入兩個(gè)整型數(shù)據(jù)(以hh:mm的形式);在選擇功能時(shí),應(yīng)輸入與所選功能相應(yīng)的一個(gè)整型數(shù)據(jù)。1.1.2輸出形式程序的輸出信息重要是:最快需要多少時(shí)間才干到達(dá),或最少需要多少旅費(fèi)才干到達(dá),或最少需要多少次中轉(zhuǎn)到達(dá),并具體說(shuō)明依次于何時(shí)乘坐哪一趟列車或哪一次班機(jī)到何地。1.1.3程序所能達(dá)成的功能程序的功能涉及:提供對(duì)城市信息的編輯,提供列車時(shí)刻表和飛機(jī)航班表的編輯,提供三種最優(yōu)決策:最快到達(dá)、最省錢(qián)到達(dá)、最少中轉(zhuǎn)次數(shù)到達(dá),顯示編輯的全國(guó)交通系統(tǒng)。1.1.4任務(wù)分派在本程序中,我們一共劃分了三個(gè)模塊。管理員模塊的初始化數(shù)據(jù),城市信息的編輯,以及顯示交通系統(tǒng)和整體的界面由李明月完畢。航班班次以及列車車次添加刪除以及數(shù)據(jù)結(jié)構(gòu)的初步實(shí)現(xiàn)由呂竹青完畢。對(duì)于最少時(shí)間,最少花費(fèi)以及最少的中轉(zhuǎn)次數(shù)這三個(gè)函數(shù)的實(shí)現(xiàn)由劉璐璐進(jìn)行完畢。2概要設(shè)計(jì)2.1數(shù)據(jù)結(jié)構(gòu)#defineMAX_VERTEX_NUM18//城市節(jié)點(diǎn)數(shù)#defineMAX_ARC_SIZE100#defineMAX_ROUTE_NUM5//路線數(shù)#defineFalse0#defineTrue1#defineINFINITY10000structVehide{intnumber;//航班號(hào),火車號(hào)floatexpenditure;//費(fèi)用intbegintime[2];//出發(fā)時(shí)間intarrivetime[2];//到達(dá)時(shí)間};//航班、列車信息節(jié)點(diǎn)structinfolist{ Vehidestata[MAX_ROUTE_NUM];//一個(gè)出發(fā)地到達(dá)目的地所相應(yīng)的航班數(shù)或列車車次數(shù)intlast;//順序表所相應(yīng)的下標(biāo),從0開(kāi)始};//順序表表達(dá)structArcNode{ intadjvex;//節(jié)點(diǎn)下標(biāo)ArcNode*nextarc;//節(jié)點(diǎn)的下一個(gè)指針域infolistinfo;//節(jié)點(diǎn)的數(shù)據(jù)域};//鄰接表中各個(gè)節(jié)點(diǎn)信息typedefstructVNode{ charcityname[10];//城市名ArcNode*planefirstarc,*trainfirstarc;//航班鏈、列車鏈}VNode,AdjList[MAX_VERTEX_NUM];structALGraph{ AdjListvertices;intvexnum,planearcnum,trainarcnum;//城市數(shù)、航班數(shù)、列車數(shù)};structNode{intadjvex;introute;Node*next;};//臨時(shí)建立的一個(gè)鄰接表,用來(lái)求最少中轉(zhuǎn)次數(shù)和最少費(fèi)用structQNode{intadjvex;structQNode*next;};//鏈隊(duì)節(jié)點(diǎn)信息structLinkQueue{QNode*front;QNode*rear;};//鏈隊(duì)信息typedefstructTimeNode{ intadjvex;introute;intbegintime[2];intarrivetime[2];structTimeNode*child[MAX_ROUTE_NUM];}TimeNode,*TimeTree;structarc{intco;charvt[10];//出發(fā)地名字charvh[10];//目的地名字intbt[2];//出發(fā)時(shí)間intat[2];//到達(dá)時(shí)間floatmo;//費(fèi)用}a[MAX_ARC_SIZE];charcity[MAX_VERTEX_NUM][10];intTTime[2];inttime[2];inttime1[2];inttime2[2];intc[MAX_VERTEX_NUM];intd[MAX_VERTEX_NUM];2.2程序模塊重要涉及管理員編輯模塊和用戶查詢模塊以及顯示全國(guó)交通信息模塊。2.2.1各模塊之間的調(diào)用關(guān)系以及算法設(shè)計(jì)3.具體設(shè)計(jì)3.1用到的各種函數(shù)voidAdminister(ALGraph*G);//voidCityEdit(ALGraph*G);//城市編輯voidCreateCityFile();voidCreateGraph(ALGraph*G);voidCreatePlaneFile();voidCreateTrainFile();intDeleteplaneArc(ALGraph*G);voidDeleteQueue(LinkQueue*Q,int*x);intDeletetrainArc(ALGraph*G);voidDeleteVertex(ALGraph*G);voidDemandDispose(intn,ALGraphG);voidEnterplaneArc(ALGraph*G);voidEnterQueue(LinkQueue*Q,intx);voidEntertrainArc(ALGraph*G);voidEnterVertex(ALGraph*G);voidExpenditureDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1,float*M,int*final);voidflightedit(ALGraph*G);voidInitGraph(ALGraph*G);voidInitQueue(LinkQueue*Q);intIsEmpty(LinkQueue*Q);intLocateVertex(ALGraph*G,char*v);voidMinExpenditure(infolistarcs,float*expenditure,int*route);voidPrintGraph(ALGraph*G);intsave(ALGraph*G);voidtrainedit(ALGraph*G);voidTransferDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1);voidCopyTimeTree(TimeTreep,TimeTreeq);voidDestoryTimeTree(TimeTreep);voidMinTime(infolistarcs,int*time,int*route);voidVisitTimeTree(TimeTreep);voidTimeDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1,int(*T)[2],int*final);voidTimeTreeDispose(Node*head,infolist(*arcs)[MAX_VERTEX_NUM]);voidtrainedit(ALGraph*G);voidCreateTimeTree(TimeTreep,inti,intj,LinkQueue*Q,infolist(*arcs)[MAX_VERTEX_NUM]);voidUserDemand(ALGraphG);3.2函數(shù)調(diào)用關(guān)系圖3.3測(cè)試與分析3.3.1測(cè)試數(shù)據(jù)與截圖1.管理員操作界面2.對(duì)整個(gè)結(jié)構(gòu)進(jìn)行初始化3.對(duì)城市,飛機(jī)班次,列車車次的編輯對(duì)城市的編輯:對(duì)航班的編輯:對(duì)列車的編輯:1.用戶操作界面1.查詢最少費(fèi)用2.查詢最短時(shí)間3.查詢最少的中轉(zhuǎn)次數(shù)3.3.2測(cè)試分析考慮到道路網(wǎng)多是稀疏網(wǎng),故采用了鄰接表作存儲(chǔ)結(jié)構(gòu),其空間復(fù)雜度位O(e),此時(shí)的時(shí)間復(fù)雜度也為O(e)。構(gòu)建鄰接表的時(shí)間復(fù)雜度位O(n+e),輸出途徑的時(shí)間復(fù)雜度為O(n2)。由此,本交通資訊系統(tǒng)的時(shí)間復(fù)雜度位O(n2)。本程序在求最短途徑時(shí)使用了迪杰斯特拉算法,重要考慮在本程序的初級(jí)階段,并不需要大量的查詢,更多會(huì)是圖信息的添加和修改,重在算法的理解和掌握,因此采用了算法復(fù)雜度相對(duì)較低的迪杰斯特拉算法。當(dāng)然,從性能上來(lái)說(shuō),當(dāng)交通圖基本穩(wěn)定,并且城市信息基本完善的時(shí)候,使用佛洛伊德把所有的最短途徑信息存儲(chǔ)起來(lái)也許會(huì)更方便一點(diǎn),后續(xù)的查詢的時(shí)間復(fù)雜度也會(huì)相對(duì)減少。由此可見(jiàn),在選用算法時(shí),不能單純地只考慮算法的時(shí)間復(fù)雜度,有時(shí)還必須綜合考慮各種因素。航班時(shí)刻表

機(jī)

號(hào)

出發(fā)地到達(dá)地出發(fā)時(shí)間到達(dá)時(shí)間費(fèi)

6320北京上海上海北京16:2018:00

17:2519:05680元2104北京烏魯木齊烏魯木齊

北京8:0010:459:5511:401150元201

北京

西安

西安

北京15:2512:3517:0014:15930元2323

西安廣州

廣州

西安7:1510:159:3511:351320元173

拉薩

昆明

昆明拉薩10:2012:3511:4514:00830元3304

拉薩

武漢

武漢拉薩14:1516:2515:4517:55890元82烏魯木齊昆明

昆明烏魯木齊

9:3013:0512:1515:501480元4723

武漢廣州

廣州

武漢7:0511:258:4513:05810元列車時(shí)刻表車次出發(fā)地到達(dá)地出發(fā)時(shí)間到達(dá)時(shí)間車

費(fèi)27北京鄭州西安鄭州鄭州西安鄭州北京

13:1521:2405:4113:4221:1205:1313:3021:39

78元

82元82元78元41

北京

鄭州

上海

鄭州鄭州上海鄭州北京7:1115:2000:3509:4015:0800:1309:2817:37

90元

100元

100元90元59

上海廣州

廣州上海08:2003:3903:1622:53

182元134

蘭州

北京

北京

蘭州03:5219:2418:5610:28

162元323

廣州

昆明

昆明

廣州06:1816:3116:1402:27

102元873

武漢

昆明

昆明

武漢07:1321:4221:1711:46134元116

武漢

長(zhǎng)沙

長(zhǎng)沙

武漢9:3618:5418:3203:48

98元373

長(zhǎng)沙

廣州

廣州

長(zhǎng)沙13:1500:3500:1511:35116元

747蘭州武漢武漢蘭州17:4115:1314:4712:19210元371

蘭州烏魯木齊

烏魯木齊

蘭州11:4200:3523:5411:23114元218武漢西安

西安

武漢18:5001:3411:5118:35178元4.用戶說(shuō)明書(shū)本程序運(yùn)營(yíng)在Windows系統(tǒng)下,執(zhí)行文獻(xiàn)為:全國(guó)交通資訊系統(tǒng).exe;雙擊運(yùn)營(yíng)程序后會(huì)顯示控制臺(tái)窗口,如圖所示:輸入操作命令“1”,進(jìn)入管理員操作界面,輸入1-5的操作命令可以執(zhí)行相應(yīng)的操作,如圖所示:輸入“2”操作命令則進(jìn)入用戶查詢窗口,如圖所示:輸入“3”命令則顯示整個(gè)交通網(wǎng)絡(luò).5.總結(jié)5.1李明月的總結(jié)在這次的課程設(shè)計(jì)中,我們抽中了這個(gè)全國(guó)交通征詢系統(tǒng),剛看完題目真的感覺(jué)無(wú)從下手,最后通過(guò)我們的討論以及需求分析,我們這個(gè)系統(tǒng)所要用的結(jié)構(gòu)重要是圖,我被分到的模塊重要是對(duì)整個(gè)這個(gè)交通系統(tǒng)的初始化,以及對(duì)城市信息的編輯,也就是對(duì)城市的添加和刪除,尚有對(duì)整個(gè)系統(tǒng)的界面的操作。雖然看似簡(jiǎn)樸,但是對(duì)于我來(lái)說(shuō)事實(shí)上很困難,由于我們這個(gè)要存儲(chǔ)的信息比較復(fù)雜,所以不能單純的每次都要進(jìn)行由鍵盤(pán)進(jìn)行輸入,進(jìn)行初始化,那么這就勢(shì)必要用到文獻(xiàn)操作。所以通過(guò)這次的時(shí)間讓我對(duì)于文獻(xiàn)的操作有了很大的提高。并且城市的信息的編輯也不是那么的簡(jiǎn)樸,當(dāng)然添加還相對(duì)簡(jiǎn)樸一點(diǎn),但是在做刪除的時(shí)候真的很困難,要?jiǎng)h除這個(gè)城市到別的地方的弧,還要?jiǎng)h除別的城市到這個(gè)城市的航班鏈以及列車鏈。

在真的下手去做的時(shí)候,我真的碰到了好多問(wèn)題。一方面就是在用文獻(xiàn)對(duì)系統(tǒng)進(jìn)行初始化的時(shí)候,一開(kāi)始選錯(cuò)了函數(shù),我選用的是fprintf進(jìn)行由電腦輸入到文獻(xiàn),但是在進(jìn)行對(duì)航班和列車的信息添加的時(shí)候就沒(méi)那么方便了,由于這個(gè)函數(shù)只能對(duì)簡(jiǎn)樸的類型進(jìn)行操作,于是我改成了fwrite這個(gè)函數(shù),通過(guò)無(wú)數(shù)次的嘗試,以及上網(wǎng)搜集資料,終于可以成功的把我從鍵盤(pán)輸入的信息傳入到文獻(xiàn)中了。然后開(kāi)始嘗試將自己存入到文獻(xiàn)中的數(shù)據(jù)對(duì)建立的圖的結(jié)構(gòu)進(jìn)行初始化,在這一步上我先把文獻(xiàn)中存入的信息都依次讀入到一個(gè)結(jié)構(gòu)體數(shù)組中,然后再用這個(gè)結(jié)構(gòu)體數(shù)組對(duì)圖的相應(yīng)的結(jié)構(gòu)以及弧進(jìn)行賦值,將相關(guān)的城市信息,列車信息以及飛機(jī)信息都存入到這個(gè)整個(gè)的結(jié)構(gòu)中。在對(duì)城市進(jìn)行刪除的時(shí)候,一開(kāi)始認(rèn)為只要我把這個(gè)節(jié)點(diǎn)的相關(guān)信息刪除掉,就是把這個(gè)城市的信息從這個(gè)交通網(wǎng)中刪除掉了,但是當(dāng)調(diào)試的時(shí)候才發(fā)現(xiàn),這樣是不對(duì)的,假如我只是刪除了這個(gè)節(jié)點(diǎn)的信息,只是把這個(gè)城市到其他的地方的航班和列車信息刪除了,但是并沒(méi)有將別的城市到這個(gè)城市的一些航班,列車進(jìn)行刪除,怎么做都做不對(duì),呂竹青和我做的功能想類似,通過(guò)我們兩個(gè)的討論以及搜集資料,最后功夫不負(fù)有心人,我們終于成功的把刪除這一塊給做了出來(lái)。當(dāng)然在最后的調(diào)試中我們也碰到了各種各樣的問(wèn)題,由于各人都是分模塊寫(xiě)的所以調(diào)試的時(shí)候有很大的困難,但是通過(guò)我們?nèi)齻€(gè)人不懈的努力,終于把各自寫(xiě)的模塊像融合,這個(gè)系統(tǒng)成功的調(diào)試出來(lái)了,在這兩周的課程設(shè)計(jì)中,我相信我們都收益良多。5.2劉璐璐的總結(jié)開(kāi)始抽到我們做的題,題目是全國(guó)交通征詢系統(tǒng),重要實(shí)現(xiàn)城市以及航班的編輯以及最短時(shí)間,最少費(fèi)用,最少中轉(zhuǎn)次數(shù)。我是該小組的負(fù)責(zé)人,在抽到題目的前兩天,我們做了具體的需求分析與分工,我們做的題目中重要用到的是第七章圖的知識(shí),實(shí)現(xiàn)各種功能的時(shí)候,用的算法都是書(shū)中的,只是結(jié)構(gòu)很負(fù)責(zé),我對(duì)第七章的算法比較熟悉,所以重要實(shí)現(xiàn)的是最小費(fèi)用、最短時(shí)間、以及最少中轉(zhuǎn)次數(shù)。最少時(shí)間和最少費(fèi)用用到的算法是迪杰斯特拉算法。最少中轉(zhuǎn)次數(shù)使用的是廣度優(yōu)先遍歷。剛開(kāi)始時(shí)我認(rèn)為只是函數(shù)的簡(jiǎn)樸整合,但是在實(shí)驗(yàn)過(guò)程中,有很多函數(shù)的傳遞參數(shù),在傳參的時(shí)候出現(xiàn)了很多錯(cuò)誤。在實(shí)現(xiàn)最少費(fèi)用的時(shí)候權(quán)值是費(fèi)用,但是在最少時(shí)間的時(shí)候權(quán)值是時(shí)間,題目的規(guī)定中時(shí)間是用兩個(gè)整形進(jìn)行存儲(chǔ)的,要用用兩點(diǎn)間的時(shí)間作為權(quán)值(需通過(guò)一些簡(jiǎn)樸的運(yùn)算,用到達(dá)的時(shí)間減去剛開(kāi)始的時(shí)間,但是時(shí)間不能簡(jiǎn)樸的相減,當(dāng)小時(shí)不夠減時(shí)和當(dāng)分鐘不夠減時(shí),應(yīng)當(dāng)進(jìn)行相關(guān)的轉(zhuǎn)化)。通過(guò)本次實(shí)驗(yàn),我對(duì)網(wǎng)(帶權(quán)圖)的操作有了更深刻的理解。也對(duì)數(shù)據(jù)結(jié)構(gòu)這門(mén)課在實(shí)際中的應(yīng)用有了深刻的體會(huì)。同時(shí),我也明白了要學(xué)好任何一門(mén)語(yǔ)言,基礎(chǔ)要打牢,只有在堅(jiān)實(shí)的基礎(chǔ)上,以后在應(yīng)用時(shí)才可以進(jìn)行變通。最后,感謝楊老師在這學(xué)期的指導(dǎo)。5.3呂竹青的總結(jié)該課程設(shè)計(jì)我重要負(fù)責(zé)數(shù)據(jù)結(jié)構(gòu)的構(gòu)建,飛機(jī)航班的添加、刪除,火車車次的添加、刪除。(1)、數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì):一方面拿到題目就考慮到,必須有存儲(chǔ)航班及車次信息的結(jié)構(gòu)體(structVehide),重要涉及航班或車次號(hào)、費(fèi)用、出發(fā)到達(dá)的時(shí)間。又考慮到每一個(gè)城市也許具有一個(gè)或多個(gè)航班,又創(chuàng)建了structinfolist里面涉及:與城市相鄰的城市之間的航班信息及與該城市相連接的航班數(shù)目。然后總的結(jié)點(diǎn)為structArcNode里面涉及結(jié)點(diǎn)的下標(biāo),一個(gè)結(jié)點(diǎn)指針,尚有一個(gè)infolist變量。最后是存儲(chǔ)城市的信息,structVNode里面涉及:城市的名稱,兩個(gè)結(jié)點(diǎn)指針(航班結(jié)點(diǎn),車次結(jié)點(diǎn))。緊接著創(chuàng)建交通系統(tǒng)圖structALGraph(以鄰接表為存儲(chǔ)結(jié)構(gòu)),里面涉及:結(jié)點(diǎn)數(shù)組,城市的個(gè)數(shù),航班的個(gè)數(shù),列車的個(gè)數(shù)。Structarc用于寫(xiě)入文檔。其他的尚有臨時(shí)建立的鄰接表的結(jié)點(diǎn)結(jié)構(gòu),鏈隊(duì)列結(jié)點(diǎn)結(jié)構(gòu),鏈隊(duì)列信息結(jié)構(gòu),structLinkQueue里面涉及:指向鏈對(duì)結(jié)點(diǎn)類型的兩個(gè)指針(尾指針,頭指針)。(2)、添加航班或車次:存儲(chǔ)結(jié)構(gòu)由同組人員完畢,鄰接表。輸入要加入的車次或航班的編號(hào),起始城市,目的城市,費(fèi)用及出發(fā)到達(dá)的時(shí)間,運(yùn)用廣度遍歷遍歷鄰接表,假如原先起始城市,目的城市無(wú)航班到達(dá)則直接插入到兩則的next位置即可,若有就插入到最后的一個(gè)鄰接的后面,last(通往該結(jié)點(diǎn)的航班的個(gè)數(shù))分別加1。(3)、刪除航班或車次:反復(fù)上面的輸入,以廣度優(yōu)先遍歷鄰接表,找到要?jiǎng)h除的航班或車次的下標(biāo)(即找到了起始城市和目的城市),找到起始城市的那個(gè)航班或列車鏈,遍歷到目的城市,從這個(gè)位置開(kāi)始,后邊的鏈結(jié)點(diǎn)向前移動(dòng)一位,被刪除的航班被覆蓋,釋放最后那各結(jié)點(diǎn)。通過(guò)兩周的努力,小組查閱資料,向楊老師征詢,終于把自己的系統(tǒng)完畢了,感觸最深的是小組協(xié)作,雖然我們各自都分了模塊,但是完畢的過(guò)程中我們都是在商議其實(shí)現(xiàn)的思想,其中又把數(shù)據(jù)結(jié)構(gòu)這門(mén)課程系統(tǒng)的復(fù)習(xí)了一下,把整個(gè)學(xué)期學(xué)習(xí)的知識(shí)匯總了。參考文獻(xiàn):[1]《數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版》嚴(yán)蔚敏、吳偉民,清華大學(xué)出版社,2023[2]《數(shù)據(jù)結(jié)構(gòu)課程實(shí)驗(yàn)》徐孝凱,清華大學(xué)出版社,2023[3]《數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)題典》李春葆,清華大學(xué)出版社,2023 附錄:程序源代碼intmain()//程序功能選擇界面{ ALGraphG;inti;printf("\t\t***********************************************\t\t"); printf("\n\n\n\n\n");printf("尊敬的用戶,你好!\n\n\n");printf("歡迎進(jìn)入全國(guó)交通征詢系統(tǒng).\n\n\n"); printf("在這里我們將為您提供最便捷,最優(yōu)惠的出行方案.\n\n\n"); printf("\n\n\n"); printf("\t\t***********************************************\t\t"); printf("\n請(qǐng)您按任意鍵進(jìn)入查詢系統(tǒng)!\n\n"); system("pause"); system("cls"); printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t\t\n"); printf("\t\t1、管理員登陸\t\t\n"); printf("\t\t2、用戶查詢\t\t\n"); printf("\t\t3、顯示交通系統(tǒng)\t\t\n"); printf("\t\t4、退出系統(tǒng)\t\t\n"); printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t\t\n"); printf("\t\t請(qǐng)輸入您要進(jìn)行的操作:"); scanf("%d",&i); getchar(); system("cls"); while(i!=4)//只要沒(méi)有退出選擇退出系統(tǒng)就可以一直執(zhí)行下去 {switch(i) {case1:Administer(&G);break;case2:UserDemand(G);break;case3:PrintGraph(&G);break; } printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t\t\n"); printf("\t\t1、管理員登陸\t\t\n"); printf("\t\t2、用戶查詢\t\t\n"); printf("\t\t3、顯示交通系統(tǒng)\t\t\n"); printf("\t\t4、退出系統(tǒng)\t\t\n"); printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t\t\n"); printf("\t\t請(qǐng)您對(duì)的輸入您要進(jìn)行的操作:"); scanf("%d",&i);getchar(); system("cls"); } return1;}voidAdminister(ALGraph*G)//管理員管理項(xiàng)目選擇界面{ inti;printf("\n\n\n"); printf("\t\t尊敬的管理員,請(qǐng)您選擇您要進(jìn)行的操作:\t\t\n\n");printf("\t\t***********************************************\t\t\n"); printf("\t\t1、初始化交通系統(tǒng);\t\t\n"); printf("\t\t2、城市信息編輯;\t\t\n"); printf("\t\t3、航班班次編輯;\t\t\n"); printf("\t\t4、列車車次編輯;\t\t\n"); printf("\t\t5、退出管理員登錄;\t\t\n"); printf("\t\t***********************************************\t\t\n"); printf("\t\t請(qǐng)您輸入您要進(jìn)行的操作:"); scanf("%d",&i);getchar(); system("cls"); while(i!=5) { switch(i) { case1:InitGraph(G);break;//初始化交通系統(tǒng)case2:CityEdit(G);break;//城市編輯case3:flightedit(G);break;//飛機(jī)航班編輯case4:trainedit(G);break;//列車車次編輯 } printf("請(qǐng)您按回車鍵繼續(xù):"); getchar();printf("\n\n\n");printf("\n\n\n");printf("\t\t***********************************************\t\t\n"); printf("\t\t請(qǐng)選擇操作:\t\t\n"); printf("\t\t1、初始化交通系統(tǒng);\t\t\n"); printf("\t\t2、城市信息編輯;\t\t\n"); printf("\t\t3、航班航班編輯;\t\t\n"); printf("\t\t4、列車車次編輯;\t\t\n"); printf("\t\t5、退出管理員登錄;\t\t\n"); printf("\t\t***********************************************\t\t\n"); printf("\t\t請(qǐng)您輸入您要進(jìn)行的操作:"); scanf("%d",&i);getchar(); system("cls"); }}voidInitGraph(ALGraph*G)//初始化交通系統(tǒng){ inti;system("cls");printf("\n\n\n"); printf("\n\n\n"); printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t\t\n"); printf("\t\t1、用鍵盤(pán)輸入\t\t\n\n"); printf("\t\t2、用文獻(xiàn)導(dǎo)入\t\t\n"); printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t\t\n"); printf("\t\t請(qǐng)您輸入您要進(jìn)行的操作:");scanf("%d",&i);getchar();system("cls");switch(i) { case1: CreateCityFile();CreatePlaneFile();CreateTrainFile();CreateGraph(G);break;case2:CreateGraph(G);break; }}voidCreateCityFile()//創(chuàng)建城市名稱文檔{ inti=0;intj;charflag='y';FILE*fp;//定義一個(gè)指向文獻(xiàn)型數(shù)據(jù)的指針變量printf("\n請(qǐng)輸入城市名稱的信息:\n");while(flag=='y'||flag=='Y') { printf("城市名稱:");gets(city[i]);//輸入一個(gè)城市名i++;printf("繼續(xù)輸入?(Y/N)");scanf("%c",&flag);getchar(); }printf("\n");if((fp=fopen("city.txt","wb"))==NULL) { printf("無(wú)法打開(kāi)文獻(xiàn)!\n");return; }for(j=0;j<i;j++)fprintf(fp,"%10s",city[j]);//把用鍵盤(pán)輸入的城市名輸出到fp所指向的文獻(xiàn)中fclose(fp);//關(guān)閉文獻(xiàn)}voidCreatePlaneFile()//創(chuàng)建飛機(jī)航班文檔{ inti,count,code,bt[2],at[2];//code航班編號(hào),bt出發(fā)時(shí)間,at到達(dá)時(shí)間floatmoney;//費(fèi)用charvt[10],vh[10],flag;//vt起始城市,vh目的城市FILE*fp;flag='y';count=0;while(flag=='Y'||flag=='y')/*flag為標(biāo)志位,初值為1*/ { printf("請(qǐng)輸入飛機(jī)航班的信息:\n");//提醒"輸入航班信息"printf("飛機(jī)航班編號(hào):");//輸入航班codescanf("%d",&code);getchar();printf("起始城市:");//輸入航班的出發(fā)城市vtgets(vt);printf("目的城市:");//輸入航班的到達(dá)城市vhgets(vh);printf("航班費(fèi)用:");//輸入機(jī)票價(jià)格moneyscanf("%f",&money);getchar();printf("起飛時(shí)間:");//輸入航班的出發(fā)時(shí)間btscanf("%d:%d",&bt[0],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60) { printf("\n時(shí)間輸入有誤,請(qǐng)重新輸入\n");scanf("%d:%d",&bt[0],&bt[1]);getchar(); }printf("到達(dá)時(shí)間:");//輸入航班的到達(dá)時(shí)間atscanf("%d:%d",&at[0],&at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60) { printf("\n時(shí)間輸入有誤,請(qǐng)重新輸入\n");scanf("%d:%d",&at[0],&at[1]);getchar(); }a[count].co=code;//a為程序頭部定義的結(jié)構(gòu)體strcpy(a[count].vt,vt);strcpy(a[count].vh,vh);a[count].bt[0]=bt[0];a[count].bt[1]=bt[1];a[count].at[0]=at[0];a[count].at[1]=at[1];a[count].mo=money;count++;//計(jì)數(shù)值count+1printf("繼續(xù)輸入?(Y/N)");//提醒"是否要繼續(xù)輸入航班信息:"scanf("%c",&flag);getchar();printf("\n"); }if((fp=fopen("plane.txt","wb"))==NULL)//航班文獻(xiàn)不能以讀寫(xiě)形式打開(kāi)printf("\n無(wú)法打開(kāi)文獻(xiàn)!\n");//提醒"無(wú)法打開(kāi)文獻(xiàn)"fprintf(fp,"%d",count);//將計(jì)數(shù)值count寫(xiě)入航班車文獻(xiàn)for(i=0;i<count;i++)if(fwrite(&a[i],sizeof(structarc),1,fp)!=1)//無(wú)法將a[i]寫(xiě)入航班文獻(xiàn)printf("\n文獻(xiàn)寫(xiě)入錯(cuò)誤!\n");//提醒"文獻(xiàn)無(wú)法寫(xiě)入"fclose(fp);//關(guān)閉航班文獻(xiàn)}voidCreateTrainFile()//創(chuàng)建列車車次文檔{ inti,count=0,code,bt[2],at[2];floatmoney;charvt[10],vh[10],flag;FILE*fp;flag='y';while(flag=='y'||flag=='Y') { printf("請(qǐng)輸入列車車次的信息:\n");printf("列車車次編號(hào):");scanf("%d",&code);getchar();printf("起始城市:");gets(vt);printf("目的城市:");gets(vh);printf("車次費(fèi)用:");scanf("%f",&money);getchar();printf("發(fā)車時(shí)間:");scanf("%d:%d",&bt[0],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60) { printf("\n時(shí)間輸入有誤,請(qǐng)重新輸入\n");scanf("%d:%d",&bt[0],&bt[1]);getchar(); }printf("到達(dá)時(shí)間:");scanf("%d:%d",&at[0],&at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60) { printf("\n時(shí)間輸入有誤,請(qǐng)重新輸入\n");scanf("%d:%d",&at[0],&at[1]);getchar(); }a[count].co=code;strcpy(a[count].vt,vt);strcpy(a[count].vh,vh); a[count].bt[0]=bt[0]; a[count].bt[1]=bt[1]; a[count].at[0]=at[0]; a[count].at[1]=at[1]; a[count].mo=money; count++; printf("繼續(xù)輸入?(Y/N)"); scanf("%c",&flag); getchar(); printf("\n"); } if((fp=fopen("train.txt","wb"))==NULL) printf("\n無(wú)法打開(kāi)文獻(xiàn)!\n"); fprintf(fp,"%d",count); for(i=0;i<count;i++) if(fwrite(&a[i],sizeof(structarc),1,fp)!=1) printf("\n文獻(xiàn)寫(xiě)入錯(cuò)誤!\n");fclose(fp);}intLocateVertex(ALGraph*G,char*v)//找出城市名在圖中相應(yīng)結(jié)點(diǎn)位置{intj,k;j=-1;for(k=0;k<G->vexnum;k++)if(strcmp(G->vertices[k].cityname,v)==0)//第k個(gè)結(jié)點(diǎn)中的城市名與傳過(guò)來(lái)的城市名相同{j=k;/*記錄位置*/break;}return(j);}voidCreateGraph(ALGraph*G)//用city,plan,train三個(gè)文檔創(chuàng)建城市交通系統(tǒng){ inti,j,k;intarc_num;intcount1,count2;intm,t;ArcNode*p,*q;FILE*fp;i=0;if((fp=fopen("city.txt","rb"))==NULL)//打開(kāi)城市文獻(xiàn),文獻(xiàn)指針?lè)祷刂禐榭?{ printf("\n無(wú)法打開(kāi)文獻(xiàn)!\n");return; }while(!feof(fp))//文獻(xiàn)不為空 { fscanf(fp,"%10s",city[i]);//從磁盤(pán)文獻(xiàn)讀取一個(gè)字符串格式的值賦給city[i]i++; }fclose(fp);//關(guān)閉文獻(xiàn)j=0;while(j<i) { strcpy(G->vertices[j].cityname,city[j]);//將city[i]中的內(nèi)容復(fù)制到圖的結(jié)構(gòu)體的結(jié)點(diǎn)數(shù)組中;G->vertices[j].planefirstarc=NULL;//圖的結(jié)構(gòu)體其他項(xiàng)賦初值;G->vertices[j].trainfirstarc=NULL;j++; }G->vexnum=i;if((fp=fopen("plane.txt","rb"))==NULL)printf("\n無(wú)法打開(kāi)文獻(xiàn)!\n");k=0;fscanf(fp,"%d",&count1);//打開(kāi)航班信息文獻(xiàn)"plane.txt"while(k<count1) { if(fread(&a[k],sizeof(structarc),1,fp)!=1)printf("\n文獻(xiàn)讀入錯(cuò)誤!\n");k++; }fclose(fp);//關(guān)閉文獻(xiàn)k=0;//a的計(jì)數(shù)變量k=0arc_num=0;//弧的計(jì)數(shù)變量arc_num=0while(k<count1) { i=LocateVertex(G,a[k].vt);//調(diào)用函數(shù)LocateVertex(G,a[k].vt)得到起始結(jié)點(diǎn)的位置ij=LocateVertex(G,a[k].vh);//調(diào)用函數(shù)LocateVertex(G,a[k].vh)得到起始結(jié)點(diǎn)的位置jq=G->vertices[i].planefirstarc;m=0;while(q!=NULL) { if(q->adjvex==j)//弧q中的鄰接頂點(diǎn)與j相等 { t=q->info.last+1;//將數(shù)組a[i]中的內(nèi)容都復(fù)制到弧q中q->info.stata[t].number=a[k].co;q->info.stata[t].expenditure=a[k].mo;q->info.stata[t].begintime[0]=a[k].bt[0];q->info.stata[t].begintime[1]=a[k].bt[1];q->info.stata[t].arrivetime[0]=a[k].at[0];q->info.stata[t].arrivetime[1]=a[k].at[1];q->info.last=t;m=1;break; }q=q->nextarc; }if(m==0) { p=(ArcNode*)malloc(sizeof(ArcNode));//開(kāi)辟一個(gè)弧結(jié)點(diǎn)p->adjvex=j;//將數(shù)組a[i]中的內(nèi)容都復(fù)制到新的弧結(jié)點(diǎn)中p->info.stata[0].number=a[k].co;p->info.stata[0].expenditure=a[k].mo;p->info.stata[0].begintime[0]=a[k].bt[0];p->info.stata[0].begintime[1]=a[k].bt[1];p->info.stata[0].arrivetime[0]=a[k].at[0];p->info.stata[0].arrivetime[1]=a[k].at[1];p->info.last=0;p->nextarc=G->vertices[i].planefirstarc;G->vertices[i].planefirstarc=p;//將弧結(jié)點(diǎn)連接到適當(dāng)?shù)奈恢弥腥rc_num++; }k++; }G->planearcnum=arc_num;if((fp=fopen("train.txt","rb"))==NULL) { printf("\n無(wú)法打開(kāi)文獻(xiàn)!\n");return; }k=0;fscanf(fp,"%d",&count2);//打開(kāi)列車信息文獻(xiàn)"plane.txt"while(k<count2) { if(fread(&a[k],sizeof(structarc),1,fp)!=1)printf("\n文獻(xiàn)讀入錯(cuò)誤!\n");k++; }fclose(fp);//關(guān)閉文獻(xiàn)k=0;//a的計(jì)數(shù)變量k=0;arc_num=0;//弧的計(jì)數(shù)變量arc_num=0;while(k<count2) { i=LocateVertex(G,a[k].vt);//調(diào)用函數(shù)LocateVertex(G,a[k].vt)得到起始結(jié)點(diǎn)的位置ij=LocateVertex(G,a[k].vh);//調(diào)用函數(shù)LocateVertex(G,a[k].vh)得到起始結(jié)點(diǎn)的位置jq=G->vertices[i].trainfirstarc;m=0;while(q!=NULL) { if(q->adjvex==j)//弧q中的鄰接頂點(diǎn)與j相等 { t=q->info.last+1;//將數(shù)組a[i]中的內(nèi)容都復(fù)制到弧q中q->info.stata[t].number=a[k].co;q->info.stata[t].expenditure=a[k].mo;q->info.stata[t].begintime[0]=a[k].bt[0];q->info.stata[t].begintime[1]=a[k].bt[1];q->info.stata[t].arrivetime[0]=a[k].at[0];q->info.stata[t].arrivetime[1]=a[k].at[1];q->info.last=t;m=1;break; }q=q->nextarc; }if(m==0) { p=(ArcNode*)malloc(sizeof(ArcNode));//開(kāi)辟一個(gè)弧結(jié)點(diǎn)p->adjvex=j;//將數(shù)組a[i]中的內(nèi)容都復(fù)制到新的弧結(jié)點(diǎn)中p->info.stata[0].number=a[k].co;p->info.stata[0].expenditure=a[k].mo;p->info.stata[0].begintime[0]=a[k].bt[0];p->info.stata[0].begintime[1]=a[k].bt[1];p->info.stata[0].arrivetime[0]=a[k].at[0];p->info.stata[0].arrivetime[1]=a[k].at[1];p->info.last=0;p->nextarc=G->vertices[i].trainfirstarc;G->vertices[i].trainfirstarc=p;//將弧結(jié)點(diǎn)連接到適當(dāng)?shù)奈恢弥腥? arc_num++; }k++; }G->trainarcnum=arc_num;}intsave(ALGraph*G)//保存城市交通系統(tǒng)到相應(yīng)的文檔{inti,j,k,t;ArcNode*q;FILE*fp;j=0;while(j<G->vexnum){strcpy(city[j],G->vertices[j].cityname);j++;}i=0;if((fp=fopen("city.txt","wb"))==NULL)printf("\n錯(cuò)誤,無(wú)法打開(kāi)文獻(xiàn)!\n");while(i<G->vexnum){fprintf(fp,"%10s",city[i]);i++;}fclose(fp);k=0;for(i=0;i<G->vexnum;i++){q=G->vertices[i].planefirstarc;while(q!=NULL){for(t=0;t<=q->info.last;t++){strcpy(a[k].vt,G->vertices[i].cityname);strcpy(a[k].vh,G->vertices[q->adjvex].cityname);a[k].co=q->info.stata[t].number;a[k].mo=q->info.stata[t].expenditure;a[k].bt[0]=q->info.stata[t].begintime[0];a[k].bt[1]=q->info.stata[t].begintime[1];a[k].at[0]=q->info.stata[t].arrivetime[0];a[k].at[1]=q->info.stata[t].arrivetime[1];k++;}q=q->nextarc;}}if((fp=fopen("plane.txt","wb"))==NULL){printf("\n無(wú)法打開(kāi)文獻(xiàn)!\n");return0;}i=0;fprintf(fp,"%d",k);while(i<k){if(fwrite(&a[i],sizeof(structarc),1,fp)!=1)printf("\n文獻(xiàn)寫(xiě)入錯(cuò)誤!\n");i++;}fclose(fp);k=0;for(i=0;i<G->vexnum;i++){q=G->vertices[i].trainfirstarc;while(q!=NULL){for(t=0;t<=q->info.last;t++){strcpy(a[k].vt,G->vertices[i].cityname);strcpy(a[k].vh,G->vertices[q->adjvex].cityname);a[k].co=q->info.stata[t].number;a[k].mo=q->info.stata[t].expenditure;a[k].bt[0]=q->info.stata[t].begintime[0];a[k].bt[1]=q->info.stata[t].begintime[1];a[k].at[0]=q->info.stata[t].arrivetime[0];a[k].at[1]=q->info.stata[t].arrivetime[1];k++;}q=q->nextarc;}}if((fp=fopen("train.txt","wb"))==NULL){printf("\n無(wú)法打開(kāi)文獻(xiàn)!\n");return0;}i=0;fprintf(fp,"%d",k);while(i<k){if(fwrite(&a[i],sizeof(structarc),1,fp)!=1)printf("\n文獻(xiàn)寫(xiě)入錯(cuò)誤!\n");i++;}fclose(fp);return1;}voidCityEdit(ALGraph*G)//城市編輯項(xiàng)目選擇界面{inti;system("cls");printf("\n請(qǐng)選擇城市編輯項(xiàng)目:\n");printf("1.增長(zhǎng)城市\(zhòng)n2.刪除城市\(zhòng)n");printf("選擇:");scanf("%d",&i);getchar();system("cls");if(i==1)EnterVertex(G);if(i==2)DeleteVertex(G);}voidEnterVertex(ALGraph*G)//增長(zhǎng)城市{charv[10],c;inti;system("cls");printf("\n請(qǐng)輸入新增城市的名稱:");gets(v);i=LocateVertex(G,v);if(i>=0&&i<G->vexnum){printf("\n錯(cuò)誤!此城市已存在\n");return;}else{printf("\n確認(rèn)?(Y/N)");c=getchar();//getchar();if(c=='Y'||c=='y'){i=G->vexnum;strcpy(G->vertices[i].cityname,v);G->vertices[i].planefirstarc=NULL;G->vertices[i].trainfirstarc=NULL;G->vexnum=i+1;save(G);}elsereturn;}}voidDeleteVertex(ALGraph*G)//刪除城市{inti,j,k,n;charv[10],c;ArcNode*p,*q,*m;system("cls");printf("\n請(qǐng)輸入刪除的城市:");//提醒"輸入刪除城市名"gets(v);printf("\n確認(rèn)?(Y/N)");//提醒"是否擬定要?jiǎng)h除(Y/N)"c=getchar();getchar();if(c=='Y'||c=='y'){n=0;//0是記數(shù)標(biāo)志,控制循環(huán)次數(shù)while(n<G->vexnum&&strcmp(G->vertices[n].cityname,v)!=0)//n<圖G表頭接點(diǎn)總個(gè)數(shù)&&圖G的存儲(chǔ)城市名與v不同,G表頭結(jié)點(diǎn)總個(gè)數(shù)比實(shí)際大1n++;//記數(shù)值n+1if(n==G->vexnum)//n==圖G表頭結(jié)點(diǎn)總個(gè)數(shù)printf("\n錯(cuò)誤!無(wú)法找到此城市!\n");//提醒"無(wú)法找到此城市"else{i=LocateVertex(G,v);//運(yùn)用G函數(shù)找到此城市名所處在G中位置p=G->vertices[i].planefirstarc;while(p!=NULL){q=p;p=p->nextarc;free(q);//刪除從此結(jié)點(diǎn)出發(fā)的所有航班弧}p=G->vertices[i].trainfirstarc;while(p!=NULL){q=p;p=p->nextarc;free(q);//刪除從此結(jié)點(diǎn)出發(fā)的所有列車弧}for(j=i;j<G->vexnum-1;j++){strcpy(G->vertices[j].cityname,G->vertices[j+1].cityname);//將G第j個(gè)結(jié)點(diǎn)的信息依前移1位G->vertices[j].planefirstarc=G->vertices[j+1].planefirstarc;G->vertices[j].trainfirstarc=G->vertices[j+1].trainfirstarc;}G->vertices[j].planefirstarc=NULL;//將G第j個(gè)結(jié)點(diǎn)的信息置空G->vertices[j].trainfirstarc=NULL;for(k=0;k<G->vexnum-1;k++)//以下是刪除所有指向此結(jié)點(diǎn)的航班弧{p=G->vertices[k].planefirstarc;while(p!=NULL){if(p->adjvex>i){p->adjvex=p->adjvex-1;q=p;p=p->nextarc;//p指向下一條飛機(jī)弧}elseif(p->adjvex==i)//該弧指向的頂點(diǎn)位置(p->adjvex)==i{if(p==G->vertices[k].planefirstarc)//p指向圖G中k結(jié)點(diǎn)的第一條飛機(jī)弧{m=p;G->vertices[k].planefirstarc=p->nextarc;//將圖G中k結(jié)點(diǎn)的第二條飛機(jī)弧改為第一弧p=p->nextarc;//p指向下一條飛機(jī)弧free(m);//釋放(m)}else{q->nextarc=p->nextarc;//將p的下一條弧賦給q的下一條弧m=p;p=p->nextarc;//p指向下一條飛機(jī)弧free(q);//釋放(q)}}else{q=p;p=p->nextarc;//p指向下一條飛機(jī)弧}}}for(k=0;k<G->vexnum-1;k++)///*以下是刪除所有指向此結(jié)點(diǎn)的列車弧*/{p=G->vertices[k].trainfirstarc;//p指向圖G中k結(jié)點(diǎn)的第一條列車弧while(p!=NULL){if(p->adjvex>i)//該弧指向的頂點(diǎn)位置(p->adjvex)>i{p->adjvex=p->adjvex-1;//將該弧指向頂點(diǎn)位置-1q=p;p=p->nextarc;//p指向下一條列車弧}elseif(p->adjvex==i)//該弧指向的頂點(diǎn)位置(p->adjvex)==i{if(p==G->vertices[k].trainfirstarc)//p指向圖G中k結(jié)點(diǎn)的第一條列車{m=p;G->vertices[k].trainfirstarc=p->nextarc;//將圖G中k結(jié)點(diǎn)的第二條列車弧改為第一弧p=p->nextarc;free(m);}else{q->nextarc=p->nextarc;m=p;p=p->nextarc;free(q);}}else{q=p;p=p->nextarc;}}}}G->vexnum--;save(G);}elsereturn;}voidflightedit(ALGraph*G)//飛機(jī)航班編輯項(xiàng)目選擇界面{inti;printf("\n請(qǐng)選擇飛機(jī)航班編輯項(xiàng)目:\n");printf("1.新增航班\n2.刪除航班\n");printf("選擇:");scanf("%d",&i);getchar();if(i==1)EnterplaneArc(G);if(i==2)DeleteplaneArc(G);}voidtrainedit(ALGraph*G)//列車車次編輯項(xiàng)目選擇界面{inti;printf("\n請(qǐng)選擇列車車次編輯項(xiàng)目:\n");printf("1.新增車次\n2.刪除車次\n");printf("選擇:");scanf("%d",&i);getchar();if(i==1)EntertrainArc(G);if(i==2)DeletetrainArc(G);}voidEnterplaneArc(ALGraph*G)//增長(zhǎng)飛機(jī)航班{inti,j,bt[2],at[2];intcode;floatmoney;intm,t;charvt[10],vh[10],c;ArcNode*p,*q;system("cls");printf("\n請(qǐng)輸入新增飛機(jī)航班的信息:\n");printf("飛機(jī)航班編號(hào):");scanf("%d",&code);getchar();printf("起始城市:");gets(vt);printf("目的城市:");gets(vh);printf("航班費(fèi)用:");scanf("%f",&money);getchar();printf("起飛時(shí)間:");scanf("%d:%d",&bt[0],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60){printf("\n時(shí)間輸入有誤,請(qǐng)重新輸入\n");scanf("%d:%d",&bt[0],&bt[1]);getchar();}printf("到達(dá)時(shí)間:");scanf("%d:%d",&at[0],&at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60){printf("\n時(shí)間輸入有誤,請(qǐng)重新輸入\n");scanf("%d:%d",&at[0],&at[1]);getchar();}printf("\n確認(rèn)?(Y/N)");c=getchar();getchar();if(c=='Y'||c=='y'){i=LocateVertex(G,vt);j=LocateVertex(G,vh);if(i==-1){printf("\n錯(cuò)誤!無(wú)法找到起始城市\(zhòng)n");return;}if(j==-1){printf("\n錯(cuò)誤!無(wú)法找到到達(dá)城市\(zhòng)n");return;}q=G->vertices[i].planefirstarc;m=0;while(q!=NULL){if(q->adjvex==j){t=q->info.last+1;q->info.stata[t].number=code;q->info.stata[t].expenditure=money;q->info.stata[t].begintime[0]=bt[0];q->info.stata[t].begintime[1]=bt[1];q->info.stata[t].arrivetime[0]=at[0];q->info.stata[t].arrivetime[1]=at[1];q->info.last=t;m=1;break;}q=q->nextarc;}if(m==0){p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info.stata[0].number=code;p->info.stata[0].expenditure=money;p->info.stata[0].begintime[0]=bt[0];p->info.stata[0].begintime[1]=bt[1];p->info.stata[0].arrivetime[0]=at[0];p->info.stata[0].arrivetime[1]=at[1];p->info.last=0;p->nextarc=G->vertices[i].planefirstarc;G->vertices[i].planefirstarc=p;G->planearcnum++;}save(G);}elsereturn;}voidEntertrainArc(ALGraph*G)//增長(zhǎng)列車車次{inti,j,bt[2],at[2];intcode;floatmoney;intm,t;charvt[10],vh[10],c;ArcNode*p,*q;system("cls");printf("\n請(qǐng)輸入新增列車車次的信息:\n");printf("列車車次編號(hào):");scanf("%d",&code);getchar();printf("起始城市:");gets(vt);printf("目的城市:");gets(vh);printf("車次費(fèi)用:");scanf("%f",&money);getchar();printf("發(fā)車時(shí)間:");scanf("%d:%d",&bt[0],&bt[

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論