【无标题】数据结构与算法课程设计公园导游图
目 录
1 需求分析........................................................ 1
1.1问题描述..................................................... 1
1.2基本要求..................................................... 1
2 总体设计........................................................ 2
2.1系统功能模块................................................. 2
2.2数据结构..................................................... 3
2.3程序模块..................................................... 3
2.3.1景点类中成员函数的功能及相关说明......................... 3
2.3.2景点信息修改类功能模块与对应的函数相关说明............... 3
2.4各模块之间的调用关系以及算法设计............................. 4
2.4.1 查看景点信息功能......................................... 4
2.4.2遍历景点功能............................................. 4
2.4.3打印功能................................................. 4
2.4.4计算最短路径功能......................................... 4
2.4.5修改功能................................................. 5
3 详细设计........................................................ 6
3.1查看景点信息................................................. 6
3.2遍历景点信息................................................. 6
3.3查看公园全图信息............................................. 7
3.4到达指定景点信息............................................. 7
4系统测试......................................................... 8
4.1系统主界面模块测试........................................... 8
4.2景点查看模块测试............................................. 9
4.3遍历景点模块测试............................................ 11
4.4查看公园全图模块测试........................................ 12
4.5到达指定景点模块测试........................................ 13
4.6返回登陆界面模块测试........................................ 14
4.7管理者系统模块测试.......................................... 14
4.8退出系统模块测试............................................ 15
5 结论与心得..................................................... 16
参考文献......................................................... 17
附:源码......................................................... 18
1 需求分析
(1)登陆系统:先输入账号名称,判断是否是管理者,来登入不同的系统。
(3)景点遍历:选择任意景点为起点,实现对所有景点最短路径遍历。
(6)管理系统:判断是管理者之后,登入管理者系统(输入顶点和边数,更改地图)。
1.1问题描述
设计一个导游系统方便游客更好的浏览公园,实现登陆系统、景点介绍、景点遍历、公园地图、距离计算、管理系统、退出系统等功能。并且按照题目要求设计程序,满足游客的各项需求,并且提前储存好需要的景点信息。
1.2基本要求
(5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
2 总体设计
说明本程序中用到的所有抽象数据类型的定义。主程序的流程以及各程序模块之间的层次(调用)关系。
2.1系统功能模块
2.2数据结构
变量名 |
数据类型 |
长度 |
允许为空 |
说明 |
MaxVertexNum |
Int |
100 |
NULL |
最大值 |
MaxCost |
Int |
9999 |
NULL |
最大值 |
VertexType |
Char |
4 |
NULL |
类型总称 |
EdgeType |
Int |
4 |
NULL |
类型总称 |
Mgraph |
Struct |
NULL |
NULL |
类型总称 |
2.3程序模块
2.3.1景点类中成员函数的功能及相关说明
函数 |
类型 |
功能 |
1、Floyd() |
void |
指定景点距离 |
2、opfloy() |
void |
输出指定距离 |
3、hamanzi() 4、look() 5、printph() 6、menu() |
void void void void |
遍历景点 查看景点信息 打印公园图 菜单界面 |
2.3.2景点信息修改类功能模块与对应的函数相关说明
函数 |
类型 |
功能 |
1、 CreateMGraph() 2、main() |
void int |
建立图的函数 调用各函数 |
2.4各模块之间的调用关系以及算法设计
2.4.1 查看景点信息功能
查看景点信息void look()的功能,用来查看所有景点信息的函数,通过提示即可查看相应景点的信息。查看函数,如表2-4所示。
定义 |
类型 |
功能 |
look() |
void |
查看景点信息 |
2.4.2遍历景点功能
遍历所有景点void hamanzi()的功能,通过用户输入某景点作为起点,开始遍历所有景点,如表2-5所示。
定义 |
类型 |
功能 |
hamanzi() |
void |
遍历所有景点 |
2.4.3打印功能
定义一个void printph()函数,通过调用此函数,达到打印公园简易地图的目的,方便游客更好了解公园的路线和构造。打印函数,如表2-6所示。
定义 |
类型 |
功能 |
printph() |
viod |
打印景点信息 |
定义 |
类型 |
功能 |
floyd() opfloy() |
void void |
计算指定距离 输出指定距离 |
2.4.5修改功能
在进入管理者系统后,可进入到景点修改功能界面,用户可以修改景点个数和各景点之间的边数。修改函数,如表2-8所示。
定义 |
类型 |
功能 |
CreateMGraph() |
void |
修改景点信息 |
2.4.4计算最短路径功能
定义两个函数,一个函数void floyd()用来算出指定距离,另一个函数void opfloy()是用来输出指定的距离,两个一起使用就可以算出指定景点之间的最短距离。如表2-7所示。
3 详细设计
3.1查看景点信息
3.2遍历景点信息
遍历景点函数void hamanzi(),用户输入景点的起点序号,系统判断序号是否正确,是则输出遍历结果,否则提示用户“该景点不存在”并让用户任意输入一个数返回非管理者菜单页面。如图3-2所示。
图3-1查询景点信息模块流程图 |
图3-2修改信息模块流程图 |
3.3查看公园全图信息
查看公园全图函数void printph(),用户输入3调用查看公园全图函数,系统输出公园地图。查看公园全图信息流程图,如图3-3所示。
3.4到达指定景点信息
到达指定景点函数void opfloy(),输入4,调用到达指定景点函数,按照系统提示输入用户所在位置以及将要去位置,在确认后输出用户所在位置与将去位置的最近距离。到达指定景点流程图,如图3-4所示。
图3-3查看公园全图信息模块流 |
图3-4到达指定景点模块流程图 |
4 系统测试
4.1系统主界面模块测试
运行程序“guidance.exe”,进入主界面(主菜单)。测试结果如图4-1所示,
登入非管理者系统菜单界面如图4-2,所示登入管理者系统菜单页面如图4-3所示。
4.2景点查看模块测试
4.3遍历景点模块测试
在非管理者菜单输入2进入景点遍历模块,再输入游客想要从哪个景点开始浏览,系统将会计算出最合理的路线让游客在不重复游览同一个景点的情况下,浏览完所有的景点。
4.4查看公园全图模块测试
在非管理者菜单输入3进入查看公园全图模块,屏幕就会显示公园地图的大概样子,按任意键就可返回主菜单界面。查看公园全图模块模块测试图,如图4-13所示。
4.5到达指定景点模块测试
在非管理者菜单输入4进入到达指定景点管理模块,再根据系统提示输入景点代号使用功能,进入确认景点信息界面,再输入景点代号,则输出相应景点间最近距离。到达指定景点模块测试图,如图4-14所示。
4.6返回登陆界面模块测试
在非管理者菜单输入5进入返回登陆界面模块。返回登陆界面模块测试图, 如图4-15 所示。
4.7管理者系统模块测试
在主菜单输入用户名为password进入管理者系统模块,再根据系统提示输入相关信息。管理者系统模块测试图,如图4-16所示。
4.8退出系统模块测试
在非管理者菜单输入0使用退出系统功能,退出系统模块测试图,如图4-17所示。
5 结论与心得
时间真的如轮一样在飞转,一周的实训又一次即将结束,可是,感觉仿佛只过去了一天。
课程设计即将在今天结束,从一开始拿到任务计划书的茫然,到后来开始自己慢慢摸索,再到整个程序的完成,最后到今天的这份报告,一个星期一路走来,感觉自己在程序设计方面不能说收获颇丰但至少没有白白浪费这一个星期的时间。虽然在编程过程中遇到了很多问题,但我还是一一克服了,在这过程中,我对程序设计有了新的认识。同时也是对课本知识的巩固和加强,平时看课本时,有些问题就不是很能理解,做完课程设计,那些问题就迎刃而解了。通过这次课程设计,我还深刻的体会到了实践的重要性!纸上得来终觉浅,绝知此事要躬行。老师课堂上讲的方法,如果不上机实践,就永远不可能转化为自己的能力。编程就要靠自己多懂脑,多琢磨。当一个问题被解决时那种豁然开朗的感觉,真的很好。
参考文献
[1]任雪萍,王立波,赵葆华.融入PIC-CDIO理念的“数据结构”课程教学改革[].计算机教育,2012 (12) .
[2]查建中.面向经济全球化的工程教育改革战略:兼谈CDIO工程教育模式实施[J].计算机教育,2010 (11) .
[3]朱战立,张玉祥.C++面向对象程序设计[M].北京:人民邮电出版社,2009.
[4]皮德常.C++程序设计教程[M].2版.北京:机械工业出版社,2014.
[5]董正言,张聪.面向对象程序设计)(C++版) [M].北京:清华大学出版社,2010.
[6]钱能.C++程序设计教程(修订版)[M].北京:清华大学出版社,2009.
[7]朱立华,俞琼.面向对象程序设计及C++[M].2版.北京:人民邮电出版社,2012.
[8]王挺,周会平,等.C++面向程序设计 [M].2版.北京:清华大学出版社,2010.
附:源码
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <windows.h>
#define MaxVertexNum 100
#define MaxCost 9999
using namespace std;
typedef char VertexType;
typedef int EdgeType;
typedef struct {
VertexType vexs[MaxVertexNum];
/* 存放顶点信息 */
EdgeType edges[MaxVertexNum][MaxVertexNum];
/* 存放邻接关系 */
int n,e; /*顶点数和边数*/
} Mgraph;
void menu();
//主菜单界面
void floyd(Mgraph G,int D[MaxVertexNum][MaxVertexNum],int P[MaxVertexNum][MaxVertexNum]);
//指定距离的弗洛伊德
void opfloy(int n,int D[MaxVertexNum][MaxVertexNum],int P[MaxVertexNum][MaxVertexNum]);
//指定距离的输出
void hamanzi(Mgraph *G);
//从起点开始遍历的函数。
void CreateMGraph(Mgraph *G);
//建立图的函数
void printph();
void look();
int main() {
Mgraph G;
int n,D[MaxVertexNum][MaxVertexNum],P[MaxVertexNum][MaxVertexNum];
int a;
char b[100];
char user[20],mana[20]="password",*q,*p,m=0;//依次是登录者,管理者,指针来判断登录账号是否是管理者。
system("color f0");
L:
printf("\t ***************************************************\n");
printf("\t请登录(输入你的用户名):");
scanf("%s",user);
p=user;
q=mana;
while(*p==*q) { //用来判断登陆者是否为管理者的部分
m=1;
p++;
q++;
if(*q=='\0')
break;
}
if(*p!=*q)
m=0;
/******************************************************************/
if(m==1) {
printf("");
CreateMGraph(&G);
system("cls");
L1:
menu();
printf("请输入您的选项\n");
scanf("%d",&a);
switch(a) {
case 1:
look();
system("cls");
a=35421568;
goto L1;
case 2:
hamanzi(&G);
system("pause");
system("cls");
a=35421568;
goto L1;
case 3:
printph();
system("pause");
system("cls");
a=35421568;
goto L1;
case 4:
floyd(G,D,P);
opfloy(G.n,D,P);
system("pause");
system("cls");
a=35421568;
goto L1;
case 0:
break;
default:
printf("您输入有误,请重新输入!!!\n");
system("pause");
gets(b);
a=35421568;
system("cls");
goto L1;
}
} else {
//CreateMGraph(&G);
system("cls");
L3:
printf("\t\t\t您不是管理者无法对景点信息进行修改.");
printf("\n**********************************************************************************\n");
printf("\t\t\t--------公园导游系统-------\n");
printf("\t\t\t 1:查看景点介绍\n");
printf("\t\t\t 2:遍历全部景点\n");
printf("\t\t\t 3:查看公园的全图\n");
printf("\t\t\t 4:去指定的景点\n");
printf("\t\t\t 5:返回登陆界面\n");
printf("\t\t\t 0:退出\n");
printf("**********************************************************************************\n");
printf("请输入您的选项\n");
scanf("%d",&a);
switch(a) {
case 1:
look();
system("cls");
a=35421568;
goto L3;
case 2:
hamanzi(&G);
system("pause");
system("cls");
a=35421568;
goto L3;
case 3:
printph();
system("pause");
system("cls");
a=35421568;
goto L3;
case 4:
floyd(G,D,P);
opfloy(G.n,D,P);
system("pause");
system("cls");
a=35421568;
goto L3;
case 5:
a=35421568;
system("cls");
goto L;
case 0:
break;
default:
printf("您输入有误,请重新输入!!!\n");
system("pause");
gets(b);
a=35421568;
system("cls");
goto L3;
}
}
return 0;
}
void menu() {
printf("**********************************************************************************\n");
printf("\t\t\t--------公园导游系统-------\n");
printf("\t\t\t 1:查看景点介绍\n");
printf("\t\t\t 2:遍历全部景点\n");
printf("\t\t\t 3:查看公园的全图\n");
printf("\t\t\t 4:去指定的景点\n");
printf("\t\t\t 0:退出\n");
printf("**********************************************************************************\n");
}
void floyd(Mgraph G,int D[MaxVertexNum][MaxVertexNum],int P[MaxVertexNum][MaxVertexNum]) {
int i,j,k;
for(i=0; i<G.n; i++)
for(j=0; j<G.n; j++) {
D[i][j]=G.edges[i][j];
if ((D[i][j]<MaxCost)&&(D[i][j]!=0))
P[i][j]=j;
else
P[i][j]=-1;
}
for(i=0; i<G.n; i++)
D[i][i]=0;
for(k=0; k<G.n; k++)
for(i=0; i<G.n; i++)
for(j=0; j<G.n; j++)
if (D[i][j]>D[i][k]+D[k][j]) {
D[i][j]=D[i][k]+D[k][j];
P[i][j]=P[i][k];
/* i到j的路径上i的后继顶点改为i到k路径上i的后继顶点 */
}
}
Void opfloy(int n,int D[MaxVertexNum][MaxVertexNum],int P[MaxVertexNum][MaxVertexNum]) {
int i=0,j=0,m,p,k,c,min,next,a,b;
printf("请输入您现在的位置和将去的位置如m,p\n");
scanf("%d,%d",&a,&b);
printf("请确认您现在的位置和将去的位置如(m,p)\n");
scanf("%d,%d",&m,&p);
i=m;
j=p;
if (j!=i) {
printf("%d到%d的最近距离为:\n",a,b);
printf("%d米",i/5000);
next=P[i][j];
while (next!=-1) {
printf("->%d",next);
next=P[next][j];
}
if (D[i][j]==MaxCost)
printf("->%d",j);
printf("\t%d",D[i][j]);
}
}
void hamanzi(Mgraph *G) {
int i,j,m,wei[5],sum=0,min=100,end[5],zui[6];
int q,w,t,r;
for(i=1; i<5; i++) {
end[i]=0;
}
printf("请输入你的起点。\n");
scanf("%d",&m);
if(m>5) {
printf("该景点不存在!!!\n");
} else {
for(q=0; q<5; q++) {
end[m]=1;
end[q]=1;
for(w=0; w<5; w++) {
end[w]=1;
for(t=0; t<5; t++) {
end[t]=1;
for(r=0; r<5; r++) {
end[r]=1;
sum=G->edges[m][q]+G->edges[q][w]+G->edges[w][t]+G->edges[t][r]+G->edges[r][m];
end[m]=1;
end[q]=1;
end[w]=1;
end[t]=1;
end[r]=1;
if(min>sum&&end[0]==1) {
if(end[1]==1&&end[2]==1) {
if(end[3]==1&&end[4]==1) {
min=sum;
zui[1]=q;
zui[2]=w;
zui[3]=t;
zui[4]=r;
zui[5]=m;
}
}
}
sum=200;
end[r]=0;
}
end[t]=0;
}
end[w]=0;
}
end[q]=0;
}
printf("最小为:%d\n",min);
printf("应按照如下浏览:\n");
printf("%d",m);
for(i=1; i<6; i++) {
printf("->%d",zui[i]);
}
}
}
void CreateMGraph(Mgraph *G) {
int i,j,k,w;
printf("请输入顶点数和边数(输入格式为:顶点数,边数):\n") ;
scanf("%d,%d",&(G->n),&(G->e));
printf("请输入顶点信息:\n");
for(i=0; i<G->n; i++)
scanf("\n%c",&(G->vexs[i]));
for(i=0; i<G->n; i++)
for(j=0; j<G->n; j++)
G->edges[i][j]=MaxCost;
printf("请输入每条边对应的两个顶点的序号(输入格式为:i,j,w):\n");
for(k=0; k<G->e; k++) {
scanf("%d,%d,%d",&i,&j,&w);
G->edges[i][j]=w;
}
}
void printph() {
printf("公园地图为:\n");
printf("\t\t\t\t0* * * * * * 1\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t* * * *\n");
printf("\t\t\t\t* * * *\n");
printf("\t\t\t\t* * * *\n");
printf("\t\t\t\t* * * *\n");
printf("\t\t\t\t* 2 *\n");
printf("\t\t\t\t* * *\n");
printf("\t\t\t\t* * *\n");
printf("\t\t\t\t* * *\n");
printf("\t\t\t\t* * *\n");
printf("\t\t\t\t* * *\n");
printf("\t\t\t\t4* * * * * * 3\n");
}
void look() {
int a;
char b[100];
system("cls");
L2:
printf("\t\t\t 0:天下第一桥\n");
printf("\t\t\t 1:天门山玻璃栈道\n");
printf("\t\t\t 2:百猴谷\n");
printf("\t\t\t 3:龙泉峡\n");
printf("\t\t\t 4:黄龙洞\n");
printf("\t\t\t 5:退回主界面\n");
printf("请输入您的选择。\n");
scanf("%d",&a);
switch(a) {
case 0:
printf("天下第一桥是一天然石桥,位于张家界袁家界景区,处砂刀沟风景区一带,属张家界精华景点。\n大自然的鬼斧神工,将一块厚约5米的天然石板,横空“架”在两座山峰之上,把东西两峰连接。\n桥高350米,是张家界最高的石桥。高度、跨度和惊险均为天下罕见,故称“天下第一桥”。\n桥长20米,宽仅1.5至3米不等,但较平坦,可通行人。\n桥上苍松挺拔,桥下云雾荡漾,万丈深渊。\n四周悬崖绝壁,水滴飞溅。踏上桥面,使人有凌空御风之感。\n手扶铁栏杆,仰视,青峰飘渺于云霭缭绕之中;\n俯瞰,奇峰如笋群,岩壑深谷中阵阵烟岚泛起,散而复聚。\n这里是张家界风景一绝,是大自然的一个奇迹。\n");
system("pause");
system("cls");
a=65944899;
goto L2;
case 1:
printf("天门山玻璃栈道,悬于天门山顶西线,长60米,宽1.6米,最高处海拔1430米。\n是湖南省张家界天门山景区继悬于峭壁之上的鬼谷栈道、凭空伸出的玻璃眺望台。\n");
system("pause");
system("cls");
a=65944899;
goto L2;
case 2:
printf("百猴谷位于张家界国家森林公园西北部,全长5.8公里,因有猴群居住此地而得名。\n峡谷内林木繁茂、奇峰异石、流泉飞瀑,景色极好。\n核心景点集中在土匪寨、天火寨、八仙山,被誉为张家界最美的峡谷,是户外徒步爱好者青睐之地。\n");
system("pause");
system("cls");
a=65944899;
goto L2;
case 3:
printf("龙泉峡,因拥有龙泉瀑布而得名。\n峡谷之内常年清风悠悠故又名清风峡,位于武陵源区中湖乡野鸡铺村,属张家界自然保护区范畴,为未开放地带。\n");
system("pause");
system("cls");
a=65944899;
goto L2;
case 4:
printf("黄龙洞景区位于湖南省张家界市核心景区武陵源风景名胜区内,属典型的喀斯特岩溶地貌。\n因享有“世界溶洞奇观”“世界溶洞全能冠军”“中国最美旅游溶洞”等顶级荣誉而名震全球。\n");
system("pause");
system("cls");
a=65944899;
goto L2;
case 5:
break;
default:
printf("您的输入有误!!!");
system("pause");
gets(b);
system("cls");
a=65944899;
goto L2;
}
}
【无标题】数据结构与算法课程设计公园导游图相关推荐
- 数据结构c语言程序设计报告,数据结构与算法课程设计报告模版.doc
数据结构与算法课程设计报告模版.doc 数据结构与算法课程设计报告题 目本科生导师制问题与家族关系查询系统院 (系) 信息科学与工程 专业班级 计算机应用技术1301班 学生姓名 顾 泉 学 号 20 ...
- 数据结构与算法课程设计之五子棋(人机)
数据结构与算法课程设计之五子棋(人机) 五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏.通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜. 这是 ...
- 数据结构与算法课程设计大作业
考 核 要 求 课程编号:400802010 课程名称:数据结构与算法课程设计考试形式:大作业 大作业1-9见我的下载 里面包含多个版本的设计 文件有cpp文件设计文档总结等 一.设计 ...
- 数据结构与算法课程设计——C语言《职员薪资查询系统》
数据结构与算法课程设计--C语言<职员薪资查询系统> 温馨提示:课设要自己去操作,自己写代码,可以借鉴他人代码,学习思路和一些操作,切不可完全抄袭!!! 总体说明:设计一个职员薪资查询系统 ...
- 数据结构计算机专业教学计划编制,数据结构与算法课程设计报告--教学计划编制...
数据结构与算法课程设计报告--教学计划编制 数据结构与算法课程设计报告题目教学计划编制目录一.需求分析311系统概述3111研究背景3112研究意义及目的312具体分析4121功能需求分析4122运行 ...
- 数据结构与算法课程设计
基于c语言的数据结构课程设计 选题:二手车信息管理系统 课程设计要求如下: 1.每人选择一个题目,独立完成(可以自拟,题目不得重复) 2.课程设计要求必须用到数据结构,即线性存储或非线性存储.必须用 ...
- 数据结构与算法课程设计C语言之体育器材管理系统
#include <stdio.h> #include <stdlib.h> #include <string.h>//单链表数据类型/ typedef struc ...
- 公园导游图c语言课程设计,公园导游图.doc
公园导游图 课 程 设 计 报 告 课程名称 数据结构 课题名称 公园导游图 专 业 计算机科学与技术 班 级 计算机070 学 号 姓 名 指导教师 2009年 10月 26日 湖南工程学院 课 程 ...
- 数据结构与算法 课程设计报告——学生信息管理系统
一.概述 1.开发背景 使用计算机对学生信息进行管理,拥有手工管理所无法比拟的优点.例如:检索迅速.查找方便.可靠性高.存储量大.成本低等.这些优点能够极大地提高学生信息的效率,也是管理科学化.正规化 ...
最新文章
- lisp 焊缝_超声波焊接工具性能参数求解与参数图绘制
- 合并单元格两行_Excel合并单元格的麻烦事你都经历了哪些?来一起远离那些麻烦事...
- 使用describe命令进行Kubernetes pod错误排查
- javascript中的Base64.UTF8编码与解码详解
- jupyternotebook运行python_jupyter notebook参数化运行python方式
- rotateleft_Java Integer类rotateLeft()方法与示例
- vs2019 发行说明_如何计算发行说明
- Spring Data Jpa 审计功能
- 微信小程序 | 微信公众平台SpringBoot开发实例 │ 开发一个简易的个人微信公众号
- 2021-07-02
- 天津理工大学嵌入式实验 Fritzing电路图连线,自定义芯片原理图方法
- 【PaddlePaddle论文复现】U-GAT-IT: 基于GAN的新型无监督图像转换
- mac怎么用u盘装系统?配备Apple T2 芯片的Mac电脑如何使用U盘装系统?
- 72个嵌入式技术网站
- 上海户口中的计算机水平评分,上海落户打分细则
- 微信机器人网页版接口详解
- ceph-pg状态详解
- PHP的ES入门(三)—— 数据查询
- mysql数据库批量替换字符串_数据库全文搜索批量替换字符串
- java读取excel2010文件_java的poi技术读取Excel[2003-2007,2010]