您好,欢迎访问三七文档
校园导游系统[问题描述]设计一个校园导游程序,为来访的客人提供各种信息查询服务[基本要求](1)设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点相关信息的查询。(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。[实现提示]一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。一、需求分析1、从我校平面图中选取10个大家熟悉的景点,抽象成一个无向带权图。以顶点表示景点,边上的权值表示两地的距离;2、本程序的目的是为用户提供以下两种功能:a、景点查询:根据用户指定的景点输出景点的信息;b、路径咨询:根据用户指定的始点和终点输出相应路径及最短距离。3、程序运行先输出导航菜单和景点列表,用户通过输入i、s或e选择服务,其中i和s分别是景点查询和路经查询,e为退出系统;4、景点查询及路经查询锁输入的景点编号必须是1到10,除此之外即为错误输入。二、概要设计1、本文采用的数据结构*//*包含头文件*/#includestdio.h#includeprocess.h/*定义符号常量*/#defineINT_MAX10000/*定义景点最短距离范围*/#definen10/*定义景点数量*//*定义全局变量*/intcost[n][n];/*边的值*/intshortest[n][n];/*两点间的最短距离*/intpath[n][n];/*经过的景点*//*自定义函数原型说明*/voidintroduce();/*景点介绍函数*/intshortestdistance();/*最短路径函数*/voidfloyed();/*利用floyed算法求最短路径函数*/voiddisplay(inti,intj);/*输出路径函数*/2、本程序有三大模块:(1)主函数:主要输出导航主菜单和景点列表菜单,并储存已知最短距离voidmain(){inti,j;chark;system(color1B);for(i=0;i=n;i++)for(j=0;j=n;j++)a、最短距离cost[i][j]=INT_MAX;cost[1][3]=cost[3][1]=2;cost[2][3]=cost[3][2]=1;cost[2][4]=cost[4][2]=2;cost[3][10]=cost[10][3]=4;cost[1][10]=cost[10][1]=4;cost[2][10]=cost[10][2]=4;cost[4][10]=cost[10][4]=4;cost[1][4]=cost[4][1]=5;cost[4][5]=cost[5][4]=3;cost[4][9]=cost[9][4]=4;cost[5][9]=cost[9][5]=8;cost[5][7]=cost[7][5]=4;cost[5][6]=cost[6][5]=2;cost[6][7]=cost[7][6]=1;cost[7][8]=cost[8][7]=3;cost[8][6]=cost[6][8]=4;cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0;cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;b、输出主菜单while(1){printf(----------------欢迎使用地质大学导游系统!----------------\n);printf(1.景点信息查询………请按i(introduc)键\n);printf(2.景点最短路径查询…请按s(shortestdistance)键\n);printf(3.退出系统……………请按e(exit)键\n);printf(---------------------------------------------------------\n);c、输出景点列表菜单printf(--------------------学校景点列表-------------------------\n);printf(1:学校东门);printf(2:大学生活动中心\n);printf(3:地大隧道);printf(4:三食堂\n);printf(5:体育馆);printf(6:图书馆\n);printf(7:信息实验中心);printf(8:主楼\n);printf(9:弘毅堂);printf(10:教三楼\n);printf(---------------------------------------------------------\n);(2)景点查询introduce()函数(3)路经查询shortestdistance()函数,此函数需要调用函数floyed()和函数display(i,j)三、详细设计1、主函数voidmain()/*主函数*/{inti,j;/*定义景点编号类型*/chark;system(color1B);/*窗口颜色控制*//*利用cost矩阵储存各已知景点的最短距离*/for(i=0;i=n;i++)for(j=0;j=n;j++)cost[i][j]=INT_MAX;cost[1][3]=cost[3][1]=2;cost[2][3]=cost[3][2]=1;cost[2][4]=cost[4][2]=2;cost[3][10]=cost[10][3]=4;cost[1][10]=cost[10][1]=4;cost[2][10]=cost[10][2]=4;cost[4][10]=cost[10][4]=4;cost[1][4]=cost[4][1]=5;cost[4][5]=cost[5][4]=3;cost[4][9]=cost[9][4]=4;cost[5][9]=cost[9][5]=8;cost[5][7]=cost[7][5]=4;cost[5][6]=cost[6][5]=2;cost[6][7]=cost[7][6]=1;cost[7][8]=cost[8][7]=3;cost[8][6]=cost[6][8]=4;cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0;cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;/*输出导航主菜单,显示用户可用服务*/while(1){printf(----------------欢迎使用地质大学导游系统!----------------\n);printf(1.景点信息查询………请按i(introduc)键\n);printf(2.景点最短路径查询…请按s(shortestdistance)键\n);printf(3.退出系统……………请按e(exit)键\n);printf(---------------------------------------------------------\n);/*输出景点列表菜单*/printf(--------------------学校景点列表-------------------------\n);printf(1:学校东门);printf(2:大学生活动中心\n);printf(3:地大隧道);printf(4:三食堂\n);printf(5:体育馆);printf(6:图书馆\n);printf(7:信息实验中心);printf(8:主楼\n);printf(9:弘毅堂);printf(10:教三楼\n);printf(---------------------------------------------------------\n);printf(请选择服务:\n);scanf(\n%c,&k);/*用户输入服务*//*switch控制语句,控制输出用户需要的服务*/switch(k){case'i':printf(进入景点信息查询:\n);introduce();break;case's':printf(进入最短路径查询:\n);shortestdistance();break;case'e':exit(0);/*退出系统*/default:printf(输入信息错误!\n请输入字母i或s或e.\n);break;}}}/*main*/2、景点介绍函数voidintroduce()/*景点介绍函数*/{inta;/*定义用户输入的景点编号的类型*/printf(您想查询哪个景点的详细信息?请输入景点编号:\n);scanf(%d,&a);/*用户输入景点编号*/getchar();printf(\n);switch(a)/*根据用户输入景点编号控制输出该景点介绍*/{case1:printf(1:学校东门\n学校的正门,左右两边各有一樽石狮,气势宏伟。\n);break;case2:printf(2:大学生活动中心\n学校举行学术报告的地方。\n);break;case3:printf(3:地大隧道\n我校最具特色的地方。\n);break;case4:printf(4:三食堂\n学生老师就餐的地方。\n);break;case5:printf(5:体育馆\n学生上体育课及运动的场地,设有羽毛球场、篮球场等。\n);break;case6:printf(6:图书馆\n学校信息资源中心,提供借阅书籍及电子阅览。\n);break;case7:printf(7:信息实验中心\n我校的研究科研中心及学生实验的基地。\n);break;case8:printf(8:主楼\n学校行政办公的主楼。\n);break;case9:printf(9:弘毅堂\n学校举行大型文艺活动的地方。\n);break;case10:printf(10:教三楼\n学生上课和自习的主要场所。\n);break;default:printf(景点编号输入错误!请输入1-10的数字编号!\n);break;}}/*introduce*/3、最短距离函数intshortestdistance()/*要查找的两景点的最短距离*/{inti,j;/*定义景点编号类型*/printf(请输入要查询的两个景点的编号(1-10)的数字编号并用','间隔):\n);scanf(%d,%d,&i,&j);/*输入景点编号*//*以下用于判断用户输入是否超出范围*/if(in||i=0||jn||j0){printf(输入信息错误!\n);printf(请输入要查询的两个景点的编号(1-10)的数字编号并用','间隔):\n);scanf(%d,%d,&i,&j);}else{floyed();/*调用floyed()函数*/display(i,j);/*调用display函数*/}return1;}/*shortestdistance*/3、floyed算法函数/*用floyed算法求两个景点的最短路径,该算法思想:从任意一条单边路径开始。所有两点之间的距离是边的权,或者无穷大,如果两点之间没有边相连,对于每一对顶点u和v,看看是否存在一个顶点w使得从u到w再到v比己知的路径更短。如果是更新它。*/voidfloyed(){inti,j,k;/*定义景点编号类型*/for(i=1;i=n;i++)for(j=1;j=n;j++){shortest[i][j]=cost[i][j];/*定义景点i与j的最短距离*/path[i][j]=0;/*景点i到j的路径上经过的景点编号*/}/*判断是否存在景点k满足i到j的距离大于i到k的距离与k到j的距离之和,若存在则景点k满足i到j的最短距离为i到k的距离与k到j的距离之和,并输出景点k;若不存
本文标题:校园导游系统
链接地址:https://www.777doc.com/doc-4189870 .html