603639386数据结构课程设计报告全国交通咨询模拟系统

上传人:仙*** 文档编号:32030597 上传时间:2021-10-13 格式:DOC 页数:38 大小:326KB
收藏 版权申诉 举报 下载
603639386数据结构课程设计报告全国交通咨询模拟系统_第1页
第1页 / 共38页
603639386数据结构课程设计报告全国交通咨询模拟系统_第2页
第2页 / 共38页
603639386数据结构课程设计报告全国交通咨询模拟系统_第3页
第3页 / 共38页
资源描述:

《603639386数据结构课程设计报告全国交通咨询模拟系统》由会员分享,可在线阅读,更多相关《603639386数据结构课程设计报告全国交通咨询模拟系统(38页珍藏版)》请在装配图网上搜索。

1、数据结构课程设计报告题 目: 全国交通咨询模拟系统 院 (系): 计算机工程学院 专 业: 嵌入式系统开发与设计 班 级: 嵌入式1091 学 生: 指导教师: 2011年 1月36目 录一、设计目的1二、设计内容1三、程序设计步骤2四、调试分析33五、测试结果33六、课程设计小结36一、设计目的1实习目的通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。二、设计内容1、系统名称:航空客运订票系统 设计、实现一个全国大城市间的交通咨询程序,为旅客提供三种最优决策方案:

2、(1)时间最短(2)费用最小(3)中转次数最少,以使上述业务可以借助计算机来完成。2、要求:该程序所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。此程序规定:(1) 在程序中输入城市名称时,需输入10个字母以内的字母串;输入列车或飞机编号时需输入一个整型数据;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入两个整型数据(以hh:mm的形式);在选择功能时,应输入与所选功能对应的一个整型数据。(2)程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班

3、机到何地。(3)程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。三、程序设计步骤全国交通咨询模拟问题描述:处于不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能的短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。 #include#include #include #define ERR 0 #define OK 1 #define Dij_MAXN 33 #define MAX_VERTE

4、X_NUM 31 #define MAX_STRING_NUM 10 #define MAX_TRAFFIC_NUM 10 const char CityFile =E:city.txt; const char TrainFile =E:train.txt; const char FlightFile =E:flight.txt; typedef short int CityType; typedef struct TrafficNode char nameMAX_STRING_NUM; /班次 int StartTime,StopTime; /起止时间 int EndCity; /该有向边指

5、向的顶点在数组中的位置,即该城市编号 int Cost; /票价 TrafficNodeDat; typedef struct VNode CityType city; int TrainNum,FlightNum; /标记下面Train数组和Flight数组里元素个数 TrafficNodeDat TrainMAX_TRAFFIC_NUM; /数组成员为结构体,记录了到达城市、起止时间、票价和班次 TrafficNodeDat FlightMAX_TRAFFIC_NUM; / int Cost; /遍历时到达该城市的耗费(时间或者费用) VNodeDat; typedef struct PN

6、ode int City; int TraNo; PNodeDat; VNodeDat AdjListMAX_VERTEX_NUM; /System Info char CityNameMAX_VERTEX_NUMMAX_STRING_NUM; /城市名,采用第一下标为该城市在本程序中的编号 int CityNum; /城市数目 PNodeDat PathMAX_VERTEX_NUM; /存储临时最小时间路径 PNodeDat MinPathMAX_VERTEX_NUM; /存储搜索到当前的最小时间路径 int MinTime,StartTime; int curPath; /= int Sh

7、owMenu() printf(n*MENU*n); printf(1: 添加城市n2: 删除城市n3: 添加交通路线n4: 删除交通路线n5: 查询最小费用路线n6: 查询最快路线n0: 退出); printf(n*n); printf(nType In Your Command:); return 1; int SeekCity (char *name) int i; for (i=0;iCityNum;i+) if (strcmp(name,CityNamei)=0) return i; return -1; /=Edit Info= int SaveSysInfo() FILE *fp

