版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
年4月19日全國(guó)交通咨詢模擬數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告題目:全國(guó)交通咨詢模擬一.需求分析1.程序設(shè)計(jì)任務(wù):從中國(guó)地圖平面圖中選取部分城市,抽象為程序所需要圖的結(jié)點(diǎn),并以城市間的列車(chē)路線和飛機(jī)路線,作為圖結(jié)點(diǎn)中的弧信息,設(shè)計(jì)一個(gè)全國(guó)交通咨詢模擬系統(tǒng)。利用該系統(tǒng)實(shí)現(xiàn)兩種最優(yōu)決策:最快到達(dá)或最省錢(qián)到達(dá)。2.明確規(guī)定:(1)輸入形式和輸入值的范圍:每條飛機(jī)弧或者火車(chē)弧涉及的信息量很多,包括:起始城市、目的城市、出發(fā)時(shí)間、到達(dá)時(shí)間、班次以及費(fèi)用。作為管理員要輸入的信息包括以上信息,而作為用戶或者客戶,要輸入的信息有起始城市和目的城市,并選擇何種最優(yōu)決策。(2)輸出形式:按用戶提供的最優(yōu)決策的不同而輸出不同的信息,其中輸出的所搭飛機(jī)或火車(chē)的班次及其起始地點(diǎn)和終點(diǎn)、起始時(shí)間和出發(fā)時(shí)間還有相關(guān)的最優(yōu)信息,比如最快經(jīng)多少時(shí)間到達(dá)、最省錢(qián)多少錢(qián)到達(dá)和最少經(jīng)多少中轉(zhuǎn)站到達(dá)。(3)程序所能達(dá)到的功能a.該系統(tǒng)有供用戶選擇的菜單和交互性。能夠?qū)Τ鞘?、列?chē)車(chē)次和飛機(jī)航班進(jìn)行編輯,添加或刪除。b.建立一個(gè)全國(guó)交通咨詢系統(tǒng),該系統(tǒng)具備自動(dòng)查找任意兩城市間鐵路、飛機(jī)交通的最短路徑和最少花費(fèi)及中轉(zhuǎn)次數(shù)最少等功能。c.初始化交通系統(tǒng)有兩種方式,鍵盤(pán)和文檔。設(shè)計(jì)概要算法設(shè)計(jì)(1)、總體設(shè)計(jì)(1)數(shù)據(jù)存儲(chǔ):城市信息(城市名、代碼)、交通信息(城市間的里程、各航班和列車(chē)時(shí)刻)存儲(chǔ)于磁盤(pán)文件。建議把城市信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函數(shù)操作。(2)數(shù)據(jù)的邏輯結(jié)構(gòu):根據(jù)設(shè)計(jì)任務(wù)的描述,其城市之間的旅游交通問(wèn)題是典型的圖結(jié)構(gòu),可看作為有向圖,圖的頂點(diǎn)是城市,邊是城市之間所耗費(fèi)的時(shí)間(要包括中轉(zhuǎn)站的等候時(shí)間)或旅費(fèi)。(3)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu):采用鄰接表和鄰接矩陣都可作為數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu),但當(dāng)鄰接邊不多時(shí),宜采用鄰接表,以提高空間的存儲(chǔ)效率。這里采用鄰接表作為數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)。(4)用不同的功能模塊對(duì)城市信息和交通信息進(jìn)行編輯。添加、修改、刪除功能可用菜單方式或命令提示方式。只要能方便的對(duì)城市信息和交通信息進(jìn)行管理即可,但要注意人機(jī)界面。(5)最優(yōu)決策功能模塊(fastorprovince)。①讀入城市信息和交通信息,用鄰接表生成含權(quán)網(wǎng)絡(luò),表頭數(shù)組中的元素存放城市名及對(duì)方城市到達(dá)該元素所代表城市的所有信息;表頭數(shù)組中的元素所對(duì)應(yīng)的單鏈表存放與該元素所代表的城市有交通聯(lián)系的城市(代碼、里程、航班、列車(chē)車(chē)次)。②根據(jù)具體最優(yōu)決策的要求,用Dijkstra算法求出出發(fā)城市到其它各城市的最優(yōu)值(最短時(shí)間或最小的費(fèi)用),搜索過(guò)程中所經(jīng)過(guò)城市的局部最優(yōu)信息都保存在鄰接表的表頭數(shù)組中。其目的城市所代表的元素中就保存了所需的最優(yōu)決策結(jié)果。這過(guò)程中,要用隊(duì)列或棧保存局部最優(yōu)決策值(局部最短的時(shí)間或最省的費(fèi)用)變小的城市,其相應(yīng)的初始值可為∞,并在表頭數(shù)組對(duì)應(yīng)的城市元素中保存響應(yīng)的信息。開(kāi)始時(shí),棧(隊(duì)列)中只有出發(fā)地城市,隨著對(duì)棧(隊(duì)列)頂(首)城市有交通聯(lián)系的城市求得決策值(最短時(shí)間或最小的費(fèi)用),若該值是局部最優(yōu)值且該城市不在棧(隊(duì)列)中,則進(jìn)棧(隊(duì)列),直至棧(隊(duì)列)為空,本題采用隊(duì)列實(shí)現(xiàn)。③輸出結(jié)果:從目的城市出發(fā),搜索到出發(fā)城市,所經(jīng)過(guò)的城市均入棧(隊(duì)列),再逐一出棧棧(隊(duì)列)中的城市,輸出保存在表頭數(shù)組中對(duì)應(yīng)城市的信息(對(duì)方城市的出發(fā)信息,里程、時(shí)間、費(fèi)用等)及最終結(jié)果。即輸出依次于何時(shí)何地乘坐幾點(diǎn)的飛機(jī)或火車(chē)于何時(shí)到達(dá)何地;最終所需的最快需要多長(zhǎng)時(shí)間才能到達(dá)及旅費(fèi),或者最少需要多少旅費(fèi)才能到達(dá)及時(shí)間。(6)主程序能夠有系統(tǒng)界面、菜單;也可用命令提示方式;選擇功能模塊執(zhí)行,要求在程序運(yùn)行過(guò)程中能夠重復(fù)操作。(2).詳細(xì)設(shè)計(jì)思想:本題所要求的交通系統(tǒng)是一個(gè)有向帶權(quán)圖結(jié)構(gòu),考慮到要求該系統(tǒng)有動(dòng)態(tài)增加飛機(jī)和列車(chē)航班的功能,因而采用鄰接表的形式存儲(chǔ):對(duì)每個(gè)頂點(diǎn)建立一個(gè)單鏈表,單鏈表中的子結(jié)點(diǎn)表示以該頂點(diǎn)連接的弧,單鏈表中子結(jié)點(diǎn)的順序能夠按權(quán)值遞增的順序排列,表頭結(jié)點(diǎn)按順序存儲(chǔ)。題目中提到要提供三種策略,最快到達(dá),最省錢(qián)到達(dá)和最少中轉(zhuǎn)次數(shù)策略,前兩種策略采用迪杰斯特拉算法思想,其中最快到達(dá)的權(quán)值為到達(dá)兩城市所需的最短時(shí)間,最省錢(qián)到達(dá)的權(quán)值為到達(dá)兩城市所需的費(fèi)用,后一種采用廣度優(yōu)先算法的思想,只需求的兩城市所在的層數(shù),就能夠求的到達(dá)兩城市所需的最少中轉(zhuǎn)次數(shù)。迪杰斯特拉(Dijkstra)算法的基本思想是:設(shè)置兩個(gè)頂點(diǎn)的集合S和T=V-S,集合S中存放已找到最短路徑的頂點(diǎn),集合T存放當(dāng)前還未找到最短路徑的頂點(diǎn)。初始狀態(tài)時(shí),集合S中只包含源點(diǎn)v0,然后不斷從集合T中選取到頂點(diǎn)v0路徑長(zhǎng)度最短的頂點(diǎn)u加入到集合S中,集合S每加入一個(gè)新的頂點(diǎn)u,都要修改頂點(diǎn)v0到集合T中剩余頂點(diǎn)的最短路徑長(zhǎng)度值,集合T中各頂點(diǎn)新的最短路徑長(zhǎng)度值為原來(lái)的最短路徑長(zhǎng)度值與頂點(diǎn)u的最短路徑長(zhǎng)度值加上u到該頂點(diǎn)的路徑長(zhǎng)度值中的較小值。此過(guò)程不斷重復(fù),直到集合T的頂點(diǎn)全部加入到S中為止。下面討論基于鄰接表的存儲(chǔ)結(jié)構(gòu)求兩點(diǎn)間最短路徑的方法:
根據(jù)迪杰斯特拉(Dijkstra)算法所依據(jù)的原理:若按長(zhǎng)度遞增的次序生成從源點(diǎn)V0到其它頂點(diǎn)的最短路徑,則當(dāng)前正在生成的最短路徑上除終點(diǎn)以外,其余頂點(diǎn)的最短路徑均已生成(將源點(diǎn)的最短路徑看作是已生成的源點(diǎn)到其自身的長(zhǎng)度為0的路徑)。
按照這一思想,構(gòu)造以下算法:
設(shè)S=S’=U={},建立數(shù)組PATH[n],用來(lái)存儲(chǔ)V0到各終點(diǎn)的最短路徑,初值均置為空集。建立數(shù)組BOOLF[n],F(xiàn)[i]表示序號(hào)為i的表頭結(jié)點(diǎn)的單鏈表中所有子結(jié)點(diǎn)已或未全部找到,初值置為FALSE。建立數(shù)組floatdist[n],dist[i]表示序號(hào)為i的表頭結(jié)點(diǎn)到V0的最短權(quán)值(這里是時(shí)間或費(fèi)用),顯然dist[V0]=0,其它頂點(diǎn)的dist初值置為∞。建立數(shù)組BOOLIS[n],IS[i]表示序號(hào)為i的頂點(diǎn)是否在S中,初值均置為FALSE。
(1)VX=V0;最短的最短路徑為PATH[0]=[V0]
(2)S=S+VX;(集合的并計(jì)算)IS[VX]=TRUE;S’=S’+VX;
(3)對(duì)S’中的所有頂點(diǎn):{do{由鄰接表中該表頭結(jié)點(diǎn)開(kāi)始依次找單鏈表的下一子結(jié)點(diǎn)(沿鏈域指針依次訪問(wèn));if(該子結(jié)點(diǎn)∈S)//IS[該子結(jié)點(diǎn)的鄰接點(diǎn)序號(hào)]==TRUEif(子結(jié)點(diǎn)鏈域指針指向NULL)F=TRUE;S’=S’-該表頭結(jié)點(diǎn);break;elsecontinue;elsebreak;}while();如F=FALSE,則U=U+該子結(jié)點(diǎn);}如果S’=空集,則結(jié)束;(4)下一次短路徑的終點(diǎn)必∈U。比較U中子結(jié)點(diǎn)到V0的dist值(其值為U中結(jié)點(diǎn)的弧的權(quán)值+其表頭結(jié)點(diǎn)的dist值),由dist值最小的子結(jié)點(diǎn)的鄰接點(diǎn)域確定次短路徑的終點(diǎn)VX,PATH[VX]=PATH[該子結(jié)點(diǎn)的表頭結(jié)點(diǎn)]+[VX](集合的并計(jì)算)。dist[VX]=VX所屬子結(jié)點(diǎn)的弧的權(quán)值+其表頭結(jié)點(diǎn)的dist值。U={};如果VX為所要找的頂點(diǎn),則結(jié)束;回到2執(zhí)行。廣度優(yōu)先搜索遍歷圖類(lèi)似于樹(shù)的按層次遍歷,其基本思想是:首先訪問(wèn)圖中某指定的起始點(diǎn)Vi并將其標(biāo)記為已訪問(wèn)過(guò),然后由Vi出發(fā)訪問(wèn)與它相鄰接的所有頂點(diǎn)Vj、Vk……,并均標(biāo)記為已訪問(wèn)過(guò),然后再按照Vj、Vk……的次序,訪問(wèn)每一個(gè)頂點(diǎn)的所有未被訪問(wèn)過(guò)的鄰接頂點(diǎn),并均標(biāo)記為已訪問(wèn)過(guò),下一步再?gòu)倪@些頂點(diǎn)出發(fā)訪問(wèn)與它們相鄰接的尚未被訪問(wèn)的頂點(diǎn),如此做下去,直到所有的頂點(diǎn)均被訪問(wèn)過(guò)為止。抽象數(shù)據(jù)類(lèi)型本程序運(yùn)用了關(guān)于圖這種數(shù)據(jù)結(jié)構(gòu)。ADTGraph{數(shù)據(jù)對(duì)象V:V是具有相同特性的數(shù)據(jù)元素的集合,稱為頂點(diǎn)集。數(shù)據(jù)關(guān)系R:R={VR}VR={<v,w>|v,w∈V且P(v,w),<v,w>表示從v到w的弧。謂詞P(v,w)定義了弧<v,w>的意義或信息}基本操作P:CreateGraph(&G,V,VR);初始條件:V是圖的頂點(diǎn)集,VR是圖中弧的集合。操作結(jié)果:按V和VR的定義構(gòu)造圖G。DestroyGraph(&G);初始條件:圖G存在。操作結(jié)果:銷(xiāo)毀圖G。LocateVet(G,u);初始條件:圖G存在,u和G中頂點(diǎn)有相同的特征。操作結(jié)果:若G中存在頂點(diǎn)u,則返回該頂點(diǎn)在圖中的位置,否則返回其它信息。GetVex(G,v);初始條件:圖G存在,v是G中某個(gè)頂點(diǎn)。操作結(jié)果:返回v的值。PutVex(&G,v,value);初始條件:圖G存在,v是G中某個(gè)頂點(diǎn)。操作結(jié)果:對(duì)v賦值value。FirstAdjVex(G,v);初始條件:圖G存在,v是G中某個(gè)頂點(diǎn)。操作結(jié)果:返回v的第一個(gè)鄰接頂點(diǎn)。若頂點(diǎn)在G中沒(méi)有鄰接頂點(diǎn),則返回“空”。NextAdjVex(G,v,w);初始條件:圖G存在,v是G中某個(gè)頂點(diǎn),w是v的鄰接頂點(diǎn),操作結(jié)果:返回v的(相對(duì)于w的)下一個(gè)鄰接頂點(diǎn)。若w是v的最后一個(gè)鄰接點(diǎn),則返回“空”。InsertVex(&G,v);初始條件:圖G存在,v和圖中頂點(diǎn)有相同特征。操作結(jié)果:在圖G中添加新頂點(diǎn)v。DeleteVex(&G,v);初始條件:圖G存在,v是G中某個(gè)頂點(diǎn)。操作結(jié)果:刪除G中頂點(diǎn)v及相關(guān)弧。InsertArc(&G,v,w);初始條件:圖G存在,v和w是G中兩個(gè)頂點(diǎn)。操作結(jié)果:在G中增添弧<v,w>,若G是無(wú)向的則還增加對(duì)稱弧<w,v>。DeleteArc(&G,v,w);初始條件:圖G存在,v和w是G中兩個(gè)頂點(diǎn)。操作結(jié)果:在G中刪除弧<v,w>,若G是無(wú)向的,則還刪除對(duì)稱弧<w,v>。DFSTraverse(G,Visit());初始條件:圖G存在,Visit是頂點(diǎn)的應(yīng)用函數(shù)。操作結(jié)果:對(duì)圖進(jìn)行深度優(yōu)先遍歷。在遍歷過(guò)程中對(duì)每個(gè)頂點(diǎn)調(diào)用函數(shù)Visit一次且僅一次。一旦visit()失敗,則操作失敗。BFSTraverse(G,Visit());初始條件:圖G存在,Visit是頂點(diǎn)的應(yīng)用函數(shù)。操作結(jié)果:對(duì)圖進(jìn)行廣度優(yōu)先遍歷。在遍歷過(guò)程中對(duì)每個(gè)頂點(diǎn)調(diào)用函數(shù)Visit一次且僅一次。一旦visit()失敗,則操作失敗。}ADTGraph其它的抽象數(shù)據(jù)類(lèi)型定義如下:typedefstruct{intnumber;floatexpenditure;intbegintime[2];intarrivetime[2];}Vehide;typedefstruct{Vehidestata[MAX_ROUTE_NUM];intlast;}infolist;typedefstructArcNode{intadjvex;structArcNode*nextarc;infolistinfo;}ArcNode;typedefstructVNode{charcityname[10];ArcNode*planefirstarc,*trainfirstarc;}VNode,AdjList[MAX_VERTEX_NUM];typedefstruct{AdjListvertices;intvexnum,planearcnum,trainarcnum;}ALGraph;typedefstructNode{intadjvex;introute;structNode*next;}Node;typedefstructQNode{intadjvex;structQNode*next;}QNode;typedefstruct{QNode*front;QNode*rear;}LinkQueue;typedefstructTimeNode{intadjvex;introute;intbegintime[2];intarrivetime[2];structTimeNode*child[MAX_ROUTE_NUM];}TimeNode,*TimeTree;structarc{intco;charvt[10];charvh[10];intbt[2];intat[2];floatmo;}a[MAX_ARC_SIZE];基本操作:voidAdminister(ALGraph*G);voidcityedit(ALGraph*G);voidCopyTimeTree(TimeTreep,TimeTreeq);voidcreatecityfile();voidCreateGraph(ALGraph*G);voidcreateplanefile();voidCreateTimeTree(TimeTreep,inti,intj,LinkQueue*Q,infolist(*arcs)[MAX_VERTEX_NUM]);voidcreatetrainfile();intDeleteplaneArc(ALGraph*G);voidDeleteQueue(LinkQueue*Q,int*x);intDeletetrainArc(ALGraph*G);voidDeleteVertex(ALGraph*G);voidDemandDispose(intn,ALGraphG);voidDestoryTimeTree(TimeTreep);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);voidMinTime(infolistarcs,int*time,int*route);voidPrintGraph(ALGraph*G);intsave(ALGraph*G);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);voidTransferDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1);voidUserDemand(ALGraphG);voidVisitTimeTree(TimeTreep);主程序的流程以及各程序模塊之間的調(diào)用關(guān)系退出顯示交通系統(tǒng)PrintGraph用戶咨詢UserDemand管理員管理Administer主函數(shù)main()退出顯示交通系統(tǒng)PrintGraph用戶咨詢UserDemand管理員管理Administer主函數(shù)main()返回上一級(jí)菜單列車(chē)車(chē)次編輯Administer飛機(jī)航班編輯Administer城市編輯cityedit管理員管理Administer返回上一級(jí)菜單列車(chē)車(chē)次編輯Administer飛機(jī)航班編輯Administer城市編輯cityedit管理員管理Administer初始化交通系統(tǒng)初始化交通系統(tǒng)initgraph返回上一級(jí)菜單最少中轉(zhuǎn)次數(shù)TransferDispose最少旅行時(shí)間TimeDispose用戶咨詢UserDemand返回上一級(jí)菜單最少中轉(zhuǎn)次數(shù)TransferDispose最少旅行時(shí)間TimeDispose用戶咨詢UserDemand最少旅行費(fèi)用最少旅行費(fèi)用ExpenditureDisposeUserDemand顯示城市顯示飛機(jī)航班顯示列車(chē)車(chē)次返回上一級(jí)菜單顯示交通系統(tǒng)PrintGraph顯示城市顯示飛機(jī)航班顯示列車(chē)車(chē)次返回上一級(jí)菜單顯示交通系統(tǒng)PrintGraph文檔鍵盤(pán)初始化交通系統(tǒng)initgraph文檔鍵盤(pán)初始化交通系統(tǒng)initgraph刪除城市新增城市城市編輯cityedit刪除城市新增城市城市編輯cityedit刪除航班新增航班飛機(jī)航班編輯planeedit刪除航班新增航班飛機(jī)航班編輯planeedit刪除車(chē)次新增車(chē)次火車(chē)列次編輯trainedit刪除車(chē)次新增車(chē)次火車(chē)列次編輯trainedit三.詳細(xì)設(shè)計(jì)1.主程序偽代碼intmain(){界面初始化;輸入操作命令;While(“命令”!=“退出”){接受命令(用戶輸入要實(shí)現(xiàn)功能);進(jìn)入各個(gè)處理命令函數(shù);}}2.函數(shù)和過(guò)程的調(diào)用關(guān)系圖DeleteQueueEnterQueueInitQueueMinTimeTimeTreeDisposeEnterplaneArcDeleteplaneArcEntertrainArcDeletetrainArcTransferDisposeTimeDisposeMinExpenditureExpenditureDisposecreateplanefilecreatetrainfileCreateGraphinitgraphcityeditAdministerPrintGraphEnterVertextraineditDeleteVertexcreatecityfileflighteditDeleteQueueEnterQueueInitQueueMinTimeTimeTreeDisposeEnterplaneArcDeleteplaneArcEntertrainArcDeletetrainArcTransferDisposeTimeDisposeMinExpenditureExpenditureDisposecreateplanefilecreatetrainfileCreateGraphinitgraphcityeditAdministerPrintGraphEnterVertextraineditDeleteVertexcreatecityfileflighteditUserDemandUserDemandMain(Main()InitQueueInitQueueEnterQueueEnterQueueDeleteQueueDeleteQueueCreateTimeTreeCopyTimeTreeTimeTreeDisposeCreateTimeTreeCopyTimeTreeTimeTreeDisposeVisitTimeTreeVisitTimeTreeDestoryTimeTreeDestoryTimeTree四.調(diào)試分析:⑴調(diào)試過(guò)程中遇到的問(wèn)題是如何解決的以及對(duì)設(shè)計(jì)與實(shí)現(xiàn)的回顧討論和分析:在調(diào)試的過(guò)程中碰到了一下問(wèn)題:a.引用形參應(yīng)用不當(dāng);b.文件操作中遇到讀入錯(cuò)誤或找不到文件;解決方案:a.對(duì)引用形參了解的不是很透徹,導(dǎo)致錯(cuò)誤,經(jīng)過(guò)查閱相關(guān)書(shū)籍如《C++Primer》和請(qǐng)教編程能力較高的人,最終解決問(wèn)題。b.經(jīng)過(guò)參考譚浩強(qiáng)編著的《C程序設(shè)計(jì)》中的文件操作,文件格式和相關(guān)文件路徑的設(shè)置,最終解決問(wèn)題。⑵算法的時(shí)空分析(包括基本操作和其它算法的時(shí)間復(fù)雜度和空間復(fù)雜度的分析)和改進(jìn)設(shè)想: 基本操作時(shí)間復(fù)雜度空間復(fù)雜度voidAdminister(ALGraph*G)O(1)O(1)voidcityedit(ALGraph*G)O(n)O(n)voidCopyTimeTree(TimeTreep,TimeTreeq)O(n)O(1)voidcreatecityfile()O(n)O(n)voidCreateGraph(ALGraph*G)O(n)O(n)voidcreateplanefile()O(1)O(1)voidCreateTimeTree(TimeTreep,inti,intj,LinkQueue*Q,infolist(*arcs)[MAX_VERTEX_NUM])O(n)O(n)voidcreatetrainfile()O(1)O(1)intDeleteplaneArc(ALGraph*G)O(n)O(n)voidDeleteQueue(LinkQueue*Q,int*x)O(1)O(1)intDeletetrainArc(ALGraph*G)O(n)O(n)voidDeleteVertex(ALGraph*G)O(n)O(n)voidDemandDispose(intn,ALGraphG)O(1)O(1)voidDestoryTimeTree(TimeTreep)O(n)O(1)voidEnterplaneArc(ALGraph*G)O(n)O(n)voidEnterQueue(LinkQueue*Q,intx)O(1)O(1)voidEntertrainArc(ALGraph*G)O(1)O(1)voidEnterVertex(ALGraph*G)O(n)O(n)voidExpenditureDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1,float*M,int*final)O(n)O(1)voidflightedit(ALGraph*G)O(1)O(1)voidinitgraph(ALGraph*G)O(1)O(n)voidInitQueue(LinkQueue*Q)O(1)O(1)intIsEmpty(LinkQueue*Q)O(1)O(1)intLocateVertex(ALGraph*G,char*v)O(n)O(1)voidMinExpenditure(infolistarcs,float*expenditure,int*route)O(n)O(n)voidMinTime(infolistarcs,int*time,int*route)O(n)O(n)voidPrintGraph(ALGraph*G)O(1)O(n)intsave(ALGraph*G)O(1)O(1)voidTimeDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1,int(*T)[2],int*final)O(n)O(n)voidTimeTreeDispose(Node*head,infolist(*arcs)[MAX_VERTEX_NUM])O(n)O(n)voidtrainedit(ALGraph*G)O(1)O(1)voidTransferDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1)O(n)O(n)voidUserDemand(ALGraphG)O(1)O(1)voidVisitTimeTree(TimeTreep)O(n)O(n)⑶經(jīng)驗(yàn)和體會(huì):經(jīng)過(guò)本次課程設(shè)計(jì),我學(xué)到了一種程序設(shè)計(jì)方法,就是結(jié)構(gòu)化程序設(shè)計(jì)方法,在程序設(shè)計(jì)過(guò)程中,我嘗試按如下方法進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì):(1)自頂向下;(2)逐步細(xì)化;(3)模塊化設(shè)計(jì)(4)結(jié)構(gòu)化編碼。這種設(shè)計(jì)方法的過(guò)程是將問(wèn)題求解由抽象逐步具體化的過(guò)程,而且,用這種方法便于驗(yàn)證算法的正確性。本次課程設(shè)計(jì)所使用的是較為復(fù)雜的抽象數(shù)據(jù)類(lèi)型——圖,而且在弧的基礎(chǔ)上增加了許多信息,如添加了時(shí)間,費(fèi)用等等,這無(wú)疑給編程加大了難度,同時(shí)也是相當(dāng)?shù)木哂刑魬?zhàn)性。在編程的過(guò)程中,我用到了全局?jǐn)?shù)組,我將數(shù)組放在工程的頭文件里面,編譯的時(shí)候報(bào)錯(cuò),說(shuō)是多重定義。最終放棄了創(chuàng)立工程,而選擇了單個(gè)文件進(jìn)行編譯和運(yùn)行,結(jié)果順利經(jīng)過(guò)。同時(shí),在文件操作方面我也曾遇到問(wèn)題,就是在程序?qū)ξ募M(jìn)行讀取的時(shí)候報(bào)錯(cuò),無(wú)法讀取文件,最后查詢有關(guān)C的工具書(shū),原來(lái)是文件路徑問(wèn)題,借助工具書(shū)最終解決了文件操作方面的問(wèn)題??傊?,這次課程設(shè)計(jì)是對(duì)這一個(gè)學(xué)期以來(lái)對(duì)數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)成果的一個(gè)驗(yàn)證,同時(shí)也是理論與實(shí)踐很好的結(jié)合,既對(duì)學(xué)過(guò)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行了鞏固,也對(duì)我的編程能力奠定了堅(jiān)實(shí)的基礎(chǔ)。五.用戶使用說(shuō)明:打開(kāi)并運(yùn)行程序,按任意鍵進(jìn)入操作主界面,按提示進(jìn)行相關(guān)操作;按“1”進(jìn)入管理員界面,按“2”進(jìn)入用戶咨詢界面,按“3”顯示交通系統(tǒng),按“4”則退出。進(jìn)入管理員界面可鍵入“1”初始化交通系統(tǒng),并選擇文檔初始化方式(如果是第一次使用該系統(tǒng)建議使用文檔初始化交通系統(tǒng),免得自己進(jìn)行繁冗的初始化操作)。其余可按提示進(jìn)行相關(guān)操作,不難掌握。進(jìn)入用戶咨詢界面,可根據(jù)用戶需要進(jìn)行相關(guān)的選擇,或是選擇“1”(最少旅行費(fèi)用);或是選擇“2”(最少旅行時(shí)間),又或者是選擇“3”(最少旅行中轉(zhuǎn)次數(shù))等。進(jìn)入顯示交通系統(tǒng)界面,根據(jù)用戶選擇則可顯示城市、飛機(jī)航班、列車(chē)車(chē)次等信息?;蛘叻祷厣弦患?jí)菜單。六.附錄——源程序#defineMAX_VERTEX_NUM18#defineNULL0#defineMAX_ARC_SIZE100#defineMAX_ROUTE_NUM5#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#defineFalse0#defineTrue1#defineINFINITY10000typedefstruct{ intnumber; floatexpenditure;intbegintime[2];intarrivetime[2];}Vehide;typedefstruct{ Vehidestata[MAX_ROUTE_NUM];intlast;}infolist;typedefstructArcNode{ intadjvex; structArcNode*nextarc;infolistinfo;}ArcNode;typedefstructVNode{ charcityname[10]; ArcNode*planefirstarc,*trainfirstarc;}VNode,AdjList[MAX_VERTEX_NUM];typedefstruct{ AdjListvertices;intvexnum,planearcnum,trainarcnum;}ALGraph;typedefstructNode{ intadjvex;introute;structNode*next;}Node;typedefstructQNode{ intadjvex;structQNode*next;}QNode;typedefstruct{ QNode*front;QNode*rear;}LinkQueue;typedefstructTimeNode{ intadjvex;introute;intbegintime[2];intarrivetime[2];structTimeNode*child[MAX_ROUTE_NUM];}TimeNode,*TimeTree;structarc{ intco;charvt[10];charvh[10];intbt[2];intat[2];floatmo;}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];voidAdminister(ALGraph*G);voidcityedit(ALGraph*G);voidCopyTimeTree(TimeTreep,TimeTreeq);voidcreatecityfile();voidCreateGraph(ALGraph*G);voidcreateplanefile();voidCreateTimeTree(TimeTreep,inti,intj,LinkQueue*Q,infolist(*arcs)[MAX_VERTEX_NUM]);voidcreatetrainfile();intDeleteplaneArc(ALGraph*G);voidDeleteQueue(LinkQueue*Q,int*x);intDeletetrainArc(ALGraph*G);voidDeleteVertex(ALGraph*G);voidDemandDispose(intn,ALGraphG);voidDestoryTimeTree(TimeTreep);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);voidMinTime(infolistarcs,int*time,int*route);voidPrintGraph(ALGraph*G);intsave(ALGraph*G);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);voidTransferDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraphG,intv0,intv1);voidUserDemand(ALGraphG);voidVisitTimeTree(TimeTreep);intmain(){ALGraphG;inti;printf("\n\n\n\n\n\n\n********************************************************************************\n");printf("********************************************************************************\n");printf("*~*~*~*~*~學(xué)院:信息科學(xué)與技術(shù)學(xué)院~*~*~*~*~*\n");printf("*~*~*~*~*~專業(yè):通信工程~*~*~*~*~*\n");printf("*~*~*~*~*~姓名:~*~*~*~*~*\n");printf("*~*~*~*~*~學(xué)號(hào):0~*~*~*~*~*\n");printf("********************************************************************************\n");printf("********************************************************************************\n");printf("請(qǐng)按任何鍵以繼續(xù)……");getchar();system("cls");printf("\n\n\n\n\n\n\n請(qǐng)選擇程序功能:\n");printf("*************************************\n");printf("**1=管理員管理**\n");printf("**2=用戶咨詢**\n");printf("**3=顯示交通系統(tǒng)**\n");printf("**4=退出**\n");printf("*************************************\n");printf("選擇?");scanf("%d",&i);getchar();while(i!=4){ switch(i) { case1:Administer(&G); break; case2:UserDemand(G); break; case3:PrintGraph(&G); break; } system("cls"); printf("\n\n\n\n\n\n\n\n請(qǐng)選擇程序功能:\n"); printf("*************************************\n");printf("**1=管理員管理**\n");printf("**2=用戶咨詢**\n");printf("**3=顯示交通系統(tǒng)**\n");printf("**4=退出**\n");printf("*************************************\n"); printf("選擇?"); scanf("%d",&i); getchar();}return1;}voidAdminister(ALGraph*G){ inti; system("cls"); printf("\n\n\n\n\n\n\n\n請(qǐng)選擇管理項(xiàng)目:\n");printf("*************************************\n");printf("**1=初始化交通系統(tǒng)**\n");printf("**2=城市編輯**\n");printf("**3=飛機(jī)航班編輯**\n");printf("**4=列車(chē)車(chē)次編輯**\n");printf("**5=返回上一級(jí)菜單**\n");printf("*************************************\n");printf("選擇?");scanf("%d",&i);getchar(); while(i!=5) { switch(i) { case1:initgraph(G); break;case2:cityedit(G);break;case3:flightedit(G);break;case4:trainedit(G);break; } system("cls");printf("\n\n\n\n\n\n\n\n\n請(qǐng)選擇管理項(xiàng)目:\n");printf("*************************************\n");printf("**1=初始化交通系統(tǒng)**\n");printf("**2=城市編輯**\n");printf("**3=飛機(jī)航班編輯**\n");printf("**4=列車(chē)車(chē)次編輯**\n");printf("**5=返回上一級(jí)菜單**\n");printf("*************************************\n");printf("選擇?");scanf("%d",&i);getchar(); }}voidinitgraph(ALGraph*G){ inti;system("cls");printf("\n\n\n\n\n\n\n\n\n請(qǐng)選擇初始化方式:\n");printf("**************************************\n");printf("**1=鍵盤(pán)**\n");printf("**2=文檔**\n");printf("**************************************\n");printf("選擇?");scanf("%d",&i);getchar();switch(i) { case1:createcityfile();createplanefile();createtrainfile();CreateGraph(G);break; case2:CreateGraph(G);break; }}voidcreatecityfile(){ inti=0;intj;charflag='y';FILE*fp;printf("\n請(qǐng)輸入城市名稱的信息:\n");while(flag=='y'||flag=='Y') { printf("城市名稱:"); gets(city[i]); i++; printf("繼續(xù)輸入?(Y/N)"); scanf("%c",&flag);getchar(); } printf("\n");if((fp=fopen("city.txt","wb"))==NULL) { printf("無(wú)法打開(kāi)文件!\n"); return; } for(j=0;j<i;j++) fprintf(fp,"%10s",city[j]);fclose(fp);}voidcreateplanefile(){ intcode,bt[2],at[2];floatmoney;inti;intcount;charvt[10],vh[10],flag;FILE*fp;flag='y';count=0;while(flag=='Y'||flag=='y') { printf("請(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(); } 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("plane.txt","wb"))==NULL) printf("\n無(wú)法打開(kāi)文件!\n"); fprintf(fp,"%d",count); for(i=0;i<count;i++) if(fwrite(&a[i],sizeof(structarc),1,fp)!=1) printf("\n文件寫(xiě)入錯(cuò)誤!\n"); fclose(fp);}voidcreatetrainfile(){ intcode,bt[2],at[2];floatmoney;inti;intcount;charvt[10],vh[10],flag;FILE*fp;flag='y';count=0;while(flag=='y'||flag=='Y') { printf("請(qǐng)輸入列車(chē)車(chē)次的信息:\n");printf("列車(chē)車(chē)次編號(hào):");scanf("%d",&code);getchar();printf("起始城市:");gets(vt);printf("目的城市:");gets(vh);printf("車(chē)次費(fèi)用:");scanf("%f",&money);getchar();printf("發(fā)車(chē)時(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)文件!\n");fprintf(fp,"%d",count);for(i=0;i<count;i++) if(fwrite(&a[i],sizeof(structarc),1,fp)!=1) printf("\n文件寫(xiě)入錯(cuò)誤!\n"); fclose(fp);}intLocateVertex(ALGraph*G,char*v){ intj,k;j=-1;for(k=0;k<G->vexnum;k++)if(strcmp(G->vertices[k].cityname,v)==0) { j=k;break; } return(j);}voidCreateGraph(ALGraph*G){ inti,j,k;intarc_num;intcount1,count2;intm,t;ArcNode*p,*q;FILE*fp;i=0;if((fp=fopen("city.txt","rb"))==NULL) { printf("\n無(wú)法打開(kāi)文件!\n");return; } while(!feof(fp)) { fscanf(fp,"%10s",city[i]);i++; } fclose(fp);j=0;while(j<i) { strcpy(G->vertices[j].cityname,city[j]);G->vertices[j].planefirstarc=NULL;G->vertices[j].trainfirstarc=NULL;j++; } G->vexnum=i;if((fp=fopen("plane.txt","rb"))==NULL) printf("\n無(wú)法打開(kāi)文件!\n"); k=0;fscanf(fp,"%d",&count1);while(k<count1) { if(fread(&a[k],sizeof(structarc),1,fp)!=1) printf("\n文件讀入錯(cuò)誤!\n");k++; } fclose(fp);k=0;arc_num=0; while(k<count1) { i=LocateVertex(G,a[k].vt);j=LocateVertex(G,a[k].vh);q=G->vertices[i].planefirstarc;m=0; while(q!=NULL) { if(q->adjvex==j) { t=q->info.last+1;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));p->adjvex=j;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;arc_num++; } k++; } G->planearcnum=arc_num;if((fp=fopen("train.txt","rb"))==NULL) { printf("\n無(wú)法打開(kāi)文件!\n");return; } k=0;fscanf(fp,"%d",&count2);while(k<count2) { if(fread(&a[k],sizeof(structarc),1,fp)!=1) printf("\n文件讀入錯(cuò)誤!\n");k++; } fclose(fp);k=0;arc_num=0;while(k<count2) { i=LocateVertex(G,a[k].vt);j=LocateVertex(G,a[k].vh);q=G->vertices[i].trainfirstarc;m=0;while(q!=NULL) { if(q->adjvex==j) { t=q->info.last+1;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));p->adjvex=j;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;arc_num++; } k++; } G->trainarcnum=arc_num;}intsave(ALGraph*G){ 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)文件!\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)文件!\n");return0; } i=0;fprintf(fp,"%d",k);while(i<k) { if(fwrite(&a[i],sizeof(structarc),1,fp)!=1) printf("\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)文件!\n"); return0; } i=0;fprintf(fp,"%d",k);while(i<k) { if(fwrite(&a[i],sizeof(structarc),1,fp)!=1) printf("\n文件寫(xiě)入錯(cuò)誤!\n"); i++; } fclose(fp);return1;}voidcityedit(ALGraph*G){ inti; printf("\n請(qǐng)選擇城市編輯項(xiàng)目:\n");printf("1=增加城市\(zhòng)n2=刪除城市\(zhòng)n");pr
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版裝修公司抹灰施工合同范本
- 燃?xì)夤艿婪浪┕ず献鲄f(xié)議
- 環(huán)保工程承包管理合同
- 商務(wù)住宅租賃協(xié)議范本
- 北京溫泉度假村租賃協(xié)議
- 體育館內(nèi)部裝修協(xié)議
- 2024空調(diào)安裝服務(wù)合同
- 圖書(shū)館場(chǎng)地平整施工合同范本
- 河堤加固錨桿施工合同
- 建筑規(guī)劃甲方與施工方合同范本
- Unit4 What can you do Part B read and write (說(shuō)課稿)-2024-2025學(xué)年人教PEP版英語(yǔ)五年級(jí)上冊(cè)
- 2024年度員工試用期勞動(dòng)合同模板(含保密條款)3篇
- DB23-T 3840-2024非煤礦山隱蔽致災(zāi)因素普查治理工作指南
- 2024年江蘇省徐州市中考化學(xué)真題卷及答案解析
- 機(jī)關(guān)事業(yè)單位財(cái)務(wù)管理制度(六篇)
- 人教版六年級(jí)上冊(cè)數(shù)學(xué)第八單元數(shù)學(xué)廣角數(shù)與形單元試題含答案
- 叉車(chē)租賃合同模板
- 河道旅游開(kāi)發(fā)合同
- 住房公積金稽核審計(jì)工作方案例文(4篇)
- 口腔門(mén)診醫(yī)療風(fēng)險(xiǎn)規(guī)避
- 情人合同范例
評(píng)論
0/150
提交評(píng)論