数据结构课程设计报告_第1页
数据结构课程设计报告_第2页
数据结构课程设计报告_第3页
数据结构课程设计报告_第4页
数据结构课程设计报告_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

年4月19日数据结构课程设计报告文档仅供参考数据结构课程设计报告题目:全国交通咨询模拟学院信息专业计算机科学与技术年级班别计科0902学号学生姓名陈佳丽指导教师章志勇一.需求分析1.程序设计任务:从中国地图平面图中选取部分城市,抽象为程序所需要图的结点,并以城市间的列车路线和飞机路线,作为图结点中的弧信息,设计一个全国交通咨询模拟系统。利用该系统实现两种最优决策:最快到达或最省钱到达。2.明确规定:(1)输入形式和输入值的范围:每条飞机弧或者火车弧涉及的信息量很多,包括:起始城市、目的城市、出发时间、到达时间、班次以及费用。作为管理员要输入的信息包括以上信息,而作为用户或者客户,要输入的信息有起始城市和目的城市,并选择何种最优决策。(2)输出形式:按用户提供的最优决策的不同而输出不同的信息,其中输出的所搭飞机或火车的班次及其起始地点和终点、起始时间和出发时间还有相关的最优信息,比如最快经多少时间到达、最省钱多少钱到达和最少经多少中转站到达。(3)程序所能达到的功能a.该系统有供用户选择的菜单和交互性。能够对城市、列车车次和飞机航班进行编辑,添加或删除。b.建立一个全国交通咨询系统,该系统具备自动查找任意两城市间铁路、飞机交通的最短路径和最少花费及中转次数最少等功能。c.初始化交通系统有两种方式,键盘和文档。二.设计概要1.抽象数据类型本程序运用了关于图这种数据结构。ADTGraph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。数据关系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是图的顶点集,VR是图中弧的集合。操作结果:按V和VR的定义构造图G。DestroyGraph(&G);初始条件:图G存在。操作结果:销毁图G。LocateVet(G,u);初始条件:图G存在,u和G中顶点有相同的特征。操作结果:若G中存在顶点u,则返回该顶点在图中的位置,否则返回其它信息。GetVex(G,v);初始条件:图G存在,v是G中某个顶点。操作结果:返回v的值。PutVex(&G,v,value);初始条件:图G存在,v是G中某个顶点。操作结果:对v赋值value。FirstAdjVex(G,v);初始条件:图G存在,v是G中某个顶点。操作结果:返回v的第一个邻接顶点。若顶点在G中没有邻接顶点,则返回”空”。NextAdjVex(G,v,w);初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点,操作结果:返回v的(相对于w的)下一个邻接顶点。若w是v的最后一个邻接点,则返回”空”。InsertVex(&G,v);初始条件:图G存在,v和图中顶点有相同特征。操作结果:在图G中添加新顶点v。DeleteVex(&G,v);初始条件:图G存在,v是G中某个顶点。操作结果:删除G中顶点v及相关弧。InsertArc(&G,v,w);初始条件:图G存在,v和w是G中两个顶点。操作结果:在G中增添弧<v,w>,若G是无向的则还增加对称弧<w,w>。DeleteArc(&G,v,w);初始条件:图G存在,v和w是G中两个顶点。操作结果:在G中删除弧<v,w>,若G是无向的,则还删除对称弧<w,v>。DFSTraverse(G,Visit());初始条件:图G存在,Visit是顶点的应用函数。操作结果:对图进行深度优先遍历。在遍历过程中对每个顶点调用函数Visit一次且仅一次。一旦visit()失败,则操作失败。BFSTraverse(G,Visit());初始条件:图G存在,Visit是顶点的应用函数。操作结果:对图进行广度优先遍历。在遍历过程中对每个顶点调用函数Visit一次且仅一次。一旦visit()失败,则操作失败。}ADTGraph其它的抽象数据类型定义如下: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);主程序的流程以及各程序模块之间的调用关系退出显示交通系统PrintGraph用户咨询UserDemand管理员管理Administer主函数main()退出显示交通系统PrintGraph用户咨询UserDemand管理员管理Administer主函数main()返回上一级菜单列车车次编辑Administer飞机航班编辑Administer城市编辑cityedit管理员管理Administer返回上一级菜单列车车次编辑Administer飞机航班编辑Administer城市编辑cityedit管理员管理Administer初始化交通系统初始化交通系统initgraph返回上一级菜单最少中转次数TransferDispose最少旅行时间TimeDispose用户咨询UserDemand返回上一级菜单最少中转次数TransferDispose最少旅行时间TimeDispose用户咨询UserDemand最少旅行费用最少旅行费用ExpenditureDisposeUserDemand显示城市显示飞机航班显示列车车次返回上一级菜单显示交通系统PrintGraph显示城市显示飞机航班显示列车车次返回上一级菜单显示交通系统PrintGraph文档键盘初始化交通系统initgraph文档键盘初始化交通系统initgraph删除城市新增城市城市编辑cityedit删除城市新增城市城市编辑cityedit删除航班新增航班飞机航班编辑planeedit删除航班新增航班飞机航班编辑planeedit删除车次新增车次火车列次编辑trainedit删除车次新增车次火车列次编辑trainedit三.详细设计1.主程序伪代码intmain(){界面初始化;输入操作命令;While(”命令”!=”退出”){接受命令(用户输入要实现功能);进入各个处理命令函数;}}2.函数和过程的调用关系图DeleteQueueEnterQueueInitQueueMinTimeTimeTreeDisposeEnterplaneArcDeleteplaneArcEntertrainArcDeletetrainArcTransferDisposeTimeDisposeMinExpenditureExpenditureDisposecreateplanefilecreatetrainfileCreateGraphinitgraphcityeditAdministerPrintGraphEnterVertextraineditDeleteVertexcreatecityfileflighteditDeleteQueueEnterQueueInitQueueMinTimeTimeTreeDisposeEnterplaneArcDeleteplaneArcEntertrainArcDeletetrainArcTransferDisposeTimeDisposeMinExpenditureExpenditureDisposecreateplanefilecreatetrainfileCreateGraphinitgraphcityeditAdministerPrintGraphEnterVertextraineditDeleteVertexcreatecityfileflighteditUserDemandUserDemandMain(Main()InitQueueInitQueueEnterQueueEnterQueueDeleteQueueDeleteQueueCreateTimeTreeCopyTimeTreeTimeTreeDisposeCreateTimeTreeCopyTimeTreeTimeTreeDisposeVisitTimeTreeVisitTimeTreeDestoryTimeTreeDestoryTimeTree四.调试分析:⑴调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析:在调试的过程中碰到了一下问题:a.引用形参应用不当;b.文件操作中遇到读入错误或找不到文件;解决方案:a.对引用形参了解的不是很透彻,导致错误,经过查阅相关书籍如<C++Primer>和请教编程能力较高的人,最终解决问题。b.经过参考谭浩强编著的<C程序设计>中的文件操作,文件格式和相关文件路径的设置,最终解决问题。⑵算法的时空分析(包括基本操作和其它算法的时间复杂度和空间复杂度的分析)和改进设想: 基本操作时间复杂度空间复杂度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)⑶经验和体会:经过本次课程设计,我学到了一种程序设计方法,就是结构化程序设计方法,在程序设计过程中,我尝试按如下方法进行结构化程序设计:(1)自顶向下;(2)逐步细化;(3)模块化设计(4)结构化编码。这种设计方法的过程是将问题求解由抽象逐步具体化的过程,而且,用这种方法便于验证算法的正确性。本次课程设计所使用的是较为复杂的抽象数据类型——图,而且在弧的基础上增加了许多信息,如添加了时间,费用等等,这无疑给编程加大了难度,同时也是相当的具有挑战性。在编程的过程中,我用到了全局数组,我将数组放在工程的头文件里面,编译的时候报错,说是多重定义。最终放弃了创立工程,而选择了单个文件进行编译和运行,结果顺利经过。同时,在文件操作方面我也曾遇到问题,就是在程序对文件进行读取的时候报错,无法读取文件,最后查询有关C的工具书,原来是文件路径问题,借助工具书最终解决了文件操作方面的问题。总之,这次课程设计是对这一个学期以来对数据结构学习成果的一个验证,同时也是理论与实践很好的结合,既对学过的数据结构进行了巩固,也对我的编程能力奠定了坚实的基础。五.用户使用说明:打开并运行程序,按任意键进入操作主界面,按提示进行相关操作;按”1”进入管理员界面,按”2”进入用户咨询界面,按”3”显示交通系统,按”4”则退出。进入管理员界面可键入”1”初始化交通系统,并选择文档初始化方式(如果是第一次使用该系统建议使用文档初始化交通系统,免得自己进行繁冗的初始化操作)。其余可按提示进行相关操作,不难掌握。进入用户咨询界面,可根据用户需要进行相关的选择,或是选择”1”(最少旅行费用);或是选择”2”(最少旅行时间),又或者是选择”3”(最少旅行中转次数)等。进入显示交通系统界面,根据用户选择则可显示城市、飞机航班、列车车次等信息。或者返回上一级菜单。六.测试结果:1.个人信息界面:2.操作主界面:3.管理员界面:4.交通系统初始化方式选择界面:5.城市编辑界面:6.飞机航班编辑:7.列车车次编辑:8.显示交通系统主界面:9.显示城市:10.显示飞机航班:11.显示列车车次:12.用户咨询:13.选择旅行起始城市:14.选择旅行到达城市:15.选择旅行的交通工具:16.最少旅行费用:17.最少旅行时间:18.最少中转次数:七.附录——源程序#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***********************************************************");printf("**********************************************************************");printf("**学院:计算机学院**");printf("**专业:计算机科学与技术**");printf("**班级:计科0902**");printf("**姓名:陈佳丽**");printf("**学号:**");printf("**********************************************************************");printf("**********************************************************************");printf("请按任何键以继续……");getchar();system("cls");printf("\n\n\n\n\n\n\n请选择程序功能:\n");printf("*************************************\n");printf("**1=管理员管理**\n");printf("**2=用户咨询**\n");printf("**3=显示交通系统**\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请选择程序功能:\n"); printf("*************************************\n");printf("**1=管理员管理**\n");printf("**2=用户咨询**\n");printf("**3=显示交通系统**\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请选择管理项目:\n");printf("*************************************\n");printf("**1=初始化交通系统**\n");printf("**2=城市编辑**\n");printf("**3=飞机航班编辑**\n");printf("**4=列车车次编辑**\n");printf("**5=返回上一级菜单**\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请选择管理项目:\n");printf("*************************************\n");printf("**1=初始化交通系统**\n");printf("**2=城市编辑**\n");printf("**3=飞机航班编辑**\n");printf("**4=列车车次编辑**\n");printf("**5=返回上一级菜单**\n");printf("*************************************\n");printf("选择?");scanf("%d",&i);getchar(); }}voidinitgraph(ALGraph*G){ inti;system("cls");printf("\n\n\n\n\n\n\n\n\n请选择初始化方式:\n");printf("**************************************\n");printf("**1=键盘**\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请输入城市名称的信息:\n");while(flag=='y'||flag=='Y') { printf("城市名称:"); gets(city[i]); i++; printf("继续输入?(Y/N)"); scanf("%c",&flag);getchar(); } printf("\n");if((fp=fopen("city.txt","wb"))==NULL) { printf("无法打开文件!\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("请输入飞机航班的信息:\n"); printf("飞机航班编号:"); scanf("%d",&code);getchar();printf("起始城市:");gets(vt);printf("目的城市:");gets(vh);printf("航班费用:");scanf("%f",&money);getchar();printf("起飞时间:");scanf("%d:%d",&bt[0],&bt[1]);getchar(); while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60) { printf("\n时间输入有误,请重新输入\n");scanf("%d:%d",&bt[0],&bt[1]);getchar(); } printf("到达时间:");scanf("%d:%d",&at[0],&at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60) { printf("\n时间输入有误,请重新输入\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("继续输入?(Y/N)");scanf("%c",&flag);getchar();printf("\n"); } if((fp=fopen("plane.txt","wb"))==NULL) printf("\n无法打开文件!\n"); fprintf(fp,"%d",count); for(i=0;i<count;i++) if(fwrite(&a[i],sizeof(structarc),1,fp)!=1) printf("\n文件写入错误!\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("请输入列车车次的信息:\n");printf("列车车次编号:");scanf("%d",&code);getchar();printf("起始城市:");gets(vt);printf("目的城市:");gets(vh);printf("车次费用:");scanf("%f",&money);getchar();printf("发车时间:");scanf("%d:%d",&bt[0],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60) { printf("\n时间输入有误,请重新输入\n");scanf("%d:%d",&bt[0],&bt[1]);getchar(); } printf("到达时间:");scanf("%d:%d",&at[0],&at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60) { printf("\n时间输入有误,请重新输入\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("继续输入?(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;i<count;i++) if(fwrite(&a[i],sizeof(structarc),1,fp)!=1) printf("\n文件写入错误!\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无法打开文件!\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无法打开文件!\n"); k=0;fscanf(fp,"%d",&count1);while(k<count1) { if(fread(&a[k],sizeof(structarc),1,fp)!=1) printf("\n文件读入错误!\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无法打开文件!\n");return; } k=0;fscanf(fp,"%d",&count2);while(k<count2) { if(fread(&a[k],sizeof(structarc),1,fp)!=1) printf("\n文件读入错误!\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错误,无法打开文件!\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无法打开文件!\n");return0; } i=0;fprintf(fp,"%d",k);while(i<k) { if(fwrite(&a[i],sizeof(structarc),1,fp)!=1) printf("\n文件写入错误!\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无法打开文件!\n"); return0; } i=0;fprintf(fp,"%d",k);while(i<k) { if(fwrite(&a[i],sizeof(structarc),1,fp)!=1) printf("\n文件写入错误!\n"); i++; } fclose(fp);return1;}voidcityedit(ALGraph*G){ inti; printf("\n请选择城市编辑项目:\n");printf("1=增加城市\n2=删除城市\n");printf("选择?");scanf("%d",&i);getchar();if(i==1) EnterVertex(G); if(i==2) DeleteVertex(G);}voidEnterVertex(ALGraph*G){ charv[10],c;inti;printf("\n请输入新增城市的名称:");gets(v);i=LocateVertex(G,v);if(i>=0&&i<G->vexnum) { printf("\n错误!此城市已存在\n");return; } else { printf("\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); } else return; }}voidDeleteVertex(ALGraph*G){ inti,j,k,n;charv[10],c;ArcNode*p,*q,*m;printf("\n请输入删除的城市:");gets(v);printf("\n确认?(Y/N)");c=getchar();getchar();if(c=='Y'||c=='y') { n=0;while(n<G->vexnum&&strcmp(G->vertices[n].cityname,v)!=0) n++; if(n==G->vexnum) printf("\n错误!无法找到此城市!\n"); else { i=LocateVertex(G,v);p=G->vertices[i].planefirstarc;while(p!=NULL) { q=p;p=p->nextarc;free(q); } p=G->vertices[i].trainfirstarc;while(p!=NULL) { q=p;p=p->nextarc;free(q); } for(j=i;j<G->vexnum-1;j++) { strcpy(G->vertices[j].cityname,G->vertices[j+1].cityname);G->vertices[j].planefirstarc=G->vertices[j+1].planefirstarc;G->vertices[j].trainfirstarc=G->vertices[j+1].trainfirstarc; } G->vertices[j].planefirstarc=NULL;G->vertices[j].trainfirstarc=NULL;for(k=0;k<G->vexnum-1;k++) { p=G->vertices[k].planefirstarc;while(p!=NULL) { if(p->adjvex>i) { p->adjvex=p->adjvex-1;q=p;p=p->nextarc; } elseif(p->adjvex==i) { if(p==G->vertices[k].planefirstarc) { m=p;G->vertices[k].planefirstarc=p->nextarc;p=p->nextarc;free(m); } else { q->nextarc=p->nextarc;m=p;p=p->nextarc;free(q); } } else { q=p;p=p->nextarc; } } } for(k=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论