8、;int i,j,total; fp=fopen(CityFile,w); fprintf(fp,%dn,CityNum); for (i=0;iCityNum;i+) fprintf(fp,%sn,CityNamei); fclose(fp);total=0; fp=fopen(TrainFile,w); for (i=0;iCityNum;i+) total+=AdjListi.TrainNum; fprintf(fp,%dn,total); for (i=0;iCityNum;i+) for (j=0;jAdjListi.TrainNum;j+) fprintf(fp,%s %s %s

9、, AdjListi.Trainj.name, CityNamei, CityNameAdjListi.Trainj.EndCity); fprintf(fp,%2d:%2d %2d:%2d %dn, AdjListi.Trainj.StartTime/60, AdjListi.Trainj.StartTime%60, AdjListi.Trainj.StopTime/60, AdjListi.Trainj.StopTime%60, AdjListi.Trainj.Cost); fclose(fp);total=0; fp=fopen(FlightFile,w); for (i=0;iCity

10、Num;i+) total+=AdjListi.FlightNum; fprintf(fp,%dn,total); for (i=0;iCityNum;i+) for (j=0;jAdjListi.FlightNum;j+) fprintf(fp,%s %s %s , AdjListi.Flightj.name, CityNamei, CityNameAdjListi.Flightj.EndCity); fprintf(fp,%2d:%2d %2d:%2d %dn, AdjListi.Flightj.StartTime/60, AdjListi.Flightj.StartTime%60, Ad

11、jListi.Flightj.StopTime/60, AdjListi.Flightj.StopTime%60, AdjListi.Flightj.Cost); fclose(fp);return 1; int InsertCity (char *Name) strcpy(CityNameCityNum,Name); AdjListCityNum.city=CityNum; AdjListCityNum.FlightNum=0; AdjListCityNum.TrainNum=0; CityNum+; return 1; int DelCity (char *Name) int city,i

12、,j; city=SeekCity(Name); for (i=city;iCityNum-1;i+) strcpy(CityNamei,CityNamei+1); AdjListi.FlightNum=AdjListi+1.FlightNum; AdjListi.TrainNum=AdjListi+1.TrainNum; for (j=0;jAdjListi.FlightNum;j+) AdjListi.Flightj.Cost=AdjListi+1.Flightj.Cost; AdjListi.Flightj.EndCity=AdjListi+1.Flightj.EndCity; strc

13、py(AdjListi.Flightj.name,AdjListi+1.Flightj.name); AdjListi.Flightj.StartTime=AdjListi+1.Flightj.StartTime; AdjListi.Flightj.StopTime=AdjListi+1.Flightj.StopTime; CityNum-; return 1; int InsertTrain (char *train,char *StartCity,char *EndCity,int StartTime,int EndTime,int cost) int i,j; i=SeekCity(St

14、artCity); j=SeekCity(EndCity); AdjListi.TrainAdjListi.TrainNum.Cost=cost; AdjListi.TrainAdjListi.TrainNum.EndCity=j; AdjListi.TrainAdjListi.TrainNum.StartTime=StartTime; AdjListi.TrainAdjListi.TrainNum.StopTime=EndTime; strcpy(AdjListi.TrainAdjListi.TrainNum.name,train); AdjListi.TrainNum+; return 1

15、; int InsertFlight(char *flight,char *StartCity,char *EndCity,int StartTime,int EndTime,int cost) int i,j; i=SeekCity(StartCity); j=SeekCity(EndCity); AdjListi.FlightAdjListi.FlightNum.Cost=cost; AdjListi.FlightAdjListi.FlightNum.EndCity=j; AdjListi.FlightAdjListi.FlightNum.StartTime=StartTime; AdjL

16、isti.FlightAdjListi.FlightNum.StopTime=EndTime; strcpy(AdjListi.TrainAdjListi.FlightNum.name,flight); AdjListi.FlightNum+; return 1; int DelPath (char *name) int i,j,flag=0; for (i=0;iCityNum;i+) for (j=0;jAdjListi.FlightNum;j+) if (strcmp(AdjListi.Flightj.name,name)=0) flag=1;break; if (flag) for (

17、;jAdjListi.FlightNum-1;j+) AdjListi.Flightj.Cost=AdjListi.Flightj+1.Cost; AdjListi.Flightj.EndCity=AdjListi.Flightj+1.EndCity; strcpy(AdjListi.Flightj.name,AdjListi.Flightj+1.name); AdjListi.Flightj.StartTime=AdjListi.Flightj+1.StartTime; AdjListi.Flightj.StopTime=AdjListi.Flightj+1.StopTime; AdjLis

