校园导游服务咨询系统C++(含源代码)说明书---2015

校园导游服务咨询系统C++(含源代码)说明书---2015
校园导游服务咨询系统C++(含源代码)说明书---2015

计算机科学与技术教研室

课程设计说明书(2014-2015学年第1学期)

注:成绩均用百分制。总成绩=平时成绩*20%+报告成绩*40%+演示与答辩成绩*40%

设计题目:校园附近门店服务查询系统

1、课程设计目的

(1)数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C++语言),自行实现一个较为完整的应用系统。

(2)通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。

(3)学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。

1)熟练掌握链表存储结构及其建立过程和常用操作;

2)学会自己调试程序的方法并掌握一定的技巧;

3)通过温习旧的知识,学习新知识,并提高分析和解决问题的能力。

2、课程设计正文

2.1概要设计

2.1.1 系统分析

该系统主要功能包括:增添服务信息、查询服务信息、修改服务信息、删除服务信息以及推荐路径等。

1.主程序模块:连接各种功能子模块,使用循环等待用户操作,完成程序的基本操作实现功能。

2.菜单显示模块:生成每个菜单的显示界面,使程序更简单清晰。

3.查询服务信息:用户在选择此功能模块后,按照屏幕上方提示的服务信息名称及其对应的编号,要求用户输入想要查询的服务信息的编号,回车后系统将在已存储的服务信息中进行匹配,若该景点信息尚未存储则将提示错误;若找到对应信息则系统将输出服务信息,显示于幕上方。

4.查询两服务信息最短路径:运用弗洛伊德算法,用户在选择此功能模块后,按照屏幕上方提示的服务信息名称及其对应的编号,要求用户输入起点和终点的编号,系统将在已存储的景点中进行匹配,若未找到所需查询的服务信息编号,系统将提示错误并要求用户再次输入。若输入信息合法,则回车后系统将给出最短路径,显示于屏幕上方。

5.删除服务信息:用户操作功能模块,由主程序直接调用的函数模块,将功能具象化,系统工具函数模块,先查找到所存在的服务信息,然后对用户希望删除的服务信息进行删除操作,若所要删除的服务信息不存在,则输出不存在此服务信息。

2.1.2系统结构图

系统要实现的功能:1、增添服务信息;2、修改服务信息;3查询服务信息;4、查询两服务信息之间最短路径;5、删除服务信息;6、退出系统。

图1系统结构图

2.2详细设计

2.2.1数据类型定义

#include

#include

#include

#include

#define N 100 //服务信息个数最大100

#define Road 1000 //定义路径为1000

intNum=9; //目前服务信息个数

using namespace std;

typedefstructElemtype

{

char name[30];

char number[10];

char introduce[200];

}Elemtype;

typedefstruct Place

{

intnum; //位置序号

Place *next;

Elemtype date; //服务信息信息

}Place; //定义服务信息

2.2.2 存储结构:

单链表如下:

图2单链表

每个结点包含数据域和指针域:

图3结点图

2.2.3 函数声明

(1)服务信息查询函数

函数名:void find(Place *&head)

操作结果:查找需要的服务信息

分析:输入所要查找的服务信息的编号,为链表建立一个附加表头结点,将p 付给表头指针;同时判断输入的字符串是否满足条件;用if语句判断是否输入完成。

(2)服务信息增添函数

函数名:void add(Place *&head)

操作结果:增加新的的服务信息

分析:运用指针p指向Place *&head结构体,增加服务信息的位置、编号、名称等信息将p赋给表头指针,初始化count为0,用循环语句遍历进行保存。

(3)服务信息修改函数

函数名:void replace(Place *&head)

操作结果:对原有的服务信息进行修改

分析:使用while与for语句遍历链表,对已经存在的服务信息进行修改并保存。

(4)服务信息删除函数

函数名:void deleted(Place *&head)

操作结果:删除已经不存在的服务信息

分析:用for与if语句,找到所要删除的字符串,用while语句删除已经不存在的服务信息。

(5)求两服务信息之间最短路径函数

函数名:intshortdistance(Place *head)

操作结果:查找两个服务信息之间的最短路径

分析:运用弗洛伊德算法,写出函数,再运用函数计算出两个服务信息之间的最短路径并输出运算结果。

(7)主菜单控制函数

函数名:void menu()

操作结果:显示以下几个菜单:1) 查询服务信息;2) 修改服务信息;3) 增加服务信息;4) 除服务信息;5)路径搜索;6) 退出系统;

2.2.4函数流程图

系统流程图如图4

图4系统流程图

2.2.5代码(见附录)

2.3程序测试结果

(1)主菜单函数

(2)查询服务信息函数

(3)增添服务信息函数

(4)修改服务信息函数

(5)删除服务信息函数

(6)路径搜索函数

3、课程设计总结

到现在为止已经学习了一学期的数据结构,再加上如今通过算法与数据结构的课程设计,是我对数据结构这门课有了比较深的了解。当然,在学习过程中也遇到各种各样的困难,不过已经通过各种途径解决了。在解决这些问题的过程中让我也学到了许多课本上没有的知识以及团队合作的重要性。

经过这次课程设计,我对程序中算法的概念理解的更加透彻。算法是程序中必不可少的部分,它是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执

行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。同时,在选择算法时必须考虑算法的时间复杂度和空间复杂度,这样才能让程序正常,高效的运行。

在系统设计时也碰到了很多问题,比如在设计MGr.legs()函数时,首先我想到的是使用数组来保存信息,但发现这种设计无法方便的让程序中各个独立算法访问存储的服务信息,编写代码时十分复杂,后来,在出查阅相关书籍和阅读了网上其它相关算法后,我选择了使用链表来保存信息,同时其它函数模块也可以方便的访问这部分信息,达到了我想要实现的功能。

通过此次课程设计,也学到了很多,比如团队的力量永远大于个人的力量,细节决定成败等等。不但重新温习了以前学到的知识,还学习到许多的新的知识,也认识到了自己的许多的不足。例如耐心不够,有时侯调试程序时,发现了一个错误,但是总是解决不了,心里就会感到厌烦,不想继续做下去。还有不够细心,每一次改写完程序后,检查了一遍,自己认为没有错了,结果一调试发现又有错误等等。不过也发现了自己的一些优点,比如善于听取他人意见,虚心求教等。

最后,通过全组人的齐心协力,最终将程序编写了出来,并且使之得到实现我们的预期目的。通过此次课程设计,从一定成度上提高了我们对数据结构的熟悉度,也提高了我们独立编程的能力,同时也体会到在程序设计过程中团体合作,共同解决问题的重要性。

4、参考文献

