免费预览已结束,剩余31页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
各专业全套优秀毕业设计图纸设计题目:7.3.4交通咨询系统设计p160一、设计要求1问题描述根据不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能的短,出门旅行的旅客希望旅费尽可能的少,而老年人则要求中转次数少。模拟一个全国城市之间的咨询交通程序,为旅客提供两种或三种最优的交通路线。2需求分析二、概要设计1主界面设计(图2.1“交通咨询系统”主菜单)2存储结构设计本系统采用图结构类型存储抽象交通咨询系统的信息。typedef struct trafficnodechar namemax_string_num; /班次 /max_string_num最为10int starttime, stoptime; /起止时间 int endcity; /该有向边指向的顶点在数组中的位置,即该城市编号 int cost; /票价 trafficnodedat;typedef struct vnodecitytype city;int trainnum, flightnum; /标记下面train数组和flight数组里元素个数 trafficnodedat trainmax_traffic_num; /数组成员为结构体,记录了到达城市、起止时间、票价和班次 trafficnodedat flightmax_traffic_num;/ int cost; /遍历时到达该城市的耗费(时间或者费用) vnodedat;typedef struct pnodeint city;int trano; pnodedat;3系统功能设计(1)添加城市。添加一个城市的名称(2)删除城市。输入一个城市名称,删除该城市。(3)添加交通路线。输入起始城市、终点城市、航班或火车、车次、起始时间、终点时间和票价(4) 删除交通路线。输入火车或飞机的班次删除该交通路线。(5)查询最小费用路线。输入起始城市、终点城市、航班或火车、车次、起始时间、终点时间查询最小费用路线。三、模块设计1模块设计 无向网操作模块工作区模块主程序模块 (图2.2 模块调用示意图)2系统子程序及功能设计(1)int showmenu()/主菜单(2)void copyright()(3)int seekcity(char *name) /寻找城市(4)int insertcity(char *name) /添加城市(5)int savesysinfo() /向程序输入数据(6)int delcity(char *name) /删除城市(7)int inserttrain(char *train, char *startcity, char *endcity, int starttime, int endtime, int cost)/添加火车路线(8)int insertflight(char *flight, char *startcity, char *endcity, int starttime, int endtime, int cost)/添加飞机航线(9)int delpath(char *name)/删除路线(10)void dijkstra(int matxdij_maxndij_maxn, int p_start, int p_end, int traveltype)(11)int initsysdata()/存储数据(12)int searchmintime(citytype city, citytype endcity, int curtime, int curpathno, int traveltype)/查询最短时间(13)int calcmintime(int startcity, int endcity, int traveltype) /显示最短时间(14)int calcmincost(int startcity, int endcity, int traveltype)/最少花费(15)int main()/主函数3函数主要调用关系图15main()89112754136361223716(图2.3函数主要调用关系图)四、详细设计1数据类型定义(1)全局变量的定义typedef short int citytype;/citytype 定义短整形的变量 typedef struct trafficnodechar namemax_string_num; /班次 /max_string_num最为10int starttime, stoptime; /起止时间 int endcity; /该有向边指向的顶点在数组中的位置,即该城市编号 int cost; /票价 trafficnodedat;typedef struct vnodecitytype city;int trainnum, flightnum; /标记下面train数组和flight数组里元素个数 trafficnodedat trainmax_traffic_num; /数组成员为结构体,记录了到达城市、起止时间、票价和班次 trafficnodedat flightmax_traffic_num;/ int cost; /遍历时到达该城市的耗费(时间或者费用) vnodedat;typedef struct pnodeint city;int trano; pnodedat; 2系统主要子程序详细设计(1)用户工作区模块的设计int showmenu() printf(n|*欢迎使用交通咨询系统*|n);printf(n|-1: 添加城市-|);printf(n|-2: 删除城市-|);printf(n|-3: 添加交通路线-|);printf(n|-4: 删除交通路线-|); printf(n|-5: 查询最小费用路线-|);printf(n|-6: 查询最快路线-|);printf(n|-7: 清除屏幕-|);printf(n|-0: 退出-|n);printf(n|*o(_)o o(_)o *|n);printf(n请输入你的选择:);return 1;(2)用dijkstra算法求两段路程的最短距离void dijkstra_output(int matxdij_maxndij_maxn, int precitydij_maxn, int p_end, int traveltype)int trackdij_maxn;int i = 0, j, k, min, tmp, end, cost = 0;j = p_end; tracki+ = j;while (precityj = 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.traink.cost)min = adjlisttracki.traink.cost;tmp = k;printf(%s, adjlisttracki.t);printf(%2d:%2d-%2d:%2d, adjlisttracki.traintmp.starttime / 60, adjlisttracki.traintmp.starttime % 60, adjlisttracki.traintmp.stoptime / 60, adjlisttracki.traintmp.stoptime % 60);elsefor (i-; i0; i-)printf(n%s:, citynametracki);end = tracki - 1; min = 32767;for (k = 0; kadjlisttracki.flightk.cost)min = adjlisttracki.flightk.cost;tmp = k;printf(%s, adjlisttracki.f);printf(%2d:%2d-%2d:%2d, adjlisttracki.flighttmp.starttime / 60, adjlisttracki.flighttmp.starttime % 60, adjlisttracki.flighttmp.stoptime / 60, adjlisttracki.flighttmp.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;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);五、测试分析1. 添加城市在主菜单下,用户输入1,添加城市名称。(图2.4添加城市)2删除城市在主菜单下,用户输入2,删除已添加城市名称。(图2.5删除城市)3添加交通路线在主菜单下,用户输入3,已添加城市名称。添加起始城市、终点城市名称、乘车类型、乘车班次、起始时刻、终点时刻、和票价。 (图2.6添加交通路线)4删除交通路线输入班次号,删除交通路线(图2.7删除交通路线)5查询最小费用交通路线(图2.8 查询最小费用交通路线)6查询最快交通路线(图2.9查询最快交通路线)7清除屏幕8退出六、用户手册使用本系统时,用户需先向程序添加城市后,在已有城市基础上添加已有城市的路线和使用各项功能。 七、调试报告程序运行无错误,但当系统输入其他无储存内容时程序会意外中断,代码需要优化。八、程序清单#include stdafx.h#include #include #include #define err 0 #define ok 1 #define dij_maxn 100 #define max_vertex_num 100#define max_string_num 100 #define max_traffic_num 100 const char cityfile = city.txt;const char trainfile = train.txt;const char flightfile = flight.txt;typedef short int citytype;/citytype 定义短整形的变量 typedef struct trafficnodechar namemax_string_num; /班次 /max_string_num最为10int starttime, stoptime; /起止时间 int endcity; /该有向边指向的顶点在数组中的位置,即该城市编号 int cost; /票价 trafficnodedat;typedef struct vnodecitytype city;int trainnum, flightnum; /标记下面train数组和flight数组里元素个数 trafficnodedat trainmax_traffic_num; /数组成员为结构体,记录了到达城市、起止时间、票价和班次 trafficnodedat flightmax_traffic_num;/ int cost; /遍历时到达该城市的耗费(时间或者费用) vnodedat;typedef struct pnodeint city;int trano; pnodedat;vnodedat adjlistmax_vertex_num; char citynamemax_vertex_nummax_string_num; /城市名,采用第一下标为该城市在本程序中的编号 int citynum; /城市数目 pnodedat pathmax_vertex_num; /存储临时最小时间路径 pnodedat minpathmax_vertex_num; /存储搜索到当前的最小时间路径 int mintime, starttime;int curpath;int showmenu() printf(n|*欢迎使用交通咨询系统*|n);printf(n|-1: 添加城市-|);printf(n|-2: 删除城市-|);printf(n|-3: 添加交通路线-|);printf(n|-4: 删除交通路线-|); printf(n|-5: 查询最小费用路线-|);printf(n|-6: 查询最快路线-|);printf(n|-7: 清除屏幕-|);printf(n|-0: 退出-|n);printf(n|*o(_)o o(_)o *|n);printf(n请输入你的选择:);return 1;void copyright()printf(n);int seekcity(char *name) /寻找城市int i;for (i = 0; icitynum; i+)if (strcmp(name, citynamei) = 0) /比较函数,若相等,则返回i值return i;return -1;/=edit info= int savesysinfo() /向程序输入数据file *fp; int i, j, total;fp = fopen(cityfile, w); /打开cityfile文档fprintf(fp, %dn, citynum); /往文档中写城市的数量for (i = 0; icitynum; i+)fprintf(fp, %sn, citynamei); /往文档中写城市的名字fclose(fp);/将cityfile文档关闭total = 0;fp = fopen(trainfile, w);/打开trainfile文档 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 , adjlisti.t,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; icitynum; i+)total += adjlisti.flightnum;fprintf(fp, %dn, total);for (i = 0; icitynum; i+)for (j = 0; j citynum)o-;printf(未找到此城市,请重新输入!);return 0;for (i = city; i citynum - 1; i+) /?可能city是从0开始的strcpy(citynamei, citynamei + 1);adjlisti.flightnum = adjlisti + 1.flightnum;adjlisti.trainnum = adjlisti + 1.trainnum;for (j = 0; j adjlisti.flightnum; j+) /为什么没有火车的?adjlisti.flightj.cost = adjlisti + 1.flightj.cost;adjlisti.flightj.endcity = adjlisti + 1.flightj.endcity;strcpy(adjlisti.f, adjlisti + 1.f);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; /inserttrain(name,s_city,e_city,s_hour*60+s_minute,e_hour*60+e_minute,cost);i = seekcity(startcity);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.trainn, train);adjlisti.trainnum+; /火车的数加1return 1;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;adjlisti.flightadjlisti.flightnum.stoptime = endtime;strcpy(adjlisti.trainadjlisti.flightn, 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+) /注意j是从0开始的if (strcmp(adjlisti.f, name) = 0)flag = 1; break;if (flag)for (; jadjlisti.flightnum - 1; j+) /把删除的航班后的每个航班向前移一位adjlisti.flightj.cost = adjlisti.flightj + 1.cost;adjlisti.flightj.endcity = adjlisti.flightj + 1.endcity;strcpy(adjlisti.f, adjlisti.flightj + 1.name);adjlisti.flightj.starttime = adjlisti.flightj + 1.starttime;adjlisti.flightj.stoptime = adjlisti.flightj + 1.stoptime;adjlisti.flightnum-; break;for (j = 0; jadjlisti.trainnum; j+)if (strcmp(adjlisti.t, 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.traink.cost)min = adjlisttracki.traink.cost;tmp = k;printf(%s, adjlisttracki.t);printf(%2d:%2d-%2d:%2d, adjlisttracki.traintmp.starttime / 60, adjlisttracki.traintmp.starttime % 60, adjlisttracki.traintmp.stoptime / 60, adjlisttracki.traintmp.stoptime % 60);elsefor (i-; i0; i-)printf(n%s:, citynametracki);end = tracki - 1; min = 32767;for (k = 0; kadjlisttracki.flightk.cost)min = adjlisttracki.flightk.cost;tmp = k;printf(%s, adjlisttracki.f);printf(%2d:%2d-%2d:%2d, adjlisttracki.flighttmp.starttime / 60, adjlisttracki.flighttmp.starttime % 60, adjlisttracki.flighttmp.stoptime / 60, adjlisttracki.flighttmp.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;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 stmp2max_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 (!fp)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.trainn, stmp1);fscanf(fp, %d:%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)printf(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 =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届黑龙江哈尔滨师范大学附中高三化学第一学期期中综合测试模拟试题含解析
- 四川省绵阳市2026届化学高一第一学期期末达标检测模拟试题含解析
- 2026届广西南宁市马山县金伦中学“4+ N”高中联合体化学高一上期末学业质量监测试题含解析
- 2025专业技术人员继续教育人工智能与行业应用试题及答案
- 2025年全国应急管理普法知识竞赛题库及答案
- 2025年康复医学假肢与矫形器试题及答案
- 2026届中山纪念中学化学高三第一学期期末检测模拟试题含解析
- 2026届河北衡中清大教育集团化学高一上期中检测试题含解析
- 吉林省重点高中2026届化学高一上期中质量跟踪监视试题含解析
- 全球挑战面试题及答案
- 大学生机器人工程专业职业生涯规划书
- 2025商业大厦租赁合同范本
- 脑梗死中医诊疗方案
- 知识产权对新质生产力的法制保护
- 《中国海军的发展史》课件
- 货车封条管理制度内容
- 【绘本】小猫钓鱼故事儿童故事-课件(共11张课件)
- 安全课《保护鼻子》
- “正大杯”第十五届全国大学生市场调查与分析大赛参考试题库(含答案)
- 河南省周口市郸城县2024-2025学年九年级上学期期中化学试卷
- 电力输电线路施工安全培训
评论
0/150
提交评论