18、ti.FlightNum-;break; for (j=0;jAdjListi.TrainNum;j+) if (strcmp(AdjListi.Trainj.name,name)=0) flag=1;break; if (flag) for (;j=0) cost+=matxPreCityjj; tracki+=j=PreCityj; printf(nTrack Way:); if (!TravelType) for(i-;i0;i-) printf(n%s:,CityNametracki); end=tracki-1;min=32767; for (k=0;kAdjListtracki.T

19、raink.Cost) min=AdjListtracki.Traink.Cost; tmp=k; printf(%s,AdjListtracki.Traintmp.name); printf(%2d:%2d-%2d:%2d,AdjListtracki.Traintmp.StartTime/60,AdjListtracki.Traintmp.StartTime%60,AdjListtracki.Traintmp.StopTime/60,AdjListtracki.Traintmp.StopTime%60); else for(i-;i0;i-) printf(n%s:,CityNametrac

20、ki); end=tracki-1;min=32767; for (k=0;kAdjListtracki.Flightk.Cost) min=AdjListtracki.Flightk.Cost; tmp=k; printf(%s,AdjListtracki.Flighttmp.name); printf(%2d:%2d-%2d:%2d,AdjListtracki.Flighttmp.StartTime/60,AdjListtracki.Flighttmp.StartTime%60,AdjListtracki.Flighttmp.StopTime/60,AdjListtracki.Flight

21、tmp.StopTime%60); printf(n%s: DESTINATION!,CityNametrack0); printf(nMin Cost : %dn,cost); void Dijkstra(int matxDij_MAXNDij_MAXN,int p_start,int p_end,int TravelType) int PreCityDij_MAXN; /PreCityi=-1,never used; /PreCity0,the precity of City i int i,j,min,pre,pos; for (i=0;iCityNum;i+) PreCityi=-1;