[1]严蔚敏等.数据结构[M](C语言版).清华大学出版社,1997.4.

[2] 张乃孝主编. 算法与数据结构 [M](C语言版). 高等教育出版社, 2002.

[3] 李廉治,姜文清,郭福顺.数据结构[M].大连理工大学出版社,1989.

答辩记录

答辩小组教师:

提问与答辩情况记录如下:

1、求最短路径的函数是怎么运行的?

答:首先需要用户将所要查找到两服务分别输入,然后运用所编写的void folyd()函数进行对两服务位置之间的最短距离进行计算,然后用void display(inti,int j)函数对所得到的结果进行输出,用户便可以从中得到所推荐的最短路径。

2、主要功能查询是如何实现的?

答:主要是在单链表上进行顺序查找,查找成功时,开辟空间,输入要查找服务的编号信息,门店信息查询会有一种查询方式,通过提示进入switch选择语句进行选择,在这个过程中还运用了for、while等语句进行操作。

3、程序的初始化是怎样设计的?

答:程序的初始化先通过void init(Place *&head)定义服务的信息,包括服务位置、服务编号、服务内容等信息,然后运用MGr.legs[i][j]=Road函数定义服务之间的距离,确立了服务信息,定义了程序的初始化。

源代码:

#include

#include

#include

#include

#define N 100 //服务个数最大100

#define Road 1000 //定义路径为1000

int Num=9; //目前服务个数

using namespace std;

typedef struct Elemtype

{

char name[30];

char number[10];

char introduce[200];

}Elemtype;

typedef struct Place

{

int num; //位置序号

Place *next;

Elemtype date; //服务信息

}Place; //定义服务

typedef struct MGraph

{

Place place;

int legs[N][N]; //存放路径长

}MGraph;

MGraph MGr; //全局变量,定义MGr为MGraph类型int shortest[N][N]; //定义全局变量存贮最小路径

int path[N][N]; //定义存贮路径

Place *p;

void init(Place *&head) //定义服务位置

