版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、分類號(hào) 編號(hào) 華北水利水電學(xué)院 North China Institute of Water Conservancy and Hydroelectric Power 課 程 設(shè) 計(jì)題目:全國交通資訊系統(tǒng) 院 系 信息工程學(xué)院 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè) 姓 名 指 導(dǎo) 教 師 楊彬 2013年6月28日 目錄1.需求分析1問題描述11.1基本要求22概要設(shè)計(jì)32.1 數(shù)據(jù)結(jié)構(gòu)32.2 程序模塊53.詳細(xì)設(shè)計(jì)63.1用到的各種函數(shù)63.2函數(shù)調(diào)用關(guān)系圖83.3測(cè)試與分析84.用戶說明書135.總結(jié)165.1李明月的總結(jié)165.2劉璐璐的總結(jié)175.3呂竹青的總結(jié)18參考文獻(xiàn):19附錄:程序源代
2、碼191.需求分析 問題描述設(shè)計(jì)、模擬一個(gè)全國城市間的交通咨詢程序,為旅客提供三種最優(yōu)咨詢方案:(1)時(shí)間最短;(2)費(fèi)用最小;(3)中轉(zhuǎn)次數(shù)最少。 1.1基本要求1.1.1輸入輸出的形式和輸入值的范圍 在程序中輸入城市名稱時(shí),需輸入10個(gè)字母以內(nèi)的字母串;輸入列車或飛機(jī)編號(hào)時(shí)需輸入一個(gè)整型數(shù)據(jù);輸入列車或飛機(jī)的費(fèi)用時(shí)需輸入一個(gè)實(shí)型數(shù)據(jù);輸入列車或飛機(jī)開始時(shí)間和到達(dá)時(shí)間時(shí)均需輸入兩個(gè)整型數(shù)據(jù)(以hh:mm的形式);在選擇功能時(shí),應(yīng)輸入與所選功能對(duì)應(yīng)的一個(gè)整型數(shù)據(jù)。1.1.2 輸出形式程序的輸出信息主要是:最快需要多少時(shí)間才能到達(dá),或最少需要多少旅費(fèi)才能到達(dá),或最少需要多少次中轉(zhuǎn)到達(dá),并詳細(xì)說明
3、依次于何時(shí)乘坐哪一趟列車或哪一次班機(jī)到何地。 1.1.3程序所能達(dá)到的功能程序的功能包括:提供對(duì)城市信息的編輯,提供列車時(shí)刻表和飛機(jī)航班表的編輯,提供三種最優(yōu)決策:最快到達(dá)、最省錢到達(dá)、最少中轉(zhuǎn)次數(shù)到達(dá),顯示編輯的全國交通系統(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)#define MAX_VERTEX_NUM 18/城市節(jié)點(diǎn)數(shù)#de
4、fine MAX_ARC_SIZE 100#define MAX_ROUTE_NUM 5/路線數(shù)#define False 0#define True 1#define INFINITY 10000struct Vehide int number;/航班號(hào),火車號(hào) float expenditure;/費(fèi)用 int begintime2;/出發(fā)時(shí)間 int arrivetime2;/到達(dá)時(shí)間;/航班、列車信息節(jié)點(diǎn) struct infolist Vehide stataMAX_ROUTE_NUM;/一個(gè)出發(fā)地到達(dá)目的地所對(duì)應(yīng)的航班數(shù)或列車車次數(shù) int last;/順序表所對(duì)應(yīng)的下標(biāo),從0開始
5、;/順序表表示struct ArcNodeint adjvex;/節(jié)點(diǎn)下標(biāo) ArcNode *nextarc; /節(jié)點(diǎn)的下一個(gè)指針域 infolist info;/節(jié)點(diǎn)的數(shù)據(jù)域;/鄰接表中各個(gè)節(jié)點(diǎn)信息typedef struct VNode char cityname10;/城市名 ArcNode *planefirstarc,*trainfirstarc;/航班鏈、列車鏈 VNode,AdjListMAX_VERTEX_NUM;struct ALGraphAdjList vertices; int vexnum,planearcnum,trainarcnum;/城市數(shù)、航班數(shù)、列車數(shù);str
6、uct Nodeint adjvex; int route; Node *next;/臨時(shí)建立的一個(gè)鄰接表,用來求最少中轉(zhuǎn)次數(shù)和最少費(fèi)用struct QNodeint adjvex; struct QNode *next;/鏈隊(duì)節(jié)點(diǎn)信息struct LinkQueueQNode *front; QNode *rear;/鏈隊(duì)信息typedef struct TimeNodeint adjvex; int route; int begintime2; int arrivetime2; struct TimeNode *childMAX_ROUTE_NUM;TimeNode,*TimeTree;s
7、truct arcint co; char vt10;/出發(fā)地名字 char vh10;/目的地名字 int bt2;/出發(fā)時(shí)間 int at2;/到達(dá)時(shí)間 float mo;/費(fèi)用aMAX_ARC_SIZE;char cityMAX_VERTEX_NUM10;int TTime2;int time2;int time12;int time22;int cMAX_VERTEX_NUM;int dMAX_VERTEX_NUM;2.2 程序模塊主要包括管理員編輯模塊和用戶查詢模塊以及顯示全國交通信息模塊。 2.2.1各模塊之間的調(diào)用關(guān)系以及算法設(shè)計(jì)3.詳細(xì)設(shè)計(jì)3.1用到的各種函數(shù)void Admi
8、nister(ALGraph *G); /void CityEdit(ALGraph *G); /城市編輯void CreateCityFile();void CreateGraph(ALGraph *G);void CreatePlaneFile();void CreateTrainFile();int DeleteplaneArc(ALGraph *G);void DeleteQueue(LinkQueue *Q,int *x);int DeletetrainArc(ALGraph *G);void DeleteVertex(ALGraph *G);void DemandDispose(i
9、nt n,ALGraph G);void EnterplaneArc(ALGraph *G);void EnterQueue(LinkQueue *Q,int x);void EntertrainArc(ALGraph *G);void EnterVertex(ALGraph *G);void ExpenditureDispose(int k,infolist (*arcs)MAX_VERTEX_NUM,ALGraph G,int v0,int v1,float *M,int *final);void flightedit(ALGraph *G);void InitGraph(ALGraph
10、*G);void InitQueue(LinkQueue *Q);int IsEmpty(LinkQueue *Q);int LocateVertex(ALGraph *G,char *v);void MinExpenditure(infolist arcs,float *expenditure,int *route);void PrintGraph(ALGraph *G);int save(ALGraph *G);void trainedit(ALGraph *G);void TransferDispose(int k,infolist (*arcs)MAX_VERTEX_NUM,ALGra
11、ph G,int v0,int v1);void CopyTimeTree(TimeTree p,TimeTree q);void DestoryTimeTree(TimeTree p);void MinTime(infolist arcs,int *time,int *route);void VisitTimeTree(TimeTree p);void TimeDispose(int k,infolist (*arcs)MAX_VERTEX_NUM,ALGraph G,int v0,int v1,int (*T)2,int *final);void TimeTreeDispose(Node
12、*head,infolist (*arcs)MAX_VERTEX_NUM);void trainedit(ALGraph *G);void CreateTimeTree(TimeTree p,int i,int j,LinkQueue *Q,infolist (*arcs)MAX_VERTEX_NUM);void UserDemand(ALGraph G);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.查詢最少
13、的中轉(zhuǎn)次數(shù)3.3.2測(cè)試分析1.1.1 考慮到道路網(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)。1.1.2 本程序在求最短路徑時(shí)使用了迪杰斯特拉算法,主要考慮在本程序的初級(jí)階段,并不需要大量的查詢,更多會(huì)是圖信息的添加和修改,重在算法的理解和掌握,因此采用了算法復(fù)雜度相對(duì)較低的迪杰斯特拉算法。當(dāng)然,從性能上來說,當(dāng)交通圖基本穩(wěn)定,而且城市信息基本完善的時(shí)候,使用佛洛伊德把所有的最短路徑信息存儲(chǔ)起來可能會(huì)更方便一點(diǎn),后續(xù)的查詢的時(shí)間
14、復(fù)雜度也會(huì)相對(duì)降低。由此可見,在選用算法時(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:4
15、517: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:3978元82元82元78元41北京鄭州上海鄭州鄭州上海鄭州北京7:1115:2000:3509:4015:0800:1309:2817:3790元100元100元90元59上海廣州廣州上海08:2003:3903:1622:53182元134蘭州北京北京
16、蘭州03:5219:2418:5610:28162元323廣州昆明昆明廣州06:1816:3116:1402:27102元873武漢昆明昆明武漢07:1321:4221:1711:46134元116武漢長(zhǎng)沙長(zhǎng)沙武漢9:3618:5418:3203:4898元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.用戶說明書1.2 本程序運(yùn)行在Windows系統(tǒng)
17、下,執(zhí)行文件為:全國交通資訊系統(tǒng).exe;1.3 雙擊運(yùn)行程序后會(huì)顯示控制臺(tái)窗口,如圖所示:1.4 輸入操作命令“1”,進(jìn)入管理員操作界面,輸入1-5的操作命令可以執(zhí)行相應(yīng)的操作,如圖所示:1.5 輸入“2”操作命令則進(jìn)入用戶查詢窗口,如圖所示:1.6 輸入“3”命令則顯示整個(gè)交通網(wǎng)絡(luò).5.總結(jié)5.1李明月的總結(jié)在這次的課程設(shè)計(jì)中,我們抽中了這個(gè)全國交通咨詢系統(tǒng),剛看完題目真的感覺無從下手,最后經(jīng)過我們的討論以及需求分析,我們這個(gè)系統(tǒng)所要用的結(jié)構(gòu)主要是圖,我被分到的模塊主要是對(duì)整個(gè)這個(gè)交通系統(tǒng)的初始化,以及對(duì)城市信息的編輯,也就是對(duì)城市的添加和刪除,還有對(duì)整個(gè)系統(tǒng)的界面的操作。雖然看似簡(jiǎn)單,但
18、是對(duì)于我來說實(shí)際上很困難,因?yàn)槲覀冞@個(gè)要存儲(chǔ)的信息比較復(fù)雜,所以不能單純的每次都要進(jìn)行由鍵盤進(jìn)行輸入,進(jìn)行初始化,那么這就勢(shì)必要用到文件操作。所以通過這次的時(shí)間讓我對(duì)于文件的操作有了很大的提高。并且城市的信息的編輯也不是那么的簡(jiǎn)單,當(dāng)然添加還相對(duì)簡(jiǎn)單一點(diǎn),但是在做刪除的時(shí)候真的很困難,要?jiǎng)h除這個(gè)城市到別的地方的弧,還要?jiǎng)h除別的城市到這個(gè)城市的航班鏈以及列車鏈。 在真的下手去做的時(shí)候,我真的遇到了好多問題。首先就是在用文件對(duì)系統(tǒng)進(jìn)行初始化的時(shí)候,一開始選錯(cuò)了函數(shù),我選用的是fprintf進(jìn)行由電腦輸入到文件,但是在進(jìn)行對(duì)航班和列車的信息添加的時(shí)候就沒那么方便了,因?yàn)檫@個(gè)函數(shù)只能對(duì)簡(jiǎn)單的類型進(jìn)行操
19、作,于是我改成了fwrite這個(gè)函數(shù),經(jīng)過無數(shù)次的嘗試,以及上網(wǎng)搜集資料,終于可以成功的把我從鍵盤輸入的信息傳入到文件中了。然后開始嘗試將自己存入到文件中的數(shù)據(jù)對(duì)建立的圖的結(jié)構(gòu)進(jì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í)候,一開始認(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è)城市到其他的地方的航班和列車信息刪除了,
20、但是并沒有將別的城市到這個(gè)城市的一些航班,列車進(jìn)行刪除,怎么做都做不對(duì),呂竹青和我做的功能想類似,經(jīng)過我們兩個(gè)的討論以及搜集資料,最后功夫不負(fù)有心人,我們終于成功的把刪除這一塊給做了出來。當(dāng)然在最后的調(diào)試中我們也遇到了各種各樣的問題,因?yàn)楦魅硕际欠帜K寫的所以調(diào)試的時(shí)候有很大的困難,但是經(jīng)過我們?nèi)齻€(gè)人不懈的努力,終于把各自寫的模塊像融合,這個(gè)系統(tǒng)成功的調(diào)試出來了,在這兩周的課程設(shè)計(jì)中,我相信我們都收益良多。5.2劉璐璐的總結(jié) 開始抽到我們做的題,題目是全國交通咨詢系統(tǒng),主要實(shí)現(xiàn)城市以及航班的編輯以及最短時(shí)間,最少費(fèi)用,最少中轉(zhuǎn)次數(shù)。我是該小組的負(fù)責(zé)人,在抽到題目的前兩天,我們做了詳細(xì)的需求分析
21、與分工,我們做的題目中主要用到的是第七章圖的知識(shí),實(shí)現(xiàn)各種功能的時(shí)候,用的算法都是書中的,只是結(jié)構(gòu)很負(fù)責(zé),我對(duì)第七章的算法比較熟悉,所以主要實(shí)現(xiàn)的是最小費(fèi)用、最短時(shí)間、以及最少中轉(zhuǎn)次數(shù)。最少時(shí)間和最少費(fèi)用用到的算法是迪杰斯特拉算法。最少中轉(zhuǎn)次數(shù)使用的是廣度優(yōu)先遍歷。剛開始時(shí)我以為只是函數(shù)的簡(jiǎn)單整合,但是在實(shí)驗(yàn)過程中,有很多函數(shù)的傳遞參數(shù),在傳參的時(shí)候出現(xiàn)了很多錯(cuò)誤。在實(shí)現(xiàn)最少費(fèi)用的時(shí)候權(quán)值是費(fèi)用,但是在最少時(shí)間的時(shí)候權(quán)值是時(shí)間,題目的要求中時(shí)間是用兩個(gè)整形進(jìn)行存儲(chǔ)的,要用用兩點(diǎn)間的時(shí)間作為權(quán)值(需經(jīng)過一些簡(jiǎn)單的運(yùn)算,用到達(dá)的時(shí)間減去剛開始的時(shí)間,但是時(shí)間不能簡(jiǎn)單的相減,當(dāng)小時(shí)不夠減時(shí)和當(dāng)分鐘不
22、夠減時(shí),應(yīng)該進(jìn)行相關(guān)的轉(zhuǎn)化)。通過本次實(shí)驗(yàn),我對(duì)網(wǎng)(帶權(quán)圖)的操作有了更深刻的理解。也對(duì)數(shù)據(jù)結(jié)構(gòu)這門課在實(shí)際中的應(yīng)用有了深刻的體會(huì)。同時(shí),我也明白了要學(xué)好任何一門語言,基礎(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)體(struct Vehide),主要包括航班或車次號(hào)、費(fèi)用、出發(fā)到達(dá)的時(shí)間。又考慮到每一個(gè)城市也許具有一個(gè)或多個(gè)航班,又創(chuàng)建了struct infolist 里面
23、包括:與城市相鄰的城市之間的航班信息及與該城市相連接的航班數(shù)目。然后總的結(jié)點(diǎn)為struct ArcNode 里面包括結(jié)點(diǎn)的下標(biāo),一個(gè)結(jié)點(diǎn)指針,還有一個(gè)infolist 變量。最后是存儲(chǔ)城市的信息,struct VNode 里面包括:城市的名稱,兩個(gè)結(jié)點(diǎn)指針(航班結(jié)點(diǎn),車次結(jié)點(diǎn))。緊接著創(chuàng)建交通系統(tǒng)圖struct ALGraph (以鄰接表為存儲(chǔ)結(jié)構(gòu)),里面包括:結(jié)點(diǎn)數(shù)組,城市的個(gè)數(shù),航班的個(gè)數(shù),列車的個(gè)數(shù)。Struct arc 用于寫入文檔。其他的還有臨時(shí)建立的鄰接表的結(jié)點(diǎn)結(jié)構(gòu),鏈隊(duì)列結(jié)點(diǎn)結(jié)構(gòu),鏈隊(duì)列信息結(jié)構(gòu),struct LinkQueue 里面包括:指向鏈對(duì)結(jié)點(diǎn)類型的兩個(gè)指針(尾指針,頭指
24、針)。(2)、添加航班或車次:存儲(chǔ)結(jié)構(gòu)由同組人員完成,鄰接表。輸入要加入的車次或航班的編號(hào),起始城市,目的城市,費(fèi)用及出發(fā)到達(dá)的時(shí)間,利用廣度遍歷遍歷鄰接表,如果原先起始城市,目的城市無航班到達(dá)則直接插入到兩則的next位置即可,若有就插入到最后的一個(gè)鄰接的后面,last(通往該結(jié)點(diǎn)的航班的個(gè)數(shù))分別加1。(3)、刪除航班或車次:重復(fù)上面的輸入,以廣度優(yōu)先遍歷鄰接表,找到要?jiǎng)h除的航班或車次的下標(biāo)(即找到了起始城市和目的城市),找到起始城市的那個(gè)航班或列車鏈,遍歷到目的城市,從這個(gè)位置開始,后邊的鏈結(jié)點(diǎn)向前移動(dòng)一位,被刪除的航班被覆蓋,釋放最后那各結(jié)點(diǎn)。經(jīng)過兩周的努力,小組查閱資料,向楊老師咨詢
25、,終于把自己的系統(tǒng)完成了,感觸最深的是小組協(xié)作,雖然我們各自都分了模塊,但是完成的過程中我們都是在商量其實(shí)現(xiàn)的思想,其中又把數(shù)據(jù)結(jié)構(gòu)這門課程系統(tǒng)的復(fù)習(xí)了一下,把整個(gè)學(xué)期學(xué)習(xí)的知識(shí)匯總了。參考文獻(xiàn):1數(shù)據(jù)結(jié)構(gòu)C語言版 嚴(yán)蔚敏、吳偉民,清華大學(xué)出版社,20022數(shù)據(jù)結(jié)構(gòu)課程實(shí)驗(yàn) 徐孝凱,清華大學(xué)出版社, 20023數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)題典 李春葆,清華大學(xué)出版社,2002附錄:程序源代碼int main()/程序功能選擇界面ALGraph G; int i; printf(tt*tt);printf(nnnnn); printf( 尊敬的用戶,你好!nnn); printf( 歡迎進(jìn)入全國交通咨詢系統(tǒng)
26、.nnn);printf( 在這里我們將為您提供最便捷,最優(yōu)惠的出行方案.nnn);printf(nnn);printf(tt*tt);printf(n 請(qǐng)您按任意鍵進(jìn)入查詢系統(tǒng)!nn);system(pause);system(cls);printf(ttttn);printf(tt 1、管理員登陸 ttn);printf(tt 2、用戶查詢 ttn);printf(tt 3、顯示交通系統(tǒng) ttn);printf(tt 4、退出系統(tǒng) ttn);printf(ttttn);printf(tt 請(qǐng)輸入您要進(jìn)行的操作:);scanf(%d,&i);getchar();system(cls);whi
27、le(i!=4) /只要沒有退出選擇退出系統(tǒng)就可以一直執(zhí)行下去 switch(i) case 1:Administer(&G);break; case 2:UserDemand(G);break; case 3:PrintGraph(&G);break; printf(ttttn);printf(tt 1、管理員登陸 ttn);printf(tt 2、用戶查詢 ttn);printf(tt 3、顯示交通系統(tǒng) ttn);printf(tt 4、退出系統(tǒng) ttn);printf(ttttn);printf(tt 請(qǐng)您正確輸入您要進(jìn)行的操作:);scanf(%d,&i); getchar( );sy
28、stem(cls);return 1;void Administer(ALGraph *G)/管理員管理項(xiàng)目選擇界面int i; printf(nnn);printf(tt 尊敬的管理員,請(qǐng)您選擇您要進(jìn)行的操作: ttnn); printf(tt*ttn);printf(tt 1、初始化交通系統(tǒng); ttn);printf(tt 2、城市信息編輯; ttn);printf(tt 3、航班班次編輯; ttn);printf(tt 4、列車車次編輯; ttn);printf(tt 5、退出管理員登錄; ttn);printf(tt*ttn);printf(tt 請(qǐng)您輸入您要進(jìn)行的操作:);scanf
29、(%d,&i); getchar();system(cls); while(i!=5) switch(i)case 1:InitGraph(G); break; /初始化交通系統(tǒng) case 2:CityEdit(G); break; /城市編輯 case 3:flightedit(G); break; /飛機(jī)航班編輯 case 4:trainedit(G); break; /列車車次編輯printf(請(qǐng)您按回車鍵繼續(xù):);getchar( ); printf(nnn); printf(nnn); printf(tt*ttn);printf(tt 請(qǐng)選擇操作: ttn);printf(tt 1、
30、初始化交通系統(tǒng); ttn);printf(tt 2、城市信息編輯; ttn);printf(tt 3、航班航班編輯; ttn);printf(tt 4、列車車次編輯; ttn);printf(tt 5、退出管理員登錄; ttn);printf(tt*ttn);printf(tt 請(qǐng)您輸入您要進(jìn)行的操作:);scanf(%d,&i); getchar();system(cls);void InitGraph(ALGraph *G) /初始化交通系統(tǒng)int i;system(cls); printf(nnn);printf(nnn);printf(ttttn);printf(tt 1、用鍵盤輸入
31、ttnn);printf(tt 2、用文件導(dǎo)入 ttn);printf(ttttn);printf(tt 請(qǐng)您輸入您要進(jìn)行的操作:); scanf(%d,&i); getchar();system(cls); switch(i) case 1: CreateCityFile(); CreatePlaneFile(); CreateTrainFile(); CreateGraph(G); break; case 2:CreateGraph(G); break;void CreateCityFile()/創(chuàng)建城市名稱文檔int i=0; int j; char flag=y; FILE *fp;/
32、定義一個(gè)指向文件型數(shù)據(jù)的指針變量 printf(n請(qǐng)輸入城市名稱的信息:n); while(flag=y|flag=Y)printf(城市名稱:); gets(cityi);/輸入一個(gè)城市名 i+; printf(繼續(xù)輸入?(Y/N); scanf(%c,&flag); getchar(); printf(n); if(fp=fopen(city.txt,wb)=NULL) printf(無法打開文件!n); return ; for(j=0;ji;j+) fprintf(fp,%10s,cityj);/把用鍵盤輸入的城市名輸出到fp所指向的文件中 fclose(fp);/關(guān)閉文件void C
33、reatePlaneFile()/創(chuàng)建飛機(jī)航班文檔int i,count,code,bt2,at2; /code航班編號(hào),bt出發(fā)時(shí)間,at到達(dá)時(shí)間 float money;/費(fèi)用 char vt10,vh10,flag; /vt起始城市,vh目標(biāo)城市 FILE *fp; flag=y; count=0; while(flag=Y|flag=y) /*flag為標(biāo)志位,初值為1*/printf(請(qǐng)輸入飛機(jī)航班的信息:n); /提示輸入航班信息 printf(飛機(jī)航班編號(hào):); /輸入航班code scanf(%d,&code); getchar(); printf(起始城市:); /輸入航班的
34、出發(fā)城市vt gets(vt); printf(目的城市:); /輸入航班的到達(dá)城市vh gets(vh); printf(航班費(fèi)用:); /輸入機(jī)票價(jià)格money scanf(%f,&money); getchar(); printf(起飛時(shí)間:); /輸入航班的出發(fā)時(shí)間bt scanf(%d:%d,&bt0,&bt1); getchar(); while(bt0=24|bt1=60)printf(n時(shí)間輸入有誤,請(qǐng)重新輸入n); scanf(%d:%d,&bt0,&bt1); getchar(); printf(到達(dá)時(shí)間:); /輸入航班的到達(dá)時(shí)間at scanf(%d:%d,&at0,&
35、at1); getchar(); while(at0=24|at1=60) printf(n時(shí)間輸入有誤,請(qǐng)重新輸入n); scanf(%d:%d,&at0,&at1); getchar(); acount.co=code; / a 為程序頭部定義的結(jié)構(gòu)體 strcpy(acount.vt,vt); strcpy(acount.vh,vh); acount.bt0=bt0; acount.bt1=bt1; acount.at0=at0; acount.at1=at1; acount.mo=money; count+; /計(jì)數(shù)值count+1 printf(繼續(xù)輸入?(Y/N); /提示是否要繼
36、續(xù)輸入航班信息: scanf(%c,&flag); getchar(); printf(n); if(fp=fopen(plane.txt,wb)=NULL) /航班文件不能以讀寫形式打開 printf(n無法打開文件!n); /提示無法打開文件 fprintf(fp,%d,count); /將計(jì)數(shù)值count寫入航班車文件 for(i=0;icount;i+) if(fwrite(&ai,sizeof(struct arc),1,fp)!=1) /無法將ai寫入航班文件 printf(n文件寫入錯(cuò)誤!n); /提示文件無法寫入 fclose(fp); /關(guān)閉航班文件void CreateTr
37、ainFile()/創(chuàng)建列車車次文檔int i,count=0,code,bt2,at2; float money; char vt10,vh10,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(
38、%d:%d,&bt0,&bt1); getchar(); while(bt0=24|bt1=60)printf(n時(shí)間輸入有誤,請(qǐng)重新輸入n); scanf(%d:%d,&bt0,&bt1); getchar(); printf(到達(dá)時(shí)間:); scanf(%d:%d,&at0,&at1); getchar(); while(at0=24|at1=60) printf(n時(shí)間輸入有誤,請(qǐng)重新輸入n); scanf(%d:%d,&at0,&at1); getchar(); acount.co=code; strcpy(acount.vt,vt); strcpy(acount.vh,vh);aco
39、unt.bt0=bt0;acount.bt1=bt1;acount.at0=at0;acount.at1=at1;acount.mo=money;count+;printf(繼續(xù)輸入?(Y/N);scanf(%c,&flag);getchar();printf(n);if(fp=fopen(train.txt,wb)=NULL)printf(n無法打開文件!n);fprintf(fp,%d,count);for(i=0;icount;i+)if(fwrite(&ai,sizeof(struct arc),1,fp)!=1)printf(n文件寫入錯(cuò)誤!n); fclose(fp);int Lo
40、cateVertex(ALGraph *G,char *v) /找出城市名在圖中對(duì)應(yīng)結(jié)點(diǎn)位置int j,k; j=-1; for(k=0;kvexnum;k+) if(strcmp(G-verticesk.cityname,v)=0) /第k個(gè)結(jié)點(diǎn)中的城市名與傳過來的城市名相同 j=k; /*記錄位置*/ break; return(j); void CreateGraph(ALGraph *G)/用city,plan,train三個(gè)文檔創(chuàng)建城市交通系統(tǒng) int i,j,k; int arc_num; int count1,count2; int m,t; ArcNode *p,*q; FILE *fp; i=0; if(fp=fopen(city.txt,rb)=NULL) /打開城市文件,文件指針返回值為空 printf(n無法打開文件!n); return ; while(!feof(fp) /文件不為空 fscanf(fp,%10s,cityi);/從磁盤文件讀取一個(gè)字符串格式的值賦給cityi i+; fclose(fp); /關(guān)閉文件 j=0; while(jverticesj.cityname,cityj);/將 cityi 中的內(nèi)容復(fù)制到圖的結(jié)構(gòu)體的結(jié)點(diǎn)數(shù)組中; G
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年專利許可合同:某企業(yè)使用某專利技術(shù)
- 2024年建筑勞務(wù)隊(duì)安全生產(chǎn)協(xié)議
- 2024年度智能家居系統(tǒng)采購合同
- 2024年度城市基礎(chǔ)設(shè)施建設(shè)與管理協(xié)議
- 2024證券投資基金基金合同范例
- 2024年國際石油天然氣開采銷售合同
- 2024醫(yī)療耗材生產(chǎn)原料采購與供應(yīng)合同
- 2024年創(chuàng)新型企業(yè)孵化合作框架協(xié)議
- 保安員述職報(bào)告范文(7篇)
- 2024年度項(xiàng)目融資合同融資金額及還款方式
- 學(xué)前教育論文范文8000字(通用九篇)
- 小學(xué)數(shù)學(xué)北師大五年級(jí)上冊(cè)數(shù)學(xué)好玩 圖形中的規(guī)律-
- 《富饒的西沙群島》說課稿(優(yōu)秀3篇)
- 墓碑碑文范文(通用十四篇)
- 大象版一年級(jí)科學(xué)上冊(cè)全冊(cè)教案
- 5000字論文范文(推薦十篇)
- 教案評(píng)分標(biāo)準(zhǔn)
- 中藥飲片處方點(diǎn)評(píng)表
- 《節(jié)能監(jiān)察的概念及其作用》
- 綜合布線系統(tǒng)竣工驗(yàn)收表
- 蔬菜會(huì)員卡策劃營銷推廣方案多篇
評(píng)論
0/150
提交評(píng)論