22、 PreCityp_start=-2; while (PreCityp_end=-1) min=-1; for (i=0;iCityNum;i+) if (PreCityi!=-1) for (j=0;j0&(min0|matxijmin) pre=i;pos=j;min=matxij; PreCitypos=pre; Dijkstra_Output(matx,PreCity,p_end,TravelType); int InitSysData () FILE *fp;int i,j,hour,minute,num,cost; char stmp1MAX_STRING_NUM; char st

23、mp2MAX_STRING_NUM; char stmp3MAX_STRING_NUM; fp=fopen(CityFile,r); if (!fp) printf(nError:Cannot Open City File.n); return -1; fscanf(fp,%d,&CityNum); for (i=0;iCityNum;i+) fscanf(fp,%s,&CityNamei); AdjListi.city=i; AdjListi.TrainNum=0; AdjListi.FlightNum=0; fclose(fp); fp=fopen(TrainFile,r); if (!f

24、p) printf(nError:Cannot Open Train File.n); return -1; fscanf(fp,%d,&num); for (i=0;inum;i+) fscanf(fp,%s,&stmp1); fscanf(fp,%s,&stmp2); fscanf(fp,%s,&stmp3); j=SeekCity(stmp2); AdjListj.TrainAdjListj.TrainNum.EndCity=SeekCity(stmp3); strcpy(AdjListj.TrainAdjListj.TrainNum.name,stmp1); fscanf(fp,%d:

25、%d,&hour,&minute); AdjListj.TrainAdjListj.TrainNum.StartTime=hour*60+minute; fscanf(fp,%d:%d,&hour,&minute); AdjListj.TrainAdjListj.TrainNum.StopTime=hour*60+minute; fscanf(fp,%d,&cost); AdjListj.TrainAdjListj.TrainNum.Cost=cost; AdjListj.TrainNum+; fclose(fp); fp=fopen(FlightFile,r); if (!fp) print

26、f(nError:Cannot Open Flight File.n); return -1; fscanf(fp,%d,&num); for (i=0;iCurTime-StartTime) for (i=0;i=curPathNo;i+) MinPathi.City=Pathi.City; MinPathi.TraNo=Pathi.TraNo; curPath=curPathNo; MinTime=CurTime-StartTime; else curPathNo+; PathcurPathNo.City=City; if (!TravelType) for (i=0;i=(CurTime

27、%1440)&(AdjListCity.Traini.StopTime+(CurTime/1440)*1440-StartTimeMinTime) PathcurPathNo.TraNo=i; SearchMinTime(AdjListCity.Traini.EndCity,EndCity,AdjListCity.Traini.StopTime+(CurTime/1440)*1440,curPathNo,TravelType); if (AdjListCity.Traini.StartTime(CurTime%1440)&(AdjListCity.Traini.StopTime+(CurTim

28、e/1440)*1440-StartTimeMinTime) PathcurPathNo.TraNo=i; SearchMinTime(AdjListCity.Traini.EndCity,EndCity,AdjListCity.Traini.StopTime+(CurTime/1440+1)*1440,curPathNo,TravelType); else for (i=0;i=CurTime)&(AdjListCity.Flighti.StopTime+(CurTime/1440)*1440-StartTimeMinTime) PathcurPathNo.TraNo=i; SearchMi

29、nTime(AdjListCity.Flighti.EndCity,EndCity,AdjListCity.Flighti.StopTime+(CurTime/1440)*1440,curPathNo,TravelType); if (AdjListCity.Flighti.StartTimeCurTime)&(AdjListCity.Flighti.StopTime+(CurTime/1440)*1440-StartTimeMinTime) PathcurPathNo.TraNo=i; SearchMinTime(AdjListCity.Flighti.EndCity,EndCity,Adj

30、ListCity.Flighti.StopTime+(CurTime/1440+1)*1440,curPathNo,TravelType); return 1; int CalcMinTime (int StartCity,int EndCity,int TravelType) int i; MinTime=32767;curPath=0; Path0.City=StartCity; if (!TravelType) for (i=0;iAdjListStartCity.TrainNum;i+) Path0.TraNo=i; StartTime=AdjListStartCity.Traini.

31、StartTime; SearchMinTime(AdjListStartCity.Traini.EndCity,EndCity,AdjListStartCity.Traini.StopTime,0,TravelType); else for (i=0;iAdjListStartCity.FlightNum;i+) Path0.TraNo=i; StartTime=AdjListStartCity.Flighti.StartTime; SearchMinTime(AdjListStartCity.Flighti.EndCity,EndCity,AdjListStartCity.Flighti.

32、StopTime,0,TravelType); if (MinTime=32767) printf(nNo access to that destination!); return 0; / if (!TravelType) / StartTime=AdjListStartCity.TrainMinPath0.TraNo.StartTime; / else / StartTime=AdjListStartCity.FlightMinPath0.TraNo.StartTime; printf(nPath:n); for (i=0;i=curPath;i+) if (!TravelType) pr

33、intf(%s : %s,CityNameMinPathi.City,AdjListMinPathi.City.TrainMinPathi.TraNo.name); else printf(%s : %s,CityNameMinPathi.City,AdjListMinPathi.City.FlightMinPathi.TraNo.name); printf( %2d:%2d-%2d:%2dn,AdjListMinPathi.City.TrainMinPathi.TraNo.StartTime/60,AdjListMinPathi.City.TrainMinPathi.TraNo.StartT

34、ime%60,AdjListMinPathi.City.TrainMinPathi.TraNo.StopTime/60,AdjListMinPathi.City.TrainMinPathi.TraNo.StopTime%60); printf(%s: DESTINATION!,CityNameEndCity); printf(nTime Cost: %2d:%2d,MinTime/60,MinTime%60); return 1; int CalcMinCost (int StartCity,int EndCity,int TravelType) int maDij_MAXNDij_MAXN;

35、 int i,j,min,end; for (i=0;iCityNum;i+) for (j=0;jCityNum;j+) maij=-1; if (TravelType=0) for (i=0;iCityNum;i+) min=32767;j=0; while (jAdjListi.TrainNum) min=32767; end=AdjListi.Trainj.EndCity; while (end=AdjListi.Trainj.EndCity&jAdjListi.TrainNum) if (AdjListi.Trainj.Costmin) min=AdjListi.Trainj.Cos

36、t; j+; maiend=min; else for (i=0;iCityNum;i+) min=32767;j=0; while (jAdjListi.FlightNum) min=32767; end=AdjListi.Flightj.EndCity; while (end=AdjListi.Flightj.EndCity&jAdjListi.FlightNum) if (AdjListi.Flightj.Costmin) min=AdjListi.Flightj.Cost; j+; maiend=min; Dijkstra(ma,StartCity,EndCity,TravelType

37、); return 1; /=Main ()= int main() char nameMAX_STRING_NUM; char s_cityMAX_STRING_NUM; char e_cityMAX_STRING_NUM; int Command,cost; int startcity,endcity,traveltype; int s_hour,s_minute,e_hour,e_minute; while (1) ShowMenu(); scanf(%d,&Command); switch (Command) case 0: /退出 return 0; case 1: /添加城市 In

38、itSysData(); printf(n输入城市名:); scanf(%s,&name); InsertCity(name); SaveSysInfo(); printf(System Info Save OK!n); break; case 2: /删除城市 InitSysData(); printf(n输入城市名:); scanf(%s,&name); DelCity(name); SaveSysInfo(); printf(System Info Save OK!n); break; case 3: /添加路线 InitSysData(); printf(起始站城市名:); scanf

39、(%s,&s_city); printf(终点站城市名:); scanf(%s,&e_city); printf(类型(列车0,航班1):); scanf(%d,&traveltype); printf(输入列车/飞机班次:); scanf(%s,&name); printf(起始时刻(00:00,24小时制):); scanf(%2d:%2d,&s_hour,&s_minute); printf(到达时刻(00:00,24小时制):); scanf(%2d:%2d,&e_hour,&e_minute); printf(票价:);scanf(%d,&cost); if (traveltype)

40、 InsertFlight(name,s_city,e_city,s_hour*60+s_minute,e_hour*60+e_minute,cost); else InsertTrain(name,s_city,e_city,s_hour*60+s_minute,e_hour*60+e_minute,cost); SaveSysInfo(); printf(System Info Save OK!n); break; case 4: /删除路线 InitSysData(); printf(输入班次:); scanf(%s,&name); DelPath(name); SaveSysInfo(

41、); printf(System Info Save OK!n); break; case 5: /最小耗费 InitSysData(); printf(n起始城市:); scanf(%s,&name); startcity=SeekCity(name); if (startcity0) printf(Error City Name:No such city!n); break; printf(终点城市:); scanf(%s,&name); endcity=SeekCity(name); if (endcity0) printf(Error City Name:No such city!n)

42、; break; printf(类型(列车0,航班1) :); scanf(%d,&traveltype); if (traveltype!=0&traveltype!=1) printf(Error Input!); break; CalcMinCost(startcity,endcity,traveltype); printf(n); break; case 6: /最短时间路线 InitSysData(); printf(n起始城市:); scanf(%s,&name); startcity=SeekCity(name); if (startcity0) printf(Error Cit

43、y Name:No such city!n); break; printf(终点城市:); scanf(%s,&name); endcity=SeekCity(name); if (endcity. 当我们从键盘输入有关图的顶点及弧的信息后,用显示图的函数验证,DOS中显示的图的信息与从键盘输入的信息相同,表明交通系统可以从键盘正确输入信息.2. 我们事先建立了有关图的3 个文本文件(包括city.txt,plan.txt,train.txt),在交通系统程序中,选择从文本文件输入图的信息后,用显示操作验证,表明文本文件的内容可以正确调入图的结构体中,说明交通系统可以从文本文件中读取信息.3.

44、 当从键盘或文本文件初始化交通图后,测试增加或删除城市结点,增加或删除航班或列车弧,以上各功能都正确.五、测试结果进入演示程序后,即显示主界面为:根据提示,用户输入选项:1、 添加城市2、删除城市:3、添加交通路线:4、删除交通路线:5、查询最小费用路线:6、查询最快路线六、课程设计小结:通过这次课程设计,虽然程序设计和调试的能力有所提升,但最终还是没能独立完成课程设计的课程要求,没能独立做出此次要求的全国交通咨询模拟系统。这次课程设计使我深刻认识到自己专业知识的匮乏,缺乏独立程序设计的能力。通过这次的课程设计也是我认识到了我在程序设计方面的严重不足,以及专业知识的严重匮乏。我的程序设计思想和代码的编写和调试能力在此次课设期间有所提高。这样一种更贴切实际的课程设计,大大的提高了我的学习效率,希望能够在平时教学的时候也能加入一些类似课程设计的程序设计习题。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!