{

Place *p,*q;

head=(Place *)malloc(sizeof(Place));

head->next=NULL;

q=head;

p=(Place *)malloc(sizeof(Place));

p->num=1;

strcpy(p->https://www.360docs.net/doc/348079209.html,,"购物");

strcpy(p->date.number,"1");

strcpy(p->date.introduce,"位于学校北公寓西行30M处,有两层楼大小,货物十分齐全,地处学校门口,是同学们常去的地方,提供各种购物的服务。");

p->next=q->next;

q->next=p;

q=p;

p=(Place *)malloc(sizeof(Place));

p->num=2;

strcpy(p->https://www.360docs.net/doc/348079209.html,,"上网");

strcpy(p->date.number,"2");

strcpy(p->date.introduce,"位于学校北公寓东行20M处,有两个店铺可供选择,生意火爆,提供上网服务。");

p->next=q->next;

q->next=p;

q=p;

p=(Place *)malloc(sizeof(Place));

p->num=3;

strcpy(p->https://www.360docs.net/doc/348079209.html,,"洗浴");

strcpy(p->date.number,"3");

strcpy(p->date.introduce,"位于学校北公寓南行650M处,是学生们经常去的地方,适合平民消费,价格实惠,水温适度,但距离学校较远。");

p->next=q->next;

q->next=p;

q=p;

p=(Place *)malloc(sizeof(Place));

p->num=4;

strcpy(p->https://www.360docs.net/doc/348079209.html,,"清真小吃");

strcpy(p->date.number,"4");

strcpy(p->date.introduce,"位于学校北公寓南行400M处,作为老店,很受附近居民的欢迎,可提供烧烤,凉菜等服务,适合夜晚在此就餐。");

p->next=q->next;

q->next=p;

q=p;

p=(Place *)malloc(sizeof(Place));

p->num=5;

strcpy(p->https://www.360docs.net/doc/348079209.html,,"打印文件");

strcpy(p->date.number,"5");

strcpy(p->date.introduce,"位于学校北公寓东行80M处,提供打印文件、制作光盘等服务,价格较实惠,营业时间较长。");

p->next=q->next;

q->next=p;

q=p;

p=(Place *)malloc(sizeof(Place));

p->num=6;

strcpy(p->https://www.360docs.net/doc/348079209.html,,"火锅");

strcpy(p->date.number,"6");

strcpy(p->date.introduce,"位于学校北公寓南行150M处,作为试营业的商铺,服务态度较好,菜种齐全,适合多人聚餐。");

p->next=q->next;

q->next=p;

q=p;

p=(Place *)malloc(sizeof(Place));

p->num=7;

strcpy(p->https://www.360docs.net/doc/348079209.html,,"早餐");

strcpy(p->date.number,"7");

strcpy(p->date.introduce,"位于学校北公寓西行300M处,只有早上开放提供服务,其他时间段不营业,菜系有油条、豆浆等。");

p->next=q->next;

q->next=p;

q=p;

p=(Place *)malloc(sizeof(Place));

p->num=8;

strcpy(p->https://www.360docs.net/doc/348079209.html,,"快递");

strcpy(p->date.number,"8");

strcpy(p->date.introduce,"位于学校北公寓南行300M处,可获取收发韵达、申通快递等服务。");

p->next=q->next;

q->next=p;

q=p;

p=(Place *)malloc(sizeof(Place));

p->num=9;

strcpy(p->https://www.360docs.net/doc/348079209.html,,"照相");

strcpy(p->date.number,"9");

strcpy(p->date.introduce,"位于学校北公寓南行100M处,可获取快照、艺术照、证件照等服务。");

p->next=q->next;

q->next=p;

q=p;

int i,j; //定义服务间的距离

for(i=1;i<=N;i++)

{

for(j=1;j<=N;j++)

{

MGr.legs[i][j]=Road;

}

}

for(i=1;i<=N;i++)

shortest[i][j]=0;

MGr.legs[0][1]=MGr.legs[1][0]=30;

MGr.legs[0][2]=MGr.legs[2][0]=19;

MGr.legs[0][3]=MGr.legs[3][0]=100;

MGr.legs[3][4]=MGr.legs[4][3]=50;

MGr.legs[3][5]=MGr.legs[5][3]=20;

MGr.legs[4][5]=MGr.legs[5][4]=15;

MGr.legs[5][6]=MGr.legs[6][5]=18;

MGr.legs[6][7]=MGr.legs[7][6]=24;

MGr.legs[1][2]=MGr.legs[2][1]=50;

MGr.legs[2][7]=MGr.legs[7][2]=20;

MGr.legs[8][7]=MGr.legs[7][8]=16;

MGr.legs[7][9]=MGr.legs[9][7]=26;

}

void folyd() //佛洛依德算法{

int i,j,k;

for(i=1;i<=N;i++)

{

for(j=1;j<=N;j++)

{

shortest[i][j]=MGr.legs[i][j];

path[i][j]=0;

}

}

for(k=1;k<=N;k++)

{

for(i=1;i<=N;i++)

{

for(j=1;j<=N;j++)

{

if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))

{

shortest[i][j]=shortest[i][k]+shortest[k][j];

path[i][j]=k;

path[j][i]=k; //记录经过的路径

}

}

}

}

}

void display(int i,int j) //输出两个服务的路径及最短路径

{

int a,b;

a=i;

b=j;

cout<<"我们向您推荐的最短路径是:";

if(i

{

cout<

while(path[i][j]!=0)

{

cout<<"->"<

if(i

j=path[i][j];

else

i=path[j][i];

}

cout<<"->"<

cout<<" "<

cout<<"您所查找的"<"<

}

else

{

cout<

while(path[i][j]!=0)

{

cout<<"->"<

if(i

j=path[i][j];

else

i=path[j][i];

}

cout<<"->"<

cout<<"您所查找的"<"<

}

cout<<" "<

}

int shortdistance(Place *head) //查找两服务之间最短路径

{

int i,j;

Place *t=head->next,*q=head->next;

cout<<"请输入要查询的两个服务的位置序号:"<

cin>>i>>j;

while(t)

{

if(t->num==i)break;

else t=t->next;

}

while(q)

{

if(q->num==j)break;

else q=q->next;

}

if(q==NULL||t==NULL)

cout<<"抱歉,没有通向的路径!"<

else

{

folyd();

display(i,j);

}

cout<

return 1;

}

void add(Place *&head) //增加服务

{

Place *p,*t=head->next;

p=(Place *)malloc(sizeof(Place));

int a;

int b;

int x;

int y;

int i;

cout<<"请输入添加的服务位置(需输入大于9的整数)。";

cin>>p->num;

cout<

while(t)

{

if(t->num==p->num)

{

cout<<"此位置已被其它服务占用,请重新输入其它空白的位置。"<

cout<<"

"<

cin>>p->num;continue;

}

else t=t->next;

}

if(t==NULL)

{

cout<<"服务编号:";

cin>>p->date.number;

cout<<"服务名字:";

cin>>p->https://www.360docs.net/doc/348079209.html,;

cout<<"服务简介:";

cin>>p->date.introduce;

x=p->num;

cout<

cout<<"请输入路径条数、相关服务的位置y、路径长度"<

cin>>a;

cout<

for(i=1;i<=a;i++)

{

cin>>y;

cin>>b;

MGr.legs[x][y]=MGr.legs[y][x]=b;

}

cout<<"服务位置:"<num<

cout<<"服务编号:"<date.number<

cout<<"服务名称:"<https://www.360docs.net/doc/348079209.html,<

cout<<"服务简介:"<date.introduce<

cout<<" "<

Place *q=head->next;

while(q->next)

{

q=q->next;

}

p->next=q->next;

q->next=p;

Num++;

}

}

void deleted(Place *&head) //删除服务

{

int text=0;

char cnum[10];

Place *p=head;

cout<<"输入删除的服务编号:"<

cout<<"

"<

cin>>cnum;

while(p->next)

{

if(strcmp(p->next->date.number,cnum)==0)

{

cout<<"恭喜您,您已成功将服务"<next->https://www.360docs.net/doc/348079209.html,<<" 关闭!"<next=p->next->next;

Num--;

break;

}

else

{

if(p->next==NULL)

cout<<"该服务不存在!"<

cout<<"

"<

p=p->next;

}

}

cout<

}

void find(Place *&head) //查询服务{

int n;

Place *p=head;

cout<<"输入查询的服务位置序号:";

cout<<"

"<

cin>>n;

while(p->next)

{

if(p->next->num==n)

{

cout<<"服务位置:"<next->num<

cout<<"服务编号:"<next->date.number<

cout<<"服务名称:"<next->https://www.360docs.net/doc/348079209.html,<

cout<<"服务简介:"<next->date.introduce<

break;

}

else p=p->next;

}

if(p->next==NULL)

cout<<"该服务不存在!"<

cout<<"

"<

cout<<"

"<

}

void replace(Place *&head) //修改服务{

char name1[20];

char number1[10],number2[10];

char introduce1[100];

Place *p=head;

cout<<"输入要修改的的服务编号:"<

cout<<"

"<

cin>>number1;

while(p->next)

{

if(strcmp(p->next->date.number,number1)==0)

{

cout<<"请输入新的服务名称:";

cin>>name1;

cout<<"请输入新的服务编号:";

cin>>number2;

cout<<"请输入新的服务简介:";

cin>>introduce1;

strcpy(p->next->https://www.360docs.net/doc/348079209.html,,name1);

strcpy(p->next->date.number,number2);

strcpy(p->next->date.introduce,introduce1);

cout<

cout<<"服务位置:"<next->num<

cout<<"服务编号:"<next->date.number<

cout<<"服务名称:"<next->https://www.360docs.net/doc/348079209.html,<

cout<<"服务简介:"<next->date.introduce<

cout<

break;

}

else p=p->next;

}

if(p->next==NULL)

cout<<"该服务不存在!"<

cout<<"

"<

cout<

}

void menu() //主菜单

{ cout<<" "<

cout<<"

"<

cout<<"1 查询服务请按1键;"<

cout<<"2 修改服务请按2键;"<

cout<<"3 增加服务请按3键;"<

校园导游系统程序课程设计报告

1、需求分析 设计一个校园导游系统程序,为来访的客人提供各种服务的信息查询。 (1).设计工商学院校园无向图,所含的景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。 (2).为来访客人提供图中任意景点相关信息的查询。 (3).为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 2、设计思路 校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟。用图的结点代表景点,用图的边代表景点之间的路径。所以首先应设计一个图类。结点值代表景点信息,边的权值代表景点间的距离。结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。计算路径长度和最短路线时可用弗洛伊德(Floyd)算法实现。最后用switch选择语句选择执行浏览景点信息或查询最短路径。

3 算法设计 3.1 概要设计 3.1.1程序中包含的模块 (1)主程序模块 主函数:void main(void) void cmd(void) cmd修改显示框大小,字体背景颜色,初始化景点,景点信息打印菜单, MGraph InitGraph(void); //初始化图。 MGraph * CreatUDN(MGraph *G);//初始化图形接受用户输入 void Menu(void);//菜单函数 void Browser(MGraph *G);//浏览函数 void ShortestPath_DIJ(MGraph *G); void Floyd(MGraph *G);//查询图中任意两个景点间的所有路径 void Search(MGraph *G);//查找函数 int LocateVex(MGraph *G,char*v); // 迪杰斯特拉算法计算起点各顶点间短路径, void print(MGraph *G);//输出函数 (2)查询模块 景点信息查询:void introduce() 最短路径查询:要查找的两景点的最短距离:用floyd算法求两

数据结构课程设计报告(校园导游系统)附有源代码

课程论文(设计)2011-2012学年第2学期 课程名称:数据结构课程设计 课程性质:实践课 专业班级: 考核方式:考查 学生姓名: 学号: 学时:1周 教师姓名:

目录 1. 作业内容 (1) 2. 基本思路 (1) 2.1 本校10个景点 (1) 2.2 图的初始化 (2) 2.3 图的遍历 (2) 2.4 求最短路径 (3) 3.系统流程 (4) 3.1 系统的简单说明 (4) 3.2 系统流程图 (5) 4. 系统运行效果图 (5) 4.1 校园导游界面 (5) 4.2 华农校园地图 (6) 4.3 景点的相关信息查询 (6) 4.4 任意两个景点间的最短路径 (7) 4.5 退出校园导游系统 (8) 5.总结 (9) 6.参考文献 (10)

1. 作业内容 设计一个校园导游程序,为来访客人提供各种信息查询任务。基本要求: (1)设计你所在学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介信息,以边表示路权,存放路径长度等相关信息。 (2)为来访客人提供图中任意景点相关信息的查询 (3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 2. 基本思路 要完成对整个导游图系统的功能实现,需要对的每一项功能都有清楚的设想和认识,了解并明确每一项功能的实现需要解决的问题,选择正确并且高效的算法把问题逐个解决,最终实现程序的正确调试运行。有以下设计思路: (1).结合本校的实际情况,选出10个景点; (2).人为手工为选出的10个景点赋上相关信息(名称、代号、简介信息、以及路权等等); (3).根据选出来的10个景点用邻接矩阵存储校园图。 (4).依照景点的相关信息创建校园图。 (5).把纸质上的内容,利用C++编程语言编写查找景点相关信息的程序。 (6).根据人为赋值的路权,迪杰斯特拉算法计算任意两点之间的最短路径。 (7).综上所诉,用一个主函数把这些板块合成,生产一个菜单界面呈现在用户面前。 为此,可把系统分为以下几个核心:图的初始化、图的遍历、求最佳路线。 2.1 选出本校10个景点 结合华南农业大学实际情况,我选出以下10个景点,从1到10编号:

校园导游系统设计与实现

校园导游系统设计与实现

目录 1.设计要求 2.1需求分析 2.2概要设计 2.3各个模块名称和功能 2.4 系统导游主界面 2.4.1前台系统 2.4.2后台系统 2.4.3退出系统 3实验总结 参考文献 附件

1.设计要求 设计一个校园导游程序,为来访的客人提供各种信息查询服务。 2.1需求分析 ⑴设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图(无向网),所含景点不少于30 个。以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。 ⑵存放景点代号、名称、简介等信息供用户查询。 ⑶为来访客人提供图中任意景点相关信息的查询。 ⑷为来访客人提供图中任意景点之间的问路查询。 ⑸可以为校园平面图增加或删除景点或边,修改边上的权值等。 景点距离图 2.2概要设计

校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟。用图的结点代表景点,用图的边代表景点之间的路径。所以首先应设计一个图类。结点值代表景点信息,边的权值代表景点间的距离。结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。计算路径长度和最短路线时可用迪杰斯特拉(Dijkastra)算法实现。最后用switch 选择语句选择执行浏览景点信息或查询最短路径。 1、主界面设计 为了实现校园导游系统各功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。 2、存储结构设计 本系统采用图结构类型(mgraph)存储抽象校园图的信息。其中,各景点间的邻接关系用图邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(vexs)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称及景点介绍三个分量;图的顶点个数及边的条数由分量vexnum、arcnum 表示,它们是整型数据。 3、系统功能设计 本系统除了要完成图的初始化功能外还设置了9个子功能。图的初始化由initgraph()函数实现。依据读入的图的顶点个数和边的条数,分别初始化图结构中图的顶点数组和图的邻接矩阵。9个子功能的设计描述如下。 ⑴景点信息查询 景点信息查询由函数seeabout()实现。该功能根据用户输入的景点编号输出该景点的相关信息。如景点编号、名称等。 ⑵学校景点介绍 学校景点介绍由函数browsecampus()实现。当用户选择该功能,系统即能输出学校全部景点的信息:包括景点编号、景点名称及景点介绍。 ⑶相邻的景点及其距离 为使游客能够知道其周围的景点和路径,方便他们迅速知道其所在位置和周围信息 ⑷查看浏览线路 查看浏览线路由函数shortestpath_dij()实现。该功能采用迪杰斯特拉(Dijkstra)算法实现。当用户选择该功能,系统能根据用户输入的起始景点编号,求出从该景点到其他景点的最短路径线路及距离。当用户选择该功能,系统能根据用户输入的起始景点及目的景点编号,查询任意两个景点之间的最短路径线路及距离。 ⑸更改图信息 修改一个已有景点的相关信息、删除一个景点及其相关信息、删除一条路径、加一条路径、修改路径长度、添加一个景点 ⑹数据安全防范 设置密码,能保证数据不会被随便更改,由pass()判定密码是否正确,可由changepw()函数修改密码,初始密码为gdufsx ⑺写入文件并保存修改 打开该软件,若没有graph.txt,则会由系统初始化生成一个graph.txt,若已存在该文档会由该文档中的内容初始化系统。 ⑻恢复初始状态 若数据已经显得很杂乱并很难修理,就可以启用这个功能

校园导游系统

课程设计报告 课程名称:数据结构与算法 题目名称:校园导游系统 学生学院:数学与计算机科学系 专业班级: 2016级计算机科学与技术本科班小组组长:王明 小组成员: 王明郑双凤吕运发 指导老师:熊小颖老师

2017年10月15日 目录 一、设计目的3 二、问题描述3 三、基本要求3 四、概要设计3 五、主程序4 六、测试数据13

6.1调试程序所用数据13 6.2程序的调试结果 七、总结 一、设计目的 随着现代社会生活节奏的加快,人们外出旅行以寻求放松的时间越来越多。考虑到游客不可能对所有景点都有所了解,因此可能无法找到游玩景点最省时,最高效的路径,而人工导游成本又过高,故使用C语言,基于《数据结构》中图的相关算法开发了“南昌师范学院导游系统”。开发本系统目的在于为来访我校的游客提供一条最短游览路径,本系统从实际出发,通过对校园平面图的分析,将其转化为数据并保存在系统中,因此系统提供的路径具有较大的可信性。 二、问题描述 设计校园导游程序,为来访的客人提供服务,为来访我校的游客提供一条在游客当前位置到目的地的最短游览路径,找到游玩景点最

省时,最高效的路径。 三、基本要求 1.假设有一所校园的平面图,所含景点不小于10个,请选择适当 的坐标来表示出该图上的各个景点。 2.为来访的客人提供从当前位置到其他景点的最短路径的咨询; 3.必须具有校园平面图的修改和扩充功能(即某些景点坐标的修改 和景点个数的增加)。 四、概要设计 算法思路 本设计的重难点在于问题二的解决。利用了弗洛伊德算法函数设计Floyd() 本算法在设计时参考了《数据结构C语言版》一书中有关Floyd算法的介绍,同时借鉴了如今网上流行的设计方式。之所以选择本算法来实现计算最短路径,原因在于本算法容易理解,可以算出任意两个节点之间的最短距离,代码编写简单。 但是,本算法缺点在于时间复杂度过高,不适合用于计算大量数据。Floyd算法首先将两景点间路径长度数据存储于数组D[v][w]中,而后使用一个三维数组用于存放最短路径所经过的顶点,接下来使用三重循环判断两景点之间直接路径是否大于间接路径,若大于,则将三维数组中存放的顶点信息更改为简介路径所经过的顶点信息。以上部分完成后,当用于标记输入数据是否合法的

校园导游系统

课程设计说明书 课程名称:数据结构与算法 设计题目:校园导游系统 院系:计算机科学与信息工程学院 学生姓名: 学号: 专业班级:计算机科学与技术信息技术方向11-1 指导教师: 2013年6月21日

课程设计任务书 校园导游系统

摘要: 随着社会经济的发展,人们接近自然的机会就越多,因此外出旅游现在被越来越多的都市人所看中,所以如何快速方便的找到我们想要的旅游景点的信息和最短路径,如何简单的修改相关的信息,就成了很重要的问题。 本设计基于图的结构,用数组表示法创建一个无向图,针对游客的实际需求,将安阳工学院的景点编号、名称、介绍等信息放入到图的顶点当中,将路径长度的信息存放在弧当中。利用弗洛伊德算法求出两个景点之间的最短路径,利用迪杰斯特拉算法来求从一个景点到其他剩余的所有景点的最短距离;用相应的函数来查找景点,并显示出它的编号,信息,简介。并进行一定的界面美化,更贴近用户,相应的提示使用户操作起来更容易。 关键词:最短路径、查找景点信息、无向图 目录

1. 设计背景 (3) 1.1程序设计内容 (4) 1.2程序设计要求 (4) 2.设计方案 (4) 2.1 校园景点图 (5) 2.2 程序模块图 (5) 2.3 主函数设计简要 (6) 2.4 各函数模块的功能 (6) 3. 方案实施 (7) 3.1 程序执行流程图 (7) 3.2 主函数设计思想 (7) 4. 结果测试 (9) 4.1 主函数功能模块测试 (9) 4.2 主函数功能测试 (9) 4.3 各功能所执行的操作 (12) 5. 结论 (12) 6. 收获与致谢 (13) 7. 参考文献 (14) 8. 附件 (14) 1. 设计背景

校园导游程序

洛阳理工学院 课程设计报告 课程名称数据结构课程设计 题目校园导游程序

课程设计任务书 1、设计题目:校园导游程序 2、设计内容与要求: [问题描述] 用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。[基本要求] (1)查询各景点的相关信息; (2)查询图中任意两个景点间的最短路径。 (3)查询图中任意两个景点间的所有路径。 (4)增加、删除、更新有关景点和道路的信息。 课程设计评语 成绩: 指导教师:_______________ 年月日

3、流程图 4、模块划分 (1)主函数:void main( ) (2)void CreateUDN(int v,int a); /* 造图函数*/ (3)void narrate(); /*说明函数*/ (4)void ShortestPath(int num); /*最短路径函数*/ (5)void output(int sight1,int sight2); /*输出函数*/ (6)char Menu(); /* 主菜单*/ (7)void search(); /* 查询景点信息*/ (8)char SearchMenu(); /* 查询子菜单*/ (9)void HaMiTonian(int); /*图的遍历*/ (10)void Searchpath1(MGraph g);/*查询两个景点间的所有路径*/ (11)void disppath(MGraph g,int i,int j); (12)void path(MGraph g,int i,int j,int k);/*确定路径上第k+1个顶点的序号*/(13)void NextValue(int); (14)void display(); /* 显示遍历结果*/ (15)int Addnewsight(int n); /*添加新的景点和路径*/

校园导游系统程序

课题五:校园导游程序 1)问题描述 用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。 2)基本要求 (1)查询各景点的相关信息; (2)查询图中任意两个景点间的最短路径。 (3)能够将图的信息保存到文件中,并指定文件打开。 (4)增加、删除、更新有关景点和道路的信息。 附加难度:有余力的同学可以考虑用图形界面实现寻址的过程 3) 设计思想 核心数据结构定义一个图,将图保存后,对图进行面向指定节点到各个节点的最短路径的操作。可以再文件中保存多个导游图,例如保存学校图、芜湖市图等文件。开始时选择文件,将指定文件中的信息导入到内存的图中。 #define Infinity 1000 #define MaxVertexNum 35 #define MAX 40 #include #include #include #include #include #include typedef struct arcell //边的权值信息 { int adj; //权值 }arcell,adjmatrix[MaxVertexNum][MaxVertexNum]; //图的邻接矩阵类型 typedef struct vexsinfo //顶点信息 { int position; //景点的编号 char name[32]; //景点的名称 char introduction[256]; //景点的介绍 }vexsinfo; typedef struct mgraph //图结构信息

基于无向图的校园导游系统数据结构课程设计报告

重庆科技学院 课程设计报告 院(系):_电气与信息工程学院专业班级:计科普0902 设计地点(单位)____计算机基础自主学习中心I306___设计题目:_________校园导游咨询____________________

重庆科技学院 课程设计任务书设计题目:校园导游咨询

教研室主任:指导教师:向毅、陈刘奎、熊茜 2010年 12 月 20日

摘要 现代快节奏的生活使得都市人越来越渴望亲近自然,因此外出旅游现在被越来越多的都市人所看中,所以如何快速方便的找到我们想要的旅游景点的信息和最短路径就成了一个很重要的问题。 本设计基于图的结构,创建一个无向图,针对游客的实际需求,将重庆科技学院的景点编号、名称、介绍等信息放入到图的顶点当中并保存在景点文本文件当中,将两个景点的编号和它们之间的距离当作权值也保存到权值文本文件当中,利用迪杰斯特拉算法来求从一个景点到另一个景点的最短距离,利用strcmp();函数来查找景点,并显示出它的信息,从而解决了要查找景点信息和景点之间的最短路径的问题,最后按照显示屏上的提示进行相关的操作。 关键词:无向图、查找信息、最短距离、校园导游咨询

目录 摘要.................................................................................................................................................. II 1 设计内容和要求 (1) 1.1设计内容 (1) 1.1设计要求 (1) 2 概要设计 (2) 2.1 程序的模块图 (2) 2.2 主函数的概要设计 (3) 2.3 查找介绍函数的概要设计 (3) 2.4 查找最短路径函数的概要设计 (3) 2.5 退出函数的概要设计 (3) 3 详细设计 (4) 3.1 程序的流程图 (4) 3.2 主函数的详细设计 (5) 3.3 查找介绍函数的详细设计 (5) 3.4 查找最短路径函数的详细设计 (6) 3.5 退出函数的详细设计 (8) 3.6 数据结构的详细设计 (8) 4 软件测试 (10) 4.1 菜单的测试 (10) 4.2 查找景点简介的测试 (10) 4.3 查找两个景点之间的最短距离的测试 (11) 4.4 退出的测试 (11) 5 软件使用说明 (12) 6 致谢 (13) 7 参考文献 (14) 8 附录 (15)

校园导游咨询系统源代码

#include//standard library标准库头文件 #include//标注输入输出函数头文件 #include//字符函数头文件 #define MAX 10000 //定义路程最远距离符号常量无穷大 #define MAX_VERTEX_NUM 10//定义的景点/顶点数量符号常量最大顶点数10个 typedef struct //定义一个结构体用于表示路径 { int adj; //路径长度权值 }Ar,Ad[10][10];//起点和终点变量名 typedef struct //定义一个结构体用于存放景点信息 { char name[30];//景点名 int num;//景点编号 char introduction[100];//景点介绍 }infotype;//景点信息变量名 typedef struct//用来定义一个图 { infotype vexs[10]; Ad arcs; int vexnum,arcnum; }MGraph; MGraph b; MGraph InitGraph()//初始化图形 { MGraph G; int i; int j;

G.vexnum=10; G.arcnum=10; for(i=0;i

校园导游服务咨询系统C++(含源代码)说明书---2015

计算机科学与技术教研室 课程设计说明书(2014-2015学年第1学期) 注:成绩均用百分制。总成绩=平时成绩*20%+报告成绩*40%+演示与答辩成绩*40%

设计题目:校园附近门店服务查询系统 1、课程设计目的 (1)数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C++语言),自行实现一个较为完整的应用系统。 (2)通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。 (3)学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。 1)熟练掌握链表存储结构及其建立过程和常用操作; 2)学会自己调试程序的方法并掌握一定的技巧; 3)通过温习旧的知识,学习新知识,并提高分析和解决问题的能力。 2、课程设计正文 2.1概要设计 2.1.1 系统分析 该系统主要功能包括:增添服务信息、查询服务信息、修改服务信息、删除服务信息以及推荐路径等。 1.主程序模块:连接各种功能子模块,使用循环等待用户操作,完成程序的基本操作实现功能。 2.菜单显示模块:生成每个菜单的显示界面,使程序更简单清晰。 3.查询服务信息:用户在选择此功能模块后,按照屏幕上方提示的服务信息名称及其对应的编号,要求用户输入想要查询的服务信息的编号,回车后系统将在已存储的服务信息中进行匹配,若该景点信息尚未存储则将提示错误;若找到对应信息则系统将输出服务信息,显示于幕上方。 4.查询两服务信息最短路径:运用弗洛伊德算法,用户在选择此功能模块后,按照屏幕上方提示的服务信息名称及其对应的编号,要求用户输入起点和终点的编号,系统将在已存储的景点中进行匹配,若未找到所需查询的服务信息编号,系统将提示错误并要求用户再次输入。若输入信息合法,则回车后系统将给出最短路径,显示于屏幕上方。 5.删除服务信息:用户操作功能模块,由主程序直接调用的函数模块,将功能具象化,系统工具函数模块,先查找到所存在的服务信息,然后对用户希望删除的服务信息进行删除操作,若所要删除的服务信息不存在,则输出不存在此服务信息。

校园导游咨询程序

实验三:校园导游咨询 一、设计方案简介 设计一个校园导游程序,为来访的客人提供各种信息查询服务。 1)设计你所在学校的校园平面图, 2)为来访客人提供图中任意景点相关信息的查询。 3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 二、设计题目实现: 实际需求 1)设计你所在学校的校园平面图,所含景点不少于10个。以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息:以边表示路径,存放路径长度等相关信息。 2)为来访客人提供图中任意景点相关信息的查询。 3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 2)概要设计 1、校园全景一览图、显示出校园的平面图。 2、提供校园中任意景点问路查询,即求任意两个景点之间的所有路径。 3、提供校园图中多个景点的最佳访问路线查询,即求途径这过个景点的最佳(短)路径。 1.功能模块图; void Map();//校园地图 void CreateGraph();//创建图 void OutputPlace();//输出景点列表

void SearchPlace();//查询景点信息 void SearchPath();//查询最短路径 void Shortpath(int i);//计算最短路径 void Output(int sight1,int sight2);//输出函数 2.各个模块详细的功能描述。 Map();//显示校园整体的地图、包含学校各景点的详细位置 CreateGraph();//创建图、主要用来保存各景点信息 OutputPlace();//输出景点列表、供选择景点信息查询时使用 SearchPlace();//查询景点信息、景点的名称及介绍 SearchPath();//查询最短路径、两景点间最短距离 Shortpath(int i);//计算两景点间最短路径 Output(int sight1,int sight2);//输出两景点最短路径及信息 四.详细设计 1.功能函数的调用关系图 2.各功能函数的数据流程图 全局变量 Graph G; int path[NUM][NUM]; int D[NUM]; Main() CreateGraph() Map() SearchPlace() SearchPath() Outputplace() Shortpath(i); Output(i,j);

校园导游系统

西安郵電大学 数据结构课程设计报告题目:校园导游系统 院系名称: 专业名称: 班级: 学生姓名: 学号(8位): 指导教师: 设计起止时间:2013年12月16日~2013年12月27日

一. 设计目的 (1)了解二叉树特性、存储及其操作实现,在计算机领域运用二叉树编译代码实现一件简单实际的操作,熟练掌握二叉树的三种遍历递归与非递归的实现;(2)掌握图的两种遍历深度优先遍历和广度优先遍历,了解两者的区别和优缺点。学习在计算机中表示和处理图形结构以及绘制简单的地图并输出,熟练掌握图的逻辑结构和存储结构,学习用算法来解决实际问题; (3)掌握邻接链表和邻接矩阵的存储结构,以及这两者的区别,会用邻接链表和邻接数组两种方法来实现数据的存储与读取; (4)巩固文件的存储与读取部分,以便能够加深对文件读写的理解和更好的更熟练的实际应用; (5)学会用计算机解决实际问题,将生活中的问题数据化,然后输入到计算机中以便更快的解决,提高自己的实践能力以及自身的学习能力,加深对课本知识的理解和掌握。 二. 设计内容 <1> 设计题目:设计一个校园导游程序,并按各要求进行编程: 要求: (1)设计并显示学校的校园平面图, 地点(地点名称、地点介绍), 路线(公里数)均不少于10个。 (2)提供图中任意地点相关信息的查询。 (3)提供图中任意地点的问路查询: 1>任意两个地点之间的一条最短的简单路径; (最短路径长度——中转次数最少) 2>任意两个地点之间的一条最佳访问路线; (带权(公里数)最短路径长度) 3>任意两个地点之间的所有简单路径。 (4)提供图中所有地点的最佳布网方案; (5)增加新地点和路线、撤销旧地点和路线。 三.概要设计

校园导游系统42851

西安邮电大学 (计算机学院) 数据结构课程设计报告题目:校园导游系统 专业名称:网络工程 班级:网络150 学生姓名: 学号(8位): 指导教师:王春梅 设计起止时间:2016年12月26日—2016年12月30日

一. 题目要求 1、设计学校的校园平面图, 地点(地点名称、地点介绍)不少于10个。 2、提供图中任意地点相关信息的查询。 3、提供图中任意地点的问路查询: 1)任意两个地点之间的一条最短(中转最少)的简单路径;2)任意两个景点的最佳访问路线(带权)查询; 3)任意两个地点之间的所有路径。 4、地点和道路的扩充以及撤销; 地点基本信息的文件存储。(附加:加分题) 二.概要设计 1.功能模块的调用关系图 2.各个模块详细的功能描述。

1.首先,main()函数调用loge()函数,输出欢迎界面,然后调用showmenu()函数来选择用户所要进行的操作。其中showmenu()函数就是一个菜单供使用者来选择他所要进行的相关操作,比如信息的查询,最短路径查询之类。 2.browser()函数,用于输出校园平面图,给用户提供校园的景点分布状况,方便用户选择景点参观。 3.Search()函数,用于查询用户所选的景点信息,用户需要输入要查询的景点编号,函数会对编号进行判断,如果是合法输入,则在屏幕上输出该景点的相关信息,包括景点名字,景点的相关介绍,否则返回重新输入。 4.SearchAllpath()函数,用于查询用户所选的任意两个景点间的所有路径,用户需要输入要查询的起始景点编号,函数会对编号进行判断,如果是合法输入,用户需要输入要查询的终点景点编号,函数会对编号进行判断,如果是合法输入,则在屏幕上输出输查询的两个景点间的所有路径,否则返回重新输入。函数使用深度遍历DeepFirstSeach()查找路径。 5.Wellway()函数,用于查询用户所选的任意两个景点间的最短路径,用户需要输入要查询的起始景点

校园导游系统数据结构图

.- 西安郵電學院 数据结构实验报告 题目:校园导游系统 院系名称:计算机学院 专业名称:计算机科学与技术 班级:1006 学生姓名:**** 学号(8位):***** 指导教师:****** 设计起止时间:2011年12月12日~2011年12月16日

.- 一.题目要求 1、设计学校的校园平面图, 地点(地点名称、地点介绍)不少于10个。 2、提供图中任意地点相关信息的查询。 3、提供图中任意地点的问路查询: 1)任意两个地点之间的一条最短(中转最少)的简单路径; 2)任意两个景点的最佳访问路线(带权)查询; 3)任意两个地点之间的所有路径。 4、地点和道路的扩充以及撤销; 地点基本信息的文件存储。(附加:加分题) 二.概要设计 1.功能模块的调用关系图 2.各个模块详细的功能描述。 1.首先,main()函数调用loge()函数,输出欢迎界面,然后调用showmenu()函数来选择用户所要进行的操作。其中showmenu()函数就是一个菜单供使用者来选择他所要进行的相关操作,比如信息的查询,最短路径查询之类。 2.browser()函数,用于输出校园平面图,给用户提供校园的景点分布状况,方便用户选择景点参观。 3.Search()函数,用于查询用户所选的景点信息,用户需要输入要查询的景点编号,函数会对编号进行判断,如果是合法输入,则在屏幕上输出该景点的相关信息,包括景点名字,景点的相关介绍,否则返回重新输入。 4.SearchAllpath()函数,用于查询用户所选的任意两个景点间的所有路径,用户需要输入要查询的起始景点编号,函数会对编号进行判断,如果是合法输入,用户需要输入要查询的终点景点编号,函数会对编号进行判断,如果是合法输入,则在屏幕上输出输查询的两个景点间的所有路径,否则返回重新输入。函数使用深度遍历DeepFirstSeach()查找路径。 5.Wellway()函数,用于查询用户所选的任意两个景点间的最短路径,用户需要输入要查询的起始景点

校园导游系统[新版]

校园导游系统[新版] 校园导游系统 // 校园导游咨询 /*[问题描述] 设计一个校园导游程序,为来访的客人提供各种信息查询服务。 [基本要求] (1)设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。 (2)为来访客人提供图中任意景点相关信息的查询。 (3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 [实现提示] 一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。 一需求分析 1从武汉理工大学余家头校区平面图中选取10个大家熟悉的景点,抽象成一个无向带权图(如图所示)。以图中顶点表示景点,边上的权值表示两地的距离。 2本程序的目的是为用户提供路径咨询和景点查询。根据用户指定的始点和终点输出相应路径或者根据用户指定的景点输出景点的信息。 二、概要设计 1本文采用的数据结构 */ /*包含头文件*/

// 数据结构课程设计.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include //定义符号常量 #define INT_MAX 10000 #define n 10 //定义全局变量 int cost[n][n];// 边的值 int shortest[n][n];//两点间的最短距离 int path[n][n];// 经过的景点 void introduce(); //自定义函数原型说明int shortestdistance(); void floyed(); void display(int i,int j); /* (1)景点信息查询 (2)两景点的最短距离 (3)两个景点之间的路径 三、详细设计 */ void main() //主函数 { int i,j; char k; for(i=0;i<=n;i++) for(j=0;j<=n;j++) cost[i][j]=INT_MAX; cost[1][3]=cost[3][1]=200; cost[1][2]=cost[2][1]=50; cost[2][3]=cost[3][2]=150; cost[2][4]=cost[4][2]=120; cost[1][4]=cost[4][1]=150;

C语言校园导游系统课程设计

海南大学 课程名称数据结构(基于C语言)课程设计题目校园导游程序的设计与实现 院系_信息科学技术学院____ 班级__通信工程B班_ 学生姓名___史兵全________ 指导教师吴泽辉 日期_ 2014.12.15.-2015.1.7__ 软件专题训练任务书

校园导游程序 一、简介 1.设计目的:通过校园导游程序的设计与实现,熟练掌握图型结构在实际问题中的应用。 2.问题的描述:设计一个校园模拟导游程序,为新生或来访的客人通过与机器的“对话“提供最短路径的信息查询服务。1.任意

选取n个场所,构成一个无向带权图,图中顶点表示场所,边上的权值表示两点间的距离,图的存储结构可采用带权的邻接矩阵。 2.咨询以用户和计算机的对话方式进行,由用户输入起始点和终点,输出信息:最短路径是多少?并指出所经过的场所。 3、计算并记录从校门口到各个场所的最短路径,即求单源点到其它各个场所的最短路径。 4、提供校园中任意场所的问路查询,即求任意两点之间的最短路径。 二、数据结构的设计: 由于各个场所通过校园中的道路相连,各个场所和连接它们的道路构成了整个校园的地理环境,所以使用图这种数据结构对他们去进行描述。以图中的顶点表示校园内各个场所,应包含场所名称、代号、简介等信息;以边表示连接各个场所的道路,应包含路径的长度等信息;顶点和边均使用结构体定义,整个图的数据结构采用教材中介绍的带权的邻接矩阵方法。 二、数据结构的设计: typedef struct ArCell { int adj; //路径长度 }ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct //图中顶点表示主要景点,存放景点的序号、名

(003)(校园导游系统)c语言

校园导游咨询 一、目的 1、对自己学过的知识进一步的加深理解,对数据结构的算法思想要有更深的理解。 2、通过课程设计,学会通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。 3、学会综合运用数据结构课程中学到的数据结构和算法,如图的存储结构,数组,迪杰斯特拉算法和Floyd算法等自行实现一个较为完整的应用系统的设计与开发。 二、需求分析 1、功能需求 (1)在菜单中显示校园景点地图。 (2)能够查找任意景点的路径。 (3)能够自动查找用户键入始点景点和终点景点的最短路径。 (4)用户能够查询任意景点的景点信息。 2、输入 根据菜单提示键入相应的数字键已完成相应的操作。例如:在菜单界面中键入数字3,再根据系统提示键入始点和终点对应的编号,系统便会输出相应的路径。 3、输出 程序将根据用户键入的数字键,调用相应函数,完成查找过程,并将结果输出到屏幕。 三、概要设计 1、变量定义 typedef struct //图中顶点表示主要景点,存放景点的编号、名称、简介 { char name[30]; int num; char introduction[100];//简介 }infotype; typedef struct ArCell //定义结构体变量来储存路径长度 { int adj; //路径长度 }ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM

typedef struct //景点信息的结构体定义: { infotype vexs[MAX_VERTEX_NUM]; AdjMatrix arcs; int vexnum,arcnum; }MGraph; MGraph b; 2.函数模块 void cmd( );//菜单选择模块 MGraph InitGraph( );//赋值函数 void Menu(void);//菜单函数 void Browser(MGraph *G);//浏览景点信息的函数 void ShortestPath_DIJ(MGraph * G);//迪杰斯特拉算法void Floyd(MGraph *G);//Floyd 算法 void Search(MGraph *G);//查找景点信息函 ()(MGraph *G);//初始化图形 void print(MGraph *G);//校园全景显示函数 3、流程图 四、详细设计

校园导游系统代码(数据结构)

一、问题描述 设计一个校园模拟导游程序,为新生或来访的客人通过与机器的“对话“提供最短路径的信息查询服务。 二、基本要求 1.任意选取n个场所,构成一个无向带权图,图中顶点表示场所,边上的权值表示两点间的距离,图的存储结构可采用带权的邻接矩阵。 2.咨询以用户和计算机的对话方式进行,由用户输入起始点和终点,输出信息:最短路径是多少?并指出所经过的场所。 3、计算并记录从校门口到各个场所的最短路径,即求单源点到其它各个场所的最短路径。 4、提供校园中任意场所的问路查询,即求任意两点之间的最短路径。 三、测试数据 学生根据实际情况指定 #define INFINITY10000 /*无穷大*/ #define MAX_VERTEX_NUM 40 #define MAX 40 #include #include #include #include typedef struct ArCell { int adj; //路径长度 }ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct //图中顶点表示主要景点,存放景点的编号、名称、简介等信息, { char name[30]; int num; char introduction[200];//简介 }infotype; typedef struct {

infotype vexs[MAX_VERTEX_NUM];//景点 AdjMatrix arcs;//路径数组 int vexnum,arcnum;//景点数,路径长度记录 }MGraph; MGraph b;//全局变量 void cmd(void);//在主函数中用来调用其他应用子函数的函数声明 MGraph InitGraph(void);//用来构造学校地图的子函数返回MGraph类型 void Menu(void);//菜单函数; void Browser(MGraph *G);//调用MGraph类型的地址,进行 void ShortestPath_DIJ(MGraph * G);//迪杰斯特拉算法求最短路径的子函数 void Floyd(MGraph *G);//佛洛伊德算法 void Search(MGraph *G);//寻找要查询的景点,并输出该景点的信息 void browse_view_distribute();//查看景点分布图 void tou(MGraph *G);//景点列表 void panduan(); //void Exit();//退出 int LocateV ex(MGraph *G,char* v);//定点位置 MGraph * CreatUDN(MGraph *G);////初始化图形,接受用户输入 void print(MGraph *G);//打印输出子函数 /******************************************************/ void main(void) { cmd();//用该函数来调用其他需要用到的函数 } /******************************************************/ void cmd(void)//用来调用其他需要用到的函数的子函数 { int i; b=InitGraph();//构造校园地图 Browser(&b);//Menu();//调用菜单函数 scanf("%d",&i); while(i!=4) { switch(i) { case 1:system("cls");/*ShortestPath_DIJ(&b);*/browse_view_distribute();Browser(&b);break; case 2:system("cls");tou(&b);Floyd(&b);Browser(&b);break; case 3:system("cls");tou(&b);Search(&b);Browser(&b);break; case 4:exit(0);break; default:break; }

相关文档
